// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// 	protoc-gen-go v1.36.11
// 	protoc        (unknown)
// source: panel/v1/agent.proto

package panelv1

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

type PlayerEvent_Kind int32

const (
	PlayerEvent_KIND_UNSPECIFIED PlayerEvent_Kind = 0
	PlayerEvent_KIND_JOIN        PlayerEvent_Kind = 1
	PlayerEvent_KIND_LEAVE       PlayerEvent_Kind = 2
	PlayerEvent_KIND_CHAT        PlayerEvent_Kind = 3
	PlayerEvent_KIND_DEATH       PlayerEvent_Kind = 4
	PlayerEvent_KIND_CUSTOM      PlayerEvent_Kind = 99
)

// Enum value maps for PlayerEvent_Kind.
var (
	PlayerEvent_Kind_name = map[int32]string{
		0:  "KIND_UNSPECIFIED",
		1:  "KIND_JOIN",
		2:  "KIND_LEAVE",
		3:  "KIND_CHAT",
		4:  "KIND_DEATH",
		99: "KIND_CUSTOM",
	}
	PlayerEvent_Kind_value = map[string]int32{
		"KIND_UNSPECIFIED": 0,
		"KIND_JOIN":        1,
		"KIND_LEAVE":       2,
		"KIND_CHAT":        3,
		"KIND_DEATH":       4,
		"KIND_CUSTOM":      99,
	}
)

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

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

func (PlayerEvent_Kind) Descriptor() protoreflect.EnumDescriptor {
	return file_panel_v1_agent_proto_enumTypes[0].Descriptor()
}

func (PlayerEvent_Kind) Type() protoreflect.EnumType {
	return &file_panel_v1_agent_proto_enumTypes[0]
}

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

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

// ControllerEnvelope — messages from Controller to Target.
type ControllerEnvelope struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	CorrelationId string                 `protobuf:"bytes,1,opt,name=correlation_id,json=correlationId,proto3" json:"correlation_id,omitempty"`
	SentAt        *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=sent_at,json=sentAt,proto3" json:"sent_at,omitempty"`
	// Types that are valid to be assigned to Payload:
	//
	//	*ControllerEnvelope_Hello
	//	*ControllerEnvelope_Ping
	//	*ControllerEnvelope_Exec
	//	*ControllerEnvelope_InstanceCreate
	//	*ControllerEnvelope_InstanceStart
	//	*ControllerEnvelope_InstanceStop
	//	*ControllerEnvelope_InstanceDelete
	//	*ControllerEnvelope_Rcon
	//	*ControllerEnvelope_FsList
	//	*ControllerEnvelope_FsRead
	//	*ControllerEnvelope_FsWrite
	//	*ControllerEnvelope_FsDelete
	//	*ControllerEnvelope_FsSymlink
	//	*ControllerEnvelope_FsExtract
	//	*ControllerEnvelope_FsCompress
	//	*ControllerEnvelope_FsRename
	//	*ControllerEnvelope_FsWriteChunk
	//	*ControllerEnvelope_ArkSaveRestore
	//	*ControllerEnvelope_DayzModInstall
	//	*ControllerEnvelope_DayzModUninstall
	//	*ControllerEnvelope_Update
	//	*ControllerEnvelope_Backup
	//	*ControllerEnvelope_Restore
	//	*ControllerEnvelope_BackupListEntries
	//	*ControllerEnvelope_BackupReadFile
	//	*ControllerEnvelope_EmpyrionScenarioInstall
	//	*ControllerEnvelope_EmpyrionDiscoveries
	//	*ControllerEnvelope_EmpyrionPlayerSummary
	//	*ControllerEnvelope_RegionScan
	//	*ControllerEnvelope_RegionHeal
	//	*ControllerEnvelope_InstanceRenderConfig
	//	*ControllerEnvelope_SeedMods
	//	*ControllerEnvelope_UpdateCheck
	Payload       isControllerEnvelope_Payload `protobuf_oneof:"payload"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

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

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

func (*ControllerEnvelope) ProtoMessage() {}

func (x *ControllerEnvelope) ProtoReflect() protoreflect.Message {
	mi := &file_panel_v1_agent_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 ControllerEnvelope.ProtoReflect.Descriptor instead.
func (*ControllerEnvelope) Descriptor() ([]byte, []int) {
	return file_panel_v1_agent_proto_rawDescGZIP(), []int{0}
}

func (x *ControllerEnvelope) GetCorrelationId() string {
	if x != nil {
		return x.CorrelationId
	}
	return ""
}

func (x *ControllerEnvelope) GetSentAt() *timestamppb.Timestamp {
	if x != nil {
		return x.SentAt
	}
	return nil
}

func (x *ControllerEnvelope) GetPayload() isControllerEnvelope_Payload {
	if x != nil {
		return x.Payload
	}
	return nil
}

func (x *ControllerEnvelope) GetHello() *ControllerHello {
	if x != nil {
		if x, ok := x.Payload.(*ControllerEnvelope_Hello); ok {
			return x.Hello
		}
	}
	return nil
}

func (x *ControllerEnvelope) GetPing() *Ping {
	if x != nil {
		if x, ok := x.Payload.(*ControllerEnvelope_Ping); ok {
			return x.Ping
		}
	}
	return nil
}

func (x *ControllerEnvelope) GetExec() *ExecRequest {
	if x != nil {
		if x, ok := x.Payload.(*ControllerEnvelope_Exec); ok {
			return x.Exec
		}
	}
	return nil
}

func (x *ControllerEnvelope) GetInstanceCreate() *InstanceCreate {
	if x != nil {
		if x, ok := x.Payload.(*ControllerEnvelope_InstanceCreate); ok {
			return x.InstanceCreate
		}
	}
	return nil
}

func (x *ControllerEnvelope) GetInstanceStart() *InstanceStart {
	if x != nil {
		if x, ok := x.Payload.(*ControllerEnvelope_InstanceStart); ok {
			return x.InstanceStart
		}
	}
	return nil
}

func (x *ControllerEnvelope) GetInstanceStop() *InstanceStop {
	if x != nil {
		if x, ok := x.Payload.(*ControllerEnvelope_InstanceStop); ok {
			return x.InstanceStop
		}
	}
	return nil
}

func (x *ControllerEnvelope) GetInstanceDelete() *InstanceDelete {
	if x != nil {
		if x, ok := x.Payload.(*ControllerEnvelope_InstanceDelete); ok {
			return x.InstanceDelete
		}
	}
	return nil
}

func (x *ControllerEnvelope) GetRcon() *RCONCommand {
	if x != nil {
		if x, ok := x.Payload.(*ControllerEnvelope_Rcon); ok {
			return x.Rcon
		}
	}
	return nil
}

func (x *ControllerEnvelope) GetFsList() *FsListRequest {
	if x != nil {
		if x, ok := x.Payload.(*ControllerEnvelope_FsList); ok {
			return x.FsList
		}
	}
	return nil
}

func (x *ControllerEnvelope) GetFsRead() *FsReadRequest {
	if x != nil {
		if x, ok := x.Payload.(*ControllerEnvelope_FsRead); ok {
			return x.FsRead
		}
	}
	return nil
}

func (x *ControllerEnvelope) GetFsWrite() *FsWriteRequest {
	if x != nil {
		if x, ok := x.Payload.(*ControllerEnvelope_FsWrite); ok {
			return x.FsWrite
		}
	}
	return nil
}

func (x *ControllerEnvelope) GetFsDelete() *FsDeleteRequest {
	if x != nil {
		if x, ok := x.Payload.(*ControllerEnvelope_FsDelete); ok {
			return x.FsDelete
		}
	}
	return nil
}

func (x *ControllerEnvelope) GetFsSymlink() *FsSymlinkRequest {
	if x != nil {
		if x, ok := x.Payload.(*ControllerEnvelope_FsSymlink); ok {
			return x.FsSymlink
		}
	}
	return nil
}

func (x *ControllerEnvelope) GetFsExtract() *FsExtractRequest {
	if x != nil {
		if x, ok := x.Payload.(*ControllerEnvelope_FsExtract); ok {
			return x.FsExtract
		}
	}
	return nil
}

func (x *ControllerEnvelope) GetFsCompress() *FsCompressRequest {
	if x != nil {
		if x, ok := x.Payload.(*ControllerEnvelope_FsCompress); ok {
			return x.FsCompress
		}
	}
	return nil
}

func (x *ControllerEnvelope) GetFsRename() *FsRenameRequest {
	if x != nil {
		if x, ok := x.Payload.(*ControllerEnvelope_FsRename); ok {
			return x.FsRename
		}
	}
	return nil
}

func (x *ControllerEnvelope) GetFsWriteChunk() *FsWriteChunkRequest {
	if x != nil {
		if x, ok := x.Payload.(*ControllerEnvelope_FsWriteChunk); ok {
			return x.FsWriteChunk
		}
	}
	return nil
}

func (x *ControllerEnvelope) GetArkSaveRestore() *ArkSaveRestoreRequest {
	if x != nil {
		if x, ok := x.Payload.(*ControllerEnvelope_ArkSaveRestore); ok {
			return x.ArkSaveRestore
		}
	}
	return nil
}

func (x *ControllerEnvelope) GetDayzModInstall() *DayzModInstallRequest {
	if x != nil {
		if x, ok := x.Payload.(*ControllerEnvelope_DayzModInstall); ok {
			return x.DayzModInstall
		}
	}
	return nil
}

func (x *ControllerEnvelope) GetDayzModUninstall() *DayzModUninstallRequest {
	if x != nil {
		if x, ok := x.Payload.(*ControllerEnvelope_DayzModUninstall); ok {
			return x.DayzModUninstall
		}
	}
	return nil
}

func (x *ControllerEnvelope) GetUpdate() *UpdateRequest {
	if x != nil {
		if x, ok := x.Payload.(*ControllerEnvelope_Update); ok {
			return x.Update
		}
	}
	return nil
}

func (x *ControllerEnvelope) GetBackup() *BackupRequest {
	if x != nil {
		if x, ok := x.Payload.(*ControllerEnvelope_Backup); ok {
			return x.Backup
		}
	}
	return nil
}

func (x *ControllerEnvelope) GetRestore() *RestoreRequest {
	if x != nil {
		if x, ok := x.Payload.(*ControllerEnvelope_Restore); ok {
			return x.Restore
		}
	}
	return nil
}

func (x *ControllerEnvelope) GetBackupListEntries() *BackupListEntriesRequest {
	if x != nil {
		if x, ok := x.Payload.(*ControllerEnvelope_BackupListEntries); ok {
			return x.BackupListEntries
		}
	}
	return nil
}

func (x *ControllerEnvelope) GetBackupReadFile() *BackupReadFileRequest {
	if x != nil {
		if x, ok := x.Payload.(*ControllerEnvelope_BackupReadFile); ok {
			return x.BackupReadFile
		}
	}
	return nil
}

func (x *ControllerEnvelope) GetEmpyrionScenarioInstall() *EmpyrionScenarioInstallRequest {
	if x != nil {
		if x, ok := x.Payload.(*ControllerEnvelope_EmpyrionScenarioInstall); ok {
			return x.EmpyrionScenarioInstall
		}
	}
	return nil
}

func (x *ControllerEnvelope) GetEmpyrionDiscoveries() *EmpyrionDiscoveriesRequest {
	if x != nil {
		if x, ok := x.Payload.(*ControllerEnvelope_EmpyrionDiscoveries); ok {
			return x.EmpyrionDiscoveries
		}
	}
	return nil
}

func (x *ControllerEnvelope) GetEmpyrionPlayerSummary() *EmpyrionPlayerSummaryRequest {
	if x != nil {
		if x, ok := x.Payload.(*ControllerEnvelope_EmpyrionPlayerSummary); ok {
			return x.EmpyrionPlayerSummary
		}
	}
	return nil
}

func (x *ControllerEnvelope) GetRegionScan() *RegionScanRequest {
	if x != nil {
		if x, ok := x.Payload.(*ControllerEnvelope_RegionScan); ok {
			return x.RegionScan
		}
	}
	return nil
}

func (x *ControllerEnvelope) GetRegionHeal() *RegionHealRequest {
	if x != nil {
		if x, ok := x.Payload.(*ControllerEnvelope_RegionHeal); ok {
			return x.RegionHeal
		}
	}
	return nil
}

func (x *ControllerEnvelope) GetInstanceRenderConfig() *InstanceRenderConfigRequest {
	if x != nil {
		if x, ok := x.Payload.(*ControllerEnvelope_InstanceRenderConfig); ok {
			return x.InstanceRenderConfig
		}
	}
	return nil
}

func (x *ControllerEnvelope) GetSeedMods() *SeedModsRequest {
	if x != nil {
		if x, ok := x.Payload.(*ControllerEnvelope_SeedMods); ok {
			return x.SeedMods
		}
	}
	return nil
}

func (x *ControllerEnvelope) GetUpdateCheck() *UpdateCheckRequest {
	if x != nil {
		if x, ok := x.Payload.(*ControllerEnvelope_UpdateCheck); ok {
			return x.UpdateCheck
		}
	}
	return nil
}

type isControllerEnvelope_Payload interface {
	isControllerEnvelope_Payload()
}

type ControllerEnvelope_Hello struct {
	Hello *ControllerHello `protobuf:"bytes,10,opt,name=hello,proto3,oneof"`
}

type ControllerEnvelope_Ping struct {
	Ping *Ping `protobuf:"bytes,11,opt,name=ping,proto3,oneof"`
}

type ControllerEnvelope_Exec struct {
	Exec *ExecRequest `protobuf:"bytes,20,opt,name=exec,proto3,oneof"`
}

type ControllerEnvelope_InstanceCreate struct {
	InstanceCreate *InstanceCreate `protobuf:"bytes,30,opt,name=instance_create,json=instanceCreate,proto3,oneof"`
}

type ControllerEnvelope_InstanceStart struct {
	InstanceStart *InstanceStart `protobuf:"bytes,31,opt,name=instance_start,json=instanceStart,proto3,oneof"`
}

type ControllerEnvelope_InstanceStop struct {
	InstanceStop *InstanceStop `protobuf:"bytes,32,opt,name=instance_stop,json=instanceStop,proto3,oneof"`
}

type ControllerEnvelope_InstanceDelete struct {
	InstanceDelete *InstanceDelete `protobuf:"bytes,33,opt,name=instance_delete,json=instanceDelete,proto3,oneof"`
}

type ControllerEnvelope_Rcon struct {
	Rcon *RCONCommand `protobuf:"bytes,40,opt,name=rcon,proto3,oneof"`
}

type ControllerEnvelope_FsList struct {
	FsList *FsListRequest `protobuf:"bytes,50,opt,name=fs_list,json=fsList,proto3,oneof"`
}

type ControllerEnvelope_FsRead struct {
	FsRead *FsReadRequest `protobuf:"bytes,51,opt,name=fs_read,json=fsRead,proto3,oneof"`
}

type ControllerEnvelope_FsWrite struct {
	FsWrite *FsWriteRequest `protobuf:"bytes,52,opt,name=fs_write,json=fsWrite,proto3,oneof"`
}

type ControllerEnvelope_FsDelete struct {
	FsDelete *FsDeleteRequest `protobuf:"bytes,53,opt,name=fs_delete,json=fsDelete,proto3,oneof"`
}

type ControllerEnvelope_FsSymlink struct {
	FsSymlink *FsSymlinkRequest `protobuf:"bytes,54,opt,name=fs_symlink,json=fsSymlink,proto3,oneof"`
}

type ControllerEnvelope_FsExtract struct {
	FsExtract *FsExtractRequest `protobuf:"bytes,55,opt,name=fs_extract,json=fsExtract,proto3,oneof"`
}

type ControllerEnvelope_FsCompress struct {
	FsCompress *FsCompressRequest `protobuf:"bytes,56,opt,name=fs_compress,json=fsCompress,proto3,oneof"`
}

type ControllerEnvelope_FsRename struct {
	FsRename *FsRenameRequest `protobuf:"bytes,57,opt,name=fs_rename,json=fsRename,proto3,oneof"`
}

type ControllerEnvelope_FsWriteChunk struct {
	FsWriteChunk *FsWriteChunkRequest `protobuf:"bytes,58,opt,name=fs_write_chunk,json=fsWriteChunk,proto3,oneof"`
}

type ControllerEnvelope_ArkSaveRestore struct {
	ArkSaveRestore *ArkSaveRestoreRequest `protobuf:"bytes,59,opt,name=ark_save_restore,json=arkSaveRestore,proto3,oneof"`
}

type ControllerEnvelope_DayzModInstall struct {
	DayzModInstall *DayzModInstallRequest `protobuf:"bytes,90,opt,name=dayz_mod_install,json=dayzModInstall,proto3,oneof"`
}

type ControllerEnvelope_DayzModUninstall struct {
	DayzModUninstall *DayzModUninstallRequest `protobuf:"bytes,91,opt,name=dayz_mod_uninstall,json=dayzModUninstall,proto3,oneof"`
}

type ControllerEnvelope_Update struct {
	Update *UpdateRequest `protobuf:"bytes,60,opt,name=update,proto3,oneof"`
}

type ControllerEnvelope_Backup struct {
	Backup *BackupRequest `protobuf:"bytes,70,opt,name=backup,proto3,oneof"`
}

type ControllerEnvelope_Restore struct {
	Restore *RestoreRequest `protobuf:"bytes,71,opt,name=restore,proto3,oneof"`
}

type ControllerEnvelope_BackupListEntries struct {
	BackupListEntries *BackupListEntriesRequest `protobuf:"bytes,72,opt,name=backup_list_entries,json=backupListEntries,proto3,oneof"`
}

type ControllerEnvelope_BackupReadFile struct {
	BackupReadFile *BackupReadFileRequest `protobuf:"bytes,73,opt,name=backup_read_file,json=backupReadFile,proto3,oneof"`
}

type ControllerEnvelope_EmpyrionScenarioInstall struct {
	EmpyrionScenarioInstall *EmpyrionScenarioInstallRequest `protobuf:"bytes,100,opt,name=empyrion_scenario_install,json=empyrionScenarioInstall,proto3,oneof"`
}

type ControllerEnvelope_EmpyrionDiscoveries struct {
	EmpyrionDiscoveries *EmpyrionDiscoveriesRequest `protobuf:"bytes,101,opt,name=empyrion_discoveries,json=empyrionDiscoveries,proto3,oneof"`
}

type ControllerEnvelope_EmpyrionPlayerSummary struct {
	EmpyrionPlayerSummary *EmpyrionPlayerSummaryRequest `protobuf:"bytes,102,opt,name=empyrion_player_summary,json=empyrionPlayerSummary,proto3,oneof"`
}

type ControllerEnvelope_RegionScan struct {
	RegionScan *RegionScanRequest `protobuf:"bytes,110,opt,name=region_scan,json=regionScan,proto3,oneof"`
}

type ControllerEnvelope_RegionHeal struct {
	RegionHeal *RegionHealRequest `protobuf:"bytes,111,opt,name=region_heal,json=regionHeal,proto3,oneof"`
}

type ControllerEnvelope_InstanceRenderConfig struct {
	InstanceRenderConfig *InstanceRenderConfigRequest `protobuf:"bytes,112,opt,name=instance_render_config,json=instanceRenderConfig,proto3,oneof"`
}

type ControllerEnvelope_SeedMods struct {
	SeedMods *SeedModsRequest `protobuf:"bytes,113,opt,name=seed_mods,json=seedMods,proto3,oneof"`
}

type ControllerEnvelope_UpdateCheck struct {
	UpdateCheck *UpdateCheckRequest `protobuf:"bytes,114,opt,name=update_check,json=updateCheck,proto3,oneof"`
}

func (*ControllerEnvelope_Hello) isControllerEnvelope_Payload() {}

func (*ControllerEnvelope_Ping) isControllerEnvelope_Payload() {}

func (*ControllerEnvelope_Exec) isControllerEnvelope_Payload() {}

func (*ControllerEnvelope_InstanceCreate) isControllerEnvelope_Payload() {}

func (*ControllerEnvelope_InstanceStart) isControllerEnvelope_Payload() {}

func (*ControllerEnvelope_InstanceStop) isControllerEnvelope_Payload() {}

func (*ControllerEnvelope_InstanceDelete) isControllerEnvelope_Payload() {}

func (*ControllerEnvelope_Rcon) isControllerEnvelope_Payload() {}

func (*ControllerEnvelope_FsList) isControllerEnvelope_Payload() {}

func (*ControllerEnvelope_FsRead) isControllerEnvelope_Payload() {}

func (*ControllerEnvelope_FsWrite) isControllerEnvelope_Payload() {}

func (*ControllerEnvelope_FsDelete) isControllerEnvelope_Payload() {}

func (*ControllerEnvelope_FsSymlink) isControllerEnvelope_Payload() {}

func (*ControllerEnvelope_FsExtract) isControllerEnvelope_Payload() {}

func (*ControllerEnvelope_FsCompress) isControllerEnvelope_Payload() {}

func (*ControllerEnvelope_FsRename) isControllerEnvelope_Payload() {}

func (*ControllerEnvelope_FsWriteChunk) isControllerEnvelope_Payload() {}

func (*ControllerEnvelope_ArkSaveRestore) isControllerEnvelope_Payload() {}

func (*ControllerEnvelope_DayzModInstall) isControllerEnvelope_Payload() {}

func (*ControllerEnvelope_DayzModUninstall) isControllerEnvelope_Payload() {}

func (*ControllerEnvelope_Update) isControllerEnvelope_Payload() {}

func (*ControllerEnvelope_Backup) isControllerEnvelope_Payload() {}

func (*ControllerEnvelope_Restore) isControllerEnvelope_Payload() {}

func (*ControllerEnvelope_BackupListEntries) isControllerEnvelope_Payload() {}

func (*ControllerEnvelope_BackupReadFile) isControllerEnvelope_Payload() {}

func (*ControllerEnvelope_EmpyrionScenarioInstall) isControllerEnvelope_Payload() {}

func (*ControllerEnvelope_EmpyrionDiscoveries) isControllerEnvelope_Payload() {}

func (*ControllerEnvelope_EmpyrionPlayerSummary) isControllerEnvelope_Payload() {}

func (*ControllerEnvelope_RegionScan) isControllerEnvelope_Payload() {}

func (*ControllerEnvelope_RegionHeal) isControllerEnvelope_Payload() {}

func (*ControllerEnvelope_InstanceRenderConfig) isControllerEnvelope_Payload() {}

func (*ControllerEnvelope_SeedMods) isControllerEnvelope_Payload() {}

func (*ControllerEnvelope_UpdateCheck) isControllerEnvelope_Payload() {}

// AgentEnvelope — messages from Target to Controller.
type AgentEnvelope struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	CorrelationId string                 `protobuf:"bytes,1,opt,name=correlation_id,json=correlationId,proto3" json:"correlation_id,omitempty"`
	SentAt        *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=sent_at,json=sentAt,proto3" json:"sent_at,omitempty"`
	// Types that are valid to be assigned to Payload:
	//
	//	*AgentEnvelope_Hello
	//	*AgentEnvelope_Heartbeat
	//	*AgentEnvelope_Pong
	//	*AgentEnvelope_Result
	//	*AgentEnvelope_InstanceState
	//	*AgentEnvelope_AppState
	//	*AgentEnvelope_Log
	//	*AgentEnvelope_Player
	//	*AgentEnvelope_RconResult
	//	*AgentEnvelope_FsListResult
	//	*AgentEnvelope_FsReadResult
	//	*AgentEnvelope_FsWriteResult
	//	*AgentEnvelope_FsDeleteResult
	//	*AgentEnvelope_FsSymlinkResult
	//	*AgentEnvelope_FsExtractResult
	//	*AgentEnvelope_FsCompressResult
	//	*AgentEnvelope_FsRenameResult
	//	*AgentEnvelope_FsWriteChunkResult
	//	*AgentEnvelope_ArkSaveRestoreResult
	//	*AgentEnvelope_DayzModInstallResult
	//	*AgentEnvelope_DayzModUninstallResult
	//	*AgentEnvelope_UpdateResult
	//	*AgentEnvelope_BackupResult
	//	*AgentEnvelope_RestoreResult
	//	*AgentEnvelope_BackupListEntriesResult
	//	*AgentEnvelope_BackupReadFileResult
	//	*AgentEnvelope_InstanceStats
	//	*AgentEnvelope_EmpyrionScenarioInstallResult
	//	*AgentEnvelope_EmpyrionDiscoveriesResult
	//	*AgentEnvelope_EmpyrionPlayerSummaryResult
	//	*AgentEnvelope_RegionScanResult
	//	*AgentEnvelope_RegionHealResult
	//	*AgentEnvelope_InstanceRenderConfigResult
	//	*AgentEnvelope_SeedModsResult
	//	*AgentEnvelope_UpdateCheckResult
	Payload       isAgentEnvelope_Payload `protobuf_oneof:"payload"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

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

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

func (*AgentEnvelope) ProtoMessage() {}

func (x *AgentEnvelope) ProtoReflect() protoreflect.Message {
	mi := &file_panel_v1_agent_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 AgentEnvelope.ProtoReflect.Descriptor instead.
func (*AgentEnvelope) Descriptor() ([]byte, []int) {
	return file_panel_v1_agent_proto_rawDescGZIP(), []int{1}
}

func (x *AgentEnvelope) GetCorrelationId() string {
	if x != nil {
		return x.CorrelationId
	}
	return ""
}

func (x *AgentEnvelope) GetSentAt() *timestamppb.Timestamp {
	if x != nil {
		return x.SentAt
	}
	return nil
}

func (x *AgentEnvelope) GetPayload() isAgentEnvelope_Payload {
	if x != nil {
		return x.Payload
	}
	return nil
}

func (x *AgentEnvelope) GetHello() *AgentHello {
	if x != nil {
		if x, ok := x.Payload.(*AgentEnvelope_Hello); ok {
			return x.Hello
		}
	}
	return nil
}

func (x *AgentEnvelope) GetHeartbeat() *Heartbeat {
	if x != nil {
		if x, ok := x.Payload.(*AgentEnvelope_Heartbeat); ok {
			return x.Heartbeat
		}
	}
	return nil
}

func (x *AgentEnvelope) GetPong() *Pong {
	if x != nil {
		if x, ok := x.Payload.(*AgentEnvelope_Pong); ok {
			return x.Pong
		}
	}
	return nil
}

func (x *AgentEnvelope) GetResult() *CommandResult {
	if x != nil {
		if x, ok := x.Payload.(*AgentEnvelope_Result); ok {
			return x.Result
		}
	}
	return nil
}

func (x *AgentEnvelope) GetInstanceState() *InstanceStateUpdate {
	if x != nil {
		if x, ok := x.Payload.(*AgentEnvelope_InstanceState); ok {
			return x.InstanceState
		}
	}
	return nil
}

func (x *AgentEnvelope) GetAppState() *AppStateUpdate {
	if x != nil {
		if x, ok := x.Payload.(*AgentEnvelope_AppState); ok {
			return x.AppState
		}
	}
	return nil
}

func (x *AgentEnvelope) GetLog() *LogLine {
	if x != nil {
		if x, ok := x.Payload.(*AgentEnvelope_Log); ok {
			return x.Log
		}
	}
	return nil
}

func (x *AgentEnvelope) GetPlayer() *PlayerEvent {
	if x != nil {
		if x, ok := x.Payload.(*AgentEnvelope_Player); ok {
			return x.Player
		}
	}
	return nil
}

func (x *AgentEnvelope) GetRconResult() *RCONResult {
	if x != nil {
		if x, ok := x.Payload.(*AgentEnvelope_RconResult); ok {
			return x.RconResult
		}
	}
	return nil
}

func (x *AgentEnvelope) GetFsListResult() *FsListResult {
	if x != nil {
		if x, ok := x.Payload.(*AgentEnvelope_FsListResult); ok {
			return x.FsListResult
		}
	}
	return nil
}

func (x *AgentEnvelope) GetFsReadResult() *FsReadResult {
	if x != nil {
		if x, ok := x.Payload.(*AgentEnvelope_FsReadResult); ok {
			return x.FsReadResult
		}
	}
	return nil
}

func (x *AgentEnvelope) GetFsWriteResult() *FsWriteResult {
	if x != nil {
		if x, ok := x.Payload.(*AgentEnvelope_FsWriteResult); ok {
			return x.FsWriteResult
		}
	}
	return nil
}

func (x *AgentEnvelope) GetFsDeleteResult() *FsDeleteResult {
	if x != nil {
		if x, ok := x.Payload.(*AgentEnvelope_FsDeleteResult); ok {
			return x.FsDeleteResult
		}
	}
	return nil
}

func (x *AgentEnvelope) GetFsSymlinkResult() *FsSymlinkResult {
	if x != nil {
		if x, ok := x.Payload.(*AgentEnvelope_FsSymlinkResult); ok {
			return x.FsSymlinkResult
		}
	}
	return nil
}

func (x *AgentEnvelope) GetFsExtractResult() *FsExtractResult {
	if x != nil {
		if x, ok := x.Payload.(*AgentEnvelope_FsExtractResult); ok {
			return x.FsExtractResult
		}
	}
	return nil
}

func (x *AgentEnvelope) GetFsCompressResult() *FsCompressResult {
	if x != nil {
		if x, ok := x.Payload.(*AgentEnvelope_FsCompressResult); ok {
			return x.FsCompressResult
		}
	}
	return nil
}

func (x *AgentEnvelope) GetFsRenameResult() *FsRenameResult {
	if x != nil {
		if x, ok := x.Payload.(*AgentEnvelope_FsRenameResult); ok {
			return x.FsRenameResult
		}
	}
	return nil
}

func (x *AgentEnvelope) GetFsWriteChunkResult() *FsWriteChunkResult {
	if x != nil {
		if x, ok := x.Payload.(*AgentEnvelope_FsWriteChunkResult); ok {
			return x.FsWriteChunkResult
		}
	}
	return nil
}

func (x *AgentEnvelope) GetArkSaveRestoreResult() *ArkSaveRestoreResult {
	if x != nil {
		if x, ok := x.Payload.(*AgentEnvelope_ArkSaveRestoreResult); ok {
			return x.ArkSaveRestoreResult
		}
	}
	return nil
}

func (x *AgentEnvelope) GetDayzModInstallResult() *DayzModInstallResult {
	if x != nil {
		if x, ok := x.Payload.(*AgentEnvelope_DayzModInstallResult); ok {
			return x.DayzModInstallResult
		}
	}
	return nil
}

func (x *AgentEnvelope) GetDayzModUninstallResult() *DayzModUninstallResult {
	if x != nil {
		if x, ok := x.Payload.(*AgentEnvelope_DayzModUninstallResult); ok {
			return x.DayzModUninstallResult
		}
	}
	return nil
}

func (x *AgentEnvelope) GetUpdateResult() *UpdateResult {
	if x != nil {
		if x, ok := x.Payload.(*AgentEnvelope_UpdateResult); ok {
			return x.UpdateResult
		}
	}
	return nil
}

func (x *AgentEnvelope) GetBackupResult() *BackupResult {
	if x != nil {
		if x, ok := x.Payload.(*AgentEnvelope_BackupResult); ok {
			return x.BackupResult
		}
	}
	return nil
}

func (x *AgentEnvelope) GetRestoreResult() *RestoreResult {
	if x != nil {
		if x, ok := x.Payload.(*AgentEnvelope_RestoreResult); ok {
			return x.RestoreResult
		}
	}
	return nil
}

func (x *AgentEnvelope) GetBackupListEntriesResult() *BackupListEntriesResult {
	if x != nil {
		if x, ok := x.Payload.(*AgentEnvelope_BackupListEntriesResult); ok {
			return x.BackupListEntriesResult
		}
	}
	return nil
}

func (x *AgentEnvelope) GetBackupReadFileResult() *BackupReadFileResult {
	if x != nil {
		if x, ok := x.Payload.(*AgentEnvelope_BackupReadFileResult); ok {
			return x.BackupReadFileResult
		}
	}
	return nil
}

func (x *AgentEnvelope) GetInstanceStats() *InstanceStatsUpdate {
	if x != nil {
		if x, ok := x.Payload.(*AgentEnvelope_InstanceStats); ok {
			return x.InstanceStats
		}
	}
	return nil
}

func (x *AgentEnvelope) GetEmpyrionScenarioInstallResult() *EmpyrionScenarioInstallResult {
	if x != nil {
		if x, ok := x.Payload.(*AgentEnvelope_EmpyrionScenarioInstallResult); ok {
			return x.EmpyrionScenarioInstallResult
		}
	}
	return nil
}

func (x *AgentEnvelope) GetEmpyrionDiscoveriesResult() *EmpyrionDiscoveriesResult {
	if x != nil {
		if x, ok := x.Payload.(*AgentEnvelope_EmpyrionDiscoveriesResult); ok {
			return x.EmpyrionDiscoveriesResult
		}
	}
	return nil
}

func (x *AgentEnvelope) GetEmpyrionPlayerSummaryResult() *EmpyrionPlayerSummaryResult {
	if x != nil {
		if x, ok := x.Payload.(*AgentEnvelope_EmpyrionPlayerSummaryResult); ok {
			return x.EmpyrionPlayerSummaryResult
		}
	}
	return nil
}

func (x *AgentEnvelope) GetRegionScanResult() *RegionScanResult {
	if x != nil {
		if x, ok := x.Payload.(*AgentEnvelope_RegionScanResult); ok {
			return x.RegionScanResult
		}
	}
	return nil
}

func (x *AgentEnvelope) GetRegionHealResult() *RegionHealResult {
	if x != nil {
		if x, ok := x.Payload.(*AgentEnvelope_RegionHealResult); ok {
			return x.RegionHealResult
		}
	}
	return nil
}

func (x *AgentEnvelope) GetInstanceRenderConfigResult() *InstanceRenderConfigResult {
	if x != nil {
		if x, ok := x.Payload.(*AgentEnvelope_InstanceRenderConfigResult); ok {
			return x.InstanceRenderConfigResult
		}
	}
	return nil
}

func (x *AgentEnvelope) GetSeedModsResult() *SeedModsResult {
	if x != nil {
		if x, ok := x.Payload.(*AgentEnvelope_SeedModsResult); ok {
			return x.SeedModsResult
		}
	}
	return nil
}

func (x *AgentEnvelope) GetUpdateCheckResult() *UpdateCheckResult {
	if x != nil {
		if x, ok := x.Payload.(*AgentEnvelope_UpdateCheckResult); ok {
			return x.UpdateCheckResult
		}
	}
	return nil
}

type isAgentEnvelope_Payload interface {
	isAgentEnvelope_Payload()
}

type AgentEnvelope_Hello struct {
	Hello *AgentHello `protobuf:"bytes,10,opt,name=hello,proto3,oneof"`
}

type AgentEnvelope_Heartbeat struct {
	Heartbeat *Heartbeat `protobuf:"bytes,11,opt,name=heartbeat,proto3,oneof"`
}

type AgentEnvelope_Pong struct {
	Pong *Pong `protobuf:"bytes,12,opt,name=pong,proto3,oneof"`
}

type AgentEnvelope_Result struct {
	Result *CommandResult `protobuf:"bytes,20,opt,name=result,proto3,oneof"`
}

type AgentEnvelope_InstanceState struct {
	InstanceState *InstanceStateUpdate `protobuf:"bytes,30,opt,name=instance_state,json=instanceState,proto3,oneof"`
}

type AgentEnvelope_AppState struct {
	AppState *AppStateUpdate `protobuf:"bytes,31,opt,name=app_state,json=appState,proto3,oneof"`
}

type AgentEnvelope_Log struct {
	Log *LogLine `protobuf:"bytes,32,opt,name=log,proto3,oneof"`
}

type AgentEnvelope_Player struct {
	Player *PlayerEvent `protobuf:"bytes,33,opt,name=player,proto3,oneof"`
}

type AgentEnvelope_RconResult struct {
	RconResult *RCONResult `protobuf:"bytes,40,opt,name=rcon_result,json=rconResult,proto3,oneof"`
}

type AgentEnvelope_FsListResult struct {
	FsListResult *FsListResult `protobuf:"bytes,50,opt,name=fs_list_result,json=fsListResult,proto3,oneof"`
}

type AgentEnvelope_FsReadResult struct {
	FsReadResult *FsReadResult `protobuf:"bytes,51,opt,name=fs_read_result,json=fsReadResult,proto3,oneof"`
}

type AgentEnvelope_FsWriteResult struct {
	FsWriteResult *FsWriteResult `protobuf:"bytes,52,opt,name=fs_write_result,json=fsWriteResult,proto3,oneof"`
}

type AgentEnvelope_FsDeleteResult struct {
	FsDeleteResult *FsDeleteResult `protobuf:"bytes,53,opt,name=fs_delete_result,json=fsDeleteResult,proto3,oneof"`
}

type AgentEnvelope_FsSymlinkResult struct {
	FsSymlinkResult *FsSymlinkResult `protobuf:"bytes,54,opt,name=fs_symlink_result,json=fsSymlinkResult,proto3,oneof"`
}

type AgentEnvelope_FsExtractResult struct {
	FsExtractResult *FsExtractResult `protobuf:"bytes,55,opt,name=fs_extract_result,json=fsExtractResult,proto3,oneof"`
}

type AgentEnvelope_FsCompressResult struct {
	FsCompressResult *FsCompressResult `protobuf:"bytes,56,opt,name=fs_compress_result,json=fsCompressResult,proto3,oneof"`
}

type AgentEnvelope_FsRenameResult struct {
	FsRenameResult *FsRenameResult `protobuf:"bytes,57,opt,name=fs_rename_result,json=fsRenameResult,proto3,oneof"`
}

type AgentEnvelope_FsWriteChunkResult struct {
	FsWriteChunkResult *FsWriteChunkResult `protobuf:"bytes,58,opt,name=fs_write_chunk_result,json=fsWriteChunkResult,proto3,oneof"`
}

type AgentEnvelope_ArkSaveRestoreResult struct {
	ArkSaveRestoreResult *ArkSaveRestoreResult `protobuf:"bytes,59,opt,name=ark_save_restore_result,json=arkSaveRestoreResult,proto3,oneof"`
}

type AgentEnvelope_DayzModInstallResult struct {
	DayzModInstallResult *DayzModInstallResult `protobuf:"bytes,90,opt,name=dayz_mod_install_result,json=dayzModInstallResult,proto3,oneof"`
}

type AgentEnvelope_DayzModUninstallResult struct {
	DayzModUninstallResult *DayzModUninstallResult `protobuf:"bytes,91,opt,name=dayz_mod_uninstall_result,json=dayzModUninstallResult,proto3,oneof"`
}

type AgentEnvelope_UpdateResult struct {
	UpdateResult *UpdateResult `protobuf:"bytes,60,opt,name=update_result,json=updateResult,proto3,oneof"`
}

type AgentEnvelope_BackupResult struct {
	BackupResult *BackupResult `protobuf:"bytes,70,opt,name=backup_result,json=backupResult,proto3,oneof"`
}

type AgentEnvelope_RestoreResult struct {
	RestoreResult *RestoreResult `protobuf:"bytes,71,opt,name=restore_result,json=restoreResult,proto3,oneof"`
}

type AgentEnvelope_BackupListEntriesResult struct {
	BackupListEntriesResult *BackupListEntriesResult `protobuf:"bytes,72,opt,name=backup_list_entries_result,json=backupListEntriesResult,proto3,oneof"`
}

type AgentEnvelope_BackupReadFileResult struct {
	BackupReadFileResult *BackupReadFileResult `protobuf:"bytes,73,opt,name=backup_read_file_result,json=backupReadFileResult,proto3,oneof"`
}

type AgentEnvelope_InstanceStats struct {
	InstanceStats *InstanceStatsUpdate `protobuf:"bytes,80,opt,name=instance_stats,json=instanceStats,proto3,oneof"`
}

type AgentEnvelope_EmpyrionScenarioInstallResult struct {
	EmpyrionScenarioInstallResult *EmpyrionScenarioInstallResult `protobuf:"bytes,100,opt,name=empyrion_scenario_install_result,json=empyrionScenarioInstallResult,proto3,oneof"`
}

type AgentEnvelope_EmpyrionDiscoveriesResult struct {
	EmpyrionDiscoveriesResult *EmpyrionDiscoveriesResult `protobuf:"bytes,101,opt,name=empyrion_discoveries_result,json=empyrionDiscoveriesResult,proto3,oneof"`
}

type AgentEnvelope_EmpyrionPlayerSummaryResult struct {
	EmpyrionPlayerSummaryResult *EmpyrionPlayerSummaryResult `protobuf:"bytes,102,opt,name=empyrion_player_summary_result,json=empyrionPlayerSummaryResult,proto3,oneof"`
}

type AgentEnvelope_RegionScanResult struct {
	RegionScanResult *RegionScanResult `protobuf:"bytes,110,opt,name=region_scan_result,json=regionScanResult,proto3,oneof"`
}

type AgentEnvelope_RegionHealResult struct {
	RegionHealResult *RegionHealResult `protobuf:"bytes,111,opt,name=region_heal_result,json=regionHealResult,proto3,oneof"`
}

type AgentEnvelope_InstanceRenderConfigResult struct {
	InstanceRenderConfigResult *InstanceRenderConfigResult `protobuf:"bytes,112,opt,name=instance_render_config_result,json=instanceRenderConfigResult,proto3,oneof"`
}

type AgentEnvelope_SeedModsResult struct {
	SeedModsResult *SeedModsResult `protobuf:"bytes,113,opt,name=seed_mods_result,json=seedModsResult,proto3,oneof"`
}

type AgentEnvelope_UpdateCheckResult struct {
	UpdateCheckResult *UpdateCheckResult `protobuf:"bytes,114,opt,name=update_check_result,json=updateCheckResult,proto3,oneof"`
}

func (*AgentEnvelope_Hello) isAgentEnvelope_Payload() {}

func (*AgentEnvelope_Heartbeat) isAgentEnvelope_Payload() {}

func (*AgentEnvelope_Pong) isAgentEnvelope_Payload() {}

func (*AgentEnvelope_Result) isAgentEnvelope_Payload() {}

func (*AgentEnvelope_InstanceState) isAgentEnvelope_Payload() {}

func (*AgentEnvelope_AppState) isAgentEnvelope_Payload() {}

func (*AgentEnvelope_Log) isAgentEnvelope_Payload() {}

func (*AgentEnvelope_Player) isAgentEnvelope_Payload() {}

func (*AgentEnvelope_RconResult) isAgentEnvelope_Payload() {}

func (*AgentEnvelope_FsListResult) isAgentEnvelope_Payload() {}

func (*AgentEnvelope_FsReadResult) isAgentEnvelope_Payload() {}

func (*AgentEnvelope_FsWriteResult) isAgentEnvelope_Payload() {}

func (*AgentEnvelope_FsDeleteResult) isAgentEnvelope_Payload() {}

func (*AgentEnvelope_FsSymlinkResult) isAgentEnvelope_Payload() {}

func (*AgentEnvelope_FsExtractResult) isAgentEnvelope_Payload() {}

func (*AgentEnvelope_FsCompressResult) isAgentEnvelope_Payload() {}

func (*AgentEnvelope_FsRenameResult) isAgentEnvelope_Payload() {}

func (*AgentEnvelope_FsWriteChunkResult) isAgentEnvelope_Payload() {}

func (*AgentEnvelope_ArkSaveRestoreResult) isAgentEnvelope_Payload() {}

func (*AgentEnvelope_DayzModInstallResult) isAgentEnvelope_Payload() {}

func (*AgentEnvelope_DayzModUninstallResult) isAgentEnvelope_Payload() {}

func (*AgentEnvelope_UpdateResult) isAgentEnvelope_Payload() {}

func (*AgentEnvelope_BackupResult) isAgentEnvelope_Payload() {}

func (*AgentEnvelope_RestoreResult) isAgentEnvelope_Payload() {}

func (*AgentEnvelope_BackupListEntriesResult) isAgentEnvelope_Payload() {}

func (*AgentEnvelope_BackupReadFileResult) isAgentEnvelope_Payload() {}

func (*AgentEnvelope_InstanceStats) isAgentEnvelope_Payload() {}

func (*AgentEnvelope_EmpyrionScenarioInstallResult) isAgentEnvelope_Payload() {}

func (*AgentEnvelope_EmpyrionDiscoveriesResult) isAgentEnvelope_Payload() {}

func (*AgentEnvelope_EmpyrionPlayerSummaryResult) isAgentEnvelope_Payload() {}

func (*AgentEnvelope_RegionScanResult) isAgentEnvelope_Payload() {}

func (*AgentEnvelope_RegionHealResult) isAgentEnvelope_Payload() {}

func (*AgentEnvelope_InstanceRenderConfigResult) isAgentEnvelope_Payload() {}

func (*AgentEnvelope_SeedModsResult) isAgentEnvelope_Payload() {}

func (*AgentEnvelope_UpdateCheckResult) isAgentEnvelope_Payload() {}

type AgentHello struct {
	state             protoimpl.MessageState `protogen:"open.v1"`
	AgentId           string                 `protobuf:"bytes,1,opt,name=agent_id,json=agentId,proto3" json:"agent_id,omitempty"`
	AgentVersion      string                 `protobuf:"bytes,2,opt,name=agent_version,json=agentVersion,proto3" json:"agent_version,omitempty"`
	HostOs            string                 `protobuf:"bytes,3,opt,name=host_os,json=hostOs,proto3" json:"host_os,omitempty"`       // "linux", "windows"
	HostArch          string                 `protobuf:"bytes,4,opt,name=host_arch,json=hostArch,proto3" json:"host_arch,omitempty"` // "amd64", "arm64"
	Hostname          string                 `protobuf:"bytes,5,opt,name=hostname,proto3" json:"hostname,omitempty"`
	SupportedRuntimes []string               `protobuf:"bytes,6,rep,name=supported_runtimes,json=supportedRuntimes,proto3" json:"supported_runtimes,omitempty"` // "docker", "host"
	Modules           []*ModuleSummary       `protobuf:"bytes,7,rep,name=modules,proto3" json:"modules,omitempty"`
	unknownFields     protoimpl.UnknownFields
	sizeCache         protoimpl.SizeCache
}

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

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

func (*AgentHello) ProtoMessage() {}

func (x *AgentHello) ProtoReflect() protoreflect.Message {
	mi := &file_panel_v1_agent_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 AgentHello.ProtoReflect.Descriptor instead.
func (*AgentHello) Descriptor() ([]byte, []int) {
	return file_panel_v1_agent_proto_rawDescGZIP(), []int{2}
}

func (x *AgentHello) GetAgentId() string {
	if x != nil {
		return x.AgentId
	}
	return ""
}

func (x *AgentHello) GetAgentVersion() string {
	if x != nil {
		return x.AgentVersion
	}
	return ""
}

func (x *AgentHello) GetHostOs() string {
	if x != nil {
		return x.HostOs
	}
	return ""
}

func (x *AgentHello) GetHostArch() string {
	if x != nil {
		return x.HostArch
	}
	return ""
}

func (x *AgentHello) GetHostname() string {
	if x != nil {
		return x.Hostname
	}
	return ""
}

func (x *AgentHello) GetSupportedRuntimes() []string {
	if x != nil {
		return x.SupportedRuntimes
	}
	return nil
}

func (x *AgentHello) GetModules() []*ModuleSummary {
	if x != nil {
		return x.Modules
	}
	return nil
}

// ModuleSummary is what an agent advertises about one locally-loaded
// module at handshake time. The controller aggregates these across all
// agents so the dashboard can render a "known modules" picker without
// needing direct filesystem access to each agent's modules/ dir.
type ModuleSummary struct {
	state           protoimpl.MessageState         `protogen:"open.v1"`
	Id              string                         `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
	Name            string                         `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
	Version         string                         `protobuf:"bytes,3,opt,name=version,proto3" json:"version,omitempty"`
	SupportedModes  []string                       `protobuf:"bytes,4,rep,name=supported_modes,json=supportedModes,proto3" json:"supported_modes,omitempty"`
	UpdateProviders []*ModuleUpdateProviderSummary `protobuf:"bytes,5,rep,name=update_providers,json=updateProviders,proto3" json:"update_providers,omitempty"`
	HasRcon         bool                           `protobuf:"varint,6,opt,name=has_rcon,json=hasRcon,proto3" json:"has_rcon,omitempty"`
	Authors         []string                       `protobuf:"bytes,7,rep,name=authors,proto3" json:"authors,omitempty"`
	unknownFields   protoimpl.UnknownFields
	sizeCache       protoimpl.SizeCache
}

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

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

func (*ModuleSummary) ProtoMessage() {}

func (x *ModuleSummary) ProtoReflect() protoreflect.Message {
	mi := &file_panel_v1_agent_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 ModuleSummary.ProtoReflect.Descriptor instead.
func (*ModuleSummary) Descriptor() ([]byte, []int) {
	return file_panel_v1_agent_proto_rawDescGZIP(), []int{3}
}

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

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

func (x *ModuleSummary) GetVersion() string {
	if x != nil {
		return x.Version
	}
	return ""
}

func (x *ModuleSummary) GetSupportedModes() []string {
	if x != nil {
		return x.SupportedModes
	}
	return nil
}

func (x *ModuleSummary) GetUpdateProviders() []*ModuleUpdateProviderSummary {
	if x != nil {
		return x.UpdateProviders
	}
	return nil
}

func (x *ModuleSummary) GetHasRcon() bool {
	if x != nil {
		return x.HasRcon
	}
	return false
}

func (x *ModuleSummary) GetAuthors() []string {
	if x != nil {
		return x.Authors
	}
	return nil
}

type ModuleUpdateProviderSummary struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	Id    string                 `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
	Kind  string                 `protobuf:"bytes,2,opt,name=kind,proto3" json:"kind,omitempty"` // "steamcmd" | "github" | "direct"
	// True when the provider sets `requires_steam_login: true` on the
	// manifest (DayZ, Arma). Controller uses this to decide whether to
	// pop the Steam-login modal before forwarding an UpdateRequest.
	RequiresSteamLogin bool `protobuf:"varint,3,opt,name=requires_steam_login,json=requiresSteamLogin,proto3" json:"requires_steam_login,omitempty"`
	unknownFields      protoimpl.UnknownFields
	sizeCache          protoimpl.SizeCache
}

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

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

func (*ModuleUpdateProviderSummary) ProtoMessage() {}

func (x *ModuleUpdateProviderSummary) ProtoReflect() protoreflect.Message {
	mi := &file_panel_v1_agent_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 ModuleUpdateProviderSummary.ProtoReflect.Descriptor instead.
func (*ModuleUpdateProviderSummary) Descriptor() ([]byte, []int) {
	return file_panel_v1_agent_proto_rawDescGZIP(), []int{4}
}

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

func (x *ModuleUpdateProviderSummary) GetKind() string {
	if x != nil {
		return x.Kind
	}
	return ""
}

func (x *ModuleUpdateProviderSummary) GetRequiresSteamLogin() bool {
	if x != nil {
		return x.RequiresSteamLogin
	}
	return false
}

type ControllerHello struct {
	state             protoimpl.MessageState `protogen:"open.v1"`
	ControllerVersion string                 `protobuf:"bytes,1,opt,name=controller_version,json=controllerVersion,proto3" json:"controller_version,omitempty"`
	ServerTime        *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=server_time,json=serverTime,proto3" json:"server_time,omitempty"`
	unknownFields     protoimpl.UnknownFields
	sizeCache         protoimpl.SizeCache
}

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

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

func (*ControllerHello) ProtoMessage() {}

func (x *ControllerHello) ProtoReflect() protoreflect.Message {
	mi := &file_panel_v1_agent_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 ControllerHello.ProtoReflect.Descriptor instead.
func (*ControllerHello) Descriptor() ([]byte, []int) {
	return file_panel_v1_agent_proto_rawDescGZIP(), []int{5}
}

func (x *ControllerHello) GetControllerVersion() string {
	if x != nil {
		return x.ControllerVersion
	}
	return ""
}

func (x *ControllerHello) GetServerTime() *timestamppb.Timestamp {
	if x != nil {
		return x.ServerTime
	}
	return nil
}

type Heartbeat struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	At            *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=at,proto3" json:"at,omitempty"`
	CpuPercent    float64                `protobuf:"fixed64,2,opt,name=cpu_percent,json=cpuPercent,proto3" json:"cpu_percent,omitempty"`
	MemUsedBytes  uint64                 `protobuf:"varint,3,opt,name=mem_used_bytes,json=memUsedBytes,proto3" json:"mem_used_bytes,omitempty"`
	MemTotalBytes uint64                 `protobuf:"varint,4,opt,name=mem_total_bytes,json=memTotalBytes,proto3" json:"mem_total_bytes,omitempty"`
	InstanceCount uint32                 `protobuf:"varint,5,opt,name=instance_count,json=instanceCount,proto3" json:"instance_count,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

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

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

func (*Heartbeat) ProtoMessage() {}

func (x *Heartbeat) ProtoReflect() protoreflect.Message {
	mi := &file_panel_v1_agent_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 Heartbeat.ProtoReflect.Descriptor instead.
func (*Heartbeat) Descriptor() ([]byte, []int) {
	return file_panel_v1_agent_proto_rawDescGZIP(), []int{6}
}

func (x *Heartbeat) GetAt() *timestamppb.Timestamp {
	if x != nil {
		return x.At
	}
	return nil
}

func (x *Heartbeat) GetCpuPercent() float64 {
	if x != nil {
		return x.CpuPercent
	}
	return 0
}

func (x *Heartbeat) GetMemUsedBytes() uint64 {
	if x != nil {
		return x.MemUsedBytes
	}
	return 0
}

func (x *Heartbeat) GetMemTotalBytes() uint64 {
	if x != nil {
		return x.MemTotalBytes
	}
	return 0
}

func (x *Heartbeat) GetInstanceCount() uint32 {
	if x != nil {
		return x.InstanceCount
	}
	return 0
}

type Ping struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	Nonce         string                 `protobuf:"bytes,1,opt,name=nonce,proto3" json:"nonce,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

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

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

func (*Ping) ProtoMessage() {}

func (x *Ping) ProtoReflect() protoreflect.Message {
	mi := &file_panel_v1_agent_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 Ping.ProtoReflect.Descriptor instead.
func (*Ping) Descriptor() ([]byte, []int) {
	return file_panel_v1_agent_proto_rawDescGZIP(), []int{7}
}

func (x *Ping) GetNonce() string {
	if x != nil {
		return x.Nonce
	}
	return ""
}

type Pong struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	Nonce         string                 `protobuf:"bytes,1,opt,name=nonce,proto3" json:"nonce,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

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

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

func (*Pong) ProtoMessage() {}

func (x *Pong) ProtoReflect() protoreflect.Message {
	mi := &file_panel_v1_agent_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 Pong.ProtoReflect.Descriptor instead.
func (*Pong) Descriptor() ([]byte, []int) {
	return file_panel_v1_agent_proto_rawDescGZIP(), []int{8}
}

func (x *Pong) GetNonce() string {
	if x != nil {
		return x.Nonce
	}
	return ""
}

type ExecRequest struct {
	state          protoimpl.MessageState `protogen:"open.v1"`
	InstanceId     string                 `protobuf:"bytes,1,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"` // empty = run on Target host
	Argv           []string               `protobuf:"bytes,2,rep,name=argv,proto3" json:"argv,omitempty"`
	Env            map[string]string      `protobuf:"bytes,3,rep,name=env,proto3" json:"env,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
	WorkingDir     string                 `protobuf:"bytes,4,opt,name=working_dir,json=workingDir,proto3" json:"working_dir,omitempty"`
	TimeoutSeconds uint32                 `protobuf:"varint,5,opt,name=timeout_seconds,json=timeoutSeconds,proto3" json:"timeout_seconds,omitempty"`
	unknownFields  protoimpl.UnknownFields
	sizeCache      protoimpl.SizeCache
}

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

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

func (*ExecRequest) ProtoMessage() {}

func (x *ExecRequest) ProtoReflect() protoreflect.Message {
	mi := &file_panel_v1_agent_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 ExecRequest.ProtoReflect.Descriptor instead.
func (*ExecRequest) Descriptor() ([]byte, []int) {
	return file_panel_v1_agent_proto_rawDescGZIP(), []int{9}
}

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

func (x *ExecRequest) GetArgv() []string {
	if x != nil {
		return x.Argv
	}
	return nil
}

func (x *ExecRequest) GetEnv() map[string]string {
	if x != nil {
		return x.Env
	}
	return nil
}

func (x *ExecRequest) GetWorkingDir() string {
	if x != nil {
		return x.WorkingDir
	}
	return ""
}

func (x *ExecRequest) GetTimeoutSeconds() uint32 {
	if x != nil {
		return x.TimeoutSeconds
	}
	return 0
}

type CommandResult struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	ExitCode      int32                  `protobuf:"varint,1,opt,name=exit_code,json=exitCode,proto3" json:"exit_code,omitempty"`
	Stdout        []byte                 `protobuf:"bytes,2,opt,name=stdout,proto3" json:"stdout,omitempty"`
	Stderr        []byte                 `protobuf:"bytes,3,opt,name=stderr,proto3" json:"stderr,omitempty"`
	Error         *Error                 `protobuf:"bytes,4,opt,name=error,proto3" json:"error,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

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

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

func (*CommandResult) ProtoMessage() {}

func (x *CommandResult) ProtoReflect() protoreflect.Message {
	mi := &file_panel_v1_agent_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 CommandResult.ProtoReflect.Descriptor instead.
func (*CommandResult) Descriptor() ([]byte, []int) {
	return file_panel_v1_agent_proto_rawDescGZIP(), []int{10}
}

func (x *CommandResult) GetExitCode() int32 {
	if x != nil {
		return x.ExitCode
	}
	return 0
}

func (x *CommandResult) GetStdout() []byte {
	if x != nil {
		return x.Stdout
	}
	return nil
}

func (x *CommandResult) GetStderr() []byte {
	if x != nil {
		return x.Stderr
	}
	return nil
}

func (x *CommandResult) GetError() *Error {
	if x != nil {
		return x.Error
	}
	return nil
}

type InstanceCreate struct {
	state        protoimpl.MessageState `protogen:"open.v1"`
	InstanceId   string                 `protobuf:"bytes,1,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"`
	ModuleId     string                 `protobuf:"bytes,2,opt,name=module_id,json=moduleId,proto3" json:"module_id,omitempty"`
	Version      string                 `protobuf:"bytes,3,opt,name=version,proto3" json:"version,omitempty"`
	RunMode      RunMode                `protobuf:"varint,4,opt,name=run_mode,json=runMode,proto3,enum=panel.v1.RunMode" json:"run_mode,omitempty"`
	Limits       *ResourceLimits        `protobuf:"bytes,5,opt,name=limits,proto3" json:"limits,omitempty"`
	ConfigValues map[string]string      `protobuf:"bytes,6,rep,name=config_values,json=configValues,proto3" json:"config_values,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // flattened key/value, module schema-validated
	Ports        []*PortMap             `protobuf:"bytes,7,rep,name=ports,proto3" json:"ports,omitempty"`
	DataPath     string                 `protobuf:"bytes,8,opt,name=data_path,json=dataPath,proto3" json:"data_path,omitempty"`
	// mount_overrides lets the controller swap one of the module's
	// manifest-defined volume mounts at create time. Keyed by container
	// path (matching a volume entry's `container:` field in module.yaml).
	// Value is either a Docker named volume name (no leading slash) or an
	// absolute host path (leading slash = bind mount).
	//
	// Used by the ARK cluster feature to swap an instance's per-instance
	// `panel-<id>-cluster` named volume for a shared `panel-ark-cluster-<id>`
	// volume when the server joins a cluster. Generic enough for future
	// features — any module can benefit from per-instance mount swaps
	// without needing a manifest change.
	MountOverrides map[string]string `protobuf:"bytes,9,rep,name=mount_overrides,json=mountOverrides,proto3" json:"mount_overrides,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
	unknownFields  protoimpl.UnknownFields
	sizeCache      protoimpl.SizeCache
}

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

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

func (*InstanceCreate) ProtoMessage() {}

func (x *InstanceCreate) ProtoReflect() protoreflect.Message {
	mi := &file_panel_v1_agent_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 InstanceCreate.ProtoReflect.Descriptor instead.
func (*InstanceCreate) Descriptor() ([]byte, []int) {
	return file_panel_v1_agent_proto_rawDescGZIP(), []int{11}
}

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

func (x *InstanceCreate) GetModuleId() string {
	if x != nil {
		return x.ModuleId
	}
	return ""
}

func (x *InstanceCreate) GetVersion() string {
	if x != nil {
		return x.Version
	}
	return ""
}

func (x *InstanceCreate) GetRunMode() RunMode {
	if x != nil {
		return x.RunMode
	}
	return RunMode_RUN_MODE_UNSPECIFIED
}

func (x *InstanceCreate) GetLimits() *ResourceLimits {
	if x != nil {
		return x.Limits
	}
	return nil
}

func (x *InstanceCreate) GetConfigValues() map[string]string {
	if x != nil {
		return x.ConfigValues
	}
	return nil
}

func (x *InstanceCreate) GetPorts() []*PortMap {
	if x != nil {
		return x.Ports
	}
	return nil
}

func (x *InstanceCreate) GetDataPath() string {
	if x != nil {
		return x.DataPath
	}
	return ""
}

func (x *InstanceCreate) GetMountOverrides() map[string]string {
	if x != nil {
		return x.MountOverrides
	}
	return nil
}

type InstanceStart struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	InstanceId    string                 `protobuf:"bytes,1,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

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

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

func (*InstanceStart) ProtoMessage() {}

func (x *InstanceStart) ProtoReflect() protoreflect.Message {
	mi := &file_panel_v1_agent_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 InstanceStart.ProtoReflect.Descriptor instead.
func (*InstanceStart) Descriptor() ([]byte, []int) {
	return file_panel_v1_agent_proto_rawDescGZIP(), []int{12}
}

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

type InstanceStop struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	InstanceId    string                 `protobuf:"bytes,1,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"`
	GraceSeconds  uint32                 `protobuf:"varint,2,opt,name=grace_seconds,json=graceSeconds,proto3" json:"grace_seconds,omitempty"`
	Force         bool                   `protobuf:"varint,3,opt,name=force,proto3" json:"force,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

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

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

func (*InstanceStop) ProtoMessage() {}

func (x *InstanceStop) ProtoReflect() protoreflect.Message {
	mi := &file_panel_v1_agent_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 InstanceStop.ProtoReflect.Descriptor instead.
func (*InstanceStop) Descriptor() ([]byte, []int) {
	return file_panel_v1_agent_proto_rawDescGZIP(), []int{13}
}

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

func (x *InstanceStop) GetGraceSeconds() uint32 {
	if x != nil {
		return x.GraceSeconds
	}
	return 0
}

func (x *InstanceStop) GetForce() bool {
	if x != nil {
		return x.Force
	}
	return false
}

// InstanceDelete tears down the instance record. If purge_volumes is
// true, every Docker volume labeled panel.instance_id=<instance_id> is
// removed too; otherwise volumes survive so a subsequent re-create can
// pick up the existing world/save data.
type InstanceDelete struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	InstanceId    string                 `protobuf:"bytes,1,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"`
	GraceSeconds  uint32                 `protobuf:"varint,2,opt,name=grace_seconds,json=graceSeconds,proto3" json:"grace_seconds,omitempty"` // if the container is still running, stop with this grace first
	PurgeVolumes  bool                   `protobuf:"varint,3,opt,name=purge_volumes,json=purgeVolumes,proto3" json:"purge_volumes,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

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

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

func (*InstanceDelete) ProtoMessage() {}

func (x *InstanceDelete) ProtoReflect() protoreflect.Message {
	mi := &file_panel_v1_agent_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 InstanceDelete.ProtoReflect.Descriptor instead.
func (*InstanceDelete) Descriptor() ([]byte, []int) {
	return file_panel_v1_agent_proto_rawDescGZIP(), []int{14}
}

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

func (x *InstanceDelete) GetGraceSeconds() uint32 {
	if x != nil {
		return x.GraceSeconds
	}
	return 0
}

func (x *InstanceDelete) GetPurgeVolumes() bool {
	if x != nil {
		return x.PurgeVolumes
	}
	return false
}

type InstanceStateUpdate struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	InstanceId    string                 `protobuf:"bytes,1,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"`
	Status        InstanceStatus         `protobuf:"varint,2,opt,name=status,proto3,enum=panel.v1.InstanceStatus" json:"status,omitempty"`
	ExitCode      int32                  `protobuf:"varint,3,opt,name=exit_code,json=exitCode,proto3" json:"exit_code,omitempty"`
	At            *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=at,proto3" json:"at,omitempty"`
	Detail        string                 `protobuf:"bytes,5,opt,name=detail,proto3" json:"detail,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

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

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

func (*InstanceStateUpdate) ProtoMessage() {}

func (x *InstanceStateUpdate) ProtoReflect() protoreflect.Message {
	mi := &file_panel_v1_agent_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 InstanceStateUpdate.ProtoReflect.Descriptor instead.
func (*InstanceStateUpdate) Descriptor() ([]byte, []int) {
	return file_panel_v1_agent_proto_rawDescGZIP(), []int{15}
}

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

func (x *InstanceStateUpdate) GetStatus() InstanceStatus {
	if x != nil {
		return x.Status
	}
	return InstanceStatus_INSTANCE_STATUS_UNSPECIFIED
}

func (x *InstanceStateUpdate) GetExitCode() int32 {
	if x != nil {
		return x.ExitCode
	}
	return 0
}

func (x *InstanceStateUpdate) GetAt() *timestamppb.Timestamp {
	if x != nil {
		return x.At
	}
	return nil
}

func (x *InstanceStateUpdate) GetDetail() string {
	if x != nil {
		return x.Detail
	}
	return ""
}

type AppStateUpdate struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	InstanceId    string                 `protobuf:"bytes,1,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"`
	PlayersOnline int32                  `protobuf:"varint,2,opt,name=players_online,json=playersOnline,proto3" json:"players_online,omitempty"`
	PlayersMax    int32                  `protobuf:"varint,3,opt,name=players_max,json=playersMax,proto3" json:"players_max,omitempty"`
	UptimeSeconds int64                  `protobuf:"varint,4,opt,name=uptime_seconds,json=uptimeSeconds,proto3" json:"uptime_seconds,omitempty"`
	ModuleFields  map[string]string      `protobuf:"bytes,10,rep,name=module_fields,json=moduleFields,proto3" json:"module_fields,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // world_seed, day_number, tps, etc.
	At            *timestamppb.Timestamp `protobuf:"bytes,20,opt,name=at,proto3" json:"at,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

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

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

func (*AppStateUpdate) ProtoMessage() {}

func (x *AppStateUpdate) ProtoReflect() protoreflect.Message {
	mi := &file_panel_v1_agent_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 AppStateUpdate.ProtoReflect.Descriptor instead.
func (*AppStateUpdate) Descriptor() ([]byte, []int) {
	return file_panel_v1_agent_proto_rawDescGZIP(), []int{16}
}

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

func (x *AppStateUpdate) GetPlayersOnline() int32 {
	if x != nil {
		return x.PlayersOnline
	}
	return 0
}

func (x *AppStateUpdate) GetPlayersMax() int32 {
	if x != nil {
		return x.PlayersMax
	}
	return 0
}

func (x *AppStateUpdate) GetUptimeSeconds() int64 {
	if x != nil {
		return x.UptimeSeconds
	}
	return 0
}

func (x *AppStateUpdate) GetModuleFields() map[string]string {
	if x != nil {
		return x.ModuleFields
	}
	return nil
}

func (x *AppStateUpdate) GetAt() *timestamppb.Timestamp {
	if x != nil {
		return x.At
	}
	return nil
}

type LogLine struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	InstanceId    string                 `protobuf:"bytes,1,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"`
	Stream        string                 `protobuf:"bytes,2,opt,name=stream,proto3" json:"stream,omitempty"` // "stdout", "stderr", or a named log file
	At            *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=at,proto3" json:"at,omitempty"`
	Line          string                 `protobuf:"bytes,4,opt,name=line,proto3" json:"line,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

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

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

func (*LogLine) ProtoMessage() {}

func (x *LogLine) ProtoReflect() protoreflect.Message {
	mi := &file_panel_v1_agent_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 LogLine.ProtoReflect.Descriptor instead.
func (*LogLine) Descriptor() ([]byte, []int) {
	return file_panel_v1_agent_proto_rawDescGZIP(), []int{17}
}

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

func (x *LogLine) GetStream() string {
	if x != nil {
		return x.Stream
	}
	return ""
}

func (x *LogLine) GetAt() *timestamppb.Timestamp {
	if x != nil {
		return x.At
	}
	return nil
}

func (x *LogLine) GetLine() string {
	if x != nil {
		return x.Line
	}
	return ""
}

// InstanceStatsUpdate is emitted periodically (default every 10s) by the
// agent's per-instance stats poller. Values come from Docker's stats
// stream API. Kept sparse — enough for UI gauges + future scheduler
// expressions like "cpu_percent > 80 sustained 5m -> notify".
type InstanceStatsUpdate struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	InstanceId    string                 `protobuf:"bytes,1,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"`
	CpuPercent    float64                `protobuf:"fixed64,2,opt,name=cpu_percent,json=cpuPercent,proto3" json:"cpu_percent,omitempty"` // 100 = 1 vCPU saturated
	MemUsedBytes  uint64                 `protobuf:"varint,3,opt,name=mem_used_bytes,json=memUsedBytes,proto3" json:"mem_used_bytes,omitempty"`
	MemLimitBytes uint64                 `protobuf:"varint,4,opt,name=mem_limit_bytes,json=memLimitBytes,proto3" json:"mem_limit_bytes,omitempty"` // 0 if no explicit limit set (then use container's view)
	NetRxBytes    uint64                 `protobuf:"varint,5,opt,name=net_rx_bytes,json=netRxBytes,proto3" json:"net_rx_bytes,omitempty"`          // cumulative since container start
	NetTxBytes    uint64                 `protobuf:"varint,6,opt,name=net_tx_bytes,json=netTxBytes,proto3" json:"net_tx_bytes,omitempty"`
	Pids          uint32                 `protobuf:"varint,7,opt,name=pids,proto3" json:"pids,omitempty"`
	At            *timestamppb.Timestamp `protobuf:"bytes,8,opt,name=at,proto3" json:"at,omitempty"`
	// Host core count (docker OnlineCPUs) so UIs can translate the
	// docker-style cpu_percent (100 = 1 core) into percent-of-host.
	HostCpus      uint32 `protobuf:"varint,9,opt,name=host_cpus,json=hostCpus,proto3" json:"host_cpus,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

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

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

func (*InstanceStatsUpdate) ProtoMessage() {}

func (x *InstanceStatsUpdate) ProtoReflect() protoreflect.Message {
	mi := &file_panel_v1_agent_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 InstanceStatsUpdate.ProtoReflect.Descriptor instead.
func (*InstanceStatsUpdate) Descriptor() ([]byte, []int) {
	return file_panel_v1_agent_proto_rawDescGZIP(), []int{18}
}

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

func (x *InstanceStatsUpdate) GetCpuPercent() float64 {
	if x != nil {
		return x.CpuPercent
	}
	return 0
}

func (x *InstanceStatsUpdate) GetMemUsedBytes() uint64 {
	if x != nil {
		return x.MemUsedBytes
	}
	return 0
}

func (x *InstanceStatsUpdate) GetMemLimitBytes() uint64 {
	if x != nil {
		return x.MemLimitBytes
	}
	return 0
}

func (x *InstanceStatsUpdate) GetNetRxBytes() uint64 {
	if x != nil {
		return x.NetRxBytes
	}
	return 0
}

func (x *InstanceStatsUpdate) GetNetTxBytes() uint64 {
	if x != nil {
		return x.NetTxBytes
	}
	return 0
}

func (x *InstanceStatsUpdate) GetPids() uint32 {
	if x != nil {
		return x.Pids
	}
	return 0
}

func (x *InstanceStatsUpdate) GetAt() *timestamppb.Timestamp {
	if x != nil {
		return x.At
	}
	return nil
}

func (x *InstanceStatsUpdate) GetHostCpus() uint32 {
	if x != nil {
		return x.HostCpus
	}
	return 0
}

type RCONCommand struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	InstanceId    string                 `protobuf:"bytes,1,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"`
	Command       string                 `protobuf:"bytes,2,opt,name=command,proto3" json:"command,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

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

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

func (*RCONCommand) ProtoMessage() {}

func (x *RCONCommand) ProtoReflect() protoreflect.Message {
	mi := &file_panel_v1_agent_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 RCONCommand.ProtoReflect.Descriptor instead.
func (*RCONCommand) Descriptor() ([]byte, []int) {
	return file_panel_v1_agent_proto_rawDescGZIP(), []int{19}
}

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

func (x *RCONCommand) GetCommand() string {
	if x != nil {
		return x.Command
	}
	return ""
}

type RCONResult struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	Output        string                 `protobuf:"bytes,1,opt,name=output,proto3" json:"output,omitempty"`
	Error         string                 `protobuf:"bytes,2,opt,name=error,proto3" json:"error,omitempty"` // empty on success; short machine-readable on failure
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

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

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

func (*RCONResult) ProtoMessage() {}

func (x *RCONResult) ProtoReflect() protoreflect.Message {
	mi := &file_panel_v1_agent_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 RCONResult.ProtoReflect.Descriptor instead.
func (*RCONResult) Descriptor() ([]byte, []int) {
	return file_panel_v1_agent_proto_rawDescGZIP(), []int{20}
}

func (x *RCONResult) GetOutput() string {
	if x != nil {
		return x.Output
	}
	return ""
}

func (x *RCONResult) GetError() string {
	if x != nil {
		return x.Error
	}
	return ""
}

type FsEntry struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	Name          string                 `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` // base name
	Path          string                 `protobuf:"bytes,2,opt,name=path,proto3" json:"path,omitempty"` // path relative to instance data_path
	IsDir         bool                   `protobuf:"varint,3,opt,name=is_dir,json=isDir,proto3" json:"is_dir,omitempty"`
	Size          int64                  `protobuf:"varint,4,opt,name=size,proto3" json:"size,omitempty"` // bytes (for files)
	ModTime       *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=mod_time,json=modTime,proto3" json:"mod_time,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

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

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

func (*FsEntry) ProtoMessage() {}

func (x *FsEntry) ProtoReflect() protoreflect.Message {
	mi := &file_panel_v1_agent_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 FsEntry.ProtoReflect.Descriptor instead.
func (*FsEntry) Descriptor() ([]byte, []int) {
	return file_panel_v1_agent_proto_rawDescGZIP(), []int{21}
}

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

func (x *FsEntry) GetPath() string {
	if x != nil {
		return x.Path
	}
	return ""
}

func (x *FsEntry) GetIsDir() bool {
	if x != nil {
		return x.IsDir
	}
	return false
}

func (x *FsEntry) GetSize() int64 {
	if x != nil {
		return x.Size
	}
	return 0
}

func (x *FsEntry) GetModTime() *timestamppb.Timestamp {
	if x != nil {
		return x.ModTime
	}
	return nil
}

type FsListRequest struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	InstanceId    string                 `protobuf:"bytes,1,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"`
	Path          string                 `protobuf:"bytes,2,opt,name=path,proto3" json:"path,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

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

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

func (*FsListRequest) ProtoMessage() {}

func (x *FsListRequest) ProtoReflect() protoreflect.Message {
	mi := &file_panel_v1_agent_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 FsListRequest.ProtoReflect.Descriptor instead.
func (*FsListRequest) Descriptor() ([]byte, []int) {
	return file_panel_v1_agent_proto_rawDescGZIP(), []int{22}
}

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

func (x *FsListRequest) GetPath() string {
	if x != nil {
		return x.Path
	}
	return ""
}

type FsListResult struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	Entries       []*FsEntry             `protobuf:"bytes,1,rep,name=entries,proto3" json:"entries,omitempty"`
	Path          string                 `protobuf:"bytes,2,opt,name=path,proto3" json:"path,omitempty"`
	Error         string                 `protobuf:"bytes,3,opt,name=error,proto3" json:"error,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

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

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

func (*FsListResult) ProtoMessage() {}

func (x *FsListResult) ProtoReflect() protoreflect.Message {
	mi := &file_panel_v1_agent_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 FsListResult.ProtoReflect.Descriptor instead.
func (*FsListResult) Descriptor() ([]byte, []int) {
	return file_panel_v1_agent_proto_rawDescGZIP(), []int{23}
}

func (x *FsListResult) GetEntries() []*FsEntry {
	if x != nil {
		return x.Entries
	}
	return nil
}

func (x *FsListResult) GetPath() string {
	if x != nil {
		return x.Path
	}
	return ""
}

func (x *FsListResult) GetError() string {
	if x != nil {
		return x.Error
	}
	return ""
}

type FsReadRequest struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	InstanceId    string                 `protobuf:"bytes,1,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"`
	Path          string                 `protobuf:"bytes,2,opt,name=path,proto3" json:"path,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

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

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

func (*FsReadRequest) ProtoMessage() {}

func (x *FsReadRequest) ProtoReflect() protoreflect.Message {
	mi := &file_panel_v1_agent_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 FsReadRequest.ProtoReflect.Descriptor instead.
func (*FsReadRequest) Descriptor() ([]byte, []int) {
	return file_panel_v1_agent_proto_rawDescGZIP(), []int{24}
}

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

func (x *FsReadRequest) GetPath() string {
	if x != nil {
		return x.Path
	}
	return ""
}

type FsReadResult struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	Path          string                 `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"`
	Content       []byte                 `protobuf:"bytes,2,opt,name=content,proto3" json:"content,omitempty"`
	Error         string                 `protobuf:"bytes,3,opt,name=error,proto3" json:"error,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

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

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

func (*FsReadResult) ProtoMessage() {}

func (x *FsReadResult) ProtoReflect() protoreflect.Message {
	mi := &file_panel_v1_agent_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 FsReadResult.ProtoReflect.Descriptor instead.
func (*FsReadResult) Descriptor() ([]byte, []int) {
	return file_panel_v1_agent_proto_rawDescGZIP(), []int{25}
}

func (x *FsReadResult) GetPath() string {
	if x != nil {
		return x.Path
	}
	return ""
}

func (x *FsReadResult) GetContent() []byte {
	if x != nil {
		return x.Content
	}
	return nil
}

func (x *FsReadResult) GetError() string {
	if x != nil {
		return x.Error
	}
	return ""
}

type FsWriteRequest struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	InstanceId    string                 `protobuf:"bytes,1,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"`
	Path          string                 `protobuf:"bytes,2,opt,name=path,proto3" json:"path,omitempty"`
	Content       []byte                 `protobuf:"bytes,3,opt,name=content,proto3" json:"content,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

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

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

func (*FsWriteRequest) ProtoMessage() {}

func (x *FsWriteRequest) ProtoReflect() protoreflect.Message {
	mi := &file_panel_v1_agent_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 FsWriteRequest.ProtoReflect.Descriptor instead.
func (*FsWriteRequest) Descriptor() ([]byte, []int) {
	return file_panel_v1_agent_proto_rawDescGZIP(), []int{26}
}

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

func (x *FsWriteRequest) GetPath() string {
	if x != nil {
		return x.Path
	}
	return ""
}

func (x *FsWriteRequest) GetContent() []byte {
	if x != nil {
		return x.Content
	}
	return nil
}

type FsWriteResult struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	BytesWritten  int64                  `protobuf:"varint,1,opt,name=bytes_written,json=bytesWritten,proto3" json:"bytes_written,omitempty"`
	Error         string                 `protobuf:"bytes,2,opt,name=error,proto3" json:"error,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

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

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

func (*FsWriteResult) ProtoMessage() {}

func (x *FsWriteResult) ProtoReflect() protoreflect.Message {
	mi := &file_panel_v1_agent_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 FsWriteResult.ProtoReflect.Descriptor instead.
func (*FsWriteResult) Descriptor() ([]byte, []int) {
	return file_panel_v1_agent_proto_rawDescGZIP(), []int{27}
}

func (x *FsWriteResult) GetBytesWritten() int64 {
	if x != nil {
		return x.BytesWritten
	}
	return 0
}

func (x *FsWriteResult) GetError() string {
	if x != nil {
		return x.Error
	}
	return ""
}

type FsDeleteRequest struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	InstanceId    string                 `protobuf:"bytes,1,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"`
	Path          string                 `protobuf:"bytes,2,opt,name=path,proto3" json:"path,omitempty"`
	Recursive     bool                   `protobuf:"varint,3,opt,name=recursive,proto3" json:"recursive,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

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

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

func (*FsDeleteRequest) ProtoMessage() {}

func (x *FsDeleteRequest) ProtoReflect() protoreflect.Message {
	mi := &file_panel_v1_agent_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 FsDeleteRequest.ProtoReflect.Descriptor instead.
func (*FsDeleteRequest) Descriptor() ([]byte, []int) {
	return file_panel_v1_agent_proto_rawDescGZIP(), []int{28}
}

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

func (x *FsDeleteRequest) GetPath() string {
	if x != nil {
		return x.Path
	}
	return ""
}

func (x *FsDeleteRequest) GetRecursive() bool {
	if x != nil {
		return x.Recursive
	}
	return false
}

type FsDeleteResult struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	Error         string                 `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

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

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

func (*FsDeleteResult) ProtoMessage() {}

func (x *FsDeleteResult) ProtoReflect() protoreflect.Message {
	mi := &file_panel_v1_agent_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 FsDeleteResult.ProtoReflect.Descriptor instead.
func (*FsDeleteResult) Descriptor() ([]byte, []int) {
	return file_panel_v1_agent_proto_rawDescGZIP(), []int{29}
}

func (x *FsDeleteResult) GetError() string {
	if x != nil {
		return x.Error
	}
	return ""
}

// FsSymlinkRequest creates (or replaces) a symlink inside the instance
// container. Used by the DayZ mod manager to link @ModName entries to
// the shared workshop tree at /game/steamapps/workshop/content/...
type FsSymlinkRequest struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	InstanceId    string                 `protobuf:"bytes,1,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"`
	Target        string                 `protobuf:"bytes,2,opt,name=target,proto3" json:"target,omitempty"`
	LinkPath      string                 `protobuf:"bytes,3,opt,name=link_path,json=linkPath,proto3" json:"link_path,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

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

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

func (*FsSymlinkRequest) ProtoMessage() {}

func (x *FsSymlinkRequest) ProtoReflect() protoreflect.Message {
	mi := &file_panel_v1_agent_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 FsSymlinkRequest.ProtoReflect.Descriptor instead.
func (*FsSymlinkRequest) Descriptor() ([]byte, []int) {
	return file_panel_v1_agent_proto_rawDescGZIP(), []int{30}
}

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

func (x *FsSymlinkRequest) GetTarget() string {
	if x != nil {
		return x.Target
	}
	return ""
}

func (x *FsSymlinkRequest) GetLinkPath() string {
	if x != nil {
		return x.LinkPath
	}
	return ""
}

type FsSymlinkResult struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	Error         string                 `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

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

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

func (*FsSymlinkResult) ProtoMessage() {}

func (x *FsSymlinkResult) ProtoReflect() protoreflect.Message {
	mi := &file_panel_v1_agent_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 FsSymlinkResult.ProtoReflect.Descriptor instead.
func (*FsSymlinkResult) Descriptor() ([]byte, []int) {
	return file_panel_v1_agent_proto_rawDescGZIP(), []int{31}
}

func (x *FsSymlinkResult) GetError() string {
	if x != nil {
		return x.Error
	}
	return ""
}

// FsExtractRequest expands an archive that already lives inside the
// instance's volume. Format is auto-detected from the archive bytes
// (zip / tar / tar.gz / tar.bz2). dest_dir is rooted in the instance's
// browseable root just like every other Fs op; "" means same dir as
// the archive.
type FsExtractRequest struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	InstanceId    string                 `protobuf:"bytes,1,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"`
	ArchivePath   string                 `protobuf:"bytes,2,opt,name=archive_path,json=archivePath,proto3" json:"archive_path,omitempty"`
	DestDir       string                 `protobuf:"bytes,3,opt,name=dest_dir,json=destDir,proto3" json:"dest_dir,omitempty"`
	Overwrite     bool                   `protobuf:"varint,4,opt,name=overwrite,proto3" json:"overwrite,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

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

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

func (*FsExtractRequest) ProtoMessage() {}

func (x *FsExtractRequest) ProtoReflect() protoreflect.Message {
	mi := &file_panel_v1_agent_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 FsExtractRequest.ProtoReflect.Descriptor instead.
func (*FsExtractRequest) Descriptor() ([]byte, []int) {
	return file_panel_v1_agent_proto_rawDescGZIP(), []int{32}
}

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

func (x *FsExtractRequest) GetArchivePath() string {
	if x != nil {
		return x.ArchivePath
	}
	return ""
}

func (x *FsExtractRequest) GetDestDir() string {
	if x != nil {
		return x.DestDir
	}
	return ""
}

func (x *FsExtractRequest) GetOverwrite() bool {
	if x != nil {
		return x.Overwrite
	}
	return false
}

type FsExtractResult struct {
	state          protoimpl.MessageState `protogen:"open.v1"`
	EntriesWritten int64                  `protobuf:"varint,1,opt,name=entries_written,json=entriesWritten,proto3" json:"entries_written,omitempty"`
	BytesWritten   int64                  `protobuf:"varint,2,opt,name=bytes_written,json=bytesWritten,proto3" json:"bytes_written,omitempty"`
	Error          string                 `protobuf:"bytes,3,opt,name=error,proto3" json:"error,omitempty"`
	unknownFields  protoimpl.UnknownFields
	sizeCache      protoimpl.SizeCache
}

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

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

func (*FsExtractResult) ProtoMessage() {}

func (x *FsExtractResult) ProtoReflect() protoreflect.Message {
	mi := &file_panel_v1_agent_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 FsExtractResult.ProtoReflect.Descriptor instead.
func (*FsExtractResult) Descriptor() ([]byte, []int) {
	return file_panel_v1_agent_proto_rawDescGZIP(), []int{33}
}

func (x *FsExtractResult) GetEntriesWritten() int64 {
	if x != nil {
		return x.EntriesWritten
	}
	return 0
}

func (x *FsExtractResult) GetBytesWritten() int64 {
	if x != nil {
		return x.BytesWritten
	}
	return 0
}

func (x *FsExtractResult) GetError() string {
	if x != nil {
		return x.Error
	}
	return ""
}

// FsCompressRequest produces a zip archive at dest_zip_path containing
// the contents of every path in `sources` (recursive for dirs). All
// paths must be inside the instance's browseable root.
type FsCompressRequest struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	InstanceId    string                 `protobuf:"bytes,1,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"`
	Sources       []string               `protobuf:"bytes,2,rep,name=sources,proto3" json:"sources,omitempty"`
	DestZipPath   string                 `protobuf:"bytes,3,opt,name=dest_zip_path,json=destZipPath,proto3" json:"dest_zip_path,omitempty"`
	Overwrite     bool                   `protobuf:"varint,4,opt,name=overwrite,proto3" json:"overwrite,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

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

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

func (*FsCompressRequest) ProtoMessage() {}

func (x *FsCompressRequest) ProtoReflect() protoreflect.Message {
	mi := &file_panel_v1_agent_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 FsCompressRequest.ProtoReflect.Descriptor instead.
func (*FsCompressRequest) Descriptor() ([]byte, []int) {
	return file_panel_v1_agent_proto_rawDescGZIP(), []int{34}
}

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

func (x *FsCompressRequest) GetSources() []string {
	if x != nil {
		return x.Sources
	}
	return nil
}

func (x *FsCompressRequest) GetDestZipPath() string {
	if x != nil {
		return x.DestZipPath
	}
	return ""
}

func (x *FsCompressRequest) GetOverwrite() bool {
	if x != nil {
		return x.Overwrite
	}
	return false
}

type FsCompressResult struct {
	state          protoimpl.MessageState `protogen:"open.v1"`
	EntriesWritten int64                  `protobuf:"varint,1,opt,name=entries_written,json=entriesWritten,proto3" json:"entries_written,omitempty"`
	BytesWritten   int64                  `protobuf:"varint,2,opt,name=bytes_written,json=bytesWritten,proto3" json:"bytes_written,omitempty"`
	Error          string                 `protobuf:"bytes,3,opt,name=error,proto3" json:"error,omitempty"`
	unknownFields  protoimpl.UnknownFields
	sizeCache      protoimpl.SizeCache
}

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

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

func (*FsCompressResult) ProtoMessage() {}

func (x *FsCompressResult) ProtoReflect() protoreflect.Message {
	mi := &file_panel_v1_agent_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 FsCompressResult.ProtoReflect.Descriptor instead.
func (*FsCompressResult) Descriptor() ([]byte, []int) {
	return file_panel_v1_agent_proto_rawDescGZIP(), []int{35}
}

func (x *FsCompressResult) GetEntriesWritten() int64 {
	if x != nil {
		return x.EntriesWritten
	}
	return 0
}

func (x *FsCompressResult) GetBytesWritten() int64 {
	if x != nil {
		return x.BytesWritten
	}
	return 0
}

func (x *FsCompressResult) GetError() string {
	if x != nil {
		return x.Error
	}
	return ""
}

// FsRenameRequest is a path-safe `mv` inside the instance's volume —
// supports rename + move-into-sibling-dir within the same root.
type FsRenameRequest struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	InstanceId    string                 `protobuf:"bytes,1,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"`
	FromPath      string                 `protobuf:"bytes,2,opt,name=from_path,json=fromPath,proto3" json:"from_path,omitempty"`
	ToPath        string                 `protobuf:"bytes,3,opt,name=to_path,json=toPath,proto3" json:"to_path,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

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

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

func (*FsRenameRequest) ProtoMessage() {}

func (x *FsRenameRequest) ProtoReflect() protoreflect.Message {
	mi := &file_panel_v1_agent_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 FsRenameRequest.ProtoReflect.Descriptor instead.
func (*FsRenameRequest) Descriptor() ([]byte, []int) {
	return file_panel_v1_agent_proto_rawDescGZIP(), []int{36}
}

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

func (x *FsRenameRequest) GetFromPath() string {
	if x != nil {
		return x.FromPath
	}
	return ""
}

func (x *FsRenameRequest) GetToPath() string {
	if x != nil {
		return x.ToPath
	}
	return ""
}

type FsRenameResult struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	Error         string                 `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

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

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

func (*FsRenameResult) ProtoMessage() {}

func (x *FsRenameResult) ProtoReflect() protoreflect.Message {
	mi := &file_panel_v1_agent_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 FsRenameResult.ProtoReflect.Descriptor instead.
func (*FsRenameResult) Descriptor() ([]byte, []int) {
	return file_panel_v1_agent_proto_rawDescGZIP(), []int{37}
}

func (x *FsRenameResult) GetError() string {
	if x != nil {
		return x.Error
	}
	return ""
}

// FsWriteChunkRequest streams a single chunk of a larger upload. Chunks
// are uploaded in order; each one carries the same upload_id (browser-
// generated UUID) so the agent can append to the same temp file. On
// is_final = true the agent finalizes (closes the temp file, ships it
// to the container via CopyToContainer, then unlinks).
type FsWriteChunkRequest struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	InstanceId    string                 `protobuf:"bytes,1,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"`
	UploadId      string                 `protobuf:"bytes,2,opt,name=upload_id,json=uploadId,proto3" json:"upload_id,omitempty"`
	Path          string                 `protobuf:"bytes,3,opt,name=path,proto3" json:"path,omitempty"`
	Offset        int64                  `protobuf:"varint,4,opt,name=offset,proto3" json:"offset,omitempty"`
	Data          []byte                 `protobuf:"bytes,5,opt,name=data,proto3" json:"data,omitempty"`
	TotalSize     int64                  `protobuf:"varint,6,opt,name=total_size,json=totalSize,proto3" json:"total_size,omitempty"` // optional; agent uses for sanity checks on final
	IsFinal       bool                   `protobuf:"varint,7,opt,name=is_final,json=isFinal,proto3" json:"is_final,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

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

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

func (*FsWriteChunkRequest) ProtoMessage() {}

func (x *FsWriteChunkRequest) ProtoReflect() protoreflect.Message {
	mi := &file_panel_v1_agent_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 FsWriteChunkRequest.ProtoReflect.Descriptor instead.
func (*FsWriteChunkRequest) Descriptor() ([]byte, []int) {
	return file_panel_v1_agent_proto_rawDescGZIP(), []int{38}
}

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

func (x *FsWriteChunkRequest) GetUploadId() string {
	if x != nil {
		return x.UploadId
	}
	return ""
}

func (x *FsWriteChunkRequest) GetPath() string {
	if x != nil {
		return x.Path
	}
	return ""
}

func (x *FsWriteChunkRequest) GetOffset() int64 {
	if x != nil {
		return x.Offset
	}
	return 0
}

func (x *FsWriteChunkRequest) GetData() []byte {
	if x != nil {
		return x.Data
	}
	return nil
}

func (x *FsWriteChunkRequest) GetTotalSize() int64 {
	if x != nil {
		return x.TotalSize
	}
	return 0
}

func (x *FsWriteChunkRequest) GetIsFinal() bool {
	if x != nil {
		return x.IsFinal
	}
	return false
}

type FsWriteChunkResult struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	BytesReceived int64                  `protobuf:"varint,1,opt,name=bytes_received,json=bytesReceived,proto3" json:"bytes_received,omitempty"`
	TotalReceived int64                  `protobuf:"varint,2,opt,name=total_received,json=totalReceived,proto3" json:"total_received,omitempty"` // running total per upload_id
	Finalized     bool                   `protobuf:"varint,3,opt,name=finalized,proto3" json:"finalized,omitempty"`
	Error         string                 `protobuf:"bytes,4,opt,name=error,proto3" json:"error,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

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

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

func (*FsWriteChunkResult) ProtoMessage() {}

func (x *FsWriteChunkResult) ProtoReflect() protoreflect.Message {
	mi := &file_panel_v1_agent_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 FsWriteChunkResult.ProtoReflect.Descriptor instead.
func (*FsWriteChunkResult) Descriptor() ([]byte, []int) {
	return file_panel_v1_agent_proto_rawDescGZIP(), []int{39}
}

func (x *FsWriteChunkResult) GetBytesReceived() int64 {
	if x != nil {
		return x.BytesReceived
	}
	return 0
}

func (x *FsWriteChunkResult) GetTotalReceived() int64 {
	if x != nil {
		return x.TotalReceived
	}
	return 0
}

func (x *FsWriteChunkResult) GetFinalized() bool {
	if x != nil {
		return x.Finalized
	}
	return false
}

func (x *FsWriteChunkResult) GetError() string {
	if x != nil {
		return x.Error
	}
	return ""
}

// ArkSaveRestoreRequest swaps a timestamped rolling backup into the
// active save slot under SavedArks/<subdir>/<subdir>.ark. The previous
// active save is moved aside (NEVER deleted) by appending a "_replaced"
// timestamp suffix so even abandoned attempts are recoverable. Path is
// rooted at ShooterGame/Saved/SavedArks/<saved_arks_subdir>/ in the
// instance's browseable root.
//
// Caller (controller) is responsible for stopping the container before
// invoking this — the agent only performs file operations. If a backup
// rolling file (.arkrbf) is selected, it is renamed to .ark before
// installing as the active save.
type ArkSaveRestoreRequest struct {
	state           protoimpl.MessageState `protogen:"open.v1"`
	InstanceId      string                 `protobuf:"bytes,1,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"`
	SavedArksSubdir string                 `protobuf:"bytes,2,opt,name=saved_arks_subdir,json=savedArksSubdir,proto3" json:"saved_arks_subdir,omitempty"` // e.g. "TheIsland_WP"
	TargetFilename  string                 `protobuf:"bytes,3,opt,name=target_filename,json=targetFilename,proto3" json:"target_filename,omitempty"`      // basename within saved_arks_subdir (e.g. "TheIsland_WP_30.04.2026_22.13.00.ark")
	unknownFields   protoimpl.UnknownFields
	sizeCache       protoimpl.SizeCache
}

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

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

func (*ArkSaveRestoreRequest) ProtoMessage() {}

func (x *ArkSaveRestoreRequest) ProtoReflect() protoreflect.Message {
	mi := &file_panel_v1_agent_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 ArkSaveRestoreRequest.ProtoReflect.Descriptor instead.
func (*ArkSaveRestoreRequest) Descriptor() ([]byte, []int) {
	return file_panel_v1_agent_proto_rawDescGZIP(), []int{40}
}

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

func (x *ArkSaveRestoreRequest) GetSavedArksSubdir() string {
	if x != nil {
		return x.SavedArksSubdir
	}
	return ""
}

func (x *ArkSaveRestoreRequest) GetTargetFilename() string {
	if x != nil {
		return x.TargetFilename
	}
	return ""
}

type ArkSaveRestoreResult struct {
	state             protoimpl.MessageState `protogen:"open.v1"`
	AsideFilename     string                 `protobuf:"bytes,1,opt,name=aside_filename,json=asideFilename,proto3" json:"aside_filename,omitempty"`             // what the previously-active save was renamed to
	InstalledFilename string                 `protobuf:"bytes,2,opt,name=installed_filename,json=installedFilename,proto3" json:"installed_filename,omitempty"` // the filename that's now active (always "<subdir>.ark")
	Error             string                 `protobuf:"bytes,3,opt,name=error,proto3" json:"error,omitempty"`
	unknownFields     protoimpl.UnknownFields
	sizeCache         protoimpl.SizeCache
}

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

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

func (*ArkSaveRestoreResult) ProtoMessage() {}

func (x *ArkSaveRestoreResult) ProtoReflect() protoreflect.Message {
	mi := &file_panel_v1_agent_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 ArkSaveRestoreResult.ProtoReflect.Descriptor instead.
func (*ArkSaveRestoreResult) Descriptor() ([]byte, []int) {
	return file_panel_v1_agent_proto_rawDescGZIP(), []int{41}
}

func (x *ArkSaveRestoreResult) GetAsideFilename() string {
	if x != nil {
		return x.AsideFilename
	}
	return ""
}

func (x *ArkSaveRestoreResult) GetInstalledFilename() string {
	if x != nil {
		return x.InstalledFilename
	}
	return ""
}

func (x *ArkSaveRestoreResult) GetError() string {
	if x != nil {
		return x.Error
	}
	return ""
}

// DayzModInstallRequest asks the agent to (1) copy the mod's bikeys into
// /game/keys and (2) create a @ModName symlink at /game/<folder_name>
// pointing at the shared workshop content at
// /game/steamapps/workshop/content/221100/<workshop_id>. Agent-side so
// it can scan the workshop dir and preserve file ownership.
type DayzModInstallRequest struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	InstanceId    string                 `protobuf:"bytes,1,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"`
	WorkshopId    string                 `protobuf:"bytes,2,opt,name=workshop_id,json=workshopId,proto3" json:"workshop_id,omitempty"`
	FolderName    string                 `protobuf:"bytes,3,opt,name=folder_name,json=folderName,proto3" json:"folder_name,omitempty"` // e.g. "@CommunityOnlineTools"
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

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

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

func (*DayzModInstallRequest) ProtoMessage() {}

func (x *DayzModInstallRequest) ProtoReflect() protoreflect.Message {
	mi := &file_panel_v1_agent_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 DayzModInstallRequest.ProtoReflect.Descriptor instead.
func (*DayzModInstallRequest) Descriptor() ([]byte, []int) {
	return file_panel_v1_agent_proto_rawDescGZIP(), []int{42}
}

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

func (x *DayzModInstallRequest) GetWorkshopId() string {
	if x != nil {
		return x.WorkshopId
	}
	return ""
}

func (x *DayzModInstallRequest) GetFolderName() string {
	if x != nil {
		return x.FolderName
	}
	return ""
}

type DayzModInstallResult struct {
	state           protoimpl.MessageState `protogen:"open.v1"`
	Error           string                 `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"`
	BikeysCopied    []string               `protobuf:"bytes,2,rep,name=bikeys_copied,json=bikeysCopied,proto3" json:"bikeys_copied,omitempty"`            // filenames of bikeys dropped in /game/keys
	ResolvedModPath string                 `protobuf:"bytes,3,opt,name=resolved_mod_path,json=resolvedModPath,proto3" json:"resolved_mod_path,omitempty"` // /game/steamapps/workshop/content/221100/<id>
	unknownFields   protoimpl.UnknownFields
	sizeCache       protoimpl.SizeCache
}

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

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

func (*DayzModInstallResult) ProtoMessage() {}

func (x *DayzModInstallResult) ProtoReflect() protoreflect.Message {
	mi := &file_panel_v1_agent_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 DayzModInstallResult.ProtoReflect.Descriptor instead.
func (*DayzModInstallResult) Descriptor() ([]byte, []int) {
	return file_panel_v1_agent_proto_rawDescGZIP(), []int{43}
}

func (x *DayzModInstallResult) GetError() string {
	if x != nil {
		return x.Error
	}
	return ""
}

func (x *DayzModInstallResult) GetBikeysCopied() []string {
	if x != nil {
		return x.BikeysCopied
	}
	return nil
}

func (x *DayzModInstallResult) GetResolvedModPath() string {
	if x != nil {
		return x.ResolvedModPath
	}
	return ""
}

// DayzModUninstallRequest removes the @ModName symlink and the mod's
// bikeys from /game/keys (bikeys are matched by file hash — only keys
// whose content originated from this workshop item are removed).
type DayzModUninstallRequest struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	InstanceId    string                 `protobuf:"bytes,1,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"`
	FolderName    string                 `protobuf:"bytes,2,opt,name=folder_name,json=folderName,proto3" json:"folder_name,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

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

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

func (*DayzModUninstallRequest) ProtoMessage() {}

func (x *DayzModUninstallRequest) ProtoReflect() protoreflect.Message {
	mi := &file_panel_v1_agent_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 DayzModUninstallRequest.ProtoReflect.Descriptor instead.
func (*DayzModUninstallRequest) Descriptor() ([]byte, []int) {
	return file_panel_v1_agent_proto_rawDescGZIP(), []int{44}
}

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

func (x *DayzModUninstallRequest) GetFolderName() string {
	if x != nil {
		return x.FolderName
	}
	return ""
}

type DayzModUninstallResult struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	Error         string                 `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"`
	BikeysRemoved []string               `protobuf:"bytes,2,rep,name=bikeys_removed,json=bikeysRemoved,proto3" json:"bikeys_removed,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

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

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

func (*DayzModUninstallResult) ProtoMessage() {}

func (x *DayzModUninstallResult) ProtoReflect() protoreflect.Message {
	mi := &file_panel_v1_agent_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 DayzModUninstallResult.ProtoReflect.Descriptor instead.
func (*DayzModUninstallResult) Descriptor() ([]byte, []int) {
	return file_panel_v1_agent_proto_rawDescGZIP(), []int{45}
}

func (x *DayzModUninstallResult) GetError() string {
	if x != nil {
		return x.Error
	}
	return ""
}

func (x *DayzModUninstallResult) GetBikeysRemoved() []string {
	if x != nil {
		return x.BikeysRemoved
	}
	return nil
}

type UpdateRequest struct {
	state      protoimpl.MessageState `protogen:"open.v1"`
	InstanceId string                 `protobuf:"bytes,1,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"`
	ProviderId string                 `protobuf:"bytes,2,opt,name=provider_id,json=providerId,proto3" json:"provider_id,omitempty"` // empty = use the module's first update_provider
	// Steam login credentials for apps whose SteamCMD refuses +login
	// anonymous (DayZ, Arma, etc. — modules with `requires_steam_login`
	// set on the provider). The controller pulls these from its
	// encrypted steam_credentials store and forwards them via the
	// mTLS-protected control stream. Agent never logs them.
	SteamUsername string `protobuf:"bytes,3,opt,name=steam_username,json=steamUsername,proto3" json:"steam_username,omitempty"`
	SteamPassword string `protobuf:"bytes,4,opt,name=steam_password,json=steamPassword,proto3" json:"steam_password,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

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

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

func (*UpdateRequest) ProtoMessage() {}

func (x *UpdateRequest) ProtoReflect() protoreflect.Message {
	mi := &file_panel_v1_agent_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 UpdateRequest.ProtoReflect.Descriptor instead.
func (*UpdateRequest) Descriptor() ([]byte, []int) {
	return file_panel_v1_agent_proto_rawDescGZIP(), []int{46}
}

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

func (x *UpdateRequest) GetProviderId() string {
	if x != nil {
		return x.ProviderId
	}
	return ""
}

func (x *UpdateRequest) GetSteamUsername() string {
	if x != nil {
		return x.SteamUsername
	}
	return ""
}

func (x *UpdateRequest) GetSteamPassword() string {
	if x != nil {
		return x.SteamPassword
	}
	return ""
}

type UpdateResult struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	Accepted      bool                   `protobuf:"varint,1,opt,name=accepted,proto3" json:"accepted,omitempty"` // true = agent kicked off the update goroutine
	Error         string                 `protobuf:"bytes,2,opt,name=error,proto3" json:"error,omitempty"`        // empty on accept; populated on immediate reject
	ProviderId    string                 `protobuf:"bytes,3,opt,name=provider_id,json=providerId,proto3" json:"provider_id,omitempty"`
	ProviderKind  string                 `protobuf:"bytes,4,opt,name=provider_kind,json=providerKind,proto3" json:"provider_kind,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

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

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

func (*UpdateResult) ProtoMessage() {}

func (x *UpdateResult) ProtoReflect() protoreflect.Message {
	mi := &file_panel_v1_agent_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 UpdateResult.ProtoReflect.Descriptor instead.
func (*UpdateResult) Descriptor() ([]byte, []int) {
	return file_panel_v1_agent_proto_rawDescGZIP(), []int{47}
}

func (x *UpdateResult) GetAccepted() bool {
	if x != nil {
		return x.Accepted
	}
	return false
}

func (x *UpdateResult) GetError() string {
	if x != nil {
		return x.Error
	}
	return ""
}

func (x *UpdateResult) GetProviderId() string {
	if x != nil {
		return x.ProviderId
	}
	return ""
}

func (x *UpdateResult) GetProviderKind() string {
	if x != nil {
		return x.ProviderKind
	}
	return ""
}

type BackupRequest struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	InstanceId    string                 `protobuf:"bytes,1,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"`
	Description   string                 `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

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

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

func (*BackupRequest) ProtoMessage() {}

func (x *BackupRequest) ProtoReflect() protoreflect.Message {
	mi := &file_panel_v1_agent_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 BackupRequest.ProtoReflect.Descriptor instead.
func (*BackupRequest) Descriptor() ([]byte, []int) {
	return file_panel_v1_agent_proto_rawDescGZIP(), []int{48}
}

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

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

type BackupResult struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	BackupId      string                 `protobuf:"bytes,1,opt,name=backup_id,json=backupId,proto3" json:"backup_id,omitempty"` // bkp_<hex>
	Path          string                 `protobuf:"bytes,2,opt,name=path,proto3" json:"path,omitempty"`
	SizeBytes     int64                  `protobuf:"varint,3,opt,name=size_bytes,json=sizeBytes,proto3" json:"size_bytes,omitempty"`
	Error         string                 `protobuf:"bytes,4,opt,name=error,proto3" json:"error,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

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

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

func (*BackupResult) ProtoMessage() {}

func (x *BackupResult) ProtoReflect() protoreflect.Message {
	mi := &file_panel_v1_agent_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 BackupResult.ProtoReflect.Descriptor instead.
func (*BackupResult) Descriptor() ([]byte, []int) {
	return file_panel_v1_agent_proto_rawDescGZIP(), []int{49}
}

func (x *BackupResult) GetBackupId() string {
	if x != nil {
		return x.BackupId
	}
	return ""
}

func (x *BackupResult) GetPath() string {
	if x != nil {
		return x.Path
	}
	return ""
}

func (x *BackupResult) GetSizeBytes() int64 {
	if x != nil {
		return x.SizeBytes
	}
	return 0
}

func (x *BackupResult) GetError() string {
	if x != nil {
		return x.Error
	}
	return ""
}

type RestoreRequest struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	InstanceId    string                 `protobuf:"bytes,1,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"`
	BackupId      string                 `protobuf:"bytes,2,opt,name=backup_id,json=backupId,proto3" json:"backup_id,omitempty"`
	BackupPath    string                 `protobuf:"bytes,3,opt,name=backup_path,json=backupPath,proto3" json:"backup_path,omitempty"` // absolute path on the agent
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

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

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

func (*RestoreRequest) ProtoMessage() {}

func (x *RestoreRequest) ProtoReflect() protoreflect.Message {
	mi := &file_panel_v1_agent_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 RestoreRequest.ProtoReflect.Descriptor instead.
func (*RestoreRequest) Descriptor() ([]byte, []int) {
	return file_panel_v1_agent_proto_rawDescGZIP(), []int{50}
}

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

func (x *RestoreRequest) GetBackupId() string {
	if x != nil {
		return x.BackupId
	}
	return ""
}

func (x *RestoreRequest) GetBackupPath() string {
	if x != nil {
		return x.BackupPath
	}
	return ""
}

type RestoreResult struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	Error         string                 `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"`
	BytesRestored int64                  `protobuf:"varint,2,opt,name=bytes_restored,json=bytesRestored,proto3" json:"bytes_restored,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

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

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

func (*RestoreResult) ProtoMessage() {}

func (x *RestoreResult) ProtoReflect() protoreflect.Message {
	mi := &file_panel_v1_agent_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 RestoreResult.ProtoReflect.Descriptor instead.
func (*RestoreResult) Descriptor() ([]byte, []int) {
	return file_panel_v1_agent_proto_rawDescGZIP(), []int{51}
}

func (x *RestoreResult) GetError() string {
	if x != nil {
		return x.Error
	}
	return ""
}

func (x *RestoreResult) GetBytesRestored() int64 {
	if x != nil {
		return x.BytesRestored
	}
	return 0
}

// BackupListEntriesRequest asks the agent to enumerate the contents of a
// backup tarball without extracting it. Used by the backup-browser UI so
// operators can drill into a snapshot to confirm what's inside before
// restoring (or to recover a single file).
type BackupListEntriesRequest struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	InstanceId    string                 `protobuf:"bytes,1,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"`
	BackupId      string                 `protobuf:"bytes,2,opt,name=backup_id,json=backupId,proto3" json:"backup_id,omitempty"`
	BackupPath    string                 `protobuf:"bytes,3,opt,name=backup_path,json=backupPath,proto3" json:"backup_path,omitempty"` // absolute path on the agent (resolved controller-side)
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

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

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

func (*BackupListEntriesRequest) ProtoMessage() {}

func (x *BackupListEntriesRequest) ProtoReflect() protoreflect.Message {
	mi := &file_panel_v1_agent_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 BackupListEntriesRequest.ProtoReflect.Descriptor instead.
func (*BackupListEntriesRequest) Descriptor() ([]byte, []int) {
	return file_panel_v1_agent_proto_rawDescGZIP(), []int{52}
}

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

func (x *BackupListEntriesRequest) GetBackupId() string {
	if x != nil {
		return x.BackupId
	}
	return ""
}

func (x *BackupListEntriesRequest) GetBackupPath() string {
	if x != nil {
		return x.BackupPath
	}
	return ""
}

// BackupTarEntry — one row from `tar -tvzf`. Size is bytes-on-disk, not
// compressed size. is_dir distinguishes directories so the UI can render
// a tree without a second pass.
type BackupTarEntry struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	Path          string                 `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` // path inside the tarball, no leading slash
	Size          int64                  `protobuf:"varint,2,opt,name=size,proto3" json:"size,omitempty"`
	IsDir         bool                   `protobuf:"varint,3,opt,name=is_dir,json=isDir,proto3" json:"is_dir,omitempty"`
	Mode          string                 `protobuf:"bytes,4,opt,name=mode,proto3" json:"mode,omitempty"` // permissions string, e.g. "-rw-r--r--"
	ModTime       *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=mod_time,json=modTime,proto3" json:"mod_time,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

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

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

func (*BackupTarEntry) ProtoMessage() {}

func (x *BackupTarEntry) ProtoReflect() protoreflect.Message {
	mi := &file_panel_v1_agent_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 BackupTarEntry.ProtoReflect.Descriptor instead.
func (*BackupTarEntry) Descriptor() ([]byte, []int) {
	return file_panel_v1_agent_proto_rawDescGZIP(), []int{53}
}

func (x *BackupTarEntry) GetPath() string {
	if x != nil {
		return x.Path
	}
	return ""
}

func (x *BackupTarEntry) GetSize() int64 {
	if x != nil {
		return x.Size
	}
	return 0
}

func (x *BackupTarEntry) GetIsDir() bool {
	if x != nil {
		return x.IsDir
	}
	return false
}

func (x *BackupTarEntry) GetMode() string {
	if x != nil {
		return x.Mode
	}
	return ""
}

func (x *BackupTarEntry) GetModTime() *timestamppb.Timestamp {
	if x != nil {
		return x.ModTime
	}
	return nil
}

type BackupListEntriesResult struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	Entries       []*BackupTarEntry      `protobuf:"bytes,1,rep,name=entries,proto3" json:"entries,omitempty"`
	TotalBytes    int64                  `protobuf:"varint,2,opt,name=total_bytes,json=totalBytes,proto3" json:"total_bytes,omitempty"` // sum of file sizes (not compressed size of the tarball)
	Error         string                 `protobuf:"bytes,3,opt,name=error,proto3" json:"error,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *BackupListEntriesResult) Reset() {
	*x = BackupListEntriesResult{}
	mi := &file_panel_v1_agent_proto_msgTypes[54]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

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

func (*BackupListEntriesResult) ProtoMessage() {}

func (x *BackupListEntriesResult) ProtoReflect() protoreflect.Message {
	mi := &file_panel_v1_agent_proto_msgTypes[54]
	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 BackupListEntriesResult.ProtoReflect.Descriptor instead.
func (*BackupListEntriesResult) Descriptor() ([]byte, []int) {
	return file_panel_v1_agent_proto_rawDescGZIP(), []int{54}
}

func (x *BackupListEntriesResult) GetEntries() []*BackupTarEntry {
	if x != nil {
		return x.Entries
	}
	return nil
}

func (x *BackupListEntriesResult) GetTotalBytes() int64 {
	if x != nil {
		return x.TotalBytes
	}
	return 0
}

func (x *BackupListEntriesResult) GetError() string {
	if x != nil {
		return x.Error
	}
	return ""
}

// BackupReadFileRequest extracts a single entry's bytes to memory by
// streaming `tar -xzOf <archive> <path>` into a buffer. Caller-supplied
// max_bytes caps the read so a malicious / corrupt archive can't OOM the
// agent — the result includes truncated=true if max_bytes was hit.
type BackupReadFileRequest struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	InstanceId    string                 `protobuf:"bytes,1,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"`
	BackupId      string                 `protobuf:"bytes,2,opt,name=backup_id,json=backupId,proto3" json:"backup_id,omitempty"`
	BackupPath    string                 `protobuf:"bytes,3,opt,name=backup_path,json=backupPath,proto3" json:"backup_path,omitempty"`
	EntryPath     string                 `protobuf:"bytes,4,opt,name=entry_path,json=entryPath,proto3" json:"entry_path,omitempty"`
	MaxBytes      int64                  `protobuf:"varint,5,opt,name=max_bytes,json=maxBytes,proto3" json:"max_bytes,omitempty"` // 0 → controller-side default (8 MiB)
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *BackupReadFileRequest) Reset() {
	*x = BackupReadFileRequest{}
	mi := &file_panel_v1_agent_proto_msgTypes[55]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

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

func (*BackupReadFileRequest) ProtoMessage() {}

func (x *BackupReadFileRequest) ProtoReflect() protoreflect.Message {
	mi := &file_panel_v1_agent_proto_msgTypes[55]
	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 BackupReadFileRequest.ProtoReflect.Descriptor instead.
func (*BackupReadFileRequest) Descriptor() ([]byte, []int) {
	return file_panel_v1_agent_proto_rawDescGZIP(), []int{55}
}

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

func (x *BackupReadFileRequest) GetBackupId() string {
	if x != nil {
		return x.BackupId
	}
	return ""
}

func (x *BackupReadFileRequest) GetBackupPath() string {
	if x != nil {
		return x.BackupPath
	}
	return ""
}

func (x *BackupReadFileRequest) GetEntryPath() string {
	if x != nil {
		return x.EntryPath
	}
	return ""
}

func (x *BackupReadFileRequest) GetMaxBytes() int64 {
	if x != nil {
		return x.MaxBytes
	}
	return 0
}

type BackupReadFileResult struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	Content       []byte                 `protobuf:"bytes,1,opt,name=content,proto3" json:"content,omitempty"`
	Size          int64                  `protobuf:"varint,2,opt,name=size,proto3" json:"size,omitempty"` // actual entry size from tar header (may be > len(content) if truncated)
	Truncated     bool                   `protobuf:"varint,3,opt,name=truncated,proto3" json:"truncated,omitempty"`
	IsBinary      bool                   `protobuf:"varint,4,opt,name=is_binary,json=isBinary,proto3" json:"is_binary,omitempty"` // heuristic: NUL byte in first 8 KiB
	Error         string                 `protobuf:"bytes,5,opt,name=error,proto3" json:"error,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *BackupReadFileResult) Reset() {
	*x = BackupReadFileResult{}
	mi := &file_panel_v1_agent_proto_msgTypes[56]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

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

func (*BackupReadFileResult) ProtoMessage() {}

func (x *BackupReadFileResult) ProtoReflect() protoreflect.Message {
	mi := &file_panel_v1_agent_proto_msgTypes[56]
	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 BackupReadFileResult.ProtoReflect.Descriptor instead.
func (*BackupReadFileResult) Descriptor() ([]byte, []int) {
	return file_panel_v1_agent_proto_rawDescGZIP(), []int{56}
}

func (x *BackupReadFileResult) GetContent() []byte {
	if x != nil {
		return x.Content
	}
	return nil
}

func (x *BackupReadFileResult) GetSize() int64 {
	if x != nil {
		return x.Size
	}
	return 0
}

func (x *BackupReadFileResult) GetTruncated() bool {
	if x != nil {
		return x.Truncated
	}
	return false
}

func (x *BackupReadFileResult) GetIsBinary() bool {
	if x != nil {
		return x.IsBinary
	}
	return false
}

func (x *BackupReadFileResult) GetError() string {
	if x != nil {
		return x.Error
	}
	return ""
}

type PlayerEvent struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	InstanceId    string                 `protobuf:"bytes,1,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"`
	Kind          PlayerEvent_Kind       `protobuf:"varint,2,opt,name=kind,proto3,enum=panel.v1.PlayerEvent_Kind" json:"kind,omitempty"`
	PlayerId      string                 `protobuf:"bytes,3,opt,name=player_id,json=playerId,proto3" json:"player_id,omitempty"` // SteamID / UUID where available
	PlayerName    string                 `protobuf:"bytes,4,opt,name=player_name,json=playerName,proto3" json:"player_name,omitempty"`
	Detail        string                 `protobuf:"bytes,5,opt,name=detail,proto3" json:"detail,omitempty"`
	At            *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=at,proto3" json:"at,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *PlayerEvent) Reset() {
	*x = PlayerEvent{}
	mi := &file_panel_v1_agent_proto_msgTypes[57]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

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

func (*PlayerEvent) ProtoMessage() {}

func (x *PlayerEvent) ProtoReflect() protoreflect.Message {
	mi := &file_panel_v1_agent_proto_msgTypes[57]
	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 PlayerEvent.ProtoReflect.Descriptor instead.
func (*PlayerEvent) Descriptor() ([]byte, []int) {
	return file_panel_v1_agent_proto_rawDescGZIP(), []int{57}
}

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

func (x *PlayerEvent) GetKind() PlayerEvent_Kind {
	if x != nil {
		return x.Kind
	}
	return PlayerEvent_KIND_UNSPECIFIED
}

func (x *PlayerEvent) GetPlayerId() string {
	if x != nil {
		return x.PlayerId
	}
	return ""
}

func (x *PlayerEvent) GetPlayerName() string {
	if x != nil {
		return x.PlayerName
	}
	return ""
}

func (x *PlayerEvent) GetDetail() string {
	if x != nil {
		return x.Detail
	}
	return ""
}

func (x *PlayerEvent) GetAt() *timestamppb.Timestamp {
	if x != nil {
		return x.At
	}
	return nil
}

// EmpyrionScenarioInstallRequest is sent controller → agent to install
// (or refresh) a workshop scenario into a specific Empyrion instance's
// game volume. The agent runs SteamCMD on its OWN Docker daemon — the
// previous (single-host) implementation ran on the controller's daemon
// which has no view of an agent's volumes.
type EmpyrionScenarioInstallRequest struct {
	state        protoimpl.MessageState `protogen:"open.v1"`
	JobId        string                 `protobuf:"bytes,1,opt,name=job_id,json=jobId,proto3" json:"job_id,omitempty"`                      // controller-generated; echoed in result + log lines
	InstanceId   string                 `protobuf:"bytes,2,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"`       // target empyrion instance (must live on this agent)
	WorkshopId   string                 `protobuf:"bytes,3,opt,name=workshop_id,json=workshopId,proto3" json:"workshop_id,omitempty"`       // Steam workshop item ID (e.g. "3041847672" for RE2)
	ScenarioName string                 `protobuf:"bytes,4,opt,name=scenario_name,json=scenarioName,proto3" json:"scenario_name,omitempty"` // folder name under Content/Scenarios; sanitized by controller
	AppId        string                 `protobuf:"bytes,5,opt,name=app_id,json=appId,proto3" json:"app_id,omitempty"`                      // empyrion app id; defaults to 530870 if empty
	// Steam credentials for the workshop_download_item call. Steam policy
	// (~2023+) requires a logged-in account for most app workshops, even
	// for public/free items — anonymous returns "Access Denied". Forwarded
	// from the controller's encrypted steam_credentials store. Same shape
	// as UpdateRequest's steam_username/steam_password fields.
	SteamUsername string `protobuf:"bytes,6,opt,name=steam_username,json=steamUsername,proto3" json:"steam_username,omitempty"`
	SteamPassword string `protobuf:"bytes,7,opt,name=steam_password,json=steamPassword,proto3" json:"steam_password,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *EmpyrionScenarioInstallRequest) Reset() {
	*x = EmpyrionScenarioInstallRequest{}
	mi := &file_panel_v1_agent_proto_msgTypes[58]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

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

func (*EmpyrionScenarioInstallRequest) ProtoMessage() {}

func (x *EmpyrionScenarioInstallRequest) ProtoReflect() protoreflect.Message {
	mi := &file_panel_v1_agent_proto_msgTypes[58]
	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 EmpyrionScenarioInstallRequest.ProtoReflect.Descriptor instead.
func (*EmpyrionScenarioInstallRequest) Descriptor() ([]byte, []int) {
	return file_panel_v1_agent_proto_rawDescGZIP(), []int{58}
}

func (x *EmpyrionScenarioInstallRequest) GetJobId() string {
	if x != nil {
		return x.JobId
	}
	return ""
}

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

func (x *EmpyrionScenarioInstallRequest) GetWorkshopId() string {
	if x != nil {
		return x.WorkshopId
	}
	return ""
}

func (x *EmpyrionScenarioInstallRequest) GetScenarioName() string {
	if x != nil {
		return x.ScenarioName
	}
	return ""
}

func (x *EmpyrionScenarioInstallRequest) GetAppId() string {
	if x != nil {
		return x.AppId
	}
	return ""
}

func (x *EmpyrionScenarioInstallRequest) GetSteamUsername() string {
	if x != nil {
		return x.SteamUsername
	}
	return ""
}

func (x *EmpyrionScenarioInstallRequest) GetSteamPassword() string {
	if x != nil {
		return x.SteamPassword
	}
	return ""
}

type EmpyrionScenarioInstallResult struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	JobId         string                 `protobuf:"bytes,1,opt,name=job_id,json=jobId,proto3" json:"job_id,omitempty"`
	Ok            bool                   `protobuf:"varint,2,opt,name=ok,proto3" json:"ok,omitempty"`
	Error         string                 `protobuf:"bytes,3,opt,name=error,proto3" json:"error,omitempty"` // empty when ok
	ScenarioName  string                 `protobuf:"bytes,4,opt,name=scenario_name,json=scenarioName,proto3" json:"scenario_name,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *EmpyrionScenarioInstallResult) Reset() {
	*x = EmpyrionScenarioInstallResult{}
	mi := &file_panel_v1_agent_proto_msgTypes[59]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

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

func (*EmpyrionScenarioInstallResult) ProtoMessage() {}

func (x *EmpyrionScenarioInstallResult) ProtoReflect() protoreflect.Message {
	mi := &file_panel_v1_agent_proto_msgTypes[59]
	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 EmpyrionScenarioInstallResult.ProtoReflect.Descriptor instead.
func (*EmpyrionScenarioInstallResult) Descriptor() ([]byte, []int) {
	return file_panel_v1_agent_proto_rawDescGZIP(), []int{59}
}

func (x *EmpyrionScenarioInstallResult) GetJobId() string {
	if x != nil {
		return x.JobId
	}
	return ""
}

func (x *EmpyrionScenarioInstallResult) GetOk() bool {
	if x != nil {
		return x.Ok
	}
	return false
}

func (x *EmpyrionScenarioInstallResult) GetError() string {
	if x != nil {
		return x.Error
	}
	return ""
}

func (x *EmpyrionScenarioInstallResult) GetScenarioName() string {
	if x != nil {
		return x.ScenarioName
	}
	return ""
}

// EmpyrionDiscoveriesRequest queries the empyrion server's global.db
// (SQLite) for what a specific player has discovered. The agent mounts
// the instance's saves volume into a tiny alpine+sqlite sidecar, runs
// a join query against DiscoveredPOIs / Entities / Playfields /
// SolarSystems / LoginLogoff, and returns the rows.
//
// `mode = "personal"` returns POIs the named player personally
// discovered. `mode = "faction"` returns POIs anyone in their faction
// has discovered (the in-game shared-map view). Default: personal.
type EmpyrionDiscoveriesRequest struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	InstanceId    string                 `protobuf:"bytes,1,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"`
	SteamId       string                 `protobuf:"bytes,2,opt,name=steam_id,json=steamId,proto3" json:"steam_id,omitempty"` // 17-digit SteamID64 of the player
	Mode          string                 `protobuf:"bytes,3,opt,name=mode,proto3" json:"mode,omitempty"`                      // "personal" | "faction"
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *EmpyrionDiscoveriesRequest) Reset() {
	*x = EmpyrionDiscoveriesRequest{}
	mi := &file_panel_v1_agent_proto_msgTypes[60]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

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

func (*EmpyrionDiscoveriesRequest) ProtoMessage() {}

func (x *EmpyrionDiscoveriesRequest) ProtoReflect() protoreflect.Message {
	mi := &file_panel_v1_agent_proto_msgTypes[60]
	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 EmpyrionDiscoveriesRequest.ProtoReflect.Descriptor instead.
func (*EmpyrionDiscoveriesRequest) Descriptor() ([]byte, []int) {
	return file_panel_v1_agent_proto_rawDescGZIP(), []int{60}
}

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

func (x *EmpyrionDiscoveriesRequest) GetSteamId() string {
	if x != nil {
		return x.SteamId
	}
	return ""
}

func (x *EmpyrionDiscoveriesRequest) GetMode() string {
	if x != nil {
		return x.Mode
	}
	return ""
}

type DiscoveredPOI struct {
	state             protoimpl.MessageState `protogen:"open.v1"`
	SolarSystem       string                 `protobuf:"bytes,1,opt,name=solar_system,json=solarSystem,proto3" json:"solar_system,omitempty"`
	Playfield         string                 `protobuf:"bytes,2,opt,name=playfield,proto3" json:"playfield,omitempty"`
	PoiName           string                 `protobuf:"bytes,3,opt,name=poi_name,json=poiName,proto3" json:"poi_name,omitempty"`
	PoiType           int32                  `protobuf:"varint,4,opt,name=poi_type,json=poiType,proto3" json:"poi_type,omitempty"`                     // Entities.etype enum
	GameTime          int64                  `protobuf:"varint,5,opt,name=game_time,json=gameTime,proto3" json:"game_time,omitempty"`                  // ticks since save start
	DiscovererName    string                 `protobuf:"bytes,6,opt,name=discoverer_name,json=discovererName,proto3" json:"discoverer_name,omitempty"` // who first discovered (when known)
	DiscovererSteamId string                 `protobuf:"bytes,7,opt,name=discoverer_steam_id,json=discovererSteamId,proto3" json:"discoverer_steam_id,omitempty"`
	FactionGroup      int32                  `protobuf:"varint,8,opt,name=faction_group,json=factionGroup,proto3" json:"faction_group,omitempty"`
	FactionId         int32                  `protobuf:"varint,9,opt,name=faction_id,json=factionId,proto3" json:"faction_id,omitempty"`
	unknownFields     protoimpl.UnknownFields
	sizeCache         protoimpl.SizeCache
}

func (x *DiscoveredPOI) Reset() {
	*x = DiscoveredPOI{}
	mi := &file_panel_v1_agent_proto_msgTypes[61]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

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

func (*DiscoveredPOI) ProtoMessage() {}

func (x *DiscoveredPOI) ProtoReflect() protoreflect.Message {
	mi := &file_panel_v1_agent_proto_msgTypes[61]
	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 DiscoveredPOI.ProtoReflect.Descriptor instead.
func (*DiscoveredPOI) Descriptor() ([]byte, []int) {
	return file_panel_v1_agent_proto_rawDescGZIP(), []int{61}
}

func (x *DiscoveredPOI) GetSolarSystem() string {
	if x != nil {
		return x.SolarSystem
	}
	return ""
}

func (x *DiscoveredPOI) GetPlayfield() string {
	if x != nil {
		return x.Playfield
	}
	return ""
}

func (x *DiscoveredPOI) GetPoiName() string {
	if x != nil {
		return x.PoiName
	}
	return ""
}

func (x *DiscoveredPOI) GetPoiType() int32 {
	if x != nil {
		return x.PoiType
	}
	return 0
}

func (x *DiscoveredPOI) GetGameTime() int64 {
	if x != nil {
		return x.GameTime
	}
	return 0
}

func (x *DiscoveredPOI) GetDiscovererName() string {
	if x != nil {
		return x.DiscovererName
	}
	return ""
}

func (x *DiscoveredPOI) GetDiscovererSteamId() string {
	if x != nil {
		return x.DiscovererSteamId
	}
	return ""
}

func (x *DiscoveredPOI) GetFactionGroup() int32 {
	if x != nil {
		return x.FactionGroup
	}
	return 0
}

func (x *DiscoveredPOI) GetFactionId() int32 {
	if x != nil {
		return x.FactionId
	}
	return 0
}

type EmpyrionDiscoveriesResult struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	Ok            bool                   `protobuf:"varint,1,opt,name=ok,proto3" json:"ok,omitempty"`
	Error         string                 `protobuf:"bytes,2,opt,name=error,proto3" json:"error,omitempty"`
	Pois          []*DiscoveredPOI       `protobuf:"bytes,3,rep,name=pois,proto3" json:"pois,omitempty"`
	Mode          string                 `protobuf:"bytes,4,opt,name=mode,proto3" json:"mode,omitempty"` // echoed back from request
	SteamId       string                 `protobuf:"bytes,5,opt,name=steam_id,json=steamId,proto3" json:"steam_id,omitempty"`
	PlayerName    string                 `protobuf:"bytes,6,opt,name=player_name,json=playerName,proto3" json:"player_name,omitempty"` // last-known name from LoginLogoff
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *EmpyrionDiscoveriesResult) Reset() {
	*x = EmpyrionDiscoveriesResult{}
	mi := &file_panel_v1_agent_proto_msgTypes[62]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

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

func (*EmpyrionDiscoveriesResult) ProtoMessage() {}

func (x *EmpyrionDiscoveriesResult) ProtoReflect() protoreflect.Message {
	mi := &file_panel_v1_agent_proto_msgTypes[62]
	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 EmpyrionDiscoveriesResult.ProtoReflect.Descriptor instead.
func (*EmpyrionDiscoveriesResult) Descriptor() ([]byte, []int) {
	return file_panel_v1_agent_proto_rawDescGZIP(), []int{62}
}

func (x *EmpyrionDiscoveriesResult) GetOk() bool {
	if x != nil {
		return x.Ok
	}
	return false
}

func (x *EmpyrionDiscoveriesResult) GetError() string {
	if x != nil {
		return x.Error
	}
	return ""
}

func (x *EmpyrionDiscoveriesResult) GetPois() []*DiscoveredPOI {
	if x != nil {
		return x.Pois
	}
	return nil
}

func (x *EmpyrionDiscoveriesResult) GetMode() string {
	if x != nil {
		return x.Mode
	}
	return ""
}

func (x *EmpyrionDiscoveriesResult) GetSteamId() string {
	if x != nil {
		return x.SteamId
	}
	return ""
}

func (x *EmpyrionDiscoveriesResult) GetPlayerName() string {
	if x != nil {
		return x.PlayerName
	}
	return ""
}

// EmpyrionPlayerSummaryRequest pulls everything we know about a single
// player from the empyrion savegame DB: stats, login sessions, current
// inventory snapshot. Used by the public /me page on AMP-Monitor.
type EmpyrionPlayerSummaryRequest struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	InstanceId    string                 `protobuf:"bytes,1,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"`
	SteamId       string                 `protobuf:"bytes,2,opt,name=steam_id,json=steamId,proto3" json:"steam_id,omitempty"`                   // 17-digit SteamID64
	MaxLoginRows  int32                  `protobuf:"varint,3,opt,name=max_login_rows,json=maxLoginRows,proto3" json:"max_login_rows,omitempty"` // limit on session history; default 50
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *EmpyrionPlayerSummaryRequest) Reset() {
	*x = EmpyrionPlayerSummaryRequest{}
	mi := &file_panel_v1_agent_proto_msgTypes[63]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

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

func (*EmpyrionPlayerSummaryRequest) ProtoMessage() {}

func (x *EmpyrionPlayerSummaryRequest) ProtoReflect() protoreflect.Message {
	mi := &file_panel_v1_agent_proto_msgTypes[63]
	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 EmpyrionPlayerSummaryRequest.ProtoReflect.Descriptor instead.
func (*EmpyrionPlayerSummaryRequest) Descriptor() ([]byte, []int) {
	return file_panel_v1_agent_proto_rawDescGZIP(), []int{63}
}

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

func (x *EmpyrionPlayerSummaryRequest) GetSteamId() string {
	if x != nil {
		return x.SteamId
	}
	return ""
}

func (x *EmpyrionPlayerSummaryRequest) GetMaxLoginRows() int32 {
	if x != nil {
		return x.MaxLoginRows
	}
	return 0
}

type PlayerStatsRow struct {
	state               protoimpl.MessageState `protogen:"open.v1"`
	KilledEnemies       int64                  `protobuf:"varint,1,opt,name=killed_enemies,json=killedEnemies,proto3" json:"killed_enemies,omitempty"`
	KilledAllied        int64                  `protobuf:"varint,2,opt,name=killed_allied,json=killedAllied,proto3" json:"killed_allied,omitempty"`
	KilledAnimals       int64                  `protobuf:"varint,3,opt,name=killed_animals,json=killedAnimals,proto3" json:"killed_animals,omitempty"`
	KilledDrones        int64                  `protobuf:"varint,4,opt,name=killed_drones,json=killedDrones,proto3" json:"killed_drones,omitempty"`
	KilledPlayers       int64                  `protobuf:"varint,5,opt,name=killed_players,json=killedPlayers,proto3" json:"killed_players,omitempty"`
	KilledAlliedPlayers int64                  `protobuf:"varint,6,opt,name=killed_allied_players,json=killedAlliedPlayers,proto3" json:"killed_allied_players,omitempty"`
	Died                int64                  `protobuf:"varint,7,opt,name=died,proto3" json:"died,omitempty"`
	Score               int64                  `protobuf:"varint,8,opt,name=score,proto3" json:"score,omitempty"`
	BlocksPlaced        int64                  `protobuf:"varint,9,opt,name=blocks_placed,json=blocksPlaced,proto3" json:"blocks_placed,omitempty"`
	BlocksDigged        int64                  `protobuf:"varint,10,opt,name=blocks_digged,json=blocksDigged,proto3" json:"blocks_digged,omitempty"`
	WalkedMeters        int64                  `protobuf:"varint,11,opt,name=walked_meters,json=walkedMeters,proto3" json:"walked_meters,omitempty"`
	JetpackMeters       int64                  `protobuf:"varint,12,opt,name=jetpack_meters,json=jetpackMeters,proto3" json:"jetpack_meters,omitempty"`
	HvMeters            int64                  `protobuf:"varint,13,opt,name=hv_meters,json=hvMeters,proto3" json:"hv_meters,omitempty"`
	SvMeters            int64                  `protobuf:"varint,14,opt,name=sv_meters,json=svMeters,proto3" json:"sv_meters,omitempty"`
	CvMeters            int64                  `protobuf:"varint,15,opt,name=cv_meters,json=cvMeters,proto3" json:"cv_meters,omitempty"`
	Playtime            float64                `protobuf:"fixed64,16,opt,name=playtime,proto3" json:"playtime,omitempty"`                                            // hours per the schema
	LightYears          float64                `protobuf:"fixed64,17,opt,name=light_years,json=lightYears,proto3" json:"light_years,omitempty"`                      // travly
	AstronomicalUnits   float64                `protobuf:"fixed64,18,opt,name=astronomical_units,json=astronomicalUnits,proto3" json:"astronomical_units,omitempty"` // travau
	unknownFields       protoimpl.UnknownFields
	sizeCache           protoimpl.SizeCache
}

func (x *PlayerStatsRow) Reset() {
	*x = PlayerStatsRow{}
	mi := &file_panel_v1_agent_proto_msgTypes[64]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

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

func (*PlayerStatsRow) ProtoMessage() {}

func (x *PlayerStatsRow) ProtoReflect() protoreflect.Message {
	mi := &file_panel_v1_agent_proto_msgTypes[64]
	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 PlayerStatsRow.ProtoReflect.Descriptor instead.
func (*PlayerStatsRow) Descriptor() ([]byte, []int) {
	return file_panel_v1_agent_proto_rawDescGZIP(), []int{64}
}

func (x *PlayerStatsRow) GetKilledEnemies() int64 {
	if x != nil {
		return x.KilledEnemies
	}
	return 0
}

func (x *PlayerStatsRow) GetKilledAllied() int64 {
	if x != nil {
		return x.KilledAllied
	}
	return 0
}

func (x *PlayerStatsRow) GetKilledAnimals() int64 {
	if x != nil {
		return x.KilledAnimals
	}
	return 0
}

func (x *PlayerStatsRow) GetKilledDrones() int64 {
	if x != nil {
		return x.KilledDrones
	}
	return 0
}

func (x *PlayerStatsRow) GetKilledPlayers() int64 {
	if x != nil {
		return x.KilledPlayers
	}
	return 0
}

func (x *PlayerStatsRow) GetKilledAlliedPlayers() int64 {
	if x != nil {
		return x.KilledAlliedPlayers
	}
	return 0
}

func (x *PlayerStatsRow) GetDied() int64 {
	if x != nil {
		return x.Died
	}
	return 0
}

func (x *PlayerStatsRow) GetScore() int64 {
	if x != nil {
		return x.Score
	}
	return 0
}

func (x *PlayerStatsRow) GetBlocksPlaced() int64 {
	if x != nil {
		return x.BlocksPlaced
	}
	return 0
}

func (x *PlayerStatsRow) GetBlocksDigged() int64 {
	if x != nil {
		return x.BlocksDigged
	}
	return 0
}

func (x *PlayerStatsRow) GetWalkedMeters() int64 {
	if x != nil {
		return x.WalkedMeters
	}
	return 0
}

func (x *PlayerStatsRow) GetJetpackMeters() int64 {
	if x != nil {
		return x.JetpackMeters
	}
	return 0
}

func (x *PlayerStatsRow) GetHvMeters() int64 {
	if x != nil {
		return x.HvMeters
	}
	return 0
}

func (x *PlayerStatsRow) GetSvMeters() int64 {
	if x != nil {
		return x.SvMeters
	}
	return 0
}

func (x *PlayerStatsRow) GetCvMeters() int64 {
	if x != nil {
		return x.CvMeters
	}
	return 0
}

func (x *PlayerStatsRow) GetPlaytime() float64 {
	if x != nil {
		return x.Playtime
	}
	return 0
}

func (x *PlayerStatsRow) GetLightYears() float64 {
	if x != nil {
		return x.LightYears
	}
	return 0
}

func (x *PlayerStatsRow) GetAstronomicalUnits() float64 {
	if x != nil {
		return x.AstronomicalUnits
	}
	return 0
}

type PlayerLoginRow struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	LoginTicks    int64                  `protobuf:"varint,1,opt,name=login_ticks,json=loginTicks,proto3" json:"login_ticks,omitempty"`
	LogoffTicks   int64                  `protobuf:"varint,2,opt,name=logoff_ticks,json=logoffTicks,proto3" json:"logoff_ticks,omitempty"`
	PlayerName    string                 `protobuf:"bytes,3,opt,name=player_name,json=playerName,proto3" json:"player_name,omitempty"`
	BuildNr       int64                  `protobuf:"varint,4,opt,name=build_nr,json=buildNr,proto3" json:"build_nr,omitempty"`
	Ip            string                 `protobuf:"bytes,5,opt,name=ip,proto3" json:"ip,omitempty"`
	Os            string                 `protobuf:"bytes,6,opt,name=os,proto3" json:"os,omitempty"`
	Gfx           string                 `protobuf:"bytes,7,opt,name=gfx,proto3" json:"gfx,omitempty"`
	Cpu           string                 `protobuf:"bytes,8,opt,name=cpu,proto3" json:"cpu,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *PlayerLoginRow) Reset() {
	*x = PlayerLoginRow{}
	mi := &file_panel_v1_agent_proto_msgTypes[65]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

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

func (*PlayerLoginRow) ProtoMessage() {}

func (x *PlayerLoginRow) ProtoReflect() protoreflect.Message {
	mi := &file_panel_v1_agent_proto_msgTypes[65]
	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 PlayerLoginRow.ProtoReflect.Descriptor instead.
func (*PlayerLoginRow) Descriptor() ([]byte, []int) {
	return file_panel_v1_agent_proto_rawDescGZIP(), []int{65}
}

func (x *PlayerLoginRow) GetLoginTicks() int64 {
	if x != nil {
		return x.LoginTicks
	}
	return 0
}

func (x *PlayerLoginRow) GetLogoffTicks() int64 {
	if x != nil {
		return x.LogoffTicks
	}
	return 0
}

func (x *PlayerLoginRow) GetPlayerName() string {
	if x != nil {
		return x.PlayerName
	}
	return ""
}

func (x *PlayerLoginRow) GetBuildNr() int64 {
	if x != nil {
		return x.BuildNr
	}
	return 0
}

func (x *PlayerLoginRow) GetIp() string {
	if x != nil {
		return x.Ip
	}
	return ""
}

func (x *PlayerLoginRow) GetOs() string {
	if x != nil {
		return x.Os
	}
	return ""
}

func (x *PlayerLoginRow) GetGfx() string {
	if x != nil {
		return x.Gfx
	}
	return ""
}

func (x *PlayerLoginRow) GetCpu() string {
	if x != nil {
		return x.Cpu
	}
	return ""
}

type PlayerInventoryItem struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	ItemId        int32                  `protobuf:"varint,1,opt,name=item_id,json=itemId,proto3" json:"item_id,omitempty"`
	Count         int32                  `protobuf:"varint,2,opt,name=count,proto3" json:"count,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *PlayerInventoryItem) Reset() {
	*x = PlayerInventoryItem{}
	mi := &file_panel_v1_agent_proto_msgTypes[66]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

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

func (*PlayerInventoryItem) ProtoMessage() {}

func (x *PlayerInventoryItem) ProtoReflect() protoreflect.Message {
	mi := &file_panel_v1_agent_proto_msgTypes[66]
	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 PlayerInventoryItem.ProtoReflect.Descriptor instead.
func (*PlayerInventoryItem) Descriptor() ([]byte, []int) {
	return file_panel_v1_agent_proto_rawDescGZIP(), []int{66}
}

func (x *PlayerInventoryItem) GetItemId() int32 {
	if x != nil {
		return x.ItemId
	}
	return 0
}

func (x *PlayerInventoryItem) GetCount() int32 {
	if x != nil {
		return x.Count
	}
	return 0
}

type EmpyrionPlayerSummaryResult struct {
	state        protoimpl.MessageState `protogen:"open.v1"`
	Ok           bool                   `protobuf:"varint,1,opt,name=ok,proto3" json:"ok,omitempty"`
	Error        string                 `protobuf:"bytes,2,opt,name=error,proto3" json:"error,omitempty"`
	SteamId      string                 `protobuf:"bytes,3,opt,name=steam_id,json=steamId,proto3" json:"steam_id,omitempty"`
	PlayerName   string                 `protobuf:"bytes,4,opt,name=player_name,json=playerName,proto3" json:"player_name,omitempty"`
	EntityId     int64                  `protobuf:"varint,5,opt,name=entity_id,json=entityId,proto3" json:"entity_id,omitempty"`
	FactionGroup int32                  `protobuf:"varint,6,opt,name=faction_group,json=factionGroup,proto3" json:"faction_group,omitempty"`
	FactionId    int32                  `protobuf:"varint,7,opt,name=faction_id,json=factionId,proto3" json:"faction_id,omitempty"`
	// Aggregate stats. nil when player has no PlayerStatistics row yet
	// (very new player).
	Stats *PlayerStatsRow `protobuf:"bytes,8,opt,name=stats,proto3" json:"stats,omitempty"`
	// Recent login sessions, newest first.
	Sessions []*PlayerLoginRow `protobuf:"bytes,9,rep,name=sessions,proto3" json:"sessions,omitempty"`
	// Most recent inventory snapshot. May be empty for players without
	// a recorded snapshot.
	InventoryGametime int64                  `protobuf:"varint,10,opt,name=inventory_gametime,json=inventoryGametime,proto3" json:"inventory_gametime,omitempty"`
	Inventory         []*PlayerInventoryItem `protobuf:"bytes,11,rep,name=inventory,proto3" json:"inventory,omitempty"`
	// Last-known position.
	LastPlayfield string  `protobuf:"bytes,12,opt,name=last_playfield,json=lastPlayfield,proto3" json:"last_playfield,omitempty"`
	LastX         float64 `protobuf:"fixed64,13,opt,name=last_x,json=lastX,proto3" json:"last_x,omitempty"`
	LastY         float64 `protobuf:"fixed64,14,opt,name=last_y,json=lastY,proto3" json:"last_y,omitempty"`
	LastZ         float64 `protobuf:"fixed64,15,opt,name=last_z,json=lastZ,proto3" json:"last_z,omitempty"`
	Credits       int64   `protobuf:"varint,16,opt,name=credits,proto3" json:"credits,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *EmpyrionPlayerSummaryResult) Reset() {
	*x = EmpyrionPlayerSummaryResult{}
	mi := &file_panel_v1_agent_proto_msgTypes[67]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

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

func (*EmpyrionPlayerSummaryResult) ProtoMessage() {}

func (x *EmpyrionPlayerSummaryResult) ProtoReflect() protoreflect.Message {
	mi := &file_panel_v1_agent_proto_msgTypes[67]
	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 EmpyrionPlayerSummaryResult.ProtoReflect.Descriptor instead.
func (*EmpyrionPlayerSummaryResult) Descriptor() ([]byte, []int) {
	return file_panel_v1_agent_proto_rawDescGZIP(), []int{67}
}

func (x *EmpyrionPlayerSummaryResult) GetOk() bool {
	if x != nil {
		return x.Ok
	}
	return false
}

func (x *EmpyrionPlayerSummaryResult) GetError() string {
	if x != nil {
		return x.Error
	}
	return ""
}

func (x *EmpyrionPlayerSummaryResult) GetSteamId() string {
	if x != nil {
		return x.SteamId
	}
	return ""
}

func (x *EmpyrionPlayerSummaryResult) GetPlayerName() string {
	if x != nil {
		return x.PlayerName
	}
	return ""
}

func (x *EmpyrionPlayerSummaryResult) GetEntityId() int64 {
	if x != nil {
		return x.EntityId
	}
	return 0
}

func (x *EmpyrionPlayerSummaryResult) GetFactionGroup() int32 {
	if x != nil {
		return x.FactionGroup
	}
	return 0
}

func (x *EmpyrionPlayerSummaryResult) GetFactionId() int32 {
	if x != nil {
		return x.FactionId
	}
	return 0
}

func (x *EmpyrionPlayerSummaryResult) GetStats() *PlayerStatsRow {
	if x != nil {
		return x.Stats
	}
	return nil
}

func (x *EmpyrionPlayerSummaryResult) GetSessions() []*PlayerLoginRow {
	if x != nil {
		return x.Sessions
	}
	return nil
}

func (x *EmpyrionPlayerSummaryResult) GetInventoryGametime() int64 {
	if x != nil {
		return x.InventoryGametime
	}
	return 0
}

func (x *EmpyrionPlayerSummaryResult) GetInventory() []*PlayerInventoryItem {
	if x != nil {
		return x.Inventory
	}
	return nil
}

func (x *EmpyrionPlayerSummaryResult) GetLastPlayfield() string {
	if x != nil {
		return x.LastPlayfield
	}
	return ""
}

func (x *EmpyrionPlayerSummaryResult) GetLastX() float64 {
	if x != nil {
		return x.LastX
	}
	return 0
}

func (x *EmpyrionPlayerSummaryResult) GetLastY() float64 {
	if x != nil {
		return x.LastY
	}
	return 0
}

func (x *EmpyrionPlayerSummaryResult) GetLastZ() float64 {
	if x != nil {
		return x.LastZ
	}
	return 0
}

func (x *EmpyrionPlayerSummaryResult) GetCredits() int64 {
	if x != nil {
		return x.Credits
	}
	return 0
}

// RegionScanRequest asks the agent to scan an instance's active-world Region
// directory for corruption evidence (error_backup salvage files + invalid
// region files).
type RegionScanRequest struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	InstanceId    string                 `protobuf:"bytes,1,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *RegionScanRequest) Reset() {
	*x = RegionScanRequest{}
	mi := &file_panel_v1_agent_proto_msgTypes[68]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

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

func (*RegionScanRequest) ProtoMessage() {}

func (x *RegionScanRequest) ProtoReflect() protoreflect.Message {
	mi := &file_panel_v1_agent_proto_msgTypes[68]
	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 RegionScanRequest.ProtoReflect.Descriptor instead.
func (*RegionScanRequest) Descriptor() ([]byte, []int) {
	return file_panel_v1_agent_proto_rawDescGZIP(), []int{68}
}

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

// AffectedRegionMsg is one region flagged by a scan.
type AffectedRegionMsg struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	Region        string                 `protobuf:"bytes,1,opt,name=region,proto3" json:"region,omitempty"`                                  // canonical id, e.g. "r.-2.0"
	ErrorBackups  int32                  `protobuf:"varint,2,opt,name=error_backups,json=errorBackups,proto3" json:"error_backups,omitempty"` // salvage files whose chunks fall in this region
	FilePresent   bool                   `protobuf:"varint,3,opt,name=file_present,json=filePresent,proto3" json:"file_present,omitempty"`    // r.X.Z.7rg exists on disk
	FileCorrupt   bool                   `protobuf:"varint,4,opt,name=file_corrupt,json=fileCorrupt,proto3" json:"file_corrupt,omitempty"`    // region file failed structural validation
	BadChunks     int32                  `protobuf:"varint,5,opt,name=bad_chunks,json=badChunks,proto3" json:"bad_chunks,omitempty"`          // count of invalid chunks if validated
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *AffectedRegionMsg) Reset() {
	*x = AffectedRegionMsg{}
	mi := &file_panel_v1_agent_proto_msgTypes[69]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

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

func (*AffectedRegionMsg) ProtoMessage() {}

func (x *AffectedRegionMsg) ProtoReflect() protoreflect.Message {
	mi := &file_panel_v1_agent_proto_msgTypes[69]
	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 AffectedRegionMsg.ProtoReflect.Descriptor instead.
func (*AffectedRegionMsg) Descriptor() ([]byte, []int) {
	return file_panel_v1_agent_proto_rawDescGZIP(), []int{69}
}

func (x *AffectedRegionMsg) GetRegion() string {
	if x != nil {
		return x.Region
	}
	return ""
}

func (x *AffectedRegionMsg) GetErrorBackups() int32 {
	if x != nil {
		return x.ErrorBackups
	}
	return 0
}

func (x *AffectedRegionMsg) GetFilePresent() bool {
	if x != nil {
		return x.FilePresent
	}
	return false
}

func (x *AffectedRegionMsg) GetFileCorrupt() bool {
	if x != nil {
		return x.FileCorrupt
	}
	return false
}

func (x *AffectedRegionMsg) GetBadChunks() int32 {
	if x != nil {
		return x.BadChunks
	}
	return 0
}

type RegionScanResult struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	ErrorBackups  int32                  `protobuf:"varint,1,opt,name=error_backups,json=errorBackups,proto3" json:"error_backups,omitempty"` // total salvage files found
	Affected      []*AffectedRegionMsg   `protobuf:"bytes,2,rep,name=affected,proto3" json:"affected,omitempty"`
	RegionDir     string                 `protobuf:"bytes,3,opt,name=region_dir,json=regionDir,proto3" json:"region_dir,omitempty"` // resolved active Region dir (container path)
	Error         *Error                 `protobuf:"bytes,4,opt,name=error,proto3" json:"error,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *RegionScanResult) Reset() {
	*x = RegionScanResult{}
	mi := &file_panel_v1_agent_proto_msgTypes[70]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

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

func (*RegionScanResult) ProtoMessage() {}

func (x *RegionScanResult) ProtoReflect() protoreflect.Message {
	mi := &file_panel_v1_agent_proto_msgTypes[70]
	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 RegionScanResult.ProtoReflect.Descriptor instead.
func (*RegionScanResult) Descriptor() ([]byte, []int) {
	return file_panel_v1_agent_proto_rawDescGZIP(), []int{70}
}

func (x *RegionScanResult) GetErrorBackups() int32 {
	if x != nil {
		return x.ErrorBackups
	}
	return 0
}

func (x *RegionScanResult) GetAffected() []*AffectedRegionMsg {
	if x != nil {
		return x.Affected
	}
	return nil
}

func (x *RegionScanResult) GetRegionDir() string {
	if x != nil {
		return x.RegionDir
	}
	return ""
}

func (x *RegionScanResult) GetError() *Error {
	if x != nil {
		return x.Error
	}
	return nil
}

// RegionHealRequest asks the agent to heal one region from the newest clean
// backup. The agent stops the instance (graceful save first), swaps the region
// file in place, quarantines the region's error_backups, then restarts (if
// restart=true).
type RegionHealRequest struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	InstanceId    string                 `protobuf:"bytes,1,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"`
	Region        string                 `protobuf:"bytes,2,opt,name=region,proto3" json:"region,omitempty"`    // "r.-2.0"
	Restart       bool                   `protobuf:"varint,3,opt,name=restart,proto3" json:"restart,omitempty"` // restart the instance after healing
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *RegionHealRequest) Reset() {
	*x = RegionHealRequest{}
	mi := &file_panel_v1_agent_proto_msgTypes[71]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

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

func (*RegionHealRequest) ProtoMessage() {}

func (x *RegionHealRequest) ProtoReflect() protoreflect.Message {
	mi := &file_panel_v1_agent_proto_msgTypes[71]
	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 RegionHealRequest.ProtoReflect.Descriptor instead.
func (*RegionHealRequest) Descriptor() ([]byte, []int) {
	return file_panel_v1_agent_proto_rawDescGZIP(), []int{71}
}

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

func (x *RegionHealRequest) GetRegion() string {
	if x != nil {
		return x.Region
	}
	return ""
}

func (x *RegionHealRequest) GetRestart() bool {
	if x != nil {
		return x.Restart
	}
	return false
}

type RegionHealResult struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	Region        string                 `protobuf:"bytes,1,opt,name=region,proto3" json:"region,omitempty"`
	SourceBackup  string                 `protobuf:"bytes,2,opt,name=source_backup,json=sourceBackup,proto3" json:"source_backup,omitempty"` // backup id the clean copy came from
	BytesWritten  int64                  `protobuf:"varint,3,opt,name=bytes_written,json=bytesWritten,proto3" json:"bytes_written,omitempty"`
	Quarantined   int32                  `protobuf:"varint,4,opt,name=quarantined,proto3" json:"quarantined,omitempty"`                      // error_backup files moved aside
	SnapshotPath  string                 `protobuf:"bytes,5,opt,name=snapshot_path,json=snapshotPath,proto3" json:"snapshot_path,omitempty"` // where the corrupt original was saved
	Healed        bool                   `protobuf:"varint,6,opt,name=healed,proto3" json:"healed,omitempty"`
	Error         *Error                 `protobuf:"bytes,7,opt,name=error,proto3" json:"error,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *RegionHealResult) Reset() {
	*x = RegionHealResult{}
	mi := &file_panel_v1_agent_proto_msgTypes[72]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

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

func (*RegionHealResult) ProtoMessage() {}

func (x *RegionHealResult) ProtoReflect() protoreflect.Message {
	mi := &file_panel_v1_agent_proto_msgTypes[72]
	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 RegionHealResult.ProtoReflect.Descriptor instead.
func (*RegionHealResult) Descriptor() ([]byte, []int) {
	return file_panel_v1_agent_proto_rawDescGZIP(), []int{72}
}

func (x *RegionHealResult) GetRegion() string {
	if x != nil {
		return x.Region
	}
	return ""
}

func (x *RegionHealResult) GetSourceBackup() string {
	if x != nil {
		return x.SourceBackup
	}
	return ""
}

func (x *RegionHealResult) GetBytesWritten() int64 {
	if x != nil {
		return x.BytesWritten
	}
	return 0
}

func (x *RegionHealResult) GetQuarantined() int32 {
	if x != nil {
		return x.Quarantined
	}
	return 0
}

func (x *RegionHealResult) GetSnapshotPath() string {
	if x != nil {
		return x.SnapshotPath
	}
	return ""
}

func (x *RegionHealResult) GetHealed() bool {
	if x != nil {
		return x.Healed
	}
	return false
}

func (x *RegionHealResult) GetError() *Error {
	if x != nil {
		return x.Error
	}
	return nil
}

// InstanceRenderConfigRequest asks the agent to re-render the module's
// declared config_files (templates) into the instance's host DataPath,
// WITHOUT recreating or restarting the container. For modules whose
// rendered output is bind-mounted into the container (7dtd's
// serverconfig.xml.rendered), the entrypoint picks the new content up on
// the instance's NEXT boot — this is the durable, no-recreate config path.
//
// config_values is the FULL desired value map (the controller sends its
// merged DB row, not a delta), mirroring what InstanceCreate would render.
type InstanceRenderConfigRequest struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	InstanceId    string                 `protobuf:"bytes,1,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"`
	ConfigValues  map[string]string      `protobuf:"bytes,2,rep,name=config_values,json=configValues,proto3" json:"config_values,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *InstanceRenderConfigRequest) Reset() {
	*x = InstanceRenderConfigRequest{}
	mi := &file_panel_v1_agent_proto_msgTypes[73]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

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

func (*InstanceRenderConfigRequest) ProtoMessage() {}

func (x *InstanceRenderConfigRequest) ProtoReflect() protoreflect.Message {
	mi := &file_panel_v1_agent_proto_msgTypes[73]
	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 InstanceRenderConfigRequest.ProtoReflect.Descriptor instead.
func (*InstanceRenderConfigRequest) Descriptor() ([]byte, []int) {
	return file_panel_v1_agent_proto_rawDescGZIP(), []int{73}
}

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

func (x *InstanceRenderConfigRequest) GetConfigValues() map[string]string {
	if x != nil {
		return x.ConfigValues
	}
	return nil
}

type InstanceRenderConfigResult struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	RenderedFiles []string               `protobuf:"bytes,1,rep,name=rendered_files,json=renderedFiles,proto3" json:"rendered_files,omitempty"` // config_file paths written (manifest-relative)
	Error         string                 `protobuf:"bytes,2,opt,name=error,proto3" json:"error,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *InstanceRenderConfigResult) Reset() {
	*x = InstanceRenderConfigResult{}
	mi := &file_panel_v1_agent_proto_msgTypes[74]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

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

func (*InstanceRenderConfigResult) ProtoMessage() {}

func (x *InstanceRenderConfigResult) ProtoReflect() protoreflect.Message {
	mi := &file_panel_v1_agent_proto_msgTypes[74]
	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 InstanceRenderConfigResult.ProtoReflect.Descriptor instead.
func (*InstanceRenderConfigResult) Descriptor() ([]byte, []int) {
	return file_panel_v1_agent_proto_rawDescGZIP(), []int{74}
}

func (x *InstanceRenderConfigResult) GetRenderedFiles() []string {
	if x != nil {
		return x.RenderedFiles
	}
	return nil
}

func (x *InstanceRenderConfigResult) GetError() string {
	if x != nil {
		return x.Error
	}
	return ""
}

// SeedModsRequest asks an agent to clone the Mods/ folder of src_instance_id
// (the cluster master) onto instance_id (a member), live — no container
// recreate. Per-server state (RefugeBot homes.json) is excluded from the copy
// and the member's own homes.json is preserved. The member keeps running on
// its currently-loaded mods; the new files take effect on its NEXT restart.
// Both instances must live on the same agent (the sidecar mounts local volumes).
type SeedModsRequest struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	InstanceId    string                 `protobuf:"bytes,1,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"`            // destination member to receive the mods
	SrcInstanceId string                 `protobuf:"bytes,2,opt,name=src_instance_id,json=srcInstanceId,proto3" json:"src_instance_id,omitempty"` // source cluster master to copy mods from
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *SeedModsRequest) Reset() {
	*x = SeedModsRequest{}
	mi := &file_panel_v1_agent_proto_msgTypes[75]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

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

func (*SeedModsRequest) ProtoMessage() {}

func (x *SeedModsRequest) ProtoReflect() protoreflect.Message {
	mi := &file_panel_v1_agent_proto_msgTypes[75]
	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 SeedModsRequest.ProtoReflect.Descriptor instead.
func (*SeedModsRequest) Descriptor() ([]byte, []int) {
	return file_panel_v1_agent_proto_rawDescGZIP(), []int{75}
}

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

func (x *SeedModsRequest) GetSrcInstanceId() string {
	if x != nil {
		return x.SrcInstanceId
	}
	return ""
}

type SeedModsResult struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	InstanceId    string                 `protobuf:"bytes,1,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"`
	Ok            bool                   `protobuf:"varint,2,opt,name=ok,proto3" json:"ok,omitempty"`
	Error         string                 `protobuf:"bytes,3,opt,name=error,proto3" json:"error,omitempty"`
	ModCount      int32                  `protobuf:"varint,4,opt,name=mod_count,json=modCount,proto3" json:"mod_count,omitempty"` // number of mods present on the member after the copy
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *SeedModsResult) Reset() {
	*x = SeedModsResult{}
	mi := &file_panel_v1_agent_proto_msgTypes[76]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

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

func (*SeedModsResult) ProtoMessage() {}

func (x *SeedModsResult) ProtoReflect() protoreflect.Message {
	mi := &file_panel_v1_agent_proto_msgTypes[76]
	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 SeedModsResult.ProtoReflect.Descriptor instead.
func (*SeedModsResult) Descriptor() ([]byte, []int) {
	return file_panel_v1_agent_proto_rawDescGZIP(), []int{76}
}

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

func (x *SeedModsResult) GetOk() bool {
	if x != nil {
		return x.Ok
	}
	return false
}

func (x *SeedModsResult) GetError() string {
	if x != nil {
		return x.Error
	}
	return ""
}

func (x *SeedModsResult) GetModCount() int32 {
	if x != nil {
		return x.ModCount
	}
	return 0
}

type UpdateCheckRequest struct {
	state      protoimpl.MessageState `protogen:"open.v1"`
	InstanceId string                 `protobuf:"bytes,1,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"`
	// provider_id selects the module update_provider (steamcmd kind) whose
	// app_id/beta define what "installed vs latest" means. Empty = same
	// default the Update RPC uses (first provider in the manifest).
	ProviderId string `protobuf:"bytes,2,opt,name=provider_id,json=providerId,proto3" json:"provider_id,omitempty"`
	// refresh forces a fresh steamcmd app_info fetch, bypassing the
	// agent-side 15-minute cache.
	Refresh       bool `protobuf:"varint,3,opt,name=refresh,proto3" json:"refresh,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *UpdateCheckRequest) Reset() {
	*x = UpdateCheckRequest{}
	mi := &file_panel_v1_agent_proto_msgTypes[77]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

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

func (*UpdateCheckRequest) ProtoMessage() {}

func (x *UpdateCheckRequest) ProtoReflect() protoreflect.Message {
	mi := &file_panel_v1_agent_proto_msgTypes[77]
	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 UpdateCheckRequest.ProtoReflect.Descriptor instead.
func (*UpdateCheckRequest) Descriptor() ([]byte, []int) {
	return file_panel_v1_agent_proto_rawDescGZIP(), []int{77}
}

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

func (x *UpdateCheckRequest) GetProviderId() string {
	if x != nil {
		return x.ProviderId
	}
	return ""
}

func (x *UpdateCheckRequest) GetRefresh() bool {
	if x != nil {
		return x.Refresh
	}
	return false
}

type UpdateCheckResult struct {
	state            protoimpl.MessageState `protogen:"open.v1"`
	InstanceId       string                 `protobuf:"bytes,1,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"`
	AppId            string                 `protobuf:"bytes,2,opt,name=app_id,json=appId,proto3" json:"app_id,omitempty"`
	Branch           string                 `protobuf:"bytes,3,opt,name=branch,proto3" json:"branch,omitempty"`                                             // Steam branch compared ("public" when no -beta)
	InstalledBuildid string                 `protobuf:"bytes,4,opt,name=installed_buildid,json=installedBuildid,proto3" json:"installed_buildid,omitempty"` // from appmanifest ACF; "" if unreadable
	LatestBuildid    string                 `protobuf:"bytes,5,opt,name=latest_buildid,json=latestBuildid,proto3" json:"latest_buildid,omitempty"`          // from app_info branches map; "" if fetch failed
	UpdateAvailable  bool                   `protobuf:"varint,6,opt,name=update_available,json=updateAvailable,proto3" json:"update_available,omitempty"`   // installed != latest (both non-empty)
	Cached           bool                   `protobuf:"varint,7,opt,name=cached,proto3" json:"cached,omitempty"`                                            // latest came from the agent-side cache
	Error            string                 `protobuf:"bytes,8,opt,name=error,proto3" json:"error,omitempty"`                                               // non-empty on failure; other fields best-effort
	unknownFields    protoimpl.UnknownFields
	sizeCache        protoimpl.SizeCache
}

func (x *UpdateCheckResult) Reset() {
	*x = UpdateCheckResult{}
	mi := &file_panel_v1_agent_proto_msgTypes[78]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

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

func (*UpdateCheckResult) ProtoMessage() {}

func (x *UpdateCheckResult) ProtoReflect() protoreflect.Message {
	mi := &file_panel_v1_agent_proto_msgTypes[78]
	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 UpdateCheckResult.ProtoReflect.Descriptor instead.
func (*UpdateCheckResult) Descriptor() ([]byte, []int) {
	return file_panel_v1_agent_proto_rawDescGZIP(), []int{78}
}

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

func (x *UpdateCheckResult) GetAppId() string {
	if x != nil {
		return x.AppId
	}
	return ""
}

func (x *UpdateCheckResult) GetBranch() string {
	if x != nil {
		return x.Branch
	}
	return ""
}

func (x *UpdateCheckResult) GetInstalledBuildid() string {
	if x != nil {
		return x.InstalledBuildid
	}
	return ""
}

func (x *UpdateCheckResult) GetLatestBuildid() string {
	if x != nil {
		return x.LatestBuildid
	}
	return ""
}

func (x *UpdateCheckResult) GetUpdateAvailable() bool {
	if x != nil {
		return x.UpdateAvailable
	}
	return false
}

func (x *UpdateCheckResult) GetCached() bool {
	if x != nil {
		return x.Cached
	}
	return false
}

func (x *UpdateCheckResult) GetError() string {
	if x != nil {
		return x.Error
	}
	return ""
}

var File_panel_v1_agent_proto protoreflect.FileDescriptor

const file_panel_v1_agent_proto_rawDesc = "" +
	"\n" +
	"\x14panel/v1/agent.proto\x12\bpanel.v1\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x15panel/v1/common.proto\"\xfa\x11\n" +
	"\x12ControllerEnvelope\x12%\n" +
	"\x0ecorrelation_id\x18\x01 \x01(\tR\rcorrelationId\x123\n" +
	"\asent_at\x18\x02 \x01(\v2\x1a.google.protobuf.TimestampR\x06sentAt\x121\n" +
	"\x05hello\x18\n" +
	" \x01(\v2\x19.panel.v1.ControllerHelloH\x00R\x05hello\x12$\n" +
	"\x04ping\x18\v \x01(\v2\x0e.panel.v1.PingH\x00R\x04ping\x12+\n" +
	"\x04exec\x18\x14 \x01(\v2\x15.panel.v1.ExecRequestH\x00R\x04exec\x12C\n" +
	"\x0finstance_create\x18\x1e \x01(\v2\x18.panel.v1.InstanceCreateH\x00R\x0einstanceCreate\x12@\n" +
	"\x0einstance_start\x18\x1f \x01(\v2\x17.panel.v1.InstanceStartH\x00R\rinstanceStart\x12=\n" +
	"\rinstance_stop\x18  \x01(\v2\x16.panel.v1.InstanceStopH\x00R\finstanceStop\x12C\n" +
	"\x0finstance_delete\x18! \x01(\v2\x18.panel.v1.InstanceDeleteH\x00R\x0einstanceDelete\x12+\n" +
	"\x04rcon\x18( \x01(\v2\x15.panel.v1.RCONCommandH\x00R\x04rcon\x122\n" +
	"\afs_list\x182 \x01(\v2\x17.panel.v1.FsListRequestH\x00R\x06fsList\x122\n" +
	"\afs_read\x183 \x01(\v2\x17.panel.v1.FsReadRequestH\x00R\x06fsRead\x125\n" +
	"\bfs_write\x184 \x01(\v2\x18.panel.v1.FsWriteRequestH\x00R\afsWrite\x128\n" +
	"\tfs_delete\x185 \x01(\v2\x19.panel.v1.FsDeleteRequestH\x00R\bfsDelete\x12;\n" +
	"\n" +
	"fs_symlink\x186 \x01(\v2\x1a.panel.v1.FsSymlinkRequestH\x00R\tfsSymlink\x12;\n" +
	"\n" +
	"fs_extract\x187 \x01(\v2\x1a.panel.v1.FsExtractRequestH\x00R\tfsExtract\x12>\n" +
	"\vfs_compress\x188 \x01(\v2\x1b.panel.v1.FsCompressRequestH\x00R\n" +
	"fsCompress\x128\n" +
	"\tfs_rename\x189 \x01(\v2\x19.panel.v1.FsRenameRequestH\x00R\bfsRename\x12E\n" +
	"\x0efs_write_chunk\x18: \x01(\v2\x1d.panel.v1.FsWriteChunkRequestH\x00R\ffsWriteChunk\x12K\n" +
	"\x10ark_save_restore\x18; \x01(\v2\x1f.panel.v1.ArkSaveRestoreRequestH\x00R\x0earkSaveRestore\x12K\n" +
	"\x10dayz_mod_install\x18Z \x01(\v2\x1f.panel.v1.DayzModInstallRequestH\x00R\x0edayzModInstall\x12Q\n" +
	"\x12dayz_mod_uninstall\x18[ \x01(\v2!.panel.v1.DayzModUninstallRequestH\x00R\x10dayzModUninstall\x121\n" +
	"\x06update\x18< \x01(\v2\x17.panel.v1.UpdateRequestH\x00R\x06update\x121\n" +
	"\x06backup\x18F \x01(\v2\x17.panel.v1.BackupRequestH\x00R\x06backup\x124\n" +
	"\arestore\x18G \x01(\v2\x18.panel.v1.RestoreRequestH\x00R\arestore\x12T\n" +
	"\x13backup_list_entries\x18H \x01(\v2\".panel.v1.BackupListEntriesRequestH\x00R\x11backupListEntries\x12K\n" +
	"\x10backup_read_file\x18I \x01(\v2\x1f.panel.v1.BackupReadFileRequestH\x00R\x0ebackupReadFile\x12f\n" +
	"\x19empyrion_scenario_install\x18d \x01(\v2(.panel.v1.EmpyrionScenarioInstallRequestH\x00R\x17empyrionScenarioInstall\x12Y\n" +
	"\x14empyrion_discoveries\x18e \x01(\v2$.panel.v1.EmpyrionDiscoveriesRequestH\x00R\x13empyrionDiscoveries\x12`\n" +
	"\x17empyrion_player_summary\x18f \x01(\v2&.panel.v1.EmpyrionPlayerSummaryRequestH\x00R\x15empyrionPlayerSummary\x12>\n" +
	"\vregion_scan\x18n \x01(\v2\x1b.panel.v1.RegionScanRequestH\x00R\n" +
	"regionScan\x12>\n" +
	"\vregion_heal\x18o \x01(\v2\x1b.panel.v1.RegionHealRequestH\x00R\n" +
	"regionHeal\x12]\n" +
	"\x16instance_render_config\x18p \x01(\v2%.panel.v1.InstanceRenderConfigRequestH\x00R\x14instanceRenderConfig\x128\n" +
	"\tseed_mods\x18q \x01(\v2\x19.panel.v1.SeedModsRequestH\x00R\bseedMods\x12A\n" +
	"\fupdate_check\x18r \x01(\v2\x1c.panel.v1.UpdateCheckRequestH\x00R\vupdateCheckB\t\n" +
	"\apayload\"\xf9\x14\n" +
	"\rAgentEnvelope\x12%\n" +
	"\x0ecorrelation_id\x18\x01 \x01(\tR\rcorrelationId\x123\n" +
	"\asent_at\x18\x02 \x01(\v2\x1a.google.protobuf.TimestampR\x06sentAt\x12,\n" +
	"\x05hello\x18\n" +
	" \x01(\v2\x14.panel.v1.AgentHelloH\x00R\x05hello\x123\n" +
	"\theartbeat\x18\v \x01(\v2\x13.panel.v1.HeartbeatH\x00R\theartbeat\x12$\n" +
	"\x04pong\x18\f \x01(\v2\x0e.panel.v1.PongH\x00R\x04pong\x121\n" +
	"\x06result\x18\x14 \x01(\v2\x17.panel.v1.CommandResultH\x00R\x06result\x12F\n" +
	"\x0einstance_state\x18\x1e \x01(\v2\x1d.panel.v1.InstanceStateUpdateH\x00R\rinstanceState\x127\n" +
	"\tapp_state\x18\x1f \x01(\v2\x18.panel.v1.AppStateUpdateH\x00R\bappState\x12%\n" +
	"\x03log\x18  \x01(\v2\x11.panel.v1.LogLineH\x00R\x03log\x12/\n" +
	"\x06player\x18! \x01(\v2\x15.panel.v1.PlayerEventH\x00R\x06player\x127\n" +
	"\vrcon_result\x18( \x01(\v2\x14.panel.v1.RCONResultH\x00R\n" +
	"rconResult\x12>\n" +
	"\x0efs_list_result\x182 \x01(\v2\x16.panel.v1.FsListResultH\x00R\ffsListResult\x12>\n" +
	"\x0efs_read_result\x183 \x01(\v2\x16.panel.v1.FsReadResultH\x00R\ffsReadResult\x12A\n" +
	"\x0ffs_write_result\x184 \x01(\v2\x17.panel.v1.FsWriteResultH\x00R\rfsWriteResult\x12D\n" +
	"\x10fs_delete_result\x185 \x01(\v2\x18.panel.v1.FsDeleteResultH\x00R\x0efsDeleteResult\x12G\n" +
	"\x11fs_symlink_result\x186 \x01(\v2\x19.panel.v1.FsSymlinkResultH\x00R\x0ffsSymlinkResult\x12G\n" +
	"\x11fs_extract_result\x187 \x01(\v2\x19.panel.v1.FsExtractResultH\x00R\x0ffsExtractResult\x12J\n" +
	"\x12fs_compress_result\x188 \x01(\v2\x1a.panel.v1.FsCompressResultH\x00R\x10fsCompressResult\x12D\n" +
	"\x10fs_rename_result\x189 \x01(\v2\x18.panel.v1.FsRenameResultH\x00R\x0efsRenameResult\x12Q\n" +
	"\x15fs_write_chunk_result\x18: \x01(\v2\x1c.panel.v1.FsWriteChunkResultH\x00R\x12fsWriteChunkResult\x12W\n" +
	"\x17ark_save_restore_result\x18; \x01(\v2\x1e.panel.v1.ArkSaveRestoreResultH\x00R\x14arkSaveRestoreResult\x12W\n" +
	"\x17dayz_mod_install_result\x18Z \x01(\v2\x1e.panel.v1.DayzModInstallResultH\x00R\x14dayzModInstallResult\x12]\n" +
	"\x19dayz_mod_uninstall_result\x18[ \x01(\v2 .panel.v1.DayzModUninstallResultH\x00R\x16dayzModUninstallResult\x12=\n" +
	"\rupdate_result\x18< \x01(\v2\x16.panel.v1.UpdateResultH\x00R\fupdateResult\x12=\n" +
	"\rbackup_result\x18F \x01(\v2\x16.panel.v1.BackupResultH\x00R\fbackupResult\x12@\n" +
	"\x0erestore_result\x18G \x01(\v2\x17.panel.v1.RestoreResultH\x00R\rrestoreResult\x12`\n" +
	"\x1abackup_list_entries_result\x18H \x01(\v2!.panel.v1.BackupListEntriesResultH\x00R\x17backupListEntriesResult\x12W\n" +
	"\x17backup_read_file_result\x18I \x01(\v2\x1e.panel.v1.BackupReadFileResultH\x00R\x14backupReadFileResult\x12F\n" +
	"\x0einstance_stats\x18P \x01(\v2\x1d.panel.v1.InstanceStatsUpdateH\x00R\rinstanceStats\x12r\n" +
	" empyrion_scenario_install_result\x18d \x01(\v2'.panel.v1.EmpyrionScenarioInstallResultH\x00R\x1dempyrionScenarioInstallResult\x12e\n" +
	"\x1bempyrion_discoveries_result\x18e \x01(\v2#.panel.v1.EmpyrionDiscoveriesResultH\x00R\x19empyrionDiscoveriesResult\x12l\n" +
	"\x1eempyrion_player_summary_result\x18f \x01(\v2%.panel.v1.EmpyrionPlayerSummaryResultH\x00R\x1bempyrionPlayerSummaryResult\x12J\n" +
	"\x12region_scan_result\x18n \x01(\v2\x1a.panel.v1.RegionScanResultH\x00R\x10regionScanResult\x12J\n" +
	"\x12region_heal_result\x18o \x01(\v2\x1a.panel.v1.RegionHealResultH\x00R\x10regionHealResult\x12i\n" +
	"\x1dinstance_render_config_result\x18p \x01(\v2$.panel.v1.InstanceRenderConfigResultH\x00R\x1ainstanceRenderConfigResult\x12D\n" +
	"\x10seed_mods_result\x18q \x01(\v2\x18.panel.v1.SeedModsResultH\x00R\x0eseedModsResult\x12M\n" +
	"\x13update_check_result\x18r \x01(\v2\x1b.panel.v1.UpdateCheckResultH\x00R\x11updateCheckResultB\t\n" +
	"\apayload\"\x80\x02\n" +
	"\n" +
	"AgentHello\x12\x19\n" +
	"\bagent_id\x18\x01 \x01(\tR\aagentId\x12#\n" +
	"\ragent_version\x18\x02 \x01(\tR\fagentVersion\x12\x17\n" +
	"\ahost_os\x18\x03 \x01(\tR\x06hostOs\x12\x1b\n" +
	"\thost_arch\x18\x04 \x01(\tR\bhostArch\x12\x1a\n" +
	"\bhostname\x18\x05 \x01(\tR\bhostname\x12-\n" +
	"\x12supported_runtimes\x18\x06 \x03(\tR\x11supportedRuntimes\x121\n" +
	"\amodules\x18\a \x03(\v2\x17.panel.v1.ModuleSummaryR\amodules\"\xfd\x01\n" +
	"\rModuleSummary\x12\x0e\n" +
	"\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n" +
	"\x04name\x18\x02 \x01(\tR\x04name\x12\x18\n" +
	"\aversion\x18\x03 \x01(\tR\aversion\x12'\n" +
	"\x0fsupported_modes\x18\x04 \x03(\tR\x0esupportedModes\x12P\n" +
	"\x10update_providers\x18\x05 \x03(\v2%.panel.v1.ModuleUpdateProviderSummaryR\x0fupdateProviders\x12\x19\n" +
	"\bhas_rcon\x18\x06 \x01(\bR\ahasRcon\x12\x18\n" +
	"\aauthors\x18\a \x03(\tR\aauthors\"s\n" +
	"\x1bModuleUpdateProviderSummary\x12\x0e\n" +
	"\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n" +
	"\x04kind\x18\x02 \x01(\tR\x04kind\x120\n" +
	"\x14requires_steam_login\x18\x03 \x01(\bR\x12requiresSteamLogin\"}\n" +
	"\x0fControllerHello\x12-\n" +
	"\x12controller_version\x18\x01 \x01(\tR\x11controllerVersion\x12;\n" +
	"\vserver_time\x18\x02 \x01(\v2\x1a.google.protobuf.TimestampR\n" +
	"serverTime\"\xcd\x01\n" +
	"\tHeartbeat\x12*\n" +
	"\x02at\x18\x01 \x01(\v2\x1a.google.protobuf.TimestampR\x02at\x12\x1f\n" +
	"\vcpu_percent\x18\x02 \x01(\x01R\n" +
	"cpuPercent\x12$\n" +
	"\x0emem_used_bytes\x18\x03 \x01(\x04R\fmemUsedBytes\x12&\n" +
	"\x0fmem_total_bytes\x18\x04 \x01(\x04R\rmemTotalBytes\x12%\n" +
	"\x0einstance_count\x18\x05 \x01(\rR\rinstanceCount\"\x1c\n" +
	"\x04Ping\x12\x14\n" +
	"\x05nonce\x18\x01 \x01(\tR\x05nonce\"\x1c\n" +
	"\x04Pong\x12\x14\n" +
	"\x05nonce\x18\x01 \x01(\tR\x05nonce\"\xf6\x01\n" +
	"\vExecRequest\x12\x1f\n" +
	"\vinstance_id\x18\x01 \x01(\tR\n" +
	"instanceId\x12\x12\n" +
	"\x04argv\x18\x02 \x03(\tR\x04argv\x120\n" +
	"\x03env\x18\x03 \x03(\v2\x1e.panel.v1.ExecRequest.EnvEntryR\x03env\x12\x1f\n" +
	"\vworking_dir\x18\x04 \x01(\tR\n" +
	"workingDir\x12'\n" +
	"\x0ftimeout_seconds\x18\x05 \x01(\rR\x0etimeoutSeconds\x1a6\n" +
	"\bEnvEntry\x12\x10\n" +
	"\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" +
	"\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\x83\x01\n" +
	"\rCommandResult\x12\x1b\n" +
	"\texit_code\x18\x01 \x01(\x05R\bexitCode\x12\x16\n" +
	"\x06stdout\x18\x02 \x01(\fR\x06stdout\x12\x16\n" +
	"\x06stderr\x18\x03 \x01(\fR\x06stderr\x12%\n" +
	"\x05error\x18\x04 \x01(\v2\x0f.panel.v1.ErrorR\x05error\"\xba\x04\n" +
	"\x0eInstanceCreate\x12\x1f\n" +
	"\vinstance_id\x18\x01 \x01(\tR\n" +
	"instanceId\x12\x1b\n" +
	"\tmodule_id\x18\x02 \x01(\tR\bmoduleId\x12\x18\n" +
	"\aversion\x18\x03 \x01(\tR\aversion\x12,\n" +
	"\brun_mode\x18\x04 \x01(\x0e2\x11.panel.v1.RunModeR\arunMode\x120\n" +
	"\x06limits\x18\x05 \x01(\v2\x18.panel.v1.ResourceLimitsR\x06limits\x12O\n" +
	"\rconfig_values\x18\x06 \x03(\v2*.panel.v1.InstanceCreate.ConfigValuesEntryR\fconfigValues\x12'\n" +
	"\x05ports\x18\a \x03(\v2\x11.panel.v1.PortMapR\x05ports\x12\x1b\n" +
	"\tdata_path\x18\b \x01(\tR\bdataPath\x12U\n" +
	"\x0fmount_overrides\x18\t \x03(\v2,.panel.v1.InstanceCreate.MountOverridesEntryR\x0emountOverrides\x1a?\n" +
	"\x11ConfigValuesEntry\x12\x10\n" +
	"\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" +
	"\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\x1aA\n" +
	"\x13MountOverridesEntry\x12\x10\n" +
	"\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" +
	"\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"0\n" +
	"\rInstanceStart\x12\x1f\n" +
	"\vinstance_id\x18\x01 \x01(\tR\n" +
	"instanceId\"j\n" +
	"\fInstanceStop\x12\x1f\n" +
	"\vinstance_id\x18\x01 \x01(\tR\n" +
	"instanceId\x12#\n" +
	"\rgrace_seconds\x18\x02 \x01(\rR\fgraceSeconds\x12\x14\n" +
	"\x05force\x18\x03 \x01(\bR\x05force\"{\n" +
	"\x0eInstanceDelete\x12\x1f\n" +
	"\vinstance_id\x18\x01 \x01(\tR\n" +
	"instanceId\x12#\n" +
	"\rgrace_seconds\x18\x02 \x01(\rR\fgraceSeconds\x12#\n" +
	"\rpurge_volumes\x18\x03 \x01(\bR\fpurgeVolumes\"\xc9\x01\n" +
	"\x13InstanceStateUpdate\x12\x1f\n" +
	"\vinstance_id\x18\x01 \x01(\tR\n" +
	"instanceId\x120\n" +
	"\x06status\x18\x02 \x01(\x0e2\x18.panel.v1.InstanceStatusR\x06status\x12\x1b\n" +
	"\texit_code\x18\x03 \x01(\x05R\bexitCode\x12*\n" +
	"\x02at\x18\x04 \x01(\v2\x1a.google.protobuf.TimestampR\x02at\x12\x16\n" +
	"\x06detail\x18\x05 \x01(\tR\x06detail\"\xde\x02\n" +
	"\x0eAppStateUpdate\x12\x1f\n" +
	"\vinstance_id\x18\x01 \x01(\tR\n" +
	"instanceId\x12%\n" +
	"\x0eplayers_online\x18\x02 \x01(\x05R\rplayersOnline\x12\x1f\n" +
	"\vplayers_max\x18\x03 \x01(\x05R\n" +
	"playersMax\x12%\n" +
	"\x0euptime_seconds\x18\x04 \x01(\x03R\ruptimeSeconds\x12O\n" +
	"\rmodule_fields\x18\n" +
	" \x03(\v2*.panel.v1.AppStateUpdate.ModuleFieldsEntryR\fmoduleFields\x12*\n" +
	"\x02at\x18\x14 \x01(\v2\x1a.google.protobuf.TimestampR\x02at\x1a?\n" +
	"\x11ModuleFieldsEntry\x12\x10\n" +
	"\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" +
	"\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\x82\x01\n" +
	"\aLogLine\x12\x1f\n" +
	"\vinstance_id\x18\x01 \x01(\tR\n" +
	"instanceId\x12\x16\n" +
	"\x06stream\x18\x02 \x01(\tR\x06stream\x12*\n" +
	"\x02at\x18\x03 \x01(\v2\x1a.google.protobuf.TimestampR\x02at\x12\x12\n" +
	"\x04line\x18\x04 \x01(\tR\x04line\"\xc6\x02\n" +
	"\x13InstanceStatsUpdate\x12\x1f\n" +
	"\vinstance_id\x18\x01 \x01(\tR\n" +
	"instanceId\x12\x1f\n" +
	"\vcpu_percent\x18\x02 \x01(\x01R\n" +
	"cpuPercent\x12$\n" +
	"\x0emem_used_bytes\x18\x03 \x01(\x04R\fmemUsedBytes\x12&\n" +
	"\x0fmem_limit_bytes\x18\x04 \x01(\x04R\rmemLimitBytes\x12 \n" +
	"\fnet_rx_bytes\x18\x05 \x01(\x04R\n" +
	"netRxBytes\x12 \n" +
	"\fnet_tx_bytes\x18\x06 \x01(\x04R\n" +
	"netTxBytes\x12\x12\n" +
	"\x04pids\x18\a \x01(\rR\x04pids\x12*\n" +
	"\x02at\x18\b \x01(\v2\x1a.google.protobuf.TimestampR\x02at\x12\x1b\n" +
	"\thost_cpus\x18\t \x01(\rR\bhostCpus\"H\n" +
	"\vRCONCommand\x12\x1f\n" +
	"\vinstance_id\x18\x01 \x01(\tR\n" +
	"instanceId\x12\x18\n" +
	"\acommand\x18\x02 \x01(\tR\acommand\":\n" +
	"\n" +
	"RCONResult\x12\x16\n" +
	"\x06output\x18\x01 \x01(\tR\x06output\x12\x14\n" +
	"\x05error\x18\x02 \x01(\tR\x05error\"\x93\x01\n" +
	"\aFsEntry\x12\x12\n" +
	"\x04name\x18\x01 \x01(\tR\x04name\x12\x12\n" +
	"\x04path\x18\x02 \x01(\tR\x04path\x12\x15\n" +
	"\x06is_dir\x18\x03 \x01(\bR\x05isDir\x12\x12\n" +
	"\x04size\x18\x04 \x01(\x03R\x04size\x125\n" +
	"\bmod_time\x18\x05 \x01(\v2\x1a.google.protobuf.TimestampR\amodTime\"D\n" +
	"\rFsListRequest\x12\x1f\n" +
	"\vinstance_id\x18\x01 \x01(\tR\n" +
	"instanceId\x12\x12\n" +
	"\x04path\x18\x02 \x01(\tR\x04path\"e\n" +
	"\fFsListResult\x12+\n" +
	"\aentries\x18\x01 \x03(\v2\x11.panel.v1.FsEntryR\aentries\x12\x12\n" +
	"\x04path\x18\x02 \x01(\tR\x04path\x12\x14\n" +
	"\x05error\x18\x03 \x01(\tR\x05error\"D\n" +
	"\rFsReadRequest\x12\x1f\n" +
	"\vinstance_id\x18\x01 \x01(\tR\n" +
	"instanceId\x12\x12\n" +
	"\x04path\x18\x02 \x01(\tR\x04path\"R\n" +
	"\fFsReadResult\x12\x12\n" +
	"\x04path\x18\x01 \x01(\tR\x04path\x12\x18\n" +
	"\acontent\x18\x02 \x01(\fR\acontent\x12\x14\n" +
	"\x05error\x18\x03 \x01(\tR\x05error\"_\n" +
	"\x0eFsWriteRequest\x12\x1f\n" +
	"\vinstance_id\x18\x01 \x01(\tR\n" +
	"instanceId\x12\x12\n" +
	"\x04path\x18\x02 \x01(\tR\x04path\x12\x18\n" +
	"\acontent\x18\x03 \x01(\fR\acontent\"J\n" +
	"\rFsWriteResult\x12#\n" +
	"\rbytes_written\x18\x01 \x01(\x03R\fbytesWritten\x12\x14\n" +
	"\x05error\x18\x02 \x01(\tR\x05error\"d\n" +
	"\x0fFsDeleteRequest\x12\x1f\n" +
	"\vinstance_id\x18\x01 \x01(\tR\n" +
	"instanceId\x12\x12\n" +
	"\x04path\x18\x02 \x01(\tR\x04path\x12\x1c\n" +
	"\trecursive\x18\x03 \x01(\bR\trecursive\"&\n" +
	"\x0eFsDeleteResult\x12\x14\n" +
	"\x05error\x18\x01 \x01(\tR\x05error\"h\n" +
	"\x10FsSymlinkRequest\x12\x1f\n" +
	"\vinstance_id\x18\x01 \x01(\tR\n" +
	"instanceId\x12\x16\n" +
	"\x06target\x18\x02 \x01(\tR\x06target\x12\x1b\n" +
	"\tlink_path\x18\x03 \x01(\tR\blinkPath\"'\n" +
	"\x0fFsSymlinkResult\x12\x14\n" +
	"\x05error\x18\x01 \x01(\tR\x05error\"\x8f\x01\n" +
	"\x10FsExtractRequest\x12\x1f\n" +
	"\vinstance_id\x18\x01 \x01(\tR\n" +
	"instanceId\x12!\n" +
	"\farchive_path\x18\x02 \x01(\tR\varchivePath\x12\x19\n" +
	"\bdest_dir\x18\x03 \x01(\tR\adestDir\x12\x1c\n" +
	"\toverwrite\x18\x04 \x01(\bR\toverwrite\"u\n" +
	"\x0fFsExtractResult\x12'\n" +
	"\x0fentries_written\x18\x01 \x01(\x03R\x0eentriesWritten\x12#\n" +
	"\rbytes_written\x18\x02 \x01(\x03R\fbytesWritten\x12\x14\n" +
	"\x05error\x18\x03 \x01(\tR\x05error\"\x90\x01\n" +
	"\x11FsCompressRequest\x12\x1f\n" +
	"\vinstance_id\x18\x01 \x01(\tR\n" +
	"instanceId\x12\x18\n" +
	"\asources\x18\x02 \x03(\tR\asources\x12\"\n" +
	"\rdest_zip_path\x18\x03 \x01(\tR\vdestZipPath\x12\x1c\n" +
	"\toverwrite\x18\x04 \x01(\bR\toverwrite\"v\n" +
	"\x10FsCompressResult\x12'\n" +
	"\x0fentries_written\x18\x01 \x01(\x03R\x0eentriesWritten\x12#\n" +
	"\rbytes_written\x18\x02 \x01(\x03R\fbytesWritten\x12\x14\n" +
	"\x05error\x18\x03 \x01(\tR\x05error\"h\n" +
	"\x0fFsRenameRequest\x12\x1f\n" +
	"\vinstance_id\x18\x01 \x01(\tR\n" +
	"instanceId\x12\x1b\n" +
	"\tfrom_path\x18\x02 \x01(\tR\bfromPath\x12\x17\n" +
	"\ato_path\x18\x03 \x01(\tR\x06toPath\"&\n" +
	"\x0eFsRenameResult\x12\x14\n" +
	"\x05error\x18\x01 \x01(\tR\x05error\"\xcd\x01\n" +
	"\x13FsWriteChunkRequest\x12\x1f\n" +
	"\vinstance_id\x18\x01 \x01(\tR\n" +
	"instanceId\x12\x1b\n" +
	"\tupload_id\x18\x02 \x01(\tR\buploadId\x12\x12\n" +
	"\x04path\x18\x03 \x01(\tR\x04path\x12\x16\n" +
	"\x06offset\x18\x04 \x01(\x03R\x06offset\x12\x12\n" +
	"\x04data\x18\x05 \x01(\fR\x04data\x12\x1d\n" +
	"\n" +
	"total_size\x18\x06 \x01(\x03R\ttotalSize\x12\x19\n" +
	"\bis_final\x18\a \x01(\bR\aisFinal\"\x96\x01\n" +
	"\x12FsWriteChunkResult\x12%\n" +
	"\x0ebytes_received\x18\x01 \x01(\x03R\rbytesReceived\x12%\n" +
	"\x0etotal_received\x18\x02 \x01(\x03R\rtotalReceived\x12\x1c\n" +
	"\tfinalized\x18\x03 \x01(\bR\tfinalized\x12\x14\n" +
	"\x05error\x18\x04 \x01(\tR\x05error\"\x8d\x01\n" +
	"\x15ArkSaveRestoreRequest\x12\x1f\n" +
	"\vinstance_id\x18\x01 \x01(\tR\n" +
	"instanceId\x12*\n" +
	"\x11saved_arks_subdir\x18\x02 \x01(\tR\x0fsavedArksSubdir\x12'\n" +
	"\x0ftarget_filename\x18\x03 \x01(\tR\x0etargetFilename\"\x82\x01\n" +
	"\x14ArkSaveRestoreResult\x12%\n" +
	"\x0easide_filename\x18\x01 \x01(\tR\rasideFilename\x12-\n" +
	"\x12installed_filename\x18\x02 \x01(\tR\x11installedFilename\x12\x14\n" +
	"\x05error\x18\x03 \x01(\tR\x05error\"z\n" +
	"\x15DayzModInstallRequest\x12\x1f\n" +
	"\vinstance_id\x18\x01 \x01(\tR\n" +
	"instanceId\x12\x1f\n" +
	"\vworkshop_id\x18\x02 \x01(\tR\n" +
	"workshopId\x12\x1f\n" +
	"\vfolder_name\x18\x03 \x01(\tR\n" +
	"folderName\"}\n" +
	"\x14DayzModInstallResult\x12\x14\n" +
	"\x05error\x18\x01 \x01(\tR\x05error\x12#\n" +
	"\rbikeys_copied\x18\x02 \x03(\tR\fbikeysCopied\x12*\n" +
	"\x11resolved_mod_path\x18\x03 \x01(\tR\x0fresolvedModPath\"[\n" +
	"\x17DayzModUninstallRequest\x12\x1f\n" +
	"\vinstance_id\x18\x01 \x01(\tR\n" +
	"instanceId\x12\x1f\n" +
	"\vfolder_name\x18\x02 \x01(\tR\n" +
	"folderName\"U\n" +
	"\x16DayzModUninstallResult\x12\x14\n" +
	"\x05error\x18\x01 \x01(\tR\x05error\x12%\n" +
	"\x0ebikeys_removed\x18\x02 \x03(\tR\rbikeysRemoved\"\x9f\x01\n" +
	"\rUpdateRequest\x12\x1f\n" +
	"\vinstance_id\x18\x01 \x01(\tR\n" +
	"instanceId\x12\x1f\n" +
	"\vprovider_id\x18\x02 \x01(\tR\n" +
	"providerId\x12%\n" +
	"\x0esteam_username\x18\x03 \x01(\tR\rsteamUsername\x12%\n" +
	"\x0esteam_password\x18\x04 \x01(\tR\rsteamPassword\"\x86\x01\n" +
	"\fUpdateResult\x12\x1a\n" +
	"\baccepted\x18\x01 \x01(\bR\baccepted\x12\x14\n" +
	"\x05error\x18\x02 \x01(\tR\x05error\x12\x1f\n" +
	"\vprovider_id\x18\x03 \x01(\tR\n" +
	"providerId\x12#\n" +
	"\rprovider_kind\x18\x04 \x01(\tR\fproviderKind\"R\n" +
	"\rBackupRequest\x12\x1f\n" +
	"\vinstance_id\x18\x01 \x01(\tR\n" +
	"instanceId\x12 \n" +
	"\vdescription\x18\x02 \x01(\tR\vdescription\"t\n" +
	"\fBackupResult\x12\x1b\n" +
	"\tbackup_id\x18\x01 \x01(\tR\bbackupId\x12\x12\n" +
	"\x04path\x18\x02 \x01(\tR\x04path\x12\x1d\n" +
	"\n" +
	"size_bytes\x18\x03 \x01(\x03R\tsizeBytes\x12\x14\n" +
	"\x05error\x18\x04 \x01(\tR\x05error\"o\n" +
	"\x0eRestoreRequest\x12\x1f\n" +
	"\vinstance_id\x18\x01 \x01(\tR\n" +
	"instanceId\x12\x1b\n" +
	"\tbackup_id\x18\x02 \x01(\tR\bbackupId\x12\x1f\n" +
	"\vbackup_path\x18\x03 \x01(\tR\n" +
	"backupPath\"L\n" +
	"\rRestoreResult\x12\x14\n" +
	"\x05error\x18\x01 \x01(\tR\x05error\x12%\n" +
	"\x0ebytes_restored\x18\x02 \x01(\x03R\rbytesRestored\"y\n" +
	"\x18BackupListEntriesRequest\x12\x1f\n" +
	"\vinstance_id\x18\x01 \x01(\tR\n" +
	"instanceId\x12\x1b\n" +
	"\tbackup_id\x18\x02 \x01(\tR\bbackupId\x12\x1f\n" +
	"\vbackup_path\x18\x03 \x01(\tR\n" +
	"backupPath\"\x9a\x01\n" +
	"\x0eBackupTarEntry\x12\x12\n" +
	"\x04path\x18\x01 \x01(\tR\x04path\x12\x12\n" +
	"\x04size\x18\x02 \x01(\x03R\x04size\x12\x15\n" +
	"\x06is_dir\x18\x03 \x01(\bR\x05isDir\x12\x12\n" +
	"\x04mode\x18\x04 \x01(\tR\x04mode\x125\n" +
	"\bmod_time\x18\x05 \x01(\v2\x1a.google.protobuf.TimestampR\amodTime\"\x84\x01\n" +
	"\x17BackupListEntriesResult\x122\n" +
	"\aentries\x18\x01 \x03(\v2\x18.panel.v1.BackupTarEntryR\aentries\x12\x1f\n" +
	"\vtotal_bytes\x18\x02 \x01(\x03R\n" +
	"totalBytes\x12\x14\n" +
	"\x05error\x18\x03 \x01(\tR\x05error\"\xb2\x01\n" +
	"\x15BackupReadFileRequest\x12\x1f\n" +
	"\vinstance_id\x18\x01 \x01(\tR\n" +
	"instanceId\x12\x1b\n" +
	"\tbackup_id\x18\x02 \x01(\tR\bbackupId\x12\x1f\n" +
	"\vbackup_path\x18\x03 \x01(\tR\n" +
	"backupPath\x12\x1d\n" +
	"\n" +
	"entry_path\x18\x04 \x01(\tR\tentryPath\x12\x1b\n" +
	"\tmax_bytes\x18\x05 \x01(\x03R\bmaxBytes\"\x95\x01\n" +
	"\x14BackupReadFileResult\x12\x18\n" +
	"\acontent\x18\x01 \x01(\fR\acontent\x12\x12\n" +
	"\x04size\x18\x02 \x01(\x03R\x04size\x12\x1c\n" +
	"\ttruncated\x18\x03 \x01(\bR\ttruncated\x12\x1b\n" +
	"\tis_binary\x18\x04 \x01(\bR\bisBinary\x12\x14\n" +
	"\x05error\x18\x05 \x01(\tR\x05error\"\xcd\x02\n" +
	"\vPlayerEvent\x12\x1f\n" +
	"\vinstance_id\x18\x01 \x01(\tR\n" +
	"instanceId\x12.\n" +
	"\x04kind\x18\x02 \x01(\x0e2\x1a.panel.v1.PlayerEvent.KindR\x04kind\x12\x1b\n" +
	"\tplayer_id\x18\x03 \x01(\tR\bplayerId\x12\x1f\n" +
	"\vplayer_name\x18\x04 \x01(\tR\n" +
	"playerName\x12\x16\n" +
	"\x06detail\x18\x05 \x01(\tR\x06detail\x12*\n" +
	"\x02at\x18\x06 \x01(\v2\x1a.google.protobuf.TimestampR\x02at\"k\n" +
	"\x04Kind\x12\x14\n" +
	"\x10KIND_UNSPECIFIED\x10\x00\x12\r\n" +
	"\tKIND_JOIN\x10\x01\x12\x0e\n" +
	"\n" +
	"KIND_LEAVE\x10\x02\x12\r\n" +
	"\tKIND_CHAT\x10\x03\x12\x0e\n" +
	"\n" +
	"KIND_DEATH\x10\x04\x12\x0f\n" +
	"\vKIND_CUSTOM\x10c\"\x83\x02\n" +
	"\x1eEmpyrionScenarioInstallRequest\x12\x15\n" +
	"\x06job_id\x18\x01 \x01(\tR\x05jobId\x12\x1f\n" +
	"\vinstance_id\x18\x02 \x01(\tR\n" +
	"instanceId\x12\x1f\n" +
	"\vworkshop_id\x18\x03 \x01(\tR\n" +
	"workshopId\x12#\n" +
	"\rscenario_name\x18\x04 \x01(\tR\fscenarioName\x12\x15\n" +
	"\x06app_id\x18\x05 \x01(\tR\x05appId\x12%\n" +
	"\x0esteam_username\x18\x06 \x01(\tR\rsteamUsername\x12%\n" +
	"\x0esteam_password\x18\a \x01(\tR\rsteamPassword\"\x81\x01\n" +
	"\x1dEmpyrionScenarioInstallResult\x12\x15\n" +
	"\x06job_id\x18\x01 \x01(\tR\x05jobId\x12\x0e\n" +
	"\x02ok\x18\x02 \x01(\bR\x02ok\x12\x14\n" +
	"\x05error\x18\x03 \x01(\tR\x05error\x12#\n" +
	"\rscenario_name\x18\x04 \x01(\tR\fscenarioName\"l\n" +
	"\x1aEmpyrionDiscoveriesRequest\x12\x1f\n" +
	"\vinstance_id\x18\x01 \x01(\tR\n" +
	"instanceId\x12\x19\n" +
	"\bsteam_id\x18\x02 \x01(\tR\asteamId\x12\x12\n" +
	"\x04mode\x18\x03 \x01(\tR\x04mode\"\xc0\x02\n" +
	"\rDiscoveredPOI\x12!\n" +
	"\fsolar_system\x18\x01 \x01(\tR\vsolarSystem\x12\x1c\n" +
	"\tplayfield\x18\x02 \x01(\tR\tplayfield\x12\x19\n" +
	"\bpoi_name\x18\x03 \x01(\tR\apoiName\x12\x19\n" +
	"\bpoi_type\x18\x04 \x01(\x05R\apoiType\x12\x1b\n" +
	"\tgame_time\x18\x05 \x01(\x03R\bgameTime\x12'\n" +
	"\x0fdiscoverer_name\x18\x06 \x01(\tR\x0ediscovererName\x12.\n" +
	"\x13discoverer_steam_id\x18\a \x01(\tR\x11discovererSteamId\x12#\n" +
	"\rfaction_group\x18\b \x01(\x05R\ffactionGroup\x12\x1d\n" +
	"\n" +
	"faction_id\x18\t \x01(\x05R\tfactionId\"\xbe\x01\n" +
	"\x19EmpyrionDiscoveriesResult\x12\x0e\n" +
	"\x02ok\x18\x01 \x01(\bR\x02ok\x12\x14\n" +
	"\x05error\x18\x02 \x01(\tR\x05error\x12+\n" +
	"\x04pois\x18\x03 \x03(\v2\x17.panel.v1.DiscoveredPOIR\x04pois\x12\x12\n" +
	"\x04mode\x18\x04 \x01(\tR\x04mode\x12\x19\n" +
	"\bsteam_id\x18\x05 \x01(\tR\asteamId\x12\x1f\n" +
	"\vplayer_name\x18\x06 \x01(\tR\n" +
	"playerName\"\x80\x01\n" +
	"\x1cEmpyrionPlayerSummaryRequest\x12\x1f\n" +
	"\vinstance_id\x18\x01 \x01(\tR\n" +
	"instanceId\x12\x19\n" +
	"\bsteam_id\x18\x02 \x01(\tR\asteamId\x12$\n" +
	"\x0emax_login_rows\x18\x03 \x01(\x05R\fmaxLoginRows\"\x86\x05\n" +
	"\x0ePlayerStatsRow\x12%\n" +
	"\x0ekilled_enemies\x18\x01 \x01(\x03R\rkilledEnemies\x12#\n" +
	"\rkilled_allied\x18\x02 \x01(\x03R\fkilledAllied\x12%\n" +
	"\x0ekilled_animals\x18\x03 \x01(\x03R\rkilledAnimals\x12#\n" +
	"\rkilled_drones\x18\x04 \x01(\x03R\fkilledDrones\x12%\n" +
	"\x0ekilled_players\x18\x05 \x01(\x03R\rkilledPlayers\x122\n" +
	"\x15killed_allied_players\x18\x06 \x01(\x03R\x13killedAlliedPlayers\x12\x12\n" +
	"\x04died\x18\a \x01(\x03R\x04died\x12\x14\n" +
	"\x05score\x18\b \x01(\x03R\x05score\x12#\n" +
	"\rblocks_placed\x18\t \x01(\x03R\fblocksPlaced\x12#\n" +
	"\rblocks_digged\x18\n" +
	" \x01(\x03R\fblocksDigged\x12#\n" +
	"\rwalked_meters\x18\v \x01(\x03R\fwalkedMeters\x12%\n" +
	"\x0ejetpack_meters\x18\f \x01(\x03R\rjetpackMeters\x12\x1b\n" +
	"\thv_meters\x18\r \x01(\x03R\bhvMeters\x12\x1b\n" +
	"\tsv_meters\x18\x0e \x01(\x03R\bsvMeters\x12\x1b\n" +
	"\tcv_meters\x18\x0f \x01(\x03R\bcvMeters\x12\x1a\n" +
	"\bplaytime\x18\x10 \x01(\x01R\bplaytime\x12\x1f\n" +
	"\vlight_years\x18\x11 \x01(\x01R\n" +
	"lightYears\x12-\n" +
	"\x12astronomical_units\x18\x12 \x01(\x01R\x11astronomicalUnits\"\xd4\x01\n" +
	"\x0ePlayerLoginRow\x12\x1f\n" +
	"\vlogin_ticks\x18\x01 \x01(\x03R\n" +
	"loginTicks\x12!\n" +
	"\flogoff_ticks\x18\x02 \x01(\x03R\vlogoffTicks\x12\x1f\n" +
	"\vplayer_name\x18\x03 \x01(\tR\n" +
	"playerName\x12\x19\n" +
	"\bbuild_nr\x18\x04 \x01(\x03R\abuildNr\x12\x0e\n" +
	"\x02ip\x18\x05 \x01(\tR\x02ip\x12\x0e\n" +
	"\x02os\x18\x06 \x01(\tR\x02os\x12\x10\n" +
	"\x03gfx\x18\a \x01(\tR\x03gfx\x12\x10\n" +
	"\x03cpu\x18\b \x01(\tR\x03cpu\"D\n" +
	"\x13PlayerInventoryItem\x12\x17\n" +
	"\aitem_id\x18\x01 \x01(\x05R\x06itemId\x12\x14\n" +
	"\x05count\x18\x02 \x01(\x05R\x05count\"\xb8\x04\n" +
	"\x1bEmpyrionPlayerSummaryResult\x12\x0e\n" +
	"\x02ok\x18\x01 \x01(\bR\x02ok\x12\x14\n" +
	"\x05error\x18\x02 \x01(\tR\x05error\x12\x19\n" +
	"\bsteam_id\x18\x03 \x01(\tR\asteamId\x12\x1f\n" +
	"\vplayer_name\x18\x04 \x01(\tR\n" +
	"playerName\x12\x1b\n" +
	"\tentity_id\x18\x05 \x01(\x03R\bentityId\x12#\n" +
	"\rfaction_group\x18\x06 \x01(\x05R\ffactionGroup\x12\x1d\n" +
	"\n" +
	"faction_id\x18\a \x01(\x05R\tfactionId\x12.\n" +
	"\x05stats\x18\b \x01(\v2\x18.panel.v1.PlayerStatsRowR\x05stats\x124\n" +
	"\bsessions\x18\t \x03(\v2\x18.panel.v1.PlayerLoginRowR\bsessions\x12-\n" +
	"\x12inventory_gametime\x18\n" +
	" \x01(\x03R\x11inventoryGametime\x12;\n" +
	"\tinventory\x18\v \x03(\v2\x1d.panel.v1.PlayerInventoryItemR\tinventory\x12%\n" +
	"\x0elast_playfield\x18\f \x01(\tR\rlastPlayfield\x12\x15\n" +
	"\x06last_x\x18\r \x01(\x01R\x05lastX\x12\x15\n" +
	"\x06last_y\x18\x0e \x01(\x01R\x05lastY\x12\x15\n" +
	"\x06last_z\x18\x0f \x01(\x01R\x05lastZ\x12\x18\n" +
	"\acredits\x18\x10 \x01(\x03R\acredits\"4\n" +
	"\x11RegionScanRequest\x12\x1f\n" +
	"\vinstance_id\x18\x01 \x01(\tR\n" +
	"instanceId\"\xb5\x01\n" +
	"\x11AffectedRegionMsg\x12\x16\n" +
	"\x06region\x18\x01 \x01(\tR\x06region\x12#\n" +
	"\rerror_backups\x18\x02 \x01(\x05R\ferrorBackups\x12!\n" +
	"\ffile_present\x18\x03 \x01(\bR\vfilePresent\x12!\n" +
	"\ffile_corrupt\x18\x04 \x01(\bR\vfileCorrupt\x12\x1d\n" +
	"\n" +
	"bad_chunks\x18\x05 \x01(\x05R\tbadChunks\"\xb6\x01\n" +
	"\x10RegionScanResult\x12#\n" +
	"\rerror_backups\x18\x01 \x01(\x05R\ferrorBackups\x127\n" +
	"\baffected\x18\x02 \x03(\v2\x1b.panel.v1.AffectedRegionMsgR\baffected\x12\x1d\n" +
	"\n" +
	"region_dir\x18\x03 \x01(\tR\tregionDir\x12%\n" +
	"\x05error\x18\x04 \x01(\v2\x0f.panel.v1.ErrorR\x05error\"f\n" +
	"\x11RegionHealRequest\x12\x1f\n" +
	"\vinstance_id\x18\x01 \x01(\tR\n" +
	"instanceId\x12\x16\n" +
	"\x06region\x18\x02 \x01(\tR\x06region\x12\x18\n" +
	"\arestart\x18\x03 \x01(\bR\arestart\"\xfa\x01\n" +
	"\x10RegionHealResult\x12\x16\n" +
	"\x06region\x18\x01 \x01(\tR\x06region\x12#\n" +
	"\rsource_backup\x18\x02 \x01(\tR\fsourceBackup\x12#\n" +
	"\rbytes_written\x18\x03 \x01(\x03R\fbytesWritten\x12 \n" +
	"\vquarantined\x18\x04 \x01(\x05R\vquarantined\x12#\n" +
	"\rsnapshot_path\x18\x05 \x01(\tR\fsnapshotPath\x12\x16\n" +
	"\x06healed\x18\x06 \x01(\bR\x06healed\x12%\n" +
	"\x05error\x18\a \x01(\v2\x0f.panel.v1.ErrorR\x05error\"\xdd\x01\n" +
	"\x1bInstanceRenderConfigRequest\x12\x1f\n" +
	"\vinstance_id\x18\x01 \x01(\tR\n" +
	"instanceId\x12\\\n" +
	"\rconfig_values\x18\x02 \x03(\v27.panel.v1.InstanceRenderConfigRequest.ConfigValuesEntryR\fconfigValues\x1a?\n" +
	"\x11ConfigValuesEntry\x12\x10\n" +
	"\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" +
	"\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"Y\n" +
	"\x1aInstanceRenderConfigResult\x12%\n" +
	"\x0erendered_files\x18\x01 \x03(\tR\rrenderedFiles\x12\x14\n" +
	"\x05error\x18\x02 \x01(\tR\x05error\"Z\n" +
	"\x0fSeedModsRequest\x12\x1f\n" +
	"\vinstance_id\x18\x01 \x01(\tR\n" +
	"instanceId\x12&\n" +
	"\x0fsrc_instance_id\x18\x02 \x01(\tR\rsrcInstanceId\"t\n" +
	"\x0eSeedModsResult\x12\x1f\n" +
	"\vinstance_id\x18\x01 \x01(\tR\n" +
	"instanceId\x12\x0e\n" +
	"\x02ok\x18\x02 \x01(\bR\x02ok\x12\x14\n" +
	"\x05error\x18\x03 \x01(\tR\x05error\x12\x1b\n" +
	"\tmod_count\x18\x04 \x01(\x05R\bmodCount\"p\n" +
	"\x12UpdateCheckRequest\x12\x1f\n" +
	"\vinstance_id\x18\x01 \x01(\tR\n" +
	"instanceId\x12\x1f\n" +
	"\vprovider_id\x18\x02 \x01(\tR\n" +
	"providerId\x12\x18\n" +
	"\arefresh\x18\x03 \x01(\bR\arefresh\"\x90\x02\n" +
	"\x11UpdateCheckResult\x12\x1f\n" +
	"\vinstance_id\x18\x01 \x01(\tR\n" +
	"instanceId\x12\x15\n" +
	"\x06app_id\x18\x02 \x01(\tR\x05appId\x12\x16\n" +
	"\x06branch\x18\x03 \x01(\tR\x06branch\x12+\n" +
	"\x11installed_buildid\x18\x04 \x01(\tR\x10installedBuildid\x12%\n" +
	"\x0elatest_buildid\x18\x05 \x01(\tR\rlatestBuildid\x12)\n" +
	"\x10update_available\x18\x06 \x01(\bR\x0fupdateAvailable\x12\x16\n" +
	"\x06cached\x18\a \x01(\bR\x06cached\x12\x14\n" +
	"\x05error\x18\b \x01(\tR\x05error2M\n" +
	"\x05Agent\x12D\n" +
	"\aConnect\x12\x17.panel.v1.AgentEnvelope\x1a\x1c.panel.v1.ControllerEnvelope(\x010\x01B2Z0github.com/dbledeez/panel/proto/panel/v1;panelv1b\x06proto3"

var (
	file_panel_v1_agent_proto_rawDescOnce sync.Once
	file_panel_v1_agent_proto_rawDescData []byte
)

func file_panel_v1_agent_proto_rawDescGZIP() []byte {
	file_panel_v1_agent_proto_rawDescOnce.Do(func() {
		file_panel_v1_agent_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_panel_v1_agent_proto_rawDesc), len(file_panel_v1_agent_proto_rawDesc)))
	})
	return file_panel_v1_agent_proto_rawDescData
}

var file_panel_v1_agent_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
var file_panel_v1_agent_proto_msgTypes = make([]protoimpl.MessageInfo, 84)
var file_panel_v1_agent_proto_goTypes = []any{
	(PlayerEvent_Kind)(0),                  // 0: panel.v1.PlayerEvent.Kind
	(*ControllerEnvelope)(nil),             // 1: panel.v1.ControllerEnvelope
	(*AgentEnvelope)(nil),                  // 2: panel.v1.AgentEnvelope
	(*AgentHello)(nil),                     // 3: panel.v1.AgentHello
	(*ModuleSummary)(nil),                  // 4: panel.v1.ModuleSummary
	(*ModuleUpdateProviderSummary)(nil),    // 5: panel.v1.ModuleUpdateProviderSummary
	(*ControllerHello)(nil),                // 6: panel.v1.ControllerHello
	(*Heartbeat)(nil),                      // 7: panel.v1.Heartbeat
	(*Ping)(nil),                           // 8: panel.v1.Ping
	(*Pong)(nil),                           // 9: panel.v1.Pong
	(*ExecRequest)(nil),                    // 10: panel.v1.ExecRequest
	(*CommandResult)(nil),                  // 11: panel.v1.CommandResult
	(*InstanceCreate)(nil),                 // 12: panel.v1.InstanceCreate
	(*InstanceStart)(nil),                  // 13: panel.v1.InstanceStart
	(*InstanceStop)(nil),                   // 14: panel.v1.InstanceStop
	(*InstanceDelete)(nil),                 // 15: panel.v1.InstanceDelete
	(*InstanceStateUpdate)(nil),            // 16: panel.v1.InstanceStateUpdate
	(*AppStateUpdate)(nil),                 // 17: panel.v1.AppStateUpdate
	(*LogLine)(nil),                        // 18: panel.v1.LogLine
	(*InstanceStatsUpdate)(nil),            // 19: panel.v1.InstanceStatsUpdate
	(*RCONCommand)(nil),                    // 20: panel.v1.RCONCommand
	(*RCONResult)(nil),                     // 21: panel.v1.RCONResult
	(*FsEntry)(nil),                        // 22: panel.v1.FsEntry
	(*FsListRequest)(nil),                  // 23: panel.v1.FsListRequest
	(*FsListResult)(nil),                   // 24: panel.v1.FsListResult
	(*FsReadRequest)(nil),                  // 25: panel.v1.FsReadRequest
	(*FsReadResult)(nil),                   // 26: panel.v1.FsReadResult
	(*FsWriteRequest)(nil),                 // 27: panel.v1.FsWriteRequest
	(*FsWriteResult)(nil),                  // 28: panel.v1.FsWriteResult
	(*FsDeleteRequest)(nil),                // 29: panel.v1.FsDeleteRequest
	(*FsDeleteResult)(nil),                 // 30: panel.v1.FsDeleteResult
	(*FsSymlinkRequest)(nil),               // 31: panel.v1.FsSymlinkRequest
	(*FsSymlinkResult)(nil),                // 32: panel.v1.FsSymlinkResult
	(*FsExtractRequest)(nil),               // 33: panel.v1.FsExtractRequest
	(*FsExtractResult)(nil),                // 34: panel.v1.FsExtractResult
	(*FsCompressRequest)(nil),              // 35: panel.v1.FsCompressRequest
	(*FsCompressResult)(nil),               // 36: panel.v1.FsCompressResult
	(*FsRenameRequest)(nil),                // 37: panel.v1.FsRenameRequest
	(*FsRenameResult)(nil),                 // 38: panel.v1.FsRenameResult
	(*FsWriteChunkRequest)(nil),            // 39: panel.v1.FsWriteChunkRequest
	(*FsWriteChunkResult)(nil),             // 40: panel.v1.FsWriteChunkResult
	(*ArkSaveRestoreRequest)(nil),          // 41: panel.v1.ArkSaveRestoreRequest
	(*ArkSaveRestoreResult)(nil),           // 42: panel.v1.ArkSaveRestoreResult
	(*DayzModInstallRequest)(nil),          // 43: panel.v1.DayzModInstallRequest
	(*DayzModInstallResult)(nil),           // 44: panel.v1.DayzModInstallResult
	(*DayzModUninstallRequest)(nil),        // 45: panel.v1.DayzModUninstallRequest
	(*DayzModUninstallResult)(nil),         // 46: panel.v1.DayzModUninstallResult
	(*UpdateRequest)(nil),                  // 47: panel.v1.UpdateRequest
	(*UpdateResult)(nil),                   // 48: panel.v1.UpdateResult
	(*BackupRequest)(nil),                  // 49: panel.v1.BackupRequest
	(*BackupResult)(nil),                   // 50: panel.v1.BackupResult
	(*RestoreRequest)(nil),                 // 51: panel.v1.RestoreRequest
	(*RestoreResult)(nil),                  // 52: panel.v1.RestoreResult
	(*BackupListEntriesRequest)(nil),       // 53: panel.v1.BackupListEntriesRequest
	(*BackupTarEntry)(nil),                 // 54: panel.v1.BackupTarEntry
	(*BackupListEntriesResult)(nil),        // 55: panel.v1.BackupListEntriesResult
	(*BackupReadFileRequest)(nil),          // 56: panel.v1.BackupReadFileRequest
	(*BackupReadFileResult)(nil),           // 57: panel.v1.BackupReadFileResult
	(*PlayerEvent)(nil),                    // 58: panel.v1.PlayerEvent
	(*EmpyrionScenarioInstallRequest)(nil), // 59: panel.v1.EmpyrionScenarioInstallRequest
	(*EmpyrionScenarioInstallResult)(nil),  // 60: panel.v1.EmpyrionScenarioInstallResult
	(*EmpyrionDiscoveriesRequest)(nil),     // 61: panel.v1.EmpyrionDiscoveriesRequest
	(*DiscoveredPOI)(nil),                  // 62: panel.v1.DiscoveredPOI
	(*EmpyrionDiscoveriesResult)(nil),      // 63: panel.v1.EmpyrionDiscoveriesResult
	(*EmpyrionPlayerSummaryRequest)(nil),   // 64: panel.v1.EmpyrionPlayerSummaryRequest
	(*PlayerStatsRow)(nil),                 // 65: panel.v1.PlayerStatsRow
	(*PlayerLoginRow)(nil),                 // 66: panel.v1.PlayerLoginRow
	(*PlayerInventoryItem)(nil),            // 67: panel.v1.PlayerInventoryItem
	(*EmpyrionPlayerSummaryResult)(nil),    // 68: panel.v1.EmpyrionPlayerSummaryResult
	(*RegionScanRequest)(nil),              // 69: panel.v1.RegionScanRequest
	(*AffectedRegionMsg)(nil),              // 70: panel.v1.AffectedRegionMsg
	(*RegionScanResult)(nil),               // 71: panel.v1.RegionScanResult
	(*RegionHealRequest)(nil),              // 72: panel.v1.RegionHealRequest
	(*RegionHealResult)(nil),               // 73: panel.v1.RegionHealResult
	(*InstanceRenderConfigRequest)(nil),    // 74: panel.v1.InstanceRenderConfigRequest
	(*InstanceRenderConfigResult)(nil),     // 75: panel.v1.InstanceRenderConfigResult
	(*SeedModsRequest)(nil),                // 76: panel.v1.SeedModsRequest
	(*SeedModsResult)(nil),                 // 77: panel.v1.SeedModsResult
	(*UpdateCheckRequest)(nil),             // 78: panel.v1.UpdateCheckRequest
	(*UpdateCheckResult)(nil),              // 79: panel.v1.UpdateCheckResult
	nil,                                    // 80: panel.v1.ExecRequest.EnvEntry
	nil,                                    // 81: panel.v1.InstanceCreate.ConfigValuesEntry
	nil,                                    // 82: panel.v1.InstanceCreate.MountOverridesEntry
	nil,                                    // 83: panel.v1.AppStateUpdate.ModuleFieldsEntry
	nil,                                    // 84: panel.v1.InstanceRenderConfigRequest.ConfigValuesEntry
	(*timestamppb.Timestamp)(nil),          // 85: google.protobuf.Timestamp
	(*Error)(nil),                          // 86: panel.v1.Error
	(RunMode)(0),                           // 87: panel.v1.RunMode
	(*ResourceLimits)(nil),                 // 88: panel.v1.ResourceLimits
	(*PortMap)(nil),                        // 89: panel.v1.PortMap
	(InstanceStatus)(0),                    // 90: panel.v1.InstanceStatus
}
var file_panel_v1_agent_proto_depIdxs = []int32{
	85,  // 0: panel.v1.ControllerEnvelope.sent_at:type_name -> google.protobuf.Timestamp
	6,   // 1: panel.v1.ControllerEnvelope.hello:type_name -> panel.v1.ControllerHello
	8,   // 2: panel.v1.ControllerEnvelope.ping:type_name -> panel.v1.Ping
	10,  // 3: panel.v1.ControllerEnvelope.exec:type_name -> panel.v1.ExecRequest
	12,  // 4: panel.v1.ControllerEnvelope.instance_create:type_name -> panel.v1.InstanceCreate
	13,  // 5: panel.v1.ControllerEnvelope.instance_start:type_name -> panel.v1.InstanceStart
	14,  // 6: panel.v1.ControllerEnvelope.instance_stop:type_name -> panel.v1.InstanceStop
	15,  // 7: panel.v1.ControllerEnvelope.instance_delete:type_name -> panel.v1.InstanceDelete
	20,  // 8: panel.v1.ControllerEnvelope.rcon:type_name -> panel.v1.RCONCommand
	23,  // 9: panel.v1.ControllerEnvelope.fs_list:type_name -> panel.v1.FsListRequest
	25,  // 10: panel.v1.ControllerEnvelope.fs_read:type_name -> panel.v1.FsReadRequest
	27,  // 11: panel.v1.ControllerEnvelope.fs_write:type_name -> panel.v1.FsWriteRequest
	29,  // 12: panel.v1.ControllerEnvelope.fs_delete:type_name -> panel.v1.FsDeleteRequest
	31,  // 13: panel.v1.ControllerEnvelope.fs_symlink:type_name -> panel.v1.FsSymlinkRequest
	33,  // 14: panel.v1.ControllerEnvelope.fs_extract:type_name -> panel.v1.FsExtractRequest
	35,  // 15: panel.v1.ControllerEnvelope.fs_compress:type_name -> panel.v1.FsCompressRequest
	37,  // 16: panel.v1.ControllerEnvelope.fs_rename:type_name -> panel.v1.FsRenameRequest
	39,  // 17: panel.v1.ControllerEnvelope.fs_write_chunk:type_name -> panel.v1.FsWriteChunkRequest
	41,  // 18: panel.v1.ControllerEnvelope.ark_save_restore:type_name -> panel.v1.ArkSaveRestoreRequest
	43,  // 19: panel.v1.ControllerEnvelope.dayz_mod_install:type_name -> panel.v1.DayzModInstallRequest
	45,  // 20: panel.v1.ControllerEnvelope.dayz_mod_uninstall:type_name -> panel.v1.DayzModUninstallRequest
	47,  // 21: panel.v1.ControllerEnvelope.update:type_name -> panel.v1.UpdateRequest
	49,  // 22: panel.v1.ControllerEnvelope.backup:type_name -> panel.v1.BackupRequest
	51,  // 23: panel.v1.ControllerEnvelope.restore:type_name -> panel.v1.RestoreRequest
	53,  // 24: panel.v1.ControllerEnvelope.backup_list_entries:type_name -> panel.v1.BackupListEntriesRequest
	56,  // 25: panel.v1.ControllerEnvelope.backup_read_file:type_name -> panel.v1.BackupReadFileRequest
	59,  // 26: panel.v1.ControllerEnvelope.empyrion_scenario_install:type_name -> panel.v1.EmpyrionScenarioInstallRequest
	61,  // 27: panel.v1.ControllerEnvelope.empyrion_discoveries:type_name -> panel.v1.EmpyrionDiscoveriesRequest
	64,  // 28: panel.v1.ControllerEnvelope.empyrion_player_summary:type_name -> panel.v1.EmpyrionPlayerSummaryRequest
	69,  // 29: panel.v1.ControllerEnvelope.region_scan:type_name -> panel.v1.RegionScanRequest
	72,  // 30: panel.v1.ControllerEnvelope.region_heal:type_name -> panel.v1.RegionHealRequest
	74,  // 31: panel.v1.ControllerEnvelope.instance_render_config:type_name -> panel.v1.InstanceRenderConfigRequest
	76,  // 32: panel.v1.ControllerEnvelope.seed_mods:type_name -> panel.v1.SeedModsRequest
	78,  // 33: panel.v1.ControllerEnvelope.update_check:type_name -> panel.v1.UpdateCheckRequest
	85,  // 34: panel.v1.AgentEnvelope.sent_at:type_name -> google.protobuf.Timestamp
	3,   // 35: panel.v1.AgentEnvelope.hello:type_name -> panel.v1.AgentHello
	7,   // 36: panel.v1.AgentEnvelope.heartbeat:type_name -> panel.v1.Heartbeat
	9,   // 37: panel.v1.AgentEnvelope.pong:type_name -> panel.v1.Pong
	11,  // 38: panel.v1.AgentEnvelope.result:type_name -> panel.v1.CommandResult
	16,  // 39: panel.v1.AgentEnvelope.instance_state:type_name -> panel.v1.InstanceStateUpdate
	17,  // 40: panel.v1.AgentEnvelope.app_state:type_name -> panel.v1.AppStateUpdate
	18,  // 41: panel.v1.AgentEnvelope.log:type_name -> panel.v1.LogLine
	58,  // 42: panel.v1.AgentEnvelope.player:type_name -> panel.v1.PlayerEvent
	21,  // 43: panel.v1.AgentEnvelope.rcon_result:type_name -> panel.v1.RCONResult
	24,  // 44: panel.v1.AgentEnvelope.fs_list_result:type_name -> panel.v1.FsListResult
	26,  // 45: panel.v1.AgentEnvelope.fs_read_result:type_name -> panel.v1.FsReadResult
	28,  // 46: panel.v1.AgentEnvelope.fs_write_result:type_name -> panel.v1.FsWriteResult
	30,  // 47: panel.v1.AgentEnvelope.fs_delete_result:type_name -> panel.v1.FsDeleteResult
	32,  // 48: panel.v1.AgentEnvelope.fs_symlink_result:type_name -> panel.v1.FsSymlinkResult
	34,  // 49: panel.v1.AgentEnvelope.fs_extract_result:type_name -> panel.v1.FsExtractResult
	36,  // 50: panel.v1.AgentEnvelope.fs_compress_result:type_name -> panel.v1.FsCompressResult
	38,  // 51: panel.v1.AgentEnvelope.fs_rename_result:type_name -> panel.v1.FsRenameResult
	40,  // 52: panel.v1.AgentEnvelope.fs_write_chunk_result:type_name -> panel.v1.FsWriteChunkResult
	42,  // 53: panel.v1.AgentEnvelope.ark_save_restore_result:type_name -> panel.v1.ArkSaveRestoreResult
	44,  // 54: panel.v1.AgentEnvelope.dayz_mod_install_result:type_name -> panel.v1.DayzModInstallResult
	46,  // 55: panel.v1.AgentEnvelope.dayz_mod_uninstall_result:type_name -> panel.v1.DayzModUninstallResult
	48,  // 56: panel.v1.AgentEnvelope.update_result:type_name -> panel.v1.UpdateResult
	50,  // 57: panel.v1.AgentEnvelope.backup_result:type_name -> panel.v1.BackupResult
	52,  // 58: panel.v1.AgentEnvelope.restore_result:type_name -> panel.v1.RestoreResult
	55,  // 59: panel.v1.AgentEnvelope.backup_list_entries_result:type_name -> panel.v1.BackupListEntriesResult
	57,  // 60: panel.v1.AgentEnvelope.backup_read_file_result:type_name -> panel.v1.BackupReadFileResult
	19,  // 61: panel.v1.AgentEnvelope.instance_stats:type_name -> panel.v1.InstanceStatsUpdate
	60,  // 62: panel.v1.AgentEnvelope.empyrion_scenario_install_result:type_name -> panel.v1.EmpyrionScenarioInstallResult
	63,  // 63: panel.v1.AgentEnvelope.empyrion_discoveries_result:type_name -> panel.v1.EmpyrionDiscoveriesResult
	68,  // 64: panel.v1.AgentEnvelope.empyrion_player_summary_result:type_name -> panel.v1.EmpyrionPlayerSummaryResult
	71,  // 65: panel.v1.AgentEnvelope.region_scan_result:type_name -> panel.v1.RegionScanResult
	73,  // 66: panel.v1.AgentEnvelope.region_heal_result:type_name -> panel.v1.RegionHealResult
	75,  // 67: panel.v1.AgentEnvelope.instance_render_config_result:type_name -> panel.v1.InstanceRenderConfigResult
	77,  // 68: panel.v1.AgentEnvelope.seed_mods_result:type_name -> panel.v1.SeedModsResult
	79,  // 69: panel.v1.AgentEnvelope.update_check_result:type_name -> panel.v1.UpdateCheckResult
	4,   // 70: panel.v1.AgentHello.modules:type_name -> panel.v1.ModuleSummary
	5,   // 71: panel.v1.ModuleSummary.update_providers:type_name -> panel.v1.ModuleUpdateProviderSummary
	85,  // 72: panel.v1.ControllerHello.server_time:type_name -> google.protobuf.Timestamp
	85,  // 73: panel.v1.Heartbeat.at:type_name -> google.protobuf.Timestamp
	80,  // 74: panel.v1.ExecRequest.env:type_name -> panel.v1.ExecRequest.EnvEntry
	86,  // 75: panel.v1.CommandResult.error:type_name -> panel.v1.Error
	87,  // 76: panel.v1.InstanceCreate.run_mode:type_name -> panel.v1.RunMode
	88,  // 77: panel.v1.InstanceCreate.limits:type_name -> panel.v1.ResourceLimits
	81,  // 78: panel.v1.InstanceCreate.config_values:type_name -> panel.v1.InstanceCreate.ConfigValuesEntry
	89,  // 79: panel.v1.InstanceCreate.ports:type_name -> panel.v1.PortMap
	82,  // 80: panel.v1.InstanceCreate.mount_overrides:type_name -> panel.v1.InstanceCreate.MountOverridesEntry
	90,  // 81: panel.v1.InstanceStateUpdate.status:type_name -> panel.v1.InstanceStatus
	85,  // 82: panel.v1.InstanceStateUpdate.at:type_name -> google.protobuf.Timestamp
	83,  // 83: panel.v1.AppStateUpdate.module_fields:type_name -> panel.v1.AppStateUpdate.ModuleFieldsEntry
	85,  // 84: panel.v1.AppStateUpdate.at:type_name -> google.protobuf.Timestamp
	85,  // 85: panel.v1.LogLine.at:type_name -> google.protobuf.Timestamp
	85,  // 86: panel.v1.InstanceStatsUpdate.at:type_name -> google.protobuf.Timestamp
	85,  // 87: panel.v1.FsEntry.mod_time:type_name -> google.protobuf.Timestamp
	22,  // 88: panel.v1.FsListResult.entries:type_name -> panel.v1.FsEntry
	85,  // 89: panel.v1.BackupTarEntry.mod_time:type_name -> google.protobuf.Timestamp
	54,  // 90: panel.v1.BackupListEntriesResult.entries:type_name -> panel.v1.BackupTarEntry
	0,   // 91: panel.v1.PlayerEvent.kind:type_name -> panel.v1.PlayerEvent.Kind
	85,  // 92: panel.v1.PlayerEvent.at:type_name -> google.protobuf.Timestamp
	62,  // 93: panel.v1.EmpyrionDiscoveriesResult.pois:type_name -> panel.v1.DiscoveredPOI
	65,  // 94: panel.v1.EmpyrionPlayerSummaryResult.stats:type_name -> panel.v1.PlayerStatsRow
	66,  // 95: panel.v1.EmpyrionPlayerSummaryResult.sessions:type_name -> panel.v1.PlayerLoginRow
	67,  // 96: panel.v1.EmpyrionPlayerSummaryResult.inventory:type_name -> panel.v1.PlayerInventoryItem
	70,  // 97: panel.v1.RegionScanResult.affected:type_name -> panel.v1.AffectedRegionMsg
	86,  // 98: panel.v1.RegionScanResult.error:type_name -> panel.v1.Error
	86,  // 99: panel.v1.RegionHealResult.error:type_name -> panel.v1.Error
	84,  // 100: panel.v1.InstanceRenderConfigRequest.config_values:type_name -> panel.v1.InstanceRenderConfigRequest.ConfigValuesEntry
	2,   // 101: panel.v1.Agent.Connect:input_type -> panel.v1.AgentEnvelope
	1,   // 102: panel.v1.Agent.Connect:output_type -> panel.v1.ControllerEnvelope
	102, // [102:103] is the sub-list for method output_type
	101, // [101:102] is the sub-list for method input_type
	101, // [101:101] is the sub-list for extension type_name
	101, // [101:101] is the sub-list for extension extendee
	0,   // [0:101] is the sub-list for field type_name
}

func init() { file_panel_v1_agent_proto_init() }
func file_panel_v1_agent_proto_init() {
	if File_panel_v1_agent_proto != nil {
		return
	}
	file_panel_v1_common_proto_init()
	file_panel_v1_agent_proto_msgTypes[0].OneofWrappers = []any{
		(*ControllerEnvelope_Hello)(nil),
		(*ControllerEnvelope_Ping)(nil),
		(*ControllerEnvelope_Exec)(nil),
		(*ControllerEnvelope_InstanceCreate)(nil),
		(*ControllerEnvelope_InstanceStart)(nil),
		(*ControllerEnvelope_InstanceStop)(nil),
		(*ControllerEnvelope_InstanceDelete)(nil),
		(*ControllerEnvelope_Rcon)(nil),
		(*ControllerEnvelope_FsList)(nil),
		(*ControllerEnvelope_FsRead)(nil),
		(*ControllerEnvelope_FsWrite)(nil),
		(*ControllerEnvelope_FsDelete)(nil),
		(*ControllerEnvelope_FsSymlink)(nil),
		(*ControllerEnvelope_FsExtract)(nil),
		(*ControllerEnvelope_FsCompress)(nil),
		(*ControllerEnvelope_FsRename)(nil),
		(*ControllerEnvelope_FsWriteChunk)(nil),
		(*ControllerEnvelope_ArkSaveRestore)(nil),
		(*ControllerEnvelope_DayzModInstall)(nil),
		(*ControllerEnvelope_DayzModUninstall)(nil),
		(*ControllerEnvelope_Update)(nil),
		(*ControllerEnvelope_Backup)(nil),
		(*ControllerEnvelope_Restore)(nil),
		(*ControllerEnvelope_BackupListEntries)(nil),
		(*ControllerEnvelope_BackupReadFile)(nil),
		(*ControllerEnvelope_EmpyrionScenarioInstall)(nil),
		(*ControllerEnvelope_EmpyrionDiscoveries)(nil),
		(*ControllerEnvelope_EmpyrionPlayerSummary)(nil),
		(*ControllerEnvelope_RegionScan)(nil),
		(*ControllerEnvelope_RegionHeal)(nil),
		(*ControllerEnvelope_InstanceRenderConfig)(nil),
		(*ControllerEnvelope_SeedMods)(nil),
		(*ControllerEnvelope_UpdateCheck)(nil),
	}
	file_panel_v1_agent_proto_msgTypes[1].OneofWrappers = []any{
		(*AgentEnvelope_Hello)(nil),
		(*AgentEnvelope_Heartbeat)(nil),
		(*AgentEnvelope_Pong)(nil),
		(*AgentEnvelope_Result)(nil),
		(*AgentEnvelope_InstanceState)(nil),
		(*AgentEnvelope_AppState)(nil),
		(*AgentEnvelope_Log)(nil),
		(*AgentEnvelope_Player)(nil),
		(*AgentEnvelope_RconResult)(nil),
		(*AgentEnvelope_FsListResult)(nil),
		(*AgentEnvelope_FsReadResult)(nil),
		(*AgentEnvelope_FsWriteResult)(nil),
		(*AgentEnvelope_FsDeleteResult)(nil),
		(*AgentEnvelope_FsSymlinkResult)(nil),
		(*AgentEnvelope_FsExtractResult)(nil),
		(*AgentEnvelope_FsCompressResult)(nil),
		(*AgentEnvelope_FsRenameResult)(nil),
		(*AgentEnvelope_FsWriteChunkResult)(nil),
		(*AgentEnvelope_ArkSaveRestoreResult)(nil),
		(*AgentEnvelope_DayzModInstallResult)(nil),
		(*AgentEnvelope_DayzModUninstallResult)(nil),
		(*AgentEnvelope_UpdateResult)(nil),
		(*AgentEnvelope_BackupResult)(nil),
		(*AgentEnvelope_RestoreResult)(nil),
		(*AgentEnvelope_BackupListEntriesResult)(nil),
		(*AgentEnvelope_BackupReadFileResult)(nil),
		(*AgentEnvelope_InstanceStats)(nil),
		(*AgentEnvelope_EmpyrionScenarioInstallResult)(nil),
		(*AgentEnvelope_EmpyrionDiscoveriesResult)(nil),
		(*AgentEnvelope_EmpyrionPlayerSummaryResult)(nil),
		(*AgentEnvelope_RegionScanResult)(nil),
		(*AgentEnvelope_RegionHealResult)(nil),
		(*AgentEnvelope_InstanceRenderConfigResult)(nil),
		(*AgentEnvelope_SeedModsResult)(nil),
		(*AgentEnvelope_UpdateCheckResult)(nil),
	}
	type x struct{}
	out := protoimpl.TypeBuilder{
		File: protoimpl.DescBuilder{
			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
			RawDescriptor: unsafe.Slice(unsafe.StringData(file_panel_v1_agent_proto_rawDesc), len(file_panel_v1_agent_proto_rawDesc)),
			NumEnums:      1,
			NumMessages:   84,
			NumExtensions: 0,
			NumServices:   1,
		},
		GoTypes:           file_panel_v1_agent_proto_goTypes,
		DependencyIndexes: file_panel_v1_agent_proto_depIdxs,
		EnumInfos:         file_panel_v1_agent_proto_enumTypes,
		MessageInfos:      file_panel_v1_agent_proto_msgTypes,
	}.Build()
	File_panel_v1_agent_proto = out.File
	file_panel_v1_agent_proto_goTypes = nil
	file_panel_v1_agent_proto_depIdxs = nil
}
