// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// 	protoc-gen-go v1.36.10
// 	protoc        (unknown)
// source: tars/configurator/v1/configurator.proto

package configuratorv1

import (
	_ "github.com/tetrateio/agentrouter-go/genapi/api/tars/auth/v1"
	_ "github.com/tetrateio/agentrouter-go/genapi/api/tars/docs/v1"
	_ "google.golang.org/genproto/googleapis/api/annotations"
	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
	timestamppb "google.golang.org/protobuf/types/known/timestamppb"
	reflect "reflect"
	sync "sync"
	unsafe "unsafe"
)

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)
)

// ConfigType defines the type of configuration being managed.
type ConfigType int32

const (
	ConfigType_CONFIG_TYPE_UNSPECIFIED   ConfigType = 0
	ConfigType_CONFIG_TYPE_GLOBAL_ROUTES ConfigType = 1 // Global routing configuration
	ConfigType_CONFIG_TYPE_USER_ROUTES   ConfigType = 2 // User-specific routing configuration (includes
	// fallback and traffic split)
	ConfigType_CONFIG_TYPE_BYOK             ConfigType = 3  // Bring Your Own Key configuration
	ConfigType_CONFIG_TYPE_MCP_PROFILE      ConfigType = 4  // MCP Profile configuration
	ConfigType_CONFIG_TYPE_MCP_BACKENDS     ConfigType = 5  // MCP Backends configuration
	ConfigType_CONFIG_TYPE_OAUTH_TOKEN      ConfigType = 6  // OAuth Token configuration
	ConfigType_CONFIG_TYPE_BYOK_BACKENDS    ConfigType = 7  // BYOK Backends configuration (backend names and metadata)
	ConfigType_CONFIG_TYPE_GUARDRAILS       ConfigType = 8  // AOD guardrails configuration
	ConfigType_CONFIG_TYPE_PROXY_URL        ConfigType = 9  // Proxy URL from system_settings
	ConfigType_CONFIG_TYPE_PROXY            ConfigType = 10 // Proxy dataplane configuration (tars-dataplane dynamic module)
	ConfigType_CONFIG_TYPE_PROVIDER_SECRETS ConfigType = 11 // LLM provider secret rotation (fs-* Secrets)
	// MP-initiated remote DP upgrade. Trigger payload (target_version,
	// allow_downtime, credentials_ref) goes into event.metadata; worker
	// amends the same metadata via UpdateEventMetadata as phases progress.
	ConfigType_CONFIG_TYPE_DATAPLANE_UPGRADE ConfigType = 12
	// Project-scoped BYOK configuration for one route owner. Unlike
	// CONFIG_TYPE_BYOK (per-user, creator == route owner), the payload carries a
	// route owner U with their effective key set (project-level keys overridden
	// by U's user-scoped keys); each key retains its own creator id so the worker
	// can fetch the secret from the creator's realm. Emitted by the aikeys
	// Register/Revoke refresher, one per affected project member.
	ConfigType_CONFIG_TYPE_BYOK_SCOPED ConfigType = 13
)

// Enum value maps for ConfigType.
var (
	ConfigType_name = map[int32]string{
		0:  "CONFIG_TYPE_UNSPECIFIED",
		1:  "CONFIG_TYPE_GLOBAL_ROUTES",
		2:  "CONFIG_TYPE_USER_ROUTES",
		3:  "CONFIG_TYPE_BYOK",
		4:  "CONFIG_TYPE_MCP_PROFILE",
		5:  "CONFIG_TYPE_MCP_BACKENDS",
		6:  "CONFIG_TYPE_OAUTH_TOKEN",
		7:  "CONFIG_TYPE_BYOK_BACKENDS",
		8:  "CONFIG_TYPE_GUARDRAILS",
		9:  "CONFIG_TYPE_PROXY_URL",
		10: "CONFIG_TYPE_PROXY",
		11: "CONFIG_TYPE_PROVIDER_SECRETS",
		12: "CONFIG_TYPE_DATAPLANE_UPGRADE",
		13: "CONFIG_TYPE_BYOK_SCOPED",
	}
	ConfigType_value = map[string]int32{
		"CONFIG_TYPE_UNSPECIFIED":       0,
		"CONFIG_TYPE_GLOBAL_ROUTES":     1,
		"CONFIG_TYPE_USER_ROUTES":       2,
		"CONFIG_TYPE_BYOK":              3,
		"CONFIG_TYPE_MCP_PROFILE":       4,
		"CONFIG_TYPE_MCP_BACKENDS":      5,
		"CONFIG_TYPE_OAUTH_TOKEN":       6,
		"CONFIG_TYPE_BYOK_BACKENDS":     7,
		"CONFIG_TYPE_GUARDRAILS":        8,
		"CONFIG_TYPE_PROXY_URL":         9,
		"CONFIG_TYPE_PROXY":             10,
		"CONFIG_TYPE_PROVIDER_SECRETS":  11,
		"CONFIG_TYPE_DATAPLANE_UPGRADE": 12,
		"CONFIG_TYPE_BYOK_SCOPED":       13,
	}
)

func (x ConfigType) Enum() *ConfigType {
	p := new(ConfigType)
	*p = x
	return p
}

func (x ConfigType) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (ConfigType) Descriptor() protoreflect.EnumDescriptor {
	return file_tars_configurator_v1_configurator_proto_enumTypes[0].Descriptor()
}

func (ConfigType) Type() protoreflect.EnumType {
	return &file_tars_configurator_v1_configurator_proto_enumTypes[0]
}

func (x ConfigType) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use ConfigType.Descriptor instead.
func (ConfigType) EnumDescriptor() ([]byte, []int) {
	return file_tars_configurator_v1_configurator_proto_rawDescGZIP(), []int{0}
}

// EventType defines the type of event that triggered the update.
type EventType int32

const (
	EventType_EVENT_TYPE_UNSPECIFIED EventType = 0
	EventType_EVENT_TYPE_NEW         EventType = 1 // New configuration created
	EventType_EVENT_TYPE_UPDATE      EventType = 2 // Configuration updated
	// Upgrade-flow trigger (paired with CONFIG_TYPE_DATAPLANE_UPGRADE).
	// Distinct from UPDATE so the DB column self-documents what the event
	// is actually doing.
	EventType_EVENT_TYPE_UPGRADE EventType = 8
	// Cancel request for an in-flight upgrade (paired with
	// CONFIG_TYPE_DATAPLANE_UPGRADE). Metadata carries upgrade_event_id of
	// the row being cancelled; worker matches by TarsUpgrade CR name.
	EventType_EVENT_TYPE_UPGRADE_CANCEL EventType = 9
	// Operator-initiated rollback request after a completed upgrade
	// (paired with CONFIG_TYPE_DATAPLANE_UPGRADE). Metadata carries
	// upgrade_event_id of the upgrade being rolled back; worker spawns a
	// new TarsUpgrade CR + rollback Job that runs `helm rollback` against
	// the prior revision.
	EventType_EVENT_TYPE_UPGRADE_ROLLBACK EventType = 10
	EventType_EVENT_TYPE_DELETE           EventType = 3 // Configuration deleted
	EventType_EVENT_TYPE_UPDATE_BYOK      EventType = 4 // BYOK-specific update
	EventType_EVENT_TYPE_UPDATE_MCP       EventType = 5 // MCP-specific update
	EventType_EVENT_TYPE_UPDATE_OAUTH     EventType = 6 // OAuth-specific update
)

// Enum value maps for EventType.
var (
	EventType_name = map[int32]string{
		0:  "EVENT_TYPE_UNSPECIFIED",
		1:  "EVENT_TYPE_NEW",
		2:  "EVENT_TYPE_UPDATE",
		8:  "EVENT_TYPE_UPGRADE",
		9:  "EVENT_TYPE_UPGRADE_CANCEL",
		10: "EVENT_TYPE_UPGRADE_ROLLBACK",
		3:  "EVENT_TYPE_DELETE",
		4:  "EVENT_TYPE_UPDATE_BYOK",
		5:  "EVENT_TYPE_UPDATE_MCP",
		6:  "EVENT_TYPE_UPDATE_OAUTH",
	}
	EventType_value = map[string]int32{
		"EVENT_TYPE_UNSPECIFIED":      0,
		"EVENT_TYPE_NEW":              1,
		"EVENT_TYPE_UPDATE":           2,
		"EVENT_TYPE_UPGRADE":          8,
		"EVENT_TYPE_UPGRADE_CANCEL":   9,
		"EVENT_TYPE_UPGRADE_ROLLBACK": 10,
		"EVENT_TYPE_DELETE":           3,
		"EVENT_TYPE_UPDATE_BYOK":      4,
		"EVENT_TYPE_UPDATE_MCP":       5,
		"EVENT_TYPE_UPDATE_OAUTH":     6,
	}
)

func (x EventType) Enum() *EventType {
	p := new(EventType)
	*p = x
	return p
}

func (x EventType) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (EventType) Descriptor() protoreflect.EnumDescriptor {
	return file_tars_configurator_v1_configurator_proto_enumTypes[1].Descriptor()
}

func (EventType) Type() protoreflect.EnumType {
	return &file_tars_configurator_v1_configurator_proto_enumTypes[1]
}

func (x EventType) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use EventType.Descriptor instead.
func (EventType) EnumDescriptor() ([]byte, []int) {
	return file_tars_configurator_v1_configurator_proto_rawDescGZIP(), []int{1}
}

// GetConfigurationRequest requests configuration for users.
type GetConfigurationRequest struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// List of user queries to check for updates.
	// Supports batch queries for efficiency.
	Queries       []*UserConfigQuery `protobuf:"bytes,1,rep,name=queries,proto3" json:"queries,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *GetConfigurationRequest) Reset() {
	*x = GetConfigurationRequest{}
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[0]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *GetConfigurationRequest) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*GetConfigurationRequest) ProtoMessage() {}

func (x *GetConfigurationRequest) ProtoReflect() protoreflect.Message {
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[0]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use GetConfigurationRequest.ProtoReflect.Descriptor instead.
func (*GetConfigurationRequest) Descriptor() ([]byte, []int) {
	return file_tars_configurator_v1_configurator_proto_rawDescGZIP(), []int{0}
}

func (x *GetConfigurationRequest) GetQueries() []*UserConfigQuery {
	if x != nil {
		return x.Queries
	}
	return nil
}

// UserConfigQuery queries configuration for a specific user and config type.
type UserConfigQuery struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// User ID to query configuration for.
	// Use "system" for global/system-level configuration.
	UserId string `protobuf:"bytes,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"`
	// Configuration type to query.
	ConfigType ConfigType `protobuf:"varint,2,opt,name=config_type,json=configType,proto3,enum=tars.configurator.v1.ConfigType" json:"config_type,omitempty"`
	// Current version the client has.
	// Server returns configuration only if version is newer.
	CurrentVersion int64 `protobuf:"varint,3,opt,name=current_version,json=currentVersion,proto3" json:"current_version,omitempty"`
	// Key ID for user-specific configurations.
	// Used for BYOK, User routes, MCP profiles, etc.
	KeyId         string `protobuf:"bytes,4,opt,name=key_id,json=keyId,proto3" json:"key_id,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *UserConfigQuery) Reset() {
	*x = UserConfigQuery{}
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[1]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *UserConfigQuery) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*UserConfigQuery) ProtoMessage() {}

func (x *UserConfigQuery) ProtoReflect() protoreflect.Message {
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[1]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use UserConfigQuery.ProtoReflect.Descriptor instead.
func (*UserConfigQuery) Descriptor() ([]byte, []int) {
	return file_tars_configurator_v1_configurator_proto_rawDescGZIP(), []int{1}
}

func (x *UserConfigQuery) GetUserId() string {
	if x != nil {
		return x.UserId
	}
	return ""
}

func (x *UserConfigQuery) GetConfigType() ConfigType {
	if x != nil {
		return x.ConfigType
	}
	return ConfigType_CONFIG_TYPE_UNSPECIFIED
}

func (x *UserConfigQuery) GetCurrentVersion() int64 {
	if x != nil {
		return x.CurrentVersion
	}
	return 0
}

func (x *UserConfigQuery) GetKeyId() string {
	if x != nil {
		return x.KeyId
	}
	return ""
}

// GetConfigurationResponse returns configurations that have updates.
type GetConfigurationResponse struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// List of configurations with updates.
	// Only includes configs where version > current_version in request.
	Configurations []*Configuration `protobuf:"bytes,1,rep,name=configurations,proto3" json:"configurations,omitempty"`
	unknownFields  protoimpl.UnknownFields
	sizeCache      protoimpl.SizeCache
}

func (x *GetConfigurationResponse) Reset() {
	*x = GetConfigurationResponse{}
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[2]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *GetConfigurationResponse) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*GetConfigurationResponse) ProtoMessage() {}

func (x *GetConfigurationResponse) ProtoReflect() protoreflect.Message {
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[2]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use GetConfigurationResponse.ProtoReflect.Descriptor instead.
func (*GetConfigurationResponse) Descriptor() ([]byte, []int) {
	return file_tars_configurator_v1_configurator_proto_rawDescGZIP(), []int{2}
}

func (x *GetConfigurationResponse) GetConfigurations() []*Configuration {
	if x != nil {
		return x.Configurations
	}
	return nil
}

// TriggerUpdateRequest triggers a configuration update.
type TriggerUpdateRequest struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// User ID for the configuration.
	// If not provided, uses authenticated user ID.
	// Use "system" for global configuration.
	UserId string `protobuf:"bytes,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"`
	// Configuration type to update.
	ConfigType ConfigType `protobuf:"varint,2,opt,name=config_type,json=configType,proto3,enum=tars.configurator.v1.ConfigType" json:"config_type,omitempty"`
	// Event type that triggered this update.
	EventType EventType `protobuf:"varint,3,opt,name=event_type,json=eventType,proto3,enum=tars.configurator.v1.EventType" json:"event_type,omitempty"`
	// Optional key ID for user-specific configurations.
	// Used for BYOK, MCP profiles, etc.
	KeyId string `protobuf:"bytes,4,opt,name=key_id,json=keyId,proto3" json:"key_id,omitempty"`
	// Optional workspace (data plane) scope for the event.
	// When set, the configurator emits a single event scoped to this
	// workspace only. When unset, the configurator fans the event out
	// to every workspace belonging to the caller's customer, so every
	// data plane in that customer converges on the new configuration.
	WorkspaceId string `protobuf:"bytes,5,opt,name=workspace_id,json=workspaceId,proto3" json:"workspace_id,omitempty"`
	// Optional inline payload for config types that take operator-provided
	// params. Ignored by config types that read their state from DB. Today
	// only CONFIG_TYPE_DATAPLANE_UPGRADE consumes this. The fields end up
	// merged into the persisted event.metadata JSON so the worker can read
	// them at dispatch time.
	Metadata      *TriggerMetadata `protobuf:"bytes,6,opt,name=metadata,proto3" json:"metadata,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *TriggerUpdateRequest) Reset() {
	*x = TriggerUpdateRequest{}
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[3]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *TriggerUpdateRequest) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*TriggerUpdateRequest) ProtoMessage() {}

func (x *TriggerUpdateRequest) ProtoReflect() protoreflect.Message {
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[3]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use TriggerUpdateRequest.ProtoReflect.Descriptor instead.
func (*TriggerUpdateRequest) Descriptor() ([]byte, []int) {
	return file_tars_configurator_v1_configurator_proto_rawDescGZIP(), []int{3}
}

func (x *TriggerUpdateRequest) GetUserId() string {
	if x != nil {
		return x.UserId
	}
	return ""
}

func (x *TriggerUpdateRequest) GetConfigType() ConfigType {
	if x != nil {
		return x.ConfigType
	}
	return ConfigType_CONFIG_TYPE_UNSPECIFIED
}

func (x *TriggerUpdateRequest) GetEventType() EventType {
	if x != nil {
		return x.EventType
	}
	return EventType_EVENT_TYPE_UNSPECIFIED
}

func (x *TriggerUpdateRequest) GetKeyId() string {
	if x != nil {
		return x.KeyId
	}
	return ""
}

func (x *TriggerUpdateRequest) GetWorkspaceId() string {
	if x != nil {
		return x.WorkspaceId
	}
	return ""
}

func (x *TriggerUpdateRequest) GetMetadata() *TriggerMetadata {
	if x != nil {
		return x.Metadata
	}
	return nil
}

// TriggerMetadata is the open extension point on TriggerUpdate for config
// types whose payload is operator-supplied rather than DB-derived. Add
// per-config-type sub-messages here as new types appear.
type TriggerMetadata struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Set when config_type=CONFIG_TYPE_DATAPLANE_UPGRADE.
	DataplaneUpgrade *DataplaneUpgradeTrigger `protobuf:"bytes,1,opt,name=dataplane_upgrade,json=dataplaneUpgrade,proto3" json:"dataplane_upgrade,omitempty"`
	unknownFields    protoimpl.UnknownFields
	sizeCache        protoimpl.SizeCache
}

func (x *TriggerMetadata) Reset() {
	*x = TriggerMetadata{}
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[4]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *TriggerMetadata) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*TriggerMetadata) ProtoMessage() {}

func (x *TriggerMetadata) ProtoReflect() protoreflect.Message {
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[4]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use TriggerMetadata.ProtoReflect.Descriptor instead.
func (*TriggerMetadata) Descriptor() ([]byte, []int) {
	return file_tars_configurator_v1_configurator_proto_rawDescGZIP(), []int{4}
}

func (x *TriggerMetadata) GetDataplaneUpgrade() *DataplaneUpgradeTrigger {
	if x != nil {
		return x.DataplaneUpgrade
	}
	return nil
}

// DataplaneUpgradeTrigger is the operator-provided payload for one
// MP-initiated remote DP upgrade attempt. Mirrors the fields persisted
// into liaison_configuration_events.metadata when the event is written.
type DataplaneUpgradeTrigger struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// tare release tag to upgrade to (e.g. "v0.4.1"). Shared across Liaison,
	// EG, AIGW, data-plane Envoy, and ExtProc.
	TargetVersion string `protobuf:"bytes,1,opt,name=target_version,json=targetVersion,proto3" json:"target_version,omitempty"`
	// Bypass the data-plane HA preflight. UI gates this to Super Admin.
	AllowDowntime bool `protobuf:"varint,2,opt,name=allow_downtime,json=allowDowntime,proto3" json:"allow_downtime,omitempty"`
	// Optional reference to a stored credential bundle (v1.x retry-with-creds
	// flow). Empty for the initial trigger; populated when the operator
	// resubmits after a NeedsCredentials reject.
	CredentialsRef string `protobuf:"bytes,3,opt,name=credentials_ref,json=credentialsRef,proto3" json:"credentials_ref,omitempty"`
	// When true on a retry-with-creds trigger, the worker preserves the
	// referenced service-secret row after delivery so subsequent upgrades
	// in this workspace can reuse it without re-prompting.
	PersistInCluster bool `protobuf:"varint,4,opt,name=persist_in_cluster,json=persistInCluster,proto3" json:"persist_in_cluster,omitempty"`
	// Check names the operator has accepted via the dashboard "proceed
	// anyway" flow. Matching Preflight error rows are downgraded to
	// warnings on the next attempt so the upgrade proceeds; the row stays
	// in status.preflightChecks for audit.
	//
	// Persistence is implicit: the dashboard reads the previous event's
	// metadata to pre-check the blocker modal on retry, so "remember this"
	// is the same code path as "include in this trigger". No parallel
	// storage.
	AcknowledgedPreflightChecks []string `protobuf:"bytes,5,rep,name=acknowledged_preflight_checks,json=acknowledgedPreflightChecks,proto3" json:"acknowledged_preflight_checks,omitempty"`
	unknownFields               protoimpl.UnknownFields
	sizeCache                   protoimpl.SizeCache
}

func (x *DataplaneUpgradeTrigger) Reset() {
	*x = DataplaneUpgradeTrigger{}
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[5]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *DataplaneUpgradeTrigger) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*DataplaneUpgradeTrigger) ProtoMessage() {}

func (x *DataplaneUpgradeTrigger) ProtoReflect() protoreflect.Message {
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[5]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use DataplaneUpgradeTrigger.ProtoReflect.Descriptor instead.
func (*DataplaneUpgradeTrigger) Descriptor() ([]byte, []int) {
	return file_tars_configurator_v1_configurator_proto_rawDescGZIP(), []int{5}
}

func (x *DataplaneUpgradeTrigger) GetTargetVersion() string {
	if x != nil {
		return x.TargetVersion
	}
	return ""
}

func (x *DataplaneUpgradeTrigger) GetAllowDowntime() bool {
	if x != nil {
		return x.AllowDowntime
	}
	return false
}

func (x *DataplaneUpgradeTrigger) GetCredentialsRef() string {
	if x != nil {
		return x.CredentialsRef
	}
	return ""
}

func (x *DataplaneUpgradeTrigger) GetPersistInCluster() bool {
	if x != nil {
		return x.PersistInCluster
	}
	return false
}

func (x *DataplaneUpgradeTrigger) GetAcknowledgedPreflightChecks() []string {
	if x != nil {
		return x.AcknowledgedPreflightChecks
	}
	return nil
}

// TriggerUpdateResponse confirms the update trigger.
type TriggerUpdateResponse struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Configuration that was generated/updated.
	Configuration *Configuration `protobuf:"bytes,1,opt,name=configuration,proto3" json:"configuration,omitempty"`
	// Whether a new configuration was generated.
	ConfigurationUpdated bool `protobuf:"varint,2,opt,name=configuration_updated,json=configurationUpdated,proto3" json:"configuration_updated,omitempty"`
	unknownFields        protoimpl.UnknownFields
	sizeCache            protoimpl.SizeCache
}

func (x *TriggerUpdateResponse) Reset() {
	*x = TriggerUpdateResponse{}
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[6]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *TriggerUpdateResponse) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*TriggerUpdateResponse) ProtoMessage() {}

func (x *TriggerUpdateResponse) ProtoReflect() protoreflect.Message {
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[6]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use TriggerUpdateResponse.ProtoReflect.Descriptor instead.
func (*TriggerUpdateResponse) Descriptor() ([]byte, []int) {
	return file_tars_configurator_v1_configurator_proto_rawDescGZIP(), []int{6}
}

func (x *TriggerUpdateResponse) GetConfiguration() *Configuration {
	if x != nil {
		return x.Configuration
	}
	return nil
}

func (x *TriggerUpdateResponse) GetConfigurationUpdated() bool {
	if x != nil {
		return x.ConfigurationUpdated
	}
	return false
}

// ListConfigurationsRequest lists configurations with filtering.
type ListConfigurationsRequest struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Filter by user ID (optional).
	UserId string `protobuf:"bytes,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"`
	// Filter by config type (optional).
	ConfigType ConfigType `protobuf:"varint,2,opt,name=config_type,json=configType,proto3,enum=tars.configurator.v1.ConfigType" json:"config_type,omitempty"`
	// Pagination.
	PageSize int32 `protobuf:"varint,3,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"`
	// Page token returned by a prior call's next_page_token.
	PageToken     string `protobuf:"bytes,4,opt,name=page_token,json=pageToken,proto3" json:"page_token,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *ListConfigurationsRequest) Reset() {
	*x = ListConfigurationsRequest{}
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[7]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *ListConfigurationsRequest) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*ListConfigurationsRequest) ProtoMessage() {}

func (x *ListConfigurationsRequest) ProtoReflect() protoreflect.Message {
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[7]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use ListConfigurationsRequest.ProtoReflect.Descriptor instead.
func (*ListConfigurationsRequest) Descriptor() ([]byte, []int) {
	return file_tars_configurator_v1_configurator_proto_rawDescGZIP(), []int{7}
}

func (x *ListConfigurationsRequest) GetUserId() string {
	if x != nil {
		return x.UserId
	}
	return ""
}

func (x *ListConfigurationsRequest) GetConfigType() ConfigType {
	if x != nil {
		return x.ConfigType
	}
	return ConfigType_CONFIG_TYPE_UNSPECIFIED
}

func (x *ListConfigurationsRequest) GetPageSize() int32 {
	if x != nil {
		return x.PageSize
	}
	return 0
}

func (x *ListConfigurationsRequest) GetPageToken() string {
	if x != nil {
		return x.PageToken
	}
	return ""
}

// ListConfigurationsResponse returns list of configurations.
type ListConfigurationsResponse struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Configurations matching the request filters for this page.
	Configurations []*Configuration `protobuf:"bytes,1,rep,name=configurations,proto3" json:"configurations,omitempty"`
	// Token to pass as page_token to fetch the next page; empty when no more.
	NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *ListConfigurationsResponse) Reset() {
	*x = ListConfigurationsResponse{}
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[8]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *ListConfigurationsResponse) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*ListConfigurationsResponse) ProtoMessage() {}

func (x *ListConfigurationsResponse) ProtoReflect() protoreflect.Message {
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[8]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use ListConfigurationsResponse.ProtoReflect.Descriptor instead.
func (*ListConfigurationsResponse) Descriptor() ([]byte, []int) {
	return file_tars_configurator_v1_configurator_proto_rawDescGZIP(), []int{8}
}

func (x *ListConfigurationsResponse) GetConfigurations() []*Configuration {
	if x != nil {
		return x.Configurations
	}
	return nil
}

func (x *ListConfigurationsResponse) GetNextPageToken() string {
	if x != nil {
		return x.NextPageToken
	}
	return ""
}

// ListPendingEventsRequest requests list of pending configuration events.
type ListPendingEventsRequest struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Maximum number of events to return.
	// If not specified, defaults to 100.
	Limit int32 `protobuf:"varint,1,opt,name=limit,proto3" json:"limit,omitempty"`
	// The liaison's out-of-band observation of the tare-doctor CronJob,
	// piggybacked on the poll. Lets MP surface *why* the doctor stopped
	// reporting — the doctor can't report when it is itself the broken
	// component, so the (live) worker reports on its behalf. Empty on legacy
	// workers and until the worker's first doctor sweep.
	DoctorRuntime *DoctorRuntimeStatus `protobuf:"bytes,2,opt,name=doctor_runtime,json=doctorRuntime,proto3" json:"doctor_runtime,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *ListPendingEventsRequest) Reset() {
	*x = ListPendingEventsRequest{}
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[9]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *ListPendingEventsRequest) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*ListPendingEventsRequest) ProtoMessage() {}

func (x *ListPendingEventsRequest) ProtoReflect() protoreflect.Message {
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[9]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use ListPendingEventsRequest.ProtoReflect.Descriptor instead.
func (*ListPendingEventsRequest) Descriptor() ([]byte, []int) {
	return file_tars_configurator_v1_configurator_proto_rawDescGZIP(), []int{9}
}

func (x *ListPendingEventsRequest) GetLimit() int32 {
	if x != nil {
		return x.Limit
	}
	return 0
}

func (x *ListPendingEventsRequest) GetDoctorRuntime() *DoctorRuntimeStatus {
	if x != nil {
		return x.DoctorRuntime
	}
	return nil
}

// DoctorRuntimeStatus is the liaison worker's backup view of the tare-doctor
// CronJob's runtime health, derived from in-cluster Job/pod state. Used to
// explain a stale doctor report rather than to gate anything.
type DoctorRuntimeStatus struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Worker pod identity (hostname / pod name) of the reporting instance.
	InstanceId string `protobuf:"bytes,1,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"`
	// Running liaison build version, from the worker binary's embedded version.
	TareVersion string `protobuf:"bytes,2,opt,name=tare_version,json=tareVersion,proto3" json:"tare_version,omitempty"`
	// Verdict for the doctor CronJob: "ok" (recent success / currently running),
	// "failing" (last Job failed), or "suspended".
	State string `protobuf:"bytes,3,opt,name=state,proto3" json:"state,omitempty"`
	// Human-readable failure reason when state="failing" (e.g.
	// "ImagePullBackOff", "CrashLoopBackOff", "exit code 1").
	Reason string `protobuf:"bytes,4,opt,name=reason,proto3" json:"reason,omitempty"`
	// CronJob's last successful completion; unset if never / unknown.
	LastSuccessfulRun *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=last_successful_run,json=lastSuccessfulRun,proto3" json:"last_successful_run,omitempty"`
	// When the worker computed this verdict (worker clock).
	ObservedAt    *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=observed_at,json=observedAt,proto3" json:"observed_at,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *DoctorRuntimeStatus) Reset() {
	*x = DoctorRuntimeStatus{}
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[10]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *DoctorRuntimeStatus) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*DoctorRuntimeStatus) ProtoMessage() {}

func (x *DoctorRuntimeStatus) ProtoReflect() protoreflect.Message {
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[10]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use DoctorRuntimeStatus.ProtoReflect.Descriptor instead.
func (*DoctorRuntimeStatus) Descriptor() ([]byte, []int) {
	return file_tars_configurator_v1_configurator_proto_rawDescGZIP(), []int{10}
}

func (x *DoctorRuntimeStatus) GetInstanceId() string {
	if x != nil {
		return x.InstanceId
	}
	return ""
}

func (x *DoctorRuntimeStatus) GetTareVersion() string {
	if x != nil {
		return x.TareVersion
	}
	return ""
}

func (x *DoctorRuntimeStatus) GetState() string {
	if x != nil {
		return x.State
	}
	return ""
}

func (x *DoctorRuntimeStatus) GetReason() string {
	if x != nil {
		return x.Reason
	}
	return ""
}

func (x *DoctorRuntimeStatus) GetLastSuccessfulRun() *timestamppb.Timestamp {
	if x != nil {
		return x.LastSuccessfulRun
	}
	return nil
}

func (x *DoctorRuntimeStatus) GetObservedAt() *timestamppb.Timestamp {
	if x != nil {
		return x.ObservedAt
	}
	return nil
}

// ListPendingEventsResponse returns list of pending events.
type ListPendingEventsResponse struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Pending configuration events awaiting worker processing.
	Events        []*ConfigurationEvent `protobuf:"bytes,1,rep,name=events,proto3" json:"events,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *ListPendingEventsResponse) Reset() {
	*x = ListPendingEventsResponse{}
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[11]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *ListPendingEventsResponse) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*ListPendingEventsResponse) ProtoMessage() {}

func (x *ListPendingEventsResponse) ProtoReflect() protoreflect.Message {
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[11]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use ListPendingEventsResponse.ProtoReflect.Descriptor instead.
func (*ListPendingEventsResponse) Descriptor() ([]byte, []int) {
	return file_tars_configurator_v1_configurator_proto_rawDescGZIP(), []int{11}
}

func (x *ListPendingEventsResponse) GetEvents() []*ConfigurationEvent {
	if x != nil {
		return x.Events
	}
	return nil
}

// ReconcileWorkspaceRequest is the (empty) request for ReconcileWorkspace.
// Target workspace is resolved from the caller's auth claims.
type ReconcileWorkspaceRequest struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *ReconcileWorkspaceRequest) Reset() {
	*x = ReconcileWorkspaceRequest{}
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[12]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *ReconcileWorkspaceRequest) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*ReconcileWorkspaceRequest) ProtoMessage() {}

func (x *ReconcileWorkspaceRequest) ProtoReflect() protoreflect.Message {
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[12]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use ReconcileWorkspaceRequest.ProtoReflect.Descriptor instead.
func (*ReconcileWorkspaceRequest) Descriptor() ([]byte, []int) {
	return file_tars_configurator_v1_configurator_proto_rawDescGZIP(), []int{12}
}

// ReconcileWorkspaceResponse reports how many slot events the sweep
// enqueued. replayed_total is the sum of the per-bucket counts.
type ReconcileWorkspaceResponse struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Total slot events enqueued across all buckets (sum of the fields below).
	ReplayedTotal int32 `protobuf:"varint,1,opt,name=replayed_total,json=replayedTotal,proto3" json:"replayed_total,omitempty"`
	// Events enqueued for the global (system-wide) config slot.
	ReplayedGlobal int32 `protobuf:"varint,2,opt,name=replayed_global,json=replayedGlobal,proto3" json:"replayed_global,omitempty"`
	// Events enqueued for per-user config slots.
	ReplayedPerUser int32 `protobuf:"varint,3,opt,name=replayed_per_user,json=replayedPerUser,proto3" json:"replayed_per_user,omitempty"`
	// Events enqueued for per-user, per-key config slots.
	ReplayedPerUserPerKey int32 `protobuf:"varint,4,opt,name=replayed_per_user_per_key,json=replayedPerUserPerKey,proto3" json:"replayed_per_user_per_key,omitempty"`
	unknownFields         protoimpl.UnknownFields
	sizeCache             protoimpl.SizeCache
}

func (x *ReconcileWorkspaceResponse) Reset() {
	*x = ReconcileWorkspaceResponse{}
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[13]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *ReconcileWorkspaceResponse) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*ReconcileWorkspaceResponse) ProtoMessage() {}

func (x *ReconcileWorkspaceResponse) ProtoReflect() protoreflect.Message {
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[13]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use ReconcileWorkspaceResponse.ProtoReflect.Descriptor instead.
func (*ReconcileWorkspaceResponse) Descriptor() ([]byte, []int) {
	return file_tars_configurator_v1_configurator_proto_rawDescGZIP(), []int{13}
}

func (x *ReconcileWorkspaceResponse) GetReplayedTotal() int32 {
	if x != nil {
		return x.ReplayedTotal
	}
	return 0
}

func (x *ReconcileWorkspaceResponse) GetReplayedGlobal() int32 {
	if x != nil {
		return x.ReplayedGlobal
	}
	return 0
}

func (x *ReconcileWorkspaceResponse) GetReplayedPerUser() int32 {
	if x != nil {
		return x.ReplayedPerUser
	}
	return 0
}

func (x *ReconcileWorkspaceResponse) GetReplayedPerUserPerKey() int32 {
	if x != nil {
		return x.ReplayedPerUserPerKey
	}
	return 0
}

// FullSyncWorkspaceRequest is the (empty) request for FullSyncWorkspace.
// Target workspace and customer are resolved from the caller's auth claims.
type FullSyncWorkspaceRequest struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *FullSyncWorkspaceRequest) Reset() {
	*x = FullSyncWorkspaceRequest{}
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[14]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *FullSyncWorkspaceRequest) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*FullSyncWorkspaceRequest) ProtoMessage() {}

func (x *FullSyncWorkspaceRequest) ProtoReflect() protoreflect.Message {
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[14]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use FullSyncWorkspaceRequest.ProtoReflect.Descriptor instead.
func (*FullSyncWorkspaceRequest) Descriptor() ([]byte, []int) {
	return file_tars_configurator_v1_configurator_proto_rawDescGZIP(), []int{14}
}

// FullSyncWorkspaceResponse reports how many slot events the full sync
// enqueued, scoped to per-user buckets (global is handled by drift sweep).
type FullSyncWorkspaceResponse struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Total per-user slot events enqueued (sum of the fields below).
	ReplayedTotal int32 `protobuf:"varint,1,opt,name=replayed_total,json=replayedTotal,proto3" json:"replayed_total,omitempty"`
	// Events enqueued for per-user config slots.
	ReplayedPerUser int32 `protobuf:"varint,2,opt,name=replayed_per_user,json=replayedPerUser,proto3" json:"replayed_per_user,omitempty"`
	// Events enqueued for per-user, per-key config slots.
	ReplayedPerUserPerKey int32 `protobuf:"varint,3,opt,name=replayed_per_user_per_key,json=replayedPerUserPerKey,proto3" json:"replayed_per_user_per_key,omitempty"`
	unknownFields         protoimpl.UnknownFields
	sizeCache             protoimpl.SizeCache
}

func (x *FullSyncWorkspaceResponse) Reset() {
	*x = FullSyncWorkspaceResponse{}
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[15]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *FullSyncWorkspaceResponse) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*FullSyncWorkspaceResponse) ProtoMessage() {}

func (x *FullSyncWorkspaceResponse) ProtoReflect() protoreflect.Message {
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[15]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use FullSyncWorkspaceResponse.ProtoReflect.Descriptor instead.
func (*FullSyncWorkspaceResponse) Descriptor() ([]byte, []int) {
	return file_tars_configurator_v1_configurator_proto_rawDescGZIP(), []int{15}
}

func (x *FullSyncWorkspaceResponse) GetReplayedTotal() int32 {
	if x != nil {
		return x.ReplayedTotal
	}
	return 0
}

func (x *FullSyncWorkspaceResponse) GetReplayedPerUser() int32 {
	if x != nil {
		return x.ReplayedPerUser
	}
	return 0
}

func (x *FullSyncWorkspaceResponse) GetReplayedPerUserPerKey() int32 {
	if x != nil {
		return x.ReplayedPerUserPerKey
	}
	return 0
}

// ConfigurationEvent represents a configuration change event.
type ConfigurationEvent struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Unique event identifier.
	Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
	// User ID who owns this configuration.
	UserId string `protobuf:"bytes,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"`
	// Configuration type.
	ConfigType ConfigType `protobuf:"varint,3,opt,name=config_type,json=configType,proto3,enum=tars.configurator.v1.ConfigType" json:"config_type,omitempty"`
	// Event type (new/update/delete).
	EventType string `protobuf:"bytes,4,opt,name=event_type,json=eventType,proto3" json:"event_type,omitempty"`
	// Optional key ID for user-specific configurations.
	KeyId string `protobuf:"bytes,5,opt,name=key_id,json=keyId,proto3" json:"key_id,omitempty"`
	// Reference to the configuration in liaison_configurations table.
	ConfigId string `protobuf:"bytes,6,opt,name=config_id,json=configId,proto3" json:"config_id,omitempty"`
	// Configuration version number.
	ConfigVersion int64 `protobuf:"varint,7,opt,name=config_version,json=configVersion,proto3" json:"config_version,omitempty"`
	// Event status (pending/acknowledged/applied/failed).
	Status string `protobuf:"bytes,8,opt,name=status,proto3" json:"status,omitempty"`
	// When the event was triggered.
	TriggeredAt *timestamppb.Timestamp `protobuf:"bytes,9,opt,name=triggered_at,json=triggeredAt,proto3" json:"triggered_at,omitempty"`
	// Retry count for failed events.
	RetryCount int32 `protobuf:"varint,10,opt,name=retry_count,json=retryCount,proto3" json:"retry_count,omitempty"`
	// Workspace (data plane) this event is scoped to. Empty for legacy
	// unscoped events written before multi-data-plane support.
	WorkspaceId string `protobuf:"bytes,11,opt,name=workspace_id,json=workspaceId,proto3" json:"workspace_id,omitempty"`
	// Raw event metadata JSON from liaison_configuration_events.metadata.
	// Most config types leave this empty (the worker reads config_data via
	// GetConfiguration instead). DATAPLANE_UPGRADE events carry their
	// trigger payload here so the worker can dispatch off the event directly.
	Metadata      string `protobuf:"bytes,12,opt,name=metadata,proto3" json:"metadata,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *ConfigurationEvent) Reset() {
	*x = ConfigurationEvent{}
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[16]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *ConfigurationEvent) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*ConfigurationEvent) ProtoMessage() {}

func (x *ConfigurationEvent) ProtoReflect() protoreflect.Message {
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[16]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use ConfigurationEvent.ProtoReflect.Descriptor instead.
func (*ConfigurationEvent) Descriptor() ([]byte, []int) {
	return file_tars_configurator_v1_configurator_proto_rawDescGZIP(), []int{16}
}

func (x *ConfigurationEvent) GetId() string {
	if x != nil {
		return x.Id
	}
	return ""
}

func (x *ConfigurationEvent) GetUserId() string {
	if x != nil {
		return x.UserId
	}
	return ""
}

func (x *ConfigurationEvent) GetConfigType() ConfigType {
	if x != nil {
		return x.ConfigType
	}
	return ConfigType_CONFIG_TYPE_UNSPECIFIED
}

func (x *ConfigurationEvent) GetEventType() string {
	if x != nil {
		return x.EventType
	}
	return ""
}

func (x *ConfigurationEvent) GetKeyId() string {
	if x != nil {
		return x.KeyId
	}
	return ""
}

func (x *ConfigurationEvent) GetConfigId() string {
	if x != nil {
		return x.ConfigId
	}
	return ""
}

func (x *ConfigurationEvent) GetConfigVersion() int64 {
	if x != nil {
		return x.ConfigVersion
	}
	return 0
}

func (x *ConfigurationEvent) GetStatus() string {
	if x != nil {
		return x.Status
	}
	return ""
}

func (x *ConfigurationEvent) GetTriggeredAt() *timestamppb.Timestamp {
	if x != nil {
		return x.TriggeredAt
	}
	return nil
}

func (x *ConfigurationEvent) GetRetryCount() int32 {
	if x != nil {
		return x.RetryCount
	}
	return 0
}

func (x *ConfigurationEvent) GetWorkspaceId() string {
	if x != nil {
		return x.WorkspaceId
	}
	return ""
}

func (x *ConfigurationEvent) GetMetadata() string {
	if x != nil {
		return x.Metadata
	}
	return ""
}

// AcknowledgeEventRequest acknowledges an event.
type AcknowledgeEventRequest struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Event ID to acknowledge.
	EventId string `protobuf:"bytes,1,opt,name=event_id,json=eventId,proto3" json:"event_id,omitempty"`
	// Worker ID that is acknowledging the event.
	WorkerId      string `protobuf:"bytes,2,opt,name=worker_id,json=workerId,proto3" json:"worker_id,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *AcknowledgeEventRequest) Reset() {
	*x = AcknowledgeEventRequest{}
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[17]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *AcknowledgeEventRequest) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*AcknowledgeEventRequest) ProtoMessage() {}

func (x *AcknowledgeEventRequest) ProtoReflect() protoreflect.Message {
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[17]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use AcknowledgeEventRequest.ProtoReflect.Descriptor instead.
func (*AcknowledgeEventRequest) Descriptor() ([]byte, []int) {
	return file_tars_configurator_v1_configurator_proto_rawDescGZIP(), []int{17}
}

func (x *AcknowledgeEventRequest) GetEventId() string {
	if x != nil {
		return x.EventId
	}
	return ""
}

func (x *AcknowledgeEventRequest) GetWorkerId() string {
	if x != nil {
		return x.WorkerId
	}
	return ""
}

// AcknowledgeEventResponse confirms acknowledgment.
type AcknowledgeEventResponse struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// True if the event was acknowledged (claimed) by this worker.
	Success       bool `protobuf:"varint,1,opt,name=success,proto3" json:"success,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *AcknowledgeEventResponse) Reset() {
	*x = AcknowledgeEventResponse{}
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[18]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *AcknowledgeEventResponse) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*AcknowledgeEventResponse) ProtoMessage() {}

func (x *AcknowledgeEventResponse) ProtoReflect() protoreflect.Message {
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[18]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use AcknowledgeEventResponse.ProtoReflect.Descriptor instead.
func (*AcknowledgeEventResponse) Descriptor() ([]byte, []int) {
	return file_tars_configurator_v1_configurator_proto_rawDescGZIP(), []int{18}
}

func (x *AcknowledgeEventResponse) GetSuccess() bool {
	if x != nil {
		return x.Success
	}
	return false
}

// CompleteEventRequest marks an event as complete (applied or failed).
type CompleteEventRequest struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Event ID to complete.
	EventId string `protobuf:"bytes,1,opt,name=event_id,json=eventId,proto3" json:"event_id,omitempty"`
	// Whether the event was successfully applied.
	Success bool `protobuf:"varint,2,opt,name=success,proto3" json:"success,omitempty"`
	// Error message if failed.
	ErrorMessage  string `protobuf:"bytes,3,opt,name=error_message,json=errorMessage,proto3" json:"error_message,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *CompleteEventRequest) Reset() {
	*x = CompleteEventRequest{}
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[19]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *CompleteEventRequest) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*CompleteEventRequest) ProtoMessage() {}

func (x *CompleteEventRequest) ProtoReflect() protoreflect.Message {
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[19]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use CompleteEventRequest.ProtoReflect.Descriptor instead.
func (*CompleteEventRequest) Descriptor() ([]byte, []int) {
	return file_tars_configurator_v1_configurator_proto_rawDescGZIP(), []int{19}
}

func (x *CompleteEventRequest) GetEventId() string {
	if x != nil {
		return x.EventId
	}
	return ""
}

func (x *CompleteEventRequest) GetSuccess() bool {
	if x != nil {
		return x.Success
	}
	return false
}

func (x *CompleteEventRequest) GetErrorMessage() string {
	if x != nil {
		return x.ErrorMessage
	}
	return ""
}

// CompleteEventResponse confirms completion.
type CompleteEventResponse struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// True if the event status was updated to applied or failed.
	Success       bool `protobuf:"varint,1,opt,name=success,proto3" json:"success,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *CompleteEventResponse) Reset() {
	*x = CompleteEventResponse{}
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[20]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *CompleteEventResponse) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*CompleteEventResponse) ProtoMessage() {}

func (x *CompleteEventResponse) ProtoReflect() protoreflect.Message {
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[20]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use CompleteEventResponse.ProtoReflect.Descriptor instead.
func (*CompleteEventResponse) Descriptor() ([]byte, []int) {
	return file_tars_configurator_v1_configurator_proto_rawDescGZIP(), []int{20}
}

func (x *CompleteEventResponse) GetSuccess() bool {
	if x != nil {
		return x.Success
	}
	return false
}

// ListActiveUsersRequest requests list of active users.
type ListActiveUsersRequest struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Maximum number of users to return.
	// If not specified, defaults to 100.
	Limit         int32 `protobuf:"varint,1,opt,name=limit,proto3" json:"limit,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *ListActiveUsersRequest) Reset() {
	*x = ListActiveUsersRequest{}
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[21]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *ListActiveUsersRequest) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*ListActiveUsersRequest) ProtoMessage() {}

func (x *ListActiveUsersRequest) ProtoReflect() protoreflect.Message {
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[21]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use ListActiveUsersRequest.ProtoReflect.Descriptor instead.
func (*ListActiveUsersRequest) Descriptor() ([]byte, []int) {
	return file_tars_configurator_v1_configurator_proto_rawDescGZIP(), []int{21}
}

func (x *ListActiveUsersRequest) GetLimit() int32 {
	if x != nil {
		return x.Limit
	}
	return 0
}

// ListActiveUsersResponse returns list of active user IDs.
type ListActiveUsersResponse struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// User IDs that currently have active configurations.
	UserIds       []string `protobuf:"bytes,1,rep,name=user_ids,json=userIds,proto3" json:"user_ids,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *ListActiveUsersResponse) Reset() {
	*x = ListActiveUsersResponse{}
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[22]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *ListActiveUsersResponse) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*ListActiveUsersResponse) ProtoMessage() {}

func (x *ListActiveUsersResponse) ProtoReflect() protoreflect.Message {
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[22]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use ListActiveUsersResponse.ProtoReflect.Descriptor instead.
func (*ListActiveUsersResponse) Descriptor() ([]byte, []int) {
	return file_tars_configurator_v1_configurator_proto_rawDescGZIP(), []int{22}
}

func (x *ListActiveUsersResponse) GetUserIds() []string {
	if x != nil {
		return x.UserIds
	}
	return nil
}

// Configuration represents a liaison configuration entry.
type Configuration struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Unique identifier.
	Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
	// User ID who owns this configuration.
	// "system" for global configuration.
	UserId string `protobuf:"bytes,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"`
	// Configuration type.
	ConfigType ConfigType `protobuf:"varint,3,opt,name=config_type,json=configType,proto3,enum=tars.configurator.v1.ConfigType" json:"config_type,omitempty"`
	// Configuration data as JSON.
	// The structure depends on config_type:
	// - BYOK: AIProvidersList with BYOK keys
	// - MCP_PROFILE: MCPProfile list
	// - OAUTH_TOKEN: OAuth token metadata
	// - GLOBAL_ROUTES: Global route map
	// - FALLBACK: FallbackSettings
	// - TRAFFIC_SPLIT: TrafficSplitSettings
	ConfigData string `protobuf:"bytes,4,opt,name=config_data,json=configData,proto3" json:"config_data,omitempty"`
	// Version number (monotonically increasing).
	// Used by workers to detect changes.
	Version int64 `protobuf:"varint,5,opt,name=version,proto3" json:"version,omitempty"`
	// Optional key ID for user-specific configurations.
	KeyId string `protobuf:"bytes,6,opt,name=key_id,json=keyId,proto3" json:"key_id,omitempty"`
	// Timestamps.
	CreatedAt *timestamppb.Timestamp `protobuf:"bytes,7,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"`
	// When this configuration was last modified.
	UpdatedAt     *timestamppb.Timestamp `protobuf:"bytes,8,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *Configuration) Reset() {
	*x = Configuration{}
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[23]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *Configuration) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*Configuration) ProtoMessage() {}

func (x *Configuration) ProtoReflect() protoreflect.Message {
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[23]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use Configuration.ProtoReflect.Descriptor instead.
func (*Configuration) Descriptor() ([]byte, []int) {
	return file_tars_configurator_v1_configurator_proto_rawDescGZIP(), []int{23}
}

func (x *Configuration) GetId() string {
	if x != nil {
		return x.Id
	}
	return ""
}

func (x *Configuration) GetUserId() string {
	if x != nil {
		return x.UserId
	}
	return ""
}

func (x *Configuration) GetConfigType() ConfigType {
	if x != nil {
		return x.ConfigType
	}
	return ConfigType_CONFIG_TYPE_UNSPECIFIED
}

func (x *Configuration) GetConfigData() string {
	if x != nil {
		return x.ConfigData
	}
	return ""
}

func (x *Configuration) GetVersion() int64 {
	if x != nil {
		return x.Version
	}
	return 0
}

func (x *Configuration) GetKeyId() string {
	if x != nil {
		return x.KeyId
	}
	return ""
}

func (x *Configuration) GetCreatedAt() *timestamppb.Timestamp {
	if x != nil {
		return x.CreatedAt
	}
	return nil
}

func (x *Configuration) GetUpdatedAt() *timestamppb.Timestamp {
	if x != nil {
		return x.UpdatedAt
	}
	return nil
}

// ProviderBackend represents a single BYOK provider backend.
type ProviderBackend struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Backend name (e.g., "fsbb-anthropic-owner-keyid").
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// Owner/user ID.
	Owner string `protobuf:"bytes,2,opt,name=owner,proto3" json:"owner,omitempty"`
	// Provider name (e.g., "anthropic").
	Provider string `protobuf:"bytes,3,opt,name=provider,proto3" json:"provider,omitempty"`
	// Traffic weight for load balancing.
	Weight int32 `protobuf:"varint,4,opt,name=weight,proto3" json:"weight,omitempty"`
	// Fallback priority (lower is higher priority).
	Priority int32 `protobuf:"varint,5,opt,name=priority,proto3" json:"priority,omitempty"`
	// BYOK policy ("none", "always", "primary", "fallback").
	ByokPolicy string `protobuf:"bytes,6,opt,name=byok_policy,json=byokPolicy,proto3" json:"byok_policy,omitempty"`
	// Whether provider is external (not managed by TARS).
	IsExternal bool `protobuf:"varint,7,opt,name=is_external,json=isExternal,proto3" json:"is_external,omitempty"`
	// Model name in this provider.
	ModelName     string `protobuf:"bytes,8,opt,name=model_name,json=modelName,proto3" json:"model_name,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *ProviderBackend) Reset() {
	*x = ProviderBackend{}
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[24]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *ProviderBackend) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*ProviderBackend) ProtoMessage() {}

func (x *ProviderBackend) ProtoReflect() protoreflect.Message {
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[24]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use ProviderBackend.ProtoReflect.Descriptor instead.
func (*ProviderBackend) Descriptor() ([]byte, []int) {
	return file_tars_configurator_v1_configurator_proto_rawDescGZIP(), []int{24}
}

func (x *ProviderBackend) GetName() string {
	if x != nil {
		return x.Name
	}
	return ""
}

func (x *ProviderBackend) GetOwner() string {
	if x != nil {
		return x.Owner
	}
	return ""
}

func (x *ProviderBackend) GetProvider() string {
	if x != nil {
		return x.Provider
	}
	return ""
}

func (x *ProviderBackend) GetWeight() int32 {
	if x != nil {
		return x.Weight
	}
	return 0
}

func (x *ProviderBackend) GetPriority() int32 {
	if x != nil {
		return x.Priority
	}
	return 0
}

func (x *ProviderBackend) GetByokPolicy() string {
	if x != nil {
		return x.ByokPolicy
	}
	return ""
}

func (x *ProviderBackend) GetIsExternal() bool {
	if x != nil {
		return x.IsExternal
	}
	return false
}

func (x *ProviderBackend) GetModelName() string {
	if x != nil {
		return x.ModelName
	}
	return ""
}

// SaveBYOKBackendsRequest saves BYOK backends configuration.
type SaveBYOKBackendsRequest struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// User ID who owns these backends.
	UserId string `protobuf:"bytes,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"`
	// Key address (owner identifier) for these backends.
	KeyAddress string `protobuf:"bytes,2,opt,name=key_address,json=keyAddress,proto3" json:"key_address,omitempty"`
	// List of provider backends to save.
	Backends      []*ProviderBackend `protobuf:"bytes,3,rep,name=backends,proto3" json:"backends,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *SaveBYOKBackendsRequest) Reset() {
	*x = SaveBYOKBackendsRequest{}
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[25]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *SaveBYOKBackendsRequest) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*SaveBYOKBackendsRequest) ProtoMessage() {}

func (x *SaveBYOKBackendsRequest) ProtoReflect() protoreflect.Message {
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[25]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use SaveBYOKBackendsRequest.ProtoReflect.Descriptor instead.
func (*SaveBYOKBackendsRequest) Descriptor() ([]byte, []int) {
	return file_tars_configurator_v1_configurator_proto_rawDescGZIP(), []int{25}
}

func (x *SaveBYOKBackendsRequest) GetUserId() string {
	if x != nil {
		return x.UserId
	}
	return ""
}

func (x *SaveBYOKBackendsRequest) GetKeyAddress() string {
	if x != nil {
		return x.KeyAddress
	}
	return ""
}

func (x *SaveBYOKBackendsRequest) GetBackends() []*ProviderBackend {
	if x != nil {
		return x.Backends
	}
	return nil
}

// SaveBYOKBackendsResponse confirms the save operation.
type SaveBYOKBackendsResponse struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Configuration that was saved.
	Configuration *Configuration `protobuf:"bytes,1,opt,name=configuration,proto3" json:"configuration,omitempty"`
	// Whether the configuration was created or updated.
	Updated       bool `protobuf:"varint,2,opt,name=updated,proto3" json:"updated,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *SaveBYOKBackendsResponse) Reset() {
	*x = SaveBYOKBackendsResponse{}
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[26]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *SaveBYOKBackendsResponse) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*SaveBYOKBackendsResponse) ProtoMessage() {}

func (x *SaveBYOKBackendsResponse) ProtoReflect() protoreflect.Message {
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[26]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use SaveBYOKBackendsResponse.ProtoReflect.Descriptor instead.
func (*SaveBYOKBackendsResponse) Descriptor() ([]byte, []int) {
	return file_tars_configurator_v1_configurator_proto_rawDescGZIP(), []int{26}
}

func (x *SaveBYOKBackendsResponse) GetConfiguration() *Configuration {
	if x != nil {
		return x.Configuration
	}
	return nil
}

func (x *SaveBYOKBackendsResponse) GetUpdated() bool {
	if x != nil {
		return x.Updated
	}
	return false
}

// DeleteBYOKBackendsRequest deletes BYOK backends configuration.
type DeleteBYOKBackendsRequest struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// User ID who owns these backends.
	UserId        string `protobuf:"bytes,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *DeleteBYOKBackendsRequest) Reset() {
	*x = DeleteBYOKBackendsRequest{}
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[27]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *DeleteBYOKBackendsRequest) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*DeleteBYOKBackendsRequest) ProtoMessage() {}

func (x *DeleteBYOKBackendsRequest) ProtoReflect() protoreflect.Message {
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[27]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use DeleteBYOKBackendsRequest.ProtoReflect.Descriptor instead.
func (*DeleteBYOKBackendsRequest) Descriptor() ([]byte, []int) {
	return file_tars_configurator_v1_configurator_proto_rawDescGZIP(), []int{27}
}

func (x *DeleteBYOKBackendsRequest) GetUserId() string {
	if x != nil {
		return x.UserId
	}
	return ""
}

// DeleteBYOKBackendsResponse confirms the delete operation.
type DeleteBYOKBackendsResponse struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Whether the configuration was deleted.
	Deleted       bool `protobuf:"varint,1,opt,name=deleted,proto3" json:"deleted,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *DeleteBYOKBackendsResponse) Reset() {
	*x = DeleteBYOKBackendsResponse{}
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[28]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *DeleteBYOKBackendsResponse) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*DeleteBYOKBackendsResponse) ProtoMessage() {}

func (x *DeleteBYOKBackendsResponse) ProtoReflect() protoreflect.Message {
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[28]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use DeleteBYOKBackendsResponse.ProtoReflect.Descriptor instead.
func (*DeleteBYOKBackendsResponse) Descriptor() ([]byte, []int) {
	return file_tars_configurator_v1_configurator_proto_rawDescGZIP(), []int{28}
}

func (x *DeleteBYOKBackendsResponse) GetDeleted() bool {
	if x != nil {
		return x.Deleted
	}
	return false
}

// RevokeUserTokenRequest revokes a user token by JTI.
type RevokeUserTokenRequest struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// JWT ID (JTI) of the token to revoke.
	Jti string `protobuf:"bytes,1,opt,name=jti,proto3" json:"jti,omitempty"`
	// User ID who owns the token being revoked.
	// Used to populate revoked_by field.
	UserId string `protobuf:"bytes,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"`
	// Optional reason for revocation.
	Reason        *string `protobuf:"bytes,3,opt,name=reason,proto3,oneof" json:"reason,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *RevokeUserTokenRequest) Reset() {
	*x = RevokeUserTokenRequest{}
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[29]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *RevokeUserTokenRequest) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*RevokeUserTokenRequest) ProtoMessage() {}

func (x *RevokeUserTokenRequest) ProtoReflect() protoreflect.Message {
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[29]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use RevokeUserTokenRequest.ProtoReflect.Descriptor instead.
func (*RevokeUserTokenRequest) Descriptor() ([]byte, []int) {
	return file_tars_configurator_v1_configurator_proto_rawDescGZIP(), []int{29}
}

func (x *RevokeUserTokenRequest) GetJti() string {
	if x != nil {
		return x.Jti
	}
	return ""
}

func (x *RevokeUserTokenRequest) GetUserId() string {
	if x != nil {
		return x.UserId
	}
	return ""
}

func (x *RevokeUserTokenRequest) GetReason() string {
	if x != nil && x.Reason != nil {
		return *x.Reason
	}
	return ""
}

// RevokeUserTokenResponse confirms the revocation.
type RevokeUserTokenResponse struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Whether the token was successfully revoked.
	Success bool `protobuf:"varint,1,opt,name=success,proto3" json:"success,omitempty"`
	// When the token was revoked.
	RevokedAt     *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=revoked_at,json=revokedAt,proto3" json:"revoked_at,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *RevokeUserTokenResponse) Reset() {
	*x = RevokeUserTokenResponse{}
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[30]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *RevokeUserTokenResponse) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*RevokeUserTokenResponse) ProtoMessage() {}

func (x *RevokeUserTokenResponse) ProtoReflect() protoreflect.Message {
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[30]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use RevokeUserTokenResponse.ProtoReflect.Descriptor instead.
func (*RevokeUserTokenResponse) Descriptor() ([]byte, []int) {
	return file_tars_configurator_v1_configurator_proto_rawDescGZIP(), []int{30}
}

func (x *RevokeUserTokenResponse) GetSuccess() bool {
	if x != nil {
		return x.Success
	}
	return false
}

func (x *RevokeUserTokenResponse) GetRevokedAt() *timestamppb.Timestamp {
	if x != nil {
		return x.RevokedAt
	}
	return nil
}

// Provider represents an AI provider from the database.
type Provider struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Provider slug/name (e.g., "openai", "anthropic").
	Slug string `protobuf:"bytes,1,opt,name=slug,proto3" json:"slug,omitempty"`
	// Display name for the provider.
	DisplayName string `protobuf:"bytes,2,opt,name=display_name,json=displayName,proto3" json:"display_name,omitempty"`
	// API base URL for the provider endpoint.
	ApiBaseUrl string `protobuf:"bytes,3,opt,name=api_base_url,json=apiBaseUrl,proto3" json:"api_base_url,omitempty"`
	// Authentication type (e.g., "api_key", "aws", "vertex").
	AuthType string `protobuf:"bytes,4,opt,name=auth_type,json=authType,proto3" json:"auth_type,omitempty"`
	// Whether the provider is enabled.
	IsEnabled bool `protobuf:"varint,5,opt,name=is_enabled,json=isEnabled,proto3" json:"is_enabled,omitempty"`
	// Additional metadata as JSON string.
	Metadata string `protobuf:"bytes,6,opt,name=metadata,proto3" json:"metadata,omitempty"`
	// Timestamps.
	CreatedAt *timestamppb.Timestamp `protobuf:"bytes,7,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"`
	// When this provider record was last modified.
	UpdatedAt     *timestamppb.Timestamp `protobuf:"bytes,8,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *Provider) Reset() {
	*x = Provider{}
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[31]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *Provider) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*Provider) ProtoMessage() {}

func (x *Provider) ProtoReflect() protoreflect.Message {
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[31]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use Provider.ProtoReflect.Descriptor instead.
func (*Provider) Descriptor() ([]byte, []int) {
	return file_tars_configurator_v1_configurator_proto_rawDescGZIP(), []int{31}
}

func (x *Provider) GetSlug() string {
	if x != nil {
		return x.Slug
	}
	return ""
}

func (x *Provider) GetDisplayName() string {
	if x != nil {
		return x.DisplayName
	}
	return ""
}

func (x *Provider) GetApiBaseUrl() string {
	if x != nil {
		return x.ApiBaseUrl
	}
	return ""
}

func (x *Provider) GetAuthType() string {
	if x != nil {
		return x.AuthType
	}
	return ""
}

func (x *Provider) GetIsEnabled() bool {
	if x != nil {
		return x.IsEnabled
	}
	return false
}

func (x *Provider) GetMetadata() string {
	if x != nil {
		return x.Metadata
	}
	return ""
}

func (x *Provider) GetCreatedAt() *timestamppb.Timestamp {
	if x != nil {
		return x.CreatedAt
	}
	return nil
}

func (x *Provider) GetUpdatedAt() *timestamppb.Timestamp {
	if x != nil {
		return x.UpdatedAt
	}
	return nil
}

// ListActiveProvidersRequest requests list of active AI providers.
type ListActiveProvidersRequest struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *ListActiveProvidersRequest) Reset() {
	*x = ListActiveProvidersRequest{}
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[32]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *ListActiveProvidersRequest) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*ListActiveProvidersRequest) ProtoMessage() {}

func (x *ListActiveProvidersRequest) ProtoReflect() protoreflect.Message {
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[32]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use ListActiveProvidersRequest.ProtoReflect.Descriptor instead.
func (*ListActiveProvidersRequest) Descriptor() ([]byte, []int) {
	return file_tars_configurator_v1_configurator_proto_rawDescGZIP(), []int{32}
}

// ListActiveProvidersResponse returns list of active AI providers.
type ListActiveProvidersResponse struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Active (enabled) AI providers from the database.
	Providers     []*Provider `protobuf:"bytes,1,rep,name=providers,proto3" json:"providers,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *ListActiveProvidersResponse) Reset() {
	*x = ListActiveProvidersResponse{}
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[33]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *ListActiveProvidersResponse) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*ListActiveProvidersResponse) ProtoMessage() {}

func (x *ListActiveProvidersResponse) ProtoReflect() protoreflect.Message {
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[33]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use ListActiveProvidersResponse.ProtoReflect.Descriptor instead.
func (*ListActiveProvidersResponse) Descriptor() ([]byte, []int) {
	return file_tars_configurator_v1_configurator_proto_rawDescGZIP(), []int{33}
}

func (x *ListActiveProvidersResponse) GetProviders() []*Provider {
	if x != nil {
		return x.Providers
	}
	return nil
}

// SetDataplaneURLRequest registers (or updates) the customer-facing gateway
// URL for a data plane.
type SetDataplaneURLRequest struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Workspace ID of the data plane whose URL is being set. Must match the
	// workspace claim on the caller's service-account token.
	WorkspaceId string `protobuf:"bytes,1,opt,name=workspace_id,json=workspaceId,proto3" json:"workspace_id,omitempty"`
	// Full gateway URL (scheme + host + optional port), e.g.
	// "https://router.acmecorp.tetrate.ai".
	Url string `protobuf:"bytes,2,opt,name=url,proto3" json:"url,omitempty"`
	// When true, fire a PROXY_URL configuration event after persisting the
	// URL so the running data plane converges on the new value via the
	// worker's event loop. Dashboard admin edits set this; `tare install`
	// leaves it false because the data plane is being created and the chart
	// populates tars-config[proxy-url] directly at install time.
	TriggerUpdate bool `protobuf:"varint,3,opt,name=trigger_update,json=triggerUpdate,proto3" json:"trigger_update,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *SetDataplaneURLRequest) Reset() {
	*x = SetDataplaneURLRequest{}
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[34]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *SetDataplaneURLRequest) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*SetDataplaneURLRequest) ProtoMessage() {}

func (x *SetDataplaneURLRequest) ProtoReflect() protoreflect.Message {
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[34]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use SetDataplaneURLRequest.ProtoReflect.Descriptor instead.
func (*SetDataplaneURLRequest) Descriptor() ([]byte, []int) {
	return file_tars_configurator_v1_configurator_proto_rawDescGZIP(), []int{34}
}

func (x *SetDataplaneURLRequest) GetWorkspaceId() string {
	if x != nil {
		return x.WorkspaceId
	}
	return ""
}

func (x *SetDataplaneURLRequest) GetUrl() string {
	if x != nil {
		return x.Url
	}
	return ""
}

func (x *SetDataplaneURLRequest) GetTriggerUpdate() bool {
	if x != nil {
		return x.TriggerUpdate
	}
	return false
}

// SetDataplaneURLResponse confirms the URL was persisted.
type SetDataplaneURLResponse struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *SetDataplaneURLResponse) Reset() {
	*x = SetDataplaneURLResponse{}
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[35]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *SetDataplaneURLResponse) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*SetDataplaneURLResponse) ProtoMessage() {}

func (x *SetDataplaneURLResponse) ProtoReflect() protoreflect.Message {
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[35]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use SetDataplaneURLResponse.ProtoReflect.Descriptor instead.
func (*SetDataplaneURLResponse) Descriptor() ([]byte, []int) {
	return file_tars_configurator_v1_configurator_proto_rawDescGZIP(), []int{35}
}

// UpsertMCPCatalogServerRequest carries the operator-provided URL plus
// the catalog-seed fields needed to populate a new row in
// mcp_catalog_servers. See the RPC comment above for semantics.
type UpsertMCPCatalogServerRequest struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Workspace ID — must match the workspace claim on the caller's SA
	// token. API-key callers (admin scope) are trusted across workspaces.
	WorkspaceId string `protobuf:"bytes,1,opt,name=workspace_id,json=workspaceId,proto3" json:"workspace_id,omitempty"`
	// Stable identifier — matches mcp_catalog_servers.id. Comes from the
	// catalog seed JSON; the operator picks the server name on the
	// command line (`tare mcp enable jira`).
	Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"`
	// In-cluster (or public) URL the operator wants the dashboard to use
	// as this server's backend endpoint. The only field the operator
	// explicitly enters — everything else flows from the seed JSON.
	Url string `protobuf:"bytes,3,opt,name=url,proto3" json:"url,omitempty"`
	// Seed-derived display fields. Used only when the row is being
	// INSERTed (or when force_overwrite=true); ignored on sparse updates
	// of an existing row.
	Name string `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"`
	// Human-readable description of the MCP server.
	Description string `protobuf:"bytes,5,opt,name=description,proto3" json:"description,omitempty"`
	// URL of the server's display icon.
	IconUrl string `protobuf:"bytes,6,opt,name=icon_url,json=iconUrl,proto3" json:"icon_url,omitempty"`
	// Catalog category tags the server is grouped under.
	Categories []string `protobuf:"bytes,7,rep,name=categories,proto3" json:"categories,omitempty"`
	// Auth metadata, also seed-derived. Same write semantics as the
	// display fields.
	Authentication string `protobuf:"bytes,8,opt,name=authentication,proto3" json:"authentication,omitempty"`
	// Whether clients must authenticate to use this server.
	RequiresAuth bool `protobuf:"varint,9,opt,name=requires_auth,json=requiresAuth,proto3" json:"requires_auth,omitempty"`
	// When true, every field above (including url) replaces the existing
	// row, clobbering dashboard edits. Default false: sparse update —
	// only url + is_enabled (+ updated_at) move on an existing row.
	ForceOverwrite bool `protobuf:"varint,10,opt,name=force_overwrite,json=forceOverwrite,proto3" json:"force_overwrite,omitempty"`
	unknownFields  protoimpl.UnknownFields
	sizeCache      protoimpl.SizeCache
}

func (x *UpsertMCPCatalogServerRequest) Reset() {
	*x = UpsertMCPCatalogServerRequest{}
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[36]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *UpsertMCPCatalogServerRequest) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*UpsertMCPCatalogServerRequest) ProtoMessage() {}

func (x *UpsertMCPCatalogServerRequest) ProtoReflect() protoreflect.Message {
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[36]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use UpsertMCPCatalogServerRequest.ProtoReflect.Descriptor instead.
func (*UpsertMCPCatalogServerRequest) Descriptor() ([]byte, []int) {
	return file_tars_configurator_v1_configurator_proto_rawDescGZIP(), []int{36}
}

func (x *UpsertMCPCatalogServerRequest) GetWorkspaceId() string {
	if x != nil {
		return x.WorkspaceId
	}
	return ""
}

func (x *UpsertMCPCatalogServerRequest) GetId() string {
	if x != nil {
		return x.Id
	}
	return ""
}

func (x *UpsertMCPCatalogServerRequest) GetUrl() string {
	if x != nil {
		return x.Url
	}
	return ""
}

func (x *UpsertMCPCatalogServerRequest) GetName() string {
	if x != nil {
		return x.Name
	}
	return ""
}

func (x *UpsertMCPCatalogServerRequest) GetDescription() string {
	if x != nil {
		return x.Description
	}
	return ""
}

func (x *UpsertMCPCatalogServerRequest) GetIconUrl() string {
	if x != nil {
		return x.IconUrl
	}
	return ""
}

func (x *UpsertMCPCatalogServerRequest) GetCategories() []string {
	if x != nil {
		return x.Categories
	}
	return nil
}

func (x *UpsertMCPCatalogServerRequest) GetAuthentication() string {
	if x != nil {
		return x.Authentication
	}
	return ""
}

func (x *UpsertMCPCatalogServerRequest) GetRequiresAuth() bool {
	if x != nil {
		return x.RequiresAuth
	}
	return false
}

func (x *UpsertMCPCatalogServerRequest) GetForceOverwrite() bool {
	if x != nil {
		return x.ForceOverwrite
	}
	return false
}

// UpsertMCPCatalogServerResponse describes the outcome.
type UpsertMCPCatalogServerResponse struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// True if a new row was inserted; false if an existing row was updated.
	Created       bool `protobuf:"varint,1,opt,name=created,proto3" json:"created,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *UpsertMCPCatalogServerResponse) Reset() {
	*x = UpsertMCPCatalogServerResponse{}
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[37]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *UpsertMCPCatalogServerResponse) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*UpsertMCPCatalogServerResponse) ProtoMessage() {}

func (x *UpsertMCPCatalogServerResponse) ProtoReflect() protoreflect.Message {
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[37]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use UpsertMCPCatalogServerResponse.ProtoReflect.Descriptor instead.
func (*UpsertMCPCatalogServerResponse) Descriptor() ([]byte, []int) {
	return file_tars_configurator_v1_configurator_proto_rawDescGZIP(), []int{37}
}

func (x *UpsertMCPCatalogServerResponse) GetCreated() bool {
	if x != nil {
		return x.Created
	}
	return false
}

// ValidateDataplaneRequest is sent by a data plane's filter (via the
// worker's authenticated channel) to confirm this DP is still active and
// fetch the customer's gatekeeper public keys.
//
// The caller is identified by the SA JWT it signs with its DP keypair
// (kid=`instance-<...>`); MP's auth layer looks the kid up in the
// `keypairs` table and rejects the call with Unauthenticated when the row
// is soft-deleted. No fields are required — everything MP needs is in the
// authenticated claims.
type ValidateDataplaneRequest struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *ValidateDataplaneRequest) Reset() {
	*x = ValidateDataplaneRequest{}
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[38]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *ValidateDataplaneRequest) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*ValidateDataplaneRequest) ProtoMessage() {}

func (x *ValidateDataplaneRequest) ProtoReflect() protoreflect.Message {
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[38]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use ValidateDataplaneRequest.ProtoReflect.Descriptor instead.
func (*ValidateDataplaneRequest) Descriptor() ([]byte, []int) {
	return file_tars_configurator_v1_configurator_proto_rawDescGZIP(), []int{38}
}

// ValidateDataplaneResponse returns the customer's current gatekeeper
// public keys. The filter uses these to verify user-token (API key) JWTs
// when its in-process key cache is cold.
type ValidateDataplaneResponse struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Gatekeeper public keys for the customer this DP belongs to. Contains
	// the customer-shared keypair rows (kid has no `instance-` prefix);
	// the DP's own identity key is not included.
	GatekeeperPublicKeys []*GatekeeperPublicKey `protobuf:"bytes,1,rep,name=gatekeeper_public_keys,json=gatekeeperPublicKeys,proto3" json:"gatekeeper_public_keys,omitempty"`
	unknownFields        protoimpl.UnknownFields
	sizeCache            protoimpl.SizeCache
}

func (x *ValidateDataplaneResponse) Reset() {
	*x = ValidateDataplaneResponse{}
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[39]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *ValidateDataplaneResponse) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*ValidateDataplaneResponse) ProtoMessage() {}

func (x *ValidateDataplaneResponse) ProtoReflect() protoreflect.Message {
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[39]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use ValidateDataplaneResponse.ProtoReflect.Descriptor instead.
func (*ValidateDataplaneResponse) Descriptor() ([]byte, []int) {
	return file_tars_configurator_v1_configurator_proto_rawDescGZIP(), []int{39}
}

func (x *ValidateDataplaneResponse) GetGatekeeperPublicKeys() []*GatekeeperPublicKey {
	if x != nil {
		return x.GatekeeperPublicKeys
	}
	return nil
}

// GatekeeperPublicKey is a single customer-shared keypair entry the
// filter uses to verify API-key JWTs.
type GatekeeperPublicKey struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Key ID, matches the `kid` header on API-key JWTs.
	Kid string `protobuf:"bytes,1,opt,name=kid,proto3" json:"kid,omitempty"`
	// JWS algorithm (e.g., "ES256").
	Alg string `protobuf:"bytes,2,opt,name=alg,proto3" json:"alg,omitempty"`
	// JWK `use` value (e.g., "sig").
	Use string `protobuf:"bytes,3,opt,name=use,proto3" json:"use,omitempty"`
	// PEM-encoded public key.
	PublicKeyPem  string `protobuf:"bytes,4,opt,name=public_key_pem,json=publicKeyPem,proto3" json:"public_key_pem,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *GatekeeperPublicKey) Reset() {
	*x = GatekeeperPublicKey{}
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[40]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *GatekeeperPublicKey) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*GatekeeperPublicKey) ProtoMessage() {}

func (x *GatekeeperPublicKey) ProtoReflect() protoreflect.Message {
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[40]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use GatekeeperPublicKey.ProtoReflect.Descriptor instead.
func (*GatekeeperPublicKey) Descriptor() ([]byte, []int) {
	return file_tars_configurator_v1_configurator_proto_rawDescGZIP(), []int{40}
}

func (x *GatekeeperPublicKey) GetKid() string {
	if x != nil {
		return x.Kid
	}
	return ""
}

func (x *GatekeeperPublicKey) GetAlg() string {
	if x != nil {
		return x.Alg
	}
	return ""
}

func (x *GatekeeperPublicKey) GetUse() string {
	if x != nil {
		return x.Use
	}
	return ""
}

func (x *GatekeeperPublicKey) GetPublicKeyPem() string {
	if x != nil {
		return x.PublicKeyPem
	}
	return ""
}

// Full replacement of the metadata JSON on an existing event row. The
// handler does NOT merge keys — callers send the complete intended state.
// Workspace ownership is enforced server-side against the caller's claims.
// Upgrade workers use this to push TarsUpgrade.status changes back to MP.
type UpdateEventMetadataRequest struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Event ID (UUID, matches ConfigurationEvent.id) whose metadata is
	// being replaced.
	EventId string `protobuf:"bytes,1,opt,name=event_id,json=eventId,proto3" json:"event_id,omitempty"`
	// Full intended metadata JSON. Empty string clears the column.
	Metadata      string `protobuf:"bytes,2,opt,name=metadata,proto3" json:"metadata,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *UpdateEventMetadataRequest) Reset() {
	*x = UpdateEventMetadataRequest{}
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[41]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *UpdateEventMetadataRequest) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*UpdateEventMetadataRequest) ProtoMessage() {}

func (x *UpdateEventMetadataRequest) ProtoReflect() protoreflect.Message {
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[41]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use UpdateEventMetadataRequest.ProtoReflect.Descriptor instead.
func (*UpdateEventMetadataRequest) Descriptor() ([]byte, []int) {
	return file_tars_configurator_v1_configurator_proto_rawDescGZIP(), []int{41}
}

func (x *UpdateEventMetadataRequest) GetEventId() string {
	if x != nil {
		return x.EventId
	}
	return ""
}

func (x *UpdateEventMetadataRequest) GetMetadata() string {
	if x != nil {
		return x.Metadata
	}
	return ""
}

type UpdateEventMetadataResponse struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Server returns success=false when the event doesn't exist or when the
	// caller's workspace doesn't own it. No error code path; callers should
	// log and continue (a stale event id can race with operator-initiated
	// cancellation, which is benign).
	Success       bool `protobuf:"varint,1,opt,name=success,proto3" json:"success,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *UpdateEventMetadataResponse) Reset() {
	*x = UpdateEventMetadataResponse{}
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[42]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *UpdateEventMetadataResponse) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*UpdateEventMetadataResponse) ProtoMessage() {}

func (x *UpdateEventMetadataResponse) ProtoReflect() protoreflect.Message {
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[42]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use UpdateEventMetadataResponse.ProtoReflect.Descriptor instead.
func (*UpdateEventMetadataResponse) Descriptor() ([]byte, []int) {
	return file_tars_configurator_v1_configurator_proto_rawDescGZIP(), []int{42}
}

func (x *UpdateEventMetadataResponse) GetSuccess() bool {
	if x != nil {
		return x.Success
	}
	return false
}

type CancelDataplaneUpgradeRequest struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Upgrade event id whose in-flight CR should be cancelled.
	UpgradeEventId string `protobuf:"bytes,1,opt,name=upgrade_event_id,json=upgradeEventId,proto3" json:"upgrade_event_id,omitempty"`
	unknownFields  protoimpl.UnknownFields
	sizeCache      protoimpl.SizeCache
}

func (x *CancelDataplaneUpgradeRequest) Reset() {
	*x = CancelDataplaneUpgradeRequest{}
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[43]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *CancelDataplaneUpgradeRequest) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*CancelDataplaneUpgradeRequest) ProtoMessage() {}

func (x *CancelDataplaneUpgradeRequest) ProtoReflect() protoreflect.Message {
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[43]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use CancelDataplaneUpgradeRequest.ProtoReflect.Descriptor instead.
func (*CancelDataplaneUpgradeRequest) Descriptor() ([]byte, []int) {
	return file_tars_configurator_v1_configurator_proto_rawDescGZIP(), []int{43}
}

func (x *CancelDataplaneUpgradeRequest) GetUpgradeEventId() string {
	if x != nil {
		return x.UpgradeEventId
	}
	return ""
}

type CancelDataplaneUpgradeResponse struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	Success       bool                   `protobuf:"varint,1,opt,name=success,proto3" json:"success,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *CancelDataplaneUpgradeResponse) Reset() {
	*x = CancelDataplaneUpgradeResponse{}
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[44]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *CancelDataplaneUpgradeResponse) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*CancelDataplaneUpgradeResponse) ProtoMessage() {}

func (x *CancelDataplaneUpgradeResponse) ProtoReflect() protoreflect.Message {
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[44]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use CancelDataplaneUpgradeResponse.ProtoReflect.Descriptor instead.
func (*CancelDataplaneUpgradeResponse) Descriptor() ([]byte, []int) {
	return file_tars_configurator_v1_configurator_proto_rawDescGZIP(), []int{44}
}

func (x *CancelDataplaneUpgradeResponse) GetSuccess() bool {
	if x != nil {
		return x.Success
	}
	return false
}

type RollbackDataplaneUpgradeRequest struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Upgrade event id of the completed upgrade being rolled back. Used
	// for audit + display ("rollback of upgrade <id>") and so the worker
	// can resolve the workspace + target revision from the original event
	// metadata.
	UpgradeEventId string `protobuf:"bytes,1,opt,name=upgrade_event_id,json=upgradeEventId,proto3" json:"upgrade_event_id,omitempty"`
	unknownFields  protoimpl.UnknownFields
	sizeCache      protoimpl.SizeCache
}

func (x *RollbackDataplaneUpgradeRequest) Reset() {
	*x = RollbackDataplaneUpgradeRequest{}
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[45]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *RollbackDataplaneUpgradeRequest) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*RollbackDataplaneUpgradeRequest) ProtoMessage() {}

func (x *RollbackDataplaneUpgradeRequest) ProtoReflect() protoreflect.Message {
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[45]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use RollbackDataplaneUpgradeRequest.ProtoReflect.Descriptor instead.
func (*RollbackDataplaneUpgradeRequest) Descriptor() ([]byte, []int) {
	return file_tars_configurator_v1_configurator_proto_rawDescGZIP(), []int{45}
}

func (x *RollbackDataplaneUpgradeRequest) GetUpgradeEventId() string {
	if x != nil {
		return x.UpgradeEventId
	}
	return ""
}

type RollbackDataplaneUpgradeResponse struct {
	state   protoimpl.MessageState `protogen:"open.v1"`
	Success bool                   `protobuf:"varint,1,opt,name=success,proto3" json:"success,omitempty"`
	// Event id of the new rollback event. The dashboard polls this id to
	// watch the rollback Job progress.
	RollbackEventId string `protobuf:"bytes,2,opt,name=rollback_event_id,json=rollbackEventId,proto3" json:"rollback_event_id,omitempty"`
	unknownFields   protoimpl.UnknownFields
	sizeCache       protoimpl.SizeCache
}

func (x *RollbackDataplaneUpgradeResponse) Reset() {
	*x = RollbackDataplaneUpgradeResponse{}
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[46]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *RollbackDataplaneUpgradeResponse) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*RollbackDataplaneUpgradeResponse) ProtoMessage() {}

func (x *RollbackDataplaneUpgradeResponse) ProtoReflect() protoreflect.Message {
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[46]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use RollbackDataplaneUpgradeResponse.ProtoReflect.Descriptor instead.
func (*RollbackDataplaneUpgradeResponse) Descriptor() ([]byte, []int) {
	return file_tars_configurator_v1_configurator_proto_rawDescGZIP(), []int{46}
}

func (x *RollbackDataplaneUpgradeResponse) GetSuccess() bool {
	if x != nil {
		return x.Success
	}
	return false
}

func (x *RollbackDataplaneUpgradeResponse) GetRollbackEventId() string {
	if x != nil {
		return x.RollbackEventId
	}
	return ""
}

// DataplaneUpgradeCredential is one slot of operator-supplied registry
// credentials. Username + password are passed as cleartext to MP over
// TLS, encrypted at rest, and only ever returned to the cluster's
// service-account-authenticated worker.
type DataplaneUpgradeCredential struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Slot names the registry side these credentials authenticate against.
	// Matches the missingCredentials enum surfaced in TarsUpgrade.status
	// (SourceRegistry / DestRegistryPush).
	Slot string `protobuf:"bytes,1,opt,name=slot,proto3" json:"slot,omitempty"`
	// Registry username for this slot (cleartext over TLS, encrypted at rest).
	Username string `protobuf:"bytes,2,opt,name=username,proto3" json:"username,omitempty"`
	// Registry password/token for this slot (cleartext over TLS, encrypted at rest).
	Password string `protobuf:"bytes,3,opt,name=password,proto3" json:"password,omitempty"`
	// Registry host override. Empty means use the slot's implicit
	// registry — source uses tare.tetrate.ai, destination is resolved
	// from the customer's image_registry value.
	Registry      string `protobuf:"bytes,4,opt,name=registry,proto3" json:"registry,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *DataplaneUpgradeCredential) Reset() {
	*x = DataplaneUpgradeCredential{}
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[47]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *DataplaneUpgradeCredential) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*DataplaneUpgradeCredential) ProtoMessage() {}

func (x *DataplaneUpgradeCredential) ProtoReflect() protoreflect.Message {
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[47]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use DataplaneUpgradeCredential.ProtoReflect.Descriptor instead.
func (*DataplaneUpgradeCredential) Descriptor() ([]byte, []int) {
	return file_tars_configurator_v1_configurator_proto_rawDescGZIP(), []int{47}
}

func (x *DataplaneUpgradeCredential) GetSlot() string {
	if x != nil {
		return x.Slot
	}
	return ""
}

func (x *DataplaneUpgradeCredential) GetUsername() string {
	if x != nil {
		return x.Username
	}
	return ""
}

func (x *DataplaneUpgradeCredential) GetPassword() string {
	if x != nil {
		return x.Password
	}
	return ""
}

func (x *DataplaneUpgradeCredential) GetRegistry() string {
	if x != nil {
		return x.Registry
	}
	return ""
}

type SubmitDataplaneUpgradeCredentialsRequest struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Upgrade event id (the liaison_configuration_events.id whose
	// metadata carries the trigger). Workspace claim must match.
	UpgradeEventId string `protobuf:"bytes,1,opt,name=upgrade_event_id,json=upgradeEventId,proto3" json:"upgrade_event_id,omitempty"`
	// Operator-supplied registry credentials, one entry per required slot.
	Credentials []*DataplaneUpgradeCredential `protobuf:"bytes,2,rep,name=credentials,proto3" json:"credentials,omitempty"`
	// When true, the worker creates the in-cluster Secret WITHOUT an
	// ownerReference back to the TarsUpgrade CR, and labels it
	// `tars.tetrate.ai/persistent=true`. The Secret survives the
	// upgrade so future upgrades and image pulls can reuse it.
	//
	// When false (the default), the Secret is short-lived: ownerRef
	// cascade-deletes it when the CR is removed, and the orphan
	// janitor sweeps after terminal phases. Operators who don't tick
	// the form's "save for future upgrades" box get this.
	//
	// Either way, MP DELETEs the ciphertext row from
	// dataplane_upgrade_credentials as soon as AckDataplaneUpgradeCredentials
	// arrives — the secret material never sits in the MP DB after sync
	// completes.
	PersistInCluster bool `protobuf:"varint,3,opt,name=persist_in_cluster,json=persistInCluster,proto3" json:"persist_in_cluster,omitempty"`
	unknownFields    protoimpl.UnknownFields
	sizeCache        protoimpl.SizeCache
}

func (x *SubmitDataplaneUpgradeCredentialsRequest) Reset() {
	*x = SubmitDataplaneUpgradeCredentialsRequest{}
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[48]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *SubmitDataplaneUpgradeCredentialsRequest) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*SubmitDataplaneUpgradeCredentialsRequest) ProtoMessage() {}

func (x *SubmitDataplaneUpgradeCredentialsRequest) ProtoReflect() protoreflect.Message {
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[48]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use SubmitDataplaneUpgradeCredentialsRequest.ProtoReflect.Descriptor instead.
func (*SubmitDataplaneUpgradeCredentialsRequest) Descriptor() ([]byte, []int) {
	return file_tars_configurator_v1_configurator_proto_rawDescGZIP(), []int{48}
}

func (x *SubmitDataplaneUpgradeCredentialsRequest) GetUpgradeEventId() string {
	if x != nil {
		return x.UpgradeEventId
	}
	return ""
}

func (x *SubmitDataplaneUpgradeCredentialsRequest) GetCredentials() []*DataplaneUpgradeCredential {
	if x != nil {
		return x.Credentials
	}
	return nil
}

func (x *SubmitDataplaneUpgradeCredentialsRequest) GetPersistInCluster() bool {
	if x != nil {
		return x.PersistInCluster
	}
	return false
}

type SubmitDataplaneUpgradeCredentialsResponse struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Echoes back the row id of the stored ciphertext for audit log
	// correlation.
	CredentialsId string `protobuf:"bytes,1,opt,name=credentials_id,json=credentialsId,proto3" json:"credentials_id,omitempty"`
	// True if the ciphertext row was stored successfully.
	Success       bool `protobuf:"varint,2,opt,name=success,proto3" json:"success,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *SubmitDataplaneUpgradeCredentialsResponse) Reset() {
	*x = SubmitDataplaneUpgradeCredentialsResponse{}
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[49]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *SubmitDataplaneUpgradeCredentialsResponse) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*SubmitDataplaneUpgradeCredentialsResponse) ProtoMessage() {}

func (x *SubmitDataplaneUpgradeCredentialsResponse) ProtoReflect() protoreflect.Message {
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[49]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use SubmitDataplaneUpgradeCredentialsResponse.ProtoReflect.Descriptor instead.
func (*SubmitDataplaneUpgradeCredentialsResponse) Descriptor() ([]byte, []int) {
	return file_tars_configurator_v1_configurator_proto_rawDescGZIP(), []int{49}
}

func (x *SubmitDataplaneUpgradeCredentialsResponse) GetCredentialsId() string {
	if x != nil {
		return x.CredentialsId
	}
	return ""
}

func (x *SubmitDataplaneUpgradeCredentialsResponse) GetSuccess() bool {
	if x != nil {
		return x.Success
	}
	return false
}

type GetDataplaneUpgradeCredentialsRequest struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Upgrade event id whose stored credentials to fetch. Workspace claim must match.
	UpgradeEventId string `protobuf:"bytes,1,opt,name=upgrade_event_id,json=upgradeEventId,proto3" json:"upgrade_event_id,omitempty"`
	unknownFields  protoimpl.UnknownFields
	sizeCache      protoimpl.SizeCache
}

func (x *GetDataplaneUpgradeCredentialsRequest) Reset() {
	*x = GetDataplaneUpgradeCredentialsRequest{}
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[50]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *GetDataplaneUpgradeCredentialsRequest) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*GetDataplaneUpgradeCredentialsRequest) ProtoMessage() {}

func (x *GetDataplaneUpgradeCredentialsRequest) ProtoReflect() protoreflect.Message {
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[50]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use GetDataplaneUpgradeCredentialsRequest.ProtoReflect.Descriptor instead.
func (*GetDataplaneUpgradeCredentialsRequest) Descriptor() ([]byte, []int) {
	return file_tars_configurator_v1_configurator_proto_rawDescGZIP(), []int{50}
}

func (x *GetDataplaneUpgradeCredentialsRequest) GetUpgradeEventId() string {
	if x != nil {
		return x.UpgradeEventId
	}
	return ""
}

type GetDataplaneUpgradeCredentialsResponse struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Plaintext credentials, decrypted at MP. Caller (worker) is
	// expected to materialise them as a dockerconfigjson Secret in
	// the cluster and call Ack to confirm successful delivery.
	Credentials []*DataplaneUpgradeCredential `protobuf:"bytes,1,rep,name=credentials,proto3" json:"credentials,omitempty"`
	// Empty when no operator submission has happened yet. Worker
	// treats this as "keep polling" and re-tries on its next tick.
	Present bool `protobuf:"varint,2,opt,name=present,proto3" json:"present,omitempty"`
	// Mirrors SubmitDataplaneUpgradeCredentialsRequest.persist_in_cluster.
	// Worker uses this to decide whether to set ownerReferences on the
	// generated Secret.
	PersistInCluster bool `protobuf:"varint,3,opt,name=persist_in_cluster,json=persistInCluster,proto3" json:"persist_in_cluster,omitempty"`
	unknownFields    protoimpl.UnknownFields
	sizeCache        protoimpl.SizeCache
}

func (x *GetDataplaneUpgradeCredentialsResponse) Reset() {
	*x = GetDataplaneUpgradeCredentialsResponse{}
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[51]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *GetDataplaneUpgradeCredentialsResponse) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*GetDataplaneUpgradeCredentialsResponse) ProtoMessage() {}

func (x *GetDataplaneUpgradeCredentialsResponse) ProtoReflect() protoreflect.Message {
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[51]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use GetDataplaneUpgradeCredentialsResponse.ProtoReflect.Descriptor instead.
func (*GetDataplaneUpgradeCredentialsResponse) Descriptor() ([]byte, []int) {
	return file_tars_configurator_v1_configurator_proto_rawDescGZIP(), []int{51}
}

func (x *GetDataplaneUpgradeCredentialsResponse) GetCredentials() []*DataplaneUpgradeCredential {
	if x != nil {
		return x.Credentials
	}
	return nil
}

func (x *GetDataplaneUpgradeCredentialsResponse) GetPresent() bool {
	if x != nil {
		return x.Present
	}
	return false
}

func (x *GetDataplaneUpgradeCredentialsResponse) GetPersistInCluster() bool {
	if x != nil {
		return x.PersistInCluster
	}
	return false
}

type AckDataplaneUpgradeCredentialsRequest struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Upgrade event id whose credentials were materialised. Workspace claim must match.
	UpgradeEventId string `protobuf:"bytes,1,opt,name=upgrade_event_id,json=upgradeEventId,proto3" json:"upgrade_event_id,omitempty"`
	// True when the worker successfully created the in-cluster Secret;
	// MP DELETEs the ciphertext row. False when materialisation failed
	// (e.g. RBAC) — MP keeps the row so the operator's submission
	// isn't lost; worker will retry on its next poll.
	Delivered     bool `protobuf:"varint,2,opt,name=delivered,proto3" json:"delivered,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *AckDataplaneUpgradeCredentialsRequest) Reset() {
	*x = AckDataplaneUpgradeCredentialsRequest{}
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[52]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *AckDataplaneUpgradeCredentialsRequest) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*AckDataplaneUpgradeCredentialsRequest) ProtoMessage() {}

func (x *AckDataplaneUpgradeCredentialsRequest) ProtoReflect() protoreflect.Message {
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[52]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use AckDataplaneUpgradeCredentialsRequest.ProtoReflect.Descriptor instead.
func (*AckDataplaneUpgradeCredentialsRequest) Descriptor() ([]byte, []int) {
	return file_tars_configurator_v1_configurator_proto_rawDescGZIP(), []int{52}
}

func (x *AckDataplaneUpgradeCredentialsRequest) GetUpgradeEventId() string {
	if x != nil {
		return x.UpgradeEventId
	}
	return ""
}

func (x *AckDataplaneUpgradeCredentialsRequest) GetDelivered() bool {
	if x != nil {
		return x.Delivered
	}
	return false
}

type AckDataplaneUpgradeCredentialsResponse struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// True if the ciphertext row was deleted (or already gone — idempotent).
	Success       bool `protobuf:"varint,1,opt,name=success,proto3" json:"success,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *AckDataplaneUpgradeCredentialsResponse) Reset() {
	*x = AckDataplaneUpgradeCredentialsResponse{}
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[53]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *AckDataplaneUpgradeCredentialsResponse) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*AckDataplaneUpgradeCredentialsResponse) ProtoMessage() {}

func (x *AckDataplaneUpgradeCredentialsResponse) ProtoReflect() protoreflect.Message {
	mi := &file_tars_configurator_v1_configurator_proto_msgTypes[53]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use AckDataplaneUpgradeCredentialsResponse.ProtoReflect.Descriptor instead.
func (*AckDataplaneUpgradeCredentialsResponse) Descriptor() ([]byte, []int) {
	return file_tars_configurator_v1_configurator_proto_rawDescGZIP(), []int{53}
}

func (x *AckDataplaneUpgradeCredentialsResponse) GetSuccess() bool {
	if x != nil {
		return x.Success
	}
	return false
}

var File_tars_configurator_v1_configurator_proto protoreflect.FileDescriptor

const file_tars_configurator_v1_configurator_proto_rawDesc = "" +
	"\n" +
	"'tars/configurator/v1/configurator.proto\x12\x14tars.configurator.v1\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1ftars/auth/v1/auth_options.proto\x1a\x17tars/docs/v1/docs.proto\"Z\n" +
	"\x17GetConfigurationRequest\x12?\n" +
	"\aqueries\x18\x01 \x03(\v2%.tars.configurator.v1.UserConfigQueryR\aqueries\"\xad\x01\n" +
	"\x0fUserConfigQuery\x12\x17\n" +
	"\auser_id\x18\x01 \x01(\tR\x06userId\x12A\n" +
	"\vconfig_type\x18\x02 \x01(\x0e2 .tars.configurator.v1.ConfigTypeR\n" +
	"configType\x12'\n" +
	"\x0fcurrent_version\x18\x03 \x01(\x03R\x0ecurrentVersion\x12\x15\n" +
	"\x06key_id\x18\x04 \x01(\tR\x05keyId\"g\n" +
	"\x18GetConfigurationResponse\x12K\n" +
	"\x0econfigurations\x18\x01 \x03(\v2#.tars.configurator.v1.ConfigurationR\x0econfigurations\"\xaf\x02\n" +
	"\x14TriggerUpdateRequest\x12\x17\n" +
	"\auser_id\x18\x01 \x01(\tR\x06userId\x12A\n" +
	"\vconfig_type\x18\x02 \x01(\x0e2 .tars.configurator.v1.ConfigTypeR\n" +
	"configType\x12>\n" +
	"\n" +
	"event_type\x18\x03 \x01(\x0e2\x1f.tars.configurator.v1.EventTypeR\teventType\x12\x15\n" +
	"\x06key_id\x18\x04 \x01(\tR\x05keyId\x12!\n" +
	"\fworkspace_id\x18\x05 \x01(\tR\vworkspaceId\x12A\n" +
	"\bmetadata\x18\x06 \x01(\v2%.tars.configurator.v1.TriggerMetadataR\bmetadata\"m\n" +
	"\x0fTriggerMetadata\x12Z\n" +
	"\x11dataplane_upgrade\x18\x01 \x01(\v2-.tars.configurator.v1.DataplaneUpgradeTriggerR\x10dataplaneUpgrade\"\x82\x02\n" +
	"\x17DataplaneUpgradeTrigger\x12%\n" +
	"\x0etarget_version\x18\x01 \x01(\tR\rtargetVersion\x12%\n" +
	"\x0eallow_downtime\x18\x02 \x01(\bR\rallowDowntime\x12'\n" +
	"\x0fcredentials_ref\x18\x03 \x01(\tR\x0ecredentialsRef\x12,\n" +
	"\x12persist_in_cluster\x18\x04 \x01(\bR\x10persistInCluster\x12B\n" +
	"\x1dacknowledged_preflight_checks\x18\x05 \x03(\tR\x1backnowledgedPreflightChecks\"\x97\x01\n" +
	"\x15TriggerUpdateResponse\x12I\n" +
	"\rconfiguration\x18\x01 \x01(\v2#.tars.configurator.v1.ConfigurationR\rconfiguration\x123\n" +
	"\x15configuration_updated\x18\x02 \x01(\bR\x14configurationUpdated\"\xb3\x01\n" +
	"\x19ListConfigurationsRequest\x12\x17\n" +
	"\auser_id\x18\x01 \x01(\tR\x06userId\x12A\n" +
	"\vconfig_type\x18\x02 \x01(\x0e2 .tars.configurator.v1.ConfigTypeR\n" +
	"configType\x12\x1b\n" +
	"\tpage_size\x18\x03 \x01(\x05R\bpageSize\x12\x1d\n" +
	"\n" +
	"page_token\x18\x04 \x01(\tR\tpageToken\"\x91\x01\n" +
	"\x1aListConfigurationsResponse\x12K\n" +
	"\x0econfigurations\x18\x01 \x03(\v2#.tars.configurator.v1.ConfigurationR\x0econfigurations\x12&\n" +
	"\x0fnext_page_token\x18\x02 \x01(\tR\rnextPageToken\"\x82\x01\n" +
	"\x18ListPendingEventsRequest\x12\x14\n" +
	"\x05limit\x18\x01 \x01(\x05R\x05limit\x12P\n" +
	"\x0edoctor_runtime\x18\x02 \x01(\v2).tars.configurator.v1.DoctorRuntimeStatusR\rdoctorRuntime\"\x90\x02\n" +
	"\x13DoctorRuntimeStatus\x12\x1f\n" +
	"\vinstance_id\x18\x01 \x01(\tR\n" +
	"instanceId\x12!\n" +
	"\ftare_version\x18\x02 \x01(\tR\vtareVersion\x12\x14\n" +
	"\x05state\x18\x03 \x01(\tR\x05state\x12\x16\n" +
	"\x06reason\x18\x04 \x01(\tR\x06reason\x12J\n" +
	"\x13last_successful_run\x18\x05 \x01(\v2\x1a.google.protobuf.TimestampR\x11lastSuccessfulRun\x12;\n" +
	"\vobserved_at\x18\x06 \x01(\v2\x1a.google.protobuf.TimestampR\n" +
	"observedAt\"]\n" +
	"\x19ListPendingEventsResponse\x12@\n" +
	"\x06events\x18\x01 \x03(\v2(.tars.configurator.v1.ConfigurationEventR\x06events\"\x1b\n" +
	"\x19ReconcileWorkspaceRequest\"\xd2\x01\n" +
	"\x1aReconcileWorkspaceResponse\x12%\n" +
	"\x0ereplayed_total\x18\x01 \x01(\x05R\rreplayedTotal\x12'\n" +
	"\x0freplayed_global\x18\x02 \x01(\x05R\x0ereplayedGlobal\x12*\n" +
	"\x11replayed_per_user\x18\x03 \x01(\x05R\x0freplayedPerUser\x128\n" +
	"\x19replayed_per_user_per_key\x18\x04 \x01(\x05R\x15replayedPerUserPerKey\"\x1a\n" +
	"\x18FullSyncWorkspaceRequest\"\xa8\x01\n" +
	"\x19FullSyncWorkspaceResponse\x12%\n" +
	"\x0ereplayed_total\x18\x01 \x01(\x05R\rreplayedTotal\x12*\n" +
	"\x11replayed_per_user\x18\x02 \x01(\x05R\x0freplayedPerUser\x128\n" +
	"\x19replayed_per_user_per_key\x18\x03 \x01(\x05R\x15replayedPerUserPerKey\"\xb1\x03\n" +
	"\x12ConfigurationEvent\x12\x0e\n" +
	"\x02id\x18\x01 \x01(\tR\x02id\x12\x17\n" +
	"\auser_id\x18\x02 \x01(\tR\x06userId\x12A\n" +
	"\vconfig_type\x18\x03 \x01(\x0e2 .tars.configurator.v1.ConfigTypeR\n" +
	"configType\x12\x1d\n" +
	"\n" +
	"event_type\x18\x04 \x01(\tR\teventType\x12\x15\n" +
	"\x06key_id\x18\x05 \x01(\tR\x05keyId\x12\x1b\n" +
	"\tconfig_id\x18\x06 \x01(\tR\bconfigId\x12%\n" +
	"\x0econfig_version\x18\a \x01(\x03R\rconfigVersion\x12\x16\n" +
	"\x06status\x18\b \x01(\tR\x06status\x12=\n" +
	"\ftriggered_at\x18\t \x01(\v2\x1a.google.protobuf.TimestampR\vtriggeredAt\x12\x1f\n" +
	"\vretry_count\x18\n" +
	" \x01(\x05R\n" +
	"retryCount\x12!\n" +
	"\fworkspace_id\x18\v \x01(\tR\vworkspaceId\x12\x1a\n" +
	"\bmetadata\x18\f \x01(\tR\bmetadata\"Q\n" +
	"\x17AcknowledgeEventRequest\x12\x19\n" +
	"\bevent_id\x18\x01 \x01(\tR\aeventId\x12\x1b\n" +
	"\tworker_id\x18\x02 \x01(\tR\bworkerId\"4\n" +
	"\x18AcknowledgeEventResponse\x12\x18\n" +
	"\asuccess\x18\x01 \x01(\bR\asuccess\"p\n" +
	"\x14CompleteEventRequest\x12\x19\n" +
	"\bevent_id\x18\x01 \x01(\tR\aeventId\x12\x18\n" +
	"\asuccess\x18\x02 \x01(\bR\asuccess\x12#\n" +
	"\rerror_message\x18\x03 \x01(\tR\ferrorMessage\"1\n" +
	"\x15CompleteEventResponse\x12\x18\n" +
	"\asuccess\x18\x01 \x01(\bR\asuccess\".\n" +
	"\x16ListActiveUsersRequest\x12\x14\n" +
	"\x05limit\x18\x01 \x01(\x05R\x05limit\"4\n" +
	"\x17ListActiveUsersResponse\x12\x19\n" +
	"\buser_ids\x18\x01 \x03(\tR\auserIds\"\xc3\x02\n" +
	"\rConfiguration\x12\x0e\n" +
	"\x02id\x18\x01 \x01(\tR\x02id\x12\x17\n" +
	"\auser_id\x18\x02 \x01(\tR\x06userId\x12A\n" +
	"\vconfig_type\x18\x03 \x01(\x0e2 .tars.configurator.v1.ConfigTypeR\n" +
	"configType\x12\x1f\n" +
	"\vconfig_data\x18\x04 \x01(\tR\n" +
	"configData\x12\x18\n" +
	"\aversion\x18\x05 \x01(\x03R\aversion\x12\x15\n" +
	"\x06key_id\x18\x06 \x01(\tR\x05keyId\x129\n" +
	"\n" +
	"created_at\x18\a \x01(\v2\x1a.google.protobuf.TimestampR\tcreatedAt\x129\n" +
	"\n" +
	"updated_at\x18\b \x01(\v2\x1a.google.protobuf.TimestampR\tupdatedAt\"\xec\x01\n" +
	"\x0fProviderBackend\x12\x12\n" +
	"\x04name\x18\x01 \x01(\tR\x04name\x12\x14\n" +
	"\x05owner\x18\x02 \x01(\tR\x05owner\x12\x1a\n" +
	"\bprovider\x18\x03 \x01(\tR\bprovider\x12\x16\n" +
	"\x06weight\x18\x04 \x01(\x05R\x06weight\x12\x1a\n" +
	"\bpriority\x18\x05 \x01(\x05R\bpriority\x12\x1f\n" +
	"\vbyok_policy\x18\x06 \x01(\tR\n" +
	"byokPolicy\x12\x1f\n" +
	"\vis_external\x18\a \x01(\bR\n" +
	"isExternal\x12\x1d\n" +
	"\n" +
	"model_name\x18\b \x01(\tR\tmodelName\"\x96\x01\n" +
	"\x17SaveBYOKBackendsRequest\x12\x17\n" +
	"\auser_id\x18\x01 \x01(\tR\x06userId\x12\x1f\n" +
	"\vkey_address\x18\x02 \x01(\tR\n" +
	"keyAddress\x12A\n" +
	"\bbackends\x18\x03 \x03(\v2%.tars.configurator.v1.ProviderBackendR\bbackends\"\x7f\n" +
	"\x18SaveBYOKBackendsResponse\x12I\n" +
	"\rconfiguration\x18\x01 \x01(\v2#.tars.configurator.v1.ConfigurationR\rconfiguration\x12\x18\n" +
	"\aupdated\x18\x02 \x01(\bR\aupdated\"4\n" +
	"\x19DeleteBYOKBackendsRequest\x12\x17\n" +
	"\auser_id\x18\x01 \x01(\tR\x06userId\"6\n" +
	"\x1aDeleteBYOKBackendsResponse\x12\x18\n" +
	"\adeleted\x18\x01 \x01(\bR\adeleted\"k\n" +
	"\x16RevokeUserTokenRequest\x12\x10\n" +
	"\x03jti\x18\x01 \x01(\tR\x03jti\x12\x17\n" +
	"\auser_id\x18\x02 \x01(\tR\x06userId\x12\x1b\n" +
	"\x06reason\x18\x03 \x01(\tH\x00R\x06reason\x88\x01\x01B\t\n" +
	"\a_reason\"n\n" +
	"\x17RevokeUserTokenResponse\x12\x18\n" +
	"\asuccess\x18\x01 \x01(\bR\asuccess\x129\n" +
	"\n" +
	"revoked_at\x18\x02 \x01(\v2\x1a.google.protobuf.TimestampR\trevokedAt\"\xb1\x02\n" +
	"\bProvider\x12\x12\n" +
	"\x04slug\x18\x01 \x01(\tR\x04slug\x12!\n" +
	"\fdisplay_name\x18\x02 \x01(\tR\vdisplayName\x12 \n" +
	"\fapi_base_url\x18\x03 \x01(\tR\n" +
	"apiBaseUrl\x12\x1b\n" +
	"\tauth_type\x18\x04 \x01(\tR\bauthType\x12\x1d\n" +
	"\n" +
	"is_enabled\x18\x05 \x01(\bR\tisEnabled\x12\x1a\n" +
	"\bmetadata\x18\x06 \x01(\tR\bmetadata\x129\n" +
	"\n" +
	"created_at\x18\a \x01(\v2\x1a.google.protobuf.TimestampR\tcreatedAt\x129\n" +
	"\n" +
	"updated_at\x18\b \x01(\v2\x1a.google.protobuf.TimestampR\tupdatedAt\"\x1c\n" +
	"\x1aListActiveProvidersRequest\"[\n" +
	"\x1bListActiveProvidersResponse\x12<\n" +
	"\tproviders\x18\x01 \x03(\v2\x1e.tars.configurator.v1.ProviderR\tproviders\"t\n" +
	"\x16SetDataplaneURLRequest\x12!\n" +
	"\fworkspace_id\x18\x01 \x01(\tR\vworkspaceId\x12\x10\n" +
	"\x03url\x18\x02 \x01(\tR\x03url\x12%\n" +
	"\x0etrigger_update\x18\x03 \x01(\bR\rtriggerUpdate\"\x19\n" +
	"\x17SetDataplaneURLResponse\"\xcb\x02\n" +
	"\x1dUpsertMCPCatalogServerRequest\x12!\n" +
	"\fworkspace_id\x18\x01 \x01(\tR\vworkspaceId\x12\x0e\n" +
	"\x02id\x18\x02 \x01(\tR\x02id\x12\x10\n" +
	"\x03url\x18\x03 \x01(\tR\x03url\x12\x12\n" +
	"\x04name\x18\x04 \x01(\tR\x04name\x12 \n" +
	"\vdescription\x18\x05 \x01(\tR\vdescription\x12\x19\n" +
	"\bicon_url\x18\x06 \x01(\tR\aiconUrl\x12\x1e\n" +
	"\n" +
	"categories\x18\a \x03(\tR\n" +
	"categories\x12&\n" +
	"\x0eauthentication\x18\b \x01(\tR\x0eauthentication\x12#\n" +
	"\rrequires_auth\x18\t \x01(\bR\frequiresAuth\x12'\n" +
	"\x0fforce_overwrite\x18\n" +
	" \x01(\bR\x0eforceOverwrite\":\n" +
	"\x1eUpsertMCPCatalogServerResponse\x12\x18\n" +
	"\acreated\x18\x01 \x01(\bR\acreated\"\x1a\n" +
	"\x18ValidateDataplaneRequest\"|\n" +
	"\x19ValidateDataplaneResponse\x12_\n" +
	"\x16gatekeeper_public_keys\x18\x01 \x03(\v2).tars.configurator.v1.GatekeeperPublicKeyR\x14gatekeeperPublicKeys\"q\n" +
	"\x13GatekeeperPublicKey\x12\x10\n" +
	"\x03kid\x18\x01 \x01(\tR\x03kid\x12\x10\n" +
	"\x03alg\x18\x02 \x01(\tR\x03alg\x12\x10\n" +
	"\x03use\x18\x03 \x01(\tR\x03use\x12$\n" +
	"\x0epublic_key_pem\x18\x04 \x01(\tR\fpublicKeyPem\"S\n" +
	"\x1aUpdateEventMetadataRequest\x12\x19\n" +
	"\bevent_id\x18\x01 \x01(\tR\aeventId\x12\x1a\n" +
	"\bmetadata\x18\x02 \x01(\tR\bmetadata\"7\n" +
	"\x1bUpdateEventMetadataResponse\x12\x18\n" +
	"\asuccess\x18\x01 \x01(\bR\asuccess\"I\n" +
	"\x1dCancelDataplaneUpgradeRequest\x12(\n" +
	"\x10upgrade_event_id\x18\x01 \x01(\tR\x0eupgradeEventId\":\n" +
	"\x1eCancelDataplaneUpgradeResponse\x12\x18\n" +
	"\asuccess\x18\x01 \x01(\bR\asuccess\"K\n" +
	"\x1fRollbackDataplaneUpgradeRequest\x12(\n" +
	"\x10upgrade_event_id\x18\x01 \x01(\tR\x0eupgradeEventId\"h\n" +
	" RollbackDataplaneUpgradeResponse\x12\x18\n" +
	"\asuccess\x18\x01 \x01(\bR\asuccess\x12*\n" +
	"\x11rollback_event_id\x18\x02 \x01(\tR\x0frollbackEventId\"\x84\x01\n" +
	"\x1aDataplaneUpgradeCredential\x12\x12\n" +
	"\x04slot\x18\x01 \x01(\tR\x04slot\x12\x1a\n" +
	"\busername\x18\x02 \x01(\tR\busername\x12\x1a\n" +
	"\bpassword\x18\x03 \x01(\tR\bpassword\x12\x1a\n" +
	"\bregistry\x18\x04 \x01(\tR\bregistry\"\xd6\x01\n" +
	"(SubmitDataplaneUpgradeCredentialsRequest\x12(\n" +
	"\x10upgrade_event_id\x18\x01 \x01(\tR\x0eupgradeEventId\x12R\n" +
	"\vcredentials\x18\x02 \x03(\v20.tars.configurator.v1.DataplaneUpgradeCredentialR\vcredentials\x12,\n" +
	"\x12persist_in_cluster\x18\x03 \x01(\bR\x10persistInCluster\"l\n" +
	")SubmitDataplaneUpgradeCredentialsResponse\x12%\n" +
	"\x0ecredentials_id\x18\x01 \x01(\tR\rcredentialsId\x12\x18\n" +
	"\asuccess\x18\x02 \x01(\bR\asuccess\"Q\n" +
	"%GetDataplaneUpgradeCredentialsRequest\x12(\n" +
	"\x10upgrade_event_id\x18\x01 \x01(\tR\x0eupgradeEventId\"\xc4\x01\n" +
	"&GetDataplaneUpgradeCredentialsResponse\x12R\n" +
	"\vcredentials\x18\x01 \x03(\v20.tars.configurator.v1.DataplaneUpgradeCredentialR\vcredentials\x12\x18\n" +
	"\apresent\x18\x02 \x01(\bR\apresent\x12,\n" +
	"\x12persist_in_cluster\x18\x03 \x01(\bR\x10persistInCluster\"o\n" +
	"%AckDataplaneUpgradeCredentialsRequest\x12(\n" +
	"\x10upgrade_event_id\x18\x01 \x01(\tR\x0eupgradeEventId\x12\x1c\n" +
	"\tdelivered\x18\x02 \x01(\bR\tdelivered\"B\n" +
	"&AckDataplaneUpgradeCredentialsResponse\x12\x18\n" +
	"\asuccess\x18\x01 \x01(\bR\asuccess*\xa2\x03\n" +
	"\n" +
	"ConfigType\x12\x1b\n" +
	"\x17CONFIG_TYPE_UNSPECIFIED\x10\x00\x12\x1d\n" +
	"\x19CONFIG_TYPE_GLOBAL_ROUTES\x10\x01\x12\x1b\n" +
	"\x17CONFIG_TYPE_USER_ROUTES\x10\x02\x12\x14\n" +
	"\x10CONFIG_TYPE_BYOK\x10\x03\x12\x1b\n" +
	"\x17CONFIG_TYPE_MCP_PROFILE\x10\x04\x12\x1c\n" +
	"\x18CONFIG_TYPE_MCP_BACKENDS\x10\x05\x12\x1b\n" +
	"\x17CONFIG_TYPE_OAUTH_TOKEN\x10\x06\x12\x1d\n" +
	"\x19CONFIG_TYPE_BYOK_BACKENDS\x10\a\x12\x1a\n" +
	"\x16CONFIG_TYPE_GUARDRAILS\x10\b\x12\x19\n" +
	"\x15CONFIG_TYPE_PROXY_URL\x10\t\x12\x15\n" +
	"\x11CONFIG_TYPE_PROXY\x10\n" +
	"\x12 \n" +
	"\x1cCONFIG_TYPE_PROVIDER_SECRETS\x10\v\x12!\n" +
	"\x1dCONFIG_TYPE_DATAPLANE_UPGRADE\x10\f\x12\x1b\n" +
	"\x17CONFIG_TYPE_BYOK_SCOPED\x10\r*\x95\x02\n" +
	"\tEventType\x12\x1a\n" +
	"\x16EVENT_TYPE_UNSPECIFIED\x10\x00\x12\x12\n" +
	"\x0eEVENT_TYPE_NEW\x10\x01\x12\x15\n" +
	"\x11EVENT_TYPE_UPDATE\x10\x02\x12\x16\n" +
	"\x12EVENT_TYPE_UPGRADE\x10\b\x12\x1d\n" +
	"\x19EVENT_TYPE_UPGRADE_CANCEL\x10\t\x12\x1f\n" +
	"\x1bEVENT_TYPE_UPGRADE_ROLLBACK\x10\n" +
	"\x12\x15\n" +
	"\x11EVENT_TYPE_DELETE\x10\x03\x12\x1a\n" +
	"\x16EVENT_TYPE_UPDATE_BYOK\x10\x04\x12\x19\n" +
	"\x15EVENT_TYPE_UPDATE_MCP\x10\x05\x12\x1b\n" +
	"\x17EVENT_TYPE_UPDATE_OAUTH\x10\x062\xa9#\n" +
	"\x13ConfiguratorService\x12\xb8\x01\n" +
	"\x10GetConfiguration\x12-.tars.configurator.v1.GetConfigurationRequest\x1a..tars.configurator.v1.GetConfigurationResponse\"E\x8a\xb5\x18\v\n" +
	"\x02\x01\x02\x12\x05admin\xaa\xb5\x18\rConfiguration\x82\xd3\xe4\x93\x02\x1c:\x01*\"\x17/configurator/v1/config\x90\x02\x01\x12\xad\x01\n" +
	"\rTriggerUpdate\x12*.tars.configurator.v1.TriggerUpdateRequest\x1a+.tars.configurator.v1.TriggerUpdateResponse\"C\x8a\xb5\x18\v\n" +
	"\x02\x01\x02\x12\x05admin\xaa\xb5\x18\rConfiguration\x82\xd3\xe4\x93\x02\x1d:\x01*\"\x18/configurator/v1/trigger\x12\xbc\x01\n" +
	"\x12ListConfigurations\x12/.tars.configurator.v1.ListConfigurationsRequest\x1a0.tars.configurator.v1.ListConfigurationsResponse\"C\x8a\xb5\x18\v\n" +
	"\x02\x01\x02\x12\x05admin\xaa\xb5\x18\rConfiguration\x82\xd3\xe4\x93\x02\x1a\x12\x18/configurator/v1/configs\x90\x02\x01\x12\xb6\x01\n" +
	"\x11ListPendingEvents\x12..tars.configurator.v1.ListPendingEventsRequest\x1a/.tars.configurator.v1.ListPendingEventsResponse\"@\x8a\xb5\x18\v\n" +
	"\x02\x01\x02\x12\x05admin\xaa\xb5\x18\x06Events\x82\xd3\xe4\x93\x02!\x12\x1f/configurator/v1/pending-events\x12\xc9\x01\n" +
	"\x12ReconcileWorkspace\x12/.tars.configurator.v1.ReconcileWorkspaceRequest\x1a0.tars.configurator.v1.ReconcileWorkspaceResponse\"P\x8a\xb5\x18\v\n" +
	"\x02\x01\x02\x12\x05admin\xaa\xb5\x18\x0eWorkspace Sync\x82\xd3\xe4\x93\x02):\x01*\"$/configurator/v1/reconcile-workspace\x12\xc6\x01\n" +
	"\x11FullSyncWorkspace\x12..tars.configurator.v1.FullSyncWorkspaceRequest\x1a/.tars.configurator.v1.FullSyncWorkspaceResponse\"P\x8a\xb5\x18\v\n" +
	"\x02\x01\x02\x12\x05admin\xaa\xb5\x18\x0eWorkspace Sync\x82\xd3\xe4\x93\x02):\x01*\"$/configurator/v1/full-sync-workspace\x12\xb9\x01\n" +
	"\x10AcknowledgeEvent\x12-.tars.configurator.v1.AcknowledgeEventRequest\x1a..tars.configurator.v1.AcknowledgeEventResponse\"F\x8a\xb5\x18\v\n" +
	"\x02\x01\x02\x12\x05admin\xaa\xb5\x18\x06Events\x82\xd3\xe4\x93\x02':\x01*\"\"/configurator/v1/acknowledge-event\x12\xb5\x01\n" +
	"\x0fSetDataplaneURL\x12,.tars.configurator.v1.SetDataplaneURLRequest\x1a-.tars.configurator.v1.SetDataplaneURLResponse\"E\x8a\xb5\x18\v\n" +
	"\x02\x01\x02\x12\x05admin\xaa\xb5\x18\tDataplane\x82\xd3\xe4\x93\x02#:\x01*\"\x1e/configurator/v1/dataplane-url\x12\xd1\x01\n" +
	"\x16UpsertMCPCatalogServer\x123.tars.configurator.v1.UpsertMCPCatalogServerRequest\x1a4.tars.configurator.v1.UpsertMCPCatalogServerResponse\"L\x8a\xb5\x18\v\n" +
	"\x02\x01\x02\x12\x05admin\xaa\xb5\x18\vMCP Catalog\x82\xd3\xe4\x93\x02(:\x01*\"#/configurator/v1/mcp-catalog/upsert\x12\xc2\x01\n" +
	"\x11ValidateDataplane\x12..tars.configurator.v1.ValidateDataplaneRequest\x1a/.tars.configurator.v1.ValidateDataplaneResponse\"L\x8a\xb5\x18\n" +
	"\n" +
	"\x01\x02\x12\x05admin\xaa\xb5\x18\tDataplane\x82\xd3\xe4\x93\x02(:\x01*\"#/configurator/v1/validate-dataplane\x90\x02\x01\x12\xad\x01\n" +
	"\rCompleteEvent\x12*.tars.configurator.v1.CompleteEventRequest\x1a+.tars.configurator.v1.CompleteEventResponse\"C\x8a\xb5\x18\v\n" +
	"\x02\x01\x02\x12\x05admin\xaa\xb5\x18\x06Events\x82\xd3\xe4\x93\x02$:\x01*\"\x1f/configurator/v1/complete-event\x12\xb5\x01\n" +
	"\x0fListActiveUsers\x12,.tars.configurator.v1.ListActiveUsersRequest\x1a-.tars.configurator.v1.ListActiveUsersResponse\"E\x8a\xb5\x18\v\n" +
	"\x02\x01\x02\x12\x05admin\xaa\xb5\x18\n" +
	"Monitoring\x82\xd3\xe4\x93\x02\x1f\x12\x1d/configurator/v1/active-users\x90\x02\x01\x12\xc5\x01\n" +
	"\x13ListActiveProviders\x120.tars.configurator.v1.ListActiveProvidersRequest\x1a1.tars.configurator.v1.ListActiveProvidersResponse\"I\x8a\xb5\x18\v\n" +
	"\x02\x01\x02\x12\x05admin\xaa\xb5\x18\n" +
	"Monitoring\x82\xd3\xe4\x93\x02#\x12!/configurator/v1/active-providers\x90\x02\x01\x12\xbc\x01\n" +
	"\x10SaveBYOKBackends\x12-.tars.configurator.v1.SaveBYOKBackendsRequest\x1a..tars.configurator.v1.SaveBYOKBackendsResponse\"I\x8a\xb5\x18\v\n" +
	"\x02\x01\x02\x12\x05admin\xaa\xb5\x18\rBYOK Backends\x82\xd3\xe4\x93\x02#:\x01*\"\x1e/configurator/v1/byok-backends\x12\xc9\x01\n" +
	"\x12DeleteBYOKBackends\x12/.tars.configurator.v1.DeleteBYOKBackendsRequest\x1a0.tars.configurator.v1.DeleteBYOKBackendsResponse\"P\x8a\xb5\x18\v\n" +
	"\x02\x01\x02\x12\x05admin\xaa\xb5\x18\rBYOK Backends\x82\xd3\xe4\x93\x02**(/configurator/v1/byok-backends/{user_id}\x12\xc2\x01\n" +
	"\x0fRevokeUserToken\x12,.tars.configurator.v1.RevokeUserTokenRequest\x1a-.tars.configurator.v1.RevokeUserTokenResponse\"R\x8a\xb5\x18\v\n" +
	"\x02\x01\x02\x12\x05admin\xaa\xb5\x18\vUser Tokens\x82\xd3\xe4\x93\x02.:\x01*\")/configurator/v1/user-tokens/{jti}:revoke\x12\xbe\x01\n" +
	"\x13UpdateEventMetadata\x120.tars.configurator.v1.UpdateEventMetadataRequest\x1a1.tars.configurator.v1.UpdateEventMetadataResponse\"B\x8a\xb5\x18\n" +
	"\n" +
	"\x01\x02\x12\x05admin\xaa\xb5\x18\x06Events\x82\xd3\xe4\x93\x02$:\x01*\"\x1f/configurator/v1/event-metadata\x12\x82\x02\n" +
	"!SubmitDataplaneUpgradeCredentials\x12>.tars.configurator.v1.SubmitDataplaneUpgradeCredentialsRequest\x1a?.tars.configurator.v1.SubmitDataplaneUpgradeCredentialsResponse\"\\\x8a\xb5\x18\n" +
	"\n" +
	"\x01\x01\x12\x05admin\xaa\xb5\x18\x11Dataplane Upgrade\x82\xd3\xe4\x93\x023:\x01*\"./configurator/v1/dataplane-upgrade-credentials\x12\x80\x02\n" +
	"\x1eGetDataplaneUpgradeCredentials\x12;.tars.configurator.v1.GetDataplaneUpgradeCredentialsRequest\x1a<.tars.configurator.v1.GetDataplaneUpgradeCredentialsResponse\"c\x8a\xb5\x18\n" +
	"\n" +
	"\x01\x02\x12\x05admin\xaa\xb5\x18\x11Dataplane Upgrade\x82\xd3\xe4\x93\x027:\x01*\"2/configurator/v1/dataplane-upgrade-credentials/get\x90\x02\x01\x12\xfd\x01\n" +
	"\x1eAckDataplaneUpgradeCredentials\x12;.tars.configurator.v1.AckDataplaneUpgradeCredentialsRequest\x1a<.tars.configurator.v1.AckDataplaneUpgradeCredentialsResponse\"`\x8a\xb5\x18\n" +
	"\n" +
	"\x01\x02\x12\x05admin\xaa\xb5\x18\x11Dataplane Upgrade\x82\xd3\xe4\x93\x027:\x01*\"2/configurator/v1/dataplane-upgrade-credentials/ack\x12\xdc\x01\n" +
	"\x16CancelDataplaneUpgrade\x123.tars.configurator.v1.CancelDataplaneUpgradeRequest\x1a4.tars.configurator.v1.CancelDataplaneUpgradeResponse\"W\x8a\xb5\x18\n" +
	"\n" +
	"\x01\x01\x12\x05admin\xaa\xb5\x18\x11Dataplane Upgrade\x82\xd3\xe4\x93\x02.:\x01*\")/configurator/v1/dataplane-upgrade/cancel\x12\xe4\x01\n" +
	"\x18RollbackDataplaneUpgrade\x125.tars.configurator.v1.RollbackDataplaneUpgradeRequest\x1a6.tars.configurator.v1.RollbackDataplaneUpgradeResponse\"Y\x8a\xb5\x18\n" +
	"\n" +
	"\x01\x01\x12\x05admin\xaa\xb5\x18\x11Dataplane Upgrade\x82\xd3\xe4\x93\x020:\x01*\"+/configurator/v1/dataplane-upgrade/rollbackB\xe4\x01\n" +
	"\x18com.tars.configurator.v1B\x11ConfiguratorProtoP\x01ZCgithub.com/tetrateio/fraser/api/tars/configurator/v1;configuratorv1\xa2\x02\x03TCX\xaa\x02\x14Tars.Configurator.V1\xca\x02\x14Tars\\Configurator\\V1\xe2\x02 Tars\\Configurator\\V1\\GPBMetadata\xea\x02\x16Tars::Configurator::V1b\x06proto3"

var (
	file_tars_configurator_v1_configurator_proto_rawDescOnce sync.Once
	file_tars_configurator_v1_configurator_proto_rawDescData []byte
)

func file_tars_configurator_v1_configurator_proto_rawDescGZIP() []byte {
	file_tars_configurator_v1_configurator_proto_rawDescOnce.Do(func() {
		file_tars_configurator_v1_configurator_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_tars_configurator_v1_configurator_proto_rawDesc), len(file_tars_configurator_v1_configurator_proto_rawDesc)))
	})
	return file_tars_configurator_v1_configurator_proto_rawDescData
}

var file_tars_configurator_v1_configurator_proto_enumTypes = make([]protoimpl.EnumInfo, 2)
var file_tars_configurator_v1_configurator_proto_msgTypes = make([]protoimpl.MessageInfo, 54)
var file_tars_configurator_v1_configurator_proto_goTypes = []any{
	(ConfigType)(0),                                   // 0: tars.configurator.v1.ConfigType
	(EventType)(0),                                    // 1: tars.configurator.v1.EventType
	(*GetConfigurationRequest)(nil),                   // 2: tars.configurator.v1.GetConfigurationRequest
	(*UserConfigQuery)(nil),                           // 3: tars.configurator.v1.UserConfigQuery
	(*GetConfigurationResponse)(nil),                  // 4: tars.configurator.v1.GetConfigurationResponse
	(*TriggerUpdateRequest)(nil),                      // 5: tars.configurator.v1.TriggerUpdateRequest
	(*TriggerMetadata)(nil),                           // 6: tars.configurator.v1.TriggerMetadata
	(*DataplaneUpgradeTrigger)(nil),                   // 7: tars.configurator.v1.DataplaneUpgradeTrigger
	(*TriggerUpdateResponse)(nil),                     // 8: tars.configurator.v1.TriggerUpdateResponse
	(*ListConfigurationsRequest)(nil),                 // 9: tars.configurator.v1.ListConfigurationsRequest
	(*ListConfigurationsResponse)(nil),                // 10: tars.configurator.v1.ListConfigurationsResponse
	(*ListPendingEventsRequest)(nil),                  // 11: tars.configurator.v1.ListPendingEventsRequest
	(*DoctorRuntimeStatus)(nil),                       // 12: tars.configurator.v1.DoctorRuntimeStatus
	(*ListPendingEventsResponse)(nil),                 // 13: tars.configurator.v1.ListPendingEventsResponse
	(*ReconcileWorkspaceRequest)(nil),                 // 14: tars.configurator.v1.ReconcileWorkspaceRequest
	(*ReconcileWorkspaceResponse)(nil),                // 15: tars.configurator.v1.ReconcileWorkspaceResponse
	(*FullSyncWorkspaceRequest)(nil),                  // 16: tars.configurator.v1.FullSyncWorkspaceRequest
	(*FullSyncWorkspaceResponse)(nil),                 // 17: tars.configurator.v1.FullSyncWorkspaceResponse
	(*ConfigurationEvent)(nil),                        // 18: tars.configurator.v1.ConfigurationEvent
	(*AcknowledgeEventRequest)(nil),                   // 19: tars.configurator.v1.AcknowledgeEventRequest
	(*AcknowledgeEventResponse)(nil),                  // 20: tars.configurator.v1.AcknowledgeEventResponse
	(*CompleteEventRequest)(nil),                      // 21: tars.configurator.v1.CompleteEventRequest
	(*CompleteEventResponse)(nil),                     // 22: tars.configurator.v1.CompleteEventResponse
	(*ListActiveUsersRequest)(nil),                    // 23: tars.configurator.v1.ListActiveUsersRequest
	(*ListActiveUsersResponse)(nil),                   // 24: tars.configurator.v1.ListActiveUsersResponse
	(*Configuration)(nil),                             // 25: tars.configurator.v1.Configuration
	(*ProviderBackend)(nil),                           // 26: tars.configurator.v1.ProviderBackend
	(*SaveBYOKBackendsRequest)(nil),                   // 27: tars.configurator.v1.SaveBYOKBackendsRequest
	(*SaveBYOKBackendsResponse)(nil),                  // 28: tars.configurator.v1.SaveBYOKBackendsResponse
	(*DeleteBYOKBackendsRequest)(nil),                 // 29: tars.configurator.v1.DeleteBYOKBackendsRequest
	(*DeleteBYOKBackendsResponse)(nil),                // 30: tars.configurator.v1.DeleteBYOKBackendsResponse
	(*RevokeUserTokenRequest)(nil),                    // 31: tars.configurator.v1.RevokeUserTokenRequest
	(*RevokeUserTokenResponse)(nil),                   // 32: tars.configurator.v1.RevokeUserTokenResponse
	(*Provider)(nil),                                  // 33: tars.configurator.v1.Provider
	(*ListActiveProvidersRequest)(nil),                // 34: tars.configurator.v1.ListActiveProvidersRequest
	(*ListActiveProvidersResponse)(nil),               // 35: tars.configurator.v1.ListActiveProvidersResponse
	(*SetDataplaneURLRequest)(nil),                    // 36: tars.configurator.v1.SetDataplaneURLRequest
	(*SetDataplaneURLResponse)(nil),                   // 37: tars.configurator.v1.SetDataplaneURLResponse
	(*UpsertMCPCatalogServerRequest)(nil),             // 38: tars.configurator.v1.UpsertMCPCatalogServerRequest
	(*UpsertMCPCatalogServerResponse)(nil),            // 39: tars.configurator.v1.UpsertMCPCatalogServerResponse
	(*ValidateDataplaneRequest)(nil),                  // 40: tars.configurator.v1.ValidateDataplaneRequest
	(*ValidateDataplaneResponse)(nil),                 // 41: tars.configurator.v1.ValidateDataplaneResponse
	(*GatekeeperPublicKey)(nil),                       // 42: tars.configurator.v1.GatekeeperPublicKey
	(*UpdateEventMetadataRequest)(nil),                // 43: tars.configurator.v1.UpdateEventMetadataRequest
	(*UpdateEventMetadataResponse)(nil),               // 44: tars.configurator.v1.UpdateEventMetadataResponse
	(*CancelDataplaneUpgradeRequest)(nil),             // 45: tars.configurator.v1.CancelDataplaneUpgradeRequest
	(*CancelDataplaneUpgradeResponse)(nil),            // 46: tars.configurator.v1.CancelDataplaneUpgradeResponse
	(*RollbackDataplaneUpgradeRequest)(nil),           // 47: tars.configurator.v1.RollbackDataplaneUpgradeRequest
	(*RollbackDataplaneUpgradeResponse)(nil),          // 48: tars.configurator.v1.RollbackDataplaneUpgradeResponse
	(*DataplaneUpgradeCredential)(nil),                // 49: tars.configurator.v1.DataplaneUpgradeCredential
	(*SubmitDataplaneUpgradeCredentialsRequest)(nil),  // 50: tars.configurator.v1.SubmitDataplaneUpgradeCredentialsRequest
	(*SubmitDataplaneUpgradeCredentialsResponse)(nil), // 51: tars.configurator.v1.SubmitDataplaneUpgradeCredentialsResponse
	(*GetDataplaneUpgradeCredentialsRequest)(nil),     // 52: tars.configurator.v1.GetDataplaneUpgradeCredentialsRequest
	(*GetDataplaneUpgradeCredentialsResponse)(nil),    // 53: tars.configurator.v1.GetDataplaneUpgradeCredentialsResponse
	(*AckDataplaneUpgradeCredentialsRequest)(nil),     // 54: tars.configurator.v1.AckDataplaneUpgradeCredentialsRequest
	(*AckDataplaneUpgradeCredentialsResponse)(nil),    // 55: tars.configurator.v1.AckDataplaneUpgradeCredentialsResponse
	(*timestamppb.Timestamp)(nil),                     // 56: google.protobuf.Timestamp
}
var file_tars_configurator_v1_configurator_proto_depIdxs = []int32{
	3,  // 0: tars.configurator.v1.GetConfigurationRequest.queries:type_name -> tars.configurator.v1.UserConfigQuery
	0,  // 1: tars.configurator.v1.UserConfigQuery.config_type:type_name -> tars.configurator.v1.ConfigType
	25, // 2: tars.configurator.v1.GetConfigurationResponse.configurations:type_name -> tars.configurator.v1.Configuration
	0,  // 3: tars.configurator.v1.TriggerUpdateRequest.config_type:type_name -> tars.configurator.v1.ConfigType
	1,  // 4: tars.configurator.v1.TriggerUpdateRequest.event_type:type_name -> tars.configurator.v1.EventType
	6,  // 5: tars.configurator.v1.TriggerUpdateRequest.metadata:type_name -> tars.configurator.v1.TriggerMetadata
	7,  // 6: tars.configurator.v1.TriggerMetadata.dataplane_upgrade:type_name -> tars.configurator.v1.DataplaneUpgradeTrigger
	25, // 7: tars.configurator.v1.TriggerUpdateResponse.configuration:type_name -> tars.configurator.v1.Configuration
	0,  // 8: tars.configurator.v1.ListConfigurationsRequest.config_type:type_name -> tars.configurator.v1.ConfigType
	25, // 9: tars.configurator.v1.ListConfigurationsResponse.configurations:type_name -> tars.configurator.v1.Configuration
	12, // 10: tars.configurator.v1.ListPendingEventsRequest.doctor_runtime:type_name -> tars.configurator.v1.DoctorRuntimeStatus
	56, // 11: tars.configurator.v1.DoctorRuntimeStatus.last_successful_run:type_name -> google.protobuf.Timestamp
	56, // 12: tars.configurator.v1.DoctorRuntimeStatus.observed_at:type_name -> google.protobuf.Timestamp
	18, // 13: tars.configurator.v1.ListPendingEventsResponse.events:type_name -> tars.configurator.v1.ConfigurationEvent
	0,  // 14: tars.configurator.v1.ConfigurationEvent.config_type:type_name -> tars.configurator.v1.ConfigType
	56, // 15: tars.configurator.v1.ConfigurationEvent.triggered_at:type_name -> google.protobuf.Timestamp
	0,  // 16: tars.configurator.v1.Configuration.config_type:type_name -> tars.configurator.v1.ConfigType
	56, // 17: tars.configurator.v1.Configuration.created_at:type_name -> google.protobuf.Timestamp
	56, // 18: tars.configurator.v1.Configuration.updated_at:type_name -> google.protobuf.Timestamp
	26, // 19: tars.configurator.v1.SaveBYOKBackendsRequest.backends:type_name -> tars.configurator.v1.ProviderBackend
	25, // 20: tars.configurator.v1.SaveBYOKBackendsResponse.configuration:type_name -> tars.configurator.v1.Configuration
	56, // 21: tars.configurator.v1.RevokeUserTokenResponse.revoked_at:type_name -> google.protobuf.Timestamp
	56, // 22: tars.configurator.v1.Provider.created_at:type_name -> google.protobuf.Timestamp
	56, // 23: tars.configurator.v1.Provider.updated_at:type_name -> google.protobuf.Timestamp
	33, // 24: tars.configurator.v1.ListActiveProvidersResponse.providers:type_name -> tars.configurator.v1.Provider
	42, // 25: tars.configurator.v1.ValidateDataplaneResponse.gatekeeper_public_keys:type_name -> tars.configurator.v1.GatekeeperPublicKey
	49, // 26: tars.configurator.v1.SubmitDataplaneUpgradeCredentialsRequest.credentials:type_name -> tars.configurator.v1.DataplaneUpgradeCredential
	49, // 27: tars.configurator.v1.GetDataplaneUpgradeCredentialsResponse.credentials:type_name -> tars.configurator.v1.DataplaneUpgradeCredential
	2,  // 28: tars.configurator.v1.ConfiguratorService.GetConfiguration:input_type -> tars.configurator.v1.GetConfigurationRequest
	5,  // 29: tars.configurator.v1.ConfiguratorService.TriggerUpdate:input_type -> tars.configurator.v1.TriggerUpdateRequest
	9,  // 30: tars.configurator.v1.ConfiguratorService.ListConfigurations:input_type -> tars.configurator.v1.ListConfigurationsRequest
	11, // 31: tars.configurator.v1.ConfiguratorService.ListPendingEvents:input_type -> tars.configurator.v1.ListPendingEventsRequest
	14, // 32: tars.configurator.v1.ConfiguratorService.ReconcileWorkspace:input_type -> tars.configurator.v1.ReconcileWorkspaceRequest
	16, // 33: tars.configurator.v1.ConfiguratorService.FullSyncWorkspace:input_type -> tars.configurator.v1.FullSyncWorkspaceRequest
	19, // 34: tars.configurator.v1.ConfiguratorService.AcknowledgeEvent:input_type -> tars.configurator.v1.AcknowledgeEventRequest
	36, // 35: tars.configurator.v1.ConfiguratorService.SetDataplaneURL:input_type -> tars.configurator.v1.SetDataplaneURLRequest
	38, // 36: tars.configurator.v1.ConfiguratorService.UpsertMCPCatalogServer:input_type -> tars.configurator.v1.UpsertMCPCatalogServerRequest
	40, // 37: tars.configurator.v1.ConfiguratorService.ValidateDataplane:input_type -> tars.configurator.v1.ValidateDataplaneRequest
	21, // 38: tars.configurator.v1.ConfiguratorService.CompleteEvent:input_type -> tars.configurator.v1.CompleteEventRequest
	23, // 39: tars.configurator.v1.ConfiguratorService.ListActiveUsers:input_type -> tars.configurator.v1.ListActiveUsersRequest
	34, // 40: tars.configurator.v1.ConfiguratorService.ListActiveProviders:input_type -> tars.configurator.v1.ListActiveProvidersRequest
	27, // 41: tars.configurator.v1.ConfiguratorService.SaveBYOKBackends:input_type -> tars.configurator.v1.SaveBYOKBackendsRequest
	29, // 42: tars.configurator.v1.ConfiguratorService.DeleteBYOKBackends:input_type -> tars.configurator.v1.DeleteBYOKBackendsRequest
	31, // 43: tars.configurator.v1.ConfiguratorService.RevokeUserToken:input_type -> tars.configurator.v1.RevokeUserTokenRequest
	43, // 44: tars.configurator.v1.ConfiguratorService.UpdateEventMetadata:input_type -> tars.configurator.v1.UpdateEventMetadataRequest
	50, // 45: tars.configurator.v1.ConfiguratorService.SubmitDataplaneUpgradeCredentials:input_type -> tars.configurator.v1.SubmitDataplaneUpgradeCredentialsRequest
	52, // 46: tars.configurator.v1.ConfiguratorService.GetDataplaneUpgradeCredentials:input_type -> tars.configurator.v1.GetDataplaneUpgradeCredentialsRequest
	54, // 47: tars.configurator.v1.ConfiguratorService.AckDataplaneUpgradeCredentials:input_type -> tars.configurator.v1.AckDataplaneUpgradeCredentialsRequest
	45, // 48: tars.configurator.v1.ConfiguratorService.CancelDataplaneUpgrade:input_type -> tars.configurator.v1.CancelDataplaneUpgradeRequest
	47, // 49: tars.configurator.v1.ConfiguratorService.RollbackDataplaneUpgrade:input_type -> tars.configurator.v1.RollbackDataplaneUpgradeRequest
	4,  // 50: tars.configurator.v1.ConfiguratorService.GetConfiguration:output_type -> tars.configurator.v1.GetConfigurationResponse
	8,  // 51: tars.configurator.v1.ConfiguratorService.TriggerUpdate:output_type -> tars.configurator.v1.TriggerUpdateResponse
	10, // 52: tars.configurator.v1.ConfiguratorService.ListConfigurations:output_type -> tars.configurator.v1.ListConfigurationsResponse
	13, // 53: tars.configurator.v1.ConfiguratorService.ListPendingEvents:output_type -> tars.configurator.v1.ListPendingEventsResponse
	15, // 54: tars.configurator.v1.ConfiguratorService.ReconcileWorkspace:output_type -> tars.configurator.v1.ReconcileWorkspaceResponse
	17, // 55: tars.configurator.v1.ConfiguratorService.FullSyncWorkspace:output_type -> tars.configurator.v1.FullSyncWorkspaceResponse
	20, // 56: tars.configurator.v1.ConfiguratorService.AcknowledgeEvent:output_type -> tars.configurator.v1.AcknowledgeEventResponse
	37, // 57: tars.configurator.v1.ConfiguratorService.SetDataplaneURL:output_type -> tars.configurator.v1.SetDataplaneURLResponse
	39, // 58: tars.configurator.v1.ConfiguratorService.UpsertMCPCatalogServer:output_type -> tars.configurator.v1.UpsertMCPCatalogServerResponse
	41, // 59: tars.configurator.v1.ConfiguratorService.ValidateDataplane:output_type -> tars.configurator.v1.ValidateDataplaneResponse
	22, // 60: tars.configurator.v1.ConfiguratorService.CompleteEvent:output_type -> tars.configurator.v1.CompleteEventResponse
	24, // 61: tars.configurator.v1.ConfiguratorService.ListActiveUsers:output_type -> tars.configurator.v1.ListActiveUsersResponse
	35, // 62: tars.configurator.v1.ConfiguratorService.ListActiveProviders:output_type -> tars.configurator.v1.ListActiveProvidersResponse
	28, // 63: tars.configurator.v1.ConfiguratorService.SaveBYOKBackends:output_type -> tars.configurator.v1.SaveBYOKBackendsResponse
	30, // 64: tars.configurator.v1.ConfiguratorService.DeleteBYOKBackends:output_type -> tars.configurator.v1.DeleteBYOKBackendsResponse
	32, // 65: tars.configurator.v1.ConfiguratorService.RevokeUserToken:output_type -> tars.configurator.v1.RevokeUserTokenResponse
	44, // 66: tars.configurator.v1.ConfiguratorService.UpdateEventMetadata:output_type -> tars.configurator.v1.UpdateEventMetadataResponse
	51, // 67: tars.configurator.v1.ConfiguratorService.SubmitDataplaneUpgradeCredentials:output_type -> tars.configurator.v1.SubmitDataplaneUpgradeCredentialsResponse
	53, // 68: tars.configurator.v1.ConfiguratorService.GetDataplaneUpgradeCredentials:output_type -> tars.configurator.v1.GetDataplaneUpgradeCredentialsResponse
	55, // 69: tars.configurator.v1.ConfiguratorService.AckDataplaneUpgradeCredentials:output_type -> tars.configurator.v1.AckDataplaneUpgradeCredentialsResponse
	46, // 70: tars.configurator.v1.ConfiguratorService.CancelDataplaneUpgrade:output_type -> tars.configurator.v1.CancelDataplaneUpgradeResponse
	48, // 71: tars.configurator.v1.ConfiguratorService.RollbackDataplaneUpgrade:output_type -> tars.configurator.v1.RollbackDataplaneUpgradeResponse
	50, // [50:72] is the sub-list for method output_type
	28, // [28:50] is the sub-list for method input_type
	28, // [28:28] is the sub-list for extension type_name
	28, // [28:28] is the sub-list for extension extendee
	0,  // [0:28] is the sub-list for field type_name
}

func init() { file_tars_configurator_v1_configurator_proto_init() }
func file_tars_configurator_v1_configurator_proto_init() {
	if File_tars_configurator_v1_configurator_proto != nil {
		return
	}
	file_tars_configurator_v1_configurator_proto_msgTypes[29].OneofWrappers = []any{}
	type x struct{}
	out := protoimpl.TypeBuilder{
		File: protoimpl.DescBuilder{
			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
			RawDescriptor: unsafe.Slice(unsafe.StringData(file_tars_configurator_v1_configurator_proto_rawDesc), len(file_tars_configurator_v1_configurator_proto_rawDesc)),
			NumEnums:      2,
			NumMessages:   54,
			NumExtensions: 0,
			NumServices:   1,
		},
		GoTypes:           file_tars_configurator_v1_configurator_proto_goTypes,
		DependencyIndexes: file_tars_configurator_v1_configurator_proto_depIdxs,
		EnumInfos:         file_tars_configurator_v1_configurator_proto_enumTypes,
		MessageInfos:      file_tars_configurator_v1_configurator_proto_msgTypes,
	}.Build()
	File_tars_configurator_v1_configurator_proto = out.File
	file_tars_configurator_v1_configurator_proto_goTypes = nil
	file_tars_configurator_v1_configurator_proto_depIdxs = nil
}
