diff --git a/PROGRESS_V1.md b/PROGRESS_V1.md index 0a01bbe..838b670 100644 --- a/PROGRESS_V1.md +++ b/PROGRESS_V1.md @@ -3,7 +3,7 @@ ## Phase 0: Project Scaffolding - [x] **P0.1** Repository and module setup -- [ ] **P0.2** Proto definitions and code generation +- [x] **P0.2** Proto definitions and code generation ## Phase 1: Core Libraries diff --git a/buf.yaml b/buf.yaml new file mode 100644 index 0000000..c7e30e3 --- /dev/null +++ b/buf.yaml @@ -0,0 +1,9 @@ +version: v2 +modules: + - path: proto +lint: + use: + - STANDARD +breaking: + use: + - FILE diff --git a/gen/mcp/v1/mcp.pb.go b/gen/mcp/v1/mcp.pb.go new file mode 100644 index 0000000..92b1e63 --- /dev/null +++ b/gen/mcp/v1/mcp.pb.go @@ -0,0 +1,2128 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.36.11 +// protoc v6.32.1 +// source: proto/mcp/v1/mcp.proto + +package mcpv1 + +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 ComponentSpec struct { + state protoimpl.MessageState `protogen:"open.v1"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Image string `protobuf:"bytes,2,opt,name=image,proto3" json:"image,omitempty"` + Network string `protobuf:"bytes,3,opt,name=network,proto3" json:"network,omitempty"` + User string `protobuf:"bytes,4,opt,name=user,proto3" json:"user,omitempty"` + Restart string `protobuf:"bytes,5,opt,name=restart,proto3" json:"restart,omitempty"` + Ports []string `protobuf:"bytes,6,rep,name=ports,proto3" json:"ports,omitempty"` + Volumes []string `protobuf:"bytes,7,rep,name=volumes,proto3" json:"volumes,omitempty"` + Cmd []string `protobuf:"bytes,8,rep,name=cmd,proto3" json:"cmd,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ComponentSpec) Reset() { + *x = ComponentSpec{} + mi := &file_proto_mcp_v1_mcp_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ComponentSpec) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ComponentSpec) ProtoMessage() {} + +func (x *ComponentSpec) ProtoReflect() protoreflect.Message { + mi := &file_proto_mcp_v1_mcp_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 ComponentSpec.ProtoReflect.Descriptor instead. +func (*ComponentSpec) Descriptor() ([]byte, []int) { + return file_proto_mcp_v1_mcp_proto_rawDescGZIP(), []int{0} +} + +func (x *ComponentSpec) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *ComponentSpec) GetImage() string { + if x != nil { + return x.Image + } + return "" +} + +func (x *ComponentSpec) GetNetwork() string { + if x != nil { + return x.Network + } + return "" +} + +func (x *ComponentSpec) GetUser() string { + if x != nil { + return x.User + } + return "" +} + +func (x *ComponentSpec) GetRestart() string { + if x != nil { + return x.Restart + } + return "" +} + +func (x *ComponentSpec) GetPorts() []string { + if x != nil { + return x.Ports + } + return nil +} + +func (x *ComponentSpec) GetVolumes() []string { + if x != nil { + return x.Volumes + } + return nil +} + +func (x *ComponentSpec) GetCmd() []string { + if x != nil { + return x.Cmd + } + return nil +} + +type ServiceSpec struct { + state protoimpl.MessageState `protogen:"open.v1"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Active bool `protobuf:"varint,2,opt,name=active,proto3" json:"active,omitempty"` + Components []*ComponentSpec `protobuf:"bytes,3,rep,name=components,proto3" json:"components,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ServiceSpec) Reset() { + *x = ServiceSpec{} + mi := &file_proto_mcp_v1_mcp_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ServiceSpec) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ServiceSpec) ProtoMessage() {} + +func (x *ServiceSpec) ProtoReflect() protoreflect.Message { + mi := &file_proto_mcp_v1_mcp_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 ServiceSpec.ProtoReflect.Descriptor instead. +func (*ServiceSpec) Descriptor() ([]byte, []int) { + return file_proto_mcp_v1_mcp_proto_rawDescGZIP(), []int{1} +} + +func (x *ServiceSpec) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *ServiceSpec) GetActive() bool { + if x != nil { + return x.Active + } + return false +} + +func (x *ServiceSpec) GetComponents() []*ComponentSpec { + if x != nil { + return x.Components + } + return nil +} + +type DeployRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Service *ServiceSpec `protobuf:"bytes,1,opt,name=service,proto3" json:"service,omitempty"` + // Deploy a single component by name. Empty means deploy all. + Component string `protobuf:"bytes,2,opt,name=component,proto3" json:"component,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *DeployRequest) Reset() { + *x = DeployRequest{} + mi := &file_proto_mcp_v1_mcp_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *DeployRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeployRequest) ProtoMessage() {} + +func (x *DeployRequest) ProtoReflect() protoreflect.Message { + mi := &file_proto_mcp_v1_mcp_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 DeployRequest.ProtoReflect.Descriptor instead. +func (*DeployRequest) Descriptor() ([]byte, []int) { + return file_proto_mcp_v1_mcp_proto_rawDescGZIP(), []int{2} +} + +func (x *DeployRequest) GetService() *ServiceSpec { + if x != nil { + return x.Service + } + return nil +} + +func (x *DeployRequest) GetComponent() string { + if x != nil { + return x.Component + } + return "" +} + +type DeployResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Results []*ComponentResult `protobuf:"bytes,1,rep,name=results,proto3" json:"results,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *DeployResponse) Reset() { + *x = DeployResponse{} + mi := &file_proto_mcp_v1_mcp_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *DeployResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeployResponse) ProtoMessage() {} + +func (x *DeployResponse) ProtoReflect() protoreflect.Message { + mi := &file_proto_mcp_v1_mcp_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 DeployResponse.ProtoReflect.Descriptor instead. +func (*DeployResponse) Descriptor() ([]byte, []int) { + return file_proto_mcp_v1_mcp_proto_rawDescGZIP(), []int{3} +} + +func (x *DeployResponse) GetResults() []*ComponentResult { + if x != nil { + return x.Results + } + return nil +} + +type ComponentResult struct { + state protoimpl.MessageState `protogen:"open.v1"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Success bool `protobuf:"varint,2,opt,name=success,proto3" json:"success,omitempty"` + Error string `protobuf:"bytes,3,opt,name=error,proto3" json:"error,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ComponentResult) Reset() { + *x = ComponentResult{} + mi := &file_proto_mcp_v1_mcp_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ComponentResult) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ComponentResult) ProtoMessage() {} + +func (x *ComponentResult) ProtoReflect() protoreflect.Message { + mi := &file_proto_mcp_v1_mcp_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 ComponentResult.ProtoReflect.Descriptor instead. +func (*ComponentResult) Descriptor() ([]byte, []int) { + return file_proto_mcp_v1_mcp_proto_rawDescGZIP(), []int{4} +} + +func (x *ComponentResult) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *ComponentResult) GetSuccess() bool { + if x != nil { + return x.Success + } + return false +} + +func (x *ComponentResult) GetError() string { + if x != nil { + return x.Error + } + return "" +} + +type StopServiceRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *StopServiceRequest) Reset() { + *x = StopServiceRequest{} + mi := &file_proto_mcp_v1_mcp_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *StopServiceRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StopServiceRequest) ProtoMessage() {} + +func (x *StopServiceRequest) ProtoReflect() protoreflect.Message { + mi := &file_proto_mcp_v1_mcp_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 StopServiceRequest.ProtoReflect.Descriptor instead. +func (*StopServiceRequest) Descriptor() ([]byte, []int) { + return file_proto_mcp_v1_mcp_proto_rawDescGZIP(), []int{5} +} + +func (x *StopServiceRequest) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +type StopServiceResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Results []*ComponentResult `protobuf:"bytes,1,rep,name=results,proto3" json:"results,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *StopServiceResponse) Reset() { + *x = StopServiceResponse{} + mi := &file_proto_mcp_v1_mcp_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *StopServiceResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StopServiceResponse) ProtoMessage() {} + +func (x *StopServiceResponse) ProtoReflect() protoreflect.Message { + mi := &file_proto_mcp_v1_mcp_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 StopServiceResponse.ProtoReflect.Descriptor instead. +func (*StopServiceResponse) Descriptor() ([]byte, []int) { + return file_proto_mcp_v1_mcp_proto_rawDescGZIP(), []int{6} +} + +func (x *StopServiceResponse) GetResults() []*ComponentResult { + if x != nil { + return x.Results + } + return nil +} + +type StartServiceRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *StartServiceRequest) Reset() { + *x = StartServiceRequest{} + mi := &file_proto_mcp_v1_mcp_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *StartServiceRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StartServiceRequest) ProtoMessage() {} + +func (x *StartServiceRequest) ProtoReflect() protoreflect.Message { + mi := &file_proto_mcp_v1_mcp_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 StartServiceRequest.ProtoReflect.Descriptor instead. +func (*StartServiceRequest) Descriptor() ([]byte, []int) { + return file_proto_mcp_v1_mcp_proto_rawDescGZIP(), []int{7} +} + +func (x *StartServiceRequest) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +type StartServiceResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Results []*ComponentResult `protobuf:"bytes,1,rep,name=results,proto3" json:"results,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *StartServiceResponse) Reset() { + *x = StartServiceResponse{} + mi := &file_proto_mcp_v1_mcp_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *StartServiceResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StartServiceResponse) ProtoMessage() {} + +func (x *StartServiceResponse) ProtoReflect() protoreflect.Message { + mi := &file_proto_mcp_v1_mcp_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 StartServiceResponse.ProtoReflect.Descriptor instead. +func (*StartServiceResponse) Descriptor() ([]byte, []int) { + return file_proto_mcp_v1_mcp_proto_rawDescGZIP(), []int{8} +} + +func (x *StartServiceResponse) GetResults() []*ComponentResult { + if x != nil { + return x.Results + } + return nil +} + +type RestartServiceRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RestartServiceRequest) Reset() { + *x = RestartServiceRequest{} + mi := &file_proto_mcp_v1_mcp_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RestartServiceRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RestartServiceRequest) ProtoMessage() {} + +func (x *RestartServiceRequest) ProtoReflect() protoreflect.Message { + mi := &file_proto_mcp_v1_mcp_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 RestartServiceRequest.ProtoReflect.Descriptor instead. +func (*RestartServiceRequest) Descriptor() ([]byte, []int) { + return file_proto_mcp_v1_mcp_proto_rawDescGZIP(), []int{9} +} + +func (x *RestartServiceRequest) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +type RestartServiceResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Results []*ComponentResult `protobuf:"bytes,1,rep,name=results,proto3" json:"results,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RestartServiceResponse) Reset() { + *x = RestartServiceResponse{} + mi := &file_proto_mcp_v1_mcp_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RestartServiceResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RestartServiceResponse) ProtoMessage() {} + +func (x *RestartServiceResponse) ProtoReflect() protoreflect.Message { + mi := &file_proto_mcp_v1_mcp_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 RestartServiceResponse.ProtoReflect.Descriptor instead. +func (*RestartServiceResponse) Descriptor() ([]byte, []int) { + return file_proto_mcp_v1_mcp_proto_rawDescGZIP(), []int{10} +} + +func (x *RestartServiceResponse) GetResults() []*ComponentResult { + if x != nil { + return x.Results + } + return nil +} + +type SyncDesiredStateRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + // All services for this node. + Services []*ServiceSpec `protobuf:"bytes,1,rep,name=services,proto3" json:"services,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SyncDesiredStateRequest) Reset() { + *x = SyncDesiredStateRequest{} + mi := &file_proto_mcp_v1_mcp_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SyncDesiredStateRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SyncDesiredStateRequest) ProtoMessage() {} + +func (x *SyncDesiredStateRequest) ProtoReflect() protoreflect.Message { + mi := &file_proto_mcp_v1_mcp_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 SyncDesiredStateRequest.ProtoReflect.Descriptor instead. +func (*SyncDesiredStateRequest) Descriptor() ([]byte, []int) { + return file_proto_mcp_v1_mcp_proto_rawDescGZIP(), []int{11} +} + +func (x *SyncDesiredStateRequest) GetServices() []*ServiceSpec { + if x != nil { + return x.Services + } + return nil +} + +type SyncDesiredStateResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Results []*ServiceSyncResult `protobuf:"bytes,1,rep,name=results,proto3" json:"results,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SyncDesiredStateResponse) Reset() { + *x = SyncDesiredStateResponse{} + mi := &file_proto_mcp_v1_mcp_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SyncDesiredStateResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SyncDesiredStateResponse) ProtoMessage() {} + +func (x *SyncDesiredStateResponse) ProtoReflect() protoreflect.Message { + mi := &file_proto_mcp_v1_mcp_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 SyncDesiredStateResponse.ProtoReflect.Descriptor instead. +func (*SyncDesiredStateResponse) Descriptor() ([]byte, []int) { + return file_proto_mcp_v1_mcp_proto_rawDescGZIP(), []int{12} +} + +func (x *SyncDesiredStateResponse) GetResults() []*ServiceSyncResult { + if x != nil { + return x.Results + } + return nil +} + +type ServiceSyncResult struct { + state protoimpl.MessageState `protogen:"open.v1"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // Whether the desired state was updated. + Changed bool `protobuf:"varint,2,opt,name=changed,proto3" json:"changed,omitempty"` + Summary string `protobuf:"bytes,3,opt,name=summary,proto3" json:"summary,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ServiceSyncResult) Reset() { + *x = ServiceSyncResult{} + mi := &file_proto_mcp_v1_mcp_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ServiceSyncResult) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ServiceSyncResult) ProtoMessage() {} + +func (x *ServiceSyncResult) ProtoReflect() protoreflect.Message { + mi := &file_proto_mcp_v1_mcp_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 ServiceSyncResult.ProtoReflect.Descriptor instead. +func (*ServiceSyncResult) Descriptor() ([]byte, []int) { + return file_proto_mcp_v1_mcp_proto_rawDescGZIP(), []int{13} +} + +func (x *ServiceSyncResult) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *ServiceSyncResult) GetChanged() bool { + if x != nil { + return x.Changed + } + return false +} + +func (x *ServiceSyncResult) GetSummary() string { + if x != nil { + return x.Summary + } + return "" +} + +type ListServicesRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ListServicesRequest) Reset() { + *x = ListServicesRequest{} + mi := &file_proto_mcp_v1_mcp_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ListServicesRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListServicesRequest) ProtoMessage() {} + +func (x *ListServicesRequest) ProtoReflect() protoreflect.Message { + mi := &file_proto_mcp_v1_mcp_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 ListServicesRequest.ProtoReflect.Descriptor instead. +func (*ListServicesRequest) Descriptor() ([]byte, []int) { + return file_proto_mcp_v1_mcp_proto_rawDescGZIP(), []int{14} +} + +type ServiceInfo struct { + state protoimpl.MessageState `protogen:"open.v1"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Active bool `protobuf:"varint,2,opt,name=active,proto3" json:"active,omitempty"` + Components []*ComponentInfo `protobuf:"bytes,3,rep,name=components,proto3" json:"components,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ServiceInfo) Reset() { + *x = ServiceInfo{} + mi := &file_proto_mcp_v1_mcp_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ServiceInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ServiceInfo) ProtoMessage() {} + +func (x *ServiceInfo) ProtoReflect() protoreflect.Message { + mi := &file_proto_mcp_v1_mcp_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 ServiceInfo.ProtoReflect.Descriptor instead. +func (*ServiceInfo) Descriptor() ([]byte, []int) { + return file_proto_mcp_v1_mcp_proto_rawDescGZIP(), []int{15} +} + +func (x *ServiceInfo) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *ServiceInfo) GetActive() bool { + if x != nil { + return x.Active + } + return false +} + +func (x *ServiceInfo) GetComponents() []*ComponentInfo { + if x != nil { + return x.Components + } + return nil +} + +type ComponentInfo struct { + state protoimpl.MessageState `protogen:"open.v1"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Image string `protobuf:"bytes,2,opt,name=image,proto3" json:"image,omitempty"` + // "running", "stopped", "ignore" + DesiredState string `protobuf:"bytes,3,opt,name=desired_state,json=desiredState,proto3" json:"desired_state,omitempty"` + // "running", "stopped", "exited", "removed", "unknown" + ObservedState string `protobuf:"bytes,4,opt,name=observed_state,json=observedState,proto3" json:"observed_state,omitempty"` + // Extracted from the image tag. + Version string `protobuf:"bytes,5,opt,name=version,proto3" json:"version,omitempty"` + Started *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=started,proto3" json:"started,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ComponentInfo) Reset() { + *x = ComponentInfo{} + mi := &file_proto_mcp_v1_mcp_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ComponentInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ComponentInfo) ProtoMessage() {} + +func (x *ComponentInfo) ProtoReflect() protoreflect.Message { + mi := &file_proto_mcp_v1_mcp_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 ComponentInfo.ProtoReflect.Descriptor instead. +func (*ComponentInfo) Descriptor() ([]byte, []int) { + return file_proto_mcp_v1_mcp_proto_rawDescGZIP(), []int{16} +} + +func (x *ComponentInfo) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *ComponentInfo) GetImage() string { + if x != nil { + return x.Image + } + return "" +} + +func (x *ComponentInfo) GetDesiredState() string { + if x != nil { + return x.DesiredState + } + return "" +} + +func (x *ComponentInfo) GetObservedState() string { + if x != nil { + return x.ObservedState + } + return "" +} + +func (x *ComponentInfo) GetVersion() string { + if x != nil { + return x.Version + } + return "" +} + +func (x *ComponentInfo) GetStarted() *timestamppb.Timestamp { + if x != nil { + return x.Started + } + return nil +} + +type ListServicesResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Services []*ServiceInfo `protobuf:"bytes,1,rep,name=services,proto3" json:"services,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ListServicesResponse) Reset() { + *x = ListServicesResponse{} + mi := &file_proto_mcp_v1_mcp_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ListServicesResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListServicesResponse) ProtoMessage() {} + +func (x *ListServicesResponse) ProtoReflect() protoreflect.Message { + mi := &file_proto_mcp_v1_mcp_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 ListServicesResponse.ProtoReflect.Descriptor instead. +func (*ListServicesResponse) Descriptor() ([]byte, []int) { + return file_proto_mcp_v1_mcp_proto_rawDescGZIP(), []int{17} +} + +func (x *ListServicesResponse) GetServices() []*ServiceInfo { + if x != nil { + return x.Services + } + return nil +} + +type GetServiceStatusRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Empty means all services. + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *GetServiceStatusRequest) Reset() { + *x = GetServiceStatusRequest{} + mi := &file_proto_mcp_v1_mcp_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GetServiceStatusRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetServiceStatusRequest) ProtoMessage() {} + +func (x *GetServiceStatusRequest) ProtoReflect() protoreflect.Message { + mi := &file_proto_mcp_v1_mcp_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 GetServiceStatusRequest.ProtoReflect.Descriptor instead. +func (*GetServiceStatusRequest) Descriptor() ([]byte, []int) { + return file_proto_mcp_v1_mcp_proto_rawDescGZIP(), []int{18} +} + +func (x *GetServiceStatusRequest) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +type DriftInfo struct { + state protoimpl.MessageState `protogen:"open.v1"` + Service string `protobuf:"bytes,1,opt,name=service,proto3" json:"service,omitempty"` + Component string `protobuf:"bytes,2,opt,name=component,proto3" json:"component,omitempty"` + DesiredState string `protobuf:"bytes,3,opt,name=desired_state,json=desiredState,proto3" json:"desired_state,omitempty"` + ObservedState string `protobuf:"bytes,4,opt,name=observed_state,json=observedState,proto3" json:"observed_state,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *DriftInfo) Reset() { + *x = DriftInfo{} + mi := &file_proto_mcp_v1_mcp_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *DriftInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DriftInfo) ProtoMessage() {} + +func (x *DriftInfo) ProtoReflect() protoreflect.Message { + mi := &file_proto_mcp_v1_mcp_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 DriftInfo.ProtoReflect.Descriptor instead. +func (*DriftInfo) Descriptor() ([]byte, []int) { + return file_proto_mcp_v1_mcp_proto_rawDescGZIP(), []int{19} +} + +func (x *DriftInfo) GetService() string { + if x != nil { + return x.Service + } + return "" +} + +func (x *DriftInfo) GetComponent() string { + if x != nil { + return x.Component + } + return "" +} + +func (x *DriftInfo) GetDesiredState() string { + if x != nil { + return x.DesiredState + } + return "" +} + +func (x *DriftInfo) GetObservedState() string { + if x != nil { + return x.ObservedState + } + return "" +} + +type EventInfo struct { + state protoimpl.MessageState `protogen:"open.v1"` + Service string `protobuf:"bytes,1,opt,name=service,proto3" json:"service,omitempty"` + Component string `protobuf:"bytes,2,opt,name=component,proto3" json:"component,omitempty"` + PrevState string `protobuf:"bytes,3,opt,name=prev_state,json=prevState,proto3" json:"prev_state,omitempty"` + NewState string `protobuf:"bytes,4,opt,name=new_state,json=newState,proto3" json:"new_state,omitempty"` + Timestamp *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *EventInfo) Reset() { + *x = EventInfo{} + mi := &file_proto_mcp_v1_mcp_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *EventInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EventInfo) ProtoMessage() {} + +func (x *EventInfo) ProtoReflect() protoreflect.Message { + mi := &file_proto_mcp_v1_mcp_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 EventInfo.ProtoReflect.Descriptor instead. +func (*EventInfo) Descriptor() ([]byte, []int) { + return file_proto_mcp_v1_mcp_proto_rawDescGZIP(), []int{20} +} + +func (x *EventInfo) GetService() string { + if x != nil { + return x.Service + } + return "" +} + +func (x *EventInfo) GetComponent() string { + if x != nil { + return x.Component + } + return "" +} + +func (x *EventInfo) GetPrevState() string { + if x != nil { + return x.PrevState + } + return "" +} + +func (x *EventInfo) GetNewState() string { + if x != nil { + return x.NewState + } + return "" +} + +func (x *EventInfo) GetTimestamp() *timestamppb.Timestamp { + if x != nil { + return x.Timestamp + } + return nil +} + +type GetServiceStatusResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Services []*ServiceInfo `protobuf:"bytes,1,rep,name=services,proto3" json:"services,omitempty"` + Drift []*DriftInfo `protobuf:"bytes,2,rep,name=drift,proto3" json:"drift,omitempty"` + RecentEvents []*EventInfo `protobuf:"bytes,3,rep,name=recent_events,json=recentEvents,proto3" json:"recent_events,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *GetServiceStatusResponse) Reset() { + *x = GetServiceStatusResponse{} + mi := &file_proto_mcp_v1_mcp_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GetServiceStatusResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetServiceStatusResponse) ProtoMessage() {} + +func (x *GetServiceStatusResponse) ProtoReflect() protoreflect.Message { + mi := &file_proto_mcp_v1_mcp_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 GetServiceStatusResponse.ProtoReflect.Descriptor instead. +func (*GetServiceStatusResponse) Descriptor() ([]byte, []int) { + return file_proto_mcp_v1_mcp_proto_rawDescGZIP(), []int{21} +} + +func (x *GetServiceStatusResponse) GetServices() []*ServiceInfo { + if x != nil { + return x.Services + } + return nil +} + +func (x *GetServiceStatusResponse) GetDrift() []*DriftInfo { + if x != nil { + return x.Drift + } + return nil +} + +func (x *GetServiceStatusResponse) GetRecentEvents() []*EventInfo { + if x != nil { + return x.RecentEvents + } + return nil +} + +type LiveCheckRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *LiveCheckRequest) Reset() { + *x = LiveCheckRequest{} + mi := &file_proto_mcp_v1_mcp_proto_msgTypes[22] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *LiveCheckRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LiveCheckRequest) ProtoMessage() {} + +func (x *LiveCheckRequest) ProtoReflect() protoreflect.Message { + mi := &file_proto_mcp_v1_mcp_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 LiveCheckRequest.ProtoReflect.Descriptor instead. +func (*LiveCheckRequest) Descriptor() ([]byte, []int) { + return file_proto_mcp_v1_mcp_proto_rawDescGZIP(), []int{22} +} + +type LiveCheckResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Services with freshly observed state from the container runtime. + Services []*ServiceInfo `protobuf:"bytes,1,rep,name=services,proto3" json:"services,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *LiveCheckResponse) Reset() { + *x = LiveCheckResponse{} + mi := &file_proto_mcp_v1_mcp_proto_msgTypes[23] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *LiveCheckResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LiveCheckResponse) ProtoMessage() {} + +func (x *LiveCheckResponse) ProtoReflect() protoreflect.Message { + mi := &file_proto_mcp_v1_mcp_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 LiveCheckResponse.ProtoReflect.Descriptor instead. +func (*LiveCheckResponse) Descriptor() ([]byte, []int) { + return file_proto_mcp_v1_mcp_proto_rawDescGZIP(), []int{23} +} + +func (x *LiveCheckResponse) GetServices() []*ServiceInfo { + if x != nil { + return x.Services + } + return nil +} + +type AdoptContainersRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Service name. The agent matches containers named -*. + Service string `protobuf:"bytes,1,opt,name=service,proto3" json:"service,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *AdoptContainersRequest) Reset() { + *x = AdoptContainersRequest{} + mi := &file_proto_mcp_v1_mcp_proto_msgTypes[24] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *AdoptContainersRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AdoptContainersRequest) ProtoMessage() {} + +func (x *AdoptContainersRequest) ProtoReflect() protoreflect.Message { + mi := &file_proto_mcp_v1_mcp_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 AdoptContainersRequest.ProtoReflect.Descriptor instead. +func (*AdoptContainersRequest) Descriptor() ([]byte, []int) { + return file_proto_mcp_v1_mcp_proto_rawDescGZIP(), []int{24} +} + +func (x *AdoptContainersRequest) GetService() string { + if x != nil { + return x.Service + } + return "" +} + +type AdoptResult struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Runtime container name (e.g., "metacrypt-api"). + Container string `protobuf:"bytes,1,opt,name=container,proto3" json:"container,omitempty"` + // Derived component name (e.g., "api"). + Component string `protobuf:"bytes,2,opt,name=component,proto3" json:"component,omitempty"` + Success bool `protobuf:"varint,3,opt,name=success,proto3" json:"success,omitempty"` + Error string `protobuf:"bytes,4,opt,name=error,proto3" json:"error,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *AdoptResult) Reset() { + *x = AdoptResult{} + mi := &file_proto_mcp_v1_mcp_proto_msgTypes[25] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *AdoptResult) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AdoptResult) ProtoMessage() {} + +func (x *AdoptResult) ProtoReflect() protoreflect.Message { + mi := &file_proto_mcp_v1_mcp_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 AdoptResult.ProtoReflect.Descriptor instead. +func (*AdoptResult) Descriptor() ([]byte, []int) { + return file_proto_mcp_v1_mcp_proto_rawDescGZIP(), []int{25} +} + +func (x *AdoptResult) GetContainer() string { + if x != nil { + return x.Container + } + return "" +} + +func (x *AdoptResult) GetComponent() string { + if x != nil { + return x.Component + } + return "" +} + +func (x *AdoptResult) GetSuccess() bool { + if x != nil { + return x.Success + } + return false +} + +func (x *AdoptResult) GetError() string { + if x != nil { + return x.Error + } + return "" +} + +type AdoptContainersResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Results []*AdoptResult `protobuf:"bytes,1,rep,name=results,proto3" json:"results,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *AdoptContainersResponse) Reset() { + *x = AdoptContainersResponse{} + mi := &file_proto_mcp_v1_mcp_proto_msgTypes[26] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *AdoptContainersResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AdoptContainersResponse) ProtoMessage() {} + +func (x *AdoptContainersResponse) ProtoReflect() protoreflect.Message { + mi := &file_proto_mcp_v1_mcp_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 AdoptContainersResponse.ProtoReflect.Descriptor instead. +func (*AdoptContainersResponse) Descriptor() ([]byte, []int) { + return file_proto_mcp_v1_mcp_proto_rawDescGZIP(), []int{26} +} + +func (x *AdoptContainersResponse) GetResults() []*AdoptResult { + if x != nil { + return x.Results + } + return nil +} + +type PushFileRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Service string `protobuf:"bytes,1,opt,name=service,proto3" json:"service,omitempty"` + // Relative path within the service directory. + Path string `protobuf:"bytes,2,opt,name=path,proto3" json:"path,omitempty"` + Content []byte `protobuf:"bytes,3,opt,name=content,proto3" json:"content,omitempty"` + // File permissions (e.g., 0600). + Mode uint32 `protobuf:"varint,4,opt,name=mode,proto3" json:"mode,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *PushFileRequest) Reset() { + *x = PushFileRequest{} + mi := &file_proto_mcp_v1_mcp_proto_msgTypes[27] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *PushFileRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PushFileRequest) ProtoMessage() {} + +func (x *PushFileRequest) ProtoReflect() protoreflect.Message { + mi := &file_proto_mcp_v1_mcp_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 PushFileRequest.ProtoReflect.Descriptor instead. +func (*PushFileRequest) Descriptor() ([]byte, []int) { + return file_proto_mcp_v1_mcp_proto_rawDescGZIP(), []int{27} +} + +func (x *PushFileRequest) GetService() string { + if x != nil { + return x.Service + } + return "" +} + +func (x *PushFileRequest) GetPath() string { + if x != nil { + return x.Path + } + return "" +} + +func (x *PushFileRequest) GetContent() []byte { + if x != nil { + return x.Content + } + return nil +} + +func (x *PushFileRequest) GetMode() uint32 { + if x != nil { + return x.Mode + } + return 0 +} + +type PushFileResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Success bool `protobuf:"varint,1,opt,name=success,proto3" json:"success,omitempty"` + Error string `protobuf:"bytes,2,opt,name=error,proto3" json:"error,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *PushFileResponse) Reset() { + *x = PushFileResponse{} + mi := &file_proto_mcp_v1_mcp_proto_msgTypes[28] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *PushFileResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PushFileResponse) ProtoMessage() {} + +func (x *PushFileResponse) ProtoReflect() protoreflect.Message { + mi := &file_proto_mcp_v1_mcp_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 PushFileResponse.ProtoReflect.Descriptor instead. +func (*PushFileResponse) Descriptor() ([]byte, []int) { + return file_proto_mcp_v1_mcp_proto_rawDescGZIP(), []int{28} +} + +func (x *PushFileResponse) GetSuccess() bool { + if x != nil { + return x.Success + } + return false +} + +func (x *PushFileResponse) GetError() string { + if x != nil { + return x.Error + } + return "" +} + +type PullFileRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Service string `protobuf:"bytes,1,opt,name=service,proto3" json:"service,omitempty"` + // Relative path within the service directory. + Path string `protobuf:"bytes,2,opt,name=path,proto3" json:"path,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *PullFileRequest) Reset() { + *x = PullFileRequest{} + mi := &file_proto_mcp_v1_mcp_proto_msgTypes[29] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *PullFileRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PullFileRequest) ProtoMessage() {} + +func (x *PullFileRequest) ProtoReflect() protoreflect.Message { + mi := &file_proto_mcp_v1_mcp_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 PullFileRequest.ProtoReflect.Descriptor instead. +func (*PullFileRequest) Descriptor() ([]byte, []int) { + return file_proto_mcp_v1_mcp_proto_rawDescGZIP(), []int{29} +} + +func (x *PullFileRequest) GetService() string { + if x != nil { + return x.Service + } + return "" +} + +func (x *PullFileRequest) GetPath() string { + if x != nil { + return x.Path + } + return "" +} + +type PullFileResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Content []byte `protobuf:"bytes,1,opt,name=content,proto3" json:"content,omitempty"` + Mode uint32 `protobuf:"varint,2,opt,name=mode,proto3" json:"mode,omitempty"` + Error string `protobuf:"bytes,3,opt,name=error,proto3" json:"error,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *PullFileResponse) Reset() { + *x = PullFileResponse{} + mi := &file_proto_mcp_v1_mcp_proto_msgTypes[30] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *PullFileResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PullFileResponse) ProtoMessage() {} + +func (x *PullFileResponse) ProtoReflect() protoreflect.Message { + mi := &file_proto_mcp_v1_mcp_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 PullFileResponse.ProtoReflect.Descriptor instead. +func (*PullFileResponse) Descriptor() ([]byte, []int) { + return file_proto_mcp_v1_mcp_proto_rawDescGZIP(), []int{30} +} + +func (x *PullFileResponse) GetContent() []byte { + if x != nil { + return x.Content + } + return nil +} + +func (x *PullFileResponse) GetMode() uint32 { + if x != nil { + return x.Mode + } + return 0 +} + +func (x *PullFileResponse) GetError() string { + if x != nil { + return x.Error + } + return "" +} + +type NodeStatusRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *NodeStatusRequest) Reset() { + *x = NodeStatusRequest{} + mi := &file_proto_mcp_v1_mcp_proto_msgTypes[31] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *NodeStatusRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NodeStatusRequest) ProtoMessage() {} + +func (x *NodeStatusRequest) ProtoReflect() protoreflect.Message { + mi := &file_proto_mcp_v1_mcp_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 NodeStatusRequest.ProtoReflect.Descriptor instead. +func (*NodeStatusRequest) Descriptor() ([]byte, []int) { + return file_proto_mcp_v1_mcp_proto_rawDescGZIP(), []int{31} +} + +type NodeStatusResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + NodeName string `protobuf:"bytes,1,opt,name=node_name,json=nodeName,proto3" json:"node_name,omitempty"` + // "podman" or "docker" + Runtime string `protobuf:"bytes,2,opt,name=runtime,proto3" json:"runtime,omitempty"` + RuntimeVersion string `protobuf:"bytes,3,opt,name=runtime_version,json=runtimeVersion,proto3" json:"runtime_version,omitempty"` + ServiceCount uint32 `protobuf:"varint,4,opt,name=service_count,json=serviceCount,proto3" json:"service_count,omitempty"` + ComponentCount uint32 `protobuf:"varint,5,opt,name=component_count,json=componentCount,proto3" json:"component_count,omitempty"` + DiskTotalBytes uint64 `protobuf:"varint,6,opt,name=disk_total_bytes,json=diskTotalBytes,proto3" json:"disk_total_bytes,omitempty"` + DiskFreeBytes uint64 `protobuf:"varint,7,opt,name=disk_free_bytes,json=diskFreeBytes,proto3" json:"disk_free_bytes,omitempty"` + MemoryTotalBytes uint64 `protobuf:"varint,8,opt,name=memory_total_bytes,json=memoryTotalBytes,proto3" json:"memory_total_bytes,omitempty"` + MemoryFreeBytes uint64 `protobuf:"varint,9,opt,name=memory_free_bytes,json=memoryFreeBytes,proto3" json:"memory_free_bytes,omitempty"` + CpuUsagePercent float64 `protobuf:"fixed64,10,opt,name=cpu_usage_percent,json=cpuUsagePercent,proto3" json:"cpu_usage_percent,omitempty"` + UptimeSince *timestamppb.Timestamp `protobuf:"bytes,11,opt,name=uptime_since,json=uptimeSince,proto3" json:"uptime_since,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *NodeStatusResponse) Reset() { + *x = NodeStatusResponse{} + mi := &file_proto_mcp_v1_mcp_proto_msgTypes[32] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *NodeStatusResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NodeStatusResponse) ProtoMessage() {} + +func (x *NodeStatusResponse) ProtoReflect() protoreflect.Message { + mi := &file_proto_mcp_v1_mcp_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 NodeStatusResponse.ProtoReflect.Descriptor instead. +func (*NodeStatusResponse) Descriptor() ([]byte, []int) { + return file_proto_mcp_v1_mcp_proto_rawDescGZIP(), []int{32} +} + +func (x *NodeStatusResponse) GetNodeName() string { + if x != nil { + return x.NodeName + } + return "" +} + +func (x *NodeStatusResponse) GetRuntime() string { + if x != nil { + return x.Runtime + } + return "" +} + +func (x *NodeStatusResponse) GetRuntimeVersion() string { + if x != nil { + return x.RuntimeVersion + } + return "" +} + +func (x *NodeStatusResponse) GetServiceCount() uint32 { + if x != nil { + return x.ServiceCount + } + return 0 +} + +func (x *NodeStatusResponse) GetComponentCount() uint32 { + if x != nil { + return x.ComponentCount + } + return 0 +} + +func (x *NodeStatusResponse) GetDiskTotalBytes() uint64 { + if x != nil { + return x.DiskTotalBytes + } + return 0 +} + +func (x *NodeStatusResponse) GetDiskFreeBytes() uint64 { + if x != nil { + return x.DiskFreeBytes + } + return 0 +} + +func (x *NodeStatusResponse) GetMemoryTotalBytes() uint64 { + if x != nil { + return x.MemoryTotalBytes + } + return 0 +} + +func (x *NodeStatusResponse) GetMemoryFreeBytes() uint64 { + if x != nil { + return x.MemoryFreeBytes + } + return 0 +} + +func (x *NodeStatusResponse) GetCpuUsagePercent() float64 { + if x != nil { + return x.CpuUsagePercent + } + return 0 +} + +func (x *NodeStatusResponse) GetUptimeSince() *timestamppb.Timestamp { + if x != nil { + return x.UptimeSince + } + return nil +} + +var File_proto_mcp_v1_mcp_proto protoreflect.FileDescriptor + +const file_proto_mcp_v1_mcp_proto_rawDesc = "" + + "\n" + + "\x16proto/mcp/v1/mcp.proto\x12\x06mcp.v1\x1a\x1fgoogle/protobuf/timestamp.proto\"\xc3\x01\n" + + "\rComponentSpec\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x12\x14\n" + + "\x05image\x18\x02 \x01(\tR\x05image\x12\x18\n" + + "\anetwork\x18\x03 \x01(\tR\anetwork\x12\x12\n" + + "\x04user\x18\x04 \x01(\tR\x04user\x12\x18\n" + + "\arestart\x18\x05 \x01(\tR\arestart\x12\x14\n" + + "\x05ports\x18\x06 \x03(\tR\x05ports\x12\x18\n" + + "\avolumes\x18\a \x03(\tR\avolumes\x12\x10\n" + + "\x03cmd\x18\b \x03(\tR\x03cmd\"p\n" + + "\vServiceSpec\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x12\x16\n" + + "\x06active\x18\x02 \x01(\bR\x06active\x125\n" + + "\n" + + "components\x18\x03 \x03(\v2\x15.mcp.v1.ComponentSpecR\n" + + "components\"\\\n" + + "\rDeployRequest\x12-\n" + + "\aservice\x18\x01 \x01(\v2\x13.mcp.v1.ServiceSpecR\aservice\x12\x1c\n" + + "\tcomponent\x18\x02 \x01(\tR\tcomponent\"C\n" + + "\x0eDeployResponse\x121\n" + + "\aresults\x18\x01 \x03(\v2\x17.mcp.v1.ComponentResultR\aresults\"U\n" + + "\x0fComponentResult\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x12\x18\n" + + "\asuccess\x18\x02 \x01(\bR\asuccess\x12\x14\n" + + "\x05error\x18\x03 \x01(\tR\x05error\"(\n" + + "\x12StopServiceRequest\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\"H\n" + + "\x13StopServiceResponse\x121\n" + + "\aresults\x18\x01 \x03(\v2\x17.mcp.v1.ComponentResultR\aresults\")\n" + + "\x13StartServiceRequest\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\"I\n" + + "\x14StartServiceResponse\x121\n" + + "\aresults\x18\x01 \x03(\v2\x17.mcp.v1.ComponentResultR\aresults\"+\n" + + "\x15RestartServiceRequest\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\"K\n" + + "\x16RestartServiceResponse\x121\n" + + "\aresults\x18\x01 \x03(\v2\x17.mcp.v1.ComponentResultR\aresults\"J\n" + + "\x17SyncDesiredStateRequest\x12/\n" + + "\bservices\x18\x01 \x03(\v2\x13.mcp.v1.ServiceSpecR\bservices\"O\n" + + "\x18SyncDesiredStateResponse\x123\n" + + "\aresults\x18\x01 \x03(\v2\x19.mcp.v1.ServiceSyncResultR\aresults\"[\n" + + "\x11ServiceSyncResult\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x12\x18\n" + + "\achanged\x18\x02 \x01(\bR\achanged\x12\x18\n" + + "\asummary\x18\x03 \x01(\tR\asummary\"\x15\n" + + "\x13ListServicesRequest\"p\n" + + "\vServiceInfo\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x12\x16\n" + + "\x06active\x18\x02 \x01(\bR\x06active\x125\n" + + "\n" + + "components\x18\x03 \x03(\v2\x15.mcp.v1.ComponentInfoR\n" + + "components\"\xd5\x01\n" + + "\rComponentInfo\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x12\x14\n" + + "\x05image\x18\x02 \x01(\tR\x05image\x12#\n" + + "\rdesired_state\x18\x03 \x01(\tR\fdesiredState\x12%\n" + + "\x0eobserved_state\x18\x04 \x01(\tR\robservedState\x12\x18\n" + + "\aversion\x18\x05 \x01(\tR\aversion\x124\n" + + "\astarted\x18\x06 \x01(\v2\x1a.google.protobuf.TimestampR\astarted\"G\n" + + "\x14ListServicesResponse\x12/\n" + + "\bservices\x18\x01 \x03(\v2\x13.mcp.v1.ServiceInfoR\bservices\"-\n" + + "\x17GetServiceStatusRequest\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\"\x8f\x01\n" + + "\tDriftInfo\x12\x18\n" + + "\aservice\x18\x01 \x01(\tR\aservice\x12\x1c\n" + + "\tcomponent\x18\x02 \x01(\tR\tcomponent\x12#\n" + + "\rdesired_state\x18\x03 \x01(\tR\fdesiredState\x12%\n" + + "\x0eobserved_state\x18\x04 \x01(\tR\robservedState\"\xb9\x01\n" + + "\tEventInfo\x12\x18\n" + + "\aservice\x18\x01 \x01(\tR\aservice\x12\x1c\n" + + "\tcomponent\x18\x02 \x01(\tR\tcomponent\x12\x1d\n" + + "\n" + + "prev_state\x18\x03 \x01(\tR\tprevState\x12\x1b\n" + + "\tnew_state\x18\x04 \x01(\tR\bnewState\x128\n" + + "\ttimestamp\x18\x05 \x01(\v2\x1a.google.protobuf.TimestampR\ttimestamp\"\xac\x01\n" + + "\x18GetServiceStatusResponse\x12/\n" + + "\bservices\x18\x01 \x03(\v2\x13.mcp.v1.ServiceInfoR\bservices\x12'\n" + + "\x05drift\x18\x02 \x03(\v2\x11.mcp.v1.DriftInfoR\x05drift\x126\n" + + "\rrecent_events\x18\x03 \x03(\v2\x11.mcp.v1.EventInfoR\frecentEvents\"\x12\n" + + "\x10LiveCheckRequest\"D\n" + + "\x11LiveCheckResponse\x12/\n" + + "\bservices\x18\x01 \x03(\v2\x13.mcp.v1.ServiceInfoR\bservices\"2\n" + + "\x16AdoptContainersRequest\x12\x18\n" + + "\aservice\x18\x01 \x01(\tR\aservice\"y\n" + + "\vAdoptResult\x12\x1c\n" + + "\tcontainer\x18\x01 \x01(\tR\tcontainer\x12\x1c\n" + + "\tcomponent\x18\x02 \x01(\tR\tcomponent\x12\x18\n" + + "\asuccess\x18\x03 \x01(\bR\asuccess\x12\x14\n" + + "\x05error\x18\x04 \x01(\tR\x05error\"H\n" + + "\x17AdoptContainersResponse\x12-\n" + + "\aresults\x18\x01 \x03(\v2\x13.mcp.v1.AdoptResultR\aresults\"m\n" + + "\x0fPushFileRequest\x12\x18\n" + + "\aservice\x18\x01 \x01(\tR\aservice\x12\x12\n" + + "\x04path\x18\x02 \x01(\tR\x04path\x12\x18\n" + + "\acontent\x18\x03 \x01(\fR\acontent\x12\x12\n" + + "\x04mode\x18\x04 \x01(\rR\x04mode\"B\n" + + "\x10PushFileResponse\x12\x18\n" + + "\asuccess\x18\x01 \x01(\bR\asuccess\x12\x14\n" + + "\x05error\x18\x02 \x01(\tR\x05error\"?\n" + + "\x0fPullFileRequest\x12\x18\n" + + "\aservice\x18\x01 \x01(\tR\aservice\x12\x12\n" + + "\x04path\x18\x02 \x01(\tR\x04path\"V\n" + + "\x10PullFileResponse\x12\x18\n" + + "\acontent\x18\x01 \x01(\fR\acontent\x12\x12\n" + + "\x04mode\x18\x02 \x01(\rR\x04mode\x12\x14\n" + + "\x05error\x18\x03 \x01(\tR\x05error\"\x13\n" + + "\x11NodeStatusRequest\"\xd9\x03\n" + + "\x12NodeStatusResponse\x12\x1b\n" + + "\tnode_name\x18\x01 \x01(\tR\bnodeName\x12\x18\n" + + "\aruntime\x18\x02 \x01(\tR\aruntime\x12'\n" + + "\x0fruntime_version\x18\x03 \x01(\tR\x0eruntimeVersion\x12#\n" + + "\rservice_count\x18\x04 \x01(\rR\fserviceCount\x12'\n" + + "\x0fcomponent_count\x18\x05 \x01(\rR\x0ecomponentCount\x12(\n" + + "\x10disk_total_bytes\x18\x06 \x01(\x04R\x0ediskTotalBytes\x12&\n" + + "\x0fdisk_free_bytes\x18\a \x01(\x04R\rdiskFreeBytes\x12,\n" + + "\x12memory_total_bytes\x18\b \x01(\x04R\x10memoryTotalBytes\x12*\n" + + "\x11memory_free_bytes\x18\t \x01(\x04R\x0fmemoryFreeBytes\x12*\n" + + "\x11cpu_usage_percent\x18\n" + + " \x01(\x01R\x0fcpuUsagePercent\x12=\n" + + "\fuptime_since\x18\v \x01(\v2\x1a.google.protobuf.TimestampR\vuptimeSince2\x80\a\n" + + "\x0fMcpAgentService\x127\n" + + "\x06Deploy\x12\x15.mcp.v1.DeployRequest\x1a\x16.mcp.v1.DeployResponse\x12F\n" + + "\vStopService\x12\x1a.mcp.v1.StopServiceRequest\x1a\x1b.mcp.v1.StopServiceResponse\x12I\n" + + "\fStartService\x12\x1b.mcp.v1.StartServiceRequest\x1a\x1c.mcp.v1.StartServiceResponse\x12O\n" + + "\x0eRestartService\x12\x1d.mcp.v1.RestartServiceRequest\x1a\x1e.mcp.v1.RestartServiceResponse\x12U\n" + + "\x10SyncDesiredState\x12\x1f.mcp.v1.SyncDesiredStateRequest\x1a .mcp.v1.SyncDesiredStateResponse\x12I\n" + + "\fListServices\x12\x1b.mcp.v1.ListServicesRequest\x1a\x1c.mcp.v1.ListServicesResponse\x12U\n" + + "\x10GetServiceStatus\x12\x1f.mcp.v1.GetServiceStatusRequest\x1a .mcp.v1.GetServiceStatusResponse\x12@\n" + + "\tLiveCheck\x12\x18.mcp.v1.LiveCheckRequest\x1a\x19.mcp.v1.LiveCheckResponse\x12R\n" + + "\x0fAdoptContainers\x12\x1e.mcp.v1.AdoptContainersRequest\x1a\x1f.mcp.v1.AdoptContainersResponse\x12=\n" + + "\bPushFile\x12\x17.mcp.v1.PushFileRequest\x1a\x18.mcp.v1.PushFileResponse\x12=\n" + + "\bPullFile\x12\x17.mcp.v1.PullFileRequest\x1a\x18.mcp.v1.PullFileResponse\x12C\n" + + "\n" + + "NodeStatus\x12\x19.mcp.v1.NodeStatusRequest\x1a\x1a.mcp.v1.NodeStatusResponseB,Z*git.wntrmute.dev/kyle/mcp/gen/mcp/v1;mcpv1b\x06proto3" + +var ( + file_proto_mcp_v1_mcp_proto_rawDescOnce sync.Once + file_proto_mcp_v1_mcp_proto_rawDescData []byte +) + +func file_proto_mcp_v1_mcp_proto_rawDescGZIP() []byte { + file_proto_mcp_v1_mcp_proto_rawDescOnce.Do(func() { + file_proto_mcp_v1_mcp_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_proto_mcp_v1_mcp_proto_rawDesc), len(file_proto_mcp_v1_mcp_proto_rawDesc))) + }) + return file_proto_mcp_v1_mcp_proto_rawDescData +} + +var file_proto_mcp_v1_mcp_proto_msgTypes = make([]protoimpl.MessageInfo, 33) +var file_proto_mcp_v1_mcp_proto_goTypes = []any{ + (*ComponentSpec)(nil), // 0: mcp.v1.ComponentSpec + (*ServiceSpec)(nil), // 1: mcp.v1.ServiceSpec + (*DeployRequest)(nil), // 2: mcp.v1.DeployRequest + (*DeployResponse)(nil), // 3: mcp.v1.DeployResponse + (*ComponentResult)(nil), // 4: mcp.v1.ComponentResult + (*StopServiceRequest)(nil), // 5: mcp.v1.StopServiceRequest + (*StopServiceResponse)(nil), // 6: mcp.v1.StopServiceResponse + (*StartServiceRequest)(nil), // 7: mcp.v1.StartServiceRequest + (*StartServiceResponse)(nil), // 8: mcp.v1.StartServiceResponse + (*RestartServiceRequest)(nil), // 9: mcp.v1.RestartServiceRequest + (*RestartServiceResponse)(nil), // 10: mcp.v1.RestartServiceResponse + (*SyncDesiredStateRequest)(nil), // 11: mcp.v1.SyncDesiredStateRequest + (*SyncDesiredStateResponse)(nil), // 12: mcp.v1.SyncDesiredStateResponse + (*ServiceSyncResult)(nil), // 13: mcp.v1.ServiceSyncResult + (*ListServicesRequest)(nil), // 14: mcp.v1.ListServicesRequest + (*ServiceInfo)(nil), // 15: mcp.v1.ServiceInfo + (*ComponentInfo)(nil), // 16: mcp.v1.ComponentInfo + (*ListServicesResponse)(nil), // 17: mcp.v1.ListServicesResponse + (*GetServiceStatusRequest)(nil), // 18: mcp.v1.GetServiceStatusRequest + (*DriftInfo)(nil), // 19: mcp.v1.DriftInfo + (*EventInfo)(nil), // 20: mcp.v1.EventInfo + (*GetServiceStatusResponse)(nil), // 21: mcp.v1.GetServiceStatusResponse + (*LiveCheckRequest)(nil), // 22: mcp.v1.LiveCheckRequest + (*LiveCheckResponse)(nil), // 23: mcp.v1.LiveCheckResponse + (*AdoptContainersRequest)(nil), // 24: mcp.v1.AdoptContainersRequest + (*AdoptResult)(nil), // 25: mcp.v1.AdoptResult + (*AdoptContainersResponse)(nil), // 26: mcp.v1.AdoptContainersResponse + (*PushFileRequest)(nil), // 27: mcp.v1.PushFileRequest + (*PushFileResponse)(nil), // 28: mcp.v1.PushFileResponse + (*PullFileRequest)(nil), // 29: mcp.v1.PullFileRequest + (*PullFileResponse)(nil), // 30: mcp.v1.PullFileResponse + (*NodeStatusRequest)(nil), // 31: mcp.v1.NodeStatusRequest + (*NodeStatusResponse)(nil), // 32: mcp.v1.NodeStatusResponse + (*timestamppb.Timestamp)(nil), // 33: google.protobuf.Timestamp +} +var file_proto_mcp_v1_mcp_proto_depIdxs = []int32{ + 0, // 0: mcp.v1.ServiceSpec.components:type_name -> mcp.v1.ComponentSpec + 1, // 1: mcp.v1.DeployRequest.service:type_name -> mcp.v1.ServiceSpec + 4, // 2: mcp.v1.DeployResponse.results:type_name -> mcp.v1.ComponentResult + 4, // 3: mcp.v1.StopServiceResponse.results:type_name -> mcp.v1.ComponentResult + 4, // 4: mcp.v1.StartServiceResponse.results:type_name -> mcp.v1.ComponentResult + 4, // 5: mcp.v1.RestartServiceResponse.results:type_name -> mcp.v1.ComponentResult + 1, // 6: mcp.v1.SyncDesiredStateRequest.services:type_name -> mcp.v1.ServiceSpec + 13, // 7: mcp.v1.SyncDesiredStateResponse.results:type_name -> mcp.v1.ServiceSyncResult + 16, // 8: mcp.v1.ServiceInfo.components:type_name -> mcp.v1.ComponentInfo + 33, // 9: mcp.v1.ComponentInfo.started:type_name -> google.protobuf.Timestamp + 15, // 10: mcp.v1.ListServicesResponse.services:type_name -> mcp.v1.ServiceInfo + 33, // 11: mcp.v1.EventInfo.timestamp:type_name -> google.protobuf.Timestamp + 15, // 12: mcp.v1.GetServiceStatusResponse.services:type_name -> mcp.v1.ServiceInfo + 19, // 13: mcp.v1.GetServiceStatusResponse.drift:type_name -> mcp.v1.DriftInfo + 20, // 14: mcp.v1.GetServiceStatusResponse.recent_events:type_name -> mcp.v1.EventInfo + 15, // 15: mcp.v1.LiveCheckResponse.services:type_name -> mcp.v1.ServiceInfo + 25, // 16: mcp.v1.AdoptContainersResponse.results:type_name -> mcp.v1.AdoptResult + 33, // 17: mcp.v1.NodeStatusResponse.uptime_since:type_name -> google.protobuf.Timestamp + 2, // 18: mcp.v1.McpAgentService.Deploy:input_type -> mcp.v1.DeployRequest + 5, // 19: mcp.v1.McpAgentService.StopService:input_type -> mcp.v1.StopServiceRequest + 7, // 20: mcp.v1.McpAgentService.StartService:input_type -> mcp.v1.StartServiceRequest + 9, // 21: mcp.v1.McpAgentService.RestartService:input_type -> mcp.v1.RestartServiceRequest + 11, // 22: mcp.v1.McpAgentService.SyncDesiredState:input_type -> mcp.v1.SyncDesiredStateRequest + 14, // 23: mcp.v1.McpAgentService.ListServices:input_type -> mcp.v1.ListServicesRequest + 18, // 24: mcp.v1.McpAgentService.GetServiceStatus:input_type -> mcp.v1.GetServiceStatusRequest + 22, // 25: mcp.v1.McpAgentService.LiveCheck:input_type -> mcp.v1.LiveCheckRequest + 24, // 26: mcp.v1.McpAgentService.AdoptContainers:input_type -> mcp.v1.AdoptContainersRequest + 27, // 27: mcp.v1.McpAgentService.PushFile:input_type -> mcp.v1.PushFileRequest + 29, // 28: mcp.v1.McpAgentService.PullFile:input_type -> mcp.v1.PullFileRequest + 31, // 29: mcp.v1.McpAgentService.NodeStatus:input_type -> mcp.v1.NodeStatusRequest + 3, // 30: mcp.v1.McpAgentService.Deploy:output_type -> mcp.v1.DeployResponse + 6, // 31: mcp.v1.McpAgentService.StopService:output_type -> mcp.v1.StopServiceResponse + 8, // 32: mcp.v1.McpAgentService.StartService:output_type -> mcp.v1.StartServiceResponse + 10, // 33: mcp.v1.McpAgentService.RestartService:output_type -> mcp.v1.RestartServiceResponse + 12, // 34: mcp.v1.McpAgentService.SyncDesiredState:output_type -> mcp.v1.SyncDesiredStateResponse + 17, // 35: mcp.v1.McpAgentService.ListServices:output_type -> mcp.v1.ListServicesResponse + 21, // 36: mcp.v1.McpAgentService.GetServiceStatus:output_type -> mcp.v1.GetServiceStatusResponse + 23, // 37: mcp.v1.McpAgentService.LiveCheck:output_type -> mcp.v1.LiveCheckResponse + 26, // 38: mcp.v1.McpAgentService.AdoptContainers:output_type -> mcp.v1.AdoptContainersResponse + 28, // 39: mcp.v1.McpAgentService.PushFile:output_type -> mcp.v1.PushFileResponse + 30, // 40: mcp.v1.McpAgentService.PullFile:output_type -> mcp.v1.PullFileResponse + 32, // 41: mcp.v1.McpAgentService.NodeStatus:output_type -> mcp.v1.NodeStatusResponse + 30, // [30:42] is the sub-list for method output_type + 18, // [18:30] is the sub-list for method input_type + 18, // [18:18] is the sub-list for extension type_name + 18, // [18:18] is the sub-list for extension extendee + 0, // [0:18] is the sub-list for field type_name +} + +func init() { file_proto_mcp_v1_mcp_proto_init() } +func file_proto_mcp_v1_mcp_proto_init() { + if File_proto_mcp_v1_mcp_proto != nil { + return + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: unsafe.Slice(unsafe.StringData(file_proto_mcp_v1_mcp_proto_rawDesc), len(file_proto_mcp_v1_mcp_proto_rawDesc)), + NumEnums: 0, + NumMessages: 33, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_proto_mcp_v1_mcp_proto_goTypes, + DependencyIndexes: file_proto_mcp_v1_mcp_proto_depIdxs, + MessageInfos: file_proto_mcp_v1_mcp_proto_msgTypes, + }.Build() + File_proto_mcp_v1_mcp_proto = out.File + file_proto_mcp_v1_mcp_proto_goTypes = nil + file_proto_mcp_v1_mcp_proto_depIdxs = nil +} diff --git a/gen/mcp/v1/mcp_grpc.pb.go b/gen/mcp/v1/mcp_grpc.pb.go new file mode 100644 index 0000000..1ba6d41 --- /dev/null +++ b/gen/mcp/v1/mcp_grpc.pb.go @@ -0,0 +1,551 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.6.1 +// - protoc v6.32.1 +// source: proto/mcp/v1/mcp.proto + +package mcpv1 + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.64.0 or later. +const _ = grpc.SupportPackageIsVersion9 + +const ( + McpAgentService_Deploy_FullMethodName = "/mcp.v1.McpAgentService/Deploy" + McpAgentService_StopService_FullMethodName = "/mcp.v1.McpAgentService/StopService" + McpAgentService_StartService_FullMethodName = "/mcp.v1.McpAgentService/StartService" + McpAgentService_RestartService_FullMethodName = "/mcp.v1.McpAgentService/RestartService" + McpAgentService_SyncDesiredState_FullMethodName = "/mcp.v1.McpAgentService/SyncDesiredState" + McpAgentService_ListServices_FullMethodName = "/mcp.v1.McpAgentService/ListServices" + McpAgentService_GetServiceStatus_FullMethodName = "/mcp.v1.McpAgentService/GetServiceStatus" + McpAgentService_LiveCheck_FullMethodName = "/mcp.v1.McpAgentService/LiveCheck" + McpAgentService_AdoptContainers_FullMethodName = "/mcp.v1.McpAgentService/AdoptContainers" + McpAgentService_PushFile_FullMethodName = "/mcp.v1.McpAgentService/PushFile" + McpAgentService_PullFile_FullMethodName = "/mcp.v1.McpAgentService/PullFile" + McpAgentService_NodeStatus_FullMethodName = "/mcp.v1.McpAgentService/NodeStatus" +) + +// McpAgentServiceClient is the client API for McpAgentService service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type McpAgentServiceClient interface { + // Service lifecycle + Deploy(ctx context.Context, in *DeployRequest, opts ...grpc.CallOption) (*DeployResponse, error) + StopService(ctx context.Context, in *StopServiceRequest, opts ...grpc.CallOption) (*StopServiceResponse, error) + StartService(ctx context.Context, in *StartServiceRequest, opts ...grpc.CallOption) (*StartServiceResponse, error) + RestartService(ctx context.Context, in *RestartServiceRequest, opts ...grpc.CallOption) (*RestartServiceResponse, error) + // Desired state + SyncDesiredState(ctx context.Context, in *SyncDesiredStateRequest, opts ...grpc.CallOption) (*SyncDesiredStateResponse, error) + // Status and registry + ListServices(ctx context.Context, in *ListServicesRequest, opts ...grpc.CallOption) (*ListServicesResponse, error) + GetServiceStatus(ctx context.Context, in *GetServiceStatusRequest, opts ...grpc.CallOption) (*GetServiceStatusResponse, error) + LiveCheck(ctx context.Context, in *LiveCheckRequest, opts ...grpc.CallOption) (*LiveCheckResponse, error) + // Adopt + AdoptContainers(ctx context.Context, in *AdoptContainersRequest, opts ...grpc.CallOption) (*AdoptContainersResponse, error) + // File transfer + PushFile(ctx context.Context, in *PushFileRequest, opts ...grpc.CallOption) (*PushFileResponse, error) + PullFile(ctx context.Context, in *PullFileRequest, opts ...grpc.CallOption) (*PullFileResponse, error) + // Node + NodeStatus(ctx context.Context, in *NodeStatusRequest, opts ...grpc.CallOption) (*NodeStatusResponse, error) +} + +type mcpAgentServiceClient struct { + cc grpc.ClientConnInterface +} + +func NewMcpAgentServiceClient(cc grpc.ClientConnInterface) McpAgentServiceClient { + return &mcpAgentServiceClient{cc} +} + +func (c *mcpAgentServiceClient) Deploy(ctx context.Context, in *DeployRequest, opts ...grpc.CallOption) (*DeployResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(DeployResponse) + err := c.cc.Invoke(ctx, McpAgentService_Deploy_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *mcpAgentServiceClient) StopService(ctx context.Context, in *StopServiceRequest, opts ...grpc.CallOption) (*StopServiceResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(StopServiceResponse) + err := c.cc.Invoke(ctx, McpAgentService_StopService_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *mcpAgentServiceClient) StartService(ctx context.Context, in *StartServiceRequest, opts ...grpc.CallOption) (*StartServiceResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(StartServiceResponse) + err := c.cc.Invoke(ctx, McpAgentService_StartService_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *mcpAgentServiceClient) RestartService(ctx context.Context, in *RestartServiceRequest, opts ...grpc.CallOption) (*RestartServiceResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(RestartServiceResponse) + err := c.cc.Invoke(ctx, McpAgentService_RestartService_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *mcpAgentServiceClient) SyncDesiredState(ctx context.Context, in *SyncDesiredStateRequest, opts ...grpc.CallOption) (*SyncDesiredStateResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(SyncDesiredStateResponse) + err := c.cc.Invoke(ctx, McpAgentService_SyncDesiredState_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *mcpAgentServiceClient) ListServices(ctx context.Context, in *ListServicesRequest, opts ...grpc.CallOption) (*ListServicesResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(ListServicesResponse) + err := c.cc.Invoke(ctx, McpAgentService_ListServices_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *mcpAgentServiceClient) GetServiceStatus(ctx context.Context, in *GetServiceStatusRequest, opts ...grpc.CallOption) (*GetServiceStatusResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(GetServiceStatusResponse) + err := c.cc.Invoke(ctx, McpAgentService_GetServiceStatus_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *mcpAgentServiceClient) LiveCheck(ctx context.Context, in *LiveCheckRequest, opts ...grpc.CallOption) (*LiveCheckResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(LiveCheckResponse) + err := c.cc.Invoke(ctx, McpAgentService_LiveCheck_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *mcpAgentServiceClient) AdoptContainers(ctx context.Context, in *AdoptContainersRequest, opts ...grpc.CallOption) (*AdoptContainersResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(AdoptContainersResponse) + err := c.cc.Invoke(ctx, McpAgentService_AdoptContainers_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *mcpAgentServiceClient) PushFile(ctx context.Context, in *PushFileRequest, opts ...grpc.CallOption) (*PushFileResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(PushFileResponse) + err := c.cc.Invoke(ctx, McpAgentService_PushFile_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *mcpAgentServiceClient) PullFile(ctx context.Context, in *PullFileRequest, opts ...grpc.CallOption) (*PullFileResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(PullFileResponse) + err := c.cc.Invoke(ctx, McpAgentService_PullFile_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *mcpAgentServiceClient) NodeStatus(ctx context.Context, in *NodeStatusRequest, opts ...grpc.CallOption) (*NodeStatusResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(NodeStatusResponse) + err := c.cc.Invoke(ctx, McpAgentService_NodeStatus_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +// McpAgentServiceServer is the server API for McpAgentService service. +// All implementations must embed UnimplementedMcpAgentServiceServer +// for forward compatibility. +type McpAgentServiceServer interface { + // Service lifecycle + Deploy(context.Context, *DeployRequest) (*DeployResponse, error) + StopService(context.Context, *StopServiceRequest) (*StopServiceResponse, error) + StartService(context.Context, *StartServiceRequest) (*StartServiceResponse, error) + RestartService(context.Context, *RestartServiceRequest) (*RestartServiceResponse, error) + // Desired state + SyncDesiredState(context.Context, *SyncDesiredStateRequest) (*SyncDesiredStateResponse, error) + // Status and registry + ListServices(context.Context, *ListServicesRequest) (*ListServicesResponse, error) + GetServiceStatus(context.Context, *GetServiceStatusRequest) (*GetServiceStatusResponse, error) + LiveCheck(context.Context, *LiveCheckRequest) (*LiveCheckResponse, error) + // Adopt + AdoptContainers(context.Context, *AdoptContainersRequest) (*AdoptContainersResponse, error) + // File transfer + PushFile(context.Context, *PushFileRequest) (*PushFileResponse, error) + PullFile(context.Context, *PullFileRequest) (*PullFileResponse, error) + // Node + NodeStatus(context.Context, *NodeStatusRequest) (*NodeStatusResponse, error) + mustEmbedUnimplementedMcpAgentServiceServer() +} + +// UnimplementedMcpAgentServiceServer must be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedMcpAgentServiceServer struct{} + +func (UnimplementedMcpAgentServiceServer) Deploy(context.Context, *DeployRequest) (*DeployResponse, error) { + return nil, status.Error(codes.Unimplemented, "method Deploy not implemented") +} +func (UnimplementedMcpAgentServiceServer) StopService(context.Context, *StopServiceRequest) (*StopServiceResponse, error) { + return nil, status.Error(codes.Unimplemented, "method StopService not implemented") +} +func (UnimplementedMcpAgentServiceServer) StartService(context.Context, *StartServiceRequest) (*StartServiceResponse, error) { + return nil, status.Error(codes.Unimplemented, "method StartService not implemented") +} +func (UnimplementedMcpAgentServiceServer) RestartService(context.Context, *RestartServiceRequest) (*RestartServiceResponse, error) { + return nil, status.Error(codes.Unimplemented, "method RestartService not implemented") +} +func (UnimplementedMcpAgentServiceServer) SyncDesiredState(context.Context, *SyncDesiredStateRequest) (*SyncDesiredStateResponse, error) { + return nil, status.Error(codes.Unimplemented, "method SyncDesiredState not implemented") +} +func (UnimplementedMcpAgentServiceServer) ListServices(context.Context, *ListServicesRequest) (*ListServicesResponse, error) { + return nil, status.Error(codes.Unimplemented, "method ListServices not implemented") +} +func (UnimplementedMcpAgentServiceServer) GetServiceStatus(context.Context, *GetServiceStatusRequest) (*GetServiceStatusResponse, error) { + return nil, status.Error(codes.Unimplemented, "method GetServiceStatus not implemented") +} +func (UnimplementedMcpAgentServiceServer) LiveCheck(context.Context, *LiveCheckRequest) (*LiveCheckResponse, error) { + return nil, status.Error(codes.Unimplemented, "method LiveCheck not implemented") +} +func (UnimplementedMcpAgentServiceServer) AdoptContainers(context.Context, *AdoptContainersRequest) (*AdoptContainersResponse, error) { + return nil, status.Error(codes.Unimplemented, "method AdoptContainers not implemented") +} +func (UnimplementedMcpAgentServiceServer) PushFile(context.Context, *PushFileRequest) (*PushFileResponse, error) { + return nil, status.Error(codes.Unimplemented, "method PushFile not implemented") +} +func (UnimplementedMcpAgentServiceServer) PullFile(context.Context, *PullFileRequest) (*PullFileResponse, error) { + return nil, status.Error(codes.Unimplemented, "method PullFile not implemented") +} +func (UnimplementedMcpAgentServiceServer) NodeStatus(context.Context, *NodeStatusRequest) (*NodeStatusResponse, error) { + return nil, status.Error(codes.Unimplemented, "method NodeStatus not implemented") +} +func (UnimplementedMcpAgentServiceServer) mustEmbedUnimplementedMcpAgentServiceServer() {} +func (UnimplementedMcpAgentServiceServer) testEmbeddedByValue() {} + +// UnsafeMcpAgentServiceServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to McpAgentServiceServer will +// result in compilation errors. +type UnsafeMcpAgentServiceServer interface { + mustEmbedUnimplementedMcpAgentServiceServer() +} + +func RegisterMcpAgentServiceServer(s grpc.ServiceRegistrar, srv McpAgentServiceServer) { + // If the following call panics, it indicates UnimplementedMcpAgentServiceServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } + s.RegisterService(&McpAgentService_ServiceDesc, srv) +} + +func _McpAgentService_Deploy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeployRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(McpAgentServiceServer).Deploy(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: McpAgentService_Deploy_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(McpAgentServiceServer).Deploy(ctx, req.(*DeployRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _McpAgentService_StopService_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(StopServiceRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(McpAgentServiceServer).StopService(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: McpAgentService_StopService_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(McpAgentServiceServer).StopService(ctx, req.(*StopServiceRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _McpAgentService_StartService_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(StartServiceRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(McpAgentServiceServer).StartService(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: McpAgentService_StartService_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(McpAgentServiceServer).StartService(ctx, req.(*StartServiceRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _McpAgentService_RestartService_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(RestartServiceRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(McpAgentServiceServer).RestartService(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: McpAgentService_RestartService_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(McpAgentServiceServer).RestartService(ctx, req.(*RestartServiceRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _McpAgentService_SyncDesiredState_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SyncDesiredStateRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(McpAgentServiceServer).SyncDesiredState(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: McpAgentService_SyncDesiredState_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(McpAgentServiceServer).SyncDesiredState(ctx, req.(*SyncDesiredStateRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _McpAgentService_ListServices_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListServicesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(McpAgentServiceServer).ListServices(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: McpAgentService_ListServices_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(McpAgentServiceServer).ListServices(ctx, req.(*ListServicesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _McpAgentService_GetServiceStatus_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetServiceStatusRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(McpAgentServiceServer).GetServiceStatus(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: McpAgentService_GetServiceStatus_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(McpAgentServiceServer).GetServiceStatus(ctx, req.(*GetServiceStatusRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _McpAgentService_LiveCheck_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(LiveCheckRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(McpAgentServiceServer).LiveCheck(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: McpAgentService_LiveCheck_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(McpAgentServiceServer).LiveCheck(ctx, req.(*LiveCheckRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _McpAgentService_AdoptContainers_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(AdoptContainersRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(McpAgentServiceServer).AdoptContainers(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: McpAgentService_AdoptContainers_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(McpAgentServiceServer).AdoptContainers(ctx, req.(*AdoptContainersRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _McpAgentService_PushFile_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(PushFileRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(McpAgentServiceServer).PushFile(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: McpAgentService_PushFile_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(McpAgentServiceServer).PushFile(ctx, req.(*PushFileRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _McpAgentService_PullFile_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(PullFileRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(McpAgentServiceServer).PullFile(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: McpAgentService_PullFile_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(McpAgentServiceServer).PullFile(ctx, req.(*PullFileRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _McpAgentService_NodeStatus_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(NodeStatusRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(McpAgentServiceServer).NodeStatus(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: McpAgentService_NodeStatus_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(McpAgentServiceServer).NodeStatus(ctx, req.(*NodeStatusRequest)) + } + return interceptor(ctx, in, info, handler) +} + +// McpAgentService_ServiceDesc is the grpc.ServiceDesc for McpAgentService service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var McpAgentService_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "mcp.v1.McpAgentService", + HandlerType: (*McpAgentServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "Deploy", + Handler: _McpAgentService_Deploy_Handler, + }, + { + MethodName: "StopService", + Handler: _McpAgentService_StopService_Handler, + }, + { + MethodName: "StartService", + Handler: _McpAgentService_StartService_Handler, + }, + { + MethodName: "RestartService", + Handler: _McpAgentService_RestartService_Handler, + }, + { + MethodName: "SyncDesiredState", + Handler: _McpAgentService_SyncDesiredState_Handler, + }, + { + MethodName: "ListServices", + Handler: _McpAgentService_ListServices_Handler, + }, + { + MethodName: "GetServiceStatus", + Handler: _McpAgentService_GetServiceStatus_Handler, + }, + { + MethodName: "LiveCheck", + Handler: _McpAgentService_LiveCheck_Handler, + }, + { + MethodName: "AdoptContainers", + Handler: _McpAgentService_AdoptContainers_Handler, + }, + { + MethodName: "PushFile", + Handler: _McpAgentService_PushFile_Handler, + }, + { + MethodName: "PullFile", + Handler: _McpAgentService_PullFile_Handler, + }, + { + MethodName: "NodeStatus", + Handler: _McpAgentService_NodeStatus_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "proto/mcp/v1/mcp.proto", +} diff --git a/go.mod b/go.mod index 09c734e..e837a5d 100644 --- a/go.mod +++ b/go.mod @@ -2,9 +2,17 @@ module git.wntrmute.dev/kyle/mcp go 1.25.7 -require github.com/spf13/cobra v1.10.2 +require ( + github.com/spf13/cobra v1.10.2 + google.golang.org/grpc v1.79.3 + google.golang.org/protobuf v1.36.11 +) require ( github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/spf13/pflag v1.0.9 // indirect + golang.org/x/net v0.48.0 // indirect + golang.org/x/sys v0.39.0 // indirect + golang.org/x/text v0.32.0 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217 // indirect ) diff --git a/go.sum b/go.sum index a6ee3e0..2767ccd 100644 --- a/go.sum +++ b/go.sum @@ -1,4 +1,16 @@ +github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= +github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= +github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= +github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= +github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= +github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= +github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= +github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= +github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= @@ -6,5 +18,31 @@ github.com/spf13/cobra v1.10.2 h1:DMTTonx5m65Ic0GOoRY2c16WCbHxOOw6xxezuLaBpcU= github.com/spf13/cobra v1.10.2/go.mod h1:7C1pvHqHw5A4vrJfjNwvOdzYu0Gml16OCs2GRiTUUS4= github.com/spf13/pflag v1.0.9 h1:9exaQaMOCwffKiiiYk6/BndUBv+iRViNW+4lEMi0PvY= github.com/spf13/pflag v1.0.9/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64= +go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y= +go.opentelemetry.io/otel v1.39.0 h1:8yPrr/S0ND9QEfTfdP9V+SiwT4E0G7Y5MO7p85nis48= +go.opentelemetry.io/otel v1.39.0/go.mod h1:kLlFTywNWrFyEdH0oj2xK0bFYZtHRYUdv1NklR/tgc8= +go.opentelemetry.io/otel/metric v1.39.0 h1:d1UzonvEZriVfpNKEVmHXbdf909uGTOQjA0HF0Ls5Q0= +go.opentelemetry.io/otel/metric v1.39.0/go.mod h1:jrZSWL33sD7bBxg1xjrqyDjnuzTUB0x1nBERXd7Ftcs= +go.opentelemetry.io/otel/sdk v1.39.0 h1:nMLYcjVsvdui1B/4FRkwjzoRVsMK8uL/cj0OyhKzt18= +go.opentelemetry.io/otel/sdk v1.39.0/go.mod h1:vDojkC4/jsTJsE+kh+LXYQlbL8CgrEcwmt1ENZszdJE= +go.opentelemetry.io/otel/sdk/metric v1.39.0 h1:cXMVVFVgsIf2YL6QkRF4Urbr/aMInf+2WKg+sEJTtB8= +go.opentelemetry.io/otel/sdk/metric v1.39.0/go.mod h1:xq9HEVH7qeX69/JnwEfp6fVq5wosJsY1mt4lLfYdVew= +go.opentelemetry.io/otel/trace v1.39.0 h1:2d2vfpEDmCJ5zVYz7ijaJdOF59xLomrvj7bjt6/qCJI= +go.opentelemetry.io/otel/trace v1.39.0/go.mod h1:88w4/PnZSazkGzz/w84VHpQafiU4EtqqlVdxWy+rNOA= go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg= +golang.org/x/net v0.48.0 h1:zyQRTTrjc33Lhh0fBgT/H3oZq9WuvRR5gPC70xpDiQU= +golang.org/x/net v0.48.0/go.mod h1:+ndRgGjkh8FGtu1w1FGbEC31if4VrNVMuKTgcAAnQRY= +golang.org/x/sys v0.39.0 h1:CvCKL8MeisomCi6qNZ+wbb0DN9E5AATixKsvNtMoMFk= +golang.org/x/sys v0.39.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= +golang.org/x/text v0.32.0 h1:ZD01bjUt1FQ9WJ0ClOL5vxgxOI/sVCNgX1YtKwcY0mU= +golang.org/x/text v0.32.0/go.mod h1:o/rUWzghvpD5TXrTIBuJU77MTaN0ljMWE47kxGJQ7jY= +gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk= +gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E= +google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217 h1:gRkg/vSppuSQoDjxyiGfN4Upv/h/DQmIR10ZU8dh4Ww= +google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217/go.mod h1:7i2o+ce6H/6BluujYR+kqX3GKH+dChPTQU19wjRPiGk= +google.golang.org/grpc v1.79.3 h1:sybAEdRIEtvcD68Gx7dmnwjZKlyfuc61Dyo9pGXXkKE= +google.golang.org/grpc v1.79.3/go.mod h1:KmT0Kjez+0dde/v2j9vzwoAScgEPx/Bw1CYChhHLrHQ= +google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= +google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/proto/mcp/v1/mcp.proto b/proto/mcp/v1/mcp.proto new file mode 100644 index 0000000..8603a48 --- /dev/null +++ b/proto/mcp/v1/mcp.proto @@ -0,0 +1,236 @@ +syntax = "proto3"; +package mcp.v1; + +option go_package = "git.wntrmute.dev/kyle/mcp/gen/mcp/v1;mcpv1"; + +import "google/protobuf/timestamp.proto"; + +service McpAgentService { + // Service lifecycle + rpc Deploy(DeployRequest) returns (DeployResponse); + rpc StopService(StopServiceRequest) returns (StopServiceResponse); + rpc StartService(StartServiceRequest) returns (StartServiceResponse); + rpc RestartService(RestartServiceRequest) returns (RestartServiceResponse); + + // Desired state + rpc SyncDesiredState(SyncDesiredStateRequest) returns (SyncDesiredStateResponse); + + // Status and registry + rpc ListServices(ListServicesRequest) returns (ListServicesResponse); + rpc GetServiceStatus(GetServiceStatusRequest) returns (GetServiceStatusResponse); + rpc LiveCheck(LiveCheckRequest) returns (LiveCheckResponse); + + // Adopt + rpc AdoptContainers(AdoptContainersRequest) returns (AdoptContainersResponse); + + // File transfer + rpc PushFile(PushFileRequest) returns (PushFileResponse); + rpc PullFile(PullFileRequest) returns (PullFileResponse); + + // Node + rpc NodeStatus(NodeStatusRequest) returns (NodeStatusResponse); +} + +// --- Service lifecycle --- + +message ComponentSpec { + string name = 1; + string image = 2; + string network = 3; + string user = 4; + string restart = 5; + repeated string ports = 6; + repeated string volumes = 7; + repeated string cmd = 8; +} + +message ServiceSpec { + string name = 1; + bool active = 2; + repeated ComponentSpec components = 3; +} + +message DeployRequest { + ServiceSpec service = 1; + // Deploy a single component by name. Empty means deploy all. + string component = 2; +} + +message DeployResponse { + repeated ComponentResult results = 1; +} + +message ComponentResult { + string name = 1; + bool success = 2; + string error = 3; +} + +message StopServiceRequest { + string name = 1; +} + +message StopServiceResponse { + repeated ComponentResult results = 1; +} + +message StartServiceRequest { + string name = 1; +} + +message StartServiceResponse { + repeated ComponentResult results = 1; +} + +message RestartServiceRequest { + string name = 1; +} + +message RestartServiceResponse { + repeated ComponentResult results = 1; +} + +// --- Desired state --- + +message SyncDesiredStateRequest { + // All services for this node. + repeated ServiceSpec services = 1; +} + +message SyncDesiredStateResponse { + repeated ServiceSyncResult results = 1; +} + +message ServiceSyncResult { + string name = 1; + // Whether the desired state was updated. + bool changed = 2; + string summary = 3; +} + +// --- Status and registry --- + +message ListServicesRequest {} + +message ServiceInfo { + string name = 1; + bool active = 2; + repeated ComponentInfo components = 3; +} + +message ComponentInfo { + string name = 1; + string image = 2; + // "running", "stopped", "ignore" + string desired_state = 3; + // "running", "stopped", "exited", "removed", "unknown" + string observed_state = 4; + // Extracted from the image tag. + string version = 5; + google.protobuf.Timestamp started = 6; +} + +message ListServicesResponse { + repeated ServiceInfo services = 1; +} + +message GetServiceStatusRequest { + // Empty means all services. + string name = 1; +} + +message DriftInfo { + string service = 1; + string component = 2; + string desired_state = 3; + string observed_state = 4; +} + +message EventInfo { + string service = 1; + string component = 2; + string prev_state = 3; + string new_state = 4; + google.protobuf.Timestamp timestamp = 5; +} + +message GetServiceStatusResponse { + repeated ServiceInfo services = 1; + repeated DriftInfo drift = 2; + repeated EventInfo recent_events = 3; +} + +message LiveCheckRequest {} + +message LiveCheckResponse { + // Services with freshly observed state from the container runtime. + repeated ServiceInfo services = 1; +} + +// --- Adopt --- + +message AdoptContainersRequest { + // Service name. The agent matches containers named -*. + string service = 1; +} + +message AdoptResult { + // Runtime container name (e.g., "metacrypt-api"). + string container = 1; + // Derived component name (e.g., "api"). + string component = 2; + bool success = 3; + string error = 4; +} + +message AdoptContainersResponse { + repeated AdoptResult results = 1; +} + +// --- File transfer --- +// All paths are relative to /srv// on the node. + +message PushFileRequest { + string service = 1; + // Relative path within the service directory. + string path = 2; + bytes content = 3; + // File permissions (e.g., 0600). + uint32 mode = 4; +} + +message PushFileResponse { + bool success = 1; + string error = 2; +} + +message PullFileRequest { + string service = 1; + // Relative path within the service directory. + string path = 2; +} + +message PullFileResponse { + bytes content = 1; + uint32 mode = 2; + string error = 3; +} + +// --- Node --- + +message NodeStatusRequest {} + +message NodeStatusResponse { + string node_name = 1; + // "podman" or "docker" + string runtime = 2; + string runtime_version = 3; + uint32 service_count = 4; + uint32 component_count = 5; + uint64 disk_total_bytes = 6; + uint64 disk_free_bytes = 7; + uint64 memory_total_bytes = 8; + uint64 memory_free_bytes = 9; + double cpu_usage_percent = 10; + google.protobuf.Timestamp uptime_since = 11; +}