From 0ece153a0ee5ed5603fd804f260764c795d8280f Mon Sep 17 00:00:00 2001 From: Danny Kopping Date: Wed, 24 Sep 2025 09:05:04 +0200 Subject: [PATCH] chore: define `aibridged` protobuf specification (#19795) --- Makefile | 10 + aibridged/proto/aibridged.pb.go | 1422 ++++++++++++++++++++++++++ aibridged/proto/aibridged.proto | 114 +++ aibridged/proto/aibridged_drpc.pb.go | 421 ++++++++ 4 files changed, 1967 insertions(+) create mode 100644 aibridged/proto/aibridged.pb.go create mode 100644 aibridged/proto/aibridged.proto create mode 100644 aibridged/proto/aibridged_drpc.pb.go diff --git a/Makefile b/Makefile index 3974966836..8b506df6ed 100644 --- a/Makefile +++ b/Makefile @@ -636,6 +636,7 @@ GEN_FILES := \ provisionersdk/proto/provisioner.pb.go \ provisionerd/proto/provisionerd.pb.go \ vpn/vpn.pb.go \ + aibridged/proto/aibridged.pb.go \ $(DB_GEN_FILES) \ $(SITE_GEN_FILES) \ coderd/rbac/object_gen.go \ @@ -683,6 +684,7 @@ gen/mark-fresh: provisionersdk/proto/provisioner.pb.go \ provisionerd/proto/provisionerd.pb.go \ vpn/vpn.pb.go \ + aibridged/proto/aibridged.pb.go \ coderd/database/dump.sql \ $(DB_GEN_FILES) \ site/src/api/typesGenerated.ts \ @@ -801,6 +803,14 @@ vpn/vpn.pb.go: vpn/vpn.proto --go_opt=paths=source_relative \ ./vpn/vpn.proto +aibridged/proto/aibridged.pb.go: aibridged/proto/aibridged.proto + protoc \ + --go_out=. \ + --go_opt=paths=source_relative \ + --go-drpc_out=. \ + --go-drpc_opt=paths=source_relative \ + ./aibridged/proto/aibridged.proto + site/src/api/typesGenerated.ts: site/node_modules/.installed $(wildcard scripts/apitypings/*) $(shell find ./codersdk $(FIND_EXCLUSIONS) -type f -name '*.go') # -C sets the directory for the go run command go run -C ./scripts/apitypings main.go > $@ diff --git a/aibridged/proto/aibridged.pb.go b/aibridged/proto/aibridged.pb.go new file mode 100644 index 0000000000..cef558f8aa --- /dev/null +++ b/aibridged/proto/aibridged.pb.go @@ -0,0 +1,1422 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.30.0 +// protoc v4.23.4 +// source: aibridged/proto/aibridged.proto + +package proto + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + anypb "google.golang.org/protobuf/types/known/anypb" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type RecordInterceptionRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // UUID. + InitiatorId string `protobuf:"bytes,2,opt,name=initiator_id,json=initiatorId,proto3" json:"initiator_id,omitempty"` // UUID. + Provider string `protobuf:"bytes,3,opt,name=provider,proto3" json:"provider,omitempty"` + Model string `protobuf:"bytes,4,opt,name=model,proto3" json:"model,omitempty"` + Metadata map[string]*anypb.Any `protobuf:"bytes,5,rep,name=metadata,proto3" json:"metadata,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + StartedAt *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=started_at,json=startedAt,proto3" json:"started_at,omitempty"` +} + +func (x *RecordInterceptionRequest) Reset() { + *x = RecordInterceptionRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_aibridged_proto_aibridged_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RecordInterceptionRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RecordInterceptionRequest) ProtoMessage() {} + +func (x *RecordInterceptionRequest) ProtoReflect() protoreflect.Message { + mi := &file_aibridged_proto_aibridged_proto_msgTypes[0] + 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 RecordInterceptionRequest.ProtoReflect.Descriptor instead. +func (*RecordInterceptionRequest) Descriptor() ([]byte, []int) { + return file_aibridged_proto_aibridged_proto_rawDescGZIP(), []int{0} +} + +func (x *RecordInterceptionRequest) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *RecordInterceptionRequest) GetInitiatorId() string { + if x != nil { + return x.InitiatorId + } + return "" +} + +func (x *RecordInterceptionRequest) GetProvider() string { + if x != nil { + return x.Provider + } + return "" +} + +func (x *RecordInterceptionRequest) GetModel() string { + if x != nil { + return x.Model + } + return "" +} + +func (x *RecordInterceptionRequest) GetMetadata() map[string]*anypb.Any { + if x != nil { + return x.Metadata + } + return nil +} + +func (x *RecordInterceptionRequest) GetStartedAt() *timestamppb.Timestamp { + if x != nil { + return x.StartedAt + } + return nil +} + +type RecordInterceptionResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *RecordInterceptionResponse) Reset() { + *x = RecordInterceptionResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_aibridged_proto_aibridged_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RecordInterceptionResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RecordInterceptionResponse) ProtoMessage() {} + +func (x *RecordInterceptionResponse) ProtoReflect() protoreflect.Message { + mi := &file_aibridged_proto_aibridged_proto_msgTypes[1] + 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 RecordInterceptionResponse.ProtoReflect.Descriptor instead. +func (*RecordInterceptionResponse) Descriptor() ([]byte, []int) { + return file_aibridged_proto_aibridged_proto_rawDescGZIP(), []int{1} +} + +type RecordTokenUsageRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + InterceptionId string `protobuf:"bytes,1,opt,name=interception_id,json=interceptionId,proto3" json:"interception_id,omitempty"` // UUID. + MsgId string `protobuf:"bytes,2,opt,name=msg_id,json=msgId,proto3" json:"msg_id,omitempty"` // ID provided by provider. + InputTokens int64 `protobuf:"varint,3,opt,name=input_tokens,json=inputTokens,proto3" json:"input_tokens,omitempty"` + OutputTokens int64 `protobuf:"varint,4,opt,name=output_tokens,json=outputTokens,proto3" json:"output_tokens,omitempty"` + Metadata map[string]*anypb.Any `protobuf:"bytes,5,rep,name=metadata,proto3" json:"metadata,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + CreatedAt *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` +} + +func (x *RecordTokenUsageRequest) Reset() { + *x = RecordTokenUsageRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_aibridged_proto_aibridged_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RecordTokenUsageRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RecordTokenUsageRequest) ProtoMessage() {} + +func (x *RecordTokenUsageRequest) ProtoReflect() protoreflect.Message { + mi := &file_aibridged_proto_aibridged_proto_msgTypes[2] + 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 RecordTokenUsageRequest.ProtoReflect.Descriptor instead. +func (*RecordTokenUsageRequest) Descriptor() ([]byte, []int) { + return file_aibridged_proto_aibridged_proto_rawDescGZIP(), []int{2} +} + +func (x *RecordTokenUsageRequest) GetInterceptionId() string { + if x != nil { + return x.InterceptionId + } + return "" +} + +func (x *RecordTokenUsageRequest) GetMsgId() string { + if x != nil { + return x.MsgId + } + return "" +} + +func (x *RecordTokenUsageRequest) GetInputTokens() int64 { + if x != nil { + return x.InputTokens + } + return 0 +} + +func (x *RecordTokenUsageRequest) GetOutputTokens() int64 { + if x != nil { + return x.OutputTokens + } + return 0 +} + +func (x *RecordTokenUsageRequest) GetMetadata() map[string]*anypb.Any { + if x != nil { + return x.Metadata + } + return nil +} + +func (x *RecordTokenUsageRequest) GetCreatedAt() *timestamppb.Timestamp { + if x != nil { + return x.CreatedAt + } + return nil +} + +type RecordTokenUsageResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *RecordTokenUsageResponse) Reset() { + *x = RecordTokenUsageResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_aibridged_proto_aibridged_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RecordTokenUsageResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RecordTokenUsageResponse) ProtoMessage() {} + +func (x *RecordTokenUsageResponse) ProtoReflect() protoreflect.Message { + mi := &file_aibridged_proto_aibridged_proto_msgTypes[3] + 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 RecordTokenUsageResponse.ProtoReflect.Descriptor instead. +func (*RecordTokenUsageResponse) Descriptor() ([]byte, []int) { + return file_aibridged_proto_aibridged_proto_rawDescGZIP(), []int{3} +} + +type RecordPromptUsageRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + InterceptionId string `protobuf:"bytes,1,opt,name=interception_id,json=interceptionId,proto3" json:"interception_id,omitempty"` // UUID. + MsgId string `protobuf:"bytes,2,opt,name=msg_id,json=msgId,proto3" json:"msg_id,omitempty"` // ID provided by provider. + Prompt string `protobuf:"bytes,3,opt,name=prompt,proto3" json:"prompt,omitempty"` + Metadata map[string]*anypb.Any `protobuf:"bytes,4,rep,name=metadata,proto3" json:"metadata,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + CreatedAt *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` +} + +func (x *RecordPromptUsageRequest) Reset() { + *x = RecordPromptUsageRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_aibridged_proto_aibridged_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RecordPromptUsageRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RecordPromptUsageRequest) ProtoMessage() {} + +func (x *RecordPromptUsageRequest) ProtoReflect() protoreflect.Message { + mi := &file_aibridged_proto_aibridged_proto_msgTypes[4] + 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 RecordPromptUsageRequest.ProtoReflect.Descriptor instead. +func (*RecordPromptUsageRequest) Descriptor() ([]byte, []int) { + return file_aibridged_proto_aibridged_proto_rawDescGZIP(), []int{4} +} + +func (x *RecordPromptUsageRequest) GetInterceptionId() string { + if x != nil { + return x.InterceptionId + } + return "" +} + +func (x *RecordPromptUsageRequest) GetMsgId() string { + if x != nil { + return x.MsgId + } + return "" +} + +func (x *RecordPromptUsageRequest) GetPrompt() string { + if x != nil { + return x.Prompt + } + return "" +} + +func (x *RecordPromptUsageRequest) GetMetadata() map[string]*anypb.Any { + if x != nil { + return x.Metadata + } + return nil +} + +func (x *RecordPromptUsageRequest) GetCreatedAt() *timestamppb.Timestamp { + if x != nil { + return x.CreatedAt + } + return nil +} + +type RecordPromptUsageResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *RecordPromptUsageResponse) Reset() { + *x = RecordPromptUsageResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_aibridged_proto_aibridged_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RecordPromptUsageResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RecordPromptUsageResponse) ProtoMessage() {} + +func (x *RecordPromptUsageResponse) ProtoReflect() protoreflect.Message { + mi := &file_aibridged_proto_aibridged_proto_msgTypes[5] + 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 RecordPromptUsageResponse.ProtoReflect.Descriptor instead. +func (*RecordPromptUsageResponse) Descriptor() ([]byte, []int) { + return file_aibridged_proto_aibridged_proto_rawDescGZIP(), []int{5} +} + +type RecordToolUsageRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + InterceptionId string `protobuf:"bytes,1,opt,name=interception_id,json=interceptionId,proto3" json:"interception_id,omitempty"` // UUID. + MsgId string `protobuf:"bytes,2,opt,name=msg_id,json=msgId,proto3" json:"msg_id,omitempty"` // ID provided by provider. + ServerUrl *string `protobuf:"bytes,3,opt,name=server_url,json=serverUrl,proto3,oneof" json:"server_url,omitempty"` // The URL of the MCP server. + Tool string `protobuf:"bytes,4,opt,name=tool,proto3" json:"tool,omitempty"` + Input string `protobuf:"bytes,5,opt,name=input,proto3" json:"input,omitempty"` + Injected bool `protobuf:"varint,6,opt,name=injected,proto3" json:"injected,omitempty"` + InvocationError *string `protobuf:"bytes,7,opt,name=invocation_error,json=invocationError,proto3,oneof" json:"invocation_error,omitempty"` // Only injected tools are invoked. + Metadata map[string]*anypb.Any `protobuf:"bytes,8,rep,name=metadata,proto3" json:"metadata,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + CreatedAt *timestamppb.Timestamp `protobuf:"bytes,9,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` +} + +func (x *RecordToolUsageRequest) Reset() { + *x = RecordToolUsageRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_aibridged_proto_aibridged_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RecordToolUsageRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RecordToolUsageRequest) ProtoMessage() {} + +func (x *RecordToolUsageRequest) ProtoReflect() protoreflect.Message { + mi := &file_aibridged_proto_aibridged_proto_msgTypes[6] + 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 RecordToolUsageRequest.ProtoReflect.Descriptor instead. +func (*RecordToolUsageRequest) Descriptor() ([]byte, []int) { + return file_aibridged_proto_aibridged_proto_rawDescGZIP(), []int{6} +} + +func (x *RecordToolUsageRequest) GetInterceptionId() string { + if x != nil { + return x.InterceptionId + } + return "" +} + +func (x *RecordToolUsageRequest) GetMsgId() string { + if x != nil { + return x.MsgId + } + return "" +} + +func (x *RecordToolUsageRequest) GetServerUrl() string { + if x != nil && x.ServerUrl != nil { + return *x.ServerUrl + } + return "" +} + +func (x *RecordToolUsageRequest) GetTool() string { + if x != nil { + return x.Tool + } + return "" +} + +func (x *RecordToolUsageRequest) GetInput() string { + if x != nil { + return x.Input + } + return "" +} + +func (x *RecordToolUsageRequest) GetInjected() bool { + if x != nil { + return x.Injected + } + return false +} + +func (x *RecordToolUsageRequest) GetInvocationError() string { + if x != nil && x.InvocationError != nil { + return *x.InvocationError + } + return "" +} + +func (x *RecordToolUsageRequest) GetMetadata() map[string]*anypb.Any { + if x != nil { + return x.Metadata + } + return nil +} + +func (x *RecordToolUsageRequest) GetCreatedAt() *timestamppb.Timestamp { + if x != nil { + return x.CreatedAt + } + return nil +} + +type RecordToolUsageResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *RecordToolUsageResponse) Reset() { + *x = RecordToolUsageResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_aibridged_proto_aibridged_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RecordToolUsageResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RecordToolUsageResponse) ProtoMessage() {} + +func (x *RecordToolUsageResponse) ProtoReflect() protoreflect.Message { + mi := &file_aibridged_proto_aibridged_proto_msgTypes[7] + 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 RecordToolUsageResponse.ProtoReflect.Descriptor instead. +func (*RecordToolUsageResponse) Descriptor() ([]byte, []int) { + return file_aibridged_proto_aibridged_proto_rawDescGZIP(), []int{7} +} + +type GetMCPServerConfigsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + UserId string `protobuf:"bytes,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` // UUID. // Not used yet, will be necessary for later RBAC purposes. +} + +func (x *GetMCPServerConfigsRequest) Reset() { + *x = GetMCPServerConfigsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_aibridged_proto_aibridged_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetMCPServerConfigsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetMCPServerConfigsRequest) ProtoMessage() {} + +func (x *GetMCPServerConfigsRequest) ProtoReflect() protoreflect.Message { + mi := &file_aibridged_proto_aibridged_proto_msgTypes[8] + 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 GetMCPServerConfigsRequest.ProtoReflect.Descriptor instead. +func (*GetMCPServerConfigsRequest) Descriptor() ([]byte, []int) { + return file_aibridged_proto_aibridged_proto_rawDescGZIP(), []int{8} +} + +func (x *GetMCPServerConfigsRequest) GetUserId() string { + if x != nil { + return x.UserId + } + return "" +} + +type GetMCPServerConfigsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + CoderMcpConfig *MCPServerConfig `protobuf:"bytes,1,opt,name=coder_mcp_config,json=coderMcpConfig,proto3" json:"coder_mcp_config,omitempty"` + ExternalAuthMcpConfigs []*MCPServerConfig `protobuf:"bytes,2,rep,name=external_auth_mcp_configs,json=externalAuthMcpConfigs,proto3" json:"external_auth_mcp_configs,omitempty"` +} + +func (x *GetMCPServerConfigsResponse) Reset() { + *x = GetMCPServerConfigsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_aibridged_proto_aibridged_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetMCPServerConfigsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetMCPServerConfigsResponse) ProtoMessage() {} + +func (x *GetMCPServerConfigsResponse) ProtoReflect() protoreflect.Message { + mi := &file_aibridged_proto_aibridged_proto_msgTypes[9] + 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 GetMCPServerConfigsResponse.ProtoReflect.Descriptor instead. +func (*GetMCPServerConfigsResponse) Descriptor() ([]byte, []int) { + return file_aibridged_proto_aibridged_proto_rawDescGZIP(), []int{9} +} + +func (x *GetMCPServerConfigsResponse) GetCoderMcpConfig() *MCPServerConfig { + if x != nil { + return x.CoderMcpConfig + } + return nil +} + +func (x *GetMCPServerConfigsResponse) GetExternalAuthMcpConfigs() []*MCPServerConfig { + if x != nil { + return x.ExternalAuthMcpConfigs + } + return nil +} + +type MCPServerConfig struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // Maps to the ID of the External Auth; this ID is unique. + Url string `protobuf:"bytes,2,opt,name=url,proto3" json:"url,omitempty"` + ToolAllowRegex string `protobuf:"bytes,3,opt,name=tool_allow_regex,json=toolAllowRegex,proto3" json:"tool_allow_regex,omitempty"` + ToolDenyRegex string `protobuf:"bytes,4,opt,name=tool_deny_regex,json=toolDenyRegex,proto3" json:"tool_deny_regex,omitempty"` +} + +func (x *MCPServerConfig) Reset() { + *x = MCPServerConfig{} + if protoimpl.UnsafeEnabled { + mi := &file_aibridged_proto_aibridged_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MCPServerConfig) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MCPServerConfig) ProtoMessage() {} + +func (x *MCPServerConfig) ProtoReflect() protoreflect.Message { + mi := &file_aibridged_proto_aibridged_proto_msgTypes[10] + 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 MCPServerConfig.ProtoReflect.Descriptor instead. +func (*MCPServerConfig) Descriptor() ([]byte, []int) { + return file_aibridged_proto_aibridged_proto_rawDescGZIP(), []int{10} +} + +func (x *MCPServerConfig) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *MCPServerConfig) GetUrl() string { + if x != nil { + return x.Url + } + return "" +} + +func (x *MCPServerConfig) GetToolAllowRegex() string { + if x != nil { + return x.ToolAllowRegex + } + return "" +} + +func (x *MCPServerConfig) GetToolDenyRegex() string { + if x != nil { + return x.ToolDenyRegex + } + return "" +} + +type GetMCPServerAccessTokensBatchRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + UserId string `protobuf:"bytes,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` // UUID. + McpServerConfigIds []string `protobuf:"bytes,2,rep,name=mcp_server_config_ids,json=mcpServerConfigIds,proto3" json:"mcp_server_config_ids,omitempty"` +} + +func (x *GetMCPServerAccessTokensBatchRequest) Reset() { + *x = GetMCPServerAccessTokensBatchRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_aibridged_proto_aibridged_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetMCPServerAccessTokensBatchRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetMCPServerAccessTokensBatchRequest) ProtoMessage() {} + +func (x *GetMCPServerAccessTokensBatchRequest) ProtoReflect() protoreflect.Message { + mi := &file_aibridged_proto_aibridged_proto_msgTypes[11] + 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 GetMCPServerAccessTokensBatchRequest.ProtoReflect.Descriptor instead. +func (*GetMCPServerAccessTokensBatchRequest) Descriptor() ([]byte, []int) { + return file_aibridged_proto_aibridged_proto_rawDescGZIP(), []int{11} +} + +func (x *GetMCPServerAccessTokensBatchRequest) GetUserId() string { + if x != nil { + return x.UserId + } + return "" +} + +func (x *GetMCPServerAccessTokensBatchRequest) GetMcpServerConfigIds() []string { + if x != nil { + return x.McpServerConfigIds + } + return nil +} + +// GetMCPServerAccessTokensBatchResponse returns a map for resulting tokens or errors, indexed +// by server ID. +type GetMCPServerAccessTokensBatchResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + AccessTokens map[string]string `protobuf:"bytes,1,rep,name=access_tokens,json=accessTokens,proto3" json:"access_tokens,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + Errors map[string]string `protobuf:"bytes,2,rep,name=errors,proto3" json:"errors,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *GetMCPServerAccessTokensBatchResponse) Reset() { + *x = GetMCPServerAccessTokensBatchResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_aibridged_proto_aibridged_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetMCPServerAccessTokensBatchResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetMCPServerAccessTokensBatchResponse) ProtoMessage() {} + +func (x *GetMCPServerAccessTokensBatchResponse) ProtoReflect() protoreflect.Message { + mi := &file_aibridged_proto_aibridged_proto_msgTypes[12] + 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 GetMCPServerAccessTokensBatchResponse.ProtoReflect.Descriptor instead. +func (*GetMCPServerAccessTokensBatchResponse) Descriptor() ([]byte, []int) { + return file_aibridged_proto_aibridged_proto_rawDescGZIP(), []int{12} +} + +func (x *GetMCPServerAccessTokensBatchResponse) GetAccessTokens() map[string]string { + if x != nil { + return x.AccessTokens + } + return nil +} + +func (x *GetMCPServerAccessTokensBatchResponse) GetErrors() map[string]string { + if x != nil { + return x.Errors + } + return nil +} + +type IsAuthorizedRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` +} + +func (x *IsAuthorizedRequest) Reset() { + *x = IsAuthorizedRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_aibridged_proto_aibridged_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *IsAuthorizedRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*IsAuthorizedRequest) ProtoMessage() {} + +func (x *IsAuthorizedRequest) ProtoReflect() protoreflect.Message { + mi := &file_aibridged_proto_aibridged_proto_msgTypes[13] + 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 IsAuthorizedRequest.ProtoReflect.Descriptor instead. +func (*IsAuthorizedRequest) Descriptor() ([]byte, []int) { + return file_aibridged_proto_aibridged_proto_rawDescGZIP(), []int{13} +} + +func (x *IsAuthorizedRequest) GetKey() string { + if x != nil { + return x.Key + } + return "" +} + +type IsAuthorizedResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + OwnerId string `protobuf:"bytes,1,opt,name=owner_id,json=ownerId,proto3" json:"owner_id,omitempty"` +} + +func (x *IsAuthorizedResponse) Reset() { + *x = IsAuthorizedResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_aibridged_proto_aibridged_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *IsAuthorizedResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*IsAuthorizedResponse) ProtoMessage() {} + +func (x *IsAuthorizedResponse) ProtoReflect() protoreflect.Message { + mi := &file_aibridged_proto_aibridged_proto_msgTypes[14] + 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 IsAuthorizedResponse.ProtoReflect.Descriptor instead. +func (*IsAuthorizedResponse) Descriptor() ([]byte, []int) { + return file_aibridged_proto_aibridged_proto_rawDescGZIP(), []int{14} +} + +func (x *IsAuthorizedResponse) GetOwnerId() string { + if x != nil { + return x.OwnerId + } + return "" +} + +var File_aibridged_proto_aibridged_proto protoreflect.FileDescriptor + +var file_aibridged_proto_aibridged_proto_rawDesc = []byte{ + 0x0a, 0x1f, 0x61, 0x69, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2f, 0x61, 0x69, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x12, 0x05, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xda, 0x02, 0x0a, 0x19, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x49, + 0x6e, 0x74, 0x65, 0x72, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, + 0x69, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, 0x6f, 0x72, 0x5f, + 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, + 0x74, 0x6f, 0x72, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, + 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, + 0x72, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x12, 0x4a, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x63, 0x65, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0x12, 0x39, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x61, + 0x74, 0x18, 0x06, 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, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x41, 0x74, 0x1a, 0x51, + 0x0a, 0x0d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, + 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, + 0x79, 0x12, 0x2a, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, + 0x01, 0x22, 0x1c, 0x0a, 0x1a, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x72, + 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0xf9, 0x02, 0x0a, 0x17, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x55, + 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x63, 0x65, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x6d, 0x73, 0x67, 0x5f, 0x69, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6d, 0x73, 0x67, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x69, + 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x0b, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x12, 0x23, + 0x0a, 0x0d, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x54, 0x6f, 0x6b, + 0x65, 0x6e, 0x73, 0x12, 0x48, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, + 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x52, 0x65, + 0x63, 0x6f, 0x72, 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x55, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x39, 0x0a, + 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x06, 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, 0x41, 0x74, 0x1a, 0x51, 0x0a, 0x0d, 0x4d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2a, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x1a, 0x0a, 0x18, 0x52, + 0x65, 0x63, 0x6f, 0x72, 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x55, 0x73, 0x61, 0x67, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xcb, 0x02, 0x0a, 0x18, 0x52, 0x65, 0x63, 0x6f, + 0x72, 0x64, 0x50, 0x72, 0x6f, 0x6d, 0x70, 0x74, 0x55, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x63, 0x65, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x15, 0x0a, + 0x06, 0x6d, 0x73, 0x67, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6d, + 0x73, 0x67, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x72, 0x6f, 0x6d, 0x70, 0x74, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x72, 0x6f, 0x6d, 0x70, 0x74, 0x12, 0x49, 0x0a, 0x08, + 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x50, 0x72, 0x6f, + 0x6d, 0x70, 0x74, 0x55, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x6d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x5f, 0x61, 0x74, 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, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x41, 0x74, 0x1a, 0x51, 0x0a, 0x0d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2a, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x1b, 0x0a, 0x19, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x50, + 0x72, 0x6f, 0x6d, 0x70, 0x74, 0x55, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0xed, 0x03, 0x0a, 0x16, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x54, 0x6f, 0x6f, + 0x6c, 0x55, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x27, 0x0a, + 0x0f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x63, 0x65, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x6d, 0x73, 0x67, 0x5f, 0x69, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6d, 0x73, 0x67, 0x49, 0x64, 0x12, 0x22, 0x0a, + 0x0a, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x48, 0x00, 0x52, 0x09, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x55, 0x72, 0x6c, 0x88, 0x01, + 0x01, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x6f, 0x6f, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x74, 0x6f, 0x6f, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x69, + 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, + 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x65, 0x64, 0x12, 0x2e, 0x0a, 0x10, 0x69, 0x6e, 0x76, 0x6f, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x09, 0x48, 0x01, 0x52, 0x0f, 0x69, 0x6e, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, + 0x72, 0x72, 0x6f, 0x72, 0x88, 0x01, 0x01, 0x12, 0x47, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x54, 0x6f, 0x6f, 0x6c, 0x55, 0x73, 0x61, 0x67, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 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, 0x41, 0x74, 0x1a, 0x51, 0x0a, 0x0d, 0x4d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, + 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2a, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x41, 0x6e, 0x79, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x0d, + 0x0a, 0x0b, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x75, 0x72, 0x6c, 0x42, 0x13, 0x0a, + 0x11, 0x5f, 0x69, 0x6e, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x72, 0x72, + 0x6f, 0x72, 0x22, 0x19, 0x0a, 0x17, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x54, 0x6f, 0x6f, 0x6c, + 0x55, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x35, 0x0a, + 0x1a, 0x47, 0x65, 0x74, 0x4d, 0x43, 0x50, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x75, + 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, + 0x65, 0x72, 0x49, 0x64, 0x22, 0xb2, 0x01, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x4d, 0x43, 0x50, 0x53, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a, 0x10, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x5f, 0x6d, 0x63, + 0x70, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4d, 0x43, 0x50, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0e, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x4d, 0x63, 0x70, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x51, 0x0a, 0x19, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x6d, 0x63, 0x70, 0x5f, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x4d, 0x43, 0x50, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x52, 0x16, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x41, 0x75, 0x74, 0x68, 0x4d, + 0x63, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x22, 0x85, 0x01, 0x0a, 0x0f, 0x4d, 0x43, + 0x50, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x10, 0x0a, + 0x03, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, + 0x28, 0x0a, 0x10, 0x74, 0x6f, 0x6f, 0x6c, 0x5f, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x72, 0x65, + 0x67, 0x65, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x74, 0x6f, 0x6f, 0x6c, 0x41, + 0x6c, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x67, 0x65, 0x78, 0x12, 0x26, 0x0a, 0x0f, 0x74, 0x6f, 0x6f, + 0x6c, 0x5f, 0x64, 0x65, 0x6e, 0x79, 0x5f, 0x72, 0x65, 0x67, 0x65, 0x78, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0d, 0x74, 0x6f, 0x6f, 0x6c, 0x44, 0x65, 0x6e, 0x79, 0x52, 0x65, 0x67, 0x65, + 0x78, 0x22, 0x72, 0x0a, 0x24, 0x47, 0x65, 0x74, 0x4d, 0x43, 0x50, 0x53, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x42, 0x61, 0x74, + 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, + 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, + 0x49, 0x64, 0x12, 0x31, 0x0a, 0x15, 0x6d, 0x63, 0x70, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x12, 0x6d, 0x63, 0x70, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x49, 0x64, 0x73, 0x22, 0xda, 0x02, 0x0a, 0x25, 0x47, 0x65, 0x74, 0x4d, 0x43, 0x50, + 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, + 0x6e, 0x73, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x63, 0x0a, 0x0d, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x47, + 0x65, 0x74, 0x4d, 0x43, 0x50, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x41, 0x63, 0x63, 0x65, 0x73, + 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, + 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, + 0x6b, 0x65, 0x6e, 0x73, 0x12, 0x50, 0x0a, 0x06, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x47, 0x65, 0x74, + 0x4d, 0x43, 0x50, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, + 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, + 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x1a, 0x3f, 0x0a, 0x11, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, + 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x39, 0x0a, 0x0b, 0x45, 0x72, 0x72, 0x6f, 0x72, + 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, + 0x38, 0x01, 0x22, 0x27, 0x0a, 0x13, 0x49, 0x73, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, + 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x22, 0x31, 0x0a, 0x14, 0x49, + 0x73, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x49, 0x64, 0x32, 0xe4, + 0x02, 0x0a, 0x08, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x59, 0x0a, 0x12, 0x52, + 0x65, 0x63, 0x6f, 0x72, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x20, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, + 0x49, 0x6e, 0x74, 0x65, 0x72, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x52, 0x65, 0x63, 0x6f, + 0x72, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x53, 0x0a, 0x10, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, + 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x55, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1e, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x55, 0x73, + 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x55, 0x73, + 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x56, 0x0a, 0x11, 0x52, + 0x65, 0x63, 0x6f, 0x72, 0x64, 0x50, 0x72, 0x6f, 0x6d, 0x70, 0x74, 0x55, 0x73, 0x61, 0x67, 0x65, + 0x12, 0x1f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x50, + 0x72, 0x6f, 0x6d, 0x70, 0x74, 0x55, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x20, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, + 0x50, 0x72, 0x6f, 0x6d, 0x70, 0x74, 0x55, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x50, 0x0a, 0x0f, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x54, 0x6f, 0x6f, + 0x6c, 0x55, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x52, + 0x65, 0x63, 0x6f, 0x72, 0x64, 0x54, 0x6f, 0x6f, 0x6c, 0x55, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x52, 0x65, + 0x63, 0x6f, 0x72, 0x64, 0x54, 0x6f, 0x6f, 0x6c, 0x55, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xeb, 0x01, 0x0a, 0x0f, 0x4d, 0x43, 0x50, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x5c, 0x0a, 0x13, 0x47, 0x65, 0x74, + 0x4d, 0x43, 0x50, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, + 0x12, 0x21, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x43, 0x50, 0x53, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x4d, + 0x43, 0x50, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7a, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x4d, 0x43, + 0x50, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, + 0x65, 0x6e, 0x73, 0x42, 0x61, 0x74, 0x63, 0x68, 0x12, 0x2b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x43, 0x50, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x41, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x47, 0x65, + 0x74, 0x4d, 0x43, 0x50, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x32, 0x55, 0x0a, 0x0a, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, + 0x72, 0x12, 0x47, 0x0a, 0x0c, 0x49, 0x73, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, + 0x64, 0x12, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x49, 0x73, 0x41, 0x75, 0x74, 0x68, + 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x49, 0x73, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, + 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x2b, 0x5a, 0x29, 0x67, 0x69, + 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x2f, 0x63, + 0x6f, 0x64, 0x65, 0x72, 0x2f, 0x76, 0x32, 0x2f, 0x61, 0x69, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, + 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_aibridged_proto_aibridged_proto_rawDescOnce sync.Once + file_aibridged_proto_aibridged_proto_rawDescData = file_aibridged_proto_aibridged_proto_rawDesc +) + +func file_aibridged_proto_aibridged_proto_rawDescGZIP() []byte { + file_aibridged_proto_aibridged_proto_rawDescOnce.Do(func() { + file_aibridged_proto_aibridged_proto_rawDescData = protoimpl.X.CompressGZIP(file_aibridged_proto_aibridged_proto_rawDescData) + }) + return file_aibridged_proto_aibridged_proto_rawDescData +} + +var file_aibridged_proto_aibridged_proto_msgTypes = make([]protoimpl.MessageInfo, 21) +var file_aibridged_proto_aibridged_proto_goTypes = []interface{}{ + (*RecordInterceptionRequest)(nil), // 0: proto.RecordInterceptionRequest + (*RecordInterceptionResponse)(nil), // 1: proto.RecordInterceptionResponse + (*RecordTokenUsageRequest)(nil), // 2: proto.RecordTokenUsageRequest + (*RecordTokenUsageResponse)(nil), // 3: proto.RecordTokenUsageResponse + (*RecordPromptUsageRequest)(nil), // 4: proto.RecordPromptUsageRequest + (*RecordPromptUsageResponse)(nil), // 5: proto.RecordPromptUsageResponse + (*RecordToolUsageRequest)(nil), // 6: proto.RecordToolUsageRequest + (*RecordToolUsageResponse)(nil), // 7: proto.RecordToolUsageResponse + (*GetMCPServerConfigsRequest)(nil), // 8: proto.GetMCPServerConfigsRequest + (*GetMCPServerConfigsResponse)(nil), // 9: proto.GetMCPServerConfigsResponse + (*MCPServerConfig)(nil), // 10: proto.MCPServerConfig + (*GetMCPServerAccessTokensBatchRequest)(nil), // 11: proto.GetMCPServerAccessTokensBatchRequest + (*GetMCPServerAccessTokensBatchResponse)(nil), // 12: proto.GetMCPServerAccessTokensBatchResponse + (*IsAuthorizedRequest)(nil), // 13: proto.IsAuthorizedRequest + (*IsAuthorizedResponse)(nil), // 14: proto.IsAuthorizedResponse + nil, // 15: proto.RecordInterceptionRequest.MetadataEntry + nil, // 16: proto.RecordTokenUsageRequest.MetadataEntry + nil, // 17: proto.RecordPromptUsageRequest.MetadataEntry + nil, // 18: proto.RecordToolUsageRequest.MetadataEntry + nil, // 19: proto.GetMCPServerAccessTokensBatchResponse.AccessTokensEntry + nil, // 20: proto.GetMCPServerAccessTokensBatchResponse.ErrorsEntry + (*timestamppb.Timestamp)(nil), // 21: google.protobuf.Timestamp + (*anypb.Any)(nil), // 22: google.protobuf.Any +} +var file_aibridged_proto_aibridged_proto_depIdxs = []int32{ + 15, // 0: proto.RecordInterceptionRequest.metadata:type_name -> proto.RecordInterceptionRequest.MetadataEntry + 21, // 1: proto.RecordInterceptionRequest.started_at:type_name -> google.protobuf.Timestamp + 16, // 2: proto.RecordTokenUsageRequest.metadata:type_name -> proto.RecordTokenUsageRequest.MetadataEntry + 21, // 3: proto.RecordTokenUsageRequest.created_at:type_name -> google.protobuf.Timestamp + 17, // 4: proto.RecordPromptUsageRequest.metadata:type_name -> proto.RecordPromptUsageRequest.MetadataEntry + 21, // 5: proto.RecordPromptUsageRequest.created_at:type_name -> google.protobuf.Timestamp + 18, // 6: proto.RecordToolUsageRequest.metadata:type_name -> proto.RecordToolUsageRequest.MetadataEntry + 21, // 7: proto.RecordToolUsageRequest.created_at:type_name -> google.protobuf.Timestamp + 10, // 8: proto.GetMCPServerConfigsResponse.coder_mcp_config:type_name -> proto.MCPServerConfig + 10, // 9: proto.GetMCPServerConfigsResponse.external_auth_mcp_configs:type_name -> proto.MCPServerConfig + 19, // 10: proto.GetMCPServerAccessTokensBatchResponse.access_tokens:type_name -> proto.GetMCPServerAccessTokensBatchResponse.AccessTokensEntry + 20, // 11: proto.GetMCPServerAccessTokensBatchResponse.errors:type_name -> proto.GetMCPServerAccessTokensBatchResponse.ErrorsEntry + 22, // 12: proto.RecordInterceptionRequest.MetadataEntry.value:type_name -> google.protobuf.Any + 22, // 13: proto.RecordTokenUsageRequest.MetadataEntry.value:type_name -> google.protobuf.Any + 22, // 14: proto.RecordPromptUsageRequest.MetadataEntry.value:type_name -> google.protobuf.Any + 22, // 15: proto.RecordToolUsageRequest.MetadataEntry.value:type_name -> google.protobuf.Any + 0, // 16: proto.Recorder.RecordInterception:input_type -> proto.RecordInterceptionRequest + 2, // 17: proto.Recorder.RecordTokenUsage:input_type -> proto.RecordTokenUsageRequest + 4, // 18: proto.Recorder.RecordPromptUsage:input_type -> proto.RecordPromptUsageRequest + 6, // 19: proto.Recorder.RecordToolUsage:input_type -> proto.RecordToolUsageRequest + 8, // 20: proto.MCPConfigurator.GetMCPServerConfigs:input_type -> proto.GetMCPServerConfigsRequest + 11, // 21: proto.MCPConfigurator.GetMCPServerAccessTokensBatch:input_type -> proto.GetMCPServerAccessTokensBatchRequest + 13, // 22: proto.Authorizer.IsAuthorized:input_type -> proto.IsAuthorizedRequest + 1, // 23: proto.Recorder.RecordInterception:output_type -> proto.RecordInterceptionResponse + 3, // 24: proto.Recorder.RecordTokenUsage:output_type -> proto.RecordTokenUsageResponse + 5, // 25: proto.Recorder.RecordPromptUsage:output_type -> proto.RecordPromptUsageResponse + 7, // 26: proto.Recorder.RecordToolUsage:output_type -> proto.RecordToolUsageResponse + 9, // 27: proto.MCPConfigurator.GetMCPServerConfigs:output_type -> proto.GetMCPServerConfigsResponse + 12, // 28: proto.MCPConfigurator.GetMCPServerAccessTokensBatch:output_type -> proto.GetMCPServerAccessTokensBatchResponse + 14, // 29: proto.Authorizer.IsAuthorized:output_type -> proto.IsAuthorizedResponse + 23, // [23:30] is the sub-list for method output_type + 16, // [16:23] is the sub-list for method input_type + 16, // [16:16] is the sub-list for extension type_name + 16, // [16:16] is the sub-list for extension extendee + 0, // [0:16] is the sub-list for field type_name +} + +func init() { file_aibridged_proto_aibridged_proto_init() } +func file_aibridged_proto_aibridged_proto_init() { + if File_aibridged_proto_aibridged_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_aibridged_proto_aibridged_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RecordInterceptionRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_aibridged_proto_aibridged_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RecordInterceptionResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_aibridged_proto_aibridged_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RecordTokenUsageRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_aibridged_proto_aibridged_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RecordTokenUsageResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_aibridged_proto_aibridged_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RecordPromptUsageRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_aibridged_proto_aibridged_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RecordPromptUsageResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_aibridged_proto_aibridged_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RecordToolUsageRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_aibridged_proto_aibridged_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RecordToolUsageResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_aibridged_proto_aibridged_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetMCPServerConfigsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_aibridged_proto_aibridged_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetMCPServerConfigsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_aibridged_proto_aibridged_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MCPServerConfig); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_aibridged_proto_aibridged_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetMCPServerAccessTokensBatchRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_aibridged_proto_aibridged_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetMCPServerAccessTokensBatchResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_aibridged_proto_aibridged_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*IsAuthorizedRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_aibridged_proto_aibridged_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*IsAuthorizedResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_aibridged_proto_aibridged_proto_msgTypes[6].OneofWrappers = []interface{}{} + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_aibridged_proto_aibridged_proto_rawDesc, + NumEnums: 0, + NumMessages: 21, + NumExtensions: 0, + NumServices: 3, + }, + GoTypes: file_aibridged_proto_aibridged_proto_goTypes, + DependencyIndexes: file_aibridged_proto_aibridged_proto_depIdxs, + MessageInfos: file_aibridged_proto_aibridged_proto_msgTypes, + }.Build() + File_aibridged_proto_aibridged_proto = out.File + file_aibridged_proto_aibridged_proto_rawDesc = nil + file_aibridged_proto_aibridged_proto_goTypes = nil + file_aibridged_proto_aibridged_proto_depIdxs = nil +} diff --git a/aibridged/proto/aibridged.proto b/aibridged/proto/aibridged.proto new file mode 100644 index 0000000000..21e09fc815 --- /dev/null +++ b/aibridged/proto/aibridged.proto @@ -0,0 +1,114 @@ +syntax = "proto3"; +option go_package = "github.com/coder/coder/v2/aibridged/proto"; + +package proto; + +import "google/protobuf/any.proto"; +import "google/protobuf/timestamp.proto"; + +// Recorder is responsible for persisting AI usage records along with their related interception. +service Recorder { + // RecordInterception creates a new interception record to which all other sub-resources + // (token, prompt, tool uses) will be related. + rpc RecordInterception(RecordInterceptionRequest) returns (RecordInterceptionResponse); + rpc RecordTokenUsage(RecordTokenUsageRequest) returns (RecordTokenUsageResponse); + rpc RecordPromptUsage(RecordPromptUsageRequest) returns (RecordPromptUsageResponse); + rpc RecordToolUsage(RecordToolUsageRequest) returns (RecordToolUsageResponse); +} + +// MCPConfigurator is responsible for retrieving any relevant data required for configuring MCP clients +// against remote servers. +service MCPConfigurator { + // GetMCPServerConfigs will retrieve MCP server configurations. + rpc GetMCPServerConfigs(GetMCPServerConfigsRequest) returns (GetMCPServerConfigsResponse); + // GetMCPServerAccessTokensBatch will retrieve an access token for a given list of MCP servers, which may involve + // acquiring, validating, or refreshing tokens synchronously. The server should make every effort to + // parallelise this work. + rpc GetMCPServerAccessTokensBatch(GetMCPServerAccessTokensBatchRequest) returns (GetMCPServerAccessTokensBatchResponse); +} + +// Authorizer handles all Coder-related authorization functions. +service Authorizer { + // IsAuthorized validates that a given Coder key is valid and the user is authorized to use AI Bridge. + // TODO: add authorization; currently only key validation takes place. + rpc IsAuthorized(IsAuthorizedRequest) returns (IsAuthorizedResponse); +} + +message RecordInterceptionRequest { + string id = 1; // UUID. + string initiator_id = 2; // UUID. + string provider = 3; + string model = 4; + map metadata = 5; + google.protobuf.Timestamp started_at = 6; +} + +message RecordInterceptionResponse {} + +message RecordTokenUsageRequest { + string interception_id = 1; // UUID. + string msg_id = 2; // ID provided by provider. + int64 input_tokens = 3; + int64 output_tokens = 4; + map metadata = 5; + google.protobuf.Timestamp created_at = 6; +} +message RecordTokenUsageResponse {} + +message RecordPromptUsageRequest { + string interception_id = 1; // UUID. + string msg_id = 2; // ID provided by provider. + string prompt = 3; + map metadata = 4; + google.protobuf.Timestamp created_at = 5; +} +message RecordPromptUsageResponse {} + +message RecordToolUsageRequest { + string interception_id = 1; // UUID. + string msg_id = 2; // ID provided by provider. + optional string server_url = 3; // The URL of the MCP server. + string tool = 4; + string input = 5; + bool injected = 6; + optional string invocation_error = 7; // Only injected tools are invoked. + map metadata = 8; + google.protobuf.Timestamp created_at = 9; +} +message RecordToolUsageResponse {} + +message GetMCPServerConfigsRequest { + string user_id = 1; // UUID. // Not used yet, will be necessary for later RBAC purposes. +} + +message GetMCPServerConfigsResponse { + MCPServerConfig coder_mcp_config = 1; + repeated MCPServerConfig external_auth_mcp_configs = 2; +} + +message MCPServerConfig { + string id = 1; // Maps to the ID of the External Auth; this ID is unique. + string url = 2; + string tool_allow_regex = 3; + string tool_deny_regex = 4; +} + +message GetMCPServerAccessTokensBatchRequest { + string user_id = 1; // UUID. + repeated string mcp_server_config_ids = 2; +} + +// GetMCPServerAccessTokensBatchResponse returns a map for resulting tokens or errors, indexed +// by server ID. +message GetMCPServerAccessTokensBatchResponse{ + map access_tokens = 1; + map errors = 2; +} + +message IsAuthorizedRequest { + string key = 1; +} + +message IsAuthorizedResponse { + string owner_id = 1; +} diff --git a/aibridged/proto/aibridged_drpc.pb.go b/aibridged/proto/aibridged_drpc.pb.go new file mode 100644 index 0000000000..76ecf37e6b --- /dev/null +++ b/aibridged/proto/aibridged_drpc.pb.go @@ -0,0 +1,421 @@ +// Code generated by protoc-gen-go-drpc. DO NOT EDIT. +// protoc-gen-go-drpc version: v0.0.34 +// source: aibridged/proto/aibridged.proto + +package proto + +import ( + context "context" + errors "errors" + protojson "google.golang.org/protobuf/encoding/protojson" + proto "google.golang.org/protobuf/proto" + drpc "storj.io/drpc" + drpcerr "storj.io/drpc/drpcerr" +) + +type drpcEncoding_File_aibridged_proto_aibridged_proto struct{} + +func (drpcEncoding_File_aibridged_proto_aibridged_proto) Marshal(msg drpc.Message) ([]byte, error) { + return proto.Marshal(msg.(proto.Message)) +} + +func (drpcEncoding_File_aibridged_proto_aibridged_proto) MarshalAppend(buf []byte, msg drpc.Message) ([]byte, error) { + return proto.MarshalOptions{}.MarshalAppend(buf, msg.(proto.Message)) +} + +func (drpcEncoding_File_aibridged_proto_aibridged_proto) Unmarshal(buf []byte, msg drpc.Message) error { + return proto.Unmarshal(buf, msg.(proto.Message)) +} + +func (drpcEncoding_File_aibridged_proto_aibridged_proto) JSONMarshal(msg drpc.Message) ([]byte, error) { + return protojson.Marshal(msg.(proto.Message)) +} + +func (drpcEncoding_File_aibridged_proto_aibridged_proto) JSONUnmarshal(buf []byte, msg drpc.Message) error { + return protojson.Unmarshal(buf, msg.(proto.Message)) +} + +type DRPCRecorderClient interface { + DRPCConn() drpc.Conn + + RecordInterception(ctx context.Context, in *RecordInterceptionRequest) (*RecordInterceptionResponse, error) + RecordTokenUsage(ctx context.Context, in *RecordTokenUsageRequest) (*RecordTokenUsageResponse, error) + RecordPromptUsage(ctx context.Context, in *RecordPromptUsageRequest) (*RecordPromptUsageResponse, error) + RecordToolUsage(ctx context.Context, in *RecordToolUsageRequest) (*RecordToolUsageResponse, error) +} + +type drpcRecorderClient struct { + cc drpc.Conn +} + +func NewDRPCRecorderClient(cc drpc.Conn) DRPCRecorderClient { + return &drpcRecorderClient{cc} +} + +func (c *drpcRecorderClient) DRPCConn() drpc.Conn { return c.cc } + +func (c *drpcRecorderClient) RecordInterception(ctx context.Context, in *RecordInterceptionRequest) (*RecordInterceptionResponse, error) { + out := new(RecordInterceptionResponse) + err := c.cc.Invoke(ctx, "/proto.Recorder/RecordInterception", drpcEncoding_File_aibridged_proto_aibridged_proto{}, in, out) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *drpcRecorderClient) RecordTokenUsage(ctx context.Context, in *RecordTokenUsageRequest) (*RecordTokenUsageResponse, error) { + out := new(RecordTokenUsageResponse) + err := c.cc.Invoke(ctx, "/proto.Recorder/RecordTokenUsage", drpcEncoding_File_aibridged_proto_aibridged_proto{}, in, out) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *drpcRecorderClient) RecordPromptUsage(ctx context.Context, in *RecordPromptUsageRequest) (*RecordPromptUsageResponse, error) { + out := new(RecordPromptUsageResponse) + err := c.cc.Invoke(ctx, "/proto.Recorder/RecordPromptUsage", drpcEncoding_File_aibridged_proto_aibridged_proto{}, in, out) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *drpcRecorderClient) RecordToolUsage(ctx context.Context, in *RecordToolUsageRequest) (*RecordToolUsageResponse, error) { + out := new(RecordToolUsageResponse) + err := c.cc.Invoke(ctx, "/proto.Recorder/RecordToolUsage", drpcEncoding_File_aibridged_proto_aibridged_proto{}, in, out) + if err != nil { + return nil, err + } + return out, nil +} + +type DRPCRecorderServer interface { + RecordInterception(context.Context, *RecordInterceptionRequest) (*RecordInterceptionResponse, error) + RecordTokenUsage(context.Context, *RecordTokenUsageRequest) (*RecordTokenUsageResponse, error) + RecordPromptUsage(context.Context, *RecordPromptUsageRequest) (*RecordPromptUsageResponse, error) + RecordToolUsage(context.Context, *RecordToolUsageRequest) (*RecordToolUsageResponse, error) +} + +type DRPCRecorderUnimplementedServer struct{} + +func (s *DRPCRecorderUnimplementedServer) RecordInterception(context.Context, *RecordInterceptionRequest) (*RecordInterceptionResponse, error) { + return nil, drpcerr.WithCode(errors.New("Unimplemented"), drpcerr.Unimplemented) +} + +func (s *DRPCRecorderUnimplementedServer) RecordTokenUsage(context.Context, *RecordTokenUsageRequest) (*RecordTokenUsageResponse, error) { + return nil, drpcerr.WithCode(errors.New("Unimplemented"), drpcerr.Unimplemented) +} + +func (s *DRPCRecorderUnimplementedServer) RecordPromptUsage(context.Context, *RecordPromptUsageRequest) (*RecordPromptUsageResponse, error) { + return nil, drpcerr.WithCode(errors.New("Unimplemented"), drpcerr.Unimplemented) +} + +func (s *DRPCRecorderUnimplementedServer) RecordToolUsage(context.Context, *RecordToolUsageRequest) (*RecordToolUsageResponse, error) { + return nil, drpcerr.WithCode(errors.New("Unimplemented"), drpcerr.Unimplemented) +} + +type DRPCRecorderDescription struct{} + +func (DRPCRecorderDescription) NumMethods() int { return 4 } + +func (DRPCRecorderDescription) Method(n int) (string, drpc.Encoding, drpc.Receiver, interface{}, bool) { + switch n { + case 0: + return "/proto.Recorder/RecordInterception", drpcEncoding_File_aibridged_proto_aibridged_proto{}, + func(srv interface{}, ctx context.Context, in1, in2 interface{}) (drpc.Message, error) { + return srv.(DRPCRecorderServer). + RecordInterception( + ctx, + in1.(*RecordInterceptionRequest), + ) + }, DRPCRecorderServer.RecordInterception, true + case 1: + return "/proto.Recorder/RecordTokenUsage", drpcEncoding_File_aibridged_proto_aibridged_proto{}, + func(srv interface{}, ctx context.Context, in1, in2 interface{}) (drpc.Message, error) { + return srv.(DRPCRecorderServer). + RecordTokenUsage( + ctx, + in1.(*RecordTokenUsageRequest), + ) + }, DRPCRecorderServer.RecordTokenUsage, true + case 2: + return "/proto.Recorder/RecordPromptUsage", drpcEncoding_File_aibridged_proto_aibridged_proto{}, + func(srv interface{}, ctx context.Context, in1, in2 interface{}) (drpc.Message, error) { + return srv.(DRPCRecorderServer). + RecordPromptUsage( + ctx, + in1.(*RecordPromptUsageRequest), + ) + }, DRPCRecorderServer.RecordPromptUsage, true + case 3: + return "/proto.Recorder/RecordToolUsage", drpcEncoding_File_aibridged_proto_aibridged_proto{}, + func(srv interface{}, ctx context.Context, in1, in2 interface{}) (drpc.Message, error) { + return srv.(DRPCRecorderServer). + RecordToolUsage( + ctx, + in1.(*RecordToolUsageRequest), + ) + }, DRPCRecorderServer.RecordToolUsage, true + default: + return "", nil, nil, nil, false + } +} + +func DRPCRegisterRecorder(mux drpc.Mux, impl DRPCRecorderServer) error { + return mux.Register(impl, DRPCRecorderDescription{}) +} + +type DRPCRecorder_RecordInterceptionStream interface { + drpc.Stream + SendAndClose(*RecordInterceptionResponse) error +} + +type drpcRecorder_RecordInterceptionStream struct { + drpc.Stream +} + +func (x *drpcRecorder_RecordInterceptionStream) SendAndClose(m *RecordInterceptionResponse) error { + if err := x.MsgSend(m, drpcEncoding_File_aibridged_proto_aibridged_proto{}); err != nil { + return err + } + return x.CloseSend() +} + +type DRPCRecorder_RecordTokenUsageStream interface { + drpc.Stream + SendAndClose(*RecordTokenUsageResponse) error +} + +type drpcRecorder_RecordTokenUsageStream struct { + drpc.Stream +} + +func (x *drpcRecorder_RecordTokenUsageStream) SendAndClose(m *RecordTokenUsageResponse) error { + if err := x.MsgSend(m, drpcEncoding_File_aibridged_proto_aibridged_proto{}); err != nil { + return err + } + return x.CloseSend() +} + +type DRPCRecorder_RecordPromptUsageStream interface { + drpc.Stream + SendAndClose(*RecordPromptUsageResponse) error +} + +type drpcRecorder_RecordPromptUsageStream struct { + drpc.Stream +} + +func (x *drpcRecorder_RecordPromptUsageStream) SendAndClose(m *RecordPromptUsageResponse) error { + if err := x.MsgSend(m, drpcEncoding_File_aibridged_proto_aibridged_proto{}); err != nil { + return err + } + return x.CloseSend() +} + +type DRPCRecorder_RecordToolUsageStream interface { + drpc.Stream + SendAndClose(*RecordToolUsageResponse) error +} + +type drpcRecorder_RecordToolUsageStream struct { + drpc.Stream +} + +func (x *drpcRecorder_RecordToolUsageStream) SendAndClose(m *RecordToolUsageResponse) error { + if err := x.MsgSend(m, drpcEncoding_File_aibridged_proto_aibridged_proto{}); err != nil { + return err + } + return x.CloseSend() +} + +type DRPCMCPConfiguratorClient interface { + DRPCConn() drpc.Conn + + GetMCPServerConfigs(ctx context.Context, in *GetMCPServerConfigsRequest) (*GetMCPServerConfigsResponse, error) + GetMCPServerAccessTokensBatch(ctx context.Context, in *GetMCPServerAccessTokensBatchRequest) (*GetMCPServerAccessTokensBatchResponse, error) +} + +type drpcMCPConfiguratorClient struct { + cc drpc.Conn +} + +func NewDRPCMCPConfiguratorClient(cc drpc.Conn) DRPCMCPConfiguratorClient { + return &drpcMCPConfiguratorClient{cc} +} + +func (c *drpcMCPConfiguratorClient) DRPCConn() drpc.Conn { return c.cc } + +func (c *drpcMCPConfiguratorClient) GetMCPServerConfigs(ctx context.Context, in *GetMCPServerConfigsRequest) (*GetMCPServerConfigsResponse, error) { + out := new(GetMCPServerConfigsResponse) + err := c.cc.Invoke(ctx, "/proto.MCPConfigurator/GetMCPServerConfigs", drpcEncoding_File_aibridged_proto_aibridged_proto{}, in, out) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *drpcMCPConfiguratorClient) GetMCPServerAccessTokensBatch(ctx context.Context, in *GetMCPServerAccessTokensBatchRequest) (*GetMCPServerAccessTokensBatchResponse, error) { + out := new(GetMCPServerAccessTokensBatchResponse) + err := c.cc.Invoke(ctx, "/proto.MCPConfigurator/GetMCPServerAccessTokensBatch", drpcEncoding_File_aibridged_proto_aibridged_proto{}, in, out) + if err != nil { + return nil, err + } + return out, nil +} + +type DRPCMCPConfiguratorServer interface { + GetMCPServerConfigs(context.Context, *GetMCPServerConfigsRequest) (*GetMCPServerConfigsResponse, error) + GetMCPServerAccessTokensBatch(context.Context, *GetMCPServerAccessTokensBatchRequest) (*GetMCPServerAccessTokensBatchResponse, error) +} + +type DRPCMCPConfiguratorUnimplementedServer struct{} + +func (s *DRPCMCPConfiguratorUnimplementedServer) GetMCPServerConfigs(context.Context, *GetMCPServerConfigsRequest) (*GetMCPServerConfigsResponse, error) { + return nil, drpcerr.WithCode(errors.New("Unimplemented"), drpcerr.Unimplemented) +} + +func (s *DRPCMCPConfiguratorUnimplementedServer) GetMCPServerAccessTokensBatch(context.Context, *GetMCPServerAccessTokensBatchRequest) (*GetMCPServerAccessTokensBatchResponse, error) { + return nil, drpcerr.WithCode(errors.New("Unimplemented"), drpcerr.Unimplemented) +} + +type DRPCMCPConfiguratorDescription struct{} + +func (DRPCMCPConfiguratorDescription) NumMethods() int { return 2 } + +func (DRPCMCPConfiguratorDescription) Method(n int) (string, drpc.Encoding, drpc.Receiver, interface{}, bool) { + switch n { + case 0: + return "/proto.MCPConfigurator/GetMCPServerConfigs", drpcEncoding_File_aibridged_proto_aibridged_proto{}, + func(srv interface{}, ctx context.Context, in1, in2 interface{}) (drpc.Message, error) { + return srv.(DRPCMCPConfiguratorServer). + GetMCPServerConfigs( + ctx, + in1.(*GetMCPServerConfigsRequest), + ) + }, DRPCMCPConfiguratorServer.GetMCPServerConfigs, true + case 1: + return "/proto.MCPConfigurator/GetMCPServerAccessTokensBatch", drpcEncoding_File_aibridged_proto_aibridged_proto{}, + func(srv interface{}, ctx context.Context, in1, in2 interface{}) (drpc.Message, error) { + return srv.(DRPCMCPConfiguratorServer). + GetMCPServerAccessTokensBatch( + ctx, + in1.(*GetMCPServerAccessTokensBatchRequest), + ) + }, DRPCMCPConfiguratorServer.GetMCPServerAccessTokensBatch, true + default: + return "", nil, nil, nil, false + } +} + +func DRPCRegisterMCPConfigurator(mux drpc.Mux, impl DRPCMCPConfiguratorServer) error { + return mux.Register(impl, DRPCMCPConfiguratorDescription{}) +} + +type DRPCMCPConfigurator_GetMCPServerConfigsStream interface { + drpc.Stream + SendAndClose(*GetMCPServerConfigsResponse) error +} + +type drpcMCPConfigurator_GetMCPServerConfigsStream struct { + drpc.Stream +} + +func (x *drpcMCPConfigurator_GetMCPServerConfigsStream) SendAndClose(m *GetMCPServerConfigsResponse) error { + if err := x.MsgSend(m, drpcEncoding_File_aibridged_proto_aibridged_proto{}); err != nil { + return err + } + return x.CloseSend() +} + +type DRPCMCPConfigurator_GetMCPServerAccessTokensBatchStream interface { + drpc.Stream + SendAndClose(*GetMCPServerAccessTokensBatchResponse) error +} + +type drpcMCPConfigurator_GetMCPServerAccessTokensBatchStream struct { + drpc.Stream +} + +func (x *drpcMCPConfigurator_GetMCPServerAccessTokensBatchStream) SendAndClose(m *GetMCPServerAccessTokensBatchResponse) error { + if err := x.MsgSend(m, drpcEncoding_File_aibridged_proto_aibridged_proto{}); err != nil { + return err + } + return x.CloseSend() +} + +type DRPCAuthorizerClient interface { + DRPCConn() drpc.Conn + + IsAuthorized(ctx context.Context, in *IsAuthorizedRequest) (*IsAuthorizedResponse, error) +} + +type drpcAuthorizerClient struct { + cc drpc.Conn +} + +func NewDRPCAuthorizerClient(cc drpc.Conn) DRPCAuthorizerClient { + return &drpcAuthorizerClient{cc} +} + +func (c *drpcAuthorizerClient) DRPCConn() drpc.Conn { return c.cc } + +func (c *drpcAuthorizerClient) IsAuthorized(ctx context.Context, in *IsAuthorizedRequest) (*IsAuthorizedResponse, error) { + out := new(IsAuthorizedResponse) + err := c.cc.Invoke(ctx, "/proto.Authorizer/IsAuthorized", drpcEncoding_File_aibridged_proto_aibridged_proto{}, in, out) + if err != nil { + return nil, err + } + return out, nil +} + +type DRPCAuthorizerServer interface { + IsAuthorized(context.Context, *IsAuthorizedRequest) (*IsAuthorizedResponse, error) +} + +type DRPCAuthorizerUnimplementedServer struct{} + +func (s *DRPCAuthorizerUnimplementedServer) IsAuthorized(context.Context, *IsAuthorizedRequest) (*IsAuthorizedResponse, error) { + return nil, drpcerr.WithCode(errors.New("Unimplemented"), drpcerr.Unimplemented) +} + +type DRPCAuthorizerDescription struct{} + +func (DRPCAuthorizerDescription) NumMethods() int { return 1 } + +func (DRPCAuthorizerDescription) Method(n int) (string, drpc.Encoding, drpc.Receiver, interface{}, bool) { + switch n { + case 0: + return "/proto.Authorizer/IsAuthorized", drpcEncoding_File_aibridged_proto_aibridged_proto{}, + func(srv interface{}, ctx context.Context, in1, in2 interface{}) (drpc.Message, error) { + return srv.(DRPCAuthorizerServer). + IsAuthorized( + ctx, + in1.(*IsAuthorizedRequest), + ) + }, DRPCAuthorizerServer.IsAuthorized, true + default: + return "", nil, nil, nil, false + } +} + +func DRPCRegisterAuthorizer(mux drpc.Mux, impl DRPCAuthorizerServer) error { + return mux.Register(impl, DRPCAuthorizerDescription{}) +} + +type DRPCAuthorizer_IsAuthorizedStream interface { + drpc.Stream + SendAndClose(*IsAuthorizedResponse) error +} + +type drpcAuthorizer_IsAuthorizedStream struct { + drpc.Stream +} + +func (x *drpcAuthorizer_IsAuthorizedStream) SendAndClose(m *IsAuthorizedResponse) error { + if err := x.MsgSend(m, drpcEncoding_File_aibridged_proto_aibridged_proto{}); err != nil { + return err + } + return x.CloseSend() +}