Repository: safedep/vet
Pull request #282 (2024-11-18 15:26:22)

feat: Add source and namespace in manifest in JSON report


Patch:
diff --git a/api/json_report_spec.proto b/api/json_report_spec.proto
index c74bd6d..1da1c3d 100644
--- a/api/json_report_spec.proto
+++ b/api/json_report_spec.proto
@@ -72,6 +72,9 @@ message PackageManifestReport {
   Ecosystem ecosystem = 2;
   string path = 3;
   repeated ReportThreat threats = 4;
+  string display_path = 5;
+  string source_type = 6;
+  string namespace = 7;
 }
 
 // PackageReport represents the first class entity for which we have different type
diff --git a/gen/checks/checks.pb.go b/gen/checks/checks.pb.go
index a9f72fc..7b90d81 100644
--- a/gen/checks/checks.pb.go
+++ b/gen/checks/checks.pb.go
@@ -1,6 +1,6 @@
 // Code generated by protoc-gen-go. DO NOT EDIT.
 // versions:
-// 	protoc-gen-go v1.31.0
+// 	protoc-gen-go v1.35.2
 // 	protoc        v3.21.12
 // source: checks.proto
 
@@ -120,7 +120,7 @@ func file_checks_proto_rawDescGZIP() []byte {
 }
 
 var file_checks_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
-var file_checks_proto_goTypes = []interface{}{
+var file_checks_proto_goTypes = []any{
 	(CheckType)(0), // 0: CheckType
 }
 var file_checks_proto_depIdxs = []int32{
diff --git a/gen/exceptionsapi/exceptions_spec.pb.go b/gen/exceptionsapi/exceptions_spec.pb.go
index 8a07e1e..8836b44 100644
--- a/gen/exceptionsapi/exceptions_spec.pb.go
+++ b/gen/exceptionsapi/exceptions_spec.pb.go
@@ -1,6 +1,6 @@
 // Code generated by protoc-gen-go. DO NOT EDIT.
 // versions:
-// 	protoc-gen-go v1.31.0
+// 	protoc-gen-go v1.35.2
 // 	protoc        v3.21.12
 // source: exceptions_spec.proto
 
@@ -35,11 +35,9 @@ type Exception struct {
 
 func (x *Exception) Reset() {
 	*x = Exception{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_exceptions_spec_proto_msgTypes[0]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_exceptions_spec_proto_msgTypes[0]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *Exception) String() string {
@@ -50,7 +48,7 @@ func (*Exception) ProtoMessage() {}
 
 func (x *Exception) ProtoReflect() protoreflect.Message {
 	mi := &file_exceptions_spec_proto_msgTypes[0]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -119,11 +117,9 @@ type ExceptionSuite struct {
 
 func (x *ExceptionSuite) Reset() {
 	*x = ExceptionSuite{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_exceptions_spec_proto_msgTypes[1]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_exceptions_spec_proto_msgTypes[1]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *ExceptionSuite) String() string {
@@ -134,7 +130,7 @@ func (*ExceptionSuite) ProtoMessage() {}
 
 func (x *ExceptionSuite) ProtoReflect() protoreflect.Message {
 	mi := &file_exceptions_spec_proto_msgTypes[1]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -210,7 +206,7 @@ func file_exceptions_spec_proto_rawDescGZIP() []byte {
 }
 
 var file_exceptions_spec_proto_msgTypes = make([]protoimpl.MessageInfo, 2)
-var file_exceptions_spec_proto_goTypes = []interface{}{
+var file_exceptions_spec_proto_goTypes = []any{
 	(*Exception)(nil),      // 0: Exception
 	(*ExceptionSuite)(nil), // 1: ExceptionSuite
 }
@@ -228,32 +224,6 @@ func file_exceptions_spec_proto_init() {
 	if File_exceptions_spec_proto != nil {
 		return
 	}
-	if !protoimpl.UnsafeEnabled {
-		file_exceptions_spec_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*Exception); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_exceptions_spec_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*ExceptionSuite); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-	}
 	type x struct{}
 	out := protoimpl.TypeBuilder{
 		File: protoimpl.DescBuilder{
diff --git a/gen/filterinput/filter_input_spec.pb.go b/gen/filterinput/filter_input_spec.pb.go
index f1c090b..9a04344 100644
--- a/gen/filterinput/filter_input_spec.pb.go
+++ b/gen/filterinput/filter_input_spec.pb.go
@@ -1,6 +1,6 @@
 // Code generated by protoc-gen-go. DO NOT EDIT.
 // versions:
-// 	protoc-gen-go v1.31.0
+// 	protoc-gen-go v1.35.2
 // 	protoc        v3.21.12
 // source: filter_input_spec.proto
 
@@ -36,11 +36,9 @@ type FilterInputVulnerabilities struct {
 
 func (x *FilterInputVulnerabilities) Reset() {
 	*x = FilterInputVulnerabilities{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_filter_input_spec_proto_msgTypes[0]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_filter_input_spec_proto_msgTypes[0]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *FilterInputVulnerabilities) String() string {
@@ -51,7 +49,7 @@ func (*FilterInputVulnerabilities) ProtoMessage() {}
 
 func (x *FilterInputVulnerabilities) ProtoReflect() protoreflect.Message {
 	mi := &file_filter_input_spec_proto_msgTypes[0]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -113,11 +111,9 @@ type FilterInputPackageVersion struct {
 
 func (x *FilterInputPackageVersion) Reset() {
 	*x = FilterInputPackageVersion{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_filter_input_spec_proto_msgTypes[1]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_filter_input_spec_proto_msgTypes[1]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *FilterInputPackageVersion) String() string {
@@ -128,7 +124,7 @@ func (*FilterInputPackageVersion) ProtoMessage() {}
 
 func (x *FilterInputPackageVersion) ProtoReflect() protoreflect.Message {
 	mi := &file_filter_input_spec_proto_msgTypes[1]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -178,11 +174,9 @@ type FilterInput struct {
 
 func (x *FilterInput) Reset() {
 	*x = FilterInput{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_filter_input_spec_proto_msgTypes[2]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_filter_input_spec_proto_msgTypes[2]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *FilterInput) String() string {
@@ -193,7 +187,7 @@ func (*FilterInput) ProtoMessage() {}
 
 func (x *FilterInput) ProtoReflect() protoreflect.Message {
 	mi := &file_filter_input_spec_proto_msgTypes[2]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -305,7 +299,7 @@ func file_filter_input_spec_proto_rawDescGZIP() []byte {
 }
 
 var file_filter_input_spec_proto_msgTypes = make([]protoimpl.MessageInfo, 3)
-var file_filter_input_spec_proto_goTypes = []interface{}{
+var file_filter_input_spec_proto_goTypes = []any{
 	(*FilterInputVulnerabilities)(nil),  // 0: FilterInputVulnerabilities
 	(*FilterInputPackageVersion)(nil),   // 1: FilterInputPackageVersion
 	(*FilterInput)(nil),                 // 2: FilterInput
@@ -335,44 +329,6 @@ func file_filter_input_spec_proto_init() {
 	if File_filter_input_spec_proto != nil {
 		return
 	}
-	if !protoimpl.UnsafeEnabled {
-		file_filter_input_spec_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*FilterInputVulnerabilities); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_filter_input_spec_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*FilterInputPackageVersion); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_filter_input_spec_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*FilterInput); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-	}
 	type x struct{}
 	out := protoimpl.TypeBuilder{
 		File: protoimpl.DescBuilder{
diff --git a/gen/filtersuite/filter_suite_spec.pb.go b/gen/filtersuite/filter_suite_spec.pb.go
index 73f332e..e23c264 100644
--- a/gen/filtersuite/filter_suite_spec.pb.go
+++ b/gen/filtersuite/filter_suite_spec.pb.go
@@ -1,6 +1,6 @@
 // Code generated by protoc-gen-go. DO NOT EDIT.
 // versions:
-// 	protoc-gen-go v1.31.0
+// 	protoc-gen-go v1.35.2
 // 	protoc        v3.21.12
 // source: filter_suite_spec.proto
 
@@ -37,11 +37,9 @@ type Filter struct {
 
 func (x *Filter) Reset() {
 	*x = Filter{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_filter_suite_spec_proto_msgTypes[0]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_filter_suite_spec_proto_msgTypes[0]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *Filter) String() string {
@@ -52,7 +50,7 @@ func (*Filter) ProtoMessage() {}
 
 func (x *Filter) ProtoReflect() protoreflect.Message {
 	mi := &file_filter_suite_spec_proto_msgTypes[0]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -129,11 +127,9 @@ type FilterSuite struct {
 
 func (x *FilterSuite) Reset() {
 	*x = FilterSuite{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_filter_suite_spec_proto_msgTypes[1]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_filter_suite_spec_proto_msgTypes[1]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *FilterSuite) String() string {
@@ -144,7 +140,7 @@ func (*FilterSuite) ProtoMessage() {}
 
 func (x *FilterSuite) ProtoReflect() protoreflect.Message {
 	mi := &file_filter_suite_spec_proto_msgTypes[1]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -232,7 +228,7 @@ func file_filter_suite_spec_proto_rawDescGZIP() []byte {
 }
 
 var file_filter_suite_spec_proto_msgTypes = make([]protoimpl.MessageInfo, 2)
-var file_filter_suite_spec_proto_goTypes = []interface{}{
+var file_filter_suite_spec_proto_goTypes = []any{
 	(*Filter)(nil),        // 0: Filter
 	(*FilterSuite)(nil),   // 1: FilterSuite
 	(checks.CheckType)(0), // 2: CheckType
@@ -252,32 +248,6 @@ func file_filter_suite_spec_proto_init() {
 	if File_filter_suite_spec_proto != nil {
 		return
 	}
-	if !protoimpl.UnsafeEnabled {
-		file_filter_suite_spec_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*Filter); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_filter_suite_spec_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*FilterSuite); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-	}
 	type x struct{}
 	out := protoimpl.TypeBuilder{
 		File: protoimpl.DescBuilder{
diff --git a/gen/jsonreport/json_report_spec.pb.go b/gen/jsonreport/json_report_spec.pb.go
index 59cd368..f24e03f 100644
--- a/gen/jsonreport/json_report_spec.pb.go
+++ b/gen/jsonreport/json_report_spec.pb.go
@@ -1,6 +1,6 @@
 // Code generated by protoc-gen-go. DO NOT EDIT.
 // versions:
-// 	protoc-gen-go v1.31.0
+// 	protoc-gen-go v1.35.2
 // 	protoc        v3.21.12
 // source: json_report_spec.proto
 
@@ -282,11 +282,9 @@ type RemediationAdvice struct {
 
 func (x *RemediationAdvice) Reset() {
 	*x = RemediationAdvice{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_json_report_spec_proto_msgTypes[0]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_json_report_spec_proto_msgTypes[0]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *RemediationAdvice) String() string {
@@ -297,7 +295,7 @@ func (*RemediationAdvice) ProtoMessage() {}
 
 func (x *RemediationAdvice) ProtoReflect() protoreflect.Message {
 	mi := &file_json_report_spec_proto_msgTypes[0]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -378,11 +376,9 @@ type ReportThreat struct {
 
 func (x *ReportThreat) Reset() {
 	*x = ReportThreat{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_json_report_spec_proto_msgTypes[1]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_json_report_spec_proto_msgTypes[1]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *ReportThreat) String() string {
@@ -393,7 +389,7 @@ func (*ReportThreat) ProtoMessage() {}
 
 func (x *ReportThreat) ProtoReflect() protoreflect.Message {
 	mi := &file_json_report_spec_proto_msgTypes[1]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -469,19 +465,20 @@ type PackageManifestReport struct {
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 
-	Id        string           `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
-	Ecosystem models.Ecosystem `protobuf:"varint,2,opt,name=ecosystem,proto3,enum=Ecosystem" json:"ecosystem,omitempty"`
-	Path      string           `protobuf:"bytes,3,opt,name=path,proto3" json:"path,omitempty"`
-	Threats   []*ReportThreat  `protobuf:"bytes,4,rep,name=threats,proto3" json:"threats,omitempty"`
+	Id          string           `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+	Ecosystem   models.Ecosystem `protobuf:"varint,2,opt,name=ecosystem,proto3,enum=Ecosystem" json:"ecosystem,omitempty"`
+	Path        string           `protobuf:"bytes,3,opt,name=path,proto3" json:"path,omitempty"`
+	Threats     []*ReportThreat  `protobuf:"bytes,4,rep,name=threats,proto3" json:"threats,omitempty"`
+	DisplayPath string           `protobuf:"bytes,5,opt,name=display_path,json=displayPath,proto3" json:"display_path,omitempty"`
+	SourceType  string           `protobuf:"bytes,6,opt,name=source_type,json=sourceType,proto3" json:"source_type,omitempty"`
+	Namespace   string           `protobuf:"bytes,7,opt,name=namespace,proto3" json:"namespace,omitempty"`
 }
 
 func (x *PackageManifestReport) Reset() {
 	*x = PackageManifestReport{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_json_report_spec_proto_msgTypes[2]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_json_report_spec_proto_msgTypes[2]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *PackageManifestReport) String() string {
@@ -492,7 +489,7 @@ func (*PackageManifestReport) ProtoMessage() {}
 
 func (x *PackageManifestReport) ProtoReflect() protoreflect.Message {
 	mi := &file_json_report_spec_proto_msgTypes[2]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -535,6 +532,27 @@ func (x *PackageManifestReport) GetThreats() []*ReportThreat {
 	return nil
 }
 
+func (x *PackageManifestReport) GetDisplayPath() string {
+	if x != nil {
+		return x.DisplayPath
+	}
+	return ""
+}
+
+func (x *PackageManifestReport) GetSourceType() string {
+	if x != nil {
+		return x.SourceType
+	}
+	return ""
+}
+
+func (x *PackageManifestReport) GetNamespace() string {
+	if x != nil {
+		return x.Namespace
+	}
+	return ""
+}
+
 // PackageReport represents the first class entity for which we have different type
 // of reporting information
 type PackageReport struct {
@@ -556,11 +574,9 @@ type PackageReport struct {
 
 func (x *PackageReport) Reset() {
 	*x = PackageReport{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_json_report_spec_proto_msgTypes[3]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_json_report_spec_proto_msgTypes[3]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *PackageReport) String() string {
@@ -571,7 +587,7 @@ func (*PackageReport) ProtoMessage() {}
 
 func (x *PackageReport) ProtoReflect() protoreflect.Message {
 	mi := &file_json_report_spec_proto_msgTypes[3]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -647,11 +663,9 @@ type ReportMeta struct {
 
 func (x *ReportMeta) Reset() {
 	*x = ReportMeta{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_json_report_spec_proto_msgTypes[4]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_json_report_spec_proto_msgTypes[4]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *ReportMeta) String() string {
@@ -662,7 +676,7 @@ func (*ReportMeta) ProtoMessage() {}
 
 func (x *ReportMeta) ProtoReflect() protoreflect.Message {
 	mi := &file_json_report_spec_proto_msgTypes[4]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -710,11 +724,9 @@ type Report struct {
 
 func (x *Report) Reset() {
 	*x = Report{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_json_report_spec_proto_msgTypes[5]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_json_report_spec_proto_msgTypes[5]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *Report) String() string {
@@ -725,7 +737,7 @@ func (*Report) ProtoMessage() {}
 
 func (x *Report) ProtoReflect() protoreflect.Message {
 	mi := &file_json_report_spec_proto_msgTypes[5]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -826,7 +838,7 @@ var file_json_report_spec_proto_rawDesc = []byte{
 	0x68, 0x72, 0x65, 0x61, 0x74, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x15, 0x55, 0x6e, 0x6b, 0x6e, 0x6f,
 	0x77, 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x68, 0x72, 0x65, 0x61, 0x74, 0x49, 0x64,
 	0x10, 0x00, 0x12, 0x15, 0x0a, 0x11, 0x4c, 0x6f, 0x63, 0x6b, 0x66, 0x69, 0x6c, 0x65, 0x50, 0x6f,
-	0x69, 0x73, 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x10, 0x01, 0x22, 0x8e, 0x01, 0x0a, 0x15, 0x50, 0x61,
+	0x69, 0x73, 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x10, 0x01, 0x22, 0xf0, 0x01, 0x0a, 0x15, 0x50, 0x61,
 	0x63, 0x6b, 0x61, 0x67, 0x65, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x52, 0x65, 0x70,
 	0x6f, 0x72, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
 	0x02, 0x69, 0x64, 0x12, 0x28, 0x0a, 0x09, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d,
@@ -835,54 +847,61 @@ var file_json_report_spec_proto_rawDesc = []byte{
 	0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74,
 	0x68, 0x12, 0x27, 0x0a, 0x07, 0x74, 0x68, 0x72, 0x65, 0x61, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03,
 	0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x68, 0x72, 0x65, 0x61,
-	0x74, 0x52, 0x07, 0x74, 0x68, 0x72, 0x65, 0x61, 0x74, 0x73, 0x22, 0xc6, 0x02, 0x0a, 0x0d, 0x50,
-	0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x22, 0x0a, 0x07,
-	0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e,
-	0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x07, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65,
-	0x12, 0x1c, 0x0a, 0x09, 0x6d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x73, 0x18, 0x02, 0x20,
-	0x03, 0x28, 0x09, 0x52, 0x09, 0x6d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x73, 0x12, 0x2a,
-	0x0a, 0x0a, 0x76, 0x69, 0x6f, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03,
-	0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x56, 0x69, 0x6f, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a,
-	0x76, 0x69, 0x6f, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2c, 0x0a, 0x07, 0x61, 0x64,
-	0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x52, 0x65,
-	0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x64, 0x76, 0x69, 0x63, 0x65, 0x52,
-	0x07, 0x61, 0x64, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x3f, 0x0a, 0x0f, 0x76, 0x75, 0x6c, 0x6e,
-	0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28,
-	0x0b, 0x32, 0x15, 0x2e, 0x49, 0x6e, 0x73, 0x69, 0x67, 0x68, 0x74, 0x56, 0x75, 0x6c, 0x6e, 0x65,
-	0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x0f, 0x76, 0x75, 0x6c, 0x6e, 0x65, 0x72,
-	0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x2f, 0x0a, 0x08, 0x6c, 0x69, 0x63,
-	0x65, 0x6e, 0x73, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x49, 0x6e,
-	0x73, 0x69, 0x67, 0x68, 0x74, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x49, 0x6e, 0x66, 0x6f,
-	0x52, 0x08, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x73, 0x12, 0x27, 0x0a, 0x07, 0x74, 0x68,
-	0x72, 0x65, 0x61, 0x74, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x52, 0x65,
-	0x70, 0x6f, 0x72, 0x74, 0x54, 0x68, 0x72, 0x65, 0x61, 0x74, 0x52, 0x07, 0x74, 0x68, 0x72, 0x65,
-	0x61, 0x74, 0x73, 0x22, 0x6b, 0x0a, 0x0a, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x4d, 0x65, 0x74,
-	0x61, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x6f, 0x6f, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01,
-	0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x6f, 0x6f, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x21,
-	0x0a, 0x0c, 0x74, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02,
-	0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x74, 0x6f, 0x6f, 0x6c, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f,
-	0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18,
-	0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74,
-	0x22, 0x8b, 0x01, 0x0a, 0x06, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x1f, 0x0a, 0x04, 0x6d,
-	0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x52, 0x65, 0x70, 0x6f,
-	0x72, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x34, 0x0a, 0x09,
-	0x6d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32,
-	0x16, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73,
-	0x74, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x09, 0x6d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73,
-	0x74, 0x73, 0x12, 0x2a, 0x0a, 0x08, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x18, 0x03,
-	0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65,
-	0x70, 0x6f, 0x72, 0x74, 0x52, 0x08, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2a, 0x7b,
-	0x0a, 0x15, 0x52, 0x65, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x64, 0x76,
-	0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x15, 0x0a, 0x11, 0x55, 0x6e, 0x6b, 0x6e, 0x6f,
-	0x77, 0x6e, 0x41, 0x64, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x10, 0x00, 0x12, 0x12,
-	0x0a, 0x0e, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65,
-	0x10, 0x01, 0x12, 0x1b, 0x0a, 0x17, 0x41, 0x6c, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x65, 0x50,
-	0x6f, 0x70, 0x75, 0x6c, 0x61, 0x72, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x10, 0x02, 0x12,
-	0x1a, 0x0a, 0x16, 0x41, 0x6c, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, 0x75,
-	0x72, 0x65, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x10, 0x03, 0x42, 0x2b, 0x5a, 0x29, 0x67,
-	0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x73, 0x61, 0x66, 0x65, 0x64, 0x65,
-	0x70, 0x2f, 0x76, 0x65, 0x74, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x72, 0x65,
-	0x70, 0x6f, 0x72, 0x74, 0x73, 0x70, 0x65, 0x63, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+	0x74, 0x52, 0x07, 0x74, 0x68, 0x72, 0x65, 0x61, 0x74, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x69,
+	0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x50, 0x61, 0x74, 0x68, 0x12, 0x1f, 0x0a,
+	0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1c,
+	0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0xc6, 0x02, 0x0a,
+	0x0d, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x22,
+	0x0a, 0x07, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x08, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x07, 0x70, 0x61, 0x63, 0x6b, 0x61,
+	0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x73, 0x18,
+	0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x6d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x73,
+	0x12, 0x2a, 0x0a, 0x0a, 0x76, 0x69, 0x6f, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03,
+	0x20, 0x03, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x56, 0x69, 0x6f, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+	0x52, 0x0a, 0x76, 0x69, 0x6f, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2c, 0x0a, 0x07,
+	0x61, 0x64, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e,
+	0x52, 0x65, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x64, 0x76, 0x69, 0x63,
+	0x65, 0x52, 0x07, 0x61, 0x64, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x3f, 0x0a, 0x0f, 0x76, 0x75,
+	0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x05, 0x20,
+	0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x49, 0x6e, 0x73, 0x69, 0x67, 0x68, 0x74, 0x56, 0x75, 0x6c,
+	0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x0f, 0x76, 0x75, 0x6c, 0x6e,
+	0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x2f, 0x0a, 0x08, 0x6c,
+	0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e,
+	0x49, 0x6e, 0x73, 0x69, 0x67, 0x68, 0x74, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x49, 0x6e,
+	0x66, 0x6f, 0x52, 0x08, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x73, 0x12, 0x27, 0x0a, 0x07,
+	0x74, 0x68, 0x72, 0x65, 0x61, 0x74, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e,
+	0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x68, 0x72, 0x65, 0x61, 0x74, 0x52, 0x07, 0x74, 0x68,
+	0x72, 0x65, 0x61, 0x74, 0x73, 0x22, 0x6b, 0x0a, 0x0a, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x4d,
+	0x65, 0x74, 0x61, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x6f, 0x6f, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65,
+	0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x6f, 0x6f, 0x6c, 0x4e, 0x61, 0x6d, 0x65,
+	0x12, 0x21, 0x0a, 0x0c, 0x74, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e,
+	0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x74, 0x6f, 0x6f, 0x6c, 0x56, 0x65, 0x72, 0x73,
+	0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61,
+	0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64,
+	0x41, 0x74, 0x22, 0x8b, 0x01, 0x0a, 0x06, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x1f, 0x0a,
+	0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x52, 0x65,
+	0x70, 0x6f, 0x72, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x34,
+	0x0a, 0x09, 0x6d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28,
+	0x0b, 0x32, 0x16, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x4d, 0x61, 0x6e, 0x69, 0x66,
+	0x65, 0x73, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x09, 0x6d, 0x61, 0x6e, 0x69, 0x66,
+	0x65, 0x73, 0x74, 0x73, 0x12, 0x2a, 0x0a, 0x08, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73,
+	0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65,
+	0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x08, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73,
+	0x2a, 0x7b, 0x0a, 0x15, 0x52, 0x65, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41,
+	0x64, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x15, 0x0a, 0x11, 0x55, 0x6e, 0x6b,
+	0x6e, 0x6f, 0x77, 0x6e, 0x41, 0x64, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x10, 0x00,
+	0x12, 0x12, 0x0a, 0x0e, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x50, 0x61, 0x63, 0x6b, 0x61,
+	0x67, 0x65, 0x10, 0x01, 0x12, 0x1b, 0x0a, 0x17, 0x41, 0x6c, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74,
+	0x65, 0x50, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x72, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x10,
+	0x02, 0x12, 0x1a, 0x0a, 0x16, 0x41, 0x6c, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x65, 0x53, 0x65,
+	0x63, 0x75, 0x72, 0x65, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x10, 0x03, 0x42, 0x2b, 0x5a,
+	0x29, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x73, 0x61, 0x66, 0x65,
+	0x64, 0x65, 0x70, 0x2f, 0x76, 0x65, 0x74, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e,
+	0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x70, 0x65, 0x63, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x33,
 }
 
 var (
@@ -899,7 +918,7 @@ func file_json_report_spec_proto_rawDescGZIP() []byte {
 
 var file_json_report_spec_proto_enumTypes = make([]protoimpl.EnumInfo, 5)
 var file_json_report_spec_proto_msgTypes = make([]protoimpl.MessageInfo, 6)
-var file_json_report_spec_proto_goTypes = []interface{}{
+var file_json_report_spec_proto_goTypes = []any{
 	(RemediationAdviceType)(0),          // 0: RemediationAdviceType
 	(ReportThreat_Confidence)(0),        // 1: ReportThreat.Confidence
 	(ReportThreat_Source)(0),            // 2: ReportThreat.Source
@@ -947,80 +966,6 @@ func file_json_report_spec_proto_init() {
 	if File_json_report_spec_proto != nil {
 		return
 	}
-	if !protoimpl.UnsafeEnabled {
-		file_json_report_spec_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*RemediationAdvice); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_json_report_spec_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*ReportThreat); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_json_report_spec_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*PackageManifestReport); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_json_report_spec_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*PackageReport); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_json_report_spec_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*ReportMeta); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_json_report_spec_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*Report); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-	}
 	type x struct{}
 	out := protoimpl.TypeBuilder{
 		File: protoimpl.DescBuilder{
diff --git a/gen/models/insights_models.pb.go b/gen/models/insights_models.pb.go
index 228ab05..cf37297 100644
--- a/gen/models/insights_models.pb.go
+++ b/gen/models/insights_models.pb.go
@@ -1,6 +1,6 @@
 // Code generated by protoc-gen-go. DO NOT EDIT.
 // versions:
-// 	protoc-gen-go v1.31.0
+// 	protoc-gen-go v1.35.2
 // 	protoc        v3.21.12
 // source: insights_models.proto
 
@@ -182,11 +182,9 @@ type InsightVulnerabilitySeverity struct {
 
 func (x *InsightVulnerabilitySeverity) Reset() {
 	*x = InsightVulnerabilitySeverity{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_insights_models_proto_msgTypes[0]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_insights_models_proto_msgTypes[0]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *InsightVulnerabilitySeverity) String() string {
@@ -197,7 +195,7 @@ func (*InsightVulnerabilitySeverity) ProtoMessage() {}
 
 func (x *InsightVulnerabilitySeverity) ProtoReflect() protoreflect.Message {
 	mi := &file_insights_models_proto_msgTypes[0]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -247,11 +245,9 @@ type InsightVulnerability struct {
 
 func (x *InsightVulnerability) Reset() {
 	*x = InsightVulnerability{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_insights_models_proto_msgTypes[1]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_insights_models_proto_msgTypes[1]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *InsightVulnerability) String() string {
@@ -262,7 +258,7 @@ func (*InsightVulnerability) ProtoMessage() {}
 
 func (x *InsightVulnerability) ProtoReflect() protoreflect.Message {
 	mi := &file_insights_models_proto_msgTypes[1]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -322,11 +318,9 @@ type InsightLicenseInfo struct {
 
 func (x *InsightLicenseInfo) Reset() {
 	*x = InsightLicenseInfo{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_insights_models_proto_msgTypes[2]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_insights_models_proto_msgTypes[2]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *InsightLicenseInfo) String() string {
@@ -337,7 +331,7 @@ func (*InsightLicenseInfo) ProtoMessage() {}
 
 func (x *InsightLicenseInfo) ProtoReflect() protoreflect.Message {
 	mi := &file_insights_models_proto_msgTypes[2]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -370,11 +364,9 @@ type InsightScorecard struct {
 
 func (x *InsightScorecard) Reset() {
 	*x = InsightScorecard{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_insights_models_proto_msgTypes[3]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_insights_models_proto_msgTypes[3]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *InsightScorecard) String() string {
@@ -385,7 +377,7 @@ func (*InsightScorecard) ProtoMessage() {}
 
 func (x *InsightScorecard) ProtoReflect() protoreflect.Message {
 	mi := &file_insights_models_proto_msgTypes[3]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -428,11 +420,9 @@ type InsightProjectInfo struct {
 
 func (x *InsightProjectInfo) Reset() {
 	*x = InsightProjectInfo{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_insights_models_proto_msgTypes[4]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_insights_models_proto_msgTypes[4]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *InsightProjectInfo) String() string {
@@ -443,7 +433,7 @@ func (*InsightProjectInfo) ProtoMessage() {}
 
 func (x *InsightProjectInfo) ProtoReflect() protoreflect.Message {
 	mi := &file_insights_models_proto_msgTypes[4]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -569,7 +559,7 @@ func file_insights_models_proto_rawDescGZIP() []byte {
 
 var file_insights_models_proto_enumTypes = make([]protoimpl.EnumInfo, 3)
 var file_insights_models_proto_msgTypes = make([]protoimpl.MessageInfo, 6)
-var file_insights_models_proto_goTypes = []interface{}{
+var file_insights_models_proto_goTypes = []any{
 	(InsightVulnerabilitySeverity_Type)(0), // 0: InsightVulnerabilitySeverity.Type
 	(InsightVulnerabilitySeverity_Risk)(0), // 1: InsightVulnerabilitySeverity.Risk
 	(InsightProjectInfo_Type)(0),           // 2: InsightProjectInfo.Type
@@ -598,68 +588,6 @@ func file_insights_models_proto_init() {
 	if File_insights_models_proto != nil {
 		return
 	}
-	if !protoimpl.UnsafeEnabled {
-		file_insights_models_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*InsightVulnerabilitySeverity); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_insights_models_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*InsightVulnerability); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_insights_models_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*InsightLicenseInfo); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_insights_models_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*InsightScorecard); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_insights_models_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*InsightProjectInfo); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-	}
 	type x struct{}
 	out := protoimpl.TypeBuilder{
 		File: protoimpl.DescBuilder{
diff --git a/gen/models/models.pb.go b/gen/models/models.pb.go
index e2c75a2..3c62244 100644
--- a/gen/models/models.pb.go
+++ b/gen/models/models.pb.go
@@ -1,6 +1,6 @@
 // Code generated by protoc-gen-go. DO NOT EDIT.
 // versions:
-// 	protoc-gen-go v1.31.0
+// 	protoc-gen-go v1.35.2
 // 	protoc        v3.21.12
 // source: models.proto
 
@@ -111,11 +111,9 @@ type Package struct {
 
 func (x *Package) Reset() {
 	*x = Package{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_models_proto_msgTypes[0]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_models_proto_msgTypes[0]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *Package) String() string {
@@ -126,7 +124,7 @@ func (*Package) ProtoMessage() {}
 
 func (x *Package) ProtoReflect() protoreflect.Message {
 	mi := &file_models_proto_msgTypes[0]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -174,11 +172,9 @@ type PackageManifest struct {
 
 func (x *PackageManifest) Reset() {
 	*x = PackageManifest{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_models_proto_msgTypes[1]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_models_proto_msgTypes[1]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *PackageManifest) String() string {
@@ -189,7 +185,7 @@ func (*PackageManifest) ProtoMessage() {}
 
 func (x *PackageManifest) ProtoReflect() protoreflect.Message {
 	mi := &file_models_proto_msgTypes[1]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -273,7 +269,7 @@ func file_models_proto_rawDescGZIP() []byte {
 
 var file_models_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
 var file_models_proto_msgTypes = make([]protoimpl.MessageInfo, 2)
-var file_models_proto_goTypes = []interface{}{
+var file_models_proto_goTypes = []any{
 	(Ecosystem)(0),          // 0: Ecosystem
 	(*Package)(nil),         // 1: Package
 	(*PackageManifest)(nil), // 2: PackageManifest
@@ -294,32 +290,6 @@ func file_models_proto_init() {
 	if File_models_proto != nil {
 		return
 	}
-	if !protoimpl.UnsafeEnabled {
-		file_models_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*Package); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_models_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*PackageManifest); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-	}
 	type x struct{}
 	out := protoimpl.TypeBuilder{
 		File: protoimpl.DescBuilder{
diff --git a/gen/violations/violations.pb.go b/gen/violations/violations.pb.go
index 1b7352f..fba3048 100644
--- a/gen/violations/violations.pb.go
+++ b/gen/violations/violations.pb.go
@@ -1,6 +1,6 @@
 // Code generated by protoc-gen-go. DO NOT EDIT.
 // versions:
-// 	protoc-gen-go v1.31.0
+// 	protoc-gen-go v1.35.2
 // 	protoc        v3.21.12
 // source: violations.proto
 
@@ -36,11 +36,9 @@ type Violation struct {
 
 func (x *Violation) Reset() {
 	*x = Violation{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_violations_proto_msgTypes[0]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_violations_proto_msgTypes[0]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *Violation) String() string {
@@ -51,7 +49,7 @@ func (*Violation) ProtoMessage() {}
 
 func (x *Violation) ProtoReflect() protoreflect.Message {
 	mi := &file_violations_proto_msgTypes[0]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -134,7 +132,7 @@ func file_violations_proto_rawDescGZIP() []byte {
 }
 
 var file_violations_proto_msgTypes = make([]protoimpl.MessageInfo, 2)
-var file_violations_proto_goTypes = []interface{}{
+var file_violations_proto_goTypes = []any{
 	(*Violation)(nil),          // 0: Violation
 	nil,                        // 1: Violation.ExtraEntry
 	(checks.CheckType)(0),      // 2: CheckType
@@ -158,20 +156,6 @@ func file_violations_proto_init() {
 	if File_violations_proto != nil {
 		return
 	}
-	if !protoimpl.UnsafeEnabled {
-		file_violations_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*Violation); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-	}
 	type x struct{}
 	out := protoimpl.TypeBuilder{
 		File: protoimpl.DescBuilder{
diff --git a/pkg/models/models.go b/pkg/models/models.go
index 1b017b2..f33075d 100644
--- a/pkg/models/models.go
+++ b/pkg/models/models.go
@@ -79,6 +79,10 @@ func (ps PackageManifestSource) GetPath() string {
 	return ps.Path
 }
 
+func (ps PackageManifestSource) GetType() ManifestSourceType {
+	return ps.Type
+}
+
 // Represents a package manifest that contains a list
 // of packages. Example: pom.xml, requirements.txt
 type PackageManifest struct {
diff --git a/pkg/reporter/json_report.go b/pkg/reporter/json_report.go
index 12d4ae7..214efc4 100644
--- a/pkg/reporter/json_report.go
+++ b/pkg/reporter/json_report.go
@@ -148,10 +148,13 @@ func (r *jsonReportGenerator) findPackageManifestReport(manifest *models.Package
 	manifestId := manifest.Id()
 	if _, ok := r.manifests[manifestId]; !ok {
 		r.manifests[manifestId] = &jsonreportspec.PackageManifestReport{
-			Id:        manifestId,
-			Path:      manifest.GetDisplayPath(),
-			Ecosystem: manifest.GetSpecEcosystem(),
-			Threats:   make([]*schema.ReportThreat, 0),
+			Id:          manifestId,
+			SourceType:  string(manifest.GetSource().GetType()),
+			Namespace:   manifest.GetSource().GetNamespace(),
+			Path:        manifest.GetSource().GetPath(),
+			DisplayPath: manifest.GetDisplayPath(),
+			Ecosystem:   manifest.GetSpecEcosystem(),
+			Threats:     make([]*schema.ReportThreat, 0),
 		}
 	}
 


Test patch:
diff --git a/pkg/reporter/json_report_test.go b/pkg/reporter/json_report_test.go
index 85a6fcc..b9ad6e3 100644
--- a/pkg/reporter/json_report_test.go
+++ b/pkg/reporter/json_report_test.go
@@ -28,7 +28,13 @@ func TestJsonRepoGenerator(t *testing.T) {
 			"Verify sanity of test",
 			[]*models.PackageManifest{
 				&models.PackageManifest{
-					Path:      "/tmp/sample-path",
+					Source: models.PackageManifestSource{
+						Type:        models.ManifestSourceLocal,
+						Namespace:   "/namespace/1",
+						Path:        "sample-path",
+						DisplayPath: "/tmp/sample/display/path/does/not/matter",
+					},
+					Path:      "/real/path",
 					Ecosystem: models.EcosystemGo,
 					Packages: []*models.Package{
 						&models.Package{
@@ -43,11 +49,43 @@ func TestJsonRepoGenerator(t *testing.T) {
 			[]*analyzer.AnalyzerEvent{},
 			func(t *testing.T, report *jsonreportspec.Report) {
 				assert.Equal(t, 1, len(report.Manifests))
+				assert.Equal(t, "sample-path", report.Manifests[0].Path)
+				assert.Equal(t, "/namespace/1", report.Manifests[0].Namespace)
+
+				assert.Equal(t, "/namespace/1/sample-path", report.Manifests[0].DisplayPath)
+				assert.Equal(t, string(models.ManifestSourceLocal), report.Manifests[0].SourceType)
 				assert.Equal(t, 1, len(report.Packages))
 				assert.Equal(t, "golib1", report.Packages[0].GetPackage().GetName())
 				assert.Equal(t, "0.1.2", report.Packages[0].GetPackage().GetVersion())
 			},
 		},
+		{
+			"Verify GitHub manifest",
+			[]*models.PackageManifest{
+				&models.PackageManifest{
+					Source: models.PackageManifestSource{
+						Type:        models.ManifestSourceGitRepository,
+						Namespace:   "/namespace/1",
+						Path:        "sample-path",
+						DisplayPath: "/tmp/sample/display/path",
+					},
+					Path:      "/real/path",
+					Ecosystem: models.EcosystemGo,
+					Packages: []*models.Package{
+						&models.Package{
+							PackageDetails: lockfile.PackageDetails{
+								Name:    "golib1",
+								Version: "0.1.2",
+							},
+						},
+					},
+				},
+			},
+			[]*analyzer.AnalyzerEvent{},
+			func(t *testing.T, report *jsonreportspec.Report) {
+				assert.Equal(t, "/tmp/sample/display/path", report.Manifests[0].DisplayPath)
+			},
+		},
 	}
 
 	tmpFile, err := os.CreateTemp("", "vet-json-report-test-*")