From 599def169eff7f7c0a31f978830c34084f20d132 Mon Sep 17 00:00:00 2001 From: viambot <79611529+viambot@users.noreply.github.com> Date: Tue, 20 Jan 2026 15:18:21 +0000 Subject: [PATCH 01/10] [WORKFLOW] Updating protos from viamrobotics/api, commit: e7e4641a180cfa103640573882f4ce6fd4f4ab80 --- src/viam/gen/app/datasync/v1/data_sync_pb2.py | 36 +- .../gen/app/datasync/v1/data_sync_pb2.pyi | 6 +- src/viam/gen/app/v1/app_pb2.py | 1108 ++++++++--------- src/viam/gen/app/v1/app_pb2.pyi | 20 +- src/viam/gen/common/v1/common_pb2.py | 62 +- src/viam/gen/common/v1/common_pb2.pyi | 29 +- src/viam/gen/component/audioinput/__init__.py | 0 .../gen/component/audioinput/v1/__init__.py | 0 .../audioinput/v1/audioinput_grpc.py | 63 - .../component/audioinput/v1/audioinput_pb2.py | 45 - .../audioinput/v1/audioinput_pb2.pyi | 179 --- .../proto/component/audioinput/__init__.py | 30 - src/viam/proto/component/camera/__init__.py | 2 + src/viam/version_metadata.py | 2 +- 14 files changed, 649 insertions(+), 933 deletions(-) delete mode 100644 src/viam/gen/component/audioinput/__init__.py delete mode 100644 src/viam/gen/component/audioinput/v1/__init__.py delete mode 100644 src/viam/gen/component/audioinput/v1/audioinput_grpc.py delete mode 100644 src/viam/gen/component/audioinput/v1/audioinput_pb2.py delete mode 100644 src/viam/gen/component/audioinput/v1/audioinput_pb2.pyi delete mode 100644 src/viam/proto/component/audioinput/__init__.py diff --git a/src/viam/gen/app/datasync/v1/data_sync_pb2.py b/src/viam/gen/app/datasync/v1/data_sync_pb2.py index 3f15016d87..e848c14bf5 100644 --- a/src/viam/gen/app/datasync/v1/data_sync_pb2.py +++ b/src/viam/gen/app/datasync/v1/data_sync_pb2.py @@ -11,7 +11,7 @@ from google.protobuf import any_pb2 as google_dot_protobuf_dot_any__pb2 from google.protobuf import struct_pb2 as google_dot_protobuf_dot_struct__pb2 from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1fapp/datasync/v1/data_sync.proto\x12\x14viam.app.datasync.v1\x1a\x16app/data/v1/data.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x19google/protobuf/any.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto"\xa7\x01\n\x18DataCaptureUploadRequest\x12@\n\x08metadata\x18\x01 \x01(\x0b2$.viam.app.datasync.v1.UploadMetadataR\x08metadata\x12I\n\x0fsensor_contents\x18\x02 \x03(\x0b2 .viam.app.datasync.v1.SensorDataR\x0esensorContents"Z\n\x19DataCaptureUploadResponse\x12\x17\n\x07file_id\x18\x01 \x01(\tR\x06fileId\x12$\n\x0ebinary_data_id\x18\x02 \x01(\tR\x0cbinaryDataId"\xaf\x01\n\x11FileUploadRequest\x12B\n\x08metadata\x18\x01 \x01(\x0b2$.viam.app.datasync.v1.UploadMetadataH\x00R\x08metadata\x12E\n\rfile_contents\x18\x02 \x01(\x0b2\x1e.viam.app.datasync.v1.FileDataH\x00R\x0cfileContentsB\x0f\n\rupload_packet"W\n\x12FileUploadResponse\x12\x1b\n\x07file_id\x18\x01 \x01(\tB\x02\x18\x01R\x06fileId\x12$\n\x0ebinary_data_id\x18\x02 \x01(\tR\x0cbinaryDataId"\x99\x01\n!StreamingDataCaptureUploadRequest\x12M\n\x08metadata\x18\x01 \x01(\x0b2/.viam.app.datasync.v1.DataCaptureUploadMetadataH\x00R\x08metadata\x12\x14\n\x04data\x18\x02 \x01(\x0cH\x00R\x04dataB\x0f\n\rupload_packet"g\n"StreamingDataCaptureUploadResponse\x12\x1b\n\x07file_id\x18\x01 \x01(\tB\x02\x18\x01R\x06fileId\x12$\n\x0ebinary_data_id\x18\x02 \x01(\tR\x0cbinaryDataId"\x92\x02\n\x0eSensorMetadata\x12A\n\x0etime_requested\x18\x01 \x01(\x0b2\x1a.google.protobuf.TimestampR\rtimeRequested\x12?\n\rtime_received\x18\x02 \x01(\x0b2\x1a.google.protobuf.TimestampR\x0ctimeReceived\x12;\n\tmime_type\x18\x03 \x01(\x0e2\x1e.viam.app.datasync.v1.MimeTypeR\x08mimeType\x12?\n\x0bannotations\x18\x04 \x01(\x0b2\x1d.viam.app.data.v1.AnnotationsR\x0bannotations"\xa3\x01\n\nSensorData\x12@\n\x08metadata\x18\x01 \x01(\x0b2$.viam.app.datasync.v1.SensorMetadataR\x08metadata\x121\n\x06struct\x18\x02 \x01(\x0b2\x17.google.protobuf.StructH\x00R\x06struct\x12\x18\n\x06binary\x18\x03 \x01(\x0cH\x00R\x06binaryB\x06\n\x04data"\x1e\n\x08FileData\x12\x12\n\x04data\x18\x01 \x01(\x0cR\x04data"\xb2\x04\n\x0eUploadMetadata\x12\x17\n\x07part_id\x18\x01 \x01(\tR\x06partId\x12%\n\x0ecomponent_type\x18\x02 \x01(\tR\rcomponentType\x12%\n\x0ecomponent_name\x18\x03 \x01(\tR\rcomponentName\x12\x1f\n\x0bmethod_name\x18\x05 \x01(\tR\nmethodName\x122\n\x04type\x18\x06 \x01(\x0e2\x1e.viam.app.datasync.v1.DataTypeR\x04type\x12\x1b\n\tfile_name\x18\x07 \x01(\tR\x08fileName\x12g\n\x11method_parameters\x18\x08 \x03(\x0b2:.viam.app.datasync.v1.UploadMetadata.MethodParametersEntryR\x10methodParameters\x12%\n\x0efile_extension\x18\t \x01(\tR\rfileExtension\x12\x12\n\x04tags\x18\n \x03(\tR\x04tags\x12\x1f\n\x0bdataset_ids\x18\x0c \x03(\tR\ndatasetIds\x1aY\n\x15MethodParametersEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12*\n\x05value\x18\x02 \x01(\x0b2\x14.google.protobuf.AnyR\x05value:\x028\x01J\x04\x08\x04\x10\x05J\x04\x08\x0b\x10\x0cR\x0fcomponent_modelR\nsession_id"q\n\x0fCaptureInterval\x120\n\x05start\x18\x01 \x01(\x0b2\x1a.google.protobuf.TimestampR\x05start\x12,\n\x03end\x18\x02 \x01(\x0b2\x1a.google.protobuf.TimestampR\x03end"\xe5\x03\n\x13DataCaptureMetadata\x12%\n\x0ecomponent_type\x18\x01 \x01(\tR\rcomponentType\x12%\n\x0ecomponent_name\x18\x02 \x01(\tR\rcomponentName\x12\x1f\n\x0bmethod_name\x18\x04 \x01(\tR\nmethodName\x122\n\x04type\x18\x05 \x01(\x0e2\x1e.viam.app.datasync.v1.DataTypeR\x04type\x12l\n\x11method_parameters\x18\x06 \x03(\x0b2?.viam.app.datasync.v1.DataCaptureMetadata.MethodParametersEntryR\x10methodParameters\x12%\n\x0efile_extension\x18\x07 \x01(\tR\rfileExtension\x12\x12\n\x04tags\x18\x08 \x03(\tR\x04tags\x1aY\n\x15MethodParametersEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12*\n\x05value\x18\x02 \x01(\x0b2\x14.google.protobuf.AnyR\x05value:\x028\x01J\x04\x08\x03\x10\x04J\x04\x08\t\x10\nR\x0fcomponent_modelR\nsession_id"\xb9\x01\n\x19DataCaptureUploadMetadata\x12M\n\x0fupload_metadata\x18\x01 \x01(\x0b2$.viam.app.datasync.v1.UploadMetadataR\x0euploadMetadata\x12M\n\x0fsensor_metadata\x18\x02 \x01(\x0b2$.viam.app.datasync.v1.SensorMetadataR\x0esensorMetadata*\x90\x01\n\x08MimeType\x12\x19\n\x15MIME_TYPE_UNSPECIFIED\x10\x00\x12\x18\n\x14MIME_TYPE_IMAGE_JPEG\x10\x01\x12\x17\n\x13MIME_TYPE_IMAGE_PNG\x10\x02\x12\x1d\n\x19MIME_TYPE_APPLICATION_PCD\x10\x03\x12\x17\n\x13MIME_TYPE_VIDEO_MP4\x10\x04*t\n\x08DataType\x12\x19\n\x15DATA_TYPE_UNSPECIFIED\x10\x00\x12\x1b\n\x17DATA_TYPE_BINARY_SENSOR\x10\x01\x12\x1c\n\x18DATA_TYPE_TABULAR_SENSOR\x10\x02\x12\x12\n\x0eDATA_TYPE_FILE\x10\x032\x80\x04\n\x0fDataSyncService\x12\x9e\x01\n\x11DataCaptureUpload\x12..viam.app.datasync.v1.DataCaptureUploadRequest\x1a/.viam.app.datasync.v1.DataCaptureUploadResponse"(\x82\xd3\xe4\x93\x02"" /datasync/v1/data_capture_upload\x12\x83\x01\n\nFileUpload\x12\'.viam.app.datasync.v1.FileUploadRequest\x1a(.viam.app.datasync.v1.FileUploadResponse" \x82\xd3\xe4\x93\x02\x1a"\x18/datasync/v1/file_upload(\x01\x12\xc5\x01\n\x1aStreamingDataCaptureUpload\x127.viam.app.datasync.v1.StreamingDataCaptureUploadRequest\x1a8.viam.app.datasync.v1.StreamingDataCaptureUploadResponse"2\x82\xd3\xe4\x93\x02,"*/datasync/v1/streaming_data_capture_upload(\x01B!Z\x1fgo.viam.com/api/app/datasync/v1b\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1fapp/datasync/v1/data_sync.proto\x12\x14viam.app.datasync.v1\x1a\x16app/data/v1/data.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x19google/protobuf/any.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto"\xa7\x01\n\x18DataCaptureUploadRequest\x12@\n\x08metadata\x18\x01 \x01(\x0b2$.viam.app.datasync.v1.UploadMetadataR\x08metadata\x12I\n\x0fsensor_contents\x18\x02 \x03(\x0b2 .viam.app.datasync.v1.SensorDataR\x0esensorContents"Z\n\x19DataCaptureUploadResponse\x12\x17\n\x07file_id\x18\x01 \x01(\tR\x06fileId\x12$\n\x0ebinary_data_id\x18\x02 \x01(\tR\x0cbinaryDataId"\xaf\x01\n\x11FileUploadRequest\x12B\n\x08metadata\x18\x01 \x01(\x0b2$.viam.app.datasync.v1.UploadMetadataH\x00R\x08metadata\x12E\n\rfile_contents\x18\x02 \x01(\x0b2\x1e.viam.app.datasync.v1.FileDataH\x00R\x0cfileContentsB\x0f\n\rupload_packet"W\n\x12FileUploadResponse\x12\x1b\n\x07file_id\x18\x01 \x01(\tB\x02\x18\x01R\x06fileId\x12$\n\x0ebinary_data_id\x18\x02 \x01(\tR\x0cbinaryDataId"\x99\x01\n!StreamingDataCaptureUploadRequest\x12M\n\x08metadata\x18\x01 \x01(\x0b2/.viam.app.datasync.v1.DataCaptureUploadMetadataH\x00R\x08metadata\x12\x14\n\x04data\x18\x02 \x01(\x0cH\x00R\x04dataB\x0f\n\rupload_packet"g\n"StreamingDataCaptureUploadResponse\x12\x1b\n\x07file_id\x18\x01 \x01(\tB\x02\x18\x01R\x06fileId\x12$\n\x0ebinary_data_id\x18\x02 \x01(\tR\x0cbinaryDataId"\x92\x02\n\x0eSensorMetadata\x12A\n\x0etime_requested\x18\x01 \x01(\x0b2\x1a.google.protobuf.TimestampR\rtimeRequested\x12?\n\rtime_received\x18\x02 \x01(\x0b2\x1a.google.protobuf.TimestampR\x0ctimeReceived\x12;\n\tmime_type\x18\x03 \x01(\x0e2\x1e.viam.app.datasync.v1.MimeTypeR\x08mimeType\x12?\n\x0bannotations\x18\x04 \x01(\x0b2\x1d.viam.app.data.v1.AnnotationsR\x0bannotations"\xa3\x01\n\nSensorData\x12@\n\x08metadata\x18\x01 \x01(\x0b2$.viam.app.datasync.v1.SensorMetadataR\x08metadata\x121\n\x06struct\x18\x02 \x01(\x0b2\x17.google.protobuf.StructH\x00R\x06struct\x12\x18\n\x06binary\x18\x03 \x01(\x0cH\x00R\x06binaryB\x06\n\x04data"\x1e\n\x08FileData\x12\x12\n\x04data\x18\x01 \x01(\x0cR\x04data"\xcf\x04\n\x0eUploadMetadata\x12\x17\n\x07part_id\x18\x01 \x01(\tR\x06partId\x12%\n\x0ecomponent_type\x18\x02 \x01(\tR\rcomponentType\x12%\n\x0ecomponent_name\x18\x03 \x01(\tR\rcomponentName\x12\x1f\n\x0bmethod_name\x18\x05 \x01(\tR\nmethodName\x122\n\x04type\x18\x06 \x01(\x0e2\x1e.viam.app.datasync.v1.DataTypeR\x04type\x12\x1b\n\tfile_name\x18\x07 \x01(\tR\x08fileName\x12g\n\x11method_parameters\x18\x08 \x03(\x0b2:.viam.app.datasync.v1.UploadMetadata.MethodParametersEntryR\x10methodParameters\x12%\n\x0efile_extension\x18\t \x01(\tR\rfileExtension\x12\x12\n\x04tags\x18\n \x03(\tR\x04tags\x12\x1f\n\x0bdataset_ids\x18\x0c \x03(\tR\ndatasetIds\x12\x1b\n\tmime_type\x18\r \x01(\tR\x08mimeType\x1aY\n\x15MethodParametersEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12*\n\x05value\x18\x02 \x01(\x0b2\x14.google.protobuf.AnyR\x05value:\x028\x01J\x04\x08\x04\x10\x05J\x04\x08\x0b\x10\x0cR\x0fcomponent_modelR\nsession_id"q\n\x0fCaptureInterval\x120\n\x05start\x18\x01 \x01(\x0b2\x1a.google.protobuf.TimestampR\x05start\x12,\n\x03end\x18\x02 \x01(\x0b2\x1a.google.protobuf.TimestampR\x03end"\xe5\x03\n\x13DataCaptureMetadata\x12%\n\x0ecomponent_type\x18\x01 \x01(\tR\rcomponentType\x12%\n\x0ecomponent_name\x18\x02 \x01(\tR\rcomponentName\x12\x1f\n\x0bmethod_name\x18\x04 \x01(\tR\nmethodName\x122\n\x04type\x18\x05 \x01(\x0e2\x1e.viam.app.datasync.v1.DataTypeR\x04type\x12l\n\x11method_parameters\x18\x06 \x03(\x0b2?.viam.app.datasync.v1.DataCaptureMetadata.MethodParametersEntryR\x10methodParameters\x12%\n\x0efile_extension\x18\x07 \x01(\tR\rfileExtension\x12\x12\n\x04tags\x18\x08 \x03(\tR\x04tags\x1aY\n\x15MethodParametersEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12*\n\x05value\x18\x02 \x01(\x0b2\x14.google.protobuf.AnyR\x05value:\x028\x01J\x04\x08\x03\x10\x04J\x04\x08\t\x10\nR\x0fcomponent_modelR\nsession_id"\xb9\x01\n\x19DataCaptureUploadMetadata\x12M\n\x0fupload_metadata\x18\x01 \x01(\x0b2$.viam.app.datasync.v1.UploadMetadataR\x0euploadMetadata\x12M\n\x0fsensor_metadata\x18\x02 \x01(\x0b2$.viam.app.datasync.v1.SensorMetadataR\x0esensorMetadata*\x90\x01\n\x08MimeType\x12\x19\n\x15MIME_TYPE_UNSPECIFIED\x10\x00\x12\x18\n\x14MIME_TYPE_IMAGE_JPEG\x10\x01\x12\x17\n\x13MIME_TYPE_IMAGE_PNG\x10\x02\x12\x1d\n\x19MIME_TYPE_APPLICATION_PCD\x10\x03\x12\x17\n\x13MIME_TYPE_VIDEO_MP4\x10\x04*t\n\x08DataType\x12\x19\n\x15DATA_TYPE_UNSPECIFIED\x10\x00\x12\x1b\n\x17DATA_TYPE_BINARY_SENSOR\x10\x01\x12\x1c\n\x18DATA_TYPE_TABULAR_SENSOR\x10\x02\x12\x12\n\x0eDATA_TYPE_FILE\x10\x032\x80\x04\n\x0fDataSyncService\x12\x9e\x01\n\x11DataCaptureUpload\x12..viam.app.datasync.v1.DataCaptureUploadRequest\x1a/.viam.app.datasync.v1.DataCaptureUploadResponse"(\x82\xd3\xe4\x93\x02"" /datasync/v1/data_capture_upload\x12\x83\x01\n\nFileUpload\x12\'.viam.app.datasync.v1.FileUploadRequest\x1a(.viam.app.datasync.v1.FileUploadResponse" \x82\xd3\xe4\x93\x02\x1a"\x18/datasync/v1/file_upload(\x01\x12\xc5\x01\n\x1aStreamingDataCaptureUpload\x127.viam.app.datasync.v1.StreamingDataCaptureUploadRequest\x1a8.viam.app.datasync.v1.StreamingDataCaptureUploadResponse"2\x82\xd3\xe4\x93\x02,"*/datasync/v1/streaming_data_capture_upload(\x01B!Z\x1fgo.viam.com/api/app/datasync/v1b\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'app.datasync.v1.data_sync_pb2', _globals) @@ -32,10 +32,10 @@ _globals['_DATASYNCSERVICE'].methods_by_name['FileUpload']._serialized_options = b'\x82\xd3\xe4\x93\x02\x1a"\x18/datasync/v1/file_upload' _globals['_DATASYNCSERVICE'].methods_by_name['StreamingDataCaptureUpload']._loaded_options = None _globals['_DATASYNCSERVICE'].methods_by_name['StreamingDataCaptureUpload']._serialized_options = b'\x82\xd3\xe4\x93\x02,"*/datasync/v1/streaming_data_capture_upload' - _globals['_MIMETYPE']._serialized_start = 2823 - _globals['_MIMETYPE']._serialized_end = 2967 - _globals['_DATATYPE']._serialized_start = 2969 - _globals['_DATATYPE']._serialized_end = 3085 + _globals['_MIMETYPE']._serialized_start = 2852 + _globals['_MIMETYPE']._serialized_end = 2996 + _globals['_DATATYPE']._serialized_start = 2998 + _globals['_DATATYPE']._serialized_end = 3114 _globals['_DATACAPTUREUPLOADREQUEST']._serialized_start = 202 _globals['_DATACAPTUREUPLOADREQUEST']._serialized_end = 369 _globals['_DATACAPTUREUPLOADRESPONSE']._serialized_start = 371 @@ -55,16 +55,16 @@ _globals['_FILEDATA']._serialized_start = 1434 _globals['_FILEDATA']._serialized_end = 1464 _globals['_UPLOADMETADATA']._serialized_start = 1467 - _globals['_UPLOADMETADATA']._serialized_end = 2029 - _globals['_UPLOADMETADATA_METHODPARAMETERSENTRY']._serialized_start = 1899 - _globals['_UPLOADMETADATA_METHODPARAMETERSENTRY']._serialized_end = 1988 - _globals['_CAPTUREINTERVAL']._serialized_start = 2031 - _globals['_CAPTUREINTERVAL']._serialized_end = 2144 - _globals['_DATACAPTUREMETADATA']._serialized_start = 2147 - _globals['_DATACAPTUREMETADATA']._serialized_end = 2632 - _globals['_DATACAPTUREMETADATA_METHODPARAMETERSENTRY']._serialized_start = 1899 - _globals['_DATACAPTUREMETADATA_METHODPARAMETERSENTRY']._serialized_end = 1988 - _globals['_DATACAPTUREUPLOADMETADATA']._serialized_start = 2635 - _globals['_DATACAPTUREUPLOADMETADATA']._serialized_end = 2820 - _globals['_DATASYNCSERVICE']._serialized_start = 3088 - _globals['_DATASYNCSERVICE']._serialized_end = 3600 \ No newline at end of file + _globals['_UPLOADMETADATA']._serialized_end = 2058 + _globals['_UPLOADMETADATA_METHODPARAMETERSENTRY']._serialized_start = 1928 + _globals['_UPLOADMETADATA_METHODPARAMETERSENTRY']._serialized_end = 2017 + _globals['_CAPTUREINTERVAL']._serialized_start = 2060 + _globals['_CAPTUREINTERVAL']._serialized_end = 2173 + _globals['_DATACAPTUREMETADATA']._serialized_start = 2176 + _globals['_DATACAPTUREMETADATA']._serialized_end = 2661 + _globals['_DATACAPTUREMETADATA_METHODPARAMETERSENTRY']._serialized_start = 1928 + _globals['_DATACAPTUREMETADATA_METHODPARAMETERSENTRY']._serialized_end = 2017 + _globals['_DATACAPTUREUPLOADMETADATA']._serialized_start = 2664 + _globals['_DATACAPTUREUPLOADMETADATA']._serialized_end = 2849 + _globals['_DATASYNCSERVICE']._serialized_start = 3117 + _globals['_DATASYNCSERVICE']._serialized_end = 3629 \ No newline at end of file diff --git a/src/viam/gen/app/datasync/v1/data_sync_pb2.pyi b/src/viam/gen/app/datasync/v1/data_sync_pb2.pyi index 0c0e57792a..440415270c 100644 --- a/src/viam/gen/app/datasync/v1/data_sync_pb2.pyi +++ b/src/viam/gen/app/datasync/v1/data_sync_pb2.pyi @@ -302,6 +302,7 @@ class UploadMetadata(google.protobuf.message.Message): FILE_EXTENSION_FIELD_NUMBER: builtins.int TAGS_FIELD_NUMBER: builtins.int DATASET_IDS_FIELD_NUMBER: builtins.int + MIME_TYPE_FIELD_NUMBER: builtins.int part_id: builtins.str component_type: builtins.str component_name: builtins.str @@ -309,6 +310,7 @@ class UploadMetadata(google.protobuf.message.Message): type: global___DataType.ValueType file_name: builtins.str file_extension: builtins.str + mime_type: builtins.str @property def method_parameters(self) -> google.protobuf.internal.containers.MessageMap[builtins.str, google.protobuf.any_pb2.Any]: @@ -322,10 +324,10 @@ class UploadMetadata(google.protobuf.message.Message): def dataset_ids(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.str]: ... - def __init__(self, *, part_id: builtins.str=..., component_type: builtins.str=..., component_name: builtins.str=..., method_name: builtins.str=..., type: global___DataType.ValueType=..., file_name: builtins.str=..., method_parameters: collections.abc.Mapping[builtins.str, google.protobuf.any_pb2.Any] | None=..., file_extension: builtins.str=..., tags: collections.abc.Iterable[builtins.str] | None=..., dataset_ids: collections.abc.Iterable[builtins.str] | None=...) -> None: + def __init__(self, *, part_id: builtins.str=..., component_type: builtins.str=..., component_name: builtins.str=..., method_name: builtins.str=..., type: global___DataType.ValueType=..., file_name: builtins.str=..., method_parameters: collections.abc.Mapping[builtins.str, google.protobuf.any_pb2.Any] | None=..., file_extension: builtins.str=..., tags: collections.abc.Iterable[builtins.str] | None=..., dataset_ids: collections.abc.Iterable[builtins.str] | None=..., mime_type: builtins.str=...) -> None: ... - def ClearField(self, field_name: typing.Literal['component_name', b'component_name', 'component_type', b'component_type', 'dataset_ids', b'dataset_ids', 'file_extension', b'file_extension', 'file_name', b'file_name', 'method_name', b'method_name', 'method_parameters', b'method_parameters', 'part_id', b'part_id', 'tags', b'tags', 'type', b'type']) -> None: + def ClearField(self, field_name: typing.Literal['component_name', b'component_name', 'component_type', b'component_type', 'dataset_ids', b'dataset_ids', 'file_extension', b'file_extension', 'file_name', b'file_name', 'method_name', b'method_name', 'method_parameters', b'method_parameters', 'mime_type', b'mime_type', 'part_id', b'part_id', 'tags', b'tags', 'type', b'type']) -> None: ... global___UploadMetadata = UploadMetadata diff --git a/src/viam/gen/app/v1/app_pb2.py b/src/viam/gen/app/v1/app_pb2.py index 2bd72a49af..58662da6d9 100644 --- a/src/viam/gen/app/v1/app_pb2.py +++ b/src/viam/gen/app/v1/app_pb2.py @@ -12,7 +12,7 @@ from google.protobuf import struct_pb2 as google_dot_protobuf_dot_struct__pb2 from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 from ...tagger.v1 import tagger_pb2 as tagger_dot_v1_dot_tagger__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x10app/v1/app.proto\x12\x0bviam.app.v1\x1a#app/mltraining/v1/ml_training.proto\x1a\x1eapp/packages/v1/packages.proto\x1a\x16common/v1/common.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x16tagger/v1/tagger.proto"\xdb\x04\n\x05Robot\x123\n\x02id\x18\x01 \x01(\tB#\x9a\x84\x9e\x03\x1ebson:"_id" json:"id,omitempty"R\x02id\x120\n\x04name\x18\x02 \x01(\tB\x1c\x9a\x84\x9e\x03\x17bson:"name" json:"name"R\x04name\x12@\n\x08location\x18\x03 \x01(\tB$\x9a\x84\x9e\x03\x1fbson:"location" json:"location"R\x08location\x12g\n\x0blast_access\x18\x04 \x01(\x0b2\x1a.google.protobuf.TimestampB*\x9a\x84\x9e\x03%bson:"last_access" json:"last_access"R\nlastAccess\x12Q\n\ncreated_on\x18\x05 \x01(\x0b2\x1a.google.protobuf.TimestampB\x16\x9a\x84\x9e\x03\x11bson:"created_on"R\tcreatedOn\x12s\n\x0conline_state\x18\x06 \x01(\x0e2\x18.viam.app.v1.OnlineStateB6\x9a\x84\x9e\x031bson:"online_state" json:"online_state,omitempty"R\x0bonlineState\x12x\n\x14seconds_since_online\x18\x07 \x01(\x03BF\x9a\x84\x9e\x03Abson:"seconds_since_online" json:"seconds_since_online,omitempty"R\x12secondsSinceOnline"\x9e\n\n\tRobotPart\x123\n\x02id\x18\x01 \x01(\tB#\x9a\x84\x9e\x03\x1ebson:"_id" json:"id,omitempty"R\x02id\x120\n\x04name\x18\x02 \x01(\tB\x1c\x9a\x84\x9e\x03\x17bson:"name" json:"name"R\x04name\x12?\n\x08dns_name\x18\n \x01(\tB$\x9a\x84\x9e\x03\x1fbson:"dns_name" json:"dns_name"R\x07dnsName\x12B\n\x06secret\x18\x03 \x01(\tB*\x9a\x84\x9e\x03%bson:"secret" json:"secret,omitempty"R\x06secret\x124\n\x05robot\x18\x04 \x01(\tB\x1e\x9a\x84\x9e\x03\x19bson:"robot" json:"robot"R\x05robot\x12A\n\x0blocation_id\x18\x0c \x01(\tB \x9a\x84\x9e\x03\x1bbson:"location_id" json:"-"R\nlocationId\x12b\n\x0crobot_config\x18\x05 \x01(\x0b2\x17.google.protobuf.StructB&\x9a\x84\x9e\x03!bson:"config" json:"robot_config"R\x0brobotConfig\x12g\n\x0blast_access\x18\x06 \x01(\x0b2\x1a.google.protobuf.TimestampB*\x9a\x84\x9e\x03%bson:"last_access" json:"last_access"R\nlastAccess\x12\x7f\n\x12user_supplied_info\x18\x07 \x01(\x0b2\x17.google.protobuf.StructB8\x9a\x84\x9e\x033bson:"user_supplied_info" json:"user_supplied_info"R\x10userSuppliedInfo\x12C\n\tmain_part\x18\x08 \x01(\x08B&\x9a\x84\x9e\x03!bson:"main_part" json:"main_part"R\x08mainPart\x12\x12\n\x04fqdn\x18\t \x01(\tR\x04fqdn\x12\x1d\n\nlocal_fqdn\x18\x0b \x01(\tR\tlocalFqdn\x12Q\n\ncreated_on\x18\r \x01(\x0b2\x1a.google.protobuf.TimestampB\x16\x9a\x84\x9e\x03\x11bson:"created_on"R\tcreatedOn\x12H\n\x07secrets\x18\x0e \x03(\x0b2\x19.viam.app.v1.SharedSecretB\x13\x9a\x84\x9e\x03\x0ebson:"secrets"R\x07secrets\x12Z\n\x0clast_updated\x18\x0f \x01(\x0b2\x1a.google.protobuf.TimestampB\x1b\x9a\x84\x9e\x03\x16bson:"last_updated_at"R\x0blastUpdated\x12s\n\x0conline_state\x18\x10 \x01(\x0e2\x18.viam.app.v1.OnlineStateB6\x9a\x84\x9e\x031bson:"online_state" json:"online_state,omitempty"R\x0bonlineState\x12x\n\x14seconds_since_online\x18\x11 \x01(\x03BF\x9a\x84\x9e\x03Abson:"seconds_since_online" json:"seconds_since_online,omitempty"R\x12secondsSinceOnline"\xf8\x02\n\x15RobotPartHistoryEntry\x120\n\x04part\x18\x01 \x01(\tB\x1c\x9a\x84\x9e\x03\x17bson:"part" json:"part"R\x04part\x124\n\x05robot\x18\x02 \x01(\tB\x1e\x9a\x84\x9e\x03\x19bson:"robot" json:"robot"R\x05robot\x12L\n\x04when\x18\x03 \x01(\x0b2\x1a.google.protobuf.TimestampB\x1c\x9a\x84\x9e\x03\x17bson:"when" json:"when"R\x04when\x12D\n\x03old\x18\x04 \x01(\x0b2\x16.viam.app.v1.RobotPartB\x1a\x9a\x84\x9e\x03\x15bson:"old" json:"old"R\x03old\x12c\n\tedited_by\x18\x05 \x01(\x0b2\x1e.viam.app.v1.AuthenticatorInfoB&\x9a\x84\x9e\x03!bson:"edited_by" json:"edited_by"R\x08editedBy"\x85\x01\n\x11AuthenticatorInfo\x123\n\x04type\x18\x01 \x01(\x0e2\x1f.viam.app.v1.AuthenticationTypeR\x04type\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value\x12%\n\x0eis_deactivated\x18\x03 \x01(\x08R\risDeactivated"\x1a\n\x18ListOrganizationsRequest"\xde\x01\n\x0cOrganization\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x129\n\ncreated_on\x18\x03 \x01(\x0b2\x1a.google.protobuf.TimestampR\tcreatedOn\x12)\n\x10public_namespace\x18\x04 \x01(\tR\x0fpublicNamespace\x12%\n\x0edefault_region\x18\x05 \x01(\tR\rdefaultRegion\x12\x15\n\x03cid\x18\x06 \x01(\tH\x00R\x03cid\x88\x01\x01B\x06\n\x04_cid"\xa1\x02\n\x12OrganizationMember\x12\x17\n\x07user_id\x18\x01 \x01(\tR\x06userId\x12\x16\n\x06emails\x18\x02 \x03(\tR\x06emails\x129\n\ndate_added\x18\x03 \x01(\x0b2\x1a.google.protobuf.TimestampR\tdateAdded\x12>\n\nlast_login\x18\x04 \x01(\x0b2\x1a.google.protobuf.TimestampH\x00R\tlastLogin\x88\x01\x01\x12@\n\x0blast_access\x18\x05 \x01(\x0b2\x1a.google.protobuf.TimestampH\x01R\nlastAccess\x88\x01\x01B\r\n\x0b_last_loginB\x0e\n\x0c_last_access"\\\n\x19ListOrganizationsResponse\x12?\n\rorganizations\x18\x01 \x03(\x0b2\x19.viam.app.v1.OrganizationR\rorganizations"\xd2\x01\n\x12OrganizationInvite\x12\'\n\x0forganization_id\x18\x01 \x01(\tR\x0eorganizationId\x12\x14\n\x05email\x18\x02 \x01(\tR\x05email\x129\n\ncreated_on\x18\x03 \x01(\x0b2\x1a.google.protobuf.TimestampR\tcreatedOn\x12B\n\x0eauthorizations\x18\x04 \x03(\x0b2\x1a.viam.app.v1.AuthorizationR\x0eauthorizations"/\n\x19CreateOrganizationRequest\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name"[\n\x1aCreateOrganizationResponse\x12=\n\x0corganization\x18\x01 \x01(\x0b2\x19.viam.app.v1.OrganizationR\x0corganization"A\n\x16GetOrganizationRequest\x12\'\n\x0forganization_id\x18\x01 \x01(\tR\x0eorganizationId"X\n\x17GetOrganizationResponse\x12=\n\x0corganization\x18\x01 \x01(\x0b2\x19.viam.app.v1.OrganizationR\x0corganization"\x81\x01\n+GetOrganizationNamespaceAvailabilityRequest\x12)\n\x10public_namespace\x18\x01 \x01(\tR\x0fpublicNamespace\x12\'\n\x0forganization_id\x18\x02 \x01(\tR\x0eorganizationId"L\n,GetOrganizationNamespaceAvailabilityResponse\x12\x1c\n\tavailable\x18\x01 \x01(\x08R\tavailable"K\n\x12FragmentImportList\x125\n\x07imports\x18\x01 \x03(\x0b2\x1b.viam.app.v1.FragmentImportR\x07imports"\xd8\x02\n\x19UpdateOrganizationRequest\x12\'\n\x0forganization_id\x18\x01 \x01(\tR\x0eorganizationId\x12\x17\n\x04name\x18\x02 \x01(\tH\x00R\x04name\x88\x01\x01\x12.\n\x10public_namespace\x18\x03 \x01(\tH\x01R\x0fpublicNamespace\x88\x01\x01\x12\x1b\n\x06region\x18\x04 \x01(\tH\x02R\x06region\x88\x01\x01\x12\x15\n\x03cid\x18\x05 \x01(\tH\x03R\x03cid\x88\x01\x01\x12O\n\x10fragment_imports\x18\x06 \x01(\x0b2\x1f.viam.app.v1.FragmentImportListH\x04R\x0ffragmentImports\x88\x01\x01B\x07\n\x05_nameB\x13\n\x11_public_namespaceB\t\n\x07_regionB\x06\n\x04_cidB\x13\n\x11_fragment_imports"[\n\x1aUpdateOrganizationResponse\x12=\n\x0corganization\x18\x01 \x01(\x0b2\x19.viam.app.v1.OrganizationR\x0corganization"\x7f\n"UpdateOrganizationNamespaceRequest\x12\'\n\x0forganization_id\x18\x01 \x01(\tR\x0eorganizationId\x120\n\x14new_public_namespace\x18\x02 \x01(\tR\x12newPublicNamespace"d\n#UpdateOrganizationNamespaceResponse\x12=\n\x0corganization\x18\x01 \x01(\x0b2\x19.viam.app.v1.OrganizationR\x0corganization"D\n\x19DeleteOrganizationRequest\x12\'\n\x0forganization_id\x18\x01 \x01(\tR\x0eorganizationId"\x1c\n\x1aDeleteOrganizationResponse"I\n\x1eGetOrganizationMetadataRequest\x12\'\n\x0forganization_id\x18\x01 \x01(\tR\x0eorganizationId"N\n\x1fGetOrganizationMetadataResponse\x12+\n\x04data\x18\x01 \x01(\x0b2\x17.google.protobuf.StructR\x04data"y\n!UpdateOrganizationMetadataRequest\x12\'\n\x0forganization_id\x18\x01 \x01(\tR\x0eorganizationId\x12+\n\x04data\x18\x02 \x01(\x0b2\x17.google.protobuf.StructR\x04data"$\n"UpdateOrganizationMetadataResponse"I\n\x1eListOrganizationMembersRequest\x12\'\n\x0forganization_id\x18\x01 \x01(\tR\x0eorganizationId"\xc0\x01\n\x1fListOrganizationMembersResponse\x12\'\n\x0forganization_id\x18\x01 \x01(\tR\x0eorganizationId\x129\n\x07members\x18\x02 \x03(\x0b2\x1f.viam.app.v1.OrganizationMemberR\x07members\x129\n\x07invites\x18\x03 \x03(\x0b2\x1f.viam.app.v1.OrganizationInviteR\x07invites"\xeb\x01\n\x1fCreateOrganizationInviteRequest\x12\'\n\x0forganization_id\x18\x01 \x01(\tR\x0eorganizationId\x12\x14\n\x05email\x18\x02 \x01(\tR\x05email\x12B\n\x0eauthorizations\x18\x03 \x03(\x0b2\x1a.viam.app.v1.AuthorizationR\x0eauthorizations\x12/\n\x11send_email_invite\x18\x04 \x01(\x08H\x00R\x0fsendEmailInvite\x88\x01\x01B\x14\n\x12_send_email_invite"[\n CreateOrganizationInviteResponse\x127\n\x06invite\x18\x01 \x01(\x0b2\x1f.viam.app.v1.OrganizationInviteR\x06invite"\x8a\x02\n-UpdateOrganizationInviteAuthorizationsRequest\x12\'\n\x0forganization_id\x18\x01 \x01(\tR\x0eorganizationId\x12\x14\n\x05email\x18\x02 \x01(\tR\x05email\x12I\n\x12add_authorizations\x18\x03 \x03(\x0b2\x1a.viam.app.v1.AuthorizationR\x11addAuthorizations\x12O\n\x15remove_authorizations\x18\x04 \x03(\x0b2\x1a.viam.app.v1.AuthorizationR\x14removeAuthorizations"i\n.UpdateOrganizationInviteAuthorizationsResponse\x127\n\x06invite\x18\x01 \x01(\x0b2\x1f.viam.app.v1.OrganizationInviteR\x06invite"`\n\x1fDeleteOrganizationInviteRequest\x12\'\n\x0forganization_id\x18\x01 \x01(\tR\x0eorganizationId\x12\x14\n\x05email\x18\x02 \x01(\tR\x05email""\n DeleteOrganizationInviteResponse"\xa7\x01\n\x1fResendOrganizationInviteRequest\x12\'\n\x0forganization_id\x18\x01 \x01(\tR\x0eorganizationId\x12\x14\n\x05email\x18\x02 \x01(\tR\x05email\x12/\n\x11send_email_invite\x18\x03 \x01(\x08H\x00R\x0fsendEmailInvite\x88\x01\x01B\x14\n\x12_send_email_invite"[\n ResendOrganizationInviteResponse\x127\n\x06invite\x18\x01 \x01(\x0b2\x1f.viam.app.v1.OrganizationInviteR\x06invite"c\n\x1fDeleteOrganizationMemberRequest\x12\'\n\x0forganization_id\x18\x01 \x01(\tR\x0eorganizationId\x12\x17\n\x07user_id\x18\x02 \x01(\tR\x06userId""\n DeleteOrganizationMemberResponse"\xd2\x01\n\x0eBillingAddress\x12$\n\x0eaddress_line_1\x18\x01 \x01(\tR\x0caddressLine1\x12)\n\x0eaddress_line_2\x18\x02 \x01(\tH\x00R\x0caddressLine2\x88\x01\x01\x12\x12\n\x04city\x18\x03 \x01(\tR\x04city\x12\x14\n\x05state\x18\x04 \x01(\tR\x05state\x12\x18\n\x07zipcode\x18\x05 \x01(\tR\x07zipcode\x12\x18\n\x07country\x18\x06 \x01(\tR\x07countryB\x11\n\x0f_address_line_2"z\n\x1bEnableBillingServiceRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\x12D\n\x0fbilling_address\x18\x02 \x01(\x0b2\x1b.viam.app.v1.BillingAddressR\x0ebillingAddress"\x1e\n\x1cEnableBillingServiceResponse"z\n\x1bUpdateBillingServiceRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\x12D\n\x0fbilling_address\x18\x02 \x01(\x0b2\x1b.viam.app.v1.BillingAddressR\x0ebillingAddress"\x1e\n\x1cUpdateBillingServiceResponse"7\n\x1eGetBillingServiceConfigRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId"\xdb\x01\n\x1fGetBillingServiceConfigResponse\x12D\n\x0fbilling_address\x18\x01 \x01(\x0b2\x1b.viam.app.v1.BillingAddressR\x0ebillingAddress\x12#\n\rsupport_email\x18\x02 \x01(\tR\x0csupportEmail\x12\x19\n\x08logo_url\x18\x03 \x01(\tR\x07logoUrl\x122\n\x15billing_dashboard_url\x18\x04 \x01(\tR\x13billingDashboardUrl"5\n\x1cDisableBillingServiceRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId"\x1f\n\x1dDisableBillingServiceResponse"Q\n"OrganizationSetSupportEmailRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\x12\x14\n\x05email\x18\x02 \x01(\tR\x05email"%\n#OrganizationSetSupportEmailResponse";\n"OrganizationGetSupportEmailRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId";\n#OrganizationGetSupportEmailResponse\x12\x14\n\x05email\x18\x01 \x01(\tR\x05email":\n\x14OrganizationIdentity\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name"Y\n\x14LocationOrganization\x12\'\n\x0forganization_id\x18\x01 \x01(\tR\x0eorganizationId\x12\x18\n\x07primary\x18\x02 \x01(\x08R\x07primary"\x80\x01\n\x0cLocationAuth\x12\x1a\n\x06secret\x18\x01 \x01(\tB\x02\x18\x01R\x06secret\x12\x1f\n\x0blocation_id\x18\x02 \x01(\tR\nlocationId\x123\n\x07secrets\x18\x03 \x03(\x0b2\x19.viam.app.v1.SharedSecretR\x07secrets"\'\n\rStorageConfig\x12\x16\n\x06region\x18\x01 \x01(\tR\x06region"\xd7\x03\n\x08Location\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x12,\n\x12parent_location_id\x18\x04 \x01(\tR\x10parentLocationId\x12-\n\x04auth\x18\x05 \x01(\x0b2\x19.viam.app.v1.LocationAuthR\x04auth\x12G\n\rorganizations\x18\x06 \x03(\x0b2!.viam.app.v1.LocationOrganizationR\rorganizations\x129\n\ncreated_on\x18\x03 \x01(\x0b2\x1a.google.protobuf.TimestampR\tcreatedOn\x12\x1f\n\x0brobot_count\x18\x07 \x01(\x05R\nrobotCount\x122\n\x06config\x18\x08 \x01(\x0b2\x1a.viam.app.v1.StorageConfigR\x06config\x12X\n\x14primary_org_identity\x18\t \x01(\x0b2!.viam.app.v1.OrganizationIdentityH\x00R\x12primaryOrgIdentity\x88\x01\x01B\x17\n\x15_primary_org_identity"\xd0\x02\n\x0cSharedSecret\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\x9a\x84\x9e\x03\tbson:"id"R\x02id\x12*\n\x06secret\x18\x02 \x01(\tB\x12\x9a\x84\x9e\x03\rbson:"secret"R\x06secret\x12c\n\ncreated_on\x18\x03 \x01(\x0b2\x1a.google.protobuf.TimestampB(\x9a\x84\x9e\x03#bson:"created_on" json:"created_on"R\tcreatedOn\x12H\n\x05state\x18\x04 \x01(\x0e2\x1f.viam.app.v1.SharedSecret.StateB\x11\x9a\x84\x9e\x03\x0cbson:"state"R\x05state"E\n\x05State\x12\x15\n\x11STATE_UNSPECIFIED\x10\x00\x12\x11\n\rSTATE_ENABLED\x10\x01\x12\x12\n\x0eSTATE_DISABLED\x10\x02"\x9e\x01\n\x15CreateLocationRequest\x12\'\n\x0forganization_id\x18\x01 \x01(\tR\x0eorganizationId\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x121\n\x12parent_location_id\x18\x03 \x01(\tH\x00R\x10parentLocationId\x88\x01\x01B\x15\n\x13_parent_location_id"K\n\x16CreateLocationResponse\x121\n\x08location\x18\x01 \x01(\x0b2\x15.viam.app.v1.LocationR\x08location"5\n\x12GetLocationRequest\x12\x1f\n\x0blocation_id\x18\x01 \x01(\tR\nlocationId"H\n\x13GetLocationResponse\x121\n\x08location\x18\x01 \x01(\x0b2\x15.viam.app.v1.LocationR\x08location"\xcc\x01\n\x15UpdateLocationRequest\x12\x1f\n\x0blocation_id\x18\x01 \x01(\tR\nlocationId\x12\x17\n\x04name\x18\x02 \x01(\tH\x00R\x04name\x88\x01\x01\x121\n\x12parent_location_id\x18\x03 \x01(\tH\x01R\x10parentLocationId\x88\x01\x01\x12\x1b\n\x06region\x18\x04 \x01(\tH\x02R\x06region\x88\x01\x01B\x07\n\x05_nameB\x15\n\x13_parent_location_idB\t\n\x07_region"K\n\x16UpdateLocationResponse\x121\n\x08location\x18\x01 \x01(\x0b2\x15.viam.app.v1.LocationR\x08location"8\n\x15DeleteLocationRequest\x12\x1f\n\x0blocation_id\x18\x01 \x01(\tR\nlocationId"\x18\n\x16DeleteLocationResponse"=\n\x1aGetLocationMetadataRequest\x12\x1f\n\x0blocation_id\x18\x01 \x01(\tR\nlocationId"J\n\x1bGetLocationMetadataResponse\x12+\n\x04data\x18\x01 \x01(\x0b2\x17.google.protobuf.StructR\x04data"m\n\x1dUpdateLocationMetadataRequest\x12\x1f\n\x0blocation_id\x18\x01 \x01(\tR\nlocationId\x12+\n\x04data\x18\x02 \x01(\x0b2\x17.google.protobuf.StructR\x04data" \n\x1eUpdateLocationMetadataResponse"N\n+GetOrganizationsWithAccessToLocationRequest\x12\x1f\n\x0blocation_id\x18\x01 \x01(\tR\nlocationId"\x8a\x01\n,GetOrganizationsWithAccessToLocationResponse\x12Z\n\x17organization_identities\x18\x01 \x03(\x0b2!.viam.app.v1.OrganizationIdentityR\x16organizationIdentities"?\n\x14ListLocationsRequest\x12\'\n\x0forganization_id\x18\x01 \x01(\tR\x0eorganizationId"`\n\x14ShareLocationRequest\x12\x1f\n\x0blocation_id\x18\x01 \x01(\tR\nlocationId\x12\'\n\x0forganization_id\x18\x02 \x01(\tR\x0eorganizationId"\x17\n\x15ShareLocationResponse"b\n\x16UnshareLocationRequest\x12\x1f\n\x0blocation_id\x18\x01 \x01(\tR\nlocationId\x12\'\n\x0forganization_id\x18\x02 \x01(\tR\x0eorganizationId"\x19\n\x17UnshareLocationResponse"L\n\x15ListLocationsResponse\x123\n\tlocations\x18\x01 \x03(\x0b2\x15.viam.app.v1.LocationR\tlocations">\n\x1bCreateLocationSecretRequest\x12\x1f\n\x0blocation_id\x18\x01 \x01(\tR\nlocationId"M\n\x1cCreateLocationSecretResponse\x12-\n\x04auth\x18\x01 \x01(\x0b2\x19.viam.app.v1.LocationAuthR\x04auth"[\n\x1bDeleteLocationSecretRequest\x12\x1f\n\x0blocation_id\x18\x01 \x01(\tR\nlocationId\x12\x1b\n\tsecret_id\x18\x02 \x01(\tR\x08secretId"\x1e\n\x1cDeleteLocationSecretResponse"6\n\x13LocationAuthRequest\x12\x1f\n\x0blocation_id\x18\x01 \x01(\tR\nlocationId"E\n\x14LocationAuthResponse\x12-\n\x04auth\x18\x01 \x01(\x0b2\x19.viam.app.v1.LocationAuthR\x04auth"!\n\x0fGetRobotRequest\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id"4\n\x1bGetRoverRentalRobotsRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId"\x9a\x01\n\x10RoverRentalRobot\x12\x19\n\x08robot_id\x18\x01 \x01(\tR\x07robotId\x12\x1f\n\x0blocation_id\x18\x02 \x01(\tR\nlocationId\x12\x1d\n\nrobot_name\x18\x03 \x01(\tR\trobotName\x12+\n\x12robot_main_part_id\x18\x04 \x01(\tR\x0frobotMainPartId"U\n\x1cGetRoverRentalRobotsResponse\x125\n\x06robots\x18\x01 \x03(\x0b2\x1d.viam.app.v1.RoverRentalRobotR\x06robots"<\n\x10GetRobotResponse\x12(\n\x05robot\x18\x01 \x01(\x0b2\x12.viam.app.v1.RobotR\x05robot"1\n\x14GetRobotPartsRequest\x12\x19\n\x08robot_id\x18\x01 \x01(\tR\x07robotId"E\n\x15GetRobotPartsResponse\x12,\n\x05parts\x18\x01 \x03(\x0b2\x16.viam.app.v1.RobotPartR\x05parts"%\n\x13GetRobotPartRequest\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id"c\n\x14GetRobotPartResponse\x12*\n\x04part\x18\x01 \x01(\x0b2\x16.viam.app.v1.RobotPartR\x04part\x12\x1f\n\x0bconfig_json\x18\x02 \x01(\tR\nconfigJson"[\n$GetRobotPartByNameAndLocationRequest\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12\x1f\n\x0blocation_id\x18\x02 \x01(\tR\nlocationId"S\n%GetRobotPartByNameAndLocationResponse\x12*\n\x04part\x18\x01 \x01(\x0b2\x16.viam.app.v1.RobotPartR\x04part"\xce\x03\n\x17GetRobotPartLogsRequest\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12#\n\x0berrors_only\x18\x02 \x01(\x08B\x02\x18\x01R\nerrorsOnly\x12\x1b\n\x06filter\x18\x03 \x01(\tH\x00R\x06filter\x88\x01\x01\x12"\n\npage_token\x18\x04 \x01(\tH\x01R\tpageToken\x88\x01\x01\x12\x16\n\x06levels\x18\x05 \x03(\tR\x06levels\x125\n\x05start\x18\x06 \x01(\x0b2\x1a.google.protobuf.TimestampH\x02R\x05start\x88\x01\x01\x121\n\x03end\x18\x07 \x01(\x0b2\x1a.google.protobuf.TimestampH\x03R\x03end\x88\x01\x01\x12\x19\n\x05limit\x18\x08 \x01(\x03H\x04R\x05limit\x88\x01\x01\x12\x1b\n\x06source\x18\t \x01(\tH\x05R\x06source\x88\x01\x01\x12-\n\x10user_facing_only\x18\n \x01(\x08H\x06R\x0euserFacingOnly\x88\x01\x01B\t\n\x07_filterB\r\n\x0b_page_tokenB\x08\n\x06_startB\x06\n\x04_endB\x08\n\x06_limitB\t\n\x07_sourceB\x13\n\x11_user_facing_only"p\n\x18GetRobotPartLogsResponse\x12,\n\x04logs\x18\x01 \x03(\x0b2\x18.viam.common.v1.LogEntryR\x04logs\x12&\n\x0fnext_page_token\x18\x02 \x01(\tR\rnextPageToken"s\n\x18TailRobotPartLogsRequest\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x1f\n\x0berrors_only\x18\x02 \x01(\x08R\nerrorsOnly\x12\x1b\n\x06filter\x18\x03 \x01(\tH\x00R\x06filter\x88\x01\x01B\t\n\x07_filter"I\n\x19TailRobotPartLogsResponse\x12,\n\x04logs\x18\x01 \x03(\x0b2\x18.viam.common.v1.LogEntryR\x04logs",\n\x1aGetRobotPartHistoryRequest\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id"[\n\x1bGetRobotPartHistoryResponse\x12<\n\x07history\x18\x01 \x03(\x0b2".viam.app.v1.RobotPartHistoryEntryR\x07history"\xdb\x01\n\x16UpdateRobotPartRequest\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x12:\n\x0crobot_config\x18\x03 \x01(\x0b2\x17.google.protobuf.StructR\x0brobotConfig\x12K\n\x11last_known_update\x18\x04 \x01(\x0b2\x1a.google.protobuf.TimestampH\x00R\x0flastKnownUpdate\x88\x01\x01B\x14\n\x12_last_known_update"E\n\x17UpdateRobotPartResponse\x12*\n\x04part\x18\x01 \x01(\x0b2\x16.viam.app.v1.RobotPartR\x04part"M\n\x13NewRobotPartRequest\x12\x19\n\x08robot_id\x18\x01 \x01(\tR\x07robotId\x12\x1b\n\tpart_name\x18\x02 \x01(\tR\x08partName"/\n\x14NewRobotPartResponse\x12\x17\n\x07part_id\x18\x01 \x01(\tR\x06partId"1\n\x16DeleteRobotPartRequest\x12\x17\n\x07part_id\x18\x01 \x01(\tR\x06partId"-\n\x1bGetRobotPartMetadataRequest\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id"K\n\x1cGetRobotPartMetadataResponse\x12+\n\x04data\x18\x01 \x01(\x0b2\x17.google.protobuf.StructR\x04data"]\n\x1eUpdateRobotPartMetadataRequest\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12+\n\x04data\x18\x02 \x01(\x0b2\x17.google.protobuf.StructR\x04data"!\n\x1fUpdateRobotPartMetadataResponse"3\n\x16GetRobotAPIKeysRequest\x12\x19\n\x08robot_id\x18\x01 \x01(\tR\x07robotId"y\n\x06APIKey\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x10\n\x03key\x18\x02 \x01(\tR\x03key\x12\x12\n\x04name\x18\x03 \x01(\tR\x04name\x129\n\ncreated_on\x18\x04 \x01(\x0b2\x1a.google.protobuf.TimestampR\tcreatedOn"[\n\x17GetRobotAPIKeysResponse\x12@\n\x08api_keys\x18\x01 \x03(\x0b2%.viam.app.v1.APIKeyWithAuthorizationsR\x07apiKeys"\x19\n\x17DeleteRobotPartResponse"\xa1\x06\n\x08Fragment\x123\n\x02id\x18\x01 \x01(\tB#\x9a\x84\x9e\x03\x1ebson:"_id" json:"id,omitempty"R\x02id\x120\n\x04name\x18\x02 \x01(\tB\x1c\x9a\x84\x9e\x03\x17bson:"name" json:"name"R\x04name\x12Y\n\x08fragment\x18\x03 \x01(\x0b2\x17.google.protobuf.StructB$\x9a\x84\x9e\x03\x1fbson:"fragment" json:"fragment"R\x08fragment\x12Z\n\x12organization_owner\x18\x04 \x01(\tB+\x9a\x84\x9e\x03&bson:"organization_owner" json:"owner"R\x11organizationOwner\x128\n\x06public\x18\x05 \x01(\x08B \x9a\x84\x9e\x03\x1bbson:"public" json:"public"R\x06public\x12Q\n\ncreated_on\x18\x06 \x01(\x0b2\x1a.google.protobuf.TimestampB\x16\x9a\x84\x9e\x03\x11bson:"created_on"R\tcreatedOn\x12+\n\x11organization_name\x18\x07 \x01(\tR\x10organizationName\x12(\n\x10robot_part_count\x18\t \x01(\x05R\x0erobotPartCount\x12-\n\x12organization_count\x18\n \x01(\x05R\x11organizationCount\x12+\n\x12only_used_by_owner\x18\x0b \x01(\x08R\x0fonlyUsedByOwner\x12?\n\nvisibility\x18\x0c \x01(\x0e2\x1f.viam.app.v1.FragmentVisibilityR\nvisibility\x12Z\n\x0clast_updated\x18\r \x01(\x0b2\x1a.google.protobuf.TimestampB\x1b\x9a\x84\x9e\x03\x16bson:"last_updated_at"R\x0blastUpdated\x12\x1a\n\x08revision\x18\x0e \x01(\tR\x08revision"\xf8\x03\n\x14FragmentHistoryEntry\x12@\n\x08fragment\x18\x01 \x01(\tB$\x9a\x84\x9e\x03\x1fbson:"fragment" json:"fragment"R\x08fragment\x12_\n\tedited_on\x18\x02 \x01(\x0b2\x1a.google.protobuf.TimestampB&\x9a\x84\x9e\x03!bson:"edited_on" json:"edited_on"R\x08editedOn\x12C\n\x03old\x18\x03 \x01(\x0b2\x15.viam.app.v1.FragmentB\x1a\x9a\x84\x9e\x03\x15bson:"old" json:"old"R\x03old\x12c\n\tedited_by\x18\x04 \x01(\x0b2\x1e.viam.app.v1.AuthenticatorInfoB&\x9a\x84\x9e\x03!bson:"edited_by" json:"edited_by"R\x08editedBy\x12@\n\x08revision\x18\x05 \x01(\tB$\x9a\x84\x9e\x03\x1fbson:"revision" json:"revision"R\x08revision\x12Q\n\x06config\x18\x06 \x01(\x0b2\x17.google.protobuf.StructB \x9a\x84\x9e\x03\x1bbson:"config" json:"config"R\x06config"i\n\x10FragmentRevision\x12\x1a\n\x08revision\x18\x01 \x01(\tR\x08revision\x129\n\ncreated_at\x18\x02 \x01(\x0b2\x1a.google.protobuf.TimestampR\tcreatedAt";\n\x0bFragmentTag\x12\x10\n\x03tag\x18\x01 \x01(\tR\x03tag\x12\x1a\n\x08revision\x18\x02 \x01(\tR\x08revision"\x87\x01\n\rFragmentError\x12=\n\nerror_type\x18\x01 \x01(\x0e2\x1e.viam.app.v1.FragmentErrorTypeR\terrorType\x12\x1f\n\x0bfragment_id\x18\x02 \x01(\tR\nfragmentId\x12\x16\n\x06detail\x18\x03 \x01(\tR\x06detail"\xd4\x01\n\rFragmentUsage\x12\x1f\n\x0bfragment_id\x18\x01 \x01(\tR\nfragmentId\x12$\n\rorganizations\x18\x02 \x01(\x05R\rorganizations\x12\x1a\n\x08machines\x18\x03 \x01(\x05R\x08machines\x125\n\x17machines_in_current_org\x18\x04 \x01(\x05R\x14machinesInCurrentOrg\x12\x1d\n\x07version\x18\x05 \x01(\tH\x00R\x07version\x88\x01\x01B\n\n\x08_version"\xfb\x01\n\x0eFragmentImport\x12\x1f\n\x0bfragment_id\x18\x01 \x01(\tR\nfragmentId\x12\x18\n\x07version\x18\x02 \x01(\tR\x07version\x12\x1b\n\x06prefix\x18\x03 \x01(\tH\x00R\x06prefix\x88\x01\x01\x12H\n\tvariables\x18\x04 \x03(\x0b2*.viam.app.v1.FragmentImport.VariablesEntryR\tvariables\x1a<\n\x0eVariablesEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x028\x01B\t\n\x07_prefix"\xc3\x01\n\x10ResolvedFragment\x12\x1f\n\x0bfragment_id\x18\x01 \x01(\tR\nfragmentId\x12@\n\x0fresolved_config\x18\x02 \x01(\x0b2\x17.google.protobuf.StructR\x0eresolvedConfig\x120\n\x05error\x18\x03 \x01(\x0b2\x1a.viam.app.v1.FragmentErrorR\x05error\x12\x1a\n\x08revision\x18\x04 \x01(\tR\x08revision"\xb2\x01\n\x14ListFragmentsRequest\x12\'\n\x0forganization_id\x18\x01 \x01(\tR\x0eorganizationId\x12\x1f\n\x0bshow_public\x18\x02 \x01(\x08R\nshowPublic\x12P\n\x13fragment_visibility\x18\x03 \x03(\x0e2\x1f.viam.app.v1.FragmentVisibilityR\x12fragmentVisibility"\x91\x01\n\x15ListFragmentsResponse\x123\n\tfragments\x18\x01 \x03(\x0b2\x15.viam.app.v1.FragmentR\tfragments\x12C\n\x0ffragment_usages\x18\x02 \x03(\x0b2\x1a.viam.app.v1.FragmentUsageR\x0efragmentUsages"\x87\x01\n\x12GetFragmentRequest\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x126\n\x17current_organization_id\x18\x02 \x01(\tR\x15currentOrganizationId\x12\x1d\n\x07version\x18\x03 \x01(\tH\x00R\x07version\x88\x01\x01B\n\n\x08_version"\xf6\x01\n\x13GetFragmentResponse\x121\n\x08fragment\x18\x01 \x01(\x0b2\x15.viam.app.v1.FragmentR\x08fragment\x12A\n\x0efragment_usage\x18\x02 \x01(\x0b2\x1a.viam.app.v1.FragmentUsageR\rfragmentUsage\x12;\n\trevisions\x18\x03 \x03(\x0b2\x1d.viam.app.v1.FragmentRevisionR\trevisions\x12,\n\x04tags\x18\x04 \x03(\x0b2\x18.viam.app.v1.FragmentTagR\x04tags"\xda\x01\n\x15CreateFragmentRequest\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12/\n\x06config\x18\x02 \x01(\x0b2\x17.google.protobuf.StructR\x06config\x12\'\n\x0forganization_id\x18\x03 \x01(\tR\x0eorganizationId\x12D\n\nvisibility\x18\x04 \x01(\x0e2\x1f.viam.app.v1.FragmentVisibilityH\x00R\nvisibility\x88\x01\x01B\r\n\x0b_visibility"K\n\x16CreateFragmentResponse\x121\n\x08fragment\x18\x01 \x01(\x0b2\x15.viam.app.v1.FragmentR\x08fragment"\xcc\x02\n\x15UpdateFragmentRequest\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x12/\n\x06config\x18\x03 \x01(\x0b2\x17.google.protobuf.StructR\x06config\x12\x1b\n\x06public\x18\x04 \x01(\x08H\x00R\x06public\x88\x01\x01\x12D\n\nvisibility\x18\x05 \x01(\x0e2\x1f.viam.app.v1.FragmentVisibilityH\x01R\nvisibility\x88\x01\x01\x12K\n\x11last_known_update\x18\x06 \x01(\x0b2\x1a.google.protobuf.TimestampH\x02R\x0flastKnownUpdate\x88\x01\x01B\t\n\x07_publicB\r\n\x0b_visibilityB\x14\n\x12_last_known_update"K\n\x16UpdateFragmentResponse\x121\n\x08fragment\x18\x01 \x01(\x0b2\x15.viam.app.v1.FragmentR\x08fragment"\'\n\x15DeleteFragmentRequest\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id"\x18\n\x16DeleteFragmentResponse"\x91\x01\n\x19GetFragmentHistoryRequest\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12"\n\npage_token\x18\x02 \x01(\tH\x00R\tpageToken\x88\x01\x01\x12"\n\npage_limit\x18\x03 \x01(\x03H\x01R\tpageLimit\x88\x01\x01B\r\n\x0b_page_tokenB\r\n\x0b_page_limit"\x81\x01\n\x1aGetFragmentHistoryResponse\x12;\n\x07history\x18\x01 \x03(\x0b2!.viam.app.v1.FragmentHistoryEntryR\x07history\x12&\n\x0fnext_page_token\x18\x02 \x01(\tR\rnextPageToken":\n\x17GetFragmentUsageRequest\x12\x1f\n\x0bfragment_id\x18\x01 \x01(\tR\nfragmentId"]\n\x18GetFragmentUsageResponse\x12A\n\x0eversion_usages\x18\x01 \x03(\x0b2\x1a.viam.app.v1.FragmentUsageR\rversionUsages"f\n\x15SetFragmentTagRequest\x12\x1f\n\x0bfragment_id\x18\x01 \x01(\tR\nfragmentId\x12\x10\n\x03tag\x18\x02 \x01(\tR\x03tag\x12\x1a\n\x08revision\x18\x03 \x01(\tR\x08revision"F\n\x16SetFragmentTagResponse\x12,\n\x04tags\x18\x01 \x03(\x0b2\x18.viam.app.v1.FragmentTagR\x04tags"M\n\x18DeleteFragmentTagRequest\x12\x1f\n\x0bfragment_id\x18\x01 \x01(\tR\nfragmentId\x12\x10\n\x03tag\x18\x02 \x01(\tR\x03tag"I\n\x19DeleteFragmentTagResponse\x12,\n\x04tags\x18\x01 \x03(\x0b2\x18.viam.app.v1.FragmentTagR\x04tags"4\n\x11ListRobotsRequest\x12\x1f\n\x0blocation_id\x18\x01 \x01(\tR\nlocationId"B\n\x1dListRobotsForLocationsRequest\x12!\n\x0clocation_ids\x18\x01 \x03(\tR\x0blocationIds"0\n\x17ListRobotsForOrgRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId"`\n\x12AdditionalFragment\x12\x1f\n\x0bfragment_id\x18\x01 \x01(\tR\nfragmentId\x12\x1d\n\x07version\x18\x02 \x01(\tH\x00R\x07version\x88\x01\x01B\n\n\x08_version"\xa6\x01\n\x1aListNestedFragmentsRequest\x12$\n\x0bfragment_id\x18\x01 \x01(\tH\x00R\nfragmentId\x88\x01\x01\x12R\n\x14additional_fragments\x18\x02 \x03(\x0b2\x1f.viam.app.v1.AdditionalFragmentR\x13additionalFragmentsB\x0e\n\x0c_fragment_id"\xa0\x01\n\x1bListNestedFragmentsResponse\x123\n\tfragments\x18\x01 \x03(\x0b2\x15.viam.app.v1.FragmentR\tfragments\x12L\n\x12resolved_fragments\x18\x02 \x03(\x0b2\x1d.viam.app.v1.ResolvedFragmentR\x11resolvedFragments"\xc8\x01\n\x1bListMachineFragmentsRequest\x12\x1d\n\nmachine_id\x18\x01 \x01(\tR\tmachineId\x126\n\x17additional_fragment_ids\x18\x02 \x03(\tR\x15additionalFragmentIds\x12R\n\x14additional_fragments\x18\x03 \x03(\x0b2\x1f.viam.app.v1.AdditionalFragmentR\x13additionalFragments"\xa1\x01\n\x1cListMachineFragmentsResponse\x123\n\tfragments\x18\x01 \x03(\x0b2\x15.viam.app.v1.FragmentR\tfragments\x12L\n\x12resolved_fragments\x18\x02 \x03(\x0b2\x1d.viam.app.v1.ResolvedFragmentR\x11resolvedFragments"\xb1\x01\n\x1bListMachineSummariesRequest\x12\'\n\x0forganization_id\x18\x01 \x01(\tR\x0eorganizationId\x12!\n\x0cfragment_ids\x18\x02 \x03(\tR\x0bfragmentIds\x12!\n\x0clocation_ids\x18\x03 \x03(\tR\x0blocationIds\x12\x19\n\x05limit\x18\x04 \x01(\x05H\x00R\x05limit\x88\x01\x01B\x08\n\x06_limit"k\n\x1cListMachineSummariesResponse\x12K\n\x12location_summaries\x18\x01 \x03(\x0b2\x1c.viam.app.v1.LocationSummaryR\x11locationSummaries"\xa1\x01\n\x0fLocationSummary\x12\x1f\n\x0blocation_id\x18\x01 \x01(\tR\nlocationId\x12#\n\rlocation_name\x18\x02 \x01(\tR\x0clocationName\x12H\n\x11machine_summaries\x18\x03 \x03(\x0b2\x1b.viam.app.v1.MachineSummaryR\x10machineSummaries"\x93\x01\n\x0eMachineSummary\x12\x1d\n\nmachine_id\x18\x01 \x01(\tR\tmachineId\x12!\n\x0cmachine_name\x18\x02 \x01(\tR\x0bmachineName\x12?\n\x0epart_summaries\x18\x03 \x03(\x0b2\x18.viam.app.v1.PartSummaryR\rpartSummaries";\n\x0fFragmentSummary\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n\x04name\x18\x03 \x01(\tR\x04nameJ\x04\x08\x02\x10\x03"N\n\x11ViamServerVersion\x12\x16\n\x05major\x18\x01 \x01(\tH\x00R\x05major\x12\x16\n\x05minor\x18\x02 \x01(\tH\x00R\x05minorB\t\n\x07version"M\n\x10ViamAgentVersion\x12\x16\n\x05major\x18\x01 \x01(\tH\x00R\x05major\x12\x16\n\x05minor\x18\x02 \x01(\tH\x00R\x05minorB\t\n\x07version"\xc8\x06\n\x0bPartSummary\x12\x17\n\x07part_id\x18\x01 \x01(\tR\x06partId\x12\x1b\n\tpart_name\x18\x02 \x01(\tR\x08partName\x12 \n\x0cis_main_part\x18\x0b \x01(\x08R\nisMainPart\x12;\n\x0conline_state\x18\x0c \x01(\x0e2\x18.viam.app.v1.OnlineStateR\x0bonlineState\x120\n\x14seconds_since_online\x18\r \x01(\x03R\x12secondsSinceOnline\x12@\n\x0blast_access\x18\x0e \x01(\x0b2\x1a.google.protobuf.TimestampH\x00R\nlastAccess\x88\x01\x01\x12@\n\x0blast_online\x18\x03 \x01(\x0b2\x1a.google.protobuf.TimestampH\x01R\nlastOnline\x88\x01\x01\x12S\n\x13viam_server_version\x18\x04 \x01(\x0b2\x1e.viam.app.v1.ViamServerVersionH\x02R\x11viamServerVersion\x88\x01\x01\x12P\n\x12viam_agent_version\x18\x05 \x01(\x0b2\x1d.viam.app.v1.ViamAgentVersionH\x03R\x10viamAgentVersion\x88\x01\x01\x12\x13\n\x02os\x18\x06 \x01(\tH\x04R\x02os\x88\x01\x01\x12\x1f\n\x08platform\x18\x07 \x01(\tH\x05R\x08platform\x88\x01\x01\x12/\n\x11public_ip_address\x18\x08 \x01(\tH\x06R\x0fpublicIpAddress\x88\x01\x01\x12\x1e\n\x08dns_name\x18\n \x01(\tH\x07R\x07dnsName\x88\x01\x01\x12:\n\tfragments\x18\t \x03(\x0b2\x1c.viam.app.v1.FragmentSummaryR\tfragmentsB\x0e\n\x0c_last_accessB\x0e\n\x0c_last_onlineB\x16\n\x14_viam_server_versionB\x15\n\x13_viam_agent_versionB\x05\n\x03_osB\x0b\n\t_platformB\x14\n\x12_public_ip_addressB\x0b\n\t_dns_name"@\n\x12ListRobotsResponse\x12*\n\x06robots\x18\x01 \x03(\x0b2\x12.viam.app.v1.RobotR\x06robots"L\n\x1eListRobotsForLocationsResponse\x12*\n\x06robots\x18\x01 \x03(\x0b2\x12.viam.app.v1.RobotR\x06robots"F\n\x18ListRobotsForOrgResponse\x12*\n\x06robots\x18\x01 \x03(\x0b2\x12.viam.app.v1.RobotR\x06robots"A\n\x0fNewRobotRequest\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12\x1a\n\x08location\x18\x02 \x01(\tR\x08location""\n\x10NewRobotResponse\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id"T\n\x12UpdateRobotRequest\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x12\x1a\n\x08location\x18\x03 \x01(\tR\x08location"?\n\x13UpdateRobotResponse\x12(\n\x05robot\x18\x01 \x01(\x0b2\x12.viam.app.v1.RobotR\x05robot"$\n\x12DeleteRobotRequest\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id"\x15\n\x13DeleteRobotResponse")\n\x17GetRobotMetadataRequest\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id"G\n\x18GetRobotMetadataResponse\x12+\n\x04data\x18\x01 \x01(\x0b2\x17.google.protobuf.StructR\x04data"Y\n\x1aUpdateRobotMetadataRequest\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12+\n\x04data\x18\x02 \x01(\x0b2\x17.google.protobuf.StructR\x04data"\x1d\n\x1bUpdateRobotMetadataResponse"0\n\x15MarkPartAsMainRequest\x12\x17\n\x07part_id\x18\x01 \x01(\tR\x06partId"\x18\n\x16MarkPartAsMainResponse"4\n\x19MarkPartForRestartRequest\x12\x17\n\x07part_id\x18\x01 \x01(\tR\x06partId"\x1c\n\x1aMarkPartForRestartResponse"7\n\x1cCreateRobotPartSecretRequest\x12\x17\n\x07part_id\x18\x01 \x01(\tR\x06partId"K\n\x1dCreateRobotPartSecretResponse\x12*\n\x04part\x18\x01 \x01(\x0b2\x16.viam.app.v1.RobotPartR\x04part"T\n\x1cDeleteRobotPartSecretRequest\x12\x17\n\x07part_id\x18\x01 \x01(\tR\x06partId\x12\x1b\n\tsecret_id\x18\x02 \x01(\tR\x08secretId"\x1f\n\x1dDeleteRobotPartSecretResponse"\x9e\x02\n\rAuthorization\x12-\n\x12authorization_type\x18\x01 \x01(\tR\x11authorizationType\x12)\n\x10authorization_id\x18\x02 \x01(\tR\x0fauthorizationId\x12#\n\rresource_type\x18\x03 \x01(\tR\x0cresourceType\x12\x1f\n\x0bresource_id\x18\x04 \x01(\tR\nresourceId\x12\x1f\n\x0bidentity_id\x18\x05 \x01(\tR\nidentityId\x12\'\n\x0forganization_id\x18\x06 \x01(\tR\x0eorganizationId\x12#\n\ridentity_type\x18\x07 \x01(\tR\x0cidentityType"R\n\x0eAddRoleRequest\x12@\n\rauthorization\x18\x01 \x01(\x0b2\x1a.viam.app.v1.AuthorizationR\rauthorization"\x11\n\x0fAddRoleResponse"U\n\x11RemoveRoleRequest\x12@\n\rauthorization\x18\x01 \x01(\x0b2\x1a.viam.app.v1.AuthorizationR\rauthorization"\x14\n\x12RemoveRoleResponse"\xa5\x01\n\x11ChangeRoleRequest\x12G\n\x11old_authorization\x18\x01 \x01(\x0b2\x1a.viam.app.v1.AuthorizationR\x10oldAuthorization\x12G\n\x11new_authorization\x18\x02 \x01(\x0b2\x1a.viam.app.v1.AuthorizationR\x10newAuthorization"\x14\n\x12ChangeRoleResponse"g\n\x19ListAuthorizationsRequest\x12\'\n\x0forganization_id\x18\x01 \x01(\tR\x0eorganizationId\x12!\n\x0cresource_ids\x18\x02 \x03(\tR\x0bresourceIds"`\n\x1aListAuthorizationsResponse\x12B\n\x0eauthorizations\x18\x01 \x03(\x0b2\x1a.viam.app.v1.AuthorizationR\x0eauthorizations"_\n\x17CheckPermissionsRequest\x12D\n\x0bpermissions\x18\x01 \x03(\x0b2".viam.app.v1.AuthorizedPermissionsR\x0bpermissions"\x7f\n\x15AuthorizedPermissions\x12#\n\rresource_type\x18\x01 \x01(\tR\x0cresourceType\x12\x1f\n\x0bresource_id\x18\x02 \x01(\tR\nresourceId\x12 \n\x0bpermissions\x18\x03 \x03(\tR\x0bpermissions"u\n\x18CheckPermissionsResponse\x12Y\n\x16authorized_permissions\x18\x01 \x03(\x0b2".viam.app.v1.AuthorizedPermissionsR\x15authorizedPermissions"\xc8\x02\n\rModuleVersion\x12\x18\n\x07version\x18\x01 \x01(\tR\x07version\x12*\n\x05files\x18\x02 \x03(\x0b2\x14.viam.app.v1.UploadsR\x05files\x12*\n\x06models\x18\x03 \x03(\x0b2\x12.viam.app.v1.ModelR\x06models\x12\x1e\n\nentrypoint\x18\x04 \x01(\tR\nentrypoint\x12 \n\tfirst_run\x18\x05 \x01(\tH\x00R\x08firstRun\x88\x01\x01\x126\n\x14markdown_description\x18\x06 \x01(\tH\x01R\x13markdownDescription\x88\x01\x01\x12$\n\x04apps\x18\x07 \x03(\x0b2\x10.viam.app.v1.AppR\x04appsB\x0c\n\n_first_runB\x17\n\x15_markdown_description"\xdb\x03\n\x0eModuleMetadata\x12*\n\x06models\x18\x01 \x03(\x0b2\x12.viam.app.v1.ModelR\x06models\x126\n\x08versions\x18\x02 \x03(\x0b2\x1a.viam.app.v1.ModuleVersionR\x08versions\x12\x1e\n\nentrypoint\x18\x03 \x01(\tR\nentrypoint\x12 \n\tfirst_run\x18\x04 \x01(\tH\x00R\x08firstRun\x88\x01\x01\x126\n\x14markdown_description\x18\x05 \x01(\tH\x01R\x13markdownDescription\x88\x01\x01\x12$\n\x04apps\x18\x06 \x03(\x0b2\x10.viam.app.v1.AppR\x04apps\x12C\n\x0bsource_type\x18\x07 \x01(\x0e2\x1d.viam.app.v1.ModuleSourceTypeH\x02R\nsourceType\x88\x01\x01\x12<\n\x08language\x18\x08 \x01(\x0e2\x1b.viam.app.v1.ModuleLanguageH\x03R\x08language\x88\x01\x01B\x0c\n\n_first_runB\x17\n\x15_markdown_descriptionB\x0e\n\x0c_source_typeB\x0b\n\t_language"\xc0\x01\n\x0fMLModelMetadata\x12\x1a\n\x08versions\x18\x01 \x03(\tR\x08versions\x12@\n\nmodel_type\x18\x02 \x01(\x0e2!.viam.app.mltraining.v1.ModelTypeR\tmodelType\x12O\n\x0fmodel_framework\x18\x03 \x01(\x0e2&.viam.app.mltraining.v1.ModelFrameworkR\x0emodelFramework"h\n\x11MLTrainingVersion\x12\x18\n\x07version\x18\x01 \x01(\tR\x07version\x129\n\ncreated_on\x18\x02 \x01(\x0b2\x1a.google.protobuf.TimestampR\tcreatedOn"\xff\x01\n\x12MLTrainingMetadata\x12:\n\x08versions\x18\x05 \x03(\x0b2\x1e.viam.app.v1.MLTrainingVersionR\x08versions\x12@\n\nmodel_type\x18\x02 \x01(\x0e2!.viam.app.mltraining.v1.ModelTypeR\tmodelType\x12O\n\x0fmodel_framework\x18\x03 \x01(\x0e2&.viam.app.mltraining.v1.ModelFrameworkR\x0emodelFramework\x12\x14\n\x05draft\x18\x04 \x01(\x08R\x05draftJ\x04\x08\x01\x10\x02"\x8c\x07\n\x0cRegistryItem\x12\x17\n\x07item_id\x18\x01 \x01(\tR\x06itemId\x12\'\n\x0forganization_id\x18\x02 \x01(\tR\x0eorganizationId\x12)\n\x10public_namespace\x18\x03 \x01(\tR\x0fpublicNamespace\x12\x12\n\x04name\x18\x04 \x01(\tR\x04name\x125\n\x04type\x18\x05 \x01(\x0e2!.viam.app.packages.v1.PackageTypeR\x04type\x127\n\nvisibility\x18\x06 \x01(\x0e2\x17.viam.app.v1.VisibilityR\nvisibility\x12\x10\n\x03url\x18\x07 \x01(\tR\x03url\x12 \n\x0bdescription\x18\x08 \x01(\tR\x0bdescription\x12*\n\x11total_robot_usage\x18\t \x01(\x03R\x0ftotalRobotUsage\x12;\n\x1atotal_external_robot_usage\x18\r \x01(\x03R\x17totalExternalRobotUsage\x128\n\x18total_organization_usage\x18\n \x01(\x03R\x16totalOrganizationUsage\x12I\n!total_external_organization_usage\x18\x0e \x01(\x03R\x1etotalExternalOrganizationUsage\x12F\n\x0fmodule_metadata\x18\x0b \x01(\x0b2\x1b.viam.app.v1.ModuleMetadataH\x00R\x0emoduleMetadata\x12J\n\x11ml_model_metadata\x18\x0c \x01(\x0b2\x1c.viam.app.v1.MLModelMetadataH\x00R\x0fmlModelMetadata\x12S\n\x14ml_training_metadata\x18\x12 \x01(\x0b2\x1f.viam.app.v1.MLTrainingMetadataH\x00R\x12mlTrainingMetadata\x129\n\ncreated_at\x18\x0f \x01(\x0b2\x1a.google.protobuf.TimestampR\tcreatedAt\x129\n\nupdated_at\x18\x10 \x01(\x0b2\x1a.google.protobuf.TimestampR\tupdatedAtB\n\n\x08metadata"\x9f\x01\n\x16GetRegistryItemRequest\x12\x17\n\x07item_id\x18\x01 \x01(\tR\x06itemId\x12I\n\x1einclude_markdown_documentation\x18\x02 \x01(\x08H\x00R\x1cincludeMarkdownDocumentation\x88\x01\x01B!\n\x1f_include_markdown_documentation"H\n\x17GetRegistryItemResponse\x12-\n\x04item\x18\x01 \x01(\x0b2\x19.viam.app.v1.RegistryItemR\x04item"\x8f\x01\n\x19CreateRegistryItemRequest\x12\'\n\x0forganization_id\x18\x01 \x01(\tR\x0eorganizationId\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x125\n\x04type\x18\x03 \x01(\x0e2!.viam.app.packages.v1.PackageTypeR\x04type"\x1c\n\x1aCreateRegistryItemResponse"\xe4\x04\n\x19UpdateRegistryItemRequest\x12\x17\n\x07item_id\x18\x01 \x01(\tR\x06itemId\x125\n\x04type\x18\x02 \x01(\x0e2!.viam.app.packages.v1.PackageTypeR\x04type\x12 \n\x0bdescription\x18\x03 \x01(\tR\x0bdescription\x127\n\nvisibility\x18\x04 \x01(\x0e2\x17.viam.app.v1.VisibilityR\nvisibility\x12\x15\n\x03url\x18\x05 \x01(\tH\x01R\x03url\x88\x01\x01\x12Y\n\x16update_module_metadata\x18\x06 \x01(\x0b2!.viam.app.v1.UpdateModuleMetadataH\x00R\x14updateModuleMetadata\x12]\n\x18update_ml_model_metadata\x18\x07 \x01(\x0b2".viam.app.v1.UpdateMLModelMetadataH\x00R\x15updateMlModelMetadata\x12f\n\x1bupdate_ml_training_metadata\x18\x08 \x01(\x0b2%.viam.app.v1.UpdateMLTrainingMetadataH\x00R\x18updateMlTrainingMetadata\x126\n\x14markdown_description\x18\t \x01(\tH\x02R\x13markdownDescription\x88\x01\x01B\n\n\x08metadataB\x06\n\x04_urlB\x17\n\x15_markdown_description"\x1c\n\x1aUpdateRegistryItemResponse"\xc8\x05\n\x18ListRegistryItemsRequest\x12,\n\x0forganization_id\x18\x01 \x01(\tH\x00R\x0eorganizationId\x88\x01\x01\x127\n\x05types\x18\x02 \x03(\x0e2!.viam.app.packages.v1.PackageTypeR\x05types\x12;\n\x0cvisibilities\x18\x03 \x03(\x0e2\x17.viam.app.v1.VisibilityR\x0cvisibilities\x12\x1c\n\tplatforms\x18\x04 \x03(\tR\tplatforms\x12;\n\x08statuses\x18\x05 \x03(\x0e2\x1f.viam.app.v1.RegistryItemStatusR\x08statuses\x12$\n\x0bsearch_term\x18\x06 \x01(\tH\x01R\nsearchTerm\x88\x01\x01\x12"\n\npage_token\x18\x07 \x01(\tH\x02R\tpageToken\x88\x01\x01\x12+\n\x11public_namespaces\x18\x08 \x03(\tR\x10publicNamespaces\x12I\n\x1einclude_markdown_documentation\x18\t \x01(\x08H\x03R\x1cincludeMarkdownDocumentation\x88\x01\x01\x12M\n\x13module_source_types\x18\n \x03(\x0e2\x1d.viam.app.v1.ModuleSourceTypeR\x11moduleSourceTypes\x12F\n\x10module_languages\x18\x0b \x03(\x0e2\x1b.viam.app.v1.ModuleLanguageR\x0fmoduleLanguagesB\x12\n\x10_organization_idB\x0e\n\x0c_search_termB\r\n\x0b_page_tokenB!\n\x1f_include_markdown_documentation"L\n\x19ListRegistryItemsResponse\x12/\n\x05items\x18\x01 \x03(\x0b2\x19.viam.app.v1.RegistryItemR\x05items"4\n\x19DeleteRegistryItemRequest\x12\x17\n\x07item_id\x18\x01 \x01(\tR\x06itemId"\x1c\n\x1aDeleteRegistryItemResponse"O\n\x19RenameRegistryItemRequest\x12\x17\n\x07item_id\x18\x01 \x01(\tR\x06itemId\x12\x19\n\x08new_name\x18\x02 \x01(\tR\x07newName"K\n\x1aRenameRegistryItemResponse\x12-\n\x04item\x18\x01 \x01(\x0b2\x19.viam.app.v1.RegistryItemR\x04item"h\n\x1bTransferRegistryItemRequest\x12\x17\n\x07item_id\x18\x01 \x01(\tR\x06itemId\x120\n\x14new_public_namespace\x18\x02 \x01(\tR\x12newPublicNamespace"\x1e\n\x1cTransferRegistryItemResponse"R\n\x13CreateModuleRequest\x12\'\n\x0forganization_id\x18\x01 \x01(\tR\x0eorganizationId\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name"E\n\x14CreateModuleResponse\x12\x1b\n\tmodule_id\x18\x01 \x01(\tR\x08moduleId\x12\x10\n\x03url\x18\x02 \x01(\tR\x03url"\x92\x03\n\x13UpdateModuleRequest\x12\x1b\n\tmodule_id\x18\x01 \x01(\tR\x08moduleId\x127\n\nvisibility\x18\x02 \x01(\x0e2\x17.viam.app.v1.VisibilityR\nvisibility\x12\x10\n\x03url\x18\x03 \x01(\tR\x03url\x12 \n\x0bdescription\x18\x04 \x01(\tR\x0bdescription\x12*\n\x06models\x18\x05 \x03(\x0b2\x12.viam.app.v1.ModelR\x06models\x12\x1e\n\nentrypoint\x18\x06 \x01(\tR\nentrypoint\x12 \n\tfirst_run\x18\x07 \x01(\tH\x00R\x08firstRun\x88\x01\x01\x12$\n\x04apps\x18\x08 \x03(\x0b2\x10.viam.app.v1.AppR\x04apps\x126\n\x14markdown_description\x18\t \x01(\tH\x01R\x13markdownDescription\x88\x01\x01B\x0c\n\n_first_runB\x17\n\x15_markdown_description"\xe8\x01\n\x03App\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12\x12\n\x04type\x18\x02 \x01(\tR\x04type\x12\x1e\n\nentrypoint\x18\x03 \x01(\tR\nentrypoint\x12!\n\x0cfragment_ids\x18\x04 \x03(\tR\x0bfragmentIds\x12 \n\tlogo_path\x18\x05 \x01(\tH\x00R\x08logoPath\x88\x01\x01\x12F\n\x0ecustomizations\x18\x06 \x01(\x0b2\x1e.viam.app.v1.AppCustomizationsR\x0ecustomizationsB\x0c\n\n_logo_path"(\n\x14UpdateModuleResponse\x12\x10\n\x03url\x18\x01 \x01(\tR\x03url"\xa8\x02\n\x14UpdateModuleMetadata\x12*\n\x06models\x18\x01 \x03(\x0b2\x12.viam.app.v1.ModelR\x06models\x12\x1e\n\nentrypoint\x18\x02 \x01(\tR\nentrypoint\x12$\n\x04apps\x18\x03 \x03(\x0b2\x10.viam.app.v1.AppR\x04apps\x12C\n\x0bsource_type\x18\x04 \x01(\x0e2\x1d.viam.app.v1.ModuleSourceTypeH\x00R\nsourceType\x88\x01\x01\x12<\n\x08language\x18\x05 \x01(\x0e2\x1b.viam.app.v1.ModuleLanguageH\x01R\x08language\x88\x01\x01B\x0e\n\x0c_source_typeB\x0b\n\t_language"\xaa\x01\n\x15UpdateMLModelMetadata\x12@\n\nmodel_type\x18\x01 \x01(\x0e2!.viam.app.mltraining.v1.ModelTypeR\tmodelType\x12O\n\x0fmodel_framework\x18\x02 \x01(\x0e2&.viam.app.mltraining.v1.ModelFrameworkR\x0emodelFramework"\xc3\x01\n\x18UpdateMLTrainingMetadata\x12@\n\nmodel_type\x18\x01 \x01(\x0e2!.viam.app.mltraining.v1.ModelTypeR\tmodelType\x12O\n\x0fmodel_framework\x18\x02 \x01(\x0e2&.viam.app.mltraining.v1.ModelFrameworkR\x0emodelFramework\x12\x14\n\x05draft\x18\x03 \x01(\x08R\x05draft"\xec\x01\n\x05Model\x12\x10\n\x03api\x18\x01 \x01(\tR\x03api\x12\x14\n\x05model\x18\x02 \x01(\tR\x05model\x12:\n\x16markdown_documentation\x18\x03 \x01(\tH\x00R\x15markdownDocumentation\x88\x01\x01\x12%\n\x0bdescription\x18\x04 \x01(\tH\x01R\x0bdescription\x88\x01\x01\x12-\n\x12supported_hardware\x18\x05 \x03(\tR\x11supportedHardwareB\x19\n\x17_markdown_documentationB\x0e\n\x0c_description"\x88\x01\n\x0eModuleFileInfo\x12\x1b\n\tmodule_id\x18\x01 \x01(\tR\x08moduleId\x12\x18\n\x07version\x18\x02 \x01(\tR\x07version\x12\x1a\n\x08platform\x18\x03 \x01(\tR\x08platform\x12#\n\rplatform_tags\x18\x05 \x03(\tR\x0cplatformTags"\x87\x01\n\x17UploadModuleFileRequest\x12G\n\x10module_file_info\x18\x01 \x01(\x0b2\x1b.viam.app.v1.ModuleFileInfoH\x00R\x0emoduleFileInfo\x12\x14\n\x04file\x18\x02 \x01(\x0cH\x00R\x04fileB\r\n\x0bmodule_file",\n\x18UploadModuleFileResponse\x12\x10\n\x03url\x18\x01 \x01(\tR\x03url"\x9d\x01\n\x10GetModuleRequest\x12\x1b\n\tmodule_id\x18\x01 \x01(\tR\x08moduleId\x12I\n\x1einclude_markdown_documentation\x18\x02 \x01(\x08H\x00R\x1cincludeMarkdownDocumentation\x88\x01\x01B!\n\x1f_include_markdown_documentation"@\n\x11GetModuleResponse\x12+\n\x06module\x18\x01 \x01(\x0b2\x13.viam.app.v1.ModuleR\x06module"\x8c\x05\n\x06Module\x12\x1b\n\tmodule_id\x18\x01 \x01(\tR\x08moduleId\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x127\n\nvisibility\x18\x03 \x01(\x0e2\x17.viam.app.v1.VisibilityR\nvisibility\x127\n\x08versions\x18\x04 \x03(\x0b2\x1b.viam.app.v1.VersionHistoryR\x08versions\x12\x10\n\x03url\x18\x05 \x01(\tR\x03url\x12 \n\x0bdescription\x18\x06 \x01(\tR\x0bdescription\x12*\n\x06models\x18\x07 \x03(\x0b2\x12.viam.app.v1.ModelR\x06models\x12*\n\x11total_robot_usage\x18\x08 \x01(\x03R\x0ftotalRobotUsage\x128\n\x18total_organization_usage\x18\t \x01(\x03R\x16totalOrganizationUsage\x12\'\n\x0forganization_id\x18\n \x01(\tR\x0eorganizationId\x12\x1e\n\nentrypoint\x18\x0b \x01(\tR\nentrypoint\x12)\n\x10public_namespace\x18\x0c \x01(\tR\x0fpublicNamespace\x12 \n\tfirst_run\x18\r \x01(\tH\x00R\x08firstRun\x88\x01\x01\x126\n\x14markdown_description\x18\x0e \x01(\tH\x01R\x13markdownDescription\x88\x01\x01\x12$\n\x04apps\x18\x0f \x03(\x0b2\x10.viam.app.v1.AppR\x04appsB\x0c\n\n_first_runB\x17\n\x15_markdown_description"\xc9\x02\n\x0eVersionHistory\x12\x18\n\x07version\x18\x01 \x01(\tR\x07version\x12*\n\x05files\x18\x02 \x03(\x0b2\x14.viam.app.v1.UploadsR\x05files\x12*\n\x06models\x18\x03 \x03(\x0b2\x12.viam.app.v1.ModelR\x06models\x12\x1e\n\nentrypoint\x18\x04 \x01(\tR\nentrypoint\x12 \n\tfirst_run\x18\x05 \x01(\tH\x00R\x08firstRun\x88\x01\x01\x126\n\x14markdown_description\x18\x06 \x01(\tH\x01R\x13markdownDescription\x88\x01\x01\x12$\n\x04apps\x18\x07 \x03(\x0b2\x10.viam.app.v1.AppR\x04appsB\x0c\n\n_first_runB\x17\n\x15_markdown_description"b\n\x07Uploads\x12\x1a\n\x08platform\x18\x01 \x01(\tR\x08platform\x12;\n\x0buploaded_at\x18\x02 \x01(\x0b2\x1a.google.protobuf.TimestampR\nuploadedAt"\xc4\x01\n\x12ListModulesRequest\x12,\n\x0forganization_id\x18\x01 \x01(\tH\x00R\x0eorganizationId\x88\x01\x01\x12I\n\x1einclude_markdown_documentation\x18\x02 \x01(\x08H\x01R\x1cincludeMarkdownDocumentation\x88\x01\x01B\x12\n\x10_organization_idB!\n\x1f_include_markdown_documentation"D\n\x13ListModulesResponse\x12-\n\x07modules\x18\x01 \x03(\x0b2\x13.viam.app.v1.ModuleR\x07modules"/\n\x17GetUserIDByEmailRequest\x12\x14\n\x05email\x18\x01 \x01(\tR\x05email"3\n\x18GetUserIDByEmailResponse\x12\x17\n\x07user_id\x18\x01 \x01(\tR\x06userId"9\n\x1eListOrganizationsByUserRequest\x12\x17\n\x07user_id\x18\x01 \x01(\tR\x06userId"\xe6\x01\n\nOrgDetails\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\x12\x19\n\x08org_name\x18\x02 \x01(\tR\x07orgName\x12\x1c\n\x07org_cid\x18\x03 \x01(\tH\x00R\x06orgCid\x88\x01\x01\x12.\n\x10public_namespace\x18\x04 \x01(\tH\x01R\x0fpublicNamespace\x88\x01\x01\x12&\n\x0cbilling_tier\x18\x05 \x01(\tH\x02R\x0bbillingTier\x88\x01\x01B\n\n\x08_org_cidB\x13\n\x11_public_namespaceB\x0f\n\r_billing_tier"N\n\x1fListOrganizationsByUserResponse\x12+\n\x04orgs\x18\x01 \x03(\x0b2\x17.viam.app.v1.OrgDetailsR\x04orgs"\xd4\x01\n\x1aSearchOrganizationsRequest\x12\x1a\n\x06org_id\x18\x01 \x01(\tH\x00R\x05orgId\x88\x01\x01\x12\x1e\n\x08org_name\x18\x02 \x01(\tH\x01R\x07orgName\x88\x01\x01\x12\x15\n\x03cid\x18\x03 \x01(\tH\x02R\x03cid\x88\x01\x01\x12.\n\x10public_namespace\x18\x04 \x01(\tH\x03R\x0fpublicNamespace\x88\x01\x01B\t\n\x07_org_idB\x0b\n\t_org_nameB\x06\n\x04_cidB\x13\n\x11_public_namespace"\\\n\x1bSearchOrganizationsResponse\x12=\n\rorganizations\x18\x01 \x03(\x0b2\x17.viam.app.v1.OrgDetailsR\rorganizations"j\n\x10CreateKeyRequest\x12B\n\x0eauthorizations\x18\x01 \x03(\x0b2\x1a.viam.app.v1.AuthorizationR\x0eauthorizations\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name"5\n\x11CreateKeyResponse\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x0e\n\x02id\x18\x02 \x01(\tR\x02id""\n\x10DeleteKeyRequest\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id"\x13\n\x11DeleteKeyResponse"6\n\x10RenameKeyRequest\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name"7\n\x11RenameKeyResponse\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name"\xcd\x01\n\x14AuthorizationDetails\x12-\n\x12authorization_type\x18\x01 \x01(\tR\x11authorizationType\x12)\n\x10authorization_id\x18\x02 \x01(\tR\x0fauthorizationId\x12#\n\rresource_type\x18\x03 \x01(\tR\x0cresourceType\x12\x1f\n\x0bresource_id\x18\x04 \x01(\tR\nresourceId\x12\x15\n\x06org_id\x18\x05 \x01(\tR\x05orgId"\x93\x01\n\x18APIKeyWithAuthorizations\x12,\n\x07api_key\x18\x01 \x01(\x0b2\x13.viam.app.v1.APIKeyR\x06apiKey\x12I\n\x0eauthorizations\x18\x02 \x03(\x0b2!.viam.app.v1.AuthorizationDetailsR\x0eauthorizations"(\n\x0fListKeysRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId"T\n\x10ListKeysResponse\x12@\n\x08api_keys\x18\x01 \x03(\x0b2%.viam.app.v1.APIKeyWithAuthorizationsR\x07apiKeys""\n\x10RotateKeyRequest\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id"5\n\x11RotateKeyResponse\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x10\n\x03key\x18\x02 \x01(\tR\x03key"?\n-CreateKeyFromExistingKeyAuthorizationsRequest\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id"R\n.CreateKeyFromExistingKeyAuthorizationsResponse\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x10\n\x03key\x18\x02 \x01(\tR\x03key"U\n\x14GetAppContentRequest\x12)\n\x10public_namespace\x18\x01 \x01(\tR\x0fpublicNamespace\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name"\x85\x01\n\x15GetAppContentResponse\x12\x1b\n\tblob_path\x18\x01 \x01(\tR\x08blobPath\x12\x1e\n\nentrypoint\x18\x02 \x01(\tR\nentrypoint\x12/\n\x08app_type\x18\x03 \x01(\x0e2\x14.viam.app.v1.AppTypeR\x07appType"G\n\x1aOrganizationSetLogoRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\x12\x12\n\x04logo\x18\x02 \x01(\x0cR\x04logo"\x1d\n\x1bOrganizationSetLogoResponse"3\n\x1aOrganizationGetLogoRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId"/\n\x1bOrganizationGetLogoResponse\x12\x10\n\x03url\x18\x01 \x01(\tR\x03url"1\n\x18EnableAuthServiceRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId"\x1b\n\x19EnableAuthServiceResponse"2\n\x19DisableAuthServiceRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId"\x1c\n\x1aDisableAuthServiceResponse"\x8c\x01\n\x15CreateOAuthAppRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\x12\x1f\n\x0bclient_name\x18\x02 \x01(\tR\nclientName\x12;\n\x0coauth_config\x18\x03 \x01(\x0b2\x18.viam.app.v1.OAuthConfigR\x0boauthConfig"Z\n\x16CreateOAuthAppResponse\x12\x1b\n\tclient_id\x18\x01 \x01(\tR\x08clientId\x12#\n\rclient_secret\x18\x02 \x01(\tR\x0cclientSecret"I\n\x13ReadOAuthAppRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\x12\x1b\n\tclient_id\x18\x02 \x01(\tR\x08clientId"\x99\x01\n\x14ReadOAuthAppResponse\x12\x1f\n\x0bclient_name\x18\x01 \x01(\tR\nclientName\x12#\n\rclient_secret\x18\x02 \x01(\tR\x0cclientSecret\x12;\n\x0coauth_config\x18\x03 \x01(\x0b2\x18.viam.app.v1.OAuthConfigR\x0boauthConfig"\xa9\x01\n\x15UpdateOAuthAppRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\x12\x1b\n\tclient_id\x18\x02 \x01(\tR\x08clientId\x12\x1f\n\x0bclient_name\x18\x03 \x01(\tR\nclientName\x12;\n\x0coauth_config\x18\x04 \x01(\x0b2\x18.viam.app.v1.OAuthConfigR\x0boauthConfig"\x18\n\x16UpdateOAuthAppResponse"K\n\x15DeleteOAuthAppRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\x12\x1b\n\tclient_id\x18\x02 \x01(\tR\x08clientId"\x18\n\x16DeleteOAuthAppResponse"-\n\x14ListOAuthAppsRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId"6\n\x15ListOAuthAppsResponse\x12\x1d\n\nclient_ids\x18\x01 \x03(\tR\tclientIds"\xf6\x02\n\x0bOAuthConfig\x12V\n\x15client_authentication\x18\x01 \x01(\x0e2!.viam.app.v1.ClientAuthenticationR\x14clientAuthentication\x12%\n\x04pkce\x18\x02 \x01(\x0e2\x11.viam.app.v1.PKCER\x04pkce\x12A\n\x0eurl_validation\x18\x03 \x01(\x0e2\x1a.viam.app.v1.URLValidationR\rurlValidation\x12\x1f\n\x0borigin_uris\x18\x04 \x03(\tR\noriginUris\x12#\n\rredirect_uris\x18\x05 \x03(\tR\x0credirectUris\x12\x1d\n\nlogout_uri\x18\x06 \x01(\tR\tlogoutUri\x12@\n\x0eenabled_grants\x18\x07 \x03(\x0e2\x19.viam.app.v1.EnabledGrantR\renabledGrants"V\n\x15GetAppBrandingRequest\x12)\n\x10public_namespace\x18\x01 \x01(\tR\x0fpublicNamespace\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name"\x8a\x01\n\rTextOverrides\x12>\n\x06fields\x18\x01 \x03(\x0b2&.viam.app.v1.TextOverrides.FieldsEntryR\x06fields\x1a9\n\x0bFieldsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x028\x01"\xbc\x02\n\x16GetAppBrandingResponse\x12 \n\tlogo_path\x18\x01 \x01(\tH\x00R\x08logoPath\x88\x01\x01\x12l\n\x13text_customizations\x18\x02 \x03(\x0b2;.viam.app.v1.GetAppBrandingResponse.TextCustomizationsEntryR\x12textCustomizations\x12!\n\x0cfragment_ids\x18\x03 \x03(\tR\x0bfragmentIds\x1aa\n\x17TextCustomizationsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x120\n\x05value\x18\x02 \x01(\x0b2\x1a.viam.app.v1.TextOverridesR\x05value:\x028\x01B\x0c\n\n_logo_path"d\n\x11AppCustomizations\x12O\n\x0emachine_picker\x18\x01 \x01(\x0b2(.viam.app.v1.MachinePickerCustomizationsR\rmachinePicker"|\n\x1bMachinePickerCustomizations\x12\x1d\n\x07heading\x18\x01 \x01(\tH\x00R\x07heading\x88\x01\x01\x12#\n\nsubheading\x18\x02 \x01(\tH\x01R\nsubheading\x88\x01\x01B\n\n\x08_headingB\r\n\x0b_subheading*\x7f\n\x0bOnlineState\x12\x1c\n\x18ONLINE_STATE_UNSPECIFIED\x10\x00\x12\x17\n\x13ONLINE_STATE_ONLINE\x10\x01\x12\x18\n\x14ONLINE_STATE_OFFLINE\x10\x02\x12\x1f\n\x1bONLINE_STATE_AWAITING_SETUP\x10\x03*\xd1\x01\n\x12AuthenticationType\x12#\n\x1fAUTHENTICATION_TYPE_UNSPECIFIED\x10\x00\x12!\n\x1dAUTHENTICATION_TYPE_WEB_OAUTH\x10\x01\x12\x1f\n\x1bAUTHENTICATION_TYPE_API_KEY\x10\x02\x12)\n%AUTHENTICATION_TYPE_ROBOT_PART_SECRET\x10\x03\x12\'\n#AUTHENTICATION_TYPE_LOCATION_SECRET\x10\x04*\xa3\x01\n\x12FragmentVisibility\x12#\n\x1fFRAGMENT_VISIBILITY_UNSPECIFIED\x10\x00\x12\x1f\n\x1bFRAGMENT_VISIBILITY_PRIVATE\x10\x01\x12\x1e\n\x1aFRAGMENT_VISIBILITY_PUBLIC\x10\x02\x12\'\n#FRAGMENT_VISIBILITY_PUBLIC_UNLISTED\x10\x03*\xdd\x01\n\x11FragmentErrorType\x12#\n\x1fFRAGMENT_ERROR_TYPE_UNSPECIFIED\x10\x00\x12!\n\x1dFRAGMENT_ERROR_TYPE_NO_ACCESS\x10\x01\x12.\n*FRAGMENT_ERROR_TYPE_NESTING_LIMIT_EXCEEDED\x10\x02\x12(\n$FRAGMENT_ERROR_TYPE_CHILD_ID_INVALID\x10\x03\x12&\n"FRAGMENT_ERROR_TYPE_CYCLE_DETECTED\x10\x04*{\n\x10ModuleSourceType\x12"\n\x1eMODULE_SOURCE_TYPE_UNSPECIFIED\x10\x00\x12\x1f\n\x1bMODULE_SOURCE_TYPE_EXTERNAL\x10\x01\x12"\n\x1eMODULE_SOURCE_TYPE_VIAM_HOSTED\x10\x02*\x82\x01\n\x0eModuleLanguage\x12\x1f\n\x1bMODULE_LANGUAGE_UNSPECIFIED\x10\x00\x12\x1a\n\x16MODULE_LANGUAGE_GOLANG\x10\x01\x12\x1a\n\x16MODULE_LANGUAGE_PYTHON\x10\x02\x12\x17\n\x13MODULE_LANGUAGE_CPP\x10\x03*\x87\x01\n\x12RegistryItemStatus\x12$\n REGISTRY_ITEM_STATUS_UNSPECIFIED\x10\x00\x12"\n\x1eREGISTRY_ITEM_STATUS_PUBLISHED\x10\x01\x12\'\n#REGISTRY_ITEM_STATUS_IN_DEVELOPMENT\x10\x02*w\n\nVisibility\x12\x1a\n\x16VISIBILITY_UNSPECIFIED\x10\x00\x12\x16\n\x12VISIBILITY_PRIVATE\x10\x01\x12\x15\n\x11VISIBILITY_PUBLIC\x10\x02\x12\x1e\n\x1aVISIBILITY_PUBLIC_UNLISTED\x10\x03*\\\n\x07AppType\x12\x18\n\x14APP_TYPE_UNSPECIFIED\x10\x00\x12\x1b\n\x17APP_TYPE_SINGLE_MACHINE\x10\x01\x12\x1a\n\x16APP_TYPE_MULTI_MACHINE\x10\x02*\xc1\x01\n\x14ClientAuthentication\x12%\n!CLIENT_AUTHENTICATION_UNSPECIFIED\x10\x00\x12"\n\x1eCLIENT_AUTHENTICATION_REQUIRED\x10\x01\x12&\n"CLIENT_AUTHENTICATION_NOT_REQUIRED\x10\x02\x126\n2CLIENT_AUTHENTICATION_NOT_REQUIRED_WHEN_USING_PKCE\x10\x03*~\n\x04PKCE\x12\x14\n\x10PKCE_UNSPECIFIED\x10\x00\x12\x11\n\rPKCE_REQUIRED\x10\x01\x12\x15\n\x11PKCE_NOT_REQUIRED\x10\x02\x126\n2PKCE_NOT_REQUIRED_WHEN_USING_CLIENT_AUTHENTICATION\x10\x03*s\n\rURLValidation\x12\x1e\n\x1aURL_VALIDATION_UNSPECIFIED\x10\x00\x12\x1e\n\x1aURL_VALIDATION_EXACT_MATCH\x10\x01\x12"\n\x1eURL_VALIDATION_ALLOW_WILDCARDS\x10\x02*\xcb\x01\n\x0cEnabledGrant\x12\x1d\n\x19ENABLED_GRANT_UNSPECIFIED\x10\x00\x12$\n ENABLED_GRANT_AUTHORIZATION_CODE\x10\x01\x12\x1a\n\x16ENABLED_GRANT_IMPLICIT\x10\x02\x12\x1a\n\x16ENABLED_GRANT_PASSWORD\x10\x03\x12\x1f\n\x1bENABLED_GRANT_REFRESH_TOKEN\x10\x04\x12\x1d\n\x19ENABLED_GRANT_DEVICE_CODE\x10\x052\xfaU\n\nAppService\x12_\n\x10GetUserIDByEmail\x12$.viam.app.v1.GetUserIDByEmailRequest\x1a%.viam.app.v1.GetUserIDByEmailResponse\x12e\n\x12CreateOrganization\x12&.viam.app.v1.CreateOrganizationRequest\x1a\'.viam.app.v1.CreateOrganizationResponse\x12b\n\x11ListOrganizations\x12%.viam.app.v1.ListOrganizationsRequest\x1a&.viam.app.v1.ListOrganizationsResponse\x12\x9b\x01\n$GetOrganizationsWithAccessToLocation\x128.viam.app.v1.GetOrganizationsWithAccessToLocationRequest\x1a9.viam.app.v1.GetOrganizationsWithAccessToLocationResponse\x12t\n\x17ListOrganizationsByUser\x12+.viam.app.v1.ListOrganizationsByUserRequest\x1a,.viam.app.v1.ListOrganizationsByUserResponse\x12h\n\x13SearchOrganizations\x12\'.viam.app.v1.SearchOrganizationsRequest\x1a(.viam.app.v1.SearchOrganizationsResponse\x12\\\n\x0fGetOrganization\x12#.viam.app.v1.GetOrganizationRequest\x1a$.viam.app.v1.GetOrganizationResponse\x12\x9b\x01\n$GetOrganizationNamespaceAvailability\x128.viam.app.v1.GetOrganizationNamespaceAvailabilityRequest\x1a9.viam.app.v1.GetOrganizationNamespaceAvailabilityResponse\x12e\n\x12UpdateOrganization\x12&.viam.app.v1.UpdateOrganizationRequest\x1a\'.viam.app.v1.UpdateOrganizationResponse\x12\x80\x01\n\x1bUpdateOrganizationNamespace\x12/.viam.app.v1.UpdateOrganizationNamespaceRequest\x1a0.viam.app.v1.UpdateOrganizationNamespaceResponse\x12e\n\x12DeleteOrganization\x12&.viam.app.v1.DeleteOrganizationRequest\x1a\'.viam.app.v1.DeleteOrganizationResponse\x12t\n\x17GetOrganizationMetadata\x12+.viam.app.v1.GetOrganizationMetadataRequest\x1a,.viam.app.v1.GetOrganizationMetadataResponse\x12}\n\x1aUpdateOrganizationMetadata\x12..viam.app.v1.UpdateOrganizationMetadataRequest\x1a/.viam.app.v1.UpdateOrganizationMetadataResponse\x12t\n\x17ListOrganizationMembers\x12+.viam.app.v1.ListOrganizationMembersRequest\x1a,.viam.app.v1.ListOrganizationMembersResponse\x12w\n\x18CreateOrganizationInvite\x12,.viam.app.v1.CreateOrganizationInviteRequest\x1a-.viam.app.v1.CreateOrganizationInviteResponse\x12\xa1\x01\n&UpdateOrganizationInviteAuthorizations\x12:.viam.app.v1.UpdateOrganizationInviteAuthorizationsRequest\x1a;.viam.app.v1.UpdateOrganizationInviteAuthorizationsResponse\x12w\n\x18DeleteOrganizationMember\x12,.viam.app.v1.DeleteOrganizationMemberRequest\x1a-.viam.app.v1.DeleteOrganizationMemberResponse\x12w\n\x18DeleteOrganizationInvite\x12,.viam.app.v1.DeleteOrganizationInviteRequest\x1a-.viam.app.v1.DeleteOrganizationInviteResponse\x12w\n\x18ResendOrganizationInvite\x12,.viam.app.v1.ResendOrganizationInviteRequest\x1a-.viam.app.v1.ResendOrganizationInviteResponse\x12k\n\x14EnableBillingService\x12(.viam.app.v1.EnableBillingServiceRequest\x1a).viam.app.v1.EnableBillingServiceResponse\x12n\n\x15DisableBillingService\x12).viam.app.v1.DisableBillingServiceRequest\x1a*.viam.app.v1.DisableBillingServiceResponse\x12k\n\x14UpdateBillingService\x12(.viam.app.v1.UpdateBillingServiceRequest\x1a).viam.app.v1.UpdateBillingServiceResponse\x12t\n\x17GetBillingServiceConfig\x12+.viam.app.v1.GetBillingServiceConfigRequest\x1a,.viam.app.v1.GetBillingServiceConfigResponse\x12\x80\x01\n\x1bOrganizationSetSupportEmail\x12/.viam.app.v1.OrganizationSetSupportEmailRequest\x1a0.viam.app.v1.OrganizationSetSupportEmailResponse\x12\x80\x01\n\x1bOrganizationGetSupportEmail\x12/.viam.app.v1.OrganizationGetSupportEmailRequest\x1a0.viam.app.v1.OrganizationGetSupportEmailResponse\x12h\n\x13OrganizationSetLogo\x12\'.viam.app.v1.OrganizationSetLogoRequest\x1a(.viam.app.v1.OrganizationSetLogoResponse\x12h\n\x13OrganizationGetLogo\x12\'.viam.app.v1.OrganizationGetLogoRequest\x1a(.viam.app.v1.OrganizationGetLogoResponse\x12b\n\x11EnableAuthService\x12%.viam.app.v1.EnableAuthServiceRequest\x1a&.viam.app.v1.EnableAuthServiceResponse\x12e\n\x12DisableAuthService\x12&.viam.app.v1.DisableAuthServiceRequest\x1a\'.viam.app.v1.DisableAuthServiceResponse\x12Y\n\x0eCreateOAuthApp\x12".viam.app.v1.CreateOAuthAppRequest\x1a#.viam.app.v1.CreateOAuthAppResponse\x12S\n\x0cReadOAuthApp\x12 .viam.app.v1.ReadOAuthAppRequest\x1a!.viam.app.v1.ReadOAuthAppResponse\x12Y\n\x0eUpdateOAuthApp\x12".viam.app.v1.UpdateOAuthAppRequest\x1a#.viam.app.v1.UpdateOAuthAppResponse\x12Y\n\x0eDeleteOAuthApp\x12".viam.app.v1.DeleteOAuthAppRequest\x1a#.viam.app.v1.DeleteOAuthAppResponse\x12V\n\rListOAuthApps\x12!.viam.app.v1.ListOAuthAppsRequest\x1a".viam.app.v1.ListOAuthAppsResponse\x12Y\n\x0eCreateLocation\x12".viam.app.v1.CreateLocationRequest\x1a#.viam.app.v1.CreateLocationResponse\x12P\n\x0bGetLocation\x12\x1f.viam.app.v1.GetLocationRequest\x1a .viam.app.v1.GetLocationResponse\x12Y\n\x0eUpdateLocation\x12".viam.app.v1.UpdateLocationRequest\x1a#.viam.app.v1.UpdateLocationResponse\x12Y\n\x0eDeleteLocation\x12".viam.app.v1.DeleteLocationRequest\x1a#.viam.app.v1.DeleteLocationResponse\x12h\n\x13GetLocationMetadata\x12\'.viam.app.v1.GetLocationMetadataRequest\x1a(.viam.app.v1.GetLocationMetadataResponse\x12q\n\x16UpdateLocationMetadata\x12*.viam.app.v1.UpdateLocationMetadataRequest\x1a+.viam.app.v1.UpdateLocationMetadataResponse\x12V\n\rListLocations\x12!.viam.app.v1.ListLocationsRequest\x1a".viam.app.v1.ListLocationsResponse\x12V\n\rShareLocation\x12!.viam.app.v1.ShareLocationRequest\x1a".viam.app.v1.ShareLocationResponse\x12\\\n\x0fUnshareLocation\x12#.viam.app.v1.UnshareLocationRequest\x1a$.viam.app.v1.UnshareLocationResponse\x12S\n\x0cLocationAuth\x12 .viam.app.v1.LocationAuthRequest\x1a!.viam.app.v1.LocationAuthResponse\x12k\n\x14CreateLocationSecret\x12(.viam.app.v1.CreateLocationSecretRequest\x1a).viam.app.v1.CreateLocationSecretResponse\x12k\n\x14DeleteLocationSecret\x12(.viam.app.v1.DeleteLocationSecretRequest\x1a).viam.app.v1.DeleteLocationSecretResponse\x12G\n\x08GetRobot\x12\x1c.viam.app.v1.GetRobotRequest\x1a\x1d.viam.app.v1.GetRobotResponse\x12_\n\x10GetRobotMetadata\x12$.viam.app.v1.GetRobotMetadataRequest\x1a%.viam.app.v1.GetRobotMetadataResponse\x12h\n\x13UpdateRobotMetadata\x12\'.viam.app.v1.UpdateRobotMetadataRequest\x1a(.viam.app.v1.UpdateRobotMetadataResponse\x12k\n\x14GetRoverRentalRobots\x12(.viam.app.v1.GetRoverRentalRobotsRequest\x1a).viam.app.v1.GetRoverRentalRobotsResponse\x12V\n\rGetRobotParts\x12!.viam.app.v1.GetRobotPartsRequest\x1a".viam.app.v1.GetRobotPartsResponse\x12S\n\x0cGetRobotPart\x12 .viam.app.v1.GetRobotPartRequest\x1a!.viam.app.v1.GetRobotPartResponse\x12\x86\x01\n\x1dGetRobotPartByNameAndLocation\x121.viam.app.v1.GetRobotPartByNameAndLocationRequest\x1a2.viam.app.v1.GetRobotPartByNameAndLocationResponse\x12_\n\x10GetRobotPartLogs\x12$.viam.app.v1.GetRobotPartLogsRequest\x1a%.viam.app.v1.GetRobotPartLogsResponse\x12d\n\x11TailRobotPartLogs\x12%.viam.app.v1.TailRobotPartLogsRequest\x1a&.viam.app.v1.TailRobotPartLogsResponse0\x01\x12h\n\x13GetRobotPartHistory\x12\'.viam.app.v1.GetRobotPartHistoryRequest\x1a(.viam.app.v1.GetRobotPartHistoryResponse\x12\\\n\x0fUpdateRobotPart\x12#.viam.app.v1.UpdateRobotPartRequest\x1a$.viam.app.v1.UpdateRobotPartResponse\x12S\n\x0cNewRobotPart\x12 .viam.app.v1.NewRobotPartRequest\x1a!.viam.app.v1.NewRobotPartResponse\x12\\\n\x0fDeleteRobotPart\x12#.viam.app.v1.DeleteRobotPartRequest\x1a$.viam.app.v1.DeleteRobotPartResponse\x12k\n\x14GetRobotPartMetadata\x12(.viam.app.v1.GetRobotPartMetadataRequest\x1a).viam.app.v1.GetRobotPartMetadataResponse\x12t\n\x17UpdateRobotPartMetadata\x12+.viam.app.v1.UpdateRobotPartMetadataRequest\x1a,.viam.app.v1.UpdateRobotPartMetadataResponse\x12\\\n\x0fGetRobotAPIKeys\x12#.viam.app.v1.GetRobotAPIKeysRequest\x1a$.viam.app.v1.GetRobotAPIKeysResponse\x12Y\n\x0eMarkPartAsMain\x12".viam.app.v1.MarkPartAsMainRequest\x1a#.viam.app.v1.MarkPartAsMainResponse\x12e\n\x12MarkPartForRestart\x12&.viam.app.v1.MarkPartForRestartRequest\x1a\'.viam.app.v1.MarkPartForRestartResponse\x12n\n\x15CreateRobotPartSecret\x12).viam.app.v1.CreateRobotPartSecretRequest\x1a*.viam.app.v1.CreateRobotPartSecretResponse\x12n\n\x15DeleteRobotPartSecret\x12).viam.app.v1.DeleteRobotPartSecretRequest\x1a*.viam.app.v1.DeleteRobotPartSecretResponse\x12M\n\nListRobots\x12\x1e.viam.app.v1.ListRobotsRequest\x1a\x1f.viam.app.v1.ListRobotsResponse\x12q\n\x16ListRobotsForLocations\x12*.viam.app.v1.ListRobotsForLocationsRequest\x1a+.viam.app.v1.ListRobotsForLocationsResponse\x12_\n\x10ListRobotsForOrg\x12$.viam.app.v1.ListRobotsForOrgRequest\x1a%.viam.app.v1.ListRobotsForOrgResponse\x12G\n\x08NewRobot\x12\x1c.viam.app.v1.NewRobotRequest\x1a\x1d.viam.app.v1.NewRobotResponse\x12P\n\x0bUpdateRobot\x12\x1f.viam.app.v1.UpdateRobotRequest\x1a .viam.app.v1.UpdateRobotResponse\x12P\n\x0bDeleteRobot\x12\x1f.viam.app.v1.DeleteRobotRequest\x1a .viam.app.v1.DeleteRobotResponse\x12V\n\rListFragments\x12!.viam.app.v1.ListFragmentsRequest\x1a".viam.app.v1.ListFragmentsResponse\x12P\n\x0bGetFragment\x12\x1f.viam.app.v1.GetFragmentRequest\x1a .viam.app.v1.GetFragmentResponse\x12Y\n\x0eCreateFragment\x12".viam.app.v1.CreateFragmentRequest\x1a#.viam.app.v1.CreateFragmentResponse\x12Y\n\x0eUpdateFragment\x12".viam.app.v1.UpdateFragmentRequest\x1a#.viam.app.v1.UpdateFragmentResponse\x12Y\n\x0eDeleteFragment\x12".viam.app.v1.DeleteFragmentRequest\x1a#.viam.app.v1.DeleteFragmentResponse\x12h\n\x13ListNestedFragments\x12\'.viam.app.v1.ListNestedFragmentsRequest\x1a(.viam.app.v1.ListNestedFragmentsResponse\x12k\n\x14ListMachineFragments\x12(.viam.app.v1.ListMachineFragmentsRequest\x1a).viam.app.v1.ListMachineFragmentsResponse\x12k\n\x14ListMachineSummaries\x12(.viam.app.v1.ListMachineSummariesRequest\x1a).viam.app.v1.ListMachineSummariesResponse\x12e\n\x12GetFragmentHistory\x12&.viam.app.v1.GetFragmentHistoryRequest\x1a\'.viam.app.v1.GetFragmentHistoryResponse\x12_\n\x10GetFragmentUsage\x12$.viam.app.v1.GetFragmentUsageRequest\x1a%.viam.app.v1.GetFragmentUsageResponse\x12Y\n\x0eSetFragmentTag\x12".viam.app.v1.SetFragmentTagRequest\x1a#.viam.app.v1.SetFragmentTagResponse\x12b\n\x11DeleteFragmentTag\x12%.viam.app.v1.DeleteFragmentTagRequest\x1a&.viam.app.v1.DeleteFragmentTagResponse\x12D\n\x07AddRole\x12\x1b.viam.app.v1.AddRoleRequest\x1a\x1c.viam.app.v1.AddRoleResponse\x12M\n\nRemoveRole\x12\x1e.viam.app.v1.RemoveRoleRequest\x1a\x1f.viam.app.v1.RemoveRoleResponse\x12M\n\nChangeRole\x12\x1e.viam.app.v1.ChangeRoleRequest\x1a\x1f.viam.app.v1.ChangeRoleResponse\x12e\n\x12ListAuthorizations\x12&.viam.app.v1.ListAuthorizationsRequest\x1a\'.viam.app.v1.ListAuthorizationsResponse\x12_\n\x10CheckPermissions\x12$.viam.app.v1.CheckPermissionsRequest\x1a%.viam.app.v1.CheckPermissionsResponse\x12\\\n\x0fGetRegistryItem\x12#.viam.app.v1.GetRegistryItemRequest\x1a$.viam.app.v1.GetRegistryItemResponse\x12e\n\x12CreateRegistryItem\x12&.viam.app.v1.CreateRegistryItemRequest\x1a\'.viam.app.v1.CreateRegistryItemResponse\x12e\n\x12UpdateRegistryItem\x12&.viam.app.v1.UpdateRegistryItemRequest\x1a\'.viam.app.v1.UpdateRegistryItemResponse\x12b\n\x11ListRegistryItems\x12%.viam.app.v1.ListRegistryItemsRequest\x1a&.viam.app.v1.ListRegistryItemsResponse\x12e\n\x12DeleteRegistryItem\x12&.viam.app.v1.DeleteRegistryItemRequest\x1a\'.viam.app.v1.DeleteRegistryItemResponse\x12e\n\x12RenameRegistryItem\x12&.viam.app.v1.RenameRegistryItemRequest\x1a\'.viam.app.v1.RenameRegistryItemResponse\x12k\n\x14TransferRegistryItem\x12(.viam.app.v1.TransferRegistryItemRequest\x1a).viam.app.v1.TransferRegistryItemResponse\x12S\n\x0cCreateModule\x12 .viam.app.v1.CreateModuleRequest\x1a!.viam.app.v1.CreateModuleResponse\x12S\n\x0cUpdateModule\x12 .viam.app.v1.UpdateModuleRequest\x1a!.viam.app.v1.UpdateModuleResponse\x12a\n\x10UploadModuleFile\x12$.viam.app.v1.UploadModuleFileRequest\x1a%.viam.app.v1.UploadModuleFileResponse(\x01\x12J\n\tGetModule\x12\x1d.viam.app.v1.GetModuleRequest\x1a\x1e.viam.app.v1.GetModuleResponse\x12P\n\x0bListModules\x12\x1f.viam.app.v1.ListModulesRequest\x1a .viam.app.v1.ListModulesResponse\x12J\n\tCreateKey\x12\x1d.viam.app.v1.CreateKeyRequest\x1a\x1e.viam.app.v1.CreateKeyResponse\x12J\n\tDeleteKey\x12\x1d.viam.app.v1.DeleteKeyRequest\x1a\x1e.viam.app.v1.DeleteKeyResponse\x12G\n\x08ListKeys\x12\x1c.viam.app.v1.ListKeysRequest\x1a\x1d.viam.app.v1.ListKeysResponse\x12J\n\tRenameKey\x12\x1d.viam.app.v1.RenameKeyRequest\x1a\x1e.viam.app.v1.RenameKeyResponse\x12J\n\tRotateKey\x12\x1d.viam.app.v1.RotateKeyRequest\x1a\x1e.viam.app.v1.RotateKeyResponse\x12\xa1\x01\n&CreateKeyFromExistingKeyAuthorizations\x12:.viam.app.v1.CreateKeyFromExistingKeyAuthorizationsRequest\x1a;.viam.app.v1.CreateKeyFromExistingKeyAuthorizationsResponse\x12V\n\rGetAppContent\x12!.viam.app.v1.GetAppContentRequest\x1a".viam.app.v1.GetAppContentResponse\x12Y\n\x0eGetAppBranding\x12".viam.app.v1.GetAppBrandingRequest\x1a#.viam.app.v1.GetAppBrandingResponseB\x18Z\x16go.viam.com/api/app/v1b\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x10app/v1/app.proto\x12\x0bviam.app.v1\x1a#app/mltraining/v1/ml_training.proto\x1a\x1eapp/packages/v1/packages.proto\x1a\x16common/v1/common.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x16tagger/v1/tagger.proto"\xdb\x04\n\x05Robot\x123\n\x02id\x18\x01 \x01(\tB#\x9a\x84\x9e\x03\x1ebson:"_id" json:"id,omitempty"R\x02id\x120\n\x04name\x18\x02 \x01(\tB\x1c\x9a\x84\x9e\x03\x17bson:"name" json:"name"R\x04name\x12@\n\x08location\x18\x03 \x01(\tB$\x9a\x84\x9e\x03\x1fbson:"location" json:"location"R\x08location\x12g\n\x0blast_access\x18\x04 \x01(\x0b2\x1a.google.protobuf.TimestampB*\x9a\x84\x9e\x03%bson:"last_access" json:"last_access"R\nlastAccess\x12Q\n\ncreated_on\x18\x05 \x01(\x0b2\x1a.google.protobuf.TimestampB\x16\x9a\x84\x9e\x03\x11bson:"created_on"R\tcreatedOn\x12s\n\x0conline_state\x18\x06 \x01(\x0e2\x18.viam.app.v1.OnlineStateB6\x9a\x84\x9e\x031bson:"online_state" json:"online_state,omitempty"R\x0bonlineState\x12x\n\x14seconds_since_online\x18\x07 \x01(\x03BF\x9a\x84\x9e\x03Abson:"seconds_since_online" json:"seconds_since_online,omitempty"R\x12secondsSinceOnline"\x9e\n\n\tRobotPart\x123\n\x02id\x18\x01 \x01(\tB#\x9a\x84\x9e\x03\x1ebson:"_id" json:"id,omitempty"R\x02id\x120\n\x04name\x18\x02 \x01(\tB\x1c\x9a\x84\x9e\x03\x17bson:"name" json:"name"R\x04name\x12?\n\x08dns_name\x18\n \x01(\tB$\x9a\x84\x9e\x03\x1fbson:"dns_name" json:"dns_name"R\x07dnsName\x12B\n\x06secret\x18\x03 \x01(\tB*\x9a\x84\x9e\x03%bson:"secret" json:"secret,omitempty"R\x06secret\x124\n\x05robot\x18\x04 \x01(\tB\x1e\x9a\x84\x9e\x03\x19bson:"robot" json:"robot"R\x05robot\x12A\n\x0blocation_id\x18\x0c \x01(\tB \x9a\x84\x9e\x03\x1bbson:"location_id" json:"-"R\nlocationId\x12b\n\x0crobot_config\x18\x05 \x01(\x0b2\x17.google.protobuf.StructB&\x9a\x84\x9e\x03!bson:"config" json:"robot_config"R\x0brobotConfig\x12g\n\x0blast_access\x18\x06 \x01(\x0b2\x1a.google.protobuf.TimestampB*\x9a\x84\x9e\x03%bson:"last_access" json:"last_access"R\nlastAccess\x12\x7f\n\x12user_supplied_info\x18\x07 \x01(\x0b2\x17.google.protobuf.StructB8\x9a\x84\x9e\x033bson:"user_supplied_info" json:"user_supplied_info"R\x10userSuppliedInfo\x12C\n\tmain_part\x18\x08 \x01(\x08B&\x9a\x84\x9e\x03!bson:"main_part" json:"main_part"R\x08mainPart\x12\x12\n\x04fqdn\x18\t \x01(\tR\x04fqdn\x12\x1d\n\nlocal_fqdn\x18\x0b \x01(\tR\tlocalFqdn\x12Q\n\ncreated_on\x18\r \x01(\x0b2\x1a.google.protobuf.TimestampB\x16\x9a\x84\x9e\x03\x11bson:"created_on"R\tcreatedOn\x12H\n\x07secrets\x18\x0e \x03(\x0b2\x19.viam.app.v1.SharedSecretB\x13\x9a\x84\x9e\x03\x0ebson:"secrets"R\x07secrets\x12Z\n\x0clast_updated\x18\x0f \x01(\x0b2\x1a.google.protobuf.TimestampB\x1b\x9a\x84\x9e\x03\x16bson:"last_updated_at"R\x0blastUpdated\x12s\n\x0conline_state\x18\x10 \x01(\x0e2\x18.viam.app.v1.OnlineStateB6\x9a\x84\x9e\x031bson:"online_state" json:"online_state,omitempty"R\x0bonlineState\x12x\n\x14seconds_since_online\x18\x11 \x01(\x03BF\x9a\x84\x9e\x03Abson:"seconds_since_online" json:"seconds_since_online,omitempty"R\x12secondsSinceOnline"\xf8\x02\n\x15RobotPartHistoryEntry\x120\n\x04part\x18\x01 \x01(\tB\x1c\x9a\x84\x9e\x03\x17bson:"part" json:"part"R\x04part\x124\n\x05robot\x18\x02 \x01(\tB\x1e\x9a\x84\x9e\x03\x19bson:"robot" json:"robot"R\x05robot\x12L\n\x04when\x18\x03 \x01(\x0b2\x1a.google.protobuf.TimestampB\x1c\x9a\x84\x9e\x03\x17bson:"when" json:"when"R\x04when\x12D\n\x03old\x18\x04 \x01(\x0b2\x16.viam.app.v1.RobotPartB\x1a\x9a\x84\x9e\x03\x15bson:"old" json:"old"R\x03old\x12c\n\tedited_by\x18\x05 \x01(\x0b2\x1e.viam.app.v1.AuthenticatorInfoB&\x9a\x84\x9e\x03!bson:"edited_by" json:"edited_by"R\x08editedBy"\x85\x01\n\x11AuthenticatorInfo\x123\n\x04type\x18\x01 \x01(\x0e2\x1f.viam.app.v1.AuthenticationTypeR\x04type\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value\x12%\n\x0eis_deactivated\x18\x03 \x01(\x08R\risDeactivated"\x1a\n\x18ListOrganizationsRequest"\xde\x01\n\x0cOrganization\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x129\n\ncreated_on\x18\x03 \x01(\x0b2\x1a.google.protobuf.TimestampR\tcreatedOn\x12)\n\x10public_namespace\x18\x04 \x01(\tR\x0fpublicNamespace\x12%\n\x0edefault_region\x18\x05 \x01(\tR\rdefaultRegion\x12\x15\n\x03cid\x18\x06 \x01(\tH\x00R\x03cid\x88\x01\x01B\x06\n\x04_cid"\xa1\x02\n\x12OrganizationMember\x12\x17\n\x07user_id\x18\x01 \x01(\tR\x06userId\x12\x16\n\x06emails\x18\x02 \x03(\tR\x06emails\x129\n\ndate_added\x18\x03 \x01(\x0b2\x1a.google.protobuf.TimestampR\tdateAdded\x12>\n\nlast_login\x18\x04 \x01(\x0b2\x1a.google.protobuf.TimestampH\x00R\tlastLogin\x88\x01\x01\x12@\n\x0blast_access\x18\x05 \x01(\x0b2\x1a.google.protobuf.TimestampH\x01R\nlastAccess\x88\x01\x01B\r\n\x0b_last_loginB\x0e\n\x0c_last_access"\\\n\x19ListOrganizationsResponse\x12?\n\rorganizations\x18\x01 \x03(\x0b2\x19.viam.app.v1.OrganizationR\rorganizations"\xd2\x01\n\x12OrganizationInvite\x12\'\n\x0forganization_id\x18\x01 \x01(\tR\x0eorganizationId\x12\x14\n\x05email\x18\x02 \x01(\tR\x05email\x129\n\ncreated_on\x18\x03 \x01(\x0b2\x1a.google.protobuf.TimestampR\tcreatedOn\x12B\n\x0eauthorizations\x18\x04 \x03(\x0b2\x1a.viam.app.v1.AuthorizationR\x0eauthorizations"/\n\x19CreateOrganizationRequest\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name"[\n\x1aCreateOrganizationResponse\x12=\n\x0corganization\x18\x01 \x01(\x0b2\x19.viam.app.v1.OrganizationR\x0corganization"A\n\x16GetOrganizationRequest\x12\'\n\x0forganization_id\x18\x01 \x01(\tR\x0eorganizationId"X\n\x17GetOrganizationResponse\x12=\n\x0corganization\x18\x01 \x01(\x0b2\x19.viam.app.v1.OrganizationR\x0corganization"\x81\x01\n+GetOrganizationNamespaceAvailabilityRequest\x12)\n\x10public_namespace\x18\x01 \x01(\tR\x0fpublicNamespace\x12\'\n\x0forganization_id\x18\x02 \x01(\tR\x0eorganizationId"L\n,GetOrganizationNamespaceAvailabilityResponse\x12\x1c\n\tavailable\x18\x01 \x01(\x08R\tavailable"O\n\x12FragmentImportList\x129\n\tfragments\x18\x01 \x03(\x0b2\x1b.viam.app.v1.FragmentImportR\tfragments"\xdb\x02\n\x19UpdateOrganizationRequest\x12\'\n\x0forganization_id\x18\x01 \x01(\tR\x0eorganizationId\x12\x17\n\x04name\x18\x02 \x01(\tH\x00R\x04name\x88\x01\x01\x12.\n\x10public_namespace\x18\x03 \x01(\tH\x01R\x0fpublicNamespace\x88\x01\x01\x12\x1b\n\x06region\x18\x04 \x01(\tH\x02R\x06region\x88\x01\x01\x12\x15\n\x03cid\x18\x05 \x01(\tH\x03R\x03cid\x88\x01\x01\x12Q\n\x11default_fragments\x18\x06 \x01(\x0b2\x1f.viam.app.v1.FragmentImportListH\x04R\x10defaultFragments\x88\x01\x01B\x07\n\x05_nameB\x13\n\x11_public_namespaceB\t\n\x07_regionB\x06\n\x04_cidB\x14\n\x12_default_fragments"[\n\x1aUpdateOrganizationResponse\x12=\n\x0corganization\x18\x01 \x01(\x0b2\x19.viam.app.v1.OrganizationR\x0corganization"\x7f\n"UpdateOrganizationNamespaceRequest\x12\'\n\x0forganization_id\x18\x01 \x01(\tR\x0eorganizationId\x120\n\x14new_public_namespace\x18\x02 \x01(\tR\x12newPublicNamespace"d\n#UpdateOrganizationNamespaceResponse\x12=\n\x0corganization\x18\x01 \x01(\x0b2\x19.viam.app.v1.OrganizationR\x0corganization"D\n\x19DeleteOrganizationRequest\x12\'\n\x0forganization_id\x18\x01 \x01(\tR\x0eorganizationId"\x1c\n\x1aDeleteOrganizationResponse"I\n\x1eGetOrganizationMetadataRequest\x12\'\n\x0forganization_id\x18\x01 \x01(\tR\x0eorganizationId"N\n\x1fGetOrganizationMetadataResponse\x12+\n\x04data\x18\x01 \x01(\x0b2\x17.google.protobuf.StructR\x04data"y\n!UpdateOrganizationMetadataRequest\x12\'\n\x0forganization_id\x18\x01 \x01(\tR\x0eorganizationId\x12+\n\x04data\x18\x02 \x01(\x0b2\x17.google.protobuf.StructR\x04data"$\n"UpdateOrganizationMetadataResponse"I\n\x1eListOrganizationMembersRequest\x12\'\n\x0forganization_id\x18\x01 \x01(\tR\x0eorganizationId"\xc0\x01\n\x1fListOrganizationMembersResponse\x12\'\n\x0forganization_id\x18\x01 \x01(\tR\x0eorganizationId\x129\n\x07members\x18\x02 \x03(\x0b2\x1f.viam.app.v1.OrganizationMemberR\x07members\x129\n\x07invites\x18\x03 \x03(\x0b2\x1f.viam.app.v1.OrganizationInviteR\x07invites"\xeb\x01\n\x1fCreateOrganizationInviteRequest\x12\'\n\x0forganization_id\x18\x01 \x01(\tR\x0eorganizationId\x12\x14\n\x05email\x18\x02 \x01(\tR\x05email\x12B\n\x0eauthorizations\x18\x03 \x03(\x0b2\x1a.viam.app.v1.AuthorizationR\x0eauthorizations\x12/\n\x11send_email_invite\x18\x04 \x01(\x08H\x00R\x0fsendEmailInvite\x88\x01\x01B\x14\n\x12_send_email_invite"[\n CreateOrganizationInviteResponse\x127\n\x06invite\x18\x01 \x01(\x0b2\x1f.viam.app.v1.OrganizationInviteR\x06invite"\x8a\x02\n-UpdateOrganizationInviteAuthorizationsRequest\x12\'\n\x0forganization_id\x18\x01 \x01(\tR\x0eorganizationId\x12\x14\n\x05email\x18\x02 \x01(\tR\x05email\x12I\n\x12add_authorizations\x18\x03 \x03(\x0b2\x1a.viam.app.v1.AuthorizationR\x11addAuthorizations\x12O\n\x15remove_authorizations\x18\x04 \x03(\x0b2\x1a.viam.app.v1.AuthorizationR\x14removeAuthorizations"i\n.UpdateOrganizationInviteAuthorizationsResponse\x127\n\x06invite\x18\x01 \x01(\x0b2\x1f.viam.app.v1.OrganizationInviteR\x06invite"`\n\x1fDeleteOrganizationInviteRequest\x12\'\n\x0forganization_id\x18\x01 \x01(\tR\x0eorganizationId\x12\x14\n\x05email\x18\x02 \x01(\tR\x05email""\n DeleteOrganizationInviteResponse"\xa7\x01\n\x1fResendOrganizationInviteRequest\x12\'\n\x0forganization_id\x18\x01 \x01(\tR\x0eorganizationId\x12\x14\n\x05email\x18\x02 \x01(\tR\x05email\x12/\n\x11send_email_invite\x18\x03 \x01(\x08H\x00R\x0fsendEmailInvite\x88\x01\x01B\x14\n\x12_send_email_invite"[\n ResendOrganizationInviteResponse\x127\n\x06invite\x18\x01 \x01(\x0b2\x1f.viam.app.v1.OrganizationInviteR\x06invite"c\n\x1fDeleteOrganizationMemberRequest\x12\'\n\x0forganization_id\x18\x01 \x01(\tR\x0eorganizationId\x12\x17\n\x07user_id\x18\x02 \x01(\tR\x06userId""\n DeleteOrganizationMemberResponse"\xd2\x01\n\x0eBillingAddress\x12$\n\x0eaddress_line_1\x18\x01 \x01(\tR\x0caddressLine1\x12)\n\x0eaddress_line_2\x18\x02 \x01(\tH\x00R\x0caddressLine2\x88\x01\x01\x12\x12\n\x04city\x18\x03 \x01(\tR\x04city\x12\x14\n\x05state\x18\x04 \x01(\tR\x05state\x12\x18\n\x07zipcode\x18\x05 \x01(\tR\x07zipcode\x12\x18\n\x07country\x18\x06 \x01(\tR\x07countryB\x11\n\x0f_address_line_2"z\n\x1bEnableBillingServiceRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\x12D\n\x0fbilling_address\x18\x02 \x01(\x0b2\x1b.viam.app.v1.BillingAddressR\x0ebillingAddress"\x1e\n\x1cEnableBillingServiceResponse"z\n\x1bUpdateBillingServiceRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\x12D\n\x0fbilling_address\x18\x02 \x01(\x0b2\x1b.viam.app.v1.BillingAddressR\x0ebillingAddress"\x1e\n\x1cUpdateBillingServiceResponse"7\n\x1eGetBillingServiceConfigRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId"\xdb\x01\n\x1fGetBillingServiceConfigResponse\x12D\n\x0fbilling_address\x18\x01 \x01(\x0b2\x1b.viam.app.v1.BillingAddressR\x0ebillingAddress\x12#\n\rsupport_email\x18\x02 \x01(\tR\x0csupportEmail\x12\x19\n\x08logo_url\x18\x03 \x01(\tR\x07logoUrl\x122\n\x15billing_dashboard_url\x18\x04 \x01(\tR\x13billingDashboardUrl"5\n\x1cDisableBillingServiceRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId"\x1f\n\x1dDisableBillingServiceResponse"Q\n"OrganizationSetSupportEmailRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\x12\x14\n\x05email\x18\x02 \x01(\tR\x05email"%\n#OrganizationSetSupportEmailResponse";\n"OrganizationGetSupportEmailRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId";\n#OrganizationGetSupportEmailResponse\x12\x14\n\x05email\x18\x01 \x01(\tR\x05email":\n\x14OrganizationIdentity\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name"Y\n\x14LocationOrganization\x12\'\n\x0forganization_id\x18\x01 \x01(\tR\x0eorganizationId\x12\x18\n\x07primary\x18\x02 \x01(\x08R\x07primary"\x80\x01\n\x0cLocationAuth\x12\x1a\n\x06secret\x18\x01 \x01(\tB\x02\x18\x01R\x06secret\x12\x1f\n\x0blocation_id\x18\x02 \x01(\tR\nlocationId\x123\n\x07secrets\x18\x03 \x03(\x0b2\x19.viam.app.v1.SharedSecretR\x07secrets"\'\n\rStorageConfig\x12\x16\n\x06region\x18\x01 \x01(\tR\x06region"\xd7\x03\n\x08Location\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x12,\n\x12parent_location_id\x18\x04 \x01(\tR\x10parentLocationId\x12-\n\x04auth\x18\x05 \x01(\x0b2\x19.viam.app.v1.LocationAuthR\x04auth\x12G\n\rorganizations\x18\x06 \x03(\x0b2!.viam.app.v1.LocationOrganizationR\rorganizations\x129\n\ncreated_on\x18\x03 \x01(\x0b2\x1a.google.protobuf.TimestampR\tcreatedOn\x12\x1f\n\x0brobot_count\x18\x07 \x01(\x05R\nrobotCount\x122\n\x06config\x18\x08 \x01(\x0b2\x1a.viam.app.v1.StorageConfigR\x06config\x12X\n\x14primary_org_identity\x18\t \x01(\x0b2!.viam.app.v1.OrganizationIdentityH\x00R\x12primaryOrgIdentity\x88\x01\x01B\x17\n\x15_primary_org_identity"\xd0\x02\n\x0cSharedSecret\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\x9a\x84\x9e\x03\tbson:"id"R\x02id\x12*\n\x06secret\x18\x02 \x01(\tB\x12\x9a\x84\x9e\x03\rbson:"secret"R\x06secret\x12c\n\ncreated_on\x18\x03 \x01(\x0b2\x1a.google.protobuf.TimestampB(\x9a\x84\x9e\x03#bson:"created_on" json:"created_on"R\tcreatedOn\x12H\n\x05state\x18\x04 \x01(\x0e2\x1f.viam.app.v1.SharedSecret.StateB\x11\x9a\x84\x9e\x03\x0cbson:"state"R\x05state"E\n\x05State\x12\x15\n\x11STATE_UNSPECIFIED\x10\x00\x12\x11\n\rSTATE_ENABLED\x10\x01\x12\x12\n\x0eSTATE_DISABLED\x10\x02"\x9e\x01\n\x15CreateLocationRequest\x12\'\n\x0forganization_id\x18\x01 \x01(\tR\x0eorganizationId\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x121\n\x12parent_location_id\x18\x03 \x01(\tH\x00R\x10parentLocationId\x88\x01\x01B\x15\n\x13_parent_location_id"K\n\x16CreateLocationResponse\x121\n\x08location\x18\x01 \x01(\x0b2\x15.viam.app.v1.LocationR\x08location"5\n\x12GetLocationRequest\x12\x1f\n\x0blocation_id\x18\x01 \x01(\tR\nlocationId"H\n\x13GetLocationResponse\x121\n\x08location\x18\x01 \x01(\x0b2\x15.viam.app.v1.LocationR\x08location"\xcc\x01\n\x15UpdateLocationRequest\x12\x1f\n\x0blocation_id\x18\x01 \x01(\tR\nlocationId\x12\x17\n\x04name\x18\x02 \x01(\tH\x00R\x04name\x88\x01\x01\x121\n\x12parent_location_id\x18\x03 \x01(\tH\x01R\x10parentLocationId\x88\x01\x01\x12\x1b\n\x06region\x18\x04 \x01(\tH\x02R\x06region\x88\x01\x01B\x07\n\x05_nameB\x15\n\x13_parent_location_idB\t\n\x07_region"K\n\x16UpdateLocationResponse\x121\n\x08location\x18\x01 \x01(\x0b2\x15.viam.app.v1.LocationR\x08location"8\n\x15DeleteLocationRequest\x12\x1f\n\x0blocation_id\x18\x01 \x01(\tR\nlocationId"\x18\n\x16DeleteLocationResponse"=\n\x1aGetLocationMetadataRequest\x12\x1f\n\x0blocation_id\x18\x01 \x01(\tR\nlocationId"J\n\x1bGetLocationMetadataResponse\x12+\n\x04data\x18\x01 \x01(\x0b2\x17.google.protobuf.StructR\x04data"m\n\x1dUpdateLocationMetadataRequest\x12\x1f\n\x0blocation_id\x18\x01 \x01(\tR\nlocationId\x12+\n\x04data\x18\x02 \x01(\x0b2\x17.google.protobuf.StructR\x04data" \n\x1eUpdateLocationMetadataResponse"N\n+GetOrganizationsWithAccessToLocationRequest\x12\x1f\n\x0blocation_id\x18\x01 \x01(\tR\nlocationId"\x8a\x01\n,GetOrganizationsWithAccessToLocationResponse\x12Z\n\x17organization_identities\x18\x01 \x03(\x0b2!.viam.app.v1.OrganizationIdentityR\x16organizationIdentities"?\n\x14ListLocationsRequest\x12\'\n\x0forganization_id\x18\x01 \x01(\tR\x0eorganizationId"`\n\x14ShareLocationRequest\x12\x1f\n\x0blocation_id\x18\x01 \x01(\tR\nlocationId\x12\'\n\x0forganization_id\x18\x02 \x01(\tR\x0eorganizationId"\x17\n\x15ShareLocationResponse"b\n\x16UnshareLocationRequest\x12\x1f\n\x0blocation_id\x18\x01 \x01(\tR\nlocationId\x12\'\n\x0forganization_id\x18\x02 \x01(\tR\x0eorganizationId"\x19\n\x17UnshareLocationResponse"L\n\x15ListLocationsResponse\x123\n\tlocations\x18\x01 \x03(\x0b2\x15.viam.app.v1.LocationR\tlocations">\n\x1bCreateLocationSecretRequest\x12\x1f\n\x0blocation_id\x18\x01 \x01(\tR\nlocationId"M\n\x1cCreateLocationSecretResponse\x12-\n\x04auth\x18\x01 \x01(\x0b2\x19.viam.app.v1.LocationAuthR\x04auth"[\n\x1bDeleteLocationSecretRequest\x12\x1f\n\x0blocation_id\x18\x01 \x01(\tR\nlocationId\x12\x1b\n\tsecret_id\x18\x02 \x01(\tR\x08secretId"\x1e\n\x1cDeleteLocationSecretResponse"6\n\x13LocationAuthRequest\x12\x1f\n\x0blocation_id\x18\x01 \x01(\tR\nlocationId"E\n\x14LocationAuthResponse\x12-\n\x04auth\x18\x01 \x01(\x0b2\x19.viam.app.v1.LocationAuthR\x04auth"!\n\x0fGetRobotRequest\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id"4\n\x1bGetRoverRentalRobotsRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId"\x9a\x01\n\x10RoverRentalRobot\x12\x19\n\x08robot_id\x18\x01 \x01(\tR\x07robotId\x12\x1f\n\x0blocation_id\x18\x02 \x01(\tR\nlocationId\x12\x1d\n\nrobot_name\x18\x03 \x01(\tR\trobotName\x12+\n\x12robot_main_part_id\x18\x04 \x01(\tR\x0frobotMainPartId"U\n\x1cGetRoverRentalRobotsResponse\x125\n\x06robots\x18\x01 \x03(\x0b2\x1d.viam.app.v1.RoverRentalRobotR\x06robots"<\n\x10GetRobotResponse\x12(\n\x05robot\x18\x01 \x01(\x0b2\x12.viam.app.v1.RobotR\x05robot"1\n\x14GetRobotPartsRequest\x12\x19\n\x08robot_id\x18\x01 \x01(\tR\x07robotId"E\n\x15GetRobotPartsResponse\x12,\n\x05parts\x18\x01 \x03(\x0b2\x16.viam.app.v1.RobotPartR\x05parts"%\n\x13GetRobotPartRequest\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id"c\n\x14GetRobotPartResponse\x12*\n\x04part\x18\x01 \x01(\x0b2\x16.viam.app.v1.RobotPartR\x04part\x12\x1f\n\x0bconfig_json\x18\x02 \x01(\tR\nconfigJson"[\n$GetRobotPartByNameAndLocationRequest\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12\x1f\n\x0blocation_id\x18\x02 \x01(\tR\nlocationId"S\n%GetRobotPartByNameAndLocationResponse\x12*\n\x04part\x18\x01 \x01(\x0b2\x16.viam.app.v1.RobotPartR\x04part"\xce\x03\n\x17GetRobotPartLogsRequest\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12#\n\x0berrors_only\x18\x02 \x01(\x08B\x02\x18\x01R\nerrorsOnly\x12\x1b\n\x06filter\x18\x03 \x01(\tH\x00R\x06filter\x88\x01\x01\x12"\n\npage_token\x18\x04 \x01(\tH\x01R\tpageToken\x88\x01\x01\x12\x16\n\x06levels\x18\x05 \x03(\tR\x06levels\x125\n\x05start\x18\x06 \x01(\x0b2\x1a.google.protobuf.TimestampH\x02R\x05start\x88\x01\x01\x121\n\x03end\x18\x07 \x01(\x0b2\x1a.google.protobuf.TimestampH\x03R\x03end\x88\x01\x01\x12\x19\n\x05limit\x18\x08 \x01(\x03H\x04R\x05limit\x88\x01\x01\x12\x1b\n\x06source\x18\t \x01(\tH\x05R\x06source\x88\x01\x01\x12-\n\x10user_facing_only\x18\n \x01(\x08H\x06R\x0euserFacingOnly\x88\x01\x01B\t\n\x07_filterB\r\n\x0b_page_tokenB\x08\n\x06_startB\x06\n\x04_endB\x08\n\x06_limitB\t\n\x07_sourceB\x13\n\x11_user_facing_only"p\n\x18GetRobotPartLogsResponse\x12,\n\x04logs\x18\x01 \x03(\x0b2\x18.viam.common.v1.LogEntryR\x04logs\x12&\n\x0fnext_page_token\x18\x02 \x01(\tR\rnextPageToken"s\n\x18TailRobotPartLogsRequest\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x1f\n\x0berrors_only\x18\x02 \x01(\x08R\nerrorsOnly\x12\x1b\n\x06filter\x18\x03 \x01(\tH\x00R\x06filter\x88\x01\x01B\t\n\x07_filter"I\n\x19TailRobotPartLogsResponse\x12,\n\x04logs\x18\x01 \x03(\x0b2\x18.viam.common.v1.LogEntryR\x04logs",\n\x1aGetRobotPartHistoryRequest\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id"[\n\x1bGetRobotPartHistoryResponse\x12<\n\x07history\x18\x01 \x03(\x0b2".viam.app.v1.RobotPartHistoryEntryR\x07history"\xdb\x01\n\x16UpdateRobotPartRequest\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x12:\n\x0crobot_config\x18\x03 \x01(\x0b2\x17.google.protobuf.StructR\x0brobotConfig\x12K\n\x11last_known_update\x18\x04 \x01(\x0b2\x1a.google.protobuf.TimestampH\x00R\x0flastKnownUpdate\x88\x01\x01B\x14\n\x12_last_known_update"E\n\x17UpdateRobotPartResponse\x12*\n\x04part\x18\x01 \x01(\x0b2\x16.viam.app.v1.RobotPartR\x04part"M\n\x13NewRobotPartRequest\x12\x19\n\x08robot_id\x18\x01 \x01(\tR\x07robotId\x12\x1b\n\tpart_name\x18\x02 \x01(\tR\x08partName"/\n\x14NewRobotPartResponse\x12\x17\n\x07part_id\x18\x01 \x01(\tR\x06partId"1\n\x16DeleteRobotPartRequest\x12\x17\n\x07part_id\x18\x01 \x01(\tR\x06partId"-\n\x1bGetRobotPartMetadataRequest\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id"K\n\x1cGetRobotPartMetadataResponse\x12+\n\x04data\x18\x01 \x01(\x0b2\x17.google.protobuf.StructR\x04data"]\n\x1eUpdateRobotPartMetadataRequest\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12+\n\x04data\x18\x02 \x01(\x0b2\x17.google.protobuf.StructR\x04data"!\n\x1fUpdateRobotPartMetadataResponse"3\n\x16GetRobotAPIKeysRequest\x12\x19\n\x08robot_id\x18\x01 \x01(\tR\x07robotId"y\n\x06APIKey\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x10\n\x03key\x18\x02 \x01(\tR\x03key\x12\x12\n\x04name\x18\x03 \x01(\tR\x04name\x129\n\ncreated_on\x18\x04 \x01(\x0b2\x1a.google.protobuf.TimestampR\tcreatedOn"[\n\x17GetRobotAPIKeysResponse\x12@\n\x08api_keys\x18\x01 \x03(\x0b2%.viam.app.v1.APIKeyWithAuthorizationsR\x07apiKeys"\x19\n\x17DeleteRobotPartResponse"\xa1\x06\n\x08Fragment\x123\n\x02id\x18\x01 \x01(\tB#\x9a\x84\x9e\x03\x1ebson:"_id" json:"id,omitempty"R\x02id\x120\n\x04name\x18\x02 \x01(\tB\x1c\x9a\x84\x9e\x03\x17bson:"name" json:"name"R\x04name\x12Y\n\x08fragment\x18\x03 \x01(\x0b2\x17.google.protobuf.StructB$\x9a\x84\x9e\x03\x1fbson:"fragment" json:"fragment"R\x08fragment\x12Z\n\x12organization_owner\x18\x04 \x01(\tB+\x9a\x84\x9e\x03&bson:"organization_owner" json:"owner"R\x11organizationOwner\x128\n\x06public\x18\x05 \x01(\x08B \x9a\x84\x9e\x03\x1bbson:"public" json:"public"R\x06public\x12Q\n\ncreated_on\x18\x06 \x01(\x0b2\x1a.google.protobuf.TimestampB\x16\x9a\x84\x9e\x03\x11bson:"created_on"R\tcreatedOn\x12+\n\x11organization_name\x18\x07 \x01(\tR\x10organizationName\x12(\n\x10robot_part_count\x18\t \x01(\x05R\x0erobotPartCount\x12-\n\x12organization_count\x18\n \x01(\x05R\x11organizationCount\x12+\n\x12only_used_by_owner\x18\x0b \x01(\x08R\x0fonlyUsedByOwner\x12?\n\nvisibility\x18\x0c \x01(\x0e2\x1f.viam.app.v1.FragmentVisibilityR\nvisibility\x12Z\n\x0clast_updated\x18\r \x01(\x0b2\x1a.google.protobuf.TimestampB\x1b\x9a\x84\x9e\x03\x16bson:"last_updated_at"R\x0blastUpdated\x12\x1a\n\x08revision\x18\x0e \x01(\tR\x08revision"\xf8\x03\n\x14FragmentHistoryEntry\x12@\n\x08fragment\x18\x01 \x01(\tB$\x9a\x84\x9e\x03\x1fbson:"fragment" json:"fragment"R\x08fragment\x12_\n\tedited_on\x18\x02 \x01(\x0b2\x1a.google.protobuf.TimestampB&\x9a\x84\x9e\x03!bson:"edited_on" json:"edited_on"R\x08editedOn\x12C\n\x03old\x18\x03 \x01(\x0b2\x15.viam.app.v1.FragmentB\x1a\x9a\x84\x9e\x03\x15bson:"old" json:"old"R\x03old\x12c\n\tedited_by\x18\x04 \x01(\x0b2\x1e.viam.app.v1.AuthenticatorInfoB&\x9a\x84\x9e\x03!bson:"edited_by" json:"edited_by"R\x08editedBy\x12@\n\x08revision\x18\x05 \x01(\tB$\x9a\x84\x9e\x03\x1fbson:"revision" json:"revision"R\x08revision\x12Q\n\x06config\x18\x06 \x01(\x0b2\x17.google.protobuf.StructB \x9a\x84\x9e\x03\x1bbson:"config" json:"config"R\x06config"i\n\x10FragmentRevision\x12\x1a\n\x08revision\x18\x01 \x01(\tR\x08revision\x129\n\ncreated_at\x18\x02 \x01(\x0b2\x1a.google.protobuf.TimestampR\tcreatedAt";\n\x0bFragmentTag\x12\x10\n\x03tag\x18\x01 \x01(\tR\x03tag\x12\x1a\n\x08revision\x18\x02 \x01(\tR\x08revision"\x87\x01\n\rFragmentError\x12=\n\nerror_type\x18\x01 \x01(\x0e2\x1e.viam.app.v1.FragmentErrorTypeR\terrorType\x12\x1f\n\x0bfragment_id\x18\x02 \x01(\tR\nfragmentId\x12\x16\n\x06detail\x18\x03 \x01(\tR\x06detail"\xd4\x01\n\rFragmentUsage\x12\x1f\n\x0bfragment_id\x18\x01 \x01(\tR\nfragmentId\x12$\n\rorganizations\x18\x02 \x01(\x05R\rorganizations\x12\x1a\n\x08machines\x18\x03 \x01(\x05R\x08machines\x125\n\x17machines_in_current_org\x18\x04 \x01(\x05R\x14machinesInCurrentOrg\x12\x1d\n\x07version\x18\x05 \x01(\tH\x00R\x07version\x88\x01\x01B\n\n\x08_version"\xfb\x01\n\x0eFragmentImport\x12\x1f\n\x0bfragment_id\x18\x01 \x01(\tR\nfragmentId\x12\x18\n\x07version\x18\x02 \x01(\tR\x07version\x12\x1b\n\x06prefix\x18\x03 \x01(\tH\x00R\x06prefix\x88\x01\x01\x12H\n\tvariables\x18\x04 \x03(\x0b2*.viam.app.v1.FragmentImport.VariablesEntryR\tvariables\x1a<\n\x0eVariablesEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x028\x01B\t\n\x07_prefix"\xc3\x01\n\x10ResolvedFragment\x12\x1f\n\x0bfragment_id\x18\x01 \x01(\tR\nfragmentId\x12@\n\x0fresolved_config\x18\x02 \x01(\x0b2\x17.google.protobuf.StructR\x0eresolvedConfig\x120\n\x05error\x18\x03 \x01(\x0b2\x1a.viam.app.v1.FragmentErrorR\x05error\x12\x1a\n\x08revision\x18\x04 \x01(\tR\x08revision"\xb2\x01\n\x14ListFragmentsRequest\x12\'\n\x0forganization_id\x18\x01 \x01(\tR\x0eorganizationId\x12\x1f\n\x0bshow_public\x18\x02 \x01(\x08R\nshowPublic\x12P\n\x13fragment_visibility\x18\x03 \x03(\x0e2\x1f.viam.app.v1.FragmentVisibilityR\x12fragmentVisibility"\x91\x01\n\x15ListFragmentsResponse\x123\n\tfragments\x18\x01 \x03(\x0b2\x15.viam.app.v1.FragmentR\tfragments\x12C\n\x0ffragment_usages\x18\x02 \x03(\x0b2\x1a.viam.app.v1.FragmentUsageR\x0efragmentUsages"\x87\x01\n\x12GetFragmentRequest\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x126\n\x17current_organization_id\x18\x02 \x01(\tR\x15currentOrganizationId\x12\x1d\n\x07version\x18\x03 \x01(\tH\x00R\x07version\x88\x01\x01B\n\n\x08_version"\xf6\x01\n\x13GetFragmentResponse\x121\n\x08fragment\x18\x01 \x01(\x0b2\x15.viam.app.v1.FragmentR\x08fragment\x12A\n\x0efragment_usage\x18\x02 \x01(\x0b2\x1a.viam.app.v1.FragmentUsageR\rfragmentUsage\x12;\n\trevisions\x18\x03 \x03(\x0b2\x1d.viam.app.v1.FragmentRevisionR\trevisions\x12,\n\x04tags\x18\x04 \x03(\x0b2\x18.viam.app.v1.FragmentTagR\x04tags"\xda\x01\n\x15CreateFragmentRequest\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12/\n\x06config\x18\x02 \x01(\x0b2\x17.google.protobuf.StructR\x06config\x12\'\n\x0forganization_id\x18\x03 \x01(\tR\x0eorganizationId\x12D\n\nvisibility\x18\x04 \x01(\x0e2\x1f.viam.app.v1.FragmentVisibilityH\x00R\nvisibility\x88\x01\x01B\r\n\x0b_visibility"K\n\x16CreateFragmentResponse\x121\n\x08fragment\x18\x01 \x01(\x0b2\x15.viam.app.v1.FragmentR\x08fragment"\xcc\x02\n\x15UpdateFragmentRequest\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x12/\n\x06config\x18\x03 \x01(\x0b2\x17.google.protobuf.StructR\x06config\x12\x1b\n\x06public\x18\x04 \x01(\x08H\x00R\x06public\x88\x01\x01\x12D\n\nvisibility\x18\x05 \x01(\x0e2\x1f.viam.app.v1.FragmentVisibilityH\x01R\nvisibility\x88\x01\x01\x12K\n\x11last_known_update\x18\x06 \x01(\x0b2\x1a.google.protobuf.TimestampH\x02R\x0flastKnownUpdate\x88\x01\x01B\t\n\x07_publicB\r\n\x0b_visibilityB\x14\n\x12_last_known_update"K\n\x16UpdateFragmentResponse\x121\n\x08fragment\x18\x01 \x01(\x0b2\x15.viam.app.v1.FragmentR\x08fragment"\'\n\x15DeleteFragmentRequest\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id"\x18\n\x16DeleteFragmentResponse"\x91\x01\n\x19GetFragmentHistoryRequest\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12"\n\npage_token\x18\x02 \x01(\tH\x00R\tpageToken\x88\x01\x01\x12"\n\npage_limit\x18\x03 \x01(\x03H\x01R\tpageLimit\x88\x01\x01B\r\n\x0b_page_tokenB\r\n\x0b_page_limit"\x81\x01\n\x1aGetFragmentHistoryResponse\x12;\n\x07history\x18\x01 \x03(\x0b2!.viam.app.v1.FragmentHistoryEntryR\x07history\x12&\n\x0fnext_page_token\x18\x02 \x01(\tR\rnextPageToken":\n\x17GetFragmentUsageRequest\x12\x1f\n\x0bfragment_id\x18\x01 \x01(\tR\nfragmentId"]\n\x18GetFragmentUsageResponse\x12A\n\x0eversion_usages\x18\x01 \x03(\x0b2\x1a.viam.app.v1.FragmentUsageR\rversionUsages"f\n\x15SetFragmentTagRequest\x12\x1f\n\x0bfragment_id\x18\x01 \x01(\tR\nfragmentId\x12\x10\n\x03tag\x18\x02 \x01(\tR\x03tag\x12\x1a\n\x08revision\x18\x03 \x01(\tR\x08revision"F\n\x16SetFragmentTagResponse\x12,\n\x04tags\x18\x01 \x03(\x0b2\x18.viam.app.v1.FragmentTagR\x04tags"M\n\x18DeleteFragmentTagRequest\x12\x1f\n\x0bfragment_id\x18\x01 \x01(\tR\nfragmentId\x12\x10\n\x03tag\x18\x02 \x01(\tR\x03tag"I\n\x19DeleteFragmentTagResponse\x12,\n\x04tags\x18\x01 \x03(\x0b2\x18.viam.app.v1.FragmentTagR\x04tags"4\n\x11ListRobotsRequest\x12\x1f\n\x0blocation_id\x18\x01 \x01(\tR\nlocationId"B\n\x1dListRobotsForLocationsRequest\x12!\n\x0clocation_ids\x18\x01 \x03(\tR\x0blocationIds"0\n\x17ListRobotsForOrgRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId"`\n\x12AdditionalFragment\x12\x1f\n\x0bfragment_id\x18\x01 \x01(\tR\nfragmentId\x12\x1d\n\x07version\x18\x02 \x01(\tH\x00R\x07version\x88\x01\x01B\n\n\x08_version"\xa6\x01\n\x1aListNestedFragmentsRequest\x12$\n\x0bfragment_id\x18\x01 \x01(\tH\x00R\nfragmentId\x88\x01\x01\x12R\n\x14additional_fragments\x18\x02 \x03(\x0b2\x1f.viam.app.v1.AdditionalFragmentR\x13additionalFragmentsB\x0e\n\x0c_fragment_id"\xa0\x01\n\x1bListNestedFragmentsResponse\x123\n\tfragments\x18\x01 \x03(\x0b2\x15.viam.app.v1.FragmentR\tfragments\x12L\n\x12resolved_fragments\x18\x02 \x03(\x0b2\x1d.viam.app.v1.ResolvedFragmentR\x11resolvedFragments"\xc8\x01\n\x1bListMachineFragmentsRequest\x12\x1d\n\nmachine_id\x18\x01 \x01(\tR\tmachineId\x126\n\x17additional_fragment_ids\x18\x02 \x03(\tR\x15additionalFragmentIds\x12R\n\x14additional_fragments\x18\x03 \x03(\x0b2\x1f.viam.app.v1.AdditionalFragmentR\x13additionalFragments"\xa1\x01\n\x1cListMachineFragmentsResponse\x123\n\tfragments\x18\x01 \x03(\x0b2\x15.viam.app.v1.FragmentR\tfragments\x12L\n\x12resolved_fragments\x18\x02 \x03(\x0b2\x1d.viam.app.v1.ResolvedFragmentR\x11resolvedFragments"\xb1\x01\n\x1bListMachineSummariesRequest\x12\'\n\x0forganization_id\x18\x01 \x01(\tR\x0eorganizationId\x12!\n\x0cfragment_ids\x18\x02 \x03(\tR\x0bfragmentIds\x12!\n\x0clocation_ids\x18\x03 \x03(\tR\x0blocationIds\x12\x19\n\x05limit\x18\x04 \x01(\x05H\x00R\x05limit\x88\x01\x01B\x08\n\x06_limit"k\n\x1cListMachineSummariesResponse\x12K\n\x12location_summaries\x18\x01 \x03(\x0b2\x1c.viam.app.v1.LocationSummaryR\x11locationSummaries"\xa1\x01\n\x0fLocationSummary\x12\x1f\n\x0blocation_id\x18\x01 \x01(\tR\nlocationId\x12#\n\rlocation_name\x18\x02 \x01(\tR\x0clocationName\x12H\n\x11machine_summaries\x18\x03 \x03(\x0b2\x1b.viam.app.v1.MachineSummaryR\x10machineSummaries"\x93\x01\n\x0eMachineSummary\x12\x1d\n\nmachine_id\x18\x01 \x01(\tR\tmachineId\x12!\n\x0cmachine_name\x18\x02 \x01(\tR\x0bmachineName\x12?\n\x0epart_summaries\x18\x03 \x03(\x0b2\x18.viam.app.v1.PartSummaryR\rpartSummaries";\n\x0fFragmentSummary\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n\x04name\x18\x03 \x01(\tR\x04nameJ\x04\x08\x02\x10\x03"N\n\x11ViamServerVersion\x12\x16\n\x05major\x18\x01 \x01(\tH\x00R\x05major\x12\x16\n\x05minor\x18\x02 \x01(\tH\x00R\x05minorB\t\n\x07version"M\n\x10ViamAgentVersion\x12\x16\n\x05major\x18\x01 \x01(\tH\x00R\x05major\x12\x16\n\x05minor\x18\x02 \x01(\tH\x00R\x05minorB\t\n\x07version"\xc8\x06\n\x0bPartSummary\x12\x17\n\x07part_id\x18\x01 \x01(\tR\x06partId\x12\x1b\n\tpart_name\x18\x02 \x01(\tR\x08partName\x12 \n\x0cis_main_part\x18\x0b \x01(\x08R\nisMainPart\x12;\n\x0conline_state\x18\x0c \x01(\x0e2\x18.viam.app.v1.OnlineStateR\x0bonlineState\x120\n\x14seconds_since_online\x18\r \x01(\x03R\x12secondsSinceOnline\x12@\n\x0blast_access\x18\x0e \x01(\x0b2\x1a.google.protobuf.TimestampH\x00R\nlastAccess\x88\x01\x01\x12@\n\x0blast_online\x18\x03 \x01(\x0b2\x1a.google.protobuf.TimestampH\x01R\nlastOnline\x88\x01\x01\x12S\n\x13viam_server_version\x18\x04 \x01(\x0b2\x1e.viam.app.v1.ViamServerVersionH\x02R\x11viamServerVersion\x88\x01\x01\x12P\n\x12viam_agent_version\x18\x05 \x01(\x0b2\x1d.viam.app.v1.ViamAgentVersionH\x03R\x10viamAgentVersion\x88\x01\x01\x12\x13\n\x02os\x18\x06 \x01(\tH\x04R\x02os\x88\x01\x01\x12\x1f\n\x08platform\x18\x07 \x01(\tH\x05R\x08platform\x88\x01\x01\x12/\n\x11public_ip_address\x18\x08 \x01(\tH\x06R\x0fpublicIpAddress\x88\x01\x01\x12\x1e\n\x08dns_name\x18\n \x01(\tH\x07R\x07dnsName\x88\x01\x01\x12:\n\tfragments\x18\t \x03(\x0b2\x1c.viam.app.v1.FragmentSummaryR\tfragmentsB\x0e\n\x0c_last_accessB\x0e\n\x0c_last_onlineB\x16\n\x14_viam_server_versionB\x15\n\x13_viam_agent_versionB\x05\n\x03_osB\x0b\n\t_platformB\x14\n\x12_public_ip_addressB\x0b\n\t_dns_name"@\n\x12ListRobotsResponse\x12*\n\x06robots\x18\x01 \x03(\x0b2\x12.viam.app.v1.RobotR\x06robots"L\n\x1eListRobotsForLocationsResponse\x12*\n\x06robots\x18\x01 \x03(\x0b2\x12.viam.app.v1.RobotR\x06robots"F\n\x18ListRobotsForOrgResponse\x12*\n\x06robots\x18\x01 \x03(\x0b2\x12.viam.app.v1.RobotR\x06robots"A\n\x0fNewRobotRequest\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12\x1a\n\x08location\x18\x02 \x01(\tR\x08location""\n\x10NewRobotResponse\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id"T\n\x12UpdateRobotRequest\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x12\x1a\n\x08location\x18\x03 \x01(\tR\x08location"?\n\x13UpdateRobotResponse\x12(\n\x05robot\x18\x01 \x01(\x0b2\x12.viam.app.v1.RobotR\x05robot"$\n\x12DeleteRobotRequest\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id"\x15\n\x13DeleteRobotResponse")\n\x17GetRobotMetadataRequest\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id"G\n\x18GetRobotMetadataResponse\x12+\n\x04data\x18\x01 \x01(\x0b2\x17.google.protobuf.StructR\x04data"Y\n\x1aUpdateRobotMetadataRequest\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12+\n\x04data\x18\x02 \x01(\x0b2\x17.google.protobuf.StructR\x04data"\x1d\n\x1bUpdateRobotMetadataResponse"0\n\x15MarkPartAsMainRequest\x12\x17\n\x07part_id\x18\x01 \x01(\tR\x06partId"\x18\n\x16MarkPartAsMainResponse"4\n\x19MarkPartForRestartRequest\x12\x17\n\x07part_id\x18\x01 \x01(\tR\x06partId"\x1c\n\x1aMarkPartForRestartResponse"7\n\x1cCreateRobotPartSecretRequest\x12\x17\n\x07part_id\x18\x01 \x01(\tR\x06partId"K\n\x1dCreateRobotPartSecretResponse\x12*\n\x04part\x18\x01 \x01(\x0b2\x16.viam.app.v1.RobotPartR\x04part"T\n\x1cDeleteRobotPartSecretRequest\x12\x17\n\x07part_id\x18\x01 \x01(\tR\x06partId\x12\x1b\n\tsecret_id\x18\x02 \x01(\tR\x08secretId"\x1f\n\x1dDeleteRobotPartSecretResponse"\x9e\x02\n\rAuthorization\x12-\n\x12authorization_type\x18\x01 \x01(\tR\x11authorizationType\x12)\n\x10authorization_id\x18\x02 \x01(\tR\x0fauthorizationId\x12#\n\rresource_type\x18\x03 \x01(\tR\x0cresourceType\x12\x1f\n\x0bresource_id\x18\x04 \x01(\tR\nresourceId\x12\x1f\n\x0bidentity_id\x18\x05 \x01(\tR\nidentityId\x12\'\n\x0forganization_id\x18\x06 \x01(\tR\x0eorganizationId\x12#\n\ridentity_type\x18\x07 \x01(\tR\x0cidentityType"R\n\x0eAddRoleRequest\x12@\n\rauthorization\x18\x01 \x01(\x0b2\x1a.viam.app.v1.AuthorizationR\rauthorization"\x11\n\x0fAddRoleResponse"U\n\x11RemoveRoleRequest\x12@\n\rauthorization\x18\x01 \x01(\x0b2\x1a.viam.app.v1.AuthorizationR\rauthorization"\x14\n\x12RemoveRoleResponse"\xa5\x01\n\x11ChangeRoleRequest\x12G\n\x11old_authorization\x18\x01 \x01(\x0b2\x1a.viam.app.v1.AuthorizationR\x10oldAuthorization\x12G\n\x11new_authorization\x18\x02 \x01(\x0b2\x1a.viam.app.v1.AuthorizationR\x10newAuthorization"\x14\n\x12ChangeRoleResponse"g\n\x19ListAuthorizationsRequest\x12\'\n\x0forganization_id\x18\x01 \x01(\tR\x0eorganizationId\x12!\n\x0cresource_ids\x18\x02 \x03(\tR\x0bresourceIds"`\n\x1aListAuthorizationsResponse\x12B\n\x0eauthorizations\x18\x01 \x03(\x0b2\x1a.viam.app.v1.AuthorizationR\x0eauthorizations"_\n\x17CheckPermissionsRequest\x12D\n\x0bpermissions\x18\x01 \x03(\x0b2".viam.app.v1.AuthorizedPermissionsR\x0bpermissions"\x7f\n\x15AuthorizedPermissions\x12#\n\rresource_type\x18\x01 \x01(\tR\x0cresourceType\x12\x1f\n\x0bresource_id\x18\x02 \x01(\tR\nresourceId\x12 \n\x0bpermissions\x18\x03 \x03(\tR\x0bpermissions"u\n\x18CheckPermissionsResponse\x12Y\n\x16authorized_permissions\x18\x01 \x03(\x0b2".viam.app.v1.AuthorizedPermissionsR\x15authorizedPermissions"\xc8\x02\n\rModuleVersion\x12\x18\n\x07version\x18\x01 \x01(\tR\x07version\x12*\n\x05files\x18\x02 \x03(\x0b2\x14.viam.app.v1.UploadsR\x05files\x12*\n\x06models\x18\x03 \x03(\x0b2\x12.viam.app.v1.ModelR\x06models\x12\x1e\n\nentrypoint\x18\x04 \x01(\tR\nentrypoint\x12 \n\tfirst_run\x18\x05 \x01(\tH\x00R\x08firstRun\x88\x01\x01\x126\n\x14markdown_description\x18\x06 \x01(\tH\x01R\x13markdownDescription\x88\x01\x01\x12$\n\x04apps\x18\x07 \x03(\x0b2\x10.viam.app.v1.AppR\x04appsB\x0c\n\n_first_runB\x17\n\x15_markdown_description"\xdb\x03\n\x0eModuleMetadata\x12*\n\x06models\x18\x01 \x03(\x0b2\x12.viam.app.v1.ModelR\x06models\x126\n\x08versions\x18\x02 \x03(\x0b2\x1a.viam.app.v1.ModuleVersionR\x08versions\x12\x1e\n\nentrypoint\x18\x03 \x01(\tR\nentrypoint\x12 \n\tfirst_run\x18\x04 \x01(\tH\x00R\x08firstRun\x88\x01\x01\x126\n\x14markdown_description\x18\x05 \x01(\tH\x01R\x13markdownDescription\x88\x01\x01\x12$\n\x04apps\x18\x06 \x03(\x0b2\x10.viam.app.v1.AppR\x04apps\x12C\n\x0bsource_type\x18\x07 \x01(\x0e2\x1d.viam.app.v1.ModuleSourceTypeH\x02R\nsourceType\x88\x01\x01\x12<\n\x08language\x18\x08 \x01(\x0e2\x1b.viam.app.v1.ModuleLanguageH\x03R\x08language\x88\x01\x01B\x0c\n\n_first_runB\x17\n\x15_markdown_descriptionB\x0e\n\x0c_source_typeB\x0b\n\t_language"\xc0\x01\n\x0fMLModelMetadata\x12\x1a\n\x08versions\x18\x01 \x03(\tR\x08versions\x12@\n\nmodel_type\x18\x02 \x01(\x0e2!.viam.app.mltraining.v1.ModelTypeR\tmodelType\x12O\n\x0fmodel_framework\x18\x03 \x01(\x0e2&.viam.app.mltraining.v1.ModelFrameworkR\x0emodelFramework"h\n\x11MLTrainingVersion\x12\x18\n\x07version\x18\x01 \x01(\tR\x07version\x129\n\ncreated_on\x18\x02 \x01(\x0b2\x1a.google.protobuf.TimestampR\tcreatedOn"\xff\x01\n\x12MLTrainingMetadata\x12:\n\x08versions\x18\x05 \x03(\x0b2\x1e.viam.app.v1.MLTrainingVersionR\x08versions\x12@\n\nmodel_type\x18\x02 \x01(\x0e2!.viam.app.mltraining.v1.ModelTypeR\tmodelType\x12O\n\x0fmodel_framework\x18\x03 \x01(\x0e2&.viam.app.mltraining.v1.ModelFrameworkR\x0emodelFramework\x12\x14\n\x05draft\x18\x04 \x01(\x08R\x05draftJ\x04\x08\x01\x10\x02"\x8c\x07\n\x0cRegistryItem\x12\x17\n\x07item_id\x18\x01 \x01(\tR\x06itemId\x12\'\n\x0forganization_id\x18\x02 \x01(\tR\x0eorganizationId\x12)\n\x10public_namespace\x18\x03 \x01(\tR\x0fpublicNamespace\x12\x12\n\x04name\x18\x04 \x01(\tR\x04name\x125\n\x04type\x18\x05 \x01(\x0e2!.viam.app.packages.v1.PackageTypeR\x04type\x127\n\nvisibility\x18\x06 \x01(\x0e2\x17.viam.app.v1.VisibilityR\nvisibility\x12\x10\n\x03url\x18\x07 \x01(\tR\x03url\x12 \n\x0bdescription\x18\x08 \x01(\tR\x0bdescription\x12*\n\x11total_robot_usage\x18\t \x01(\x03R\x0ftotalRobotUsage\x12;\n\x1atotal_external_robot_usage\x18\r \x01(\x03R\x17totalExternalRobotUsage\x128\n\x18total_organization_usage\x18\n \x01(\x03R\x16totalOrganizationUsage\x12I\n!total_external_organization_usage\x18\x0e \x01(\x03R\x1etotalExternalOrganizationUsage\x12F\n\x0fmodule_metadata\x18\x0b \x01(\x0b2\x1b.viam.app.v1.ModuleMetadataH\x00R\x0emoduleMetadata\x12J\n\x11ml_model_metadata\x18\x0c \x01(\x0b2\x1c.viam.app.v1.MLModelMetadataH\x00R\x0fmlModelMetadata\x12S\n\x14ml_training_metadata\x18\x12 \x01(\x0b2\x1f.viam.app.v1.MLTrainingMetadataH\x00R\x12mlTrainingMetadata\x129\n\ncreated_at\x18\x0f \x01(\x0b2\x1a.google.protobuf.TimestampR\tcreatedAt\x129\n\nupdated_at\x18\x10 \x01(\x0b2\x1a.google.protobuf.TimestampR\tupdatedAtB\n\n\x08metadata"\x9f\x01\n\x16GetRegistryItemRequest\x12\x17\n\x07item_id\x18\x01 \x01(\tR\x06itemId\x12I\n\x1einclude_markdown_documentation\x18\x02 \x01(\x08H\x00R\x1cincludeMarkdownDocumentation\x88\x01\x01B!\n\x1f_include_markdown_documentation"H\n\x17GetRegistryItemResponse\x12-\n\x04item\x18\x01 \x01(\x0b2\x19.viam.app.v1.RegistryItemR\x04item"\x8f\x01\n\x19CreateRegistryItemRequest\x12\'\n\x0forganization_id\x18\x01 \x01(\tR\x0eorganizationId\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x125\n\x04type\x18\x03 \x01(\x0e2!.viam.app.packages.v1.PackageTypeR\x04type"\x1c\n\x1aCreateRegistryItemResponse"\xe4\x04\n\x19UpdateRegistryItemRequest\x12\x17\n\x07item_id\x18\x01 \x01(\tR\x06itemId\x125\n\x04type\x18\x02 \x01(\x0e2!.viam.app.packages.v1.PackageTypeR\x04type\x12 \n\x0bdescription\x18\x03 \x01(\tR\x0bdescription\x127\n\nvisibility\x18\x04 \x01(\x0e2\x17.viam.app.v1.VisibilityR\nvisibility\x12\x15\n\x03url\x18\x05 \x01(\tH\x01R\x03url\x88\x01\x01\x12Y\n\x16update_module_metadata\x18\x06 \x01(\x0b2!.viam.app.v1.UpdateModuleMetadataH\x00R\x14updateModuleMetadata\x12]\n\x18update_ml_model_metadata\x18\x07 \x01(\x0b2".viam.app.v1.UpdateMLModelMetadataH\x00R\x15updateMlModelMetadata\x12f\n\x1bupdate_ml_training_metadata\x18\x08 \x01(\x0b2%.viam.app.v1.UpdateMLTrainingMetadataH\x00R\x18updateMlTrainingMetadata\x126\n\x14markdown_description\x18\t \x01(\tH\x02R\x13markdownDescription\x88\x01\x01B\n\n\x08metadataB\x06\n\x04_urlB\x17\n\x15_markdown_description"\x1c\n\x1aUpdateRegistryItemResponse"\xc8\x05\n\x18ListRegistryItemsRequest\x12,\n\x0forganization_id\x18\x01 \x01(\tH\x00R\x0eorganizationId\x88\x01\x01\x127\n\x05types\x18\x02 \x03(\x0e2!.viam.app.packages.v1.PackageTypeR\x05types\x12;\n\x0cvisibilities\x18\x03 \x03(\x0e2\x17.viam.app.v1.VisibilityR\x0cvisibilities\x12\x1c\n\tplatforms\x18\x04 \x03(\tR\tplatforms\x12;\n\x08statuses\x18\x05 \x03(\x0e2\x1f.viam.app.v1.RegistryItemStatusR\x08statuses\x12$\n\x0bsearch_term\x18\x06 \x01(\tH\x01R\nsearchTerm\x88\x01\x01\x12"\n\npage_token\x18\x07 \x01(\tH\x02R\tpageToken\x88\x01\x01\x12+\n\x11public_namespaces\x18\x08 \x03(\tR\x10publicNamespaces\x12I\n\x1einclude_markdown_documentation\x18\t \x01(\x08H\x03R\x1cincludeMarkdownDocumentation\x88\x01\x01\x12M\n\x13module_source_types\x18\n \x03(\x0e2\x1d.viam.app.v1.ModuleSourceTypeR\x11moduleSourceTypes\x12F\n\x10module_languages\x18\x0b \x03(\x0e2\x1b.viam.app.v1.ModuleLanguageR\x0fmoduleLanguagesB\x12\n\x10_organization_idB\x0e\n\x0c_search_termB\r\n\x0b_page_tokenB!\n\x1f_include_markdown_documentation"L\n\x19ListRegistryItemsResponse\x12/\n\x05items\x18\x01 \x03(\x0b2\x19.viam.app.v1.RegistryItemR\x05items"4\n\x19DeleteRegistryItemRequest\x12\x17\n\x07item_id\x18\x01 \x01(\tR\x06itemId"\x1c\n\x1aDeleteRegistryItemResponse"O\n\x19RenameRegistryItemRequest\x12\x17\n\x07item_id\x18\x01 \x01(\tR\x06itemId\x12\x19\n\x08new_name\x18\x02 \x01(\tR\x07newName"K\n\x1aRenameRegistryItemResponse\x12-\n\x04item\x18\x01 \x01(\x0b2\x19.viam.app.v1.RegistryItemR\x04item"h\n\x1bTransferRegistryItemRequest\x12\x17\n\x07item_id\x18\x01 \x01(\tR\x06itemId\x120\n\x14new_public_namespace\x18\x02 \x01(\tR\x12newPublicNamespace"\x1e\n\x1cTransferRegistryItemResponse"R\n\x13CreateModuleRequest\x12\'\n\x0forganization_id\x18\x01 \x01(\tR\x0eorganizationId\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name"E\n\x14CreateModuleResponse\x12\x1b\n\tmodule_id\x18\x01 \x01(\tR\x08moduleId\x12\x10\n\x03url\x18\x02 \x01(\tR\x03url"\x92\x03\n\x13UpdateModuleRequest\x12\x1b\n\tmodule_id\x18\x01 \x01(\tR\x08moduleId\x127\n\nvisibility\x18\x02 \x01(\x0e2\x17.viam.app.v1.VisibilityR\nvisibility\x12\x10\n\x03url\x18\x03 \x01(\tR\x03url\x12 \n\x0bdescription\x18\x04 \x01(\tR\x0bdescription\x12*\n\x06models\x18\x05 \x03(\x0b2\x12.viam.app.v1.ModelR\x06models\x12\x1e\n\nentrypoint\x18\x06 \x01(\tR\nentrypoint\x12 \n\tfirst_run\x18\x07 \x01(\tH\x00R\x08firstRun\x88\x01\x01\x12$\n\x04apps\x18\x08 \x03(\x0b2\x10.viam.app.v1.AppR\x04apps\x126\n\x14markdown_description\x18\t \x01(\tH\x01R\x13markdownDescription\x88\x01\x01B\x0c\n\n_first_runB\x17\n\x15_markdown_description"\xe8\x01\n\x03App\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12\x12\n\x04type\x18\x02 \x01(\tR\x04type\x12\x1e\n\nentrypoint\x18\x03 \x01(\tR\nentrypoint\x12!\n\x0cfragment_ids\x18\x04 \x03(\tR\x0bfragmentIds\x12 \n\tlogo_path\x18\x05 \x01(\tH\x00R\x08logoPath\x88\x01\x01\x12F\n\x0ecustomizations\x18\x06 \x01(\x0b2\x1e.viam.app.v1.AppCustomizationsR\x0ecustomizationsB\x0c\n\n_logo_path"(\n\x14UpdateModuleResponse\x12\x10\n\x03url\x18\x01 \x01(\tR\x03url"\xa8\x02\n\x14UpdateModuleMetadata\x12*\n\x06models\x18\x01 \x03(\x0b2\x12.viam.app.v1.ModelR\x06models\x12\x1e\n\nentrypoint\x18\x02 \x01(\tR\nentrypoint\x12$\n\x04apps\x18\x03 \x03(\x0b2\x10.viam.app.v1.AppR\x04apps\x12C\n\x0bsource_type\x18\x04 \x01(\x0e2\x1d.viam.app.v1.ModuleSourceTypeH\x00R\nsourceType\x88\x01\x01\x12<\n\x08language\x18\x05 \x01(\x0e2\x1b.viam.app.v1.ModuleLanguageH\x01R\x08language\x88\x01\x01B\x0e\n\x0c_source_typeB\x0b\n\t_language"\xaa\x01\n\x15UpdateMLModelMetadata\x12@\n\nmodel_type\x18\x01 \x01(\x0e2!.viam.app.mltraining.v1.ModelTypeR\tmodelType\x12O\n\x0fmodel_framework\x18\x02 \x01(\x0e2&.viam.app.mltraining.v1.ModelFrameworkR\x0emodelFramework"\xc3\x01\n\x18UpdateMLTrainingMetadata\x12@\n\nmodel_type\x18\x01 \x01(\x0e2!.viam.app.mltraining.v1.ModelTypeR\tmodelType\x12O\n\x0fmodel_framework\x18\x02 \x01(\x0e2&.viam.app.mltraining.v1.ModelFrameworkR\x0emodelFramework\x12\x14\n\x05draft\x18\x03 \x01(\x08R\x05draft"\xec\x01\n\x05Model\x12\x10\n\x03api\x18\x01 \x01(\tR\x03api\x12\x14\n\x05model\x18\x02 \x01(\tR\x05model\x12:\n\x16markdown_documentation\x18\x03 \x01(\tH\x00R\x15markdownDocumentation\x88\x01\x01\x12%\n\x0bdescription\x18\x04 \x01(\tH\x01R\x0bdescription\x88\x01\x01\x12-\n\x12supported_hardware\x18\x05 \x03(\tR\x11supportedHardwareB\x19\n\x17_markdown_documentationB\x0e\n\x0c_description"\x88\x01\n\x0eModuleFileInfo\x12\x1b\n\tmodule_id\x18\x01 \x01(\tR\x08moduleId\x12\x18\n\x07version\x18\x02 \x01(\tR\x07version\x12\x1a\n\x08platform\x18\x03 \x01(\tR\x08platform\x12#\n\rplatform_tags\x18\x05 \x03(\tR\x0cplatformTags"\x87\x01\n\x17UploadModuleFileRequest\x12G\n\x10module_file_info\x18\x01 \x01(\x0b2\x1b.viam.app.v1.ModuleFileInfoH\x00R\x0emoduleFileInfo\x12\x14\n\x04file\x18\x02 \x01(\x0cH\x00R\x04fileB\r\n\x0bmodule_file",\n\x18UploadModuleFileResponse\x12\x10\n\x03url\x18\x01 \x01(\tR\x03url"\x9d\x01\n\x10GetModuleRequest\x12\x1b\n\tmodule_id\x18\x01 \x01(\tR\x08moduleId\x12I\n\x1einclude_markdown_documentation\x18\x02 \x01(\x08H\x00R\x1cincludeMarkdownDocumentation\x88\x01\x01B!\n\x1f_include_markdown_documentation"@\n\x11GetModuleResponse\x12+\n\x06module\x18\x01 \x01(\x0b2\x13.viam.app.v1.ModuleR\x06module"\x8c\x05\n\x06Module\x12\x1b\n\tmodule_id\x18\x01 \x01(\tR\x08moduleId\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x127\n\nvisibility\x18\x03 \x01(\x0e2\x17.viam.app.v1.VisibilityR\nvisibility\x127\n\x08versions\x18\x04 \x03(\x0b2\x1b.viam.app.v1.VersionHistoryR\x08versions\x12\x10\n\x03url\x18\x05 \x01(\tR\x03url\x12 \n\x0bdescription\x18\x06 \x01(\tR\x0bdescription\x12*\n\x06models\x18\x07 \x03(\x0b2\x12.viam.app.v1.ModelR\x06models\x12*\n\x11total_robot_usage\x18\x08 \x01(\x03R\x0ftotalRobotUsage\x128\n\x18total_organization_usage\x18\t \x01(\x03R\x16totalOrganizationUsage\x12\'\n\x0forganization_id\x18\n \x01(\tR\x0eorganizationId\x12\x1e\n\nentrypoint\x18\x0b \x01(\tR\nentrypoint\x12)\n\x10public_namespace\x18\x0c \x01(\tR\x0fpublicNamespace\x12 \n\tfirst_run\x18\r \x01(\tH\x00R\x08firstRun\x88\x01\x01\x126\n\x14markdown_description\x18\x0e \x01(\tH\x01R\x13markdownDescription\x88\x01\x01\x12$\n\x04apps\x18\x0f \x03(\x0b2\x10.viam.app.v1.AppR\x04appsB\x0c\n\n_first_runB\x17\n\x15_markdown_description"\xc9\x02\n\x0eVersionHistory\x12\x18\n\x07version\x18\x01 \x01(\tR\x07version\x12*\n\x05files\x18\x02 \x03(\x0b2\x14.viam.app.v1.UploadsR\x05files\x12*\n\x06models\x18\x03 \x03(\x0b2\x12.viam.app.v1.ModelR\x06models\x12\x1e\n\nentrypoint\x18\x04 \x01(\tR\nentrypoint\x12 \n\tfirst_run\x18\x05 \x01(\tH\x00R\x08firstRun\x88\x01\x01\x126\n\x14markdown_description\x18\x06 \x01(\tH\x01R\x13markdownDescription\x88\x01\x01\x12$\n\x04apps\x18\x07 \x03(\x0b2\x10.viam.app.v1.AppR\x04appsB\x0c\n\n_first_runB\x17\n\x15_markdown_description"b\n\x07Uploads\x12\x1a\n\x08platform\x18\x01 \x01(\tR\x08platform\x12;\n\x0buploaded_at\x18\x02 \x01(\x0b2\x1a.google.protobuf.TimestampR\nuploadedAt"\xc4\x01\n\x12ListModulesRequest\x12,\n\x0forganization_id\x18\x01 \x01(\tH\x00R\x0eorganizationId\x88\x01\x01\x12I\n\x1einclude_markdown_documentation\x18\x02 \x01(\x08H\x01R\x1cincludeMarkdownDocumentation\x88\x01\x01B\x12\n\x10_organization_idB!\n\x1f_include_markdown_documentation"D\n\x13ListModulesResponse\x12-\n\x07modules\x18\x01 \x03(\x0b2\x13.viam.app.v1.ModuleR\x07modules"/\n\x17GetUserIDByEmailRequest\x12\x14\n\x05email\x18\x01 \x01(\tR\x05email"3\n\x18GetUserIDByEmailResponse\x12\x17\n\x07user_id\x18\x01 \x01(\tR\x06userId"9\n\x1eListOrganizationsByUserRequest\x12\x17\n\x07user_id\x18\x01 \x01(\tR\x06userId"\xe6\x01\n\nOrgDetails\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\x12\x19\n\x08org_name\x18\x02 \x01(\tR\x07orgName\x12\x1c\n\x07org_cid\x18\x03 \x01(\tH\x00R\x06orgCid\x88\x01\x01\x12.\n\x10public_namespace\x18\x04 \x01(\tH\x01R\x0fpublicNamespace\x88\x01\x01\x12&\n\x0cbilling_tier\x18\x05 \x01(\tH\x02R\x0bbillingTier\x88\x01\x01B\n\n\x08_org_cidB\x13\n\x11_public_namespaceB\x0f\n\r_billing_tier"N\n\x1fListOrganizationsByUserResponse\x12+\n\x04orgs\x18\x01 \x03(\x0b2\x17.viam.app.v1.OrgDetailsR\x04orgs"\xd4\x01\n\x1aSearchOrganizationsRequest\x12\x1a\n\x06org_id\x18\x01 \x01(\tH\x00R\x05orgId\x88\x01\x01\x12\x1e\n\x08org_name\x18\x02 \x01(\tH\x01R\x07orgName\x88\x01\x01\x12\x15\n\x03cid\x18\x03 \x01(\tH\x02R\x03cid\x88\x01\x01\x12.\n\x10public_namespace\x18\x04 \x01(\tH\x03R\x0fpublicNamespace\x88\x01\x01B\t\n\x07_org_idB\x0b\n\t_org_nameB\x06\n\x04_cidB\x13\n\x11_public_namespace"\\\n\x1bSearchOrganizationsResponse\x12=\n\rorganizations\x18\x01 \x03(\x0b2\x17.viam.app.v1.OrgDetailsR\rorganizations"j\n\x10CreateKeyRequest\x12B\n\x0eauthorizations\x18\x01 \x03(\x0b2\x1a.viam.app.v1.AuthorizationR\x0eauthorizations\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name"5\n\x11CreateKeyResponse\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x0e\n\x02id\x18\x02 \x01(\tR\x02id""\n\x10DeleteKeyRequest\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id"\x13\n\x11DeleteKeyResponse"6\n\x10RenameKeyRequest\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name"7\n\x11RenameKeyResponse\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name"\xcd\x01\n\x14AuthorizationDetails\x12-\n\x12authorization_type\x18\x01 \x01(\tR\x11authorizationType\x12)\n\x10authorization_id\x18\x02 \x01(\tR\x0fauthorizationId\x12#\n\rresource_type\x18\x03 \x01(\tR\x0cresourceType\x12\x1f\n\x0bresource_id\x18\x04 \x01(\tR\nresourceId\x12\x15\n\x06org_id\x18\x05 \x01(\tR\x05orgId"\x93\x01\n\x18APIKeyWithAuthorizations\x12,\n\x07api_key\x18\x01 \x01(\x0b2\x13.viam.app.v1.APIKeyR\x06apiKey\x12I\n\x0eauthorizations\x18\x02 \x03(\x0b2!.viam.app.v1.AuthorizationDetailsR\x0eauthorizations"(\n\x0fListKeysRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId"T\n\x10ListKeysResponse\x12@\n\x08api_keys\x18\x01 \x03(\x0b2%.viam.app.v1.APIKeyWithAuthorizationsR\x07apiKeys""\n\x10RotateKeyRequest\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id"5\n\x11RotateKeyResponse\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x10\n\x03key\x18\x02 \x01(\tR\x03key"?\n-CreateKeyFromExistingKeyAuthorizationsRequest\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id"R\n.CreateKeyFromExistingKeyAuthorizationsResponse\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x10\n\x03key\x18\x02 \x01(\tR\x03key"U\n\x14GetAppContentRequest\x12)\n\x10public_namespace\x18\x01 \x01(\tR\x0fpublicNamespace\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name"\x85\x01\n\x15GetAppContentResponse\x12\x1b\n\tblob_path\x18\x01 \x01(\tR\x08blobPath\x12\x1e\n\nentrypoint\x18\x02 \x01(\tR\nentrypoint\x12/\n\x08app_type\x18\x03 \x01(\x0e2\x14.viam.app.v1.AppTypeR\x07appType"G\n\x1aOrganizationSetLogoRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\x12\x12\n\x04logo\x18\x02 \x01(\x0cR\x04logo"\x1d\n\x1bOrganizationSetLogoResponse"3\n\x1aOrganizationGetLogoRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId"/\n\x1bOrganizationGetLogoResponse\x12\x10\n\x03url\x18\x01 \x01(\tR\x03url"1\n\x18EnableAuthServiceRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId"\x1b\n\x19EnableAuthServiceResponse"2\n\x19DisableAuthServiceRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId"\x1c\n\x1aDisableAuthServiceResponse"\x8c\x01\n\x15CreateOAuthAppRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\x12\x1f\n\x0bclient_name\x18\x02 \x01(\tR\nclientName\x12;\n\x0coauth_config\x18\x03 \x01(\x0b2\x18.viam.app.v1.OAuthConfigR\x0boauthConfig"Z\n\x16CreateOAuthAppResponse\x12\x1b\n\tclient_id\x18\x01 \x01(\tR\x08clientId\x12#\n\rclient_secret\x18\x02 \x01(\tR\x0cclientSecret"I\n\x13ReadOAuthAppRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\x12\x1b\n\tclient_id\x18\x02 \x01(\tR\x08clientId"\x99\x01\n\x14ReadOAuthAppResponse\x12\x1f\n\x0bclient_name\x18\x01 \x01(\tR\nclientName\x12#\n\rclient_secret\x18\x02 \x01(\tR\x0cclientSecret\x12;\n\x0coauth_config\x18\x03 \x01(\x0b2\x18.viam.app.v1.OAuthConfigR\x0boauthConfig"\xa9\x01\n\x15UpdateOAuthAppRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\x12\x1b\n\tclient_id\x18\x02 \x01(\tR\x08clientId\x12\x1f\n\x0bclient_name\x18\x03 \x01(\tR\nclientName\x12;\n\x0coauth_config\x18\x04 \x01(\x0b2\x18.viam.app.v1.OAuthConfigR\x0boauthConfig"\x18\n\x16UpdateOAuthAppResponse"K\n\x15DeleteOAuthAppRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId\x12\x1b\n\tclient_id\x18\x02 \x01(\tR\x08clientId"\x18\n\x16DeleteOAuthAppResponse"-\n\x14ListOAuthAppsRequest\x12\x15\n\x06org_id\x18\x01 \x01(\tR\x05orgId"6\n\x15ListOAuthAppsResponse\x12\x1d\n\nclient_ids\x18\x01 \x03(\tR\tclientIds"\xf6\x02\n\x0bOAuthConfig\x12V\n\x15client_authentication\x18\x01 \x01(\x0e2!.viam.app.v1.ClientAuthenticationR\x14clientAuthentication\x12%\n\x04pkce\x18\x02 \x01(\x0e2\x11.viam.app.v1.PKCER\x04pkce\x12A\n\x0eurl_validation\x18\x03 \x01(\x0e2\x1a.viam.app.v1.URLValidationR\rurlValidation\x12\x1f\n\x0borigin_uris\x18\x04 \x03(\tR\noriginUris\x12#\n\rredirect_uris\x18\x05 \x03(\tR\x0credirectUris\x12\x1d\n\nlogout_uri\x18\x06 \x01(\tR\tlogoutUri\x12@\n\x0eenabled_grants\x18\x07 \x03(\x0e2\x19.viam.app.v1.EnabledGrantR\renabledGrants"V\n\x15GetAppBrandingRequest\x12)\n\x10public_namespace\x18\x01 \x01(\tR\x0fpublicNamespace\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name"\x8a\x01\n\rTextOverrides\x12>\n\x06fields\x18\x01 \x03(\x0b2&.viam.app.v1.TextOverrides.FieldsEntryR\x06fields\x1a9\n\x0bFieldsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x028\x01"\xbc\x02\n\x16GetAppBrandingResponse\x12 \n\tlogo_path\x18\x01 \x01(\tH\x00R\x08logoPath\x88\x01\x01\x12l\n\x13text_customizations\x18\x02 \x03(\x0b2;.viam.app.v1.GetAppBrandingResponse.TextCustomizationsEntryR\x12textCustomizations\x12!\n\x0cfragment_ids\x18\x03 \x03(\tR\x0bfragmentIds\x1aa\n\x17TextCustomizationsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x120\n\x05value\x18\x02 \x01(\x0b2\x1a.viam.app.v1.TextOverridesR\x05value:\x028\x01B\x0c\n\n_logo_path"d\n\x11AppCustomizations\x12O\n\x0emachine_picker\x18\x01 \x01(\x0b2(.viam.app.v1.MachinePickerCustomizationsR\rmachinePicker"|\n\x1bMachinePickerCustomizations\x12\x1d\n\x07heading\x18\x01 \x01(\tH\x00R\x07heading\x88\x01\x01\x12#\n\nsubheading\x18\x02 \x01(\tH\x01R\nsubheading\x88\x01\x01B\n\n\x08_headingB\r\n\x0b_subheading*\x7f\n\x0bOnlineState\x12\x1c\n\x18ONLINE_STATE_UNSPECIFIED\x10\x00\x12\x17\n\x13ONLINE_STATE_ONLINE\x10\x01\x12\x18\n\x14ONLINE_STATE_OFFLINE\x10\x02\x12\x1f\n\x1bONLINE_STATE_AWAITING_SETUP\x10\x03*\xd1\x01\n\x12AuthenticationType\x12#\n\x1fAUTHENTICATION_TYPE_UNSPECIFIED\x10\x00\x12!\n\x1dAUTHENTICATION_TYPE_WEB_OAUTH\x10\x01\x12\x1f\n\x1bAUTHENTICATION_TYPE_API_KEY\x10\x02\x12)\n%AUTHENTICATION_TYPE_ROBOT_PART_SECRET\x10\x03\x12\'\n#AUTHENTICATION_TYPE_LOCATION_SECRET\x10\x04*\xa3\x01\n\x12FragmentVisibility\x12#\n\x1fFRAGMENT_VISIBILITY_UNSPECIFIED\x10\x00\x12\x1f\n\x1bFRAGMENT_VISIBILITY_PRIVATE\x10\x01\x12\x1e\n\x1aFRAGMENT_VISIBILITY_PUBLIC\x10\x02\x12\'\n#FRAGMENT_VISIBILITY_PUBLIC_UNLISTED\x10\x03*\xdd\x01\n\x11FragmentErrorType\x12#\n\x1fFRAGMENT_ERROR_TYPE_UNSPECIFIED\x10\x00\x12!\n\x1dFRAGMENT_ERROR_TYPE_NO_ACCESS\x10\x01\x12.\n*FRAGMENT_ERROR_TYPE_NESTING_LIMIT_EXCEEDED\x10\x02\x12(\n$FRAGMENT_ERROR_TYPE_CHILD_ID_INVALID\x10\x03\x12&\n"FRAGMENT_ERROR_TYPE_CYCLE_DETECTED\x10\x04*{\n\x10ModuleSourceType\x12"\n\x1eMODULE_SOURCE_TYPE_UNSPECIFIED\x10\x00\x12\x1f\n\x1bMODULE_SOURCE_TYPE_EXTERNAL\x10\x01\x12"\n\x1eMODULE_SOURCE_TYPE_VIAM_HOSTED\x10\x02*\x82\x01\n\x0eModuleLanguage\x12\x1f\n\x1bMODULE_LANGUAGE_UNSPECIFIED\x10\x00\x12\x1a\n\x16MODULE_LANGUAGE_GOLANG\x10\x01\x12\x1a\n\x16MODULE_LANGUAGE_PYTHON\x10\x02\x12\x17\n\x13MODULE_LANGUAGE_CPP\x10\x03*\x87\x01\n\x12RegistryItemStatus\x12$\n REGISTRY_ITEM_STATUS_UNSPECIFIED\x10\x00\x12"\n\x1eREGISTRY_ITEM_STATUS_PUBLISHED\x10\x01\x12\'\n#REGISTRY_ITEM_STATUS_IN_DEVELOPMENT\x10\x02*w\n\nVisibility\x12\x1a\n\x16VISIBILITY_UNSPECIFIED\x10\x00\x12\x16\n\x12VISIBILITY_PRIVATE\x10\x01\x12\x15\n\x11VISIBILITY_PUBLIC\x10\x02\x12\x1e\n\x1aVISIBILITY_PUBLIC_UNLISTED\x10\x03*\\\n\x07AppType\x12\x18\n\x14APP_TYPE_UNSPECIFIED\x10\x00\x12\x1b\n\x17APP_TYPE_SINGLE_MACHINE\x10\x01\x12\x1a\n\x16APP_TYPE_MULTI_MACHINE\x10\x02*\xc1\x01\n\x14ClientAuthentication\x12%\n!CLIENT_AUTHENTICATION_UNSPECIFIED\x10\x00\x12"\n\x1eCLIENT_AUTHENTICATION_REQUIRED\x10\x01\x12&\n"CLIENT_AUTHENTICATION_NOT_REQUIRED\x10\x02\x126\n2CLIENT_AUTHENTICATION_NOT_REQUIRED_WHEN_USING_PKCE\x10\x03*~\n\x04PKCE\x12\x14\n\x10PKCE_UNSPECIFIED\x10\x00\x12\x11\n\rPKCE_REQUIRED\x10\x01\x12\x15\n\x11PKCE_NOT_REQUIRED\x10\x02\x126\n2PKCE_NOT_REQUIRED_WHEN_USING_CLIENT_AUTHENTICATION\x10\x03*s\n\rURLValidation\x12\x1e\n\x1aURL_VALIDATION_UNSPECIFIED\x10\x00\x12\x1e\n\x1aURL_VALIDATION_EXACT_MATCH\x10\x01\x12"\n\x1eURL_VALIDATION_ALLOW_WILDCARDS\x10\x02*\xcb\x01\n\x0cEnabledGrant\x12\x1d\n\x19ENABLED_GRANT_UNSPECIFIED\x10\x00\x12$\n ENABLED_GRANT_AUTHORIZATION_CODE\x10\x01\x12\x1a\n\x16ENABLED_GRANT_IMPLICIT\x10\x02\x12\x1a\n\x16ENABLED_GRANT_PASSWORD\x10\x03\x12\x1f\n\x1bENABLED_GRANT_REFRESH_TOKEN\x10\x04\x12\x1d\n\x19ENABLED_GRANT_DEVICE_CODE\x10\x052\xfaU\n\nAppService\x12_\n\x10GetUserIDByEmail\x12$.viam.app.v1.GetUserIDByEmailRequest\x1a%.viam.app.v1.GetUserIDByEmailResponse\x12e\n\x12CreateOrganization\x12&.viam.app.v1.CreateOrganizationRequest\x1a\'.viam.app.v1.CreateOrganizationResponse\x12b\n\x11ListOrganizations\x12%.viam.app.v1.ListOrganizationsRequest\x1a&.viam.app.v1.ListOrganizationsResponse\x12\x9b\x01\n$GetOrganizationsWithAccessToLocation\x128.viam.app.v1.GetOrganizationsWithAccessToLocationRequest\x1a9.viam.app.v1.GetOrganizationsWithAccessToLocationResponse\x12t\n\x17ListOrganizationsByUser\x12+.viam.app.v1.ListOrganizationsByUserRequest\x1a,.viam.app.v1.ListOrganizationsByUserResponse\x12h\n\x13SearchOrganizations\x12\'.viam.app.v1.SearchOrganizationsRequest\x1a(.viam.app.v1.SearchOrganizationsResponse\x12\\\n\x0fGetOrganization\x12#.viam.app.v1.GetOrganizationRequest\x1a$.viam.app.v1.GetOrganizationResponse\x12\x9b\x01\n$GetOrganizationNamespaceAvailability\x128.viam.app.v1.GetOrganizationNamespaceAvailabilityRequest\x1a9.viam.app.v1.GetOrganizationNamespaceAvailabilityResponse\x12e\n\x12UpdateOrganization\x12&.viam.app.v1.UpdateOrganizationRequest\x1a\'.viam.app.v1.UpdateOrganizationResponse\x12\x80\x01\n\x1bUpdateOrganizationNamespace\x12/.viam.app.v1.UpdateOrganizationNamespaceRequest\x1a0.viam.app.v1.UpdateOrganizationNamespaceResponse\x12e\n\x12DeleteOrganization\x12&.viam.app.v1.DeleteOrganizationRequest\x1a\'.viam.app.v1.DeleteOrganizationResponse\x12t\n\x17GetOrganizationMetadata\x12+.viam.app.v1.GetOrganizationMetadataRequest\x1a,.viam.app.v1.GetOrganizationMetadataResponse\x12}\n\x1aUpdateOrganizationMetadata\x12..viam.app.v1.UpdateOrganizationMetadataRequest\x1a/.viam.app.v1.UpdateOrganizationMetadataResponse\x12t\n\x17ListOrganizationMembers\x12+.viam.app.v1.ListOrganizationMembersRequest\x1a,.viam.app.v1.ListOrganizationMembersResponse\x12w\n\x18CreateOrganizationInvite\x12,.viam.app.v1.CreateOrganizationInviteRequest\x1a-.viam.app.v1.CreateOrganizationInviteResponse\x12\xa1\x01\n&UpdateOrganizationInviteAuthorizations\x12:.viam.app.v1.UpdateOrganizationInviteAuthorizationsRequest\x1a;.viam.app.v1.UpdateOrganizationInviteAuthorizationsResponse\x12w\n\x18DeleteOrganizationMember\x12,.viam.app.v1.DeleteOrganizationMemberRequest\x1a-.viam.app.v1.DeleteOrganizationMemberResponse\x12w\n\x18DeleteOrganizationInvite\x12,.viam.app.v1.DeleteOrganizationInviteRequest\x1a-.viam.app.v1.DeleteOrganizationInviteResponse\x12w\n\x18ResendOrganizationInvite\x12,.viam.app.v1.ResendOrganizationInviteRequest\x1a-.viam.app.v1.ResendOrganizationInviteResponse\x12k\n\x14EnableBillingService\x12(.viam.app.v1.EnableBillingServiceRequest\x1a).viam.app.v1.EnableBillingServiceResponse\x12n\n\x15DisableBillingService\x12).viam.app.v1.DisableBillingServiceRequest\x1a*.viam.app.v1.DisableBillingServiceResponse\x12k\n\x14UpdateBillingService\x12(.viam.app.v1.UpdateBillingServiceRequest\x1a).viam.app.v1.UpdateBillingServiceResponse\x12t\n\x17GetBillingServiceConfig\x12+.viam.app.v1.GetBillingServiceConfigRequest\x1a,.viam.app.v1.GetBillingServiceConfigResponse\x12\x80\x01\n\x1bOrganizationSetSupportEmail\x12/.viam.app.v1.OrganizationSetSupportEmailRequest\x1a0.viam.app.v1.OrganizationSetSupportEmailResponse\x12\x80\x01\n\x1bOrganizationGetSupportEmail\x12/.viam.app.v1.OrganizationGetSupportEmailRequest\x1a0.viam.app.v1.OrganizationGetSupportEmailResponse\x12h\n\x13OrganizationSetLogo\x12\'.viam.app.v1.OrganizationSetLogoRequest\x1a(.viam.app.v1.OrganizationSetLogoResponse\x12h\n\x13OrganizationGetLogo\x12\'.viam.app.v1.OrganizationGetLogoRequest\x1a(.viam.app.v1.OrganizationGetLogoResponse\x12b\n\x11EnableAuthService\x12%.viam.app.v1.EnableAuthServiceRequest\x1a&.viam.app.v1.EnableAuthServiceResponse\x12e\n\x12DisableAuthService\x12&.viam.app.v1.DisableAuthServiceRequest\x1a\'.viam.app.v1.DisableAuthServiceResponse\x12Y\n\x0eCreateOAuthApp\x12".viam.app.v1.CreateOAuthAppRequest\x1a#.viam.app.v1.CreateOAuthAppResponse\x12S\n\x0cReadOAuthApp\x12 .viam.app.v1.ReadOAuthAppRequest\x1a!.viam.app.v1.ReadOAuthAppResponse\x12Y\n\x0eUpdateOAuthApp\x12".viam.app.v1.UpdateOAuthAppRequest\x1a#.viam.app.v1.UpdateOAuthAppResponse\x12Y\n\x0eDeleteOAuthApp\x12".viam.app.v1.DeleteOAuthAppRequest\x1a#.viam.app.v1.DeleteOAuthAppResponse\x12V\n\rListOAuthApps\x12!.viam.app.v1.ListOAuthAppsRequest\x1a".viam.app.v1.ListOAuthAppsResponse\x12Y\n\x0eCreateLocation\x12".viam.app.v1.CreateLocationRequest\x1a#.viam.app.v1.CreateLocationResponse\x12P\n\x0bGetLocation\x12\x1f.viam.app.v1.GetLocationRequest\x1a .viam.app.v1.GetLocationResponse\x12Y\n\x0eUpdateLocation\x12".viam.app.v1.UpdateLocationRequest\x1a#.viam.app.v1.UpdateLocationResponse\x12Y\n\x0eDeleteLocation\x12".viam.app.v1.DeleteLocationRequest\x1a#.viam.app.v1.DeleteLocationResponse\x12h\n\x13GetLocationMetadata\x12\'.viam.app.v1.GetLocationMetadataRequest\x1a(.viam.app.v1.GetLocationMetadataResponse\x12q\n\x16UpdateLocationMetadata\x12*.viam.app.v1.UpdateLocationMetadataRequest\x1a+.viam.app.v1.UpdateLocationMetadataResponse\x12V\n\rListLocations\x12!.viam.app.v1.ListLocationsRequest\x1a".viam.app.v1.ListLocationsResponse\x12V\n\rShareLocation\x12!.viam.app.v1.ShareLocationRequest\x1a".viam.app.v1.ShareLocationResponse\x12\\\n\x0fUnshareLocation\x12#.viam.app.v1.UnshareLocationRequest\x1a$.viam.app.v1.UnshareLocationResponse\x12S\n\x0cLocationAuth\x12 .viam.app.v1.LocationAuthRequest\x1a!.viam.app.v1.LocationAuthResponse\x12k\n\x14CreateLocationSecret\x12(.viam.app.v1.CreateLocationSecretRequest\x1a).viam.app.v1.CreateLocationSecretResponse\x12k\n\x14DeleteLocationSecret\x12(.viam.app.v1.DeleteLocationSecretRequest\x1a).viam.app.v1.DeleteLocationSecretResponse\x12G\n\x08GetRobot\x12\x1c.viam.app.v1.GetRobotRequest\x1a\x1d.viam.app.v1.GetRobotResponse\x12_\n\x10GetRobotMetadata\x12$.viam.app.v1.GetRobotMetadataRequest\x1a%.viam.app.v1.GetRobotMetadataResponse\x12h\n\x13UpdateRobotMetadata\x12\'.viam.app.v1.UpdateRobotMetadataRequest\x1a(.viam.app.v1.UpdateRobotMetadataResponse\x12k\n\x14GetRoverRentalRobots\x12(.viam.app.v1.GetRoverRentalRobotsRequest\x1a).viam.app.v1.GetRoverRentalRobotsResponse\x12V\n\rGetRobotParts\x12!.viam.app.v1.GetRobotPartsRequest\x1a".viam.app.v1.GetRobotPartsResponse\x12S\n\x0cGetRobotPart\x12 .viam.app.v1.GetRobotPartRequest\x1a!.viam.app.v1.GetRobotPartResponse\x12\x86\x01\n\x1dGetRobotPartByNameAndLocation\x121.viam.app.v1.GetRobotPartByNameAndLocationRequest\x1a2.viam.app.v1.GetRobotPartByNameAndLocationResponse\x12_\n\x10GetRobotPartLogs\x12$.viam.app.v1.GetRobotPartLogsRequest\x1a%.viam.app.v1.GetRobotPartLogsResponse\x12d\n\x11TailRobotPartLogs\x12%.viam.app.v1.TailRobotPartLogsRequest\x1a&.viam.app.v1.TailRobotPartLogsResponse0\x01\x12h\n\x13GetRobotPartHistory\x12\'.viam.app.v1.GetRobotPartHistoryRequest\x1a(.viam.app.v1.GetRobotPartHistoryResponse\x12\\\n\x0fUpdateRobotPart\x12#.viam.app.v1.UpdateRobotPartRequest\x1a$.viam.app.v1.UpdateRobotPartResponse\x12S\n\x0cNewRobotPart\x12 .viam.app.v1.NewRobotPartRequest\x1a!.viam.app.v1.NewRobotPartResponse\x12\\\n\x0fDeleteRobotPart\x12#.viam.app.v1.DeleteRobotPartRequest\x1a$.viam.app.v1.DeleteRobotPartResponse\x12k\n\x14GetRobotPartMetadata\x12(.viam.app.v1.GetRobotPartMetadataRequest\x1a).viam.app.v1.GetRobotPartMetadataResponse\x12t\n\x17UpdateRobotPartMetadata\x12+.viam.app.v1.UpdateRobotPartMetadataRequest\x1a,.viam.app.v1.UpdateRobotPartMetadataResponse\x12\\\n\x0fGetRobotAPIKeys\x12#.viam.app.v1.GetRobotAPIKeysRequest\x1a$.viam.app.v1.GetRobotAPIKeysResponse\x12Y\n\x0eMarkPartAsMain\x12".viam.app.v1.MarkPartAsMainRequest\x1a#.viam.app.v1.MarkPartAsMainResponse\x12e\n\x12MarkPartForRestart\x12&.viam.app.v1.MarkPartForRestartRequest\x1a\'.viam.app.v1.MarkPartForRestartResponse\x12n\n\x15CreateRobotPartSecret\x12).viam.app.v1.CreateRobotPartSecretRequest\x1a*.viam.app.v1.CreateRobotPartSecretResponse\x12n\n\x15DeleteRobotPartSecret\x12).viam.app.v1.DeleteRobotPartSecretRequest\x1a*.viam.app.v1.DeleteRobotPartSecretResponse\x12M\n\nListRobots\x12\x1e.viam.app.v1.ListRobotsRequest\x1a\x1f.viam.app.v1.ListRobotsResponse\x12q\n\x16ListRobotsForLocations\x12*.viam.app.v1.ListRobotsForLocationsRequest\x1a+.viam.app.v1.ListRobotsForLocationsResponse\x12_\n\x10ListRobotsForOrg\x12$.viam.app.v1.ListRobotsForOrgRequest\x1a%.viam.app.v1.ListRobotsForOrgResponse\x12G\n\x08NewRobot\x12\x1c.viam.app.v1.NewRobotRequest\x1a\x1d.viam.app.v1.NewRobotResponse\x12P\n\x0bUpdateRobot\x12\x1f.viam.app.v1.UpdateRobotRequest\x1a .viam.app.v1.UpdateRobotResponse\x12P\n\x0bDeleteRobot\x12\x1f.viam.app.v1.DeleteRobotRequest\x1a .viam.app.v1.DeleteRobotResponse\x12V\n\rListFragments\x12!.viam.app.v1.ListFragmentsRequest\x1a".viam.app.v1.ListFragmentsResponse\x12P\n\x0bGetFragment\x12\x1f.viam.app.v1.GetFragmentRequest\x1a .viam.app.v1.GetFragmentResponse\x12Y\n\x0eCreateFragment\x12".viam.app.v1.CreateFragmentRequest\x1a#.viam.app.v1.CreateFragmentResponse\x12Y\n\x0eUpdateFragment\x12".viam.app.v1.UpdateFragmentRequest\x1a#.viam.app.v1.UpdateFragmentResponse\x12Y\n\x0eDeleteFragment\x12".viam.app.v1.DeleteFragmentRequest\x1a#.viam.app.v1.DeleteFragmentResponse\x12h\n\x13ListNestedFragments\x12\'.viam.app.v1.ListNestedFragmentsRequest\x1a(.viam.app.v1.ListNestedFragmentsResponse\x12k\n\x14ListMachineFragments\x12(.viam.app.v1.ListMachineFragmentsRequest\x1a).viam.app.v1.ListMachineFragmentsResponse\x12k\n\x14ListMachineSummaries\x12(.viam.app.v1.ListMachineSummariesRequest\x1a).viam.app.v1.ListMachineSummariesResponse\x12e\n\x12GetFragmentHistory\x12&.viam.app.v1.GetFragmentHistoryRequest\x1a\'.viam.app.v1.GetFragmentHistoryResponse\x12_\n\x10GetFragmentUsage\x12$.viam.app.v1.GetFragmentUsageRequest\x1a%.viam.app.v1.GetFragmentUsageResponse\x12Y\n\x0eSetFragmentTag\x12".viam.app.v1.SetFragmentTagRequest\x1a#.viam.app.v1.SetFragmentTagResponse\x12b\n\x11DeleteFragmentTag\x12%.viam.app.v1.DeleteFragmentTagRequest\x1a&.viam.app.v1.DeleteFragmentTagResponse\x12D\n\x07AddRole\x12\x1b.viam.app.v1.AddRoleRequest\x1a\x1c.viam.app.v1.AddRoleResponse\x12M\n\nRemoveRole\x12\x1e.viam.app.v1.RemoveRoleRequest\x1a\x1f.viam.app.v1.RemoveRoleResponse\x12M\n\nChangeRole\x12\x1e.viam.app.v1.ChangeRoleRequest\x1a\x1f.viam.app.v1.ChangeRoleResponse\x12e\n\x12ListAuthorizations\x12&.viam.app.v1.ListAuthorizationsRequest\x1a\'.viam.app.v1.ListAuthorizationsResponse\x12_\n\x10CheckPermissions\x12$.viam.app.v1.CheckPermissionsRequest\x1a%.viam.app.v1.CheckPermissionsResponse\x12\\\n\x0fGetRegistryItem\x12#.viam.app.v1.GetRegistryItemRequest\x1a$.viam.app.v1.GetRegistryItemResponse\x12e\n\x12CreateRegistryItem\x12&.viam.app.v1.CreateRegistryItemRequest\x1a\'.viam.app.v1.CreateRegistryItemResponse\x12e\n\x12UpdateRegistryItem\x12&.viam.app.v1.UpdateRegistryItemRequest\x1a\'.viam.app.v1.UpdateRegistryItemResponse\x12b\n\x11ListRegistryItems\x12%.viam.app.v1.ListRegistryItemsRequest\x1a&.viam.app.v1.ListRegistryItemsResponse\x12e\n\x12DeleteRegistryItem\x12&.viam.app.v1.DeleteRegistryItemRequest\x1a\'.viam.app.v1.DeleteRegistryItemResponse\x12e\n\x12RenameRegistryItem\x12&.viam.app.v1.RenameRegistryItemRequest\x1a\'.viam.app.v1.RenameRegistryItemResponse\x12k\n\x14TransferRegistryItem\x12(.viam.app.v1.TransferRegistryItemRequest\x1a).viam.app.v1.TransferRegistryItemResponse\x12S\n\x0cCreateModule\x12 .viam.app.v1.CreateModuleRequest\x1a!.viam.app.v1.CreateModuleResponse\x12S\n\x0cUpdateModule\x12 .viam.app.v1.UpdateModuleRequest\x1a!.viam.app.v1.UpdateModuleResponse\x12a\n\x10UploadModuleFile\x12$.viam.app.v1.UploadModuleFileRequest\x1a%.viam.app.v1.UploadModuleFileResponse(\x01\x12J\n\tGetModule\x12\x1d.viam.app.v1.GetModuleRequest\x1a\x1e.viam.app.v1.GetModuleResponse\x12P\n\x0bListModules\x12\x1f.viam.app.v1.ListModulesRequest\x1a .viam.app.v1.ListModulesResponse\x12J\n\tCreateKey\x12\x1d.viam.app.v1.CreateKeyRequest\x1a\x1e.viam.app.v1.CreateKeyResponse\x12J\n\tDeleteKey\x12\x1d.viam.app.v1.DeleteKeyRequest\x1a\x1e.viam.app.v1.DeleteKeyResponse\x12G\n\x08ListKeys\x12\x1c.viam.app.v1.ListKeysRequest\x1a\x1d.viam.app.v1.ListKeysResponse\x12J\n\tRenameKey\x12\x1d.viam.app.v1.RenameKeyRequest\x1a\x1e.viam.app.v1.RenameKeyResponse\x12J\n\tRotateKey\x12\x1d.viam.app.v1.RotateKeyRequest\x1a\x1e.viam.app.v1.RotateKeyResponse\x12\xa1\x01\n&CreateKeyFromExistingKeyAuthorizations\x12:.viam.app.v1.CreateKeyFromExistingKeyAuthorizationsRequest\x1a;.viam.app.v1.CreateKeyFromExistingKeyAuthorizationsResponse\x12V\n\rGetAppContent\x12!.viam.app.v1.GetAppContentRequest\x1a".viam.app.v1.GetAppContentResponse\x12Y\n\x0eGetAppBranding\x12".viam.app.v1.GetAppBrandingRequest\x1a#.viam.app.v1.GetAppBrandingResponseB\x18Z\x16go.viam.com/api/app/v1b\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'app.v1.app_pb2', _globals) @@ -117,32 +117,32 @@ _globals['_TEXTOVERRIDES_FIELDSENTRY']._serialized_options = b'8\x01' _globals['_GETAPPBRANDINGRESPONSE_TEXTCUSTOMIZATIONSENTRY']._loaded_options = None _globals['_GETAPPBRANDINGRESPONSE_TEXTCUSTOMIZATIONSENTRY']._serialized_options = b'8\x01' - _globals['_ONLINESTATE']._serialized_start = 35964 - _globals['_ONLINESTATE']._serialized_end = 36091 - _globals['_AUTHENTICATIONTYPE']._serialized_start = 36094 - _globals['_AUTHENTICATIONTYPE']._serialized_end = 36303 - _globals['_FRAGMENTVISIBILITY']._serialized_start = 36306 - _globals['_FRAGMENTVISIBILITY']._serialized_end = 36469 - _globals['_FRAGMENTERRORTYPE']._serialized_start = 36472 - _globals['_FRAGMENTERRORTYPE']._serialized_end = 36693 - _globals['_MODULESOURCETYPE']._serialized_start = 36695 - _globals['_MODULESOURCETYPE']._serialized_end = 36818 - _globals['_MODULELANGUAGE']._serialized_start = 36821 - _globals['_MODULELANGUAGE']._serialized_end = 36951 - _globals['_REGISTRYITEMSTATUS']._serialized_start = 36954 - _globals['_REGISTRYITEMSTATUS']._serialized_end = 37089 - _globals['_VISIBILITY']._serialized_start = 37091 - _globals['_VISIBILITY']._serialized_end = 37210 - _globals['_APPTYPE']._serialized_start = 37212 - _globals['_APPTYPE']._serialized_end = 37304 - _globals['_CLIENTAUTHENTICATION']._serialized_start = 37307 - _globals['_CLIENTAUTHENTICATION']._serialized_end = 37500 - _globals['_PKCE']._serialized_start = 37502 - _globals['_PKCE']._serialized_end = 37628 - _globals['_URLVALIDATION']._serialized_start = 37630 - _globals['_URLVALIDATION']._serialized_end = 37745 - _globals['_ENABLEDGRANT']._serialized_start = 37748 - _globals['_ENABLEDGRANT']._serialized_end = 37951 + _globals['_ONLINESTATE']._serialized_start = 35971 + _globals['_ONLINESTATE']._serialized_end = 36098 + _globals['_AUTHENTICATIONTYPE']._serialized_start = 36101 + _globals['_AUTHENTICATIONTYPE']._serialized_end = 36310 + _globals['_FRAGMENTVISIBILITY']._serialized_start = 36313 + _globals['_FRAGMENTVISIBILITY']._serialized_end = 36476 + _globals['_FRAGMENTERRORTYPE']._serialized_start = 36479 + _globals['_FRAGMENTERRORTYPE']._serialized_end = 36700 + _globals['_MODULESOURCETYPE']._serialized_start = 36702 + _globals['_MODULESOURCETYPE']._serialized_end = 36825 + _globals['_MODULELANGUAGE']._serialized_start = 36828 + _globals['_MODULELANGUAGE']._serialized_end = 36958 + _globals['_REGISTRYITEMSTATUS']._serialized_start = 36961 + _globals['_REGISTRYITEMSTATUS']._serialized_end = 37096 + _globals['_VISIBILITY']._serialized_start = 37098 + _globals['_VISIBILITY']._serialized_end = 37217 + _globals['_APPTYPE']._serialized_start = 37219 + _globals['_APPTYPE']._serialized_end = 37311 + _globals['_CLIENTAUTHENTICATION']._serialized_start = 37314 + _globals['_CLIENTAUTHENTICATION']._serialized_end = 37507 + _globals['_PKCE']._serialized_start = 37509 + _globals['_PKCE']._serialized_end = 37635 + _globals['_URLVALIDATION']._serialized_start = 37637 + _globals['_URLVALIDATION']._serialized_end = 37752 + _globals['_ENABLEDGRANT']._serialized_start = 37755 + _globals['_ENABLEDGRANT']._serialized_end = 37958 _globals['_ROBOT']._serialized_start = 214 _globals['_ROBOT']._serialized_end = 817 _globals['_ROBOTPART']._serialized_start = 820 @@ -174,530 +174,530 @@ _globals['_GETORGANIZATIONNAMESPACEAVAILABILITYRESPONSE']._serialized_start = 3930 _globals['_GETORGANIZATIONNAMESPACEAVAILABILITYRESPONSE']._serialized_end = 4006 _globals['_FRAGMENTIMPORTLIST']._serialized_start = 4008 - _globals['_FRAGMENTIMPORTLIST']._serialized_end = 4083 - _globals['_UPDATEORGANIZATIONREQUEST']._serialized_start = 4086 - _globals['_UPDATEORGANIZATIONREQUEST']._serialized_end = 4430 - _globals['_UPDATEORGANIZATIONRESPONSE']._serialized_start = 4432 - _globals['_UPDATEORGANIZATIONRESPONSE']._serialized_end = 4523 - _globals['_UPDATEORGANIZATIONNAMESPACEREQUEST']._serialized_start = 4525 - _globals['_UPDATEORGANIZATIONNAMESPACEREQUEST']._serialized_end = 4652 - _globals['_UPDATEORGANIZATIONNAMESPACERESPONSE']._serialized_start = 4654 - _globals['_UPDATEORGANIZATIONNAMESPACERESPONSE']._serialized_end = 4754 - _globals['_DELETEORGANIZATIONREQUEST']._serialized_start = 4756 - _globals['_DELETEORGANIZATIONREQUEST']._serialized_end = 4824 - _globals['_DELETEORGANIZATIONRESPONSE']._serialized_start = 4826 - _globals['_DELETEORGANIZATIONRESPONSE']._serialized_end = 4854 - _globals['_GETORGANIZATIONMETADATAREQUEST']._serialized_start = 4856 - _globals['_GETORGANIZATIONMETADATAREQUEST']._serialized_end = 4929 - _globals['_GETORGANIZATIONMETADATARESPONSE']._serialized_start = 4931 - _globals['_GETORGANIZATIONMETADATARESPONSE']._serialized_end = 5009 - _globals['_UPDATEORGANIZATIONMETADATAREQUEST']._serialized_start = 5011 - _globals['_UPDATEORGANIZATIONMETADATAREQUEST']._serialized_end = 5132 - _globals['_UPDATEORGANIZATIONMETADATARESPONSE']._serialized_start = 5134 - _globals['_UPDATEORGANIZATIONMETADATARESPONSE']._serialized_end = 5170 - _globals['_LISTORGANIZATIONMEMBERSREQUEST']._serialized_start = 5172 - _globals['_LISTORGANIZATIONMEMBERSREQUEST']._serialized_end = 5245 - _globals['_LISTORGANIZATIONMEMBERSRESPONSE']._serialized_start = 5248 - _globals['_LISTORGANIZATIONMEMBERSRESPONSE']._serialized_end = 5440 - _globals['_CREATEORGANIZATIONINVITEREQUEST']._serialized_start = 5443 - _globals['_CREATEORGANIZATIONINVITEREQUEST']._serialized_end = 5678 - _globals['_CREATEORGANIZATIONINVITERESPONSE']._serialized_start = 5680 - _globals['_CREATEORGANIZATIONINVITERESPONSE']._serialized_end = 5771 - _globals['_UPDATEORGANIZATIONINVITEAUTHORIZATIONSREQUEST']._serialized_start = 5774 - _globals['_UPDATEORGANIZATIONINVITEAUTHORIZATIONSREQUEST']._serialized_end = 6040 - _globals['_UPDATEORGANIZATIONINVITEAUTHORIZATIONSRESPONSE']._serialized_start = 6042 - _globals['_UPDATEORGANIZATIONINVITEAUTHORIZATIONSRESPONSE']._serialized_end = 6147 - _globals['_DELETEORGANIZATIONINVITEREQUEST']._serialized_start = 6149 - _globals['_DELETEORGANIZATIONINVITEREQUEST']._serialized_end = 6245 - _globals['_DELETEORGANIZATIONINVITERESPONSE']._serialized_start = 6247 - _globals['_DELETEORGANIZATIONINVITERESPONSE']._serialized_end = 6281 - _globals['_RESENDORGANIZATIONINVITEREQUEST']._serialized_start = 6284 - _globals['_RESENDORGANIZATIONINVITEREQUEST']._serialized_end = 6451 - _globals['_RESENDORGANIZATIONINVITERESPONSE']._serialized_start = 6453 - _globals['_RESENDORGANIZATIONINVITERESPONSE']._serialized_end = 6544 - _globals['_DELETEORGANIZATIONMEMBERREQUEST']._serialized_start = 6546 - _globals['_DELETEORGANIZATIONMEMBERREQUEST']._serialized_end = 6645 - _globals['_DELETEORGANIZATIONMEMBERRESPONSE']._serialized_start = 6647 - _globals['_DELETEORGANIZATIONMEMBERRESPONSE']._serialized_end = 6681 - _globals['_BILLINGADDRESS']._serialized_start = 6684 - _globals['_BILLINGADDRESS']._serialized_end = 6894 - _globals['_ENABLEBILLINGSERVICEREQUEST']._serialized_start = 6896 - _globals['_ENABLEBILLINGSERVICEREQUEST']._serialized_end = 7018 - _globals['_ENABLEBILLINGSERVICERESPONSE']._serialized_start = 7020 - _globals['_ENABLEBILLINGSERVICERESPONSE']._serialized_end = 7050 - _globals['_UPDATEBILLINGSERVICEREQUEST']._serialized_start = 7052 - _globals['_UPDATEBILLINGSERVICEREQUEST']._serialized_end = 7174 - _globals['_UPDATEBILLINGSERVICERESPONSE']._serialized_start = 7176 - _globals['_UPDATEBILLINGSERVICERESPONSE']._serialized_end = 7206 - _globals['_GETBILLINGSERVICECONFIGREQUEST']._serialized_start = 7208 - _globals['_GETBILLINGSERVICECONFIGREQUEST']._serialized_end = 7263 - _globals['_GETBILLINGSERVICECONFIGRESPONSE']._serialized_start = 7266 - _globals['_GETBILLINGSERVICECONFIGRESPONSE']._serialized_end = 7485 - _globals['_DISABLEBILLINGSERVICEREQUEST']._serialized_start = 7487 - _globals['_DISABLEBILLINGSERVICEREQUEST']._serialized_end = 7540 - _globals['_DISABLEBILLINGSERVICERESPONSE']._serialized_start = 7542 - _globals['_DISABLEBILLINGSERVICERESPONSE']._serialized_end = 7573 - _globals['_ORGANIZATIONSETSUPPORTEMAILREQUEST']._serialized_start = 7575 - _globals['_ORGANIZATIONSETSUPPORTEMAILREQUEST']._serialized_end = 7656 - _globals['_ORGANIZATIONSETSUPPORTEMAILRESPONSE']._serialized_start = 7658 - _globals['_ORGANIZATIONSETSUPPORTEMAILRESPONSE']._serialized_end = 7695 - _globals['_ORGANIZATIONGETSUPPORTEMAILREQUEST']._serialized_start = 7697 - _globals['_ORGANIZATIONGETSUPPORTEMAILREQUEST']._serialized_end = 7756 - _globals['_ORGANIZATIONGETSUPPORTEMAILRESPONSE']._serialized_start = 7758 - _globals['_ORGANIZATIONGETSUPPORTEMAILRESPONSE']._serialized_end = 7817 - _globals['_ORGANIZATIONIDENTITY']._serialized_start = 7819 - _globals['_ORGANIZATIONIDENTITY']._serialized_end = 7877 - _globals['_LOCATIONORGANIZATION']._serialized_start = 7879 - _globals['_LOCATIONORGANIZATION']._serialized_end = 7968 - _globals['_LOCATIONAUTH']._serialized_start = 7971 - _globals['_LOCATIONAUTH']._serialized_end = 8099 - _globals['_STORAGECONFIG']._serialized_start = 8101 - _globals['_STORAGECONFIG']._serialized_end = 8140 - _globals['_LOCATION']._serialized_start = 8143 - _globals['_LOCATION']._serialized_end = 8614 - _globals['_SHAREDSECRET']._serialized_start = 8617 - _globals['_SHAREDSECRET']._serialized_end = 8953 - _globals['_SHAREDSECRET_STATE']._serialized_start = 8884 - _globals['_SHAREDSECRET_STATE']._serialized_end = 8953 - _globals['_CREATELOCATIONREQUEST']._serialized_start = 8956 - _globals['_CREATELOCATIONREQUEST']._serialized_end = 9114 - _globals['_CREATELOCATIONRESPONSE']._serialized_start = 9116 - _globals['_CREATELOCATIONRESPONSE']._serialized_end = 9191 - _globals['_GETLOCATIONREQUEST']._serialized_start = 9193 - _globals['_GETLOCATIONREQUEST']._serialized_end = 9246 - _globals['_GETLOCATIONRESPONSE']._serialized_start = 9248 - _globals['_GETLOCATIONRESPONSE']._serialized_end = 9320 - _globals['_UPDATELOCATIONREQUEST']._serialized_start = 9323 - _globals['_UPDATELOCATIONREQUEST']._serialized_end = 9527 - _globals['_UPDATELOCATIONRESPONSE']._serialized_start = 9529 - _globals['_UPDATELOCATIONRESPONSE']._serialized_end = 9604 - _globals['_DELETELOCATIONREQUEST']._serialized_start = 9606 - _globals['_DELETELOCATIONREQUEST']._serialized_end = 9662 - _globals['_DELETELOCATIONRESPONSE']._serialized_start = 9664 - _globals['_DELETELOCATIONRESPONSE']._serialized_end = 9688 - _globals['_GETLOCATIONMETADATAREQUEST']._serialized_start = 9690 - _globals['_GETLOCATIONMETADATAREQUEST']._serialized_end = 9751 - _globals['_GETLOCATIONMETADATARESPONSE']._serialized_start = 9753 - _globals['_GETLOCATIONMETADATARESPONSE']._serialized_end = 9827 - _globals['_UPDATELOCATIONMETADATAREQUEST']._serialized_start = 9829 - _globals['_UPDATELOCATIONMETADATAREQUEST']._serialized_end = 9938 - _globals['_UPDATELOCATIONMETADATARESPONSE']._serialized_start = 9940 - _globals['_UPDATELOCATIONMETADATARESPONSE']._serialized_end = 9972 - _globals['_GETORGANIZATIONSWITHACCESSTOLOCATIONREQUEST']._serialized_start = 9974 - _globals['_GETORGANIZATIONSWITHACCESSTOLOCATIONREQUEST']._serialized_end = 10052 - _globals['_GETORGANIZATIONSWITHACCESSTOLOCATIONRESPONSE']._serialized_start = 10055 - _globals['_GETORGANIZATIONSWITHACCESSTOLOCATIONRESPONSE']._serialized_end = 10193 - _globals['_LISTLOCATIONSREQUEST']._serialized_start = 10195 - _globals['_LISTLOCATIONSREQUEST']._serialized_end = 10258 - _globals['_SHARELOCATIONREQUEST']._serialized_start = 10260 - _globals['_SHARELOCATIONREQUEST']._serialized_end = 10356 - _globals['_SHARELOCATIONRESPONSE']._serialized_start = 10358 - _globals['_SHARELOCATIONRESPONSE']._serialized_end = 10381 - _globals['_UNSHARELOCATIONREQUEST']._serialized_start = 10383 - _globals['_UNSHARELOCATIONREQUEST']._serialized_end = 10481 - _globals['_UNSHARELOCATIONRESPONSE']._serialized_start = 10483 - _globals['_UNSHARELOCATIONRESPONSE']._serialized_end = 10508 - _globals['_LISTLOCATIONSRESPONSE']._serialized_start = 10510 - _globals['_LISTLOCATIONSRESPONSE']._serialized_end = 10586 - _globals['_CREATELOCATIONSECRETREQUEST']._serialized_start = 10588 - _globals['_CREATELOCATIONSECRETREQUEST']._serialized_end = 10650 - _globals['_CREATELOCATIONSECRETRESPONSE']._serialized_start = 10652 - _globals['_CREATELOCATIONSECRETRESPONSE']._serialized_end = 10729 - _globals['_DELETELOCATIONSECRETREQUEST']._serialized_start = 10731 - _globals['_DELETELOCATIONSECRETREQUEST']._serialized_end = 10822 - _globals['_DELETELOCATIONSECRETRESPONSE']._serialized_start = 10824 - _globals['_DELETELOCATIONSECRETRESPONSE']._serialized_end = 10854 - _globals['_LOCATIONAUTHREQUEST']._serialized_start = 10856 - _globals['_LOCATIONAUTHREQUEST']._serialized_end = 10910 - _globals['_LOCATIONAUTHRESPONSE']._serialized_start = 10912 - _globals['_LOCATIONAUTHRESPONSE']._serialized_end = 10981 - _globals['_GETROBOTREQUEST']._serialized_start = 10983 - _globals['_GETROBOTREQUEST']._serialized_end = 11016 - _globals['_GETROVERRENTALROBOTSREQUEST']._serialized_start = 11018 - _globals['_GETROVERRENTALROBOTSREQUEST']._serialized_end = 11070 - _globals['_ROVERRENTALROBOT']._serialized_start = 11073 - _globals['_ROVERRENTALROBOT']._serialized_end = 11227 - _globals['_GETROVERRENTALROBOTSRESPONSE']._serialized_start = 11229 - _globals['_GETROVERRENTALROBOTSRESPONSE']._serialized_end = 11314 - _globals['_GETROBOTRESPONSE']._serialized_start = 11316 - _globals['_GETROBOTRESPONSE']._serialized_end = 11376 - _globals['_GETROBOTPARTSREQUEST']._serialized_start = 11378 - _globals['_GETROBOTPARTSREQUEST']._serialized_end = 11427 - _globals['_GETROBOTPARTSRESPONSE']._serialized_start = 11429 - _globals['_GETROBOTPARTSRESPONSE']._serialized_end = 11498 - _globals['_GETROBOTPARTREQUEST']._serialized_start = 11500 - _globals['_GETROBOTPARTREQUEST']._serialized_end = 11537 - _globals['_GETROBOTPARTRESPONSE']._serialized_start = 11539 - _globals['_GETROBOTPARTRESPONSE']._serialized_end = 11638 - _globals['_GETROBOTPARTBYNAMEANDLOCATIONREQUEST']._serialized_start = 11640 - _globals['_GETROBOTPARTBYNAMEANDLOCATIONREQUEST']._serialized_end = 11731 - _globals['_GETROBOTPARTBYNAMEANDLOCATIONRESPONSE']._serialized_start = 11733 - _globals['_GETROBOTPARTBYNAMEANDLOCATIONRESPONSE']._serialized_end = 11816 - _globals['_GETROBOTPARTLOGSREQUEST']._serialized_start = 11819 - _globals['_GETROBOTPARTLOGSREQUEST']._serialized_end = 12281 - _globals['_GETROBOTPARTLOGSRESPONSE']._serialized_start = 12283 - _globals['_GETROBOTPARTLOGSRESPONSE']._serialized_end = 12395 - _globals['_TAILROBOTPARTLOGSREQUEST']._serialized_start = 12397 - _globals['_TAILROBOTPARTLOGSREQUEST']._serialized_end = 12512 - _globals['_TAILROBOTPARTLOGSRESPONSE']._serialized_start = 12514 - _globals['_TAILROBOTPARTLOGSRESPONSE']._serialized_end = 12587 - _globals['_GETROBOTPARTHISTORYREQUEST']._serialized_start = 12589 - _globals['_GETROBOTPARTHISTORYREQUEST']._serialized_end = 12633 - _globals['_GETROBOTPARTHISTORYRESPONSE']._serialized_start = 12635 - _globals['_GETROBOTPARTHISTORYRESPONSE']._serialized_end = 12726 - _globals['_UPDATEROBOTPARTREQUEST']._serialized_start = 12729 - _globals['_UPDATEROBOTPARTREQUEST']._serialized_end = 12948 - _globals['_UPDATEROBOTPARTRESPONSE']._serialized_start = 12950 - _globals['_UPDATEROBOTPARTRESPONSE']._serialized_end = 13019 - _globals['_NEWROBOTPARTREQUEST']._serialized_start = 13021 - _globals['_NEWROBOTPARTREQUEST']._serialized_end = 13098 - _globals['_NEWROBOTPARTRESPONSE']._serialized_start = 13100 - _globals['_NEWROBOTPARTRESPONSE']._serialized_end = 13147 - _globals['_DELETEROBOTPARTREQUEST']._serialized_start = 13149 - _globals['_DELETEROBOTPARTREQUEST']._serialized_end = 13198 - _globals['_GETROBOTPARTMETADATAREQUEST']._serialized_start = 13200 - _globals['_GETROBOTPARTMETADATAREQUEST']._serialized_end = 13245 - _globals['_GETROBOTPARTMETADATARESPONSE']._serialized_start = 13247 - _globals['_GETROBOTPARTMETADATARESPONSE']._serialized_end = 13322 - _globals['_UPDATEROBOTPARTMETADATAREQUEST']._serialized_start = 13324 - _globals['_UPDATEROBOTPARTMETADATAREQUEST']._serialized_end = 13417 - _globals['_UPDATEROBOTPARTMETADATARESPONSE']._serialized_start = 13419 - _globals['_UPDATEROBOTPARTMETADATARESPONSE']._serialized_end = 13452 - _globals['_GETROBOTAPIKEYSREQUEST']._serialized_start = 13454 - _globals['_GETROBOTAPIKEYSREQUEST']._serialized_end = 13505 - _globals['_APIKEY']._serialized_start = 13507 - _globals['_APIKEY']._serialized_end = 13628 - _globals['_GETROBOTAPIKEYSRESPONSE']._serialized_start = 13630 - _globals['_GETROBOTAPIKEYSRESPONSE']._serialized_end = 13721 - _globals['_DELETEROBOTPARTRESPONSE']._serialized_start = 13723 - _globals['_DELETEROBOTPARTRESPONSE']._serialized_end = 13748 - _globals['_FRAGMENT']._serialized_start = 13751 - _globals['_FRAGMENT']._serialized_end = 14552 - _globals['_FRAGMENTHISTORYENTRY']._serialized_start = 14555 - _globals['_FRAGMENTHISTORYENTRY']._serialized_end = 15059 - _globals['_FRAGMENTREVISION']._serialized_start = 15061 - _globals['_FRAGMENTREVISION']._serialized_end = 15166 - _globals['_FRAGMENTTAG']._serialized_start = 15168 - _globals['_FRAGMENTTAG']._serialized_end = 15227 - _globals['_FRAGMENTERROR']._serialized_start = 15230 - _globals['_FRAGMENTERROR']._serialized_end = 15365 - _globals['_FRAGMENTUSAGE']._serialized_start = 15368 - _globals['_FRAGMENTUSAGE']._serialized_end = 15580 - _globals['_FRAGMENTIMPORT']._serialized_start = 15583 - _globals['_FRAGMENTIMPORT']._serialized_end = 15834 - _globals['_FRAGMENTIMPORT_VARIABLESENTRY']._serialized_start = 15763 - _globals['_FRAGMENTIMPORT_VARIABLESENTRY']._serialized_end = 15823 - _globals['_RESOLVEDFRAGMENT']._serialized_start = 15837 - _globals['_RESOLVEDFRAGMENT']._serialized_end = 16032 - _globals['_LISTFRAGMENTSREQUEST']._serialized_start = 16035 - _globals['_LISTFRAGMENTSREQUEST']._serialized_end = 16213 - _globals['_LISTFRAGMENTSRESPONSE']._serialized_start = 16216 - _globals['_LISTFRAGMENTSRESPONSE']._serialized_end = 16361 - _globals['_GETFRAGMENTREQUEST']._serialized_start = 16364 - _globals['_GETFRAGMENTREQUEST']._serialized_end = 16499 - _globals['_GETFRAGMENTRESPONSE']._serialized_start = 16502 - _globals['_GETFRAGMENTRESPONSE']._serialized_end = 16748 - _globals['_CREATEFRAGMENTREQUEST']._serialized_start = 16751 - _globals['_CREATEFRAGMENTREQUEST']._serialized_end = 16969 - _globals['_CREATEFRAGMENTRESPONSE']._serialized_start = 16971 - _globals['_CREATEFRAGMENTRESPONSE']._serialized_end = 17046 - _globals['_UPDATEFRAGMENTREQUEST']._serialized_start = 17049 - _globals['_UPDATEFRAGMENTREQUEST']._serialized_end = 17381 - _globals['_UPDATEFRAGMENTRESPONSE']._serialized_start = 17383 - _globals['_UPDATEFRAGMENTRESPONSE']._serialized_end = 17458 - _globals['_DELETEFRAGMENTREQUEST']._serialized_start = 17460 - _globals['_DELETEFRAGMENTREQUEST']._serialized_end = 17499 - _globals['_DELETEFRAGMENTRESPONSE']._serialized_start = 17501 - _globals['_DELETEFRAGMENTRESPONSE']._serialized_end = 17525 - _globals['_GETFRAGMENTHISTORYREQUEST']._serialized_start = 17528 - _globals['_GETFRAGMENTHISTORYREQUEST']._serialized_end = 17673 - _globals['_GETFRAGMENTHISTORYRESPONSE']._serialized_start = 17676 - _globals['_GETFRAGMENTHISTORYRESPONSE']._serialized_end = 17805 - _globals['_GETFRAGMENTUSAGEREQUEST']._serialized_start = 17807 - _globals['_GETFRAGMENTUSAGEREQUEST']._serialized_end = 17865 - _globals['_GETFRAGMENTUSAGERESPONSE']._serialized_start = 17867 - _globals['_GETFRAGMENTUSAGERESPONSE']._serialized_end = 17960 - _globals['_SETFRAGMENTTAGREQUEST']._serialized_start = 17962 - _globals['_SETFRAGMENTTAGREQUEST']._serialized_end = 18064 - _globals['_SETFRAGMENTTAGRESPONSE']._serialized_start = 18066 - _globals['_SETFRAGMENTTAGRESPONSE']._serialized_end = 18136 - _globals['_DELETEFRAGMENTTAGREQUEST']._serialized_start = 18138 - _globals['_DELETEFRAGMENTTAGREQUEST']._serialized_end = 18215 - _globals['_DELETEFRAGMENTTAGRESPONSE']._serialized_start = 18217 - _globals['_DELETEFRAGMENTTAGRESPONSE']._serialized_end = 18290 - _globals['_LISTROBOTSREQUEST']._serialized_start = 18292 - _globals['_LISTROBOTSREQUEST']._serialized_end = 18344 - _globals['_LISTROBOTSFORLOCATIONSREQUEST']._serialized_start = 18346 - _globals['_LISTROBOTSFORLOCATIONSREQUEST']._serialized_end = 18412 - _globals['_LISTROBOTSFORORGREQUEST']._serialized_start = 18414 - _globals['_LISTROBOTSFORORGREQUEST']._serialized_end = 18462 - _globals['_ADDITIONALFRAGMENT']._serialized_start = 18464 - _globals['_ADDITIONALFRAGMENT']._serialized_end = 18560 - _globals['_LISTNESTEDFRAGMENTSREQUEST']._serialized_start = 18563 - _globals['_LISTNESTEDFRAGMENTSREQUEST']._serialized_end = 18729 - _globals['_LISTNESTEDFRAGMENTSRESPONSE']._serialized_start = 18732 - _globals['_LISTNESTEDFRAGMENTSRESPONSE']._serialized_end = 18892 - _globals['_LISTMACHINEFRAGMENTSREQUEST']._serialized_start = 18895 - _globals['_LISTMACHINEFRAGMENTSREQUEST']._serialized_end = 19095 - _globals['_LISTMACHINEFRAGMENTSRESPONSE']._serialized_start = 19098 - _globals['_LISTMACHINEFRAGMENTSRESPONSE']._serialized_end = 19259 - _globals['_LISTMACHINESUMMARIESREQUEST']._serialized_start = 19262 - _globals['_LISTMACHINESUMMARIESREQUEST']._serialized_end = 19439 - _globals['_LISTMACHINESUMMARIESRESPONSE']._serialized_start = 19441 - _globals['_LISTMACHINESUMMARIESRESPONSE']._serialized_end = 19548 - _globals['_LOCATIONSUMMARY']._serialized_start = 19551 - _globals['_LOCATIONSUMMARY']._serialized_end = 19712 - _globals['_MACHINESUMMARY']._serialized_start = 19715 - _globals['_MACHINESUMMARY']._serialized_end = 19862 - _globals['_FRAGMENTSUMMARY']._serialized_start = 19864 - _globals['_FRAGMENTSUMMARY']._serialized_end = 19923 - _globals['_VIAMSERVERVERSION']._serialized_start = 19925 - _globals['_VIAMSERVERVERSION']._serialized_end = 20003 - _globals['_VIAMAGENTVERSION']._serialized_start = 20005 - _globals['_VIAMAGENTVERSION']._serialized_end = 20082 - _globals['_PARTSUMMARY']._serialized_start = 20085 - _globals['_PARTSUMMARY']._serialized_end = 20925 - _globals['_LISTROBOTSRESPONSE']._serialized_start = 20927 - _globals['_LISTROBOTSRESPONSE']._serialized_end = 20991 - _globals['_LISTROBOTSFORLOCATIONSRESPONSE']._serialized_start = 20993 - _globals['_LISTROBOTSFORLOCATIONSRESPONSE']._serialized_end = 21069 - _globals['_LISTROBOTSFORORGRESPONSE']._serialized_start = 21071 - _globals['_LISTROBOTSFORORGRESPONSE']._serialized_end = 21141 - _globals['_NEWROBOTREQUEST']._serialized_start = 21143 - _globals['_NEWROBOTREQUEST']._serialized_end = 21208 - _globals['_NEWROBOTRESPONSE']._serialized_start = 21210 - _globals['_NEWROBOTRESPONSE']._serialized_end = 21244 - _globals['_UPDATEROBOTREQUEST']._serialized_start = 21246 - _globals['_UPDATEROBOTREQUEST']._serialized_end = 21330 - _globals['_UPDATEROBOTRESPONSE']._serialized_start = 21332 - _globals['_UPDATEROBOTRESPONSE']._serialized_end = 21395 - _globals['_DELETEROBOTREQUEST']._serialized_start = 21397 - _globals['_DELETEROBOTREQUEST']._serialized_end = 21433 - _globals['_DELETEROBOTRESPONSE']._serialized_start = 21435 - _globals['_DELETEROBOTRESPONSE']._serialized_end = 21456 - _globals['_GETROBOTMETADATAREQUEST']._serialized_start = 21458 - _globals['_GETROBOTMETADATAREQUEST']._serialized_end = 21499 - _globals['_GETROBOTMETADATARESPONSE']._serialized_start = 21501 - _globals['_GETROBOTMETADATARESPONSE']._serialized_end = 21572 - _globals['_UPDATEROBOTMETADATAREQUEST']._serialized_start = 21574 - _globals['_UPDATEROBOTMETADATAREQUEST']._serialized_end = 21663 - _globals['_UPDATEROBOTMETADATARESPONSE']._serialized_start = 21665 - _globals['_UPDATEROBOTMETADATARESPONSE']._serialized_end = 21694 - _globals['_MARKPARTASMAINREQUEST']._serialized_start = 21696 - _globals['_MARKPARTASMAINREQUEST']._serialized_end = 21744 - _globals['_MARKPARTASMAINRESPONSE']._serialized_start = 21746 - _globals['_MARKPARTASMAINRESPONSE']._serialized_end = 21770 - _globals['_MARKPARTFORRESTARTREQUEST']._serialized_start = 21772 - _globals['_MARKPARTFORRESTARTREQUEST']._serialized_end = 21824 - _globals['_MARKPARTFORRESTARTRESPONSE']._serialized_start = 21826 - _globals['_MARKPARTFORRESTARTRESPONSE']._serialized_end = 21854 - _globals['_CREATEROBOTPARTSECRETREQUEST']._serialized_start = 21856 - _globals['_CREATEROBOTPARTSECRETREQUEST']._serialized_end = 21911 - _globals['_CREATEROBOTPARTSECRETRESPONSE']._serialized_start = 21913 - _globals['_CREATEROBOTPARTSECRETRESPONSE']._serialized_end = 21988 - _globals['_DELETEROBOTPARTSECRETREQUEST']._serialized_start = 21990 - _globals['_DELETEROBOTPARTSECRETREQUEST']._serialized_end = 22074 - _globals['_DELETEROBOTPARTSECRETRESPONSE']._serialized_start = 22076 - _globals['_DELETEROBOTPARTSECRETRESPONSE']._serialized_end = 22107 - _globals['_AUTHORIZATION']._serialized_start = 22110 - _globals['_AUTHORIZATION']._serialized_end = 22396 - _globals['_ADDROLEREQUEST']._serialized_start = 22398 - _globals['_ADDROLEREQUEST']._serialized_end = 22480 - _globals['_ADDROLERESPONSE']._serialized_start = 22482 - _globals['_ADDROLERESPONSE']._serialized_end = 22499 - _globals['_REMOVEROLEREQUEST']._serialized_start = 22501 - _globals['_REMOVEROLEREQUEST']._serialized_end = 22586 - _globals['_REMOVEROLERESPONSE']._serialized_start = 22588 - _globals['_REMOVEROLERESPONSE']._serialized_end = 22608 - _globals['_CHANGEROLEREQUEST']._serialized_start = 22611 - _globals['_CHANGEROLEREQUEST']._serialized_end = 22776 - _globals['_CHANGEROLERESPONSE']._serialized_start = 22778 - _globals['_CHANGEROLERESPONSE']._serialized_end = 22798 - _globals['_LISTAUTHORIZATIONSREQUEST']._serialized_start = 22800 - _globals['_LISTAUTHORIZATIONSREQUEST']._serialized_end = 22903 - _globals['_LISTAUTHORIZATIONSRESPONSE']._serialized_start = 22905 - _globals['_LISTAUTHORIZATIONSRESPONSE']._serialized_end = 23001 - _globals['_CHECKPERMISSIONSREQUEST']._serialized_start = 23003 - _globals['_CHECKPERMISSIONSREQUEST']._serialized_end = 23098 - _globals['_AUTHORIZEDPERMISSIONS']._serialized_start = 23100 - _globals['_AUTHORIZEDPERMISSIONS']._serialized_end = 23227 - _globals['_CHECKPERMISSIONSRESPONSE']._serialized_start = 23229 - _globals['_CHECKPERMISSIONSRESPONSE']._serialized_end = 23346 - _globals['_MODULEVERSION']._serialized_start = 23349 - _globals['_MODULEVERSION']._serialized_end = 23677 - _globals['_MODULEMETADATA']._serialized_start = 23680 - _globals['_MODULEMETADATA']._serialized_end = 24155 - _globals['_MLMODELMETADATA']._serialized_start = 24158 - _globals['_MLMODELMETADATA']._serialized_end = 24350 - _globals['_MLTRAININGVERSION']._serialized_start = 24352 - _globals['_MLTRAININGVERSION']._serialized_end = 24456 - _globals['_MLTRAININGMETADATA']._serialized_start = 24459 - _globals['_MLTRAININGMETADATA']._serialized_end = 24714 - _globals['_REGISTRYITEM']._serialized_start = 24717 - _globals['_REGISTRYITEM']._serialized_end = 25625 - _globals['_GETREGISTRYITEMREQUEST']._serialized_start = 25628 - _globals['_GETREGISTRYITEMREQUEST']._serialized_end = 25787 - _globals['_GETREGISTRYITEMRESPONSE']._serialized_start = 25789 - _globals['_GETREGISTRYITEMRESPONSE']._serialized_end = 25861 - _globals['_CREATEREGISTRYITEMREQUEST']._serialized_start = 25864 - _globals['_CREATEREGISTRYITEMREQUEST']._serialized_end = 26007 - _globals['_CREATEREGISTRYITEMRESPONSE']._serialized_start = 26009 - _globals['_CREATEREGISTRYITEMRESPONSE']._serialized_end = 26037 - _globals['_UPDATEREGISTRYITEMREQUEST']._serialized_start = 26040 - _globals['_UPDATEREGISTRYITEMREQUEST']._serialized_end = 26652 - _globals['_UPDATEREGISTRYITEMRESPONSE']._serialized_start = 26654 - _globals['_UPDATEREGISTRYITEMRESPONSE']._serialized_end = 26682 - _globals['_LISTREGISTRYITEMSREQUEST']._serialized_start = 26685 - _globals['_LISTREGISTRYITEMSREQUEST']._serialized_end = 27397 - _globals['_LISTREGISTRYITEMSRESPONSE']._serialized_start = 27399 - _globals['_LISTREGISTRYITEMSRESPONSE']._serialized_end = 27475 - _globals['_DELETEREGISTRYITEMREQUEST']._serialized_start = 27477 - _globals['_DELETEREGISTRYITEMREQUEST']._serialized_end = 27529 - _globals['_DELETEREGISTRYITEMRESPONSE']._serialized_start = 27531 - _globals['_DELETEREGISTRYITEMRESPONSE']._serialized_end = 27559 - _globals['_RENAMEREGISTRYITEMREQUEST']._serialized_start = 27561 - _globals['_RENAMEREGISTRYITEMREQUEST']._serialized_end = 27640 - _globals['_RENAMEREGISTRYITEMRESPONSE']._serialized_start = 27642 - _globals['_RENAMEREGISTRYITEMRESPONSE']._serialized_end = 27717 - _globals['_TRANSFERREGISTRYITEMREQUEST']._serialized_start = 27719 - _globals['_TRANSFERREGISTRYITEMREQUEST']._serialized_end = 27823 - _globals['_TRANSFERREGISTRYITEMRESPONSE']._serialized_start = 27825 - _globals['_TRANSFERREGISTRYITEMRESPONSE']._serialized_end = 27855 - _globals['_CREATEMODULEREQUEST']._serialized_start = 27857 - _globals['_CREATEMODULEREQUEST']._serialized_end = 27939 - _globals['_CREATEMODULERESPONSE']._serialized_start = 27941 - _globals['_CREATEMODULERESPONSE']._serialized_end = 28010 - _globals['_UPDATEMODULEREQUEST']._serialized_start = 28013 - _globals['_UPDATEMODULEREQUEST']._serialized_end = 28415 - _globals['_APP']._serialized_start = 28418 - _globals['_APP']._serialized_end = 28650 - _globals['_UPDATEMODULERESPONSE']._serialized_start = 28652 - _globals['_UPDATEMODULERESPONSE']._serialized_end = 28692 - _globals['_UPDATEMODULEMETADATA']._serialized_start = 28695 - _globals['_UPDATEMODULEMETADATA']._serialized_end = 28991 - _globals['_UPDATEMLMODELMETADATA']._serialized_start = 28994 - _globals['_UPDATEMLMODELMETADATA']._serialized_end = 29164 - _globals['_UPDATEMLTRAININGMETADATA']._serialized_start = 29167 - _globals['_UPDATEMLTRAININGMETADATA']._serialized_end = 29362 - _globals['_MODEL']._serialized_start = 29365 - _globals['_MODEL']._serialized_end = 29601 - _globals['_MODULEFILEINFO']._serialized_start = 29604 - _globals['_MODULEFILEINFO']._serialized_end = 29740 - _globals['_UPLOADMODULEFILEREQUEST']._serialized_start = 29743 - _globals['_UPLOADMODULEFILEREQUEST']._serialized_end = 29878 - _globals['_UPLOADMODULEFILERESPONSE']._serialized_start = 29880 - _globals['_UPLOADMODULEFILERESPONSE']._serialized_end = 29924 - _globals['_GETMODULEREQUEST']._serialized_start = 29927 - _globals['_GETMODULEREQUEST']._serialized_end = 30084 - _globals['_GETMODULERESPONSE']._serialized_start = 30086 - _globals['_GETMODULERESPONSE']._serialized_end = 30150 - _globals['_MODULE']._serialized_start = 30153 - _globals['_MODULE']._serialized_end = 30805 - _globals['_VERSIONHISTORY']._serialized_start = 30808 - _globals['_VERSIONHISTORY']._serialized_end = 31137 - _globals['_UPLOADS']._serialized_start = 31139 - _globals['_UPLOADS']._serialized_end = 31237 - _globals['_LISTMODULESREQUEST']._serialized_start = 31240 - _globals['_LISTMODULESREQUEST']._serialized_end = 31436 - _globals['_LISTMODULESRESPONSE']._serialized_start = 31438 - _globals['_LISTMODULESRESPONSE']._serialized_end = 31506 - _globals['_GETUSERIDBYEMAILREQUEST']._serialized_start = 31508 - _globals['_GETUSERIDBYEMAILREQUEST']._serialized_end = 31555 - _globals['_GETUSERIDBYEMAILRESPONSE']._serialized_start = 31557 - _globals['_GETUSERIDBYEMAILRESPONSE']._serialized_end = 31608 - _globals['_LISTORGANIZATIONSBYUSERREQUEST']._serialized_start = 31610 - _globals['_LISTORGANIZATIONSBYUSERREQUEST']._serialized_end = 31667 - _globals['_ORGDETAILS']._serialized_start = 31670 - _globals['_ORGDETAILS']._serialized_end = 31900 - _globals['_LISTORGANIZATIONSBYUSERRESPONSE']._serialized_start = 31902 - _globals['_LISTORGANIZATIONSBYUSERRESPONSE']._serialized_end = 31980 - _globals['_SEARCHORGANIZATIONSREQUEST']._serialized_start = 31983 - _globals['_SEARCHORGANIZATIONSREQUEST']._serialized_end = 32195 - _globals['_SEARCHORGANIZATIONSRESPONSE']._serialized_start = 32197 - _globals['_SEARCHORGANIZATIONSRESPONSE']._serialized_end = 32289 - _globals['_CREATEKEYREQUEST']._serialized_start = 32291 - _globals['_CREATEKEYREQUEST']._serialized_end = 32397 - _globals['_CREATEKEYRESPONSE']._serialized_start = 32399 - _globals['_CREATEKEYRESPONSE']._serialized_end = 32452 - _globals['_DELETEKEYREQUEST']._serialized_start = 32454 - _globals['_DELETEKEYREQUEST']._serialized_end = 32488 - _globals['_DELETEKEYRESPONSE']._serialized_start = 32490 - _globals['_DELETEKEYRESPONSE']._serialized_end = 32509 - _globals['_RENAMEKEYREQUEST']._serialized_start = 32511 - _globals['_RENAMEKEYREQUEST']._serialized_end = 32565 - _globals['_RENAMEKEYRESPONSE']._serialized_start = 32567 - _globals['_RENAMEKEYRESPONSE']._serialized_end = 32622 - _globals['_AUTHORIZATIONDETAILS']._serialized_start = 32625 - _globals['_AUTHORIZATIONDETAILS']._serialized_end = 32830 - _globals['_APIKEYWITHAUTHORIZATIONS']._serialized_start = 32833 - _globals['_APIKEYWITHAUTHORIZATIONS']._serialized_end = 32980 - _globals['_LISTKEYSREQUEST']._serialized_start = 32982 - _globals['_LISTKEYSREQUEST']._serialized_end = 33022 - _globals['_LISTKEYSRESPONSE']._serialized_start = 33024 - _globals['_LISTKEYSRESPONSE']._serialized_end = 33108 - _globals['_ROTATEKEYREQUEST']._serialized_start = 33110 - _globals['_ROTATEKEYREQUEST']._serialized_end = 33144 - _globals['_ROTATEKEYRESPONSE']._serialized_start = 33146 - _globals['_ROTATEKEYRESPONSE']._serialized_end = 33199 - _globals['_CREATEKEYFROMEXISTINGKEYAUTHORIZATIONSREQUEST']._serialized_start = 33201 - _globals['_CREATEKEYFROMEXISTINGKEYAUTHORIZATIONSREQUEST']._serialized_end = 33264 - _globals['_CREATEKEYFROMEXISTINGKEYAUTHORIZATIONSRESPONSE']._serialized_start = 33266 - _globals['_CREATEKEYFROMEXISTINGKEYAUTHORIZATIONSRESPONSE']._serialized_end = 33348 - _globals['_GETAPPCONTENTREQUEST']._serialized_start = 33350 - _globals['_GETAPPCONTENTREQUEST']._serialized_end = 33435 - _globals['_GETAPPCONTENTRESPONSE']._serialized_start = 33438 - _globals['_GETAPPCONTENTRESPONSE']._serialized_end = 33571 - _globals['_ORGANIZATIONSETLOGOREQUEST']._serialized_start = 33573 - _globals['_ORGANIZATIONSETLOGOREQUEST']._serialized_end = 33644 - _globals['_ORGANIZATIONSETLOGORESPONSE']._serialized_start = 33646 - _globals['_ORGANIZATIONSETLOGORESPONSE']._serialized_end = 33675 - _globals['_ORGANIZATIONGETLOGOREQUEST']._serialized_start = 33677 - _globals['_ORGANIZATIONGETLOGOREQUEST']._serialized_end = 33728 - _globals['_ORGANIZATIONGETLOGORESPONSE']._serialized_start = 33730 - _globals['_ORGANIZATIONGETLOGORESPONSE']._serialized_end = 33777 - _globals['_ENABLEAUTHSERVICEREQUEST']._serialized_start = 33779 - _globals['_ENABLEAUTHSERVICEREQUEST']._serialized_end = 33828 - _globals['_ENABLEAUTHSERVICERESPONSE']._serialized_start = 33830 - _globals['_ENABLEAUTHSERVICERESPONSE']._serialized_end = 33857 - _globals['_DISABLEAUTHSERVICEREQUEST']._serialized_start = 33859 - _globals['_DISABLEAUTHSERVICEREQUEST']._serialized_end = 33909 - _globals['_DISABLEAUTHSERVICERESPONSE']._serialized_start = 33911 - _globals['_DISABLEAUTHSERVICERESPONSE']._serialized_end = 33939 - _globals['_CREATEOAUTHAPPREQUEST']._serialized_start = 33942 - _globals['_CREATEOAUTHAPPREQUEST']._serialized_end = 34082 - _globals['_CREATEOAUTHAPPRESPONSE']._serialized_start = 34084 - _globals['_CREATEOAUTHAPPRESPONSE']._serialized_end = 34174 - _globals['_READOAUTHAPPREQUEST']._serialized_start = 34176 - _globals['_READOAUTHAPPREQUEST']._serialized_end = 34249 - _globals['_READOAUTHAPPRESPONSE']._serialized_start = 34252 - _globals['_READOAUTHAPPRESPONSE']._serialized_end = 34405 - _globals['_UPDATEOAUTHAPPREQUEST']._serialized_start = 34408 - _globals['_UPDATEOAUTHAPPREQUEST']._serialized_end = 34577 - _globals['_UPDATEOAUTHAPPRESPONSE']._serialized_start = 34579 - _globals['_UPDATEOAUTHAPPRESPONSE']._serialized_end = 34603 - _globals['_DELETEOAUTHAPPREQUEST']._serialized_start = 34605 - _globals['_DELETEOAUTHAPPREQUEST']._serialized_end = 34680 - _globals['_DELETEOAUTHAPPRESPONSE']._serialized_start = 34682 - _globals['_DELETEOAUTHAPPRESPONSE']._serialized_end = 34706 - _globals['_LISTOAUTHAPPSREQUEST']._serialized_start = 34708 - _globals['_LISTOAUTHAPPSREQUEST']._serialized_end = 34753 - _globals['_LISTOAUTHAPPSRESPONSE']._serialized_start = 34755 - _globals['_LISTOAUTHAPPSRESPONSE']._serialized_end = 34809 - _globals['_OAUTHCONFIG']._serialized_start = 34812 - _globals['_OAUTHCONFIG']._serialized_end = 35186 - _globals['_GETAPPBRANDINGREQUEST']._serialized_start = 35188 - _globals['_GETAPPBRANDINGREQUEST']._serialized_end = 35274 - _globals['_TEXTOVERRIDES']._serialized_start = 35277 - _globals['_TEXTOVERRIDES']._serialized_end = 35415 - _globals['_TEXTOVERRIDES_FIELDSENTRY']._serialized_start = 35358 - _globals['_TEXTOVERRIDES_FIELDSENTRY']._serialized_end = 35415 - _globals['_GETAPPBRANDINGRESPONSE']._serialized_start = 35418 - _globals['_GETAPPBRANDINGRESPONSE']._serialized_end = 35734 - _globals['_GETAPPBRANDINGRESPONSE_TEXTCUSTOMIZATIONSENTRY']._serialized_start = 35623 - _globals['_GETAPPBRANDINGRESPONSE_TEXTCUSTOMIZATIONSENTRY']._serialized_end = 35720 - _globals['_APPCUSTOMIZATIONS']._serialized_start = 35736 - _globals['_APPCUSTOMIZATIONS']._serialized_end = 35836 - _globals['_MACHINEPICKERCUSTOMIZATIONS']._serialized_start = 35838 - _globals['_MACHINEPICKERCUSTOMIZATIONS']._serialized_end = 35962 - _globals['_APPSERVICE']._serialized_start = 37954 - _globals['_APPSERVICE']._serialized_end = 48956 \ No newline at end of file + _globals['_FRAGMENTIMPORTLIST']._serialized_end = 4087 + _globals['_UPDATEORGANIZATIONREQUEST']._serialized_start = 4090 + _globals['_UPDATEORGANIZATIONREQUEST']._serialized_end = 4437 + _globals['_UPDATEORGANIZATIONRESPONSE']._serialized_start = 4439 + _globals['_UPDATEORGANIZATIONRESPONSE']._serialized_end = 4530 + _globals['_UPDATEORGANIZATIONNAMESPACEREQUEST']._serialized_start = 4532 + _globals['_UPDATEORGANIZATIONNAMESPACEREQUEST']._serialized_end = 4659 + _globals['_UPDATEORGANIZATIONNAMESPACERESPONSE']._serialized_start = 4661 + _globals['_UPDATEORGANIZATIONNAMESPACERESPONSE']._serialized_end = 4761 + _globals['_DELETEORGANIZATIONREQUEST']._serialized_start = 4763 + _globals['_DELETEORGANIZATIONREQUEST']._serialized_end = 4831 + _globals['_DELETEORGANIZATIONRESPONSE']._serialized_start = 4833 + _globals['_DELETEORGANIZATIONRESPONSE']._serialized_end = 4861 + _globals['_GETORGANIZATIONMETADATAREQUEST']._serialized_start = 4863 + _globals['_GETORGANIZATIONMETADATAREQUEST']._serialized_end = 4936 + _globals['_GETORGANIZATIONMETADATARESPONSE']._serialized_start = 4938 + _globals['_GETORGANIZATIONMETADATARESPONSE']._serialized_end = 5016 + _globals['_UPDATEORGANIZATIONMETADATAREQUEST']._serialized_start = 5018 + _globals['_UPDATEORGANIZATIONMETADATAREQUEST']._serialized_end = 5139 + _globals['_UPDATEORGANIZATIONMETADATARESPONSE']._serialized_start = 5141 + _globals['_UPDATEORGANIZATIONMETADATARESPONSE']._serialized_end = 5177 + _globals['_LISTORGANIZATIONMEMBERSREQUEST']._serialized_start = 5179 + _globals['_LISTORGANIZATIONMEMBERSREQUEST']._serialized_end = 5252 + _globals['_LISTORGANIZATIONMEMBERSRESPONSE']._serialized_start = 5255 + _globals['_LISTORGANIZATIONMEMBERSRESPONSE']._serialized_end = 5447 + _globals['_CREATEORGANIZATIONINVITEREQUEST']._serialized_start = 5450 + _globals['_CREATEORGANIZATIONINVITEREQUEST']._serialized_end = 5685 + _globals['_CREATEORGANIZATIONINVITERESPONSE']._serialized_start = 5687 + _globals['_CREATEORGANIZATIONINVITERESPONSE']._serialized_end = 5778 + _globals['_UPDATEORGANIZATIONINVITEAUTHORIZATIONSREQUEST']._serialized_start = 5781 + _globals['_UPDATEORGANIZATIONINVITEAUTHORIZATIONSREQUEST']._serialized_end = 6047 + _globals['_UPDATEORGANIZATIONINVITEAUTHORIZATIONSRESPONSE']._serialized_start = 6049 + _globals['_UPDATEORGANIZATIONINVITEAUTHORIZATIONSRESPONSE']._serialized_end = 6154 + _globals['_DELETEORGANIZATIONINVITEREQUEST']._serialized_start = 6156 + _globals['_DELETEORGANIZATIONINVITEREQUEST']._serialized_end = 6252 + _globals['_DELETEORGANIZATIONINVITERESPONSE']._serialized_start = 6254 + _globals['_DELETEORGANIZATIONINVITERESPONSE']._serialized_end = 6288 + _globals['_RESENDORGANIZATIONINVITEREQUEST']._serialized_start = 6291 + _globals['_RESENDORGANIZATIONINVITEREQUEST']._serialized_end = 6458 + _globals['_RESENDORGANIZATIONINVITERESPONSE']._serialized_start = 6460 + _globals['_RESENDORGANIZATIONINVITERESPONSE']._serialized_end = 6551 + _globals['_DELETEORGANIZATIONMEMBERREQUEST']._serialized_start = 6553 + _globals['_DELETEORGANIZATIONMEMBERREQUEST']._serialized_end = 6652 + _globals['_DELETEORGANIZATIONMEMBERRESPONSE']._serialized_start = 6654 + _globals['_DELETEORGANIZATIONMEMBERRESPONSE']._serialized_end = 6688 + _globals['_BILLINGADDRESS']._serialized_start = 6691 + _globals['_BILLINGADDRESS']._serialized_end = 6901 + _globals['_ENABLEBILLINGSERVICEREQUEST']._serialized_start = 6903 + _globals['_ENABLEBILLINGSERVICEREQUEST']._serialized_end = 7025 + _globals['_ENABLEBILLINGSERVICERESPONSE']._serialized_start = 7027 + _globals['_ENABLEBILLINGSERVICERESPONSE']._serialized_end = 7057 + _globals['_UPDATEBILLINGSERVICEREQUEST']._serialized_start = 7059 + _globals['_UPDATEBILLINGSERVICEREQUEST']._serialized_end = 7181 + _globals['_UPDATEBILLINGSERVICERESPONSE']._serialized_start = 7183 + _globals['_UPDATEBILLINGSERVICERESPONSE']._serialized_end = 7213 + _globals['_GETBILLINGSERVICECONFIGREQUEST']._serialized_start = 7215 + _globals['_GETBILLINGSERVICECONFIGREQUEST']._serialized_end = 7270 + _globals['_GETBILLINGSERVICECONFIGRESPONSE']._serialized_start = 7273 + _globals['_GETBILLINGSERVICECONFIGRESPONSE']._serialized_end = 7492 + _globals['_DISABLEBILLINGSERVICEREQUEST']._serialized_start = 7494 + _globals['_DISABLEBILLINGSERVICEREQUEST']._serialized_end = 7547 + _globals['_DISABLEBILLINGSERVICERESPONSE']._serialized_start = 7549 + _globals['_DISABLEBILLINGSERVICERESPONSE']._serialized_end = 7580 + _globals['_ORGANIZATIONSETSUPPORTEMAILREQUEST']._serialized_start = 7582 + _globals['_ORGANIZATIONSETSUPPORTEMAILREQUEST']._serialized_end = 7663 + _globals['_ORGANIZATIONSETSUPPORTEMAILRESPONSE']._serialized_start = 7665 + _globals['_ORGANIZATIONSETSUPPORTEMAILRESPONSE']._serialized_end = 7702 + _globals['_ORGANIZATIONGETSUPPORTEMAILREQUEST']._serialized_start = 7704 + _globals['_ORGANIZATIONGETSUPPORTEMAILREQUEST']._serialized_end = 7763 + _globals['_ORGANIZATIONGETSUPPORTEMAILRESPONSE']._serialized_start = 7765 + _globals['_ORGANIZATIONGETSUPPORTEMAILRESPONSE']._serialized_end = 7824 + _globals['_ORGANIZATIONIDENTITY']._serialized_start = 7826 + _globals['_ORGANIZATIONIDENTITY']._serialized_end = 7884 + _globals['_LOCATIONORGANIZATION']._serialized_start = 7886 + _globals['_LOCATIONORGANIZATION']._serialized_end = 7975 + _globals['_LOCATIONAUTH']._serialized_start = 7978 + _globals['_LOCATIONAUTH']._serialized_end = 8106 + _globals['_STORAGECONFIG']._serialized_start = 8108 + _globals['_STORAGECONFIG']._serialized_end = 8147 + _globals['_LOCATION']._serialized_start = 8150 + _globals['_LOCATION']._serialized_end = 8621 + _globals['_SHAREDSECRET']._serialized_start = 8624 + _globals['_SHAREDSECRET']._serialized_end = 8960 + _globals['_SHAREDSECRET_STATE']._serialized_start = 8891 + _globals['_SHAREDSECRET_STATE']._serialized_end = 8960 + _globals['_CREATELOCATIONREQUEST']._serialized_start = 8963 + _globals['_CREATELOCATIONREQUEST']._serialized_end = 9121 + _globals['_CREATELOCATIONRESPONSE']._serialized_start = 9123 + _globals['_CREATELOCATIONRESPONSE']._serialized_end = 9198 + _globals['_GETLOCATIONREQUEST']._serialized_start = 9200 + _globals['_GETLOCATIONREQUEST']._serialized_end = 9253 + _globals['_GETLOCATIONRESPONSE']._serialized_start = 9255 + _globals['_GETLOCATIONRESPONSE']._serialized_end = 9327 + _globals['_UPDATELOCATIONREQUEST']._serialized_start = 9330 + _globals['_UPDATELOCATIONREQUEST']._serialized_end = 9534 + _globals['_UPDATELOCATIONRESPONSE']._serialized_start = 9536 + _globals['_UPDATELOCATIONRESPONSE']._serialized_end = 9611 + _globals['_DELETELOCATIONREQUEST']._serialized_start = 9613 + _globals['_DELETELOCATIONREQUEST']._serialized_end = 9669 + _globals['_DELETELOCATIONRESPONSE']._serialized_start = 9671 + _globals['_DELETELOCATIONRESPONSE']._serialized_end = 9695 + _globals['_GETLOCATIONMETADATAREQUEST']._serialized_start = 9697 + _globals['_GETLOCATIONMETADATAREQUEST']._serialized_end = 9758 + _globals['_GETLOCATIONMETADATARESPONSE']._serialized_start = 9760 + _globals['_GETLOCATIONMETADATARESPONSE']._serialized_end = 9834 + _globals['_UPDATELOCATIONMETADATAREQUEST']._serialized_start = 9836 + _globals['_UPDATELOCATIONMETADATAREQUEST']._serialized_end = 9945 + _globals['_UPDATELOCATIONMETADATARESPONSE']._serialized_start = 9947 + _globals['_UPDATELOCATIONMETADATARESPONSE']._serialized_end = 9979 + _globals['_GETORGANIZATIONSWITHACCESSTOLOCATIONREQUEST']._serialized_start = 9981 + _globals['_GETORGANIZATIONSWITHACCESSTOLOCATIONREQUEST']._serialized_end = 10059 + _globals['_GETORGANIZATIONSWITHACCESSTOLOCATIONRESPONSE']._serialized_start = 10062 + _globals['_GETORGANIZATIONSWITHACCESSTOLOCATIONRESPONSE']._serialized_end = 10200 + _globals['_LISTLOCATIONSREQUEST']._serialized_start = 10202 + _globals['_LISTLOCATIONSREQUEST']._serialized_end = 10265 + _globals['_SHARELOCATIONREQUEST']._serialized_start = 10267 + _globals['_SHARELOCATIONREQUEST']._serialized_end = 10363 + _globals['_SHARELOCATIONRESPONSE']._serialized_start = 10365 + _globals['_SHARELOCATIONRESPONSE']._serialized_end = 10388 + _globals['_UNSHARELOCATIONREQUEST']._serialized_start = 10390 + _globals['_UNSHARELOCATIONREQUEST']._serialized_end = 10488 + _globals['_UNSHARELOCATIONRESPONSE']._serialized_start = 10490 + _globals['_UNSHARELOCATIONRESPONSE']._serialized_end = 10515 + _globals['_LISTLOCATIONSRESPONSE']._serialized_start = 10517 + _globals['_LISTLOCATIONSRESPONSE']._serialized_end = 10593 + _globals['_CREATELOCATIONSECRETREQUEST']._serialized_start = 10595 + _globals['_CREATELOCATIONSECRETREQUEST']._serialized_end = 10657 + _globals['_CREATELOCATIONSECRETRESPONSE']._serialized_start = 10659 + _globals['_CREATELOCATIONSECRETRESPONSE']._serialized_end = 10736 + _globals['_DELETELOCATIONSECRETREQUEST']._serialized_start = 10738 + _globals['_DELETELOCATIONSECRETREQUEST']._serialized_end = 10829 + _globals['_DELETELOCATIONSECRETRESPONSE']._serialized_start = 10831 + _globals['_DELETELOCATIONSECRETRESPONSE']._serialized_end = 10861 + _globals['_LOCATIONAUTHREQUEST']._serialized_start = 10863 + _globals['_LOCATIONAUTHREQUEST']._serialized_end = 10917 + _globals['_LOCATIONAUTHRESPONSE']._serialized_start = 10919 + _globals['_LOCATIONAUTHRESPONSE']._serialized_end = 10988 + _globals['_GETROBOTREQUEST']._serialized_start = 10990 + _globals['_GETROBOTREQUEST']._serialized_end = 11023 + _globals['_GETROVERRENTALROBOTSREQUEST']._serialized_start = 11025 + _globals['_GETROVERRENTALROBOTSREQUEST']._serialized_end = 11077 + _globals['_ROVERRENTALROBOT']._serialized_start = 11080 + _globals['_ROVERRENTALROBOT']._serialized_end = 11234 + _globals['_GETROVERRENTALROBOTSRESPONSE']._serialized_start = 11236 + _globals['_GETROVERRENTALROBOTSRESPONSE']._serialized_end = 11321 + _globals['_GETROBOTRESPONSE']._serialized_start = 11323 + _globals['_GETROBOTRESPONSE']._serialized_end = 11383 + _globals['_GETROBOTPARTSREQUEST']._serialized_start = 11385 + _globals['_GETROBOTPARTSREQUEST']._serialized_end = 11434 + _globals['_GETROBOTPARTSRESPONSE']._serialized_start = 11436 + _globals['_GETROBOTPARTSRESPONSE']._serialized_end = 11505 + _globals['_GETROBOTPARTREQUEST']._serialized_start = 11507 + _globals['_GETROBOTPARTREQUEST']._serialized_end = 11544 + _globals['_GETROBOTPARTRESPONSE']._serialized_start = 11546 + _globals['_GETROBOTPARTRESPONSE']._serialized_end = 11645 + _globals['_GETROBOTPARTBYNAMEANDLOCATIONREQUEST']._serialized_start = 11647 + _globals['_GETROBOTPARTBYNAMEANDLOCATIONREQUEST']._serialized_end = 11738 + _globals['_GETROBOTPARTBYNAMEANDLOCATIONRESPONSE']._serialized_start = 11740 + _globals['_GETROBOTPARTBYNAMEANDLOCATIONRESPONSE']._serialized_end = 11823 + _globals['_GETROBOTPARTLOGSREQUEST']._serialized_start = 11826 + _globals['_GETROBOTPARTLOGSREQUEST']._serialized_end = 12288 + _globals['_GETROBOTPARTLOGSRESPONSE']._serialized_start = 12290 + _globals['_GETROBOTPARTLOGSRESPONSE']._serialized_end = 12402 + _globals['_TAILROBOTPARTLOGSREQUEST']._serialized_start = 12404 + _globals['_TAILROBOTPARTLOGSREQUEST']._serialized_end = 12519 + _globals['_TAILROBOTPARTLOGSRESPONSE']._serialized_start = 12521 + _globals['_TAILROBOTPARTLOGSRESPONSE']._serialized_end = 12594 + _globals['_GETROBOTPARTHISTORYREQUEST']._serialized_start = 12596 + _globals['_GETROBOTPARTHISTORYREQUEST']._serialized_end = 12640 + _globals['_GETROBOTPARTHISTORYRESPONSE']._serialized_start = 12642 + _globals['_GETROBOTPARTHISTORYRESPONSE']._serialized_end = 12733 + _globals['_UPDATEROBOTPARTREQUEST']._serialized_start = 12736 + _globals['_UPDATEROBOTPARTREQUEST']._serialized_end = 12955 + _globals['_UPDATEROBOTPARTRESPONSE']._serialized_start = 12957 + _globals['_UPDATEROBOTPARTRESPONSE']._serialized_end = 13026 + _globals['_NEWROBOTPARTREQUEST']._serialized_start = 13028 + _globals['_NEWROBOTPARTREQUEST']._serialized_end = 13105 + _globals['_NEWROBOTPARTRESPONSE']._serialized_start = 13107 + _globals['_NEWROBOTPARTRESPONSE']._serialized_end = 13154 + _globals['_DELETEROBOTPARTREQUEST']._serialized_start = 13156 + _globals['_DELETEROBOTPARTREQUEST']._serialized_end = 13205 + _globals['_GETROBOTPARTMETADATAREQUEST']._serialized_start = 13207 + _globals['_GETROBOTPARTMETADATAREQUEST']._serialized_end = 13252 + _globals['_GETROBOTPARTMETADATARESPONSE']._serialized_start = 13254 + _globals['_GETROBOTPARTMETADATARESPONSE']._serialized_end = 13329 + _globals['_UPDATEROBOTPARTMETADATAREQUEST']._serialized_start = 13331 + _globals['_UPDATEROBOTPARTMETADATAREQUEST']._serialized_end = 13424 + _globals['_UPDATEROBOTPARTMETADATARESPONSE']._serialized_start = 13426 + _globals['_UPDATEROBOTPARTMETADATARESPONSE']._serialized_end = 13459 + _globals['_GETROBOTAPIKEYSREQUEST']._serialized_start = 13461 + _globals['_GETROBOTAPIKEYSREQUEST']._serialized_end = 13512 + _globals['_APIKEY']._serialized_start = 13514 + _globals['_APIKEY']._serialized_end = 13635 + _globals['_GETROBOTAPIKEYSRESPONSE']._serialized_start = 13637 + _globals['_GETROBOTAPIKEYSRESPONSE']._serialized_end = 13728 + _globals['_DELETEROBOTPARTRESPONSE']._serialized_start = 13730 + _globals['_DELETEROBOTPARTRESPONSE']._serialized_end = 13755 + _globals['_FRAGMENT']._serialized_start = 13758 + _globals['_FRAGMENT']._serialized_end = 14559 + _globals['_FRAGMENTHISTORYENTRY']._serialized_start = 14562 + _globals['_FRAGMENTHISTORYENTRY']._serialized_end = 15066 + _globals['_FRAGMENTREVISION']._serialized_start = 15068 + _globals['_FRAGMENTREVISION']._serialized_end = 15173 + _globals['_FRAGMENTTAG']._serialized_start = 15175 + _globals['_FRAGMENTTAG']._serialized_end = 15234 + _globals['_FRAGMENTERROR']._serialized_start = 15237 + _globals['_FRAGMENTERROR']._serialized_end = 15372 + _globals['_FRAGMENTUSAGE']._serialized_start = 15375 + _globals['_FRAGMENTUSAGE']._serialized_end = 15587 + _globals['_FRAGMENTIMPORT']._serialized_start = 15590 + _globals['_FRAGMENTIMPORT']._serialized_end = 15841 + _globals['_FRAGMENTIMPORT_VARIABLESENTRY']._serialized_start = 15770 + _globals['_FRAGMENTIMPORT_VARIABLESENTRY']._serialized_end = 15830 + _globals['_RESOLVEDFRAGMENT']._serialized_start = 15844 + _globals['_RESOLVEDFRAGMENT']._serialized_end = 16039 + _globals['_LISTFRAGMENTSREQUEST']._serialized_start = 16042 + _globals['_LISTFRAGMENTSREQUEST']._serialized_end = 16220 + _globals['_LISTFRAGMENTSRESPONSE']._serialized_start = 16223 + _globals['_LISTFRAGMENTSRESPONSE']._serialized_end = 16368 + _globals['_GETFRAGMENTREQUEST']._serialized_start = 16371 + _globals['_GETFRAGMENTREQUEST']._serialized_end = 16506 + _globals['_GETFRAGMENTRESPONSE']._serialized_start = 16509 + _globals['_GETFRAGMENTRESPONSE']._serialized_end = 16755 + _globals['_CREATEFRAGMENTREQUEST']._serialized_start = 16758 + _globals['_CREATEFRAGMENTREQUEST']._serialized_end = 16976 + _globals['_CREATEFRAGMENTRESPONSE']._serialized_start = 16978 + _globals['_CREATEFRAGMENTRESPONSE']._serialized_end = 17053 + _globals['_UPDATEFRAGMENTREQUEST']._serialized_start = 17056 + _globals['_UPDATEFRAGMENTREQUEST']._serialized_end = 17388 + _globals['_UPDATEFRAGMENTRESPONSE']._serialized_start = 17390 + _globals['_UPDATEFRAGMENTRESPONSE']._serialized_end = 17465 + _globals['_DELETEFRAGMENTREQUEST']._serialized_start = 17467 + _globals['_DELETEFRAGMENTREQUEST']._serialized_end = 17506 + _globals['_DELETEFRAGMENTRESPONSE']._serialized_start = 17508 + _globals['_DELETEFRAGMENTRESPONSE']._serialized_end = 17532 + _globals['_GETFRAGMENTHISTORYREQUEST']._serialized_start = 17535 + _globals['_GETFRAGMENTHISTORYREQUEST']._serialized_end = 17680 + _globals['_GETFRAGMENTHISTORYRESPONSE']._serialized_start = 17683 + _globals['_GETFRAGMENTHISTORYRESPONSE']._serialized_end = 17812 + _globals['_GETFRAGMENTUSAGEREQUEST']._serialized_start = 17814 + _globals['_GETFRAGMENTUSAGEREQUEST']._serialized_end = 17872 + _globals['_GETFRAGMENTUSAGERESPONSE']._serialized_start = 17874 + _globals['_GETFRAGMENTUSAGERESPONSE']._serialized_end = 17967 + _globals['_SETFRAGMENTTAGREQUEST']._serialized_start = 17969 + _globals['_SETFRAGMENTTAGREQUEST']._serialized_end = 18071 + _globals['_SETFRAGMENTTAGRESPONSE']._serialized_start = 18073 + _globals['_SETFRAGMENTTAGRESPONSE']._serialized_end = 18143 + _globals['_DELETEFRAGMENTTAGREQUEST']._serialized_start = 18145 + _globals['_DELETEFRAGMENTTAGREQUEST']._serialized_end = 18222 + _globals['_DELETEFRAGMENTTAGRESPONSE']._serialized_start = 18224 + _globals['_DELETEFRAGMENTTAGRESPONSE']._serialized_end = 18297 + _globals['_LISTROBOTSREQUEST']._serialized_start = 18299 + _globals['_LISTROBOTSREQUEST']._serialized_end = 18351 + _globals['_LISTROBOTSFORLOCATIONSREQUEST']._serialized_start = 18353 + _globals['_LISTROBOTSFORLOCATIONSREQUEST']._serialized_end = 18419 + _globals['_LISTROBOTSFORORGREQUEST']._serialized_start = 18421 + _globals['_LISTROBOTSFORORGREQUEST']._serialized_end = 18469 + _globals['_ADDITIONALFRAGMENT']._serialized_start = 18471 + _globals['_ADDITIONALFRAGMENT']._serialized_end = 18567 + _globals['_LISTNESTEDFRAGMENTSREQUEST']._serialized_start = 18570 + _globals['_LISTNESTEDFRAGMENTSREQUEST']._serialized_end = 18736 + _globals['_LISTNESTEDFRAGMENTSRESPONSE']._serialized_start = 18739 + _globals['_LISTNESTEDFRAGMENTSRESPONSE']._serialized_end = 18899 + _globals['_LISTMACHINEFRAGMENTSREQUEST']._serialized_start = 18902 + _globals['_LISTMACHINEFRAGMENTSREQUEST']._serialized_end = 19102 + _globals['_LISTMACHINEFRAGMENTSRESPONSE']._serialized_start = 19105 + _globals['_LISTMACHINEFRAGMENTSRESPONSE']._serialized_end = 19266 + _globals['_LISTMACHINESUMMARIESREQUEST']._serialized_start = 19269 + _globals['_LISTMACHINESUMMARIESREQUEST']._serialized_end = 19446 + _globals['_LISTMACHINESUMMARIESRESPONSE']._serialized_start = 19448 + _globals['_LISTMACHINESUMMARIESRESPONSE']._serialized_end = 19555 + _globals['_LOCATIONSUMMARY']._serialized_start = 19558 + _globals['_LOCATIONSUMMARY']._serialized_end = 19719 + _globals['_MACHINESUMMARY']._serialized_start = 19722 + _globals['_MACHINESUMMARY']._serialized_end = 19869 + _globals['_FRAGMENTSUMMARY']._serialized_start = 19871 + _globals['_FRAGMENTSUMMARY']._serialized_end = 19930 + _globals['_VIAMSERVERVERSION']._serialized_start = 19932 + _globals['_VIAMSERVERVERSION']._serialized_end = 20010 + _globals['_VIAMAGENTVERSION']._serialized_start = 20012 + _globals['_VIAMAGENTVERSION']._serialized_end = 20089 + _globals['_PARTSUMMARY']._serialized_start = 20092 + _globals['_PARTSUMMARY']._serialized_end = 20932 + _globals['_LISTROBOTSRESPONSE']._serialized_start = 20934 + _globals['_LISTROBOTSRESPONSE']._serialized_end = 20998 + _globals['_LISTROBOTSFORLOCATIONSRESPONSE']._serialized_start = 21000 + _globals['_LISTROBOTSFORLOCATIONSRESPONSE']._serialized_end = 21076 + _globals['_LISTROBOTSFORORGRESPONSE']._serialized_start = 21078 + _globals['_LISTROBOTSFORORGRESPONSE']._serialized_end = 21148 + _globals['_NEWROBOTREQUEST']._serialized_start = 21150 + _globals['_NEWROBOTREQUEST']._serialized_end = 21215 + _globals['_NEWROBOTRESPONSE']._serialized_start = 21217 + _globals['_NEWROBOTRESPONSE']._serialized_end = 21251 + _globals['_UPDATEROBOTREQUEST']._serialized_start = 21253 + _globals['_UPDATEROBOTREQUEST']._serialized_end = 21337 + _globals['_UPDATEROBOTRESPONSE']._serialized_start = 21339 + _globals['_UPDATEROBOTRESPONSE']._serialized_end = 21402 + _globals['_DELETEROBOTREQUEST']._serialized_start = 21404 + _globals['_DELETEROBOTREQUEST']._serialized_end = 21440 + _globals['_DELETEROBOTRESPONSE']._serialized_start = 21442 + _globals['_DELETEROBOTRESPONSE']._serialized_end = 21463 + _globals['_GETROBOTMETADATAREQUEST']._serialized_start = 21465 + _globals['_GETROBOTMETADATAREQUEST']._serialized_end = 21506 + _globals['_GETROBOTMETADATARESPONSE']._serialized_start = 21508 + _globals['_GETROBOTMETADATARESPONSE']._serialized_end = 21579 + _globals['_UPDATEROBOTMETADATAREQUEST']._serialized_start = 21581 + _globals['_UPDATEROBOTMETADATAREQUEST']._serialized_end = 21670 + _globals['_UPDATEROBOTMETADATARESPONSE']._serialized_start = 21672 + _globals['_UPDATEROBOTMETADATARESPONSE']._serialized_end = 21701 + _globals['_MARKPARTASMAINREQUEST']._serialized_start = 21703 + _globals['_MARKPARTASMAINREQUEST']._serialized_end = 21751 + _globals['_MARKPARTASMAINRESPONSE']._serialized_start = 21753 + _globals['_MARKPARTASMAINRESPONSE']._serialized_end = 21777 + _globals['_MARKPARTFORRESTARTREQUEST']._serialized_start = 21779 + _globals['_MARKPARTFORRESTARTREQUEST']._serialized_end = 21831 + _globals['_MARKPARTFORRESTARTRESPONSE']._serialized_start = 21833 + _globals['_MARKPARTFORRESTARTRESPONSE']._serialized_end = 21861 + _globals['_CREATEROBOTPARTSECRETREQUEST']._serialized_start = 21863 + _globals['_CREATEROBOTPARTSECRETREQUEST']._serialized_end = 21918 + _globals['_CREATEROBOTPARTSECRETRESPONSE']._serialized_start = 21920 + _globals['_CREATEROBOTPARTSECRETRESPONSE']._serialized_end = 21995 + _globals['_DELETEROBOTPARTSECRETREQUEST']._serialized_start = 21997 + _globals['_DELETEROBOTPARTSECRETREQUEST']._serialized_end = 22081 + _globals['_DELETEROBOTPARTSECRETRESPONSE']._serialized_start = 22083 + _globals['_DELETEROBOTPARTSECRETRESPONSE']._serialized_end = 22114 + _globals['_AUTHORIZATION']._serialized_start = 22117 + _globals['_AUTHORIZATION']._serialized_end = 22403 + _globals['_ADDROLEREQUEST']._serialized_start = 22405 + _globals['_ADDROLEREQUEST']._serialized_end = 22487 + _globals['_ADDROLERESPONSE']._serialized_start = 22489 + _globals['_ADDROLERESPONSE']._serialized_end = 22506 + _globals['_REMOVEROLEREQUEST']._serialized_start = 22508 + _globals['_REMOVEROLEREQUEST']._serialized_end = 22593 + _globals['_REMOVEROLERESPONSE']._serialized_start = 22595 + _globals['_REMOVEROLERESPONSE']._serialized_end = 22615 + _globals['_CHANGEROLEREQUEST']._serialized_start = 22618 + _globals['_CHANGEROLEREQUEST']._serialized_end = 22783 + _globals['_CHANGEROLERESPONSE']._serialized_start = 22785 + _globals['_CHANGEROLERESPONSE']._serialized_end = 22805 + _globals['_LISTAUTHORIZATIONSREQUEST']._serialized_start = 22807 + _globals['_LISTAUTHORIZATIONSREQUEST']._serialized_end = 22910 + _globals['_LISTAUTHORIZATIONSRESPONSE']._serialized_start = 22912 + _globals['_LISTAUTHORIZATIONSRESPONSE']._serialized_end = 23008 + _globals['_CHECKPERMISSIONSREQUEST']._serialized_start = 23010 + _globals['_CHECKPERMISSIONSREQUEST']._serialized_end = 23105 + _globals['_AUTHORIZEDPERMISSIONS']._serialized_start = 23107 + _globals['_AUTHORIZEDPERMISSIONS']._serialized_end = 23234 + _globals['_CHECKPERMISSIONSRESPONSE']._serialized_start = 23236 + _globals['_CHECKPERMISSIONSRESPONSE']._serialized_end = 23353 + _globals['_MODULEVERSION']._serialized_start = 23356 + _globals['_MODULEVERSION']._serialized_end = 23684 + _globals['_MODULEMETADATA']._serialized_start = 23687 + _globals['_MODULEMETADATA']._serialized_end = 24162 + _globals['_MLMODELMETADATA']._serialized_start = 24165 + _globals['_MLMODELMETADATA']._serialized_end = 24357 + _globals['_MLTRAININGVERSION']._serialized_start = 24359 + _globals['_MLTRAININGVERSION']._serialized_end = 24463 + _globals['_MLTRAININGMETADATA']._serialized_start = 24466 + _globals['_MLTRAININGMETADATA']._serialized_end = 24721 + _globals['_REGISTRYITEM']._serialized_start = 24724 + _globals['_REGISTRYITEM']._serialized_end = 25632 + _globals['_GETREGISTRYITEMREQUEST']._serialized_start = 25635 + _globals['_GETREGISTRYITEMREQUEST']._serialized_end = 25794 + _globals['_GETREGISTRYITEMRESPONSE']._serialized_start = 25796 + _globals['_GETREGISTRYITEMRESPONSE']._serialized_end = 25868 + _globals['_CREATEREGISTRYITEMREQUEST']._serialized_start = 25871 + _globals['_CREATEREGISTRYITEMREQUEST']._serialized_end = 26014 + _globals['_CREATEREGISTRYITEMRESPONSE']._serialized_start = 26016 + _globals['_CREATEREGISTRYITEMRESPONSE']._serialized_end = 26044 + _globals['_UPDATEREGISTRYITEMREQUEST']._serialized_start = 26047 + _globals['_UPDATEREGISTRYITEMREQUEST']._serialized_end = 26659 + _globals['_UPDATEREGISTRYITEMRESPONSE']._serialized_start = 26661 + _globals['_UPDATEREGISTRYITEMRESPONSE']._serialized_end = 26689 + _globals['_LISTREGISTRYITEMSREQUEST']._serialized_start = 26692 + _globals['_LISTREGISTRYITEMSREQUEST']._serialized_end = 27404 + _globals['_LISTREGISTRYITEMSRESPONSE']._serialized_start = 27406 + _globals['_LISTREGISTRYITEMSRESPONSE']._serialized_end = 27482 + _globals['_DELETEREGISTRYITEMREQUEST']._serialized_start = 27484 + _globals['_DELETEREGISTRYITEMREQUEST']._serialized_end = 27536 + _globals['_DELETEREGISTRYITEMRESPONSE']._serialized_start = 27538 + _globals['_DELETEREGISTRYITEMRESPONSE']._serialized_end = 27566 + _globals['_RENAMEREGISTRYITEMREQUEST']._serialized_start = 27568 + _globals['_RENAMEREGISTRYITEMREQUEST']._serialized_end = 27647 + _globals['_RENAMEREGISTRYITEMRESPONSE']._serialized_start = 27649 + _globals['_RENAMEREGISTRYITEMRESPONSE']._serialized_end = 27724 + _globals['_TRANSFERREGISTRYITEMREQUEST']._serialized_start = 27726 + _globals['_TRANSFERREGISTRYITEMREQUEST']._serialized_end = 27830 + _globals['_TRANSFERREGISTRYITEMRESPONSE']._serialized_start = 27832 + _globals['_TRANSFERREGISTRYITEMRESPONSE']._serialized_end = 27862 + _globals['_CREATEMODULEREQUEST']._serialized_start = 27864 + _globals['_CREATEMODULEREQUEST']._serialized_end = 27946 + _globals['_CREATEMODULERESPONSE']._serialized_start = 27948 + _globals['_CREATEMODULERESPONSE']._serialized_end = 28017 + _globals['_UPDATEMODULEREQUEST']._serialized_start = 28020 + _globals['_UPDATEMODULEREQUEST']._serialized_end = 28422 + _globals['_APP']._serialized_start = 28425 + _globals['_APP']._serialized_end = 28657 + _globals['_UPDATEMODULERESPONSE']._serialized_start = 28659 + _globals['_UPDATEMODULERESPONSE']._serialized_end = 28699 + _globals['_UPDATEMODULEMETADATA']._serialized_start = 28702 + _globals['_UPDATEMODULEMETADATA']._serialized_end = 28998 + _globals['_UPDATEMLMODELMETADATA']._serialized_start = 29001 + _globals['_UPDATEMLMODELMETADATA']._serialized_end = 29171 + _globals['_UPDATEMLTRAININGMETADATA']._serialized_start = 29174 + _globals['_UPDATEMLTRAININGMETADATA']._serialized_end = 29369 + _globals['_MODEL']._serialized_start = 29372 + _globals['_MODEL']._serialized_end = 29608 + _globals['_MODULEFILEINFO']._serialized_start = 29611 + _globals['_MODULEFILEINFO']._serialized_end = 29747 + _globals['_UPLOADMODULEFILEREQUEST']._serialized_start = 29750 + _globals['_UPLOADMODULEFILEREQUEST']._serialized_end = 29885 + _globals['_UPLOADMODULEFILERESPONSE']._serialized_start = 29887 + _globals['_UPLOADMODULEFILERESPONSE']._serialized_end = 29931 + _globals['_GETMODULEREQUEST']._serialized_start = 29934 + _globals['_GETMODULEREQUEST']._serialized_end = 30091 + _globals['_GETMODULERESPONSE']._serialized_start = 30093 + _globals['_GETMODULERESPONSE']._serialized_end = 30157 + _globals['_MODULE']._serialized_start = 30160 + _globals['_MODULE']._serialized_end = 30812 + _globals['_VERSIONHISTORY']._serialized_start = 30815 + _globals['_VERSIONHISTORY']._serialized_end = 31144 + _globals['_UPLOADS']._serialized_start = 31146 + _globals['_UPLOADS']._serialized_end = 31244 + _globals['_LISTMODULESREQUEST']._serialized_start = 31247 + _globals['_LISTMODULESREQUEST']._serialized_end = 31443 + _globals['_LISTMODULESRESPONSE']._serialized_start = 31445 + _globals['_LISTMODULESRESPONSE']._serialized_end = 31513 + _globals['_GETUSERIDBYEMAILREQUEST']._serialized_start = 31515 + _globals['_GETUSERIDBYEMAILREQUEST']._serialized_end = 31562 + _globals['_GETUSERIDBYEMAILRESPONSE']._serialized_start = 31564 + _globals['_GETUSERIDBYEMAILRESPONSE']._serialized_end = 31615 + _globals['_LISTORGANIZATIONSBYUSERREQUEST']._serialized_start = 31617 + _globals['_LISTORGANIZATIONSBYUSERREQUEST']._serialized_end = 31674 + _globals['_ORGDETAILS']._serialized_start = 31677 + _globals['_ORGDETAILS']._serialized_end = 31907 + _globals['_LISTORGANIZATIONSBYUSERRESPONSE']._serialized_start = 31909 + _globals['_LISTORGANIZATIONSBYUSERRESPONSE']._serialized_end = 31987 + _globals['_SEARCHORGANIZATIONSREQUEST']._serialized_start = 31990 + _globals['_SEARCHORGANIZATIONSREQUEST']._serialized_end = 32202 + _globals['_SEARCHORGANIZATIONSRESPONSE']._serialized_start = 32204 + _globals['_SEARCHORGANIZATIONSRESPONSE']._serialized_end = 32296 + _globals['_CREATEKEYREQUEST']._serialized_start = 32298 + _globals['_CREATEKEYREQUEST']._serialized_end = 32404 + _globals['_CREATEKEYRESPONSE']._serialized_start = 32406 + _globals['_CREATEKEYRESPONSE']._serialized_end = 32459 + _globals['_DELETEKEYREQUEST']._serialized_start = 32461 + _globals['_DELETEKEYREQUEST']._serialized_end = 32495 + _globals['_DELETEKEYRESPONSE']._serialized_start = 32497 + _globals['_DELETEKEYRESPONSE']._serialized_end = 32516 + _globals['_RENAMEKEYREQUEST']._serialized_start = 32518 + _globals['_RENAMEKEYREQUEST']._serialized_end = 32572 + _globals['_RENAMEKEYRESPONSE']._serialized_start = 32574 + _globals['_RENAMEKEYRESPONSE']._serialized_end = 32629 + _globals['_AUTHORIZATIONDETAILS']._serialized_start = 32632 + _globals['_AUTHORIZATIONDETAILS']._serialized_end = 32837 + _globals['_APIKEYWITHAUTHORIZATIONS']._serialized_start = 32840 + _globals['_APIKEYWITHAUTHORIZATIONS']._serialized_end = 32987 + _globals['_LISTKEYSREQUEST']._serialized_start = 32989 + _globals['_LISTKEYSREQUEST']._serialized_end = 33029 + _globals['_LISTKEYSRESPONSE']._serialized_start = 33031 + _globals['_LISTKEYSRESPONSE']._serialized_end = 33115 + _globals['_ROTATEKEYREQUEST']._serialized_start = 33117 + _globals['_ROTATEKEYREQUEST']._serialized_end = 33151 + _globals['_ROTATEKEYRESPONSE']._serialized_start = 33153 + _globals['_ROTATEKEYRESPONSE']._serialized_end = 33206 + _globals['_CREATEKEYFROMEXISTINGKEYAUTHORIZATIONSREQUEST']._serialized_start = 33208 + _globals['_CREATEKEYFROMEXISTINGKEYAUTHORIZATIONSREQUEST']._serialized_end = 33271 + _globals['_CREATEKEYFROMEXISTINGKEYAUTHORIZATIONSRESPONSE']._serialized_start = 33273 + _globals['_CREATEKEYFROMEXISTINGKEYAUTHORIZATIONSRESPONSE']._serialized_end = 33355 + _globals['_GETAPPCONTENTREQUEST']._serialized_start = 33357 + _globals['_GETAPPCONTENTREQUEST']._serialized_end = 33442 + _globals['_GETAPPCONTENTRESPONSE']._serialized_start = 33445 + _globals['_GETAPPCONTENTRESPONSE']._serialized_end = 33578 + _globals['_ORGANIZATIONSETLOGOREQUEST']._serialized_start = 33580 + _globals['_ORGANIZATIONSETLOGOREQUEST']._serialized_end = 33651 + _globals['_ORGANIZATIONSETLOGORESPONSE']._serialized_start = 33653 + _globals['_ORGANIZATIONSETLOGORESPONSE']._serialized_end = 33682 + _globals['_ORGANIZATIONGETLOGOREQUEST']._serialized_start = 33684 + _globals['_ORGANIZATIONGETLOGOREQUEST']._serialized_end = 33735 + _globals['_ORGANIZATIONGETLOGORESPONSE']._serialized_start = 33737 + _globals['_ORGANIZATIONGETLOGORESPONSE']._serialized_end = 33784 + _globals['_ENABLEAUTHSERVICEREQUEST']._serialized_start = 33786 + _globals['_ENABLEAUTHSERVICEREQUEST']._serialized_end = 33835 + _globals['_ENABLEAUTHSERVICERESPONSE']._serialized_start = 33837 + _globals['_ENABLEAUTHSERVICERESPONSE']._serialized_end = 33864 + _globals['_DISABLEAUTHSERVICEREQUEST']._serialized_start = 33866 + _globals['_DISABLEAUTHSERVICEREQUEST']._serialized_end = 33916 + _globals['_DISABLEAUTHSERVICERESPONSE']._serialized_start = 33918 + _globals['_DISABLEAUTHSERVICERESPONSE']._serialized_end = 33946 + _globals['_CREATEOAUTHAPPREQUEST']._serialized_start = 33949 + _globals['_CREATEOAUTHAPPREQUEST']._serialized_end = 34089 + _globals['_CREATEOAUTHAPPRESPONSE']._serialized_start = 34091 + _globals['_CREATEOAUTHAPPRESPONSE']._serialized_end = 34181 + _globals['_READOAUTHAPPREQUEST']._serialized_start = 34183 + _globals['_READOAUTHAPPREQUEST']._serialized_end = 34256 + _globals['_READOAUTHAPPRESPONSE']._serialized_start = 34259 + _globals['_READOAUTHAPPRESPONSE']._serialized_end = 34412 + _globals['_UPDATEOAUTHAPPREQUEST']._serialized_start = 34415 + _globals['_UPDATEOAUTHAPPREQUEST']._serialized_end = 34584 + _globals['_UPDATEOAUTHAPPRESPONSE']._serialized_start = 34586 + _globals['_UPDATEOAUTHAPPRESPONSE']._serialized_end = 34610 + _globals['_DELETEOAUTHAPPREQUEST']._serialized_start = 34612 + _globals['_DELETEOAUTHAPPREQUEST']._serialized_end = 34687 + _globals['_DELETEOAUTHAPPRESPONSE']._serialized_start = 34689 + _globals['_DELETEOAUTHAPPRESPONSE']._serialized_end = 34713 + _globals['_LISTOAUTHAPPSREQUEST']._serialized_start = 34715 + _globals['_LISTOAUTHAPPSREQUEST']._serialized_end = 34760 + _globals['_LISTOAUTHAPPSRESPONSE']._serialized_start = 34762 + _globals['_LISTOAUTHAPPSRESPONSE']._serialized_end = 34816 + _globals['_OAUTHCONFIG']._serialized_start = 34819 + _globals['_OAUTHCONFIG']._serialized_end = 35193 + _globals['_GETAPPBRANDINGREQUEST']._serialized_start = 35195 + _globals['_GETAPPBRANDINGREQUEST']._serialized_end = 35281 + _globals['_TEXTOVERRIDES']._serialized_start = 35284 + _globals['_TEXTOVERRIDES']._serialized_end = 35422 + _globals['_TEXTOVERRIDES_FIELDSENTRY']._serialized_start = 35365 + _globals['_TEXTOVERRIDES_FIELDSENTRY']._serialized_end = 35422 + _globals['_GETAPPBRANDINGRESPONSE']._serialized_start = 35425 + _globals['_GETAPPBRANDINGRESPONSE']._serialized_end = 35741 + _globals['_GETAPPBRANDINGRESPONSE_TEXTCUSTOMIZATIONSENTRY']._serialized_start = 35630 + _globals['_GETAPPBRANDINGRESPONSE_TEXTCUSTOMIZATIONSENTRY']._serialized_end = 35727 + _globals['_APPCUSTOMIZATIONS']._serialized_start = 35743 + _globals['_APPCUSTOMIZATIONS']._serialized_end = 35843 + _globals['_MACHINEPICKERCUSTOMIZATIONS']._serialized_start = 35845 + _globals['_MACHINEPICKERCUSTOMIZATIONS']._serialized_end = 35969 + _globals['_APPSERVICE']._serialized_start = 37961 + _globals['_APPSERVICE']._serialized_end = 48963 \ No newline at end of file diff --git a/src/viam/gen/app/v1/app_pb2.pyi b/src/viam/gen/app/v1/app_pb2.pyi index dff7fba57d..cd5ae44b7d 100644 --- a/src/viam/gen/app/v1/app_pb2.pyi +++ b/src/viam/gen/app/v1/app_pb2.pyi @@ -653,16 +653,16 @@ global___GetOrganizationNamespaceAvailabilityResponse = GetOrganizationNamespace @typing.final class FragmentImportList(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor - IMPORTS_FIELD_NUMBER: builtins.int + FRAGMENTS_FIELD_NUMBER: builtins.int @property - def imports(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___FragmentImport]: + def fragments(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___FragmentImport]: ... - def __init__(self, *, imports: collections.abc.Iterable[global___FragmentImport] | None=...) -> None: + def __init__(self, *, fragments: collections.abc.Iterable[global___FragmentImport] | None=...) -> None: ... - def ClearField(self, field_name: typing.Literal['imports', b'imports']) -> None: + def ClearField(self, field_name: typing.Literal['fragments', b'fragments']) -> None: ... global___FragmentImportList = FragmentImportList @@ -674,7 +674,7 @@ class UpdateOrganizationRequest(google.protobuf.message.Message): PUBLIC_NAMESPACE_FIELD_NUMBER: builtins.int REGION_FIELD_NUMBER: builtins.int CID_FIELD_NUMBER: builtins.int - FRAGMENT_IMPORTS_FIELD_NUMBER: builtins.int + DEFAULT_FRAGMENTS_FIELD_NUMBER: builtins.int organization_id: builtins.str name: builtins.str public_namespace: builtins.str @@ -683,16 +683,16 @@ class UpdateOrganizationRequest(google.protobuf.message.Message): cid: builtins.str @property - def fragment_imports(self) -> global___FragmentImportList: + def default_fragments(self) -> global___FragmentImportList: ... - def __init__(self, *, organization_id: builtins.str=..., name: builtins.str | None=..., public_namespace: builtins.str | None=..., region: builtins.str | None=..., cid: builtins.str | None=..., fragment_imports: global___FragmentImportList | None=...) -> None: + def __init__(self, *, organization_id: builtins.str=..., name: builtins.str | None=..., public_namespace: builtins.str | None=..., region: builtins.str | None=..., cid: builtins.str | None=..., default_fragments: global___FragmentImportList | None=...) -> None: ... - def HasField(self, field_name: typing.Literal['_cid', b'_cid', '_fragment_imports', b'_fragment_imports', '_name', b'_name', '_public_namespace', b'_public_namespace', '_region', b'_region', 'cid', b'cid', 'fragment_imports', b'fragment_imports', 'name', b'name', 'public_namespace', b'public_namespace', 'region', b'region']) -> builtins.bool: + def HasField(self, field_name: typing.Literal['_cid', b'_cid', '_default_fragments', b'_default_fragments', '_name', b'_name', '_public_namespace', b'_public_namespace', '_region', b'_region', 'cid', b'cid', 'default_fragments', b'default_fragments', 'name', b'name', 'public_namespace', b'public_namespace', 'region', b'region']) -> builtins.bool: ... - def ClearField(self, field_name: typing.Literal['_cid', b'_cid', '_fragment_imports', b'_fragment_imports', '_name', b'_name', '_public_namespace', b'_public_namespace', '_region', b'_region', 'cid', b'cid', 'fragment_imports', b'fragment_imports', 'name', b'name', 'organization_id', b'organization_id', 'public_namespace', b'public_namespace', 'region', b'region']) -> None: + def ClearField(self, field_name: typing.Literal['_cid', b'_cid', '_default_fragments', b'_default_fragments', '_name', b'_name', '_public_namespace', b'_public_namespace', '_region', b'_region', 'cid', b'cid', 'default_fragments', b'default_fragments', 'name', b'name', 'organization_id', b'organization_id', 'public_namespace', b'public_namespace', 'region', b'region']) -> None: ... @typing.overload @@ -700,7 +700,7 @@ class UpdateOrganizationRequest(google.protobuf.message.Message): ... @typing.overload - def WhichOneof(self, oneof_group: typing.Literal['_fragment_imports', b'_fragment_imports']) -> typing.Literal['fragment_imports'] | None: + def WhichOneof(self, oneof_group: typing.Literal['_default_fragments', b'_default_fragments']) -> typing.Literal['default_fragments'] | None: ... @typing.overload diff --git a/src/viam/gen/common/v1/common_pb2.py b/src/viam/gen/common/v1/common_pb2.py index b759660e0b..6d22835067 100644 --- a/src/viam/gen/common/v1/common_pb2.py +++ b/src/viam/gen/common/v1/common_pb2.py @@ -9,19 +9,21 @@ from google.protobuf import descriptor_pb2 as google_dot_protobuf_dot_descriptor__pb2 from google.protobuf import struct_pb2 as google_dot_protobuf_dot_struct__pb2 from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x16common/v1/common.proto\x12\x0eviam.common.v1\x1a google/protobuf/descriptor.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto"n\n\x0cResourceName\x12\x1c\n\tnamespace\x18\x01 \x01(\tR\tnamespace\x12\x12\n\x04type\x18\x02 \x01(\tR\x04type\x12\x18\n\x07subtype\x18\x03 \x01(\tR\x07subtype\x12\x12\n\x04name\x18\x04 \x01(\tR\x04name"y\n\x04Pose\x12\x0c\n\x01x\x18\x01 \x01(\x01R\x01x\x12\x0c\n\x01y\x18\x02 \x01(\x01R\x01y\x12\x0c\n\x01z\x18\x03 \x01(\x01R\x01z\x12\x0f\n\x03o_x\x18\x04 \x01(\x01R\x02oX\x12\x0f\n\x03o_y\x18\x05 \x01(\x01R\x02oY\x12\x0f\n\x03o_z\x18\x06 \x01(\x01R\x02oZ\x12\x14\n\x05theta\x18\x07 \x01(\x01R\x05theta"V\n\x0bOrientation\x12\x0f\n\x03o_x\x18\x01 \x01(\x01R\x02oX\x12\x0f\n\x03o_y\x18\x02 \x01(\x01R\x02oY\x12\x0f\n\x03o_z\x18\x03 \x01(\x01R\x02oZ\x12\x14\n\x05theta\x18\x04 \x01(\x01R\x05theta"`\n\x0bPoseInFrame\x12\'\n\x0freference_frame\x18\x01 \x01(\tR\x0ereferenceFrame\x12(\n\x04pose\x18\x02 \x01(\x0b2\x14.viam.common.v1.PoseR\x04pose"3\n\x07Vector3\x12\x0c\n\x01x\x18\x01 \x01(\x01R\x01x\x12\x0c\n\x01y\x18\x02 \x01(\x01R\x01y\x12\x0c\n\x01z\x18\x03 \x01(\x01R\x01z"%\n\x06Sphere\x12\x1b\n\tradius_mm\x18\x01 \x01(\x01R\x08radiusMm"C\n\x07Capsule\x12\x1b\n\tradius_mm\x18\x01 \x01(\x01R\x08radiusMm\x12\x1b\n\tlength_mm\x18\x02 \x01(\x01R\x08lengthMm"D\n\x10RectangularPrism\x120\n\x07dims_mm\x18\x01 \x01(\x0b2\x17.viam.common.v1.Vector3R\x06dimsMm"=\n\x04Mesh\x12!\n\x0ccontent_type\x18\x01 \x01(\tR\x0bcontentType\x12\x12\n\x04mesh\x18\x02 \x01(\x0cR\x04mesh"-\n\nPointCloud\x12\x1f\n\x0bpoint_cloud\x18\x01 \x01(\x0cR\npointCloud"\xe6\x02\n\x08Geometry\x12,\n\x06center\x18\x01 \x01(\x0b2\x14.viam.common.v1.PoseR\x06center\x120\n\x06sphere\x18\x02 \x01(\x0b2\x16.viam.common.v1.SphereH\x00R\x06sphere\x124\n\x03box\x18\x03 \x01(\x0b2 .viam.common.v1.RectangularPrismH\x00R\x03box\x123\n\x07capsule\x18\x05 \x01(\x0b2\x17.viam.common.v1.CapsuleH\x00R\x07capsule\x12*\n\x04mesh\x18\x06 \x01(\x0b2\x14.viam.common.v1.MeshH\x00R\x04mesh\x12<\n\npointcloud\x18\x07 \x01(\x0b2\x1a.viam.common.v1.PointCloudH\x00R\npointcloud\x12\x14\n\x05label\x18\x04 \x01(\tR\x05labelB\x0f\n\rgeometry_type"v\n\x11GeometriesInFrame\x12\'\n\x0freference_frame\x18\x01 \x01(\tR\x0ereferenceFrame\x128\n\ngeometries\x18\x02 \x03(\x0b2\x18.viam.common.v1.GeometryR\ngeometries"v\n\x10PointCloudObject\x12\x1f\n\x0bpoint_cloud\x18\x01 \x01(\x0cR\npointCloud\x12A\n\ngeometries\x18\x02 \x01(\x0b2!.viam.common.v1.GeometriesInFrameR\ngeometries"D\n\x08GeoPoint\x12\x1a\n\x08latitude\x18\x01 \x01(\x01R\x08latitude\x12\x1c\n\tlongitude\x18\x02 \x01(\x01R\tlongitude"}\n\x0bGeoGeometry\x124\n\x08location\x18\x01 \x01(\x0b2\x18.viam.common.v1.GeoPointR\x08location\x128\n\ngeometries\x18\x02 \x03(\x0b2\x18.viam.common.v1.GeometryR\ngeometries"\xbd\x02\n\tTransform\x12\'\n\x0freference_frame\x18\x01 \x01(\tR\x0ereferenceFrame\x12P\n\x16pose_in_observer_frame\x18\x02 \x01(\x0b2\x1b.viam.common.v1.PoseInFrameR\x13poseInObserverFrame\x12F\n\x0fphysical_object\x18\x03 \x01(\x0b2\x18.viam.common.v1.GeometryH\x00R\x0ephysicalObject\x88\x01\x01\x12\x12\n\x04uuid\x18\x04 \x01(\x0cR\x04uuid\x128\n\x08metadata\x18\x05 \x01(\x0b2\x17.google.protobuf.StructH\x01R\x08metadata\x88\x01\x01B\x12\n\x10_physical_objectB\x0b\n\t_metadata"\x88\x01\n\nWorldState\x12?\n\tobstacles\x18\x01 \x03(\x0b2!.viam.common.v1.GeometriesInFrameR\tobstacles\x129\n\ntransforms\x18\x03 \x03(\x0b2\x19.viam.common.v1.TransformR\ntransforms"-\n\x0eActuatorStatus\x12\x1b\n\tis_moving\x18\x01 \x01(\x08R\x08isMoving"d\n\x10ResponseMetadata\x12@\n\x0bcaptured_at\x18\x01 \x01(\x0b2\x1a.google.protobuf.TimestampH\x00R\ncapturedAt\x88\x01\x01B\x0e\n\x0c_captured_at"Y\n\x10DoCommandRequest\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x121\n\x07command\x18\x02 \x01(\x0b2\x17.google.protobuf.StructR\x07command"D\n\x11DoCommandResponse\x12/\n\x06result\x18\x01 \x01(\x0b2\x17.google.protobuf.StructR\x06result"Y\n\x14GetKinematicsRequest\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12-\n\x05extra\x18c \x01(\x0b2\x17.google.protobuf.StructR\x05extra"~\n\x15GetKinematicsResponse\x12<\n\x06format\x18\x01 \x01(\x0e2$.viam.common.v1.KinematicsFileFormatR\x06format\x12\'\n\x0fkinematics_data\x18\x02 \x01(\x0cR\x0ekinematicsData"Y\n\x14GetGeometriesRequest\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12-\n\x05extra\x18c \x01(\x0b2\x17.google.protobuf.StructR\x05extra"Q\n\x15GetGeometriesResponse\x128\n\ngeometries\x18\x01 \x03(\x0b2\x18.viam.common.v1.GeometryR\ngeometries"W\n\x12Get3DModelsRequest\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12-\n\x05extra\x18c \x01(\x0b2\x17.google.protobuf.StructR\x05extra"\xaf\x01\n\x13Get3DModelsResponse\x12G\n\x06models\x18\x01 \x03(\x0b2/.viam.common.v1.Get3DModelsResponse.ModelsEntryR\x06models\x1aO\n\x0bModelsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12*\n\x05value\x18\x02 \x01(\x0b2\x14.viam.common.v1.MeshR\x05value:\x028\x01"W\n\x12GetReadingsRequest\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12-\n\x05extra\x18c \x01(\x0b2\x17.google.protobuf.StructR\x05extra"\xb9\x01\n\x13GetReadingsResponse\x12M\n\x08readings\x18\x01 \x03(\x0b21.viam.common.v1.GetReadingsResponse.ReadingsEntryR\x08readings\x1aS\n\rReadingsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12,\n\x05value\x18\x02 \x01(\x0b2\x16.google.protobuf.ValueR\x05value:\x028\x01"\x97\x02\n\x08LogEntry\x12\x12\n\x04host\x18\x01 \x01(\tR\x04host\x12\x14\n\x05level\x18\x02 \x01(\tR\x05level\x12.\n\x04time\x18\x03 \x01(\x0b2\x1a.google.protobuf.TimestampR\x04time\x12\x1f\n\x0blogger_name\x18\x04 \x01(\tR\nloggerName\x12\x18\n\x07message\x18\x05 \x01(\tR\x07message\x12/\n\x06caller\x18\x06 \x01(\x0b2\x17.google.protobuf.StructR\x06caller\x12\x14\n\x05stack\x18\x07 \x01(\tR\x05stack\x12/\n\x06fields\x18\x08 \x03(\x0b2\x17.google.protobuf.StructR\x06fields"j\n\tAudioInfo\x12\x14\n\x05codec\x18\x01 \x01(\tR\x05codec\x12$\n\x0esample_rate_hz\x18\x02 \x01(\x05R\x0csampleRateHz\x12!\n\x0cnum_channels\x18\x03 \x01(\x05R\x0bnumChannels"Y\n\x14GetPropertiesRequest\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12-\n\x05extra\x18c \x01(\x0b2\x17.google.protobuf.StructR\x05extra"\x8b\x01\n\x15GetPropertiesResponse\x12)\n\x10supported_codecs\x18\x01 \x03(\tR\x0fsupportedCodecs\x12$\n\x0esample_rate_hz\x18\x02 \x01(\x05R\x0csampleRateHz\x12!\n\x0cnum_channels\x18\x03 \x01(\x05R\x0bnumChannels*\x7f\n\x14KinematicsFileFormat\x12&\n"KINEMATICS_FILE_FORMAT_UNSPECIFIED\x10\x00\x12\x1e\n\x1aKINEMATICS_FILE_FORMAT_SVA\x10\x01\x12\x1f\n\x1bKINEMATICS_FILE_FORMAT_URDF\x10\x02:a\n\x1asafety_heartbeat_monitored\x12\x1e.google.protobuf.MethodOptions\x18\xa4\x92\x05 \x01(\x08R\x18safetyHeartbeatMonitored\x88\x01\x01B/\n\x12com.viam.common.v1Z\x19go.viam.com/api/common/v1b\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x16common/v1/common.proto\x12\x0eviam.common.v1\x1a google/protobuf/descriptor.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto"n\n\x0cResourceName\x12\x1c\n\tnamespace\x18\x01 \x01(\tR\tnamespace\x12\x12\n\x04type\x18\x02 \x01(\tR\x04type\x12\x18\n\x07subtype\x18\x03 \x01(\tR\x07subtype\x12\x12\n\x04name\x18\x04 \x01(\tR\x04name"y\n\x04Pose\x12\x0c\n\x01x\x18\x01 \x01(\x01R\x01x\x12\x0c\n\x01y\x18\x02 \x01(\x01R\x01y\x12\x0c\n\x01z\x18\x03 \x01(\x01R\x01z\x12\x0f\n\x03o_x\x18\x04 \x01(\x01R\x02oX\x12\x0f\n\x03o_y\x18\x05 \x01(\x01R\x02oY\x12\x0f\n\x03o_z\x18\x06 \x01(\x01R\x02oZ\x12\x14\n\x05theta\x18\x07 \x01(\x01R\x05theta"V\n\x0bOrientation\x12\x0f\n\x03o_x\x18\x01 \x01(\x01R\x02oX\x12\x0f\n\x03o_y\x18\x02 \x01(\x01R\x02oY\x12\x0f\n\x03o_z\x18\x03 \x01(\x01R\x02oZ\x12\x14\n\x05theta\x18\x04 \x01(\x01R\x05theta"`\n\x0bPoseInFrame\x12\'\n\x0freference_frame\x18\x01 \x01(\tR\x0ereferenceFrame\x12(\n\x04pose\x18\x02 \x01(\x0b2\x14.viam.common.v1.PoseR\x04pose"3\n\x07Vector3\x12\x0c\n\x01x\x18\x01 \x01(\x01R\x01x\x12\x0c\n\x01y\x18\x02 \x01(\x01R\x01y\x12\x0c\n\x01z\x18\x03 \x01(\x01R\x01z"%\n\x06Sphere\x12\x1b\n\tradius_mm\x18\x01 \x01(\x01R\x08radiusMm"C\n\x07Capsule\x12\x1b\n\tradius_mm\x18\x01 \x01(\x01R\x08radiusMm\x12\x1b\n\tlength_mm\x18\x02 \x01(\x01R\x08lengthMm"D\n\x10RectangularPrism\x120\n\x07dims_mm\x18\x01 \x01(\x0b2\x17.viam.common.v1.Vector3R\x06dimsMm"=\n\x04Mesh\x12!\n\x0ccontent_type\x18\x01 \x01(\tR\x0bcontentType\x12\x12\n\x04mesh\x18\x02 \x01(\x0cR\x04mesh"-\n\nPointCloud\x12\x1f\n\x0bpoint_cloud\x18\x01 \x01(\x0cR\npointCloud"\xe6\x02\n\x08Geometry\x12,\n\x06center\x18\x01 \x01(\x0b2\x14.viam.common.v1.PoseR\x06center\x120\n\x06sphere\x18\x02 \x01(\x0b2\x16.viam.common.v1.SphereH\x00R\x06sphere\x124\n\x03box\x18\x03 \x01(\x0b2 .viam.common.v1.RectangularPrismH\x00R\x03box\x123\n\x07capsule\x18\x05 \x01(\x0b2\x17.viam.common.v1.CapsuleH\x00R\x07capsule\x12*\n\x04mesh\x18\x06 \x01(\x0b2\x14.viam.common.v1.MeshH\x00R\x04mesh\x12<\n\npointcloud\x18\x07 \x01(\x0b2\x1a.viam.common.v1.PointCloudH\x00R\npointcloud\x12\x14\n\x05label\x18\x04 \x01(\tR\x05labelB\x0f\n\rgeometry_type"v\n\x11GeometriesInFrame\x12\'\n\x0freference_frame\x18\x01 \x01(\tR\x0ereferenceFrame\x128\n\ngeometries\x18\x02 \x03(\x0b2\x18.viam.common.v1.GeometryR\ngeometries"v\n\x10PointCloudObject\x12\x1f\n\x0bpoint_cloud\x18\x01 \x01(\x0cR\npointCloud\x12A\n\ngeometries\x18\x02 \x01(\x0b2!.viam.common.v1.GeometriesInFrameR\ngeometries"D\n\x08GeoPoint\x12\x1a\n\x08latitude\x18\x01 \x01(\x01R\x08latitude\x12\x1c\n\tlongitude\x18\x02 \x01(\x01R\tlongitude"}\n\x0bGeoGeometry\x124\n\x08location\x18\x01 \x01(\x0b2\x18.viam.common.v1.GeoPointR\x08location\x128\n\ngeometries\x18\x02 \x03(\x0b2\x18.viam.common.v1.GeometryR\ngeometries"\xbd\x02\n\tTransform\x12\'\n\x0freference_frame\x18\x01 \x01(\tR\x0ereferenceFrame\x12P\n\x16pose_in_observer_frame\x18\x02 \x01(\x0b2\x1b.viam.common.v1.PoseInFrameR\x13poseInObserverFrame\x12F\n\x0fphysical_object\x18\x03 \x01(\x0b2\x18.viam.common.v1.GeometryH\x00R\x0ephysicalObject\x88\x01\x01\x12\x12\n\x04uuid\x18\x04 \x01(\x0cR\x04uuid\x128\n\x08metadata\x18\x05 \x01(\x0b2\x17.google.protobuf.StructH\x01R\x08metadata\x88\x01\x01B\x12\n\x10_physical_objectB\x0b\n\t_metadata"\x88\x01\n\nWorldState\x12?\n\tobstacles\x18\x01 \x03(\x0b2!.viam.common.v1.GeometriesInFrameR\tobstacles\x129\n\ntransforms\x18\x03 \x03(\x0b2\x19.viam.common.v1.TransformR\ntransforms"-\n\x0eActuatorStatus\x12\x1b\n\tis_moving\x18\x01 \x01(\x08R\x08isMoving"d\n\x10ResponseMetadata\x12@\n\x0bcaptured_at\x18\x01 \x01(\x0b2\x1a.google.protobuf.TimestampH\x00R\ncapturedAt\x88\x01\x01B\x0e\n\x0c_captured_at"Y\n\x10DoCommandRequest\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x121\n\x07command\x18\x02 \x01(\x0b2\x17.google.protobuf.StructR\x07command"D\n\x11DoCommandResponse\x12/\n\x06result\x18\x01 \x01(\x0b2\x17.google.protobuf.StructR\x06result"Y\n\x14GetKinematicsRequest\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12-\n\x05extra\x18c \x01(\x0b2\x17.google.protobuf.StructR\x05extra"\xd5\x02\n\x15GetKinematicsResponse\x12<\n\x06format\x18\x01 \x01(\x0e2$.viam.common.v1.KinematicsFileFormatR\x06format\x12\'\n\x0fkinematics_data\x18\x02 \x01(\x0cR\x0ekinematicsData\x12v\n\x17meshes_by_urdf_filepath\x18\x03 \x03(\x0b2?.viam.common.v1.GetKinematicsResponse.MeshesByUrdfFilepathEntryR\x14meshesByUrdfFilepath\x1a]\n\x19MeshesByUrdfFilepathEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12*\n\x05value\x18\x02 \x01(\x0b2\x14.viam.common.v1.MeshR\x05value:\x028\x01"Y\n\x14GetGeometriesRequest\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12-\n\x05extra\x18c \x01(\x0b2\x17.google.protobuf.StructR\x05extra"Q\n\x15GetGeometriesResponse\x128\n\ngeometries\x18\x01 \x03(\x0b2\x18.viam.common.v1.GeometryR\ngeometries"W\n\x12Get3DModelsRequest\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12-\n\x05extra\x18c \x01(\x0b2\x17.google.protobuf.StructR\x05extra"\xaf\x01\n\x13Get3DModelsResponse\x12G\n\x06models\x18\x01 \x03(\x0b2/.viam.common.v1.Get3DModelsResponse.ModelsEntryR\x06models\x1aO\n\x0bModelsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12*\n\x05value\x18\x02 \x01(\x0b2\x14.viam.common.v1.MeshR\x05value:\x028\x01"W\n\x12GetReadingsRequest\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12-\n\x05extra\x18c \x01(\x0b2\x17.google.protobuf.StructR\x05extra"\xb9\x01\n\x13GetReadingsResponse\x12M\n\x08readings\x18\x01 \x03(\x0b21.viam.common.v1.GetReadingsResponse.ReadingsEntryR\x08readings\x1aS\n\rReadingsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12,\n\x05value\x18\x02 \x01(\x0b2\x16.google.protobuf.ValueR\x05value:\x028\x01"\x97\x02\n\x08LogEntry\x12\x12\n\x04host\x18\x01 \x01(\tR\x04host\x12\x14\n\x05level\x18\x02 \x01(\tR\x05level\x12.\n\x04time\x18\x03 \x01(\x0b2\x1a.google.protobuf.TimestampR\x04time\x12\x1f\n\x0blogger_name\x18\x04 \x01(\tR\nloggerName\x12\x18\n\x07message\x18\x05 \x01(\tR\x07message\x12/\n\x06caller\x18\x06 \x01(\x0b2\x17.google.protobuf.StructR\x06caller\x12\x14\n\x05stack\x18\x07 \x01(\tR\x05stack\x12/\n\x06fields\x18\x08 \x03(\x0b2\x17.google.protobuf.StructR\x06fields"j\n\tAudioInfo\x12\x14\n\x05codec\x18\x01 \x01(\tR\x05codec\x12$\n\x0esample_rate_hz\x18\x02 \x01(\x05R\x0csampleRateHz\x12!\n\x0cnum_channels\x18\x03 \x01(\x05R\x0bnumChannels"Y\n\x14GetPropertiesRequest\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12-\n\x05extra\x18c \x01(\x0b2\x17.google.protobuf.StructR\x05extra"\x8b\x01\n\x15GetPropertiesResponse\x12)\n\x10supported_codecs\x18\x01 \x03(\tR\x0fsupportedCodecs\x12$\n\x0esample_rate_hz\x18\x02 \x01(\x05R\x0csampleRateHz\x12!\n\x0cnum_channels\x18\x03 \x01(\x05R\x0bnumChannels*\x7f\n\x14KinematicsFileFormat\x12&\n"KINEMATICS_FILE_FORMAT_UNSPECIFIED\x10\x00\x12\x1e\n\x1aKINEMATICS_FILE_FORMAT_SVA\x10\x01\x12\x1f\n\x1bKINEMATICS_FILE_FORMAT_URDF\x10\x02:a\n\x1asafety_heartbeat_monitored\x12\x1e.google.protobuf.MethodOptions\x18\xa4\x92\x05 \x01(\x08R\x18safetyHeartbeatMonitored\x88\x01\x01B/\n\x12com.viam.common.v1Z\x19go.viam.com/api/common/v1b\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'common.v1.common_pb2', _globals) if not _descriptor._USE_C_DESCRIPTORS: _globals['DESCRIPTOR']._loaded_options = None _globals['DESCRIPTOR']._serialized_options = b'\n\x12com.viam.common.v1Z\x19go.viam.com/api/common/v1' + _globals['_GETKINEMATICSRESPONSE_MESHESBYURDFFILEPATHENTRY']._loaded_options = None + _globals['_GETKINEMATICSRESPONSE_MESHESBYURDFFILEPATHENTRY']._serialized_options = b'8\x01' _globals['_GET3DMODELSRESPONSE_MODELSENTRY']._loaded_options = None _globals['_GET3DMODELSRESPONSE_MODELSENTRY']._serialized_options = b'8\x01' _globals['_GETREADINGSRESPONSE_READINGSENTRY']._loaded_options = None _globals['_GETREADINGSRESPONSE_READINGSENTRY']._serialized_options = b'8\x01' - _globals['_KINEMATICSFILEFORMAT']._serialized_start = 4028 - _globals['_KINEMATICSFILEFORMAT']._serialized_end = 4155 + _globals['_KINEMATICSFILEFORMAT']._serialized_start = 4244 + _globals['_KINEMATICSFILEFORMAT']._serialized_end = 4371 _globals['_RESOURCENAME']._serialized_start = 139 _globals['_RESOURCENAME']._serialized_end = 249 _globals['_POSE']._serialized_start = 251 @@ -66,29 +68,31 @@ _globals['_DOCOMMANDRESPONSE']._serialized_end = 2466 _globals['_GETKINEMATICSREQUEST']._serialized_start = 2468 _globals['_GETKINEMATICSREQUEST']._serialized_end = 2557 - _globals['_GETKINEMATICSRESPONSE']._serialized_start = 2559 - _globals['_GETKINEMATICSRESPONSE']._serialized_end = 2685 - _globals['_GETGEOMETRIESREQUEST']._serialized_start = 2687 - _globals['_GETGEOMETRIESREQUEST']._serialized_end = 2776 - _globals['_GETGEOMETRIESRESPONSE']._serialized_start = 2778 - _globals['_GETGEOMETRIESRESPONSE']._serialized_end = 2859 - _globals['_GET3DMODELSREQUEST']._serialized_start = 2861 - _globals['_GET3DMODELSREQUEST']._serialized_end = 2948 - _globals['_GET3DMODELSRESPONSE']._serialized_start = 2951 - _globals['_GET3DMODELSRESPONSE']._serialized_end = 3126 - _globals['_GET3DMODELSRESPONSE_MODELSENTRY']._serialized_start = 3047 - _globals['_GET3DMODELSRESPONSE_MODELSENTRY']._serialized_end = 3126 - _globals['_GETREADINGSREQUEST']._serialized_start = 3128 - _globals['_GETREADINGSREQUEST']._serialized_end = 3215 - _globals['_GETREADINGSRESPONSE']._serialized_start = 3218 - _globals['_GETREADINGSRESPONSE']._serialized_end = 3403 - _globals['_GETREADINGSRESPONSE_READINGSENTRY']._serialized_start = 3320 - _globals['_GETREADINGSRESPONSE_READINGSENTRY']._serialized_end = 3403 - _globals['_LOGENTRY']._serialized_start = 3406 - _globals['_LOGENTRY']._serialized_end = 3685 - _globals['_AUDIOINFO']._serialized_start = 3687 - _globals['_AUDIOINFO']._serialized_end = 3793 - _globals['_GETPROPERTIESREQUEST']._serialized_start = 3795 - _globals['_GETPROPERTIESREQUEST']._serialized_end = 3884 - _globals['_GETPROPERTIESRESPONSE']._serialized_start = 3887 - _globals['_GETPROPERTIESRESPONSE']._serialized_end = 4026 \ No newline at end of file + _globals['_GETKINEMATICSRESPONSE']._serialized_start = 2560 + _globals['_GETKINEMATICSRESPONSE']._serialized_end = 2901 + _globals['_GETKINEMATICSRESPONSE_MESHESBYURDFFILEPATHENTRY']._serialized_start = 2808 + _globals['_GETKINEMATICSRESPONSE_MESHESBYURDFFILEPATHENTRY']._serialized_end = 2901 + _globals['_GETGEOMETRIESREQUEST']._serialized_start = 2903 + _globals['_GETGEOMETRIESREQUEST']._serialized_end = 2992 + _globals['_GETGEOMETRIESRESPONSE']._serialized_start = 2994 + _globals['_GETGEOMETRIESRESPONSE']._serialized_end = 3075 + _globals['_GET3DMODELSREQUEST']._serialized_start = 3077 + _globals['_GET3DMODELSREQUEST']._serialized_end = 3164 + _globals['_GET3DMODELSRESPONSE']._serialized_start = 3167 + _globals['_GET3DMODELSRESPONSE']._serialized_end = 3342 + _globals['_GET3DMODELSRESPONSE_MODELSENTRY']._serialized_start = 3263 + _globals['_GET3DMODELSRESPONSE_MODELSENTRY']._serialized_end = 3342 + _globals['_GETREADINGSREQUEST']._serialized_start = 3344 + _globals['_GETREADINGSREQUEST']._serialized_end = 3431 + _globals['_GETREADINGSRESPONSE']._serialized_start = 3434 + _globals['_GETREADINGSRESPONSE']._serialized_end = 3619 + _globals['_GETREADINGSRESPONSE_READINGSENTRY']._serialized_start = 3536 + _globals['_GETREADINGSRESPONSE_READINGSENTRY']._serialized_end = 3619 + _globals['_LOGENTRY']._serialized_start = 3622 + _globals['_LOGENTRY']._serialized_end = 3901 + _globals['_AUDIOINFO']._serialized_start = 3903 + _globals['_AUDIOINFO']._serialized_end = 4009 + _globals['_GETPROPERTIESREQUEST']._serialized_start = 4011 + _globals['_GETPROPERTIESREQUEST']._serialized_end = 4100 + _globals['_GETPROPERTIESRESPONSE']._serialized_start = 4103 + _globals['_GETPROPERTIESRESPONSE']._serialized_end = 4242 \ No newline at end of file diff --git a/src/viam/gen/common/v1/common_pb2.pyi b/src/viam/gen/common/v1/common_pb2.pyi index b1c7c31ef7..ae38af6607 100644 --- a/src/viam/gen/common/v1/common_pb2.pyi +++ b/src/viam/gen/common/v1/common_pb2.pyi @@ -558,17 +558,42 @@ global___GetKinematicsRequest = GetKinematicsRequest @typing.final class GetKinematicsResponse(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor + + @typing.final + class MeshesByUrdfFilepathEntry(google.protobuf.message.Message): + DESCRIPTOR: google.protobuf.descriptor.Descriptor + KEY_FIELD_NUMBER: builtins.int + VALUE_FIELD_NUMBER: builtins.int + key: builtins.str + + @property + def value(self) -> global___Mesh: + ... + + def __init__(self, *, key: builtins.str=..., value: global___Mesh | None=...) -> None: + ... + + def HasField(self, field_name: typing.Literal['value', b'value']) -> builtins.bool: + ... + + def ClearField(self, field_name: typing.Literal['key', b'key', 'value', b'value']) -> None: + ... FORMAT_FIELD_NUMBER: builtins.int KINEMATICS_DATA_FIELD_NUMBER: builtins.int + MESHES_BY_URDF_FILEPATH_FIELD_NUMBER: builtins.int format: global___KinematicsFileFormat.ValueType 'The kinematics of the component, in either URDF format or in Viam’s kinematic parameter format (spatial vector algebra)\n https://docs.viam.com/internals/kinematic-chain-config/#kinematic-parameters\n ' kinematics_data: builtins.bytes 'The byte contents of the file' - def __init__(self, *, format: global___KinematicsFileFormat.ValueType=..., kinematics_data: builtins.bytes=...) -> None: + @property + def meshes_by_urdf_filepath(self) -> google.protobuf.internal.containers.MessageMap[builtins.str, global___Mesh]: + """Map of URDF mesh file paths to mesh data""" + + def __init__(self, *, format: global___KinematicsFileFormat.ValueType=..., kinematics_data: builtins.bytes=..., meshes_by_urdf_filepath: collections.abc.Mapping[builtins.str, global___Mesh] | None=...) -> None: ... - def ClearField(self, field_name: typing.Literal['format', b'format', 'kinematics_data', b'kinematics_data']) -> None: + def ClearField(self, field_name: typing.Literal['format', b'format', 'kinematics_data', b'kinematics_data', 'meshes_by_urdf_filepath', b'meshes_by_urdf_filepath']) -> None: ... global___GetKinematicsResponse = GetKinematicsResponse diff --git a/src/viam/gen/component/audioinput/__init__.py b/src/viam/gen/component/audioinput/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/src/viam/gen/component/audioinput/v1/__init__.py b/src/viam/gen/component/audioinput/v1/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/src/viam/gen/component/audioinput/v1/audioinput_grpc.py b/src/viam/gen/component/audioinput/v1/audioinput_grpc.py deleted file mode 100644 index 4d2a802b72..0000000000 --- a/src/viam/gen/component/audioinput/v1/audioinput_grpc.py +++ /dev/null @@ -1,63 +0,0 @@ -import abc -import typing -import grpclib.const -import grpclib.client -import grpclib.exceptions -if typing.TYPE_CHECKING: - import grpclib.server -from .... import common -import google.api.annotations_pb2 -import google.api.httpbody_pb2 -import google.protobuf.duration_pb2 -from .... import component - -class AudioInputServiceBase(abc.ABC): - - @abc.abstractmethod - async def Chunks(self, stream: 'grpclib.server.Stream[component.audioinput.v1.audioinput_pb2.ChunksRequest, component.audioinput.v1.audioinput_pb2.ChunksResponse]') -> None: - pass - - @abc.abstractmethod - async def Properties(self, stream: 'grpclib.server.Stream[component.audioinput.v1.audioinput_pb2.PropertiesRequest, component.audioinput.v1.audioinput_pb2.PropertiesResponse]') -> None: - pass - - @abc.abstractmethod - async def Record(self, stream: 'grpclib.server.Stream[component.audioinput.v1.audioinput_pb2.RecordRequest, google.api.httpbody_pb2.HttpBody]') -> None: - pass - - @abc.abstractmethod - async def DoCommand(self, stream: 'grpclib.server.Stream[common.v1.common_pb2.DoCommandRequest, common.v1.common_pb2.DoCommandResponse]') -> None: - pass - - @abc.abstractmethod - async def GetGeometries(self, stream: 'grpclib.server.Stream[common.v1.common_pb2.GetGeometriesRequest, common.v1.common_pb2.GetGeometriesResponse]') -> None: - pass - - def __mapping__(self) -> typing.Dict[str, grpclib.const.Handler]: - return {'/viam.component.audioinput.v1.AudioInputService/Chunks': grpclib.const.Handler(self.Chunks, grpclib.const.Cardinality.UNARY_STREAM, component.audioinput.v1.audioinput_pb2.ChunksRequest, component.audioinput.v1.audioinput_pb2.ChunksResponse), '/viam.component.audioinput.v1.AudioInputService/Properties': grpclib.const.Handler(self.Properties, grpclib.const.Cardinality.UNARY_UNARY, component.audioinput.v1.audioinput_pb2.PropertiesRequest, component.audioinput.v1.audioinput_pb2.PropertiesResponse), '/viam.component.audioinput.v1.AudioInputService/Record': grpclib.const.Handler(self.Record, grpclib.const.Cardinality.UNARY_UNARY, component.audioinput.v1.audioinput_pb2.RecordRequest, google.api.httpbody_pb2.HttpBody), '/viam.component.audioinput.v1.AudioInputService/DoCommand': grpclib.const.Handler(self.DoCommand, grpclib.const.Cardinality.UNARY_UNARY, common.v1.common_pb2.DoCommandRequest, common.v1.common_pb2.DoCommandResponse), '/viam.component.audioinput.v1.AudioInputService/GetGeometries': grpclib.const.Handler(self.GetGeometries, grpclib.const.Cardinality.UNARY_UNARY, common.v1.common_pb2.GetGeometriesRequest, common.v1.common_pb2.GetGeometriesResponse)} - -class UnimplementedAudioInputServiceBase(AudioInputServiceBase): - - async def Chunks(self, stream: 'grpclib.server.Stream[component.audioinput.v1.audioinput_pb2.ChunksRequest, component.audioinput.v1.audioinput_pb2.ChunksResponse]') -> None: - raise grpclib.exceptions.GRPCError(grpclib.const.Status.UNIMPLEMENTED) - - async def Properties(self, stream: 'grpclib.server.Stream[component.audioinput.v1.audioinput_pb2.PropertiesRequest, component.audioinput.v1.audioinput_pb2.PropertiesResponse]') -> None: - raise grpclib.exceptions.GRPCError(grpclib.const.Status.UNIMPLEMENTED) - - async def Record(self, stream: 'grpclib.server.Stream[component.audioinput.v1.audioinput_pb2.RecordRequest, google.api.httpbody_pb2.HttpBody]') -> None: - raise grpclib.exceptions.GRPCError(grpclib.const.Status.UNIMPLEMENTED) - - async def DoCommand(self, stream: 'grpclib.server.Stream[common.v1.common_pb2.DoCommandRequest, common.v1.common_pb2.DoCommandResponse]') -> None: - raise grpclib.exceptions.GRPCError(grpclib.const.Status.UNIMPLEMENTED) - - async def GetGeometries(self, stream: 'grpclib.server.Stream[common.v1.common_pb2.GetGeometriesRequest, common.v1.common_pb2.GetGeometriesResponse]') -> None: - raise grpclib.exceptions.GRPCError(grpclib.const.Status.UNIMPLEMENTED) - -class AudioInputServiceStub: - - def __init__(self, channel: grpclib.client.Channel) -> None: - self.Chunks = grpclib.client.UnaryStreamMethod(channel, '/viam.component.audioinput.v1.AudioInputService/Chunks', component.audioinput.v1.audioinput_pb2.ChunksRequest, component.audioinput.v1.audioinput_pb2.ChunksResponse) - self.Properties = grpclib.client.UnaryUnaryMethod(channel, '/viam.component.audioinput.v1.AudioInputService/Properties', component.audioinput.v1.audioinput_pb2.PropertiesRequest, component.audioinput.v1.audioinput_pb2.PropertiesResponse) - self.Record = grpclib.client.UnaryUnaryMethod(channel, '/viam.component.audioinput.v1.AudioInputService/Record', component.audioinput.v1.audioinput_pb2.RecordRequest, google.api.httpbody_pb2.HttpBody) - self.DoCommand = grpclib.client.UnaryUnaryMethod(channel, '/viam.component.audioinput.v1.AudioInputService/DoCommand', common.v1.common_pb2.DoCommandRequest, common.v1.common_pb2.DoCommandResponse) - self.GetGeometries = grpclib.client.UnaryUnaryMethod(channel, '/viam.component.audioinput.v1.AudioInputService/GetGeometries', common.v1.common_pb2.GetGeometriesRequest, common.v1.common_pb2.GetGeometriesResponse) \ No newline at end of file diff --git a/src/viam/gen/component/audioinput/v1/audioinput_pb2.py b/src/viam/gen/component/audioinput/v1/audioinput_pb2.py deleted file mode 100644 index 1d3d65e342..0000000000 --- a/src/viam/gen/component/audioinput/v1/audioinput_pb2.py +++ /dev/null @@ -1,45 +0,0 @@ -"""Generated protocol buffer code.""" -from google.protobuf import descriptor as _descriptor -from google.protobuf import descriptor_pool as _descriptor_pool -from google.protobuf import runtime_version as _runtime_version -from google.protobuf import symbol_database as _symbol_database -from google.protobuf.internal import builder as _builder -_runtime_version.ValidateProtobufRuntimeVersion(_runtime_version.Domain.PUBLIC, 5, 29, 2, '', 'component/audioinput/v1/audioinput.proto') -_sym_db = _symbol_database.Default() -from ....common.v1 import common_pb2 as common_dot_v1_dot_common__pb2 -from google.api import annotations_pb2 as google_dot_api_dot_annotations__pb2 -from google.api import httpbody_pb2 as google_dot_api_dot_httpbody__pb2 -from google.protobuf import duration_pb2 as google_dot_protobuf_dot_duration__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n(component/audioinput/v1/audioinput.proto\x12\x1cviam.component.audioinput.v1\x1a\x16common/v1/common.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x19google/api/httpbody.proto\x1a\x1egoogle/protobuf/duration.proto"Z\n\rRecordRequest\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x125\n\x08duration\x18\x02 \x01(\x0b2\x19.google.protobuf.DurationR\x08duration"\xa2\x01\n\x0eAudioChunkInfo\x12O\n\rsample_format\x18\x01 \x01(\x0e2*.viam.component.audioinput.v1.SampleFormatR\x0csampleFormat\x12\x1a\n\x08channels\x18\x02 \x01(\rR\x08channels\x12#\n\rsampling_rate\x18\x03 \x01(\x03R\x0csamplingRate"8\n\nAudioChunk\x12\x12\n\x04data\x18\x01 \x01(\x0cR\x04data\x12\x16\n\x06length\x18\x02 \x01(\rR\x06length"t\n\rChunksRequest\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12O\n\rsample_format\x18\x02 \x01(\x0e2*.viam.component.audioinput.v1.SampleFormatR\x0csampleFormat"\x9e\x01\n\x0eChunksResponse\x12B\n\x04info\x18\x01 \x01(\x0b2,.viam.component.audioinput.v1.AudioChunkInfoH\x00R\x04info\x12@\n\x05chunk\x18\x02 \x01(\x0b2(.viam.component.audioinput.v1.AudioChunkH\x00R\x05chunkB\x06\n\x04type"\'\n\x11PropertiesRequest\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name"\x96\x02\n\x12PropertiesResponse\x12#\n\rchannel_count\x18\x01 \x01(\rR\x0cchannelCount\x123\n\x07latency\x18\x02 \x01(\x0b2\x19.google.protobuf.DurationR\x07latency\x12\x1f\n\x0bsample_rate\x18\x03 \x01(\rR\nsampleRate\x12\x1f\n\x0bsample_size\x18\x04 \x01(\rR\nsampleSize\x12"\n\ris_big_endian\x18\x05 \x01(\x08R\x0bisBigEndian\x12\x19\n\x08is_float\x18\x06 \x01(\x08R\x07isFloat\x12%\n\x0eis_interleaved\x18\x07 \x01(\x08R\risInterleaved*y\n\x0cSampleFormat\x12\x1d\n\x19SAMPLE_FORMAT_UNSPECIFIED\x10\x00\x12#\n\x1fSAMPLE_FORMAT_INT16_INTERLEAVED\x10\x01\x12%\n!SAMPLE_FORMAT_FLOAT32_INTERLEAVED\x10\x022\xdc\x05\n\x11AudioInputService\x12e\n\x06Chunks\x12+.viam.component.audioinput.v1.ChunksRequest\x1a,.viam.component.audioinput.v1.ChunksResponse0\x01\x12\xac\x01\n\nProperties\x12/.viam.component.audioinput.v1.PropertiesRequest\x1a0.viam.component.audioinput.v1.PropertiesResponse";\x82\xd3\xe4\x93\x025\x123/viam/api/v1/component/audioinput/{name}/properties\x12\x84\x01\n\x06Record\x12+.viam.component.audioinput.v1.RecordRequest\x1a\x14.google.api.HttpBody"7\x82\xd3\xe4\x93\x021\x12//viam/api/v1/component/audioinput/{name}/record\x12\x8d\x01\n\tDoCommand\x12 .viam.common.v1.DoCommandRequest\x1a!.viam.common.v1.DoCommandResponse";\x82\xd3\xe4\x93\x025"3/viam/api/v1/component/audioinput/{name}/do_command\x12\x99\x01\n\rGetGeometries\x12$.viam.common.v1.GetGeometriesRequest\x1a%.viam.common.v1.GetGeometriesResponse";\x82\xd3\xe4\x93\x025\x123/viam/api/v1/component/audioinput/{name}/geometriesBK\n com.viam.component.audioinput.v1Z\'go.viam.com/api/component/audioinput/v1b\x06proto3') -_globals = globals() -_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) -_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'component.audioinput.v1.audioinput_pb2', _globals) -if not _descriptor._USE_C_DESCRIPTORS: - _globals['DESCRIPTOR']._loaded_options = None - _globals['DESCRIPTOR']._serialized_options = b"\n com.viam.component.audioinput.v1Z'go.viam.com/api/component/audioinput/v1" - _globals['_AUDIOINPUTSERVICE'].methods_by_name['Properties']._loaded_options = None - _globals['_AUDIOINPUTSERVICE'].methods_by_name['Properties']._serialized_options = b'\x82\xd3\xe4\x93\x025\x123/viam/api/v1/component/audioinput/{name}/properties' - _globals['_AUDIOINPUTSERVICE'].methods_by_name['Record']._loaded_options = None - _globals['_AUDIOINPUTSERVICE'].methods_by_name['Record']._serialized_options = b'\x82\xd3\xe4\x93\x021\x12//viam/api/v1/component/audioinput/{name}/record' - _globals['_AUDIOINPUTSERVICE'].methods_by_name['DoCommand']._loaded_options = None - _globals['_AUDIOINPUTSERVICE'].methods_by_name['DoCommand']._serialized_options = b'\x82\xd3\xe4\x93\x025"3/viam/api/v1/component/audioinput/{name}/do_command' - _globals['_AUDIOINPUTSERVICE'].methods_by_name['GetGeometries']._loaded_options = None - _globals['_AUDIOINPUTSERVICE'].methods_by_name['GetGeometries']._serialized_options = b'\x82\xd3\xe4\x93\x025\x123/viam/api/v1/component/audioinput/{name}/geometries' - _globals['_SAMPLEFORMAT']._serialized_start = 1103 - _globals['_SAMPLEFORMAT']._serialized_end = 1224 - _globals['_RECORDREQUEST']._serialized_start = 187 - _globals['_RECORDREQUEST']._serialized_end = 277 - _globals['_AUDIOCHUNKINFO']._serialized_start = 280 - _globals['_AUDIOCHUNKINFO']._serialized_end = 442 - _globals['_AUDIOCHUNK']._serialized_start = 444 - _globals['_AUDIOCHUNK']._serialized_end = 500 - _globals['_CHUNKSREQUEST']._serialized_start = 502 - _globals['_CHUNKSREQUEST']._serialized_end = 618 - _globals['_CHUNKSRESPONSE']._serialized_start = 621 - _globals['_CHUNKSRESPONSE']._serialized_end = 779 - _globals['_PROPERTIESREQUEST']._serialized_start = 781 - _globals['_PROPERTIESREQUEST']._serialized_end = 820 - _globals['_PROPERTIESRESPONSE']._serialized_start = 823 - _globals['_PROPERTIESRESPONSE']._serialized_end = 1101 - _globals['_AUDIOINPUTSERVICE']._serialized_start = 1227 - _globals['_AUDIOINPUTSERVICE']._serialized_end = 1959 \ No newline at end of file diff --git a/src/viam/gen/component/audioinput/v1/audioinput_pb2.pyi b/src/viam/gen/component/audioinput/v1/audioinput_pb2.pyi deleted file mode 100644 index 64d3667aea..0000000000 --- a/src/viam/gen/component/audioinput/v1/audioinput_pb2.pyi +++ /dev/null @@ -1,179 +0,0 @@ -""" -@generated by mypy-protobuf. Do not edit manually! -isort:skip_file -""" -import builtins -import google.protobuf.descriptor -import google.protobuf.duration_pb2 -import google.protobuf.internal.enum_type_wrapper -import google.protobuf.message -import sys -import typing -if sys.version_info >= (3, 10): - import typing as typing_extensions -else: - import typing_extensions -DESCRIPTOR: google.protobuf.descriptor.FileDescriptor - -class _SampleFormat: - ValueType = typing.NewType('ValueType', builtins.int) - V: typing_extensions.TypeAlias = ValueType - -class _SampleFormatEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_SampleFormat.ValueType], builtins.type): - DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor - SAMPLE_FORMAT_UNSPECIFIED: _SampleFormat.ValueType - SAMPLE_FORMAT_INT16_INTERLEAVED: _SampleFormat.ValueType - SAMPLE_FORMAT_FLOAT32_INTERLEAVED: _SampleFormat.ValueType - -class SampleFormat(_SampleFormat, metaclass=_SampleFormatEnumTypeWrapper): - ... -SAMPLE_FORMAT_UNSPECIFIED: SampleFormat.ValueType -SAMPLE_FORMAT_INT16_INTERLEAVED: SampleFormat.ValueType -SAMPLE_FORMAT_FLOAT32_INTERLEAVED: SampleFormat.ValueType -global___SampleFormat = SampleFormat - -@typing.final -class RecordRequest(google.protobuf.message.Message): - DESCRIPTOR: google.protobuf.descriptor.Descriptor - NAME_FIELD_NUMBER: builtins.int - DURATION_FIELD_NUMBER: builtins.int - name: builtins.str - 'Name of an audio input' - - @property - def duration(self) -> google.protobuf.duration_pb2.Duration: - ... - - def __init__(self, *, name: builtins.str=..., duration: google.protobuf.duration_pb2.Duration | None=...) -> None: - ... - - def HasField(self, field_name: typing.Literal['duration', b'duration']) -> builtins.bool: - ... - - def ClearField(self, field_name: typing.Literal['duration', b'duration', 'name', b'name']) -> None: - ... -global___RecordRequest = RecordRequest - -@typing.final -class AudioChunkInfo(google.protobuf.message.Message): - DESCRIPTOR: google.protobuf.descriptor.Descriptor - SAMPLE_FORMAT_FIELD_NUMBER: builtins.int - CHANNELS_FIELD_NUMBER: builtins.int - SAMPLING_RATE_FIELD_NUMBER: builtins.int - sample_format: global___SampleFormat.ValueType - 'Actual sample encoding format of the response' - channels: builtins.int - sampling_rate: builtins.int - - def __init__(self, *, sample_format: global___SampleFormat.ValueType=..., channels: builtins.int=..., sampling_rate: builtins.int=...) -> None: - ... - - def ClearField(self, field_name: typing.Literal['channels', b'channels', 'sample_format', b'sample_format', 'sampling_rate', b'sampling_rate']) -> None: - ... -global___AudioChunkInfo = AudioChunkInfo - -@typing.final -class AudioChunk(google.protobuf.message.Message): - DESCRIPTOR: google.protobuf.descriptor.Descriptor - DATA_FIELD_NUMBER: builtins.int - LENGTH_FIELD_NUMBER: builtins.int - data: builtins.bytes - 'Data is PCM data that is organized according to the sample format\n along with its possible interleaving. Data in each format is\n Little Endian.\n ' - length: builtins.int - 'Length is the number of samples' - - def __init__(self, *, data: builtins.bytes=..., length: builtins.int=...) -> None: - ... - - def ClearField(self, field_name: typing.Literal['data', b'data', 'length', b'length']) -> None: - ... -global___AudioChunk = AudioChunk - -@typing.final -class ChunksRequest(google.protobuf.message.Message): - DESCRIPTOR: google.protobuf.descriptor.Descriptor - NAME_FIELD_NUMBER: builtins.int - SAMPLE_FORMAT_FIELD_NUMBER: builtins.int - name: builtins.str - 'Name of an audio input' - sample_format: global___SampleFormat.ValueType - 'Requested sample encoding format of the response' - - def __init__(self, *, name: builtins.str=..., sample_format: global___SampleFormat.ValueType=...) -> None: - ... - - def ClearField(self, field_name: typing.Literal['name', b'name', 'sample_format', b'sample_format']) -> None: - ... -global___ChunksRequest = ChunksRequest - -@typing.final -class ChunksResponse(google.protobuf.message.Message): - DESCRIPTOR: google.protobuf.descriptor.Descriptor - INFO_FIELD_NUMBER: builtins.int - CHUNK_FIELD_NUMBER: builtins.int - - @property - def info(self) -> global___AudioChunkInfo: - ... - - @property - def chunk(self) -> global___AudioChunk: - ... - - def __init__(self, *, info: global___AudioChunkInfo | None=..., chunk: global___AudioChunk | None=...) -> None: - ... - - def HasField(self, field_name: typing.Literal['chunk', b'chunk', 'info', b'info', 'type', b'type']) -> builtins.bool: - ... - - def ClearField(self, field_name: typing.Literal['chunk', b'chunk', 'info', b'info', 'type', b'type']) -> None: - ... - - def WhichOneof(self, oneof_group: typing.Literal['type', b'type']) -> typing.Literal['info', 'chunk'] | None: - ... -global___ChunksResponse = ChunksResponse - -@typing.final -class PropertiesRequest(google.protobuf.message.Message): - DESCRIPTOR: google.protobuf.descriptor.Descriptor - NAME_FIELD_NUMBER: builtins.int - name: builtins.str - 'Name of an audio input' - - def __init__(self, *, name: builtins.str=...) -> None: - ... - - def ClearField(self, field_name: typing.Literal['name', b'name']) -> None: - ... -global___PropertiesRequest = PropertiesRequest - -@typing.final -class PropertiesResponse(google.protobuf.message.Message): - DESCRIPTOR: google.protobuf.descriptor.Descriptor - CHANNEL_COUNT_FIELD_NUMBER: builtins.int - LATENCY_FIELD_NUMBER: builtins.int - SAMPLE_RATE_FIELD_NUMBER: builtins.int - SAMPLE_SIZE_FIELD_NUMBER: builtins.int - IS_BIG_ENDIAN_FIELD_NUMBER: builtins.int - IS_FLOAT_FIELD_NUMBER: builtins.int - IS_INTERLEAVED_FIELD_NUMBER: builtins.int - channel_count: builtins.int - sample_rate: builtins.int - sample_size: builtins.int - is_big_endian: builtins.bool - is_float: builtins.bool - is_interleaved: builtins.bool - - @property - def latency(self) -> google.protobuf.duration_pb2.Duration: - ... - - def __init__(self, *, channel_count: builtins.int=..., latency: google.protobuf.duration_pb2.Duration | None=..., sample_rate: builtins.int=..., sample_size: builtins.int=..., is_big_endian: builtins.bool=..., is_float: builtins.bool=..., is_interleaved: builtins.bool=...) -> None: - ... - - def HasField(self, field_name: typing.Literal['latency', b'latency']) -> builtins.bool: - ... - - def ClearField(self, field_name: typing.Literal['channel_count', b'channel_count', 'is_big_endian', b'is_big_endian', 'is_float', b'is_float', 'is_interleaved', b'is_interleaved', 'latency', b'latency', 'sample_rate', b'sample_rate', 'sample_size', b'sample_size']) -> None: - ... -global___PropertiesResponse = PropertiesResponse \ No newline at end of file diff --git a/src/viam/proto/component/audioinput/__init__.py b/src/viam/proto/component/audioinput/__init__.py deleted file mode 100644 index c0dde507ba..0000000000 --- a/src/viam/proto/component/audioinput/__init__.py +++ /dev/null @@ -1,30 +0,0 @@ -""" -@generated by Viam. -Do not edit manually! -""" - -from ....gen.component.audioinput.v1.audioinput_grpc import AudioInputServiceBase, AudioInputServiceStub, UnimplementedAudioInputServiceBase -from ....gen.component.audioinput.v1.audioinput_pb2 import ( - AudioChunk, - AudioChunkInfo, - ChunksRequest, - ChunksResponse, - PropertiesRequest, - PropertiesResponse, - RecordRequest, - SampleFormat, -) - -__all__ = [ - "AudioInputServiceBase", - "AudioInputServiceStub", - "UnimplementedAudioInputServiceBase", - "AudioChunk", - "AudioChunkInfo", - "ChunksRequest", - "ChunksResponse", - "PropertiesRequest", - "PropertiesResponse", - "RecordRequest", - "SampleFormat", -] diff --git a/src/viam/proto/component/camera/__init__.py b/src/viam/proto/component/camera/__init__.py index a466b581bf..bd1b352077 100644 --- a/src/viam/proto/component/camera/__init__.py +++ b/src/viam/proto/component/camera/__init__.py @@ -6,6 +6,7 @@ from ....gen.component.camera.v1.camera_grpc import CameraServiceBase, CameraServiceStub, UnimplementedCameraServiceBase from ....gen.component.camera.v1.camera_pb2 import ( DistortionParameters, + Format, GetImageRequest, GetImageResponse, GetImagesRequest, @@ -27,6 +28,7 @@ "CameraServiceStub", "UnimplementedCameraServiceBase", "DistortionParameters", + "Format", "GetImageRequest", "GetImageResponse", "GetImagesRequest", diff --git a/src/viam/version_metadata.py b/src/viam/version_metadata.py index f3c0a581f9..234f0214aa 100644 --- a/src/viam/version_metadata.py +++ b/src/viam/version_metadata.py @@ -1,4 +1,4 @@ __version__ = "0.66.0" -API_VERSION = "v0.1.507" +API_VERSION = "v0.1.511" SDK_VERSION = __version__ From 43668695a178d54208ffa8136a4ad461b622a0db Mon Sep 17 00:00:00 2001 From: Nick Franczak Date: Wed, 21 Jan 2026 11:32:54 -0500 Subject: [PATCH 02/10] i wonder if this is good enough to pass tests, etc --- src/viam/app/app_client.py | 8 + src/viam/app/data_client.py | 11 ++ src/viam/components/arm/arm.py | 5 +- src/viam/components/audio_in/__init__.py | 24 --- src/viam/components/audio_in/audio_in.py | 74 --------- src/viam/components/audio_in/client.py | 76 ---------- src/viam/components/audio_in/service.py | 83 ----------- tests/test_arm.py | 2 +- tests/test_audio_in.py | 182 ----------------------- 9 files changed, 23 insertions(+), 442 deletions(-) delete mode 100644 src/viam/components/audio_in/__init__.py delete mode 100644 src/viam/components/audio_in/audio_in.py delete mode 100644 src/viam/components/audio_in/client.py delete mode 100644 src/viam/components/audio_in/service.py delete mode 100644 tests/test_audio_in.py diff --git a/src/viam/app/app_client.py b/src/viam/app/app_client.py index 1f2dfc231a..d2d2674c52 100644 --- a/src/viam/app/app_client.py +++ b/src/viam/app/app_client.py @@ -165,6 +165,8 @@ UpdateRobotResponse, UploadModuleFileRequest, Visibility, + FragmentImport, + FragmentImportList, ) from viam.proto.app import Fragment as FragmentPB from viam.proto.app import FragmentHistoryEntry as FragmentHistoryEntryPB @@ -736,6 +738,7 @@ async def update_organization( public_namespace: Optional[str] = None, region: Optional[str] = None, cid: Optional[str] = None, + default_fragments: Optional[List[FragmentImport]] = None, ) -> Organization: """Updates organization details. @@ -768,6 +771,11 @@ async def update_organization( region=region, cid=cid, name=name, + default_fragments=( + FragmentImportList(fragments=default_fragments) + if default_fragments is not None + else None + ), ) response: UpdateOrganizationResponse = await self._app_client.UpdateOrganization(request, metadata=self._metadata) return response.organization diff --git a/src/viam/app/data_client.py b/src/viam/app/data_client.py index 8cc2d9aa82..d255995e98 100644 --- a/src/viam/app/data_client.py +++ b/src/viam/app/data_client.py @@ -1535,6 +1535,7 @@ async def binary_data_capture_upload( tags: Optional[List[str]] = None, dataset_ids: Optional[List[str]] = None, data_request_times: Optional[Tuple[datetime, datetime]] = None, + mime_type: Optional[str] = None, ) -> str: """Upload binary sensor data. @@ -1573,6 +1574,7 @@ async def binary_data_capture_upload( dataset_ids (Optional[List[str]]): Optional list of datasets to add the data to. data_request_times (Optional[Tuple[datetime.datetime, datetime.datetime]]): Optional tuple containing datetime objects denoting the times this data was requested ``[0]`` by the robot and received ``[1]`` from the appropriate sensor. + mime_type (Optional[str]): Optional mime type of the data. Raises: GRPCError: If an invalid part ID is passed. @@ -1603,6 +1605,7 @@ async def binary_data_capture_upload( method_parameters=method_parameters, tags=tags, dataset_ids=dataset_ids, + mime_type=mime_type or "", ) if file_extension: metadata.file_extension = file_extension if file_extension[0] == "." else f".{file_extension}" @@ -1721,6 +1724,7 @@ async def streaming_data_capture_upload( data_request_times: Optional[Tuple[datetime, datetime]] = None, tags: Optional[List[str]] = None, dataset_ids: Optional[List[str]] = None, + mime_type: Optional[str] = None, ) -> str: """Uploads the metadata and contents of streaming binary data. @@ -1753,6 +1757,7 @@ async def streaming_data_capture_upload( denoting the times this data was requested ``[0]`` by the robot and received ``[1]`` from the appropriate sensor. tags (Optional[List[str]]): Optional list of tags to allow for tag-based filtering when retrieving data. dataset_ids (Optional[List[str]]): Optional list of datasets to add the data to. + mime_type (Optional[str]): Optional mime type of the data. Raises: GRPCError: If an invalid part ID is passed. @@ -1773,6 +1778,7 @@ async def streaming_data_capture_upload( file_extension=file_ext if file_ext[0] == "." else f".{file_ext}", tags=tags, dataset_ids=dataset_ids, + mime_type=mime_type or "", ) sensor_metadata = SensorMetadata( time_requested=datetime_to_timestamp(data_request_times[0]) if data_request_times else None, @@ -1802,6 +1808,7 @@ async def file_upload( file_extension: Optional[str] = None, tags: Optional[List[str]] = None, dataset_ids: Optional[List[str]] = None, + mime_type: Optional[str] = None, ) -> str: """Upload arbitrary file data. @@ -1832,6 +1839,7 @@ async def file_upload( isn't provided. Files with a ``.jpeg``, ``.jpg``, or ``.png`` extension will be saved to the **Images** tab. tags (Optional[List[str]]): Optional list of tags to allow for tag-based filtering when retrieving data. dataset_ids (Optional[List[str]]): Optional list of datasets to add the data to. + mime_type (Optional[str]): Optional mime type of the data. Raises: GRPCError: If an invalid part ID is passed. @@ -1866,6 +1874,7 @@ async def file_upload_from_path( method_parameters: Optional[Mapping[str, Any]] = None, tags: Optional[List[str]] = None, dataset_ids: Optional[List[str]] = None, + mime_type: Optional[str] = None, ) -> str: """Upload arbitrary file data. @@ -1890,6 +1899,7 @@ async def file_upload_from_path( method_parameters (Optional[str]): Optional dictionary of the method parameters. No longer in active use. tags (Optional[List[str]]): Optional list of tags to allow for tag-based filtering when retrieving data. dataset_ids (Optional[List[str]]): Optional list of datasets to add the data to. + mime_type (Optional[str]): Optional mime type of the data. Raises: GRPCError: If an invalid part ID is passed. @@ -1917,6 +1927,7 @@ async def file_upload_from_path( file_extension=file_extension if file_extension else "", tags=tags, dataset_ids=dataset_ids, + mime_type=mime_type or "", ) response: FileUploadResponse = await self._file_upload(metadata=metadata, file_contents=FileData(data=data if data else bytes())) return response.binary_data_id diff --git a/src/viam/components/arm/arm.py b/src/viam/components/arm/arm.py index 5569bfafba..747d751d86 100644 --- a/src/viam/components/arm/arm.py +++ b/src/viam/components/arm/arm.py @@ -1,10 +1,11 @@ import abc -from typing import Any, Dict, Final, Optional, Tuple +from typing import Any, Dict, Final, Optional, Tuple, Mapping from viam.resource.types import API, RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT from ..component_base import ComponentBase from . import JointPositions, KinematicsFileFormat, Pose +from viam.proto.common import Mesh class Arm(ComponentBase): @@ -195,7 +196,7 @@ async def is_moving(self) -> bool: @abc.abstractmethod async def get_kinematics( self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs - ) -> Tuple[KinematicsFileFormat.ValueType, bytes]: + ) -> Tuple[KinematicsFileFormat.ValueType, bytes, Mapping[str, Mesh]]: """ Get the kinematics information associated with the arm. diff --git a/src/viam/components/audio_in/__init__.py b/src/viam/components/audio_in/__init__.py deleted file mode 100644 index ca61c6a942..0000000000 --- a/src/viam/components/audio_in/__init__.py +++ /dev/null @@ -1,24 +0,0 @@ -from viam.media.audio import AudioCodec -from viam.proto.common import AudioInfo -from viam.resource.registry import Registry, ResourceRegistration - -from .audio_in import AudioIn -from .client import AudioInClient -from .service import AudioInRPCService - -AudioResponse = AudioIn.AudioResponse - -__all__ = [ - "AudioIn", - "AudioResponse", - "AudioInfo", - "AudioCodec", -] - -Registry.register_api( - ResourceRegistration( - AudioIn, - AudioInRPCService, - lambda name, channel: AudioInClient(name, channel), - ) -) diff --git a/src/viam/components/audio_in/audio_in.py b/src/viam/components/audio_in/audio_in.py deleted file mode 100644 index 7a19fc2e55..0000000000 --- a/src/viam/components/audio_in/audio_in.py +++ /dev/null @@ -1,74 +0,0 @@ -import abc -import sys -from typing import Final, Optional - -from viam.proto.common import GetPropertiesResponse -from viam.proto.component.audioin import GetAudioResponse -from viam.resource.types import API, RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT -from viam.streams import Stream - -from ..component_base import ComponentBase - -if sys.version_info >= (3, 10): - from typing import TypeAlias -else: - from typing_extensions import TypeAlias - - -class AudioIn(ComponentBase): - """AudioIn represents a component that can capture audio. - - This acts as an abstract base class for any drivers representing specific - audio input implementations. This cannot be used on its own. If the ``__init__()`` function is - overridden, it must call the ``super().__init__()`` function. - """ - - API: Final = API( # pyright: ignore [reportIncompatibleVariableOverride] - RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT, "audio_in" - ) - - Properties: "TypeAlias" = GetPropertiesResponse - AudioResponse: "TypeAlias" = GetAudioResponse - AudioStream = Stream[AudioResponse] - - @abc.abstractmethod - async def get_audio( - self, codec: str, duration_seconds: float, previous_timestamp_ns: int, *, timeout: Optional[float] = None, **kwargs - ) -> AudioStream: - """ - Get a stream of audio from the device - - :: - - my_audio_in = AudioIn.from_robot(robot=machine, name="my_audio_in") - - stream = await my_audio_in.get_audio( - codec=AudioCodec.PCM16, - duration_seconds=10.0, - previous_timestamp_ns=0 - ) - - Args: - codec (str): The desired codec of the returned audio data - duration_seconds (float): duration of the stream. 0 = indefinite stream - previous_timestamp_ns (int): starting timestamp in nanoseconds for recording continuity. - Set to 0 to begin recording from the current time. - Returns: - AudioStream: stream of audio chunks. - ... - """ - - @abc.abstractmethod - async def get_properties(self, *, timeout: Optional[float] = None, **kwargs) -> Properties: - """ - Get the audio device's properties - - :: - - my_audio_in = AudioIn.from_robot(robot=machine, name="my_audio_in") - properties = await my_audio_in.get_properties() - - Returns: - Properties: The properties of the audio in device. - ... - """ diff --git a/src/viam/components/audio_in/client.py b/src/viam/components/audio_in/client.py deleted file mode 100644 index c025d6c25d..0000000000 --- a/src/viam/components/audio_in/client.py +++ /dev/null @@ -1,76 +0,0 @@ -import uuid -from typing import Any, Dict, List, Mapping, Optional - -from grpclib.client import Channel -from grpclib.client import Stream as ClientStream - -from viam.proto.common import DoCommandRequest, DoCommandResponse, Geometry, GetPropertiesRequest -from viam.proto.component.audioin import AudioInServiceStub, GetAudioRequest, GetAudioResponse -from viam.resource.rpc_client_base import ReconfigurableResourceRPCClientBase -from viam.streams import StreamWithIterator -from viam.utils import ValueTypes, dict_to_struct, get_geometries, struct_to_dict - -from .audio_in import AudioIn - - -class AudioInClient(AudioIn, ReconfigurableResourceRPCClientBase): - def __init__(self, name: str, channel: Channel) -> None: - self.channel = channel - self.client = AudioInServiceStub(channel) - super().__init__(name) - - async def get_audio( - self, - codec: str, - duration_seconds: float, - previous_timestamp_ns: int, - *, - extra: Optional[Dict[str, Any]] = None, - **kwargs, - ): - request = GetAudioRequest( - name=self.name, - codec=codec, - duration_seconds=duration_seconds, - previous_timestamp_nanoseconds=previous_timestamp_ns, - request_id=str(uuid.uuid4()), - extra=dict_to_struct(extra), - ) - - async def read(): - md = kwargs.get("metadata", self.Metadata()).proto - audio_stream: ClientStream[GetAudioRequest, GetAudioResponse] - async with self.client.GetAudio.open(metadata=md) as audio_stream: - try: - await audio_stream.send_message(request, end=True) - async for response in audio_stream: - yield response - except Exception as e: - raise (e) - - return StreamWithIterator(read()) - - async def get_properties( - self, - *, - timeout: Optional[float] = None, - **kwargs, - ) -> AudioIn.Properties: - md = kwargs.get("metadata", self.Metadata()).proto - return await self.client.GetProperties(GetPropertiesRequest(name=self.name), timeout=timeout, metadata=md) - - async def do_command( - self, - command: Mapping[str, ValueTypes], - *, - timeout: Optional[float] = None, - **kwargs, - ) -> Mapping[str, ValueTypes]: - md = kwargs.get("metadata", self.Metadata()).proto - request = DoCommandRequest(name=self.name, command=dict_to_struct(command)) - response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout, metadata=md) - return struct_to_dict(response.result) - - async def get_geometries(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> List[Geometry]: - md = kwargs.get("metadata", self.Metadata()) - return await get_geometries(self.client, self.name, extra, timeout, md) diff --git a/src/viam/components/audio_in/service.py b/src/viam/components/audio_in/service.py deleted file mode 100644 index cf23cd6b97..0000000000 --- a/src/viam/components/audio_in/service.py +++ /dev/null @@ -1,83 +0,0 @@ -from grpclib.server import Stream -from h2.exceptions import StreamClosedError - -from viam.logging import getLogger -from viam.proto.common import ( - DoCommandRequest, - DoCommandResponse, - GetGeometriesRequest, - GetGeometriesResponse, - GetPropertiesRequest, - GetPropertiesResponse, -) -from viam.proto.component.audioin import AudioInServiceBase, GetAudioRequest, GetAudioResponse -from viam.resource.rpc_service_base import ResourceRPCServiceBase -from viam.utils import dict_to_struct, struct_to_dict - -from .audio_in import AudioIn - -LOGGER = getLogger(__name__) - - -class AudioInRPCService(AudioInServiceBase, ResourceRPCServiceBase[AudioIn]): - """ - gRPC Service for a generic audio in. - """ - - RESOURCE_TYPE = AudioIn - - async def GetAudio(self, stream: Stream[GetAudioRequest, GetAudioResponse]) -> None: - request = await stream.recv_message() - assert request is not None - name = request.name - audio_in = self.get_resource(name) - audio_stream = await audio_in.get_audio( - codec=request.codec, - duration_seconds=request.duration_seconds, - previous_timestamp_ns=request.previous_timestamp_nanoseconds, - metadata=stream.metadata, - ) - async for response in audio_stream: - try: - response.request_id = request.request_id - await stream.send_message(response) - except StreamClosedError: - return - except Exception as e: - LOGGER.error(e) - return - - async def GetProperties(self, stream: Stream[GetPropertiesRequest, GetPropertiesResponse]) -> None: - request = await stream.recv_message() - assert request is not None - name = request.name - audio_in = self.get_resource(name) - timeout = stream.deadline.time_remaining() if stream.deadline else None - properties = await audio_in.get_properties( - timeout=timeout, - metadata=stream.metadata, - ) - await stream.send_message(properties) - - async def DoCommand(self, stream: Stream[DoCommandRequest, DoCommandResponse]) -> None: - request = await stream.recv_message() - assert request is not None - name = request.name - audio_in = self.get_resource(name) - timeout = stream.deadline.time_remaining() if stream.deadline else None - result = await audio_in.do_command( - command=struct_to_dict(request.command), - timeout=timeout, - metadata=stream.metadata, - ) - response = DoCommandResponse(result=dict_to_struct(result)) - await stream.send_message(response) - - async def GetGeometries(self, stream: Stream[GetGeometriesRequest, GetGeometriesResponse]) -> None: - request = await stream.recv_message() - assert request is not None - arm = self.get_resource(request.name) - timeout = stream.deadline.time_remaining() if stream.deadline else None - geometries = await arm.get_geometries(extra=struct_to_dict(request.extra), timeout=timeout) - response = GetGeometriesResponse(geometries=geometries) - await stream.send_message(response) diff --git a/tests/test_arm.py b/tests/test_arm.py index 9a2bfd07cf..f2df2f07df 100644 --- a/tests/test_arm.py +++ b/tests/test_arm.py @@ -155,7 +155,7 @@ async def test_get_kinematics(self): client = ArmServiceStub(channel) request = GetKinematicsRequest(name=self.name) response: GetKinematicsResponse = await client.GetKinematics(request) - assert (response.format, response.kinematics_data) == self.kinematics + assert (response.format, response.kinematics_data, response.meshes_by_urdf_filepath) == self.kinematics async def test_get_geometries(self): async with ChannelFor([self.service]) as channel: diff --git a/tests/test_audio_in.py b/tests/test_audio_in.py deleted file mode 100644 index af9684e6be..0000000000 --- a/tests/test_audio_in.py +++ /dev/null @@ -1,182 +0,0 @@ -import pytest -from grpclib.testing import ChannelFor - -from viam.components.audio_in import AudioIn, AudioInClient, AudioInRPCService, AudioResponse -from viam.components.generic.service import GenericRPCService -from viam.proto.common import ( - DoCommandRequest, - DoCommandResponse, - GetGeometriesRequest, - GetGeometriesResponse, - GetPropertiesRequest, - GetPropertiesResponse, -) -from viam.proto.component.audioin import AudioInServiceStub, GetAudioRequest -from viam.resource.manager import ResourceManager -from viam.utils import dict_to_struct, struct_to_dict - -from . import loose_approx -from .mocks.components import GEOMETRIES, MockAudioIn - -# Test properties for the mock AudioIn -PROPERTIES = AudioIn.Properties( - supported_codecs=["pcm16", "mp3"], - sample_rate_hz=44100, - num_channels=2, -) - - -@pytest.fixture(scope="function") -def audio_in() -> MockAudioIn: - return MockAudioIn(name="audio_in", properties=PROPERTIES) - - -@pytest.fixture(scope="function") -def service(audio_in: MockAudioIn) -> AudioInRPCService: - manager = ResourceManager([audio_in]) - return AudioInRPCService(manager) - - -@pytest.fixture(scope="function") -def generic_service(audio_in: MockAudioIn) -> GenericRPCService: - manager = ResourceManager([audio_in]) - return GenericRPCService(manager) - - -class TestAudioIn: - async def test_get_audio(self, audio_in: AudioIn): - previous_timestamp = 1000000000 # 1 second in nanoseconds - codec = "pcm16" - duration_seconds = 2.0 - - stream = await audio_in.get_audio(codec, duration_seconds, previous_timestamp) - - chunk_count = 0 - async for response in stream: - assert response.audio.audio_data is not None - assert response.audio.audio_info.codec == codec - assert response.audio.audio_info.sample_rate_hz == PROPERTIES.sample_rate_hz - assert response.audio.audio_info.num_channels == PROPERTIES.num_channels - assert response.audio.sequence == chunk_count - assert response.audio.start_timestamp_nanoseconds >= previous_timestamp - assert response.audio.end_timestamp_nanoseconds > response.audio.start_timestamp_nanoseconds - chunk_count += 1 - - assert chunk_count == 2 # Should have received 2 chunks from mock - - async def test_get_properties(self, audio_in: AudioIn): - properties = await audio_in.get_properties() - assert properties.supported_codecs == PROPERTIES.supported_codecs - assert properties.sample_rate_hz == PROPERTIES.sample_rate_hz - assert properties.num_channels == PROPERTIES.num_channels - - async def test_do_command(self, audio_in: AudioIn): - command = {"command": "args"} - resp = await audio_in.do_command(command) - assert resp == {"command": command} - - @pytest.mark.asyncio - async def test_get_geometries(self, audio_in: AudioIn): - geometries = await audio_in.get_geometries() - assert geometries == GEOMETRIES - - -class TestService: - async def test_get_audio(self, audio_in: AudioIn, service: AudioInRPCService): - async with ChannelFor([service]) as channel: - client = AudioInServiceStub(channel) - previous_timestamp = 1000000000 - codec = "pcm16" - duration_seconds = 2.0 - - request = GetAudioRequest( - name=audio_in.name, codec=codec, duration_seconds=duration_seconds, previous_timestamp_nanoseconds=previous_timestamp - ) - - async with client.GetAudio.open() as stream: - await stream.send_message(request) - - chunk_count = 0 - async for response in stream: - assert isinstance(response, AudioResponse) - assert response.audio.audio_data is not None - assert response.audio.audio_info.codec == codec - assert response.audio.audio_info.sample_rate_hz == PROPERTIES.sample_rate_hz - assert response.audio.audio_info.num_channels == PROPERTIES.num_channels - assert response.audio.sequence == chunk_count - chunk_count += 1 - - assert chunk_count > 0 - - async def test_get_properties(self, audio_in: MockAudioIn, service: AudioInRPCService): - assert audio_in.timeout is None - async with ChannelFor([service]) as channel: - client = AudioInServiceStub(channel) - response: GetPropertiesResponse = await client.GetProperties(GetPropertiesRequest(name=audio_in.name), timeout=1.82) - assert response.supported_codecs == PROPERTIES.supported_codecs - assert response.sample_rate_hz == PROPERTIES.sample_rate_hz - assert response.num_channels == PROPERTIES.num_channels - assert audio_in.timeout == loose_approx(1.82) - - async def test_do_command(self, audio_in: MockAudioIn, service: AudioInRPCService): - async with ChannelFor([service]) as channel: - client = AudioInServiceStub(channel) - command = {"command": "args"} - request = DoCommandRequest(name=audio_in.name, command=dict_to_struct(command)) - response: DoCommandResponse = await client.DoCommand(request) - result = struct_to_dict(response.result) - assert result == {"command": command} - - async def test_get_geometries(self, audio_in: MockAudioIn, service: AudioInRPCService): - async with ChannelFor([service]) as channel: - client = AudioInServiceStub(channel) - request = GetGeometriesRequest(name=audio_in.name) - response: GetGeometriesResponse = await client.GetGeometries(request) - assert [geometry for geometry in response.geometries] == GEOMETRIES - - -class TestClient: - async def test_get_audio(self, audio_in: AudioIn, service: AudioInRPCService): - async with ChannelFor([service]) as channel: - client = AudioInClient(audio_in.name, channel) - - previous_timestamp = 1000000000 - codec = "pcm16" - duration_seconds = 2.0 - - stream = await client.get_audio(codec, duration_seconds, previous_timestamp) - - chunk_count = 0 - async for resp in stream: - assert resp.audio.audio_data is not None - assert resp.audio.audio_info.codec == codec - assert resp.audio.audio_info.sample_rate_hz == PROPERTIES.sample_rate_hz - assert resp.audio.audio_info.num_channels == PROPERTIES.num_channels - assert resp.audio.sequence == chunk_count - chunk_count += 1 - - assert chunk_count > 0 - - async def test_get_properties(self, audio_in: MockAudioIn, service: AudioInRPCService): - assert audio_in.timeout is None - async with ChannelFor([service]) as channel: - client = AudioInClient(audio_in.name, channel) - properties = await client.get_properties(timeout=4.4) - assert properties.supported_codecs == PROPERTIES.supported_codecs - assert properties.sample_rate_hz == PROPERTIES.sample_rate_hz - assert properties.num_channels == PROPERTIES.num_channels - assert audio_in.timeout == loose_approx(4.4) - - async def test_do_command(self, audio_in: AudioIn, service: AudioInRPCService): - async with ChannelFor([service]) as channel: - client = AudioInClient(audio_in.name, channel) - command = {"command": "args"} - resp = await client.do_command(command) - assert resp == {"command": command} - - @pytest.mark.asyncio - async def test_get_geometries(self, audio_in: AudioIn, service: AudioInRPCService): - async with ChannelFor([service]) as channel: - client = AudioInClient(audio_in.name, channel) - geometries = await client.get_geometries() - assert geometries == GEOMETRIES From 409611e92db50cf919060bb4dd4038cd215ee2b4 Mon Sep 17 00:00:00 2001 From: Nick Franczak Date: Wed, 21 Jan 2026 11:37:13 -0500 Subject: [PATCH 03/10] fix --- src/viam/components/arm/client.py | 6 +++--- src/viam/components/arm/service.py | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/viam/components/arm/client.py b/src/viam/components/arm/client.py index 37ad25e081..116d8ce75b 100644 --- a/src/viam/components/arm/client.py +++ b/src/viam/components/arm/client.py @@ -2,7 +2,7 @@ from grpclib.client import Channel -from viam.proto.common import DoCommandRequest, DoCommandResponse, Geometry, GetKinematicsRequest, GetKinematicsResponse +from viam.proto.common import DoCommandRequest, DoCommandResponse, Geometry, GetKinematicsRequest, GetKinematicsResponse, Mesh from viam.proto.component.arm import ( ArmServiceStub, GetEndPositionRequest, @@ -113,11 +113,11 @@ async def do_command( async def get_kinematics( self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs - ) -> Tuple[KinematicsFileFormat.ValueType, bytes]: + ) -> Tuple[KinematicsFileFormat.ValueType, bytes, Mapping[str, Mesh]]: md = kwargs.get("metadata", self.Metadata()).proto request = GetKinematicsRequest(name=self.name, extra=dict_to_struct(extra)) response: GetKinematicsResponse = await self.client.GetKinematics(request, timeout=timeout, metadata=md) - return (response.format, response.kinematics_data) + return (response.format, response.kinematics_data, response.meshes_by_urdf_filepath) async def get_geometries(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> List[Geometry]: md = kwargs.get("metadata", self.Metadata()) diff --git a/src/viam/components/arm/service.py b/src/viam/components/arm/service.py index 56e903daf8..9f37f943e6 100644 --- a/src/viam/components/arm/service.py +++ b/src/viam/components/arm/service.py @@ -109,8 +109,8 @@ async def GetKinematics(self, stream: Stream[GetKinematicsRequest, GetKinematics assert request is not None arm = self.get_resource(request.name) timeout = stream.deadline.time_remaining() if stream.deadline else None - format, kinematics_data = await arm.get_kinematics(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata) - response = GetKinematicsResponse(format=format, kinematics_data=kinematics_data) + format, kinematics_data, meshes = await arm.get_kinematics(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata) + response = GetKinematicsResponse(format=format, kinematics_data=kinematics_data, meshes_by_urdf_filepath=meshes) await stream.send_message(response) async def GetGeometries(self, stream: Stream[GetGeometriesRequest, GetGeometriesResponse]) -> None: From 705a685842c7d35297a69dbfe717344faac164e0 Mon Sep 17 00:00:00 2001 From: Nick Franczak Date: Wed, 21 Jan 2026 11:56:56 -0500 Subject: [PATCH 04/10] maybe this will work? --- examples/server/v1/components.py | 73 +++---------------------- src/viam/components/gantry/client.py | 5 +- src/viam/components/gantry/gantry.py | 5 +- src/viam/components/gantry/service.py | 4 +- src/viam/components/gripper/client.py | 6 +-- src/viam/components/gripper/gripper.py | 5 +- src/viam/components/gripper/service.py | 4 +- tests/mocks/components.py | 74 +++----------------------- tests/test_arm.py | 6 +-- tests/test_gantry.py | 6 ++- tests/test_gripper.py | 8 +-- tests/test_registry.py | 1 - 12 files changed, 41 insertions(+), 156 deletions(-) diff --git a/examples/server/v1/components.py b/examples/server/v1/components.py index 1f1c18ee9f..4bc0de836a 100644 --- a/examples/server/v1/components.py +++ b/examples/server/v1/components.py @@ -19,7 +19,6 @@ from PIL import Image from viam.components.arm import Arm -from viam.components.audio_in import AudioIn, AudioResponse from viam.components.audio_out import AudioOut from viam.components.base import Base from viam.components.board import Board, TickStream @@ -48,6 +47,7 @@ ResponseMetadata, Sphere, Vector3, + Mesh, ) from viam.proto.component.arm import JointPositions from viam.proto.component.encoder import PositionType @@ -73,7 +73,7 @@ def __init__(self, name: str): ) self.joint_positions = JointPositions(values=[0, 0, 0, 0, 0, 0]) self.is_stopped = True - self.kinematics = (KinematicsFileFormat.KINEMATICS_FILE_FORMAT_SVA, b"\x00\x01\x02") + self.kinematics = (KinematicsFileFormat.KINEMATICS_FILE_FORMAT_SVA, b"\x00\x01\x02", {}) super().__init__(name) async def get_end_position(self, extra: Optional[Dict[str, Any]] = None, **kwargs) -> Pose: @@ -101,71 +101,12 @@ async def stop(self, extra: Optional[Dict[str, Any]] = None, **kwargs): async def is_moving(self): return not self.is_stopped - async def get_kinematics(self, extra: Optional[Dict[str, Any]] = None, **kwargs) -> Tuple[KinematicsFileFormat.ValueType, bytes]: + async def get_kinematics(self, extra: Optional[Dict[str, Any]] = None, **kwargs) -> Tuple[KinematicsFileFormat.ValueType, bytes, Mapping[str, Mesh]]: return self.kinematics async def get_geometries(self, extra: Optional[Dict[str, Any]] = None, **kwargs) -> List[Geometry]: return GEOMETRIES -class ExampleAudioIn(AudioIn): - def __init__(self, name: str): - super().__init__(name) - self.sample_rate = 44100 - self.num_channels = 2 - self.supported_codecs = ["pcm16"] - self.chunk_count = 0 - self.latency = timedelta(milliseconds=20) - self.volume_scale = 0.2 - self.frequency_hz = 440 - - async def get_audio( - self, codec: str, duration_seconds: float, previous_timestamp_ns: int, *, timeout: Optional[float] = None, **kwargs - ) -> AudioIn.AudioStream: - async def read() -> AsyncIterator[AudioIn.AudioResponse]: - # Generate chunks based on duration - chunk_duration_ms = 100 # 100ms per chunk - chunks_to_generate = max(1, int((duration_seconds * 1000) / chunk_duration_ms)) - - for i in range(chunks_to_generate): - # Generate audio data (sine wave pattern) - chunk_data = b"" - samples_per_chunk = int(self.sample_rate * (chunk_duration_ms / 1000)) - - for sample in range(samples_per_chunk): - # Calculate the timing in seconds of this audio sample - time_offset = (i * chunk_duration_ms / 1000) + (sample / self.sample_rate) - # Generate one 16-bit PCM audio sample for a sine wave - # 32767 scales the value from (-1,1) to full 16 bit signed range (-32768,32767) - amplitude = int(32767 * self.volume_scale * math.sin(2 * math.pi * self.frequency_hz * time_offset)) - - # Convert to 16-bit PCM stereo - sample_bytes = amplitude.to_bytes(2, byteorder="little", signed=True) - chunk_data += sample_bytes * self.num_channels - - chunk_start_time = previous_timestamp_ns + (i * chunk_duration_ms * 1000000) # Convert ms to ns - chunk_end_time = chunk_start_time + (chunk_duration_ms * 1000000) - - audio_chunk = AudioInChunk( - audio_data=bytes(chunk_data), - audio_info=AudioInfo(codec=codec, sample_rate_hz=int(self.sample_rate), num_channels=self.num_channels), - sequence=i, - start_timestamp_nanoseconds=chunk_start_time, - end_timestamp_nanoseconds=chunk_end_time, - ) - audio_response = AudioResponse(audio=audio_chunk) - yield audio_response - - await asyncio.sleep(self.latency.total_seconds()) - - return StreamWithIterator(read()) - - async def get_properties(self, *, timeout: Optional[float] = None, **kwargs) -> AudioIn.Properties: - """Return the audio input device properties.""" - return AudioIn.Properties(supported_codecs=self.supported_codecs, sample_rate_hz=self.sample_rate, num_channels=self.num_channels) - - async def get_geometries(self, extra: Optional[Dict[str, Any]] = None, **kwargs) -> List[Geometry]: - return GEOMETRIES - class ExampleAudioOut(AudioOut): def __init__(self, name: str): @@ -546,8 +487,8 @@ async def is_moving(self): async def get_geometries(self, extra: Optional[Dict[str, Any]] = None, **kwargs) -> List[Geometry]: return GEOMETRIES - async def get_kinematics(self, *, extra=None, timeout=None, **kwargs) -> Tuple[KinematicsFileFormat.ValueType, bytes]: - return (KinematicsFileFormat.KINEMATICS_FILE_FORMAT_UNSPECIFIED, b"abc") + async def get_kinematics(self, *, extra=None, timeout=None, **kwargs) -> Tuple[KinematicsFileFormat.ValueType, bytes, Mapping[str, Mesh]]: + return (KinematicsFileFormat.KINEMATICS_FILE_FORMAT_UNSPECIFIED, b"abc", {}) class ExampleGripper(Gripper): @@ -555,7 +496,7 @@ def __init__(self, name: str): self.opened = False self.is_stopped = True self.holding_something = False - self.kinematics = (KinematicsFileFormat.KINEMATICS_FILE_FORMAT_SVA, b"\x00\x01\x02") + self.kinematics = (KinematicsFileFormat.KINEMATICS_FILE_FORMAT_SVA, b"\x00\x01\x02", {}) super().__init__(name) async def open(self, extra: Optional[Dict[str, Any]] = None, **kwargs): @@ -581,7 +522,7 @@ async def is_moving(self): async def get_geometries(self, extra: Optional[Dict[str, Any]] = None, **kwargs) -> List[Geometry]: return GEOMETRIES - async def get_kinematics(self, extra: Optional[Dict[str, Any]] = None, **kwargs) -> Tuple[KinematicsFileFormat.ValueType, bytes]: + async def get_kinematics(self, extra: Optional[Dict[str, Any]] = None, **kwargs) -> Tuple[KinematicsFileFormat.ValueType, bytes, Mapping[str, Mesh]]: return self.kinematics diff --git a/src/viam/components/gantry/client.py b/src/viam/components/gantry/client.py index 1d300bbf9f..237c11c8c7 100644 --- a/src/viam/components/gantry/client.py +++ b/src/viam/components/gantry/client.py @@ -9,6 +9,7 @@ GetKinematicsRequest, GetKinematicsResponse, KinematicsFileFormat, + Mesh, ) from viam.proto.component.gantry import ( GantryServiceStub, @@ -119,11 +120,11 @@ async def do_command( async def get_kinematics( self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs - ) -> Tuple[KinematicsFileFormat.ValueType, bytes]: + ) -> Tuple[KinematicsFileFormat.ValueType, bytes, Mapping[str, Mesh]]: md = kwargs.get("metadata", self.Metadata()).proto request = GetKinematicsRequest(name=self.name, extra=dict_to_struct(extra)) response: GetKinematicsResponse = await self.client.GetKinematics(request, timeout=timeout, metadata=md) - return (response.format, response.kinematics_data) + return (response.format, response.kinematics_data, response.meshes_by_urdf_filepath) async def get_geometries(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> List[Geometry]: md = kwargs.get("metadata", self.Metadata()) diff --git a/src/viam/components/gantry/gantry.py b/src/viam/components/gantry/gantry.py index 6d552fbe55..39e7140cdb 100644 --- a/src/viam/components/gantry/gantry.py +++ b/src/viam/components/gantry/gantry.py @@ -1,8 +1,9 @@ import abc -from typing import Any, Dict, Final, List, Optional, Tuple +from typing import Any, Dict, Final, List, Optional, Tuple, Mapping from viam.components.arm import KinematicsFileFormat from viam.resource.types import API, RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT +from viam.proto.common import Mesh from ..component_base import ComponentBase @@ -159,7 +160,7 @@ async def is_moving(self) -> bool: @abc.abstractmethod async def get_kinematics( self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs - ) -> Tuple[KinematicsFileFormat.ValueType, bytes]: + ) -> Tuple[KinematicsFileFormat.ValueType, bytes, Mapping[str, Mesh]]: """ Get the kinematics information associated with the gantry. diff --git a/src/viam/components/gantry/service.py b/src/viam/components/gantry/service.py index 7036a0517c..221c08f62a 100644 --- a/src/viam/components/gantry/service.py +++ b/src/viam/components/gantry/service.py @@ -115,8 +115,8 @@ async def GetKinematics(self, stream: Stream[GetKinematicsRequest, GetKinematics assert request is not None gantry = self.get_resource(request.name) timeout = stream.deadline.time_remaining() if stream.deadline else None - format, data = await gantry.get_kinematics(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata) - response = GetKinematicsResponse(format=format, kinematics_data=data) + format, data, meshes = await gantry.get_kinematics(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata) + response = GetKinematicsResponse(format=format, kinematics_data=data, meshes_by_urdf_filepath=meshes) await stream.send_message(response) async def GetGeometries(self, stream: Stream[GetGeometriesRequest, GetGeometriesResponse]) -> None: diff --git a/src/viam/components/gripper/client.py b/src/viam/components/gripper/client.py index 359a862b34..b90e4c6c84 100644 --- a/src/viam/components/gripper/client.py +++ b/src/viam/components/gripper/client.py @@ -2,7 +2,7 @@ from grpclib.client import Channel -from viam.proto.common import DoCommandRequest, DoCommandResponse, Geometry, GetKinematicsRequest, GetKinematicsResponse +from viam.proto.common import DoCommandRequest, DoCommandResponse, Geometry, GetKinematicsRequest, GetKinematicsResponse, Mesh from viam.proto.component.gripper import ( GrabRequest, GrabResponse, @@ -101,8 +101,8 @@ async def get_kinematics( extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs, - ) -> Tuple[KinematicsFileFormat.ValueType, bytes]: + ) -> Tuple[KinematicsFileFormat.ValueType, bytes, Mapping[str, Mesh]]: md = kwargs.get("metadata", self.Metadata()).proto request = GetKinematicsRequest(name=self.name, extra=dict_to_struct(extra)) response: GetKinematicsResponse = await self.client.GetKinematics(request, timeout=timeout, metadata=md) - return (response.format, response.kinematics_data) + return (response.format, response.kinematics_data, response.meshes_by_urdf_filepath) diff --git a/src/viam/components/gripper/gripper.py b/src/viam/components/gripper/gripper.py index 60883bbac7..d78378a7b7 100644 --- a/src/viam/components/gripper/gripper.py +++ b/src/viam/components/gripper/gripper.py @@ -1,9 +1,10 @@ import abc from dataclasses import dataclass -from typing import Any, Dict, Final, Optional, Tuple +from typing import Any, Dict, Final, Optional, Tuple, Mapping from viam.components.component_base import ComponentBase from viam.resource.types import API, RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT +from viam.proto.common import Mesh from . import KinematicsFileFormat @@ -161,7 +162,7 @@ async def get_kinematics( extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs, - ) -> Tuple[KinematicsFileFormat.ValueType, bytes]: + ) -> Tuple[KinematicsFileFormat.ValueType, bytes, Mapping[str, Mesh]]: """ Get the kinematics information associated with the gripper. diff --git a/src/viam/components/gripper/service.py b/src/viam/components/gripper/service.py index 571992b0dd..8ec94c5954 100644 --- a/src/viam/components/gripper/service.py +++ b/src/viam/components/gripper/service.py @@ -105,6 +105,6 @@ async def GetKinematics(self, stream: Stream[GetKinematicsRequest, GetKinematics assert request is not None gripper = self.get_resource(request.name) timeout = stream.deadline.time_remaining() if stream.deadline else None - format, kinematics_data = await gripper.get_kinematics(extra=struct_to_dict(request.extra), timeout=timeout) - response = GetKinematicsResponse(format=format, kinematics_data=kinematics_data) + format, kinematics_data, meshes = await gripper.get_kinematics(extra=struct_to_dict(request.extra), timeout=timeout) + response = GetKinematicsResponse(format=format, kinematics_data=kinematics_data, meshes_by_urdf_filepath=meshes) await stream.send_message(response) diff --git a/tests/mocks/components.py b/tests/mocks/components.py index e435db614e..ad4b6ae409 100644 --- a/tests/mocks/components.py +++ b/tests/mocks/components.py @@ -13,7 +13,6 @@ from google.protobuf.timestamp_pb2 import Timestamp from viam.components.arm import Arm, JointPositions, KinematicsFileFormat -from viam.components.audio_in import AudioIn, AudioResponse from viam.components.audio_out import AudioOut from viam.components.base import Base from viam.components.board import Board, Tick @@ -33,7 +32,7 @@ from viam.components.switch import Switch from viam.errors import ResourceNotFoundError from viam.media.video import CameraMimeType, NamedImage, ViamImage -from viam.proto.common import AudioInfo, Capsule, Geometry, GeoPoint, Orientation, Pose, PoseInFrame, ResponseMetadata, Sphere, Vector3 +from viam.proto.common import AudioInfo, Capsule, Geometry, GeoPoint, Orientation, Pose, PoseInFrame, ResponseMetadata, Sphere, Vector3, Mesh from viam.proto.component.audioin import AudioChunk as Chunk from viam.proto.component.board import PowerMode from viam.proto.component.encoder import PositionType @@ -51,7 +50,7 @@ def __init__(self, name: str): self.position = Pose(x=1, y=2, z=3, o_x=2, o_y=3, o_z=4, theta=20) self.joint_positions = JointPositions(values=[0, 0, 0, 0, 0, 0]) self.is_stopped = True - self.kinematics = (KinematicsFileFormat.KINEMATICS_FILE_FORMAT_SVA, b"\x00\x01\x02") + self.kinematics = (KinematicsFileFormat.KINEMATICS_FILE_FORMAT_SVA, b"\x00\x01\x02", {}) self.geometries = GEOMETRIES self.extra = None self.timeout: Optional[float] = None @@ -100,7 +99,7 @@ async def is_moving(self) -> bool: async def get_kinematics( self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs - ) -> Tuple[KinematicsFileFormat.ValueType, bytes]: + ) -> Tuple[KinematicsFileFormat.ValueType, bytes, Mapping[str, Mesh]]: self.extra = extra self.timeout = timeout return self.kinematics @@ -113,65 +112,6 @@ async def get_geometries(self, *, extra: Optional[Dict[str, Any]] = None, timeou async def do_command(self, command: Mapping[str, ValueTypes], *, timeout: Optional[float] = None, **kwargs) -> Mapping[str, ValueTypes]: return {"command": command} - -class MockAudioIn(AudioIn): - def __init__(self, name: str, properties: AudioIn.Properties): - super().__init__(name) - self.geometries = GEOMETRIES - self.properties = properties - self.timeout: Optional[float] = None - self.extra: Optional[Dict[str, Any]] = None - - async def get_audio( - self, - codec: str, - duration_seconds: float, - previous_timestamp_ns: int, - *, - extra: Optional[Dict[str, Any]] = None, - timeout: Optional[float] = None, - **kwargs, - ): - async def read() -> AsyncIterator[AudioResponse]: - # Generate mock audio chunks - for i in range(2): - chunk_data = f"audio_chunk_{i}".encode("utf-8") - timestamp_start = previous_timestamp_ns + i * 1000000000 # 1 second intervals in nanoseconds - timestamp_end = timestamp_start + 1000000000 - - audio_chunk = Chunk( - audio_data=chunk_data, - audio_info=AudioInfo( - codec=codec, sample_rate_hz=self.properties.sample_rate_hz, num_channels=self.properties.num_channels - ), - sequence=i, - start_timestamp_nanoseconds=timestamp_start, - end_timestamp_nanoseconds=timestamp_end, - ) - - audio_response = AudioResponse(audio=audio_chunk, request_id="mock_request") - yield audio_response - - self.extra = extra - self.timeout = timeout - return StreamWithIterator(read()) - - async def get_properties( - self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs - ) -> AudioIn.Properties: - self.extra = extra - self.timeout = timeout - return self.properties - - async def get_geometries(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None) -> List[Geometry]: - self.extra = extra - self.timeout = timeout - return self.geometries - - async def do_command(self, command: Mapping[str, ValueTypes], *, timeout: Optional[float] = None, **kwargs) -> Mapping[str, ValueTypes]: - return {"command": command} - - class MockAudioOut(AudioOut): def __init__(self, name: str, properties: AudioOut.Properties): super().__init__(name) @@ -518,7 +458,7 @@ def __init__(self, name: str, position: List[float], lengths: List[float]): self.position = position self.lengths = lengths self.is_stopped = True - self.kinematics = (KinematicsFileFormat.KINEMATICS_FILE_FORMAT_SVA, b"\x00\x01\x02") + self.kinematics = (KinematicsFileFormat.KINEMATICS_FILE_FORMAT_SVA, b"\x00\x01\x02", {}) self.extra = None self.homed = True self.speeds = Optional[List[float]] @@ -567,7 +507,7 @@ async def is_moving(self) -> bool: async def get_kinematics( self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs - ) -> Tuple[KinematicsFileFormat.ValueType, bytes]: + ) -> Tuple[KinematicsFileFormat.ValueType, bytes, Mapping[str, Mesh]]: self.extra = extra self.timeout = timeout return self.kinematics @@ -599,7 +539,7 @@ class MockGripper(Gripper): def __init__(self, name: str): self.opened = False self.geometries = GEOMETRIES - self.kinematics = (KinematicsFileFormat.KINEMATICS_FILE_FORMAT_SVA, b"\x00\x01\x02") + self.kinematics = (KinematicsFileFormat.KINEMATICS_FILE_FORMAT_SVA, b"\x00\x01\x02", {}) self.holding_something = False self.extra = None self.is_stopped = True @@ -642,7 +582,7 @@ async def get_geometries(self, *, extra: Optional[Dict[str, Any]] = None, timeou async def get_kinematics( self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs - ) -> Tuple[KinematicsFileFormat.ValueType, bytes]: + ) -> Tuple[KinematicsFileFormat.ValueType, bytes, Mapping[str, Mesh]]: self.extra = extra self.timeout = timeout return self.kinematics diff --git a/tests/test_arm.py b/tests/test_arm.py index f2df2f07df..ac57357ecb 100644 --- a/tests/test_arm.py +++ b/tests/test_arm.py @@ -35,7 +35,7 @@ class TestArm: arm = MockArm(name="arm") pose = Pose(x=5, y=5, z=5, o_x=5, o_y=5, o_z=5, theta=20) joint_pos = JointPositions(values=[1, 8, 2]) - kinematics = (KinematicsFileFormat.KINEMATICS_FILE_FORMAT_SVA, b"\x00\x01\x02") + kinematics = (KinematicsFileFormat.KINEMATICS_FILE_FORMAT_SVA, b"\x00\x01\x02", {}) async def test_move_to_position(self): await self.arm.move_to_position(self.pose) @@ -92,7 +92,7 @@ def setup_class(cls): cls.service = ArmRPCService(cls.manager) cls.pose = Pose(x=5, y=5, z=5, o_x=5, o_y=5, o_z=5, theta=20) cls.joint_pos = JointPositions(values=[1, 8, 2]) - cls.kinematics = (KinematicsFileFormat.KINEMATICS_FILE_FORMAT_SVA, b"\x00\x01\x02") + cls.kinematics = (KinematicsFileFormat.KINEMATICS_FILE_FORMAT_SVA, b"\x00\x01\x02", {}) async def test_move_to_position(self): async with ChannelFor([self.service]) as channel: @@ -182,7 +182,7 @@ def setup_class(cls): cls.service = ArmRPCService(cls.manager) cls.pose = Pose(x=5, y=5, z=5, o_x=5, o_y=5, o_z=5, theta=20) cls.joint_pos = JointPositions(values=[1, 8, 2]) - cls.kinematics = (KinematicsFileFormat.KINEMATICS_FILE_FORMAT_SVA, b"\x00\x01\x02") + cls.kinematics = (KinematicsFileFormat.KINEMATICS_FILE_FORMAT_SVA, b"\x00\x01\x02", {}) async def test_move_to_position(self): async with ChannelFor([self.service]) as channel: diff --git a/tests/test_gantry.py b/tests/test_gantry.py index 728f1926ab..e22501df11 100644 --- a/tests/test_gantry.py +++ b/tests/test_gantry.py @@ -72,9 +72,10 @@ async def test_extra(self): assert self.gantry.extra == extra async def test_get_kinematics(self): - format, data = await self.gantry.get_kinematics() + format, data, meshes = await self.gantry.get_kinematics() assert format == self.gantry.kinematics[0] assert data == self.gantry.kinematics[1] + assert meshes == self.gantry.kinematics[2] async def test_timeout(self): assert self.gantry.timeout is None @@ -258,9 +259,10 @@ async def test_extra(self): async def test_get_kinematics(self): async with ChannelFor([self.service]) as channel: client = GantryClient(self.gantry.name, channel) - format, data = await client.get_kinematics(timeout=1.1) + format, data, meshes = await client.get_kinematics(timeout=1.1) assert format == self.gantry.kinematics[0] assert data == self.gantry.kinematics[1] + assert meshes == self.gantry.kinematics[2] assert self.gantry.timeout == loose_approx(1.1) async def test_get_geometries(self): diff --git a/tests/test_gripper.py b/tests/test_gripper.py index 38499b7248..22b88ea2ec 100644 --- a/tests/test_gripper.py +++ b/tests/test_gripper.py @@ -87,7 +87,7 @@ async def test_get_geometries(self, gripper: MockGripper): assert geometries == GEOMETRIES async def test_get_kinematics(self, gripper: MockGripper): - kinematics = (KinematicsFileFormat.KINEMATICS_FILE_FORMAT_SVA, b"\x00\x01\x02") + kinematics = (KinematicsFileFormat.KINEMATICS_FILE_FORMAT_SVA, b"\x00\x01\x02", {}) kd = await gripper.get_kinematics(extra={"1": "2"}) assert kd == kinematics assert gripper.extra == {"1": "2"} @@ -162,10 +162,10 @@ async def test_get_geometries(self, gripper: MockGripper, service: GripperRPCSer async def test_get_kinematics(self, gripper: MockGripper, service: GripperRPCService): async with ChannelFor([service]) as channel: client = GripperServiceStub(channel) - kinematics = (KinematicsFileFormat.KINEMATICS_FILE_FORMAT_SVA, b"\x00\x01\x02") + kinematics = (KinematicsFileFormat.KINEMATICS_FILE_FORMAT_SVA, b"\x00\x01\x02", {}) request = GetKinematicsRequest(name=gripper.name) response: GetKinematicsResponse = await client.GetKinematics(request) - assert (response.format, response.kinematics_data) == kinematics + assert (response.format, response.kinematics_data, response.meshes_by_urdf_filepath) == kinematics class TestClient: @@ -226,7 +226,7 @@ async def test_get_geometries(self, gripper: MockGripper, service: GripperRPCSer async def test_get_kinematics(self, gripper: MockGripper, service: GripperRPCService): async with ChannelFor([service]) as channel: client = GripperClient(gripper.name, channel) - kinematics = (KinematicsFileFormat.KINEMATICS_FILE_FORMAT_SVA, b"\x00\x01\x02") + kinematics = (KinematicsFileFormat.KINEMATICS_FILE_FORMAT_SVA, b"\x00\x01\x02", {}) kd = await client.get_kinematics(extra={"1": "2"}) assert kd == kinematics assert gripper.extra == {"1": "2"} diff --git a/tests/test_registry.py b/tests/test_registry.py index ad1b705834..72ed8223f8 100644 --- a/tests/test_registry.py +++ b/tests/test_registry.py @@ -24,7 +24,6 @@ def __init__(self, name: str, channel: Channel): def test_components_register_themselves_correctly(): assert API(RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT, "arm") in Registry.REGISTERED_APIS() - assert API(RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT, "audio_in") in Registry.REGISTERED_APIS() assert API(RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT, "audio_out") in Registry.REGISTERED_APIS() assert API(RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT, "base") in Registry.REGISTERED_APIS() assert API(RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT, "board") in Registry.REGISTERED_APIS() From 666e7bc81c1a4d71dfacb74fd63205fb7acd0a28 Mon Sep 17 00:00:00 2001 From: Nick Franczak Date: Wed, 21 Jan 2026 11:59:36 -0500 Subject: [PATCH 05/10] lint --- tests/mocks/components.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/mocks/components.py b/tests/mocks/components.py index ad4b6ae409..e04fc8bf02 100644 --- a/tests/mocks/components.py +++ b/tests/mocks/components.py @@ -33,7 +33,6 @@ from viam.errors import ResourceNotFoundError from viam.media.video import CameraMimeType, NamedImage, ViamImage from viam.proto.common import AudioInfo, Capsule, Geometry, GeoPoint, Orientation, Pose, PoseInFrame, ResponseMetadata, Sphere, Vector3, Mesh -from viam.proto.component.audioin import AudioChunk as Chunk from viam.proto.component.board import PowerMode from viam.proto.component.encoder import PositionType from viam.streams import StreamWithIterator From 464cc6bdc16f9ec8be5f5a40ad37ff4cb2927993 Mon Sep 17 00:00:00 2001 From: Nick Franczak Date: Wed, 21 Jan 2026 13:13:06 -0500 Subject: [PATCH 06/10] fix test docs --- examples/server/v1/server.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/examples/server/v1/server.py b/examples/server/v1/server.py index 188bfe904d..4a31c5137e 100644 --- a/examples/server/v1/server.py +++ b/examples/server/v1/server.py @@ -8,7 +8,6 @@ from .components import ( ExampleAnalog, ExampleArm, - ExampleAudioIn, ExampleAudioOut, ExampleBase, ExampleBoard, @@ -30,7 +29,6 @@ async def run(host: str, port: int, log_level: int): my_arm = ExampleArm("arm0") - my_audio_in = ExampleAudioIn("audio_in0") my_audio_out = ExampleAudioOut("audio_out0") my_base = ExampleBase("base0") my_board = ExampleBoard( @@ -77,7 +75,6 @@ async def run(host: str, port: int, log_level: int): server = Server( resources=[ my_arm, - my_audio_in, my_audio_out, my_base, my_board, From 4951cfaa636a5eb6be81a231dec4429601e4b604 Mon Sep 17 00:00:00 2001 From: Nick Franczak Date: Thu, 22 Jan 2026 15:21:46 -0500 Subject: [PATCH 07/10] no longer a breaking change, using union type --- docs/examples/example.ipynb | 181 +------------------------ docs/examples/my_cool_arm.py | 8 +- src/viam/components/arm/arm.py | 10 +- src/viam/components/arm/service.py | 7 +- src/viam/components/gantry/gantry.py | 10 +- src/viam/components/gantry/service.py | 7 +- src/viam/components/gripper/gripper.py | 10 +- src/viam/components/gripper/service.py | 7 +- 8 files changed, 53 insertions(+), 187 deletions(-) diff --git a/docs/examples/example.ipynb b/docs/examples/example.ipynb index 9367bd0213..94c38e2efe 100644 --- a/docs/examples/example.ipynb +++ b/docs/examples/example.ipynb @@ -296,7 +296,7 @@ "from typing_extensions import Self\n", "\n", "from viam.proto.app.robot import ComponentConfig\n", - "from viam.proto.common import ResourceName\n", + "from viam.proto.common import Mesh, ResourceName\n", "from viam.resource.base import ResourceBase\n", "from viam.resource.types import Model, ModelFamily\n", "\n", @@ -543,14 +543,14 @@ "# modular-arm/src/my_modular_arm.py\n", "import asyncio\n", "import os\n", - "from typing import Any, ClassVar, Dict, Mapping, Optional, Tuple\n", + "from typing import Any, ClassVar, Dict, Mapping, Optional, Tuple, Union\n", "from typing_extensions import Self\n", "\n", "from viam.components.arm import Arm, JointPositions, KinematicsFileFormat, Pose\n", "from viam.module.module import Module\n", "from viam.operations import run_with_operation\n", "from viam.proto.app.robot import ComponentConfig\n", - "from viam.proto.common import ResourceName\n", + "from viam.proto.common import Mesh, ResourceName\n", "from viam.resource.base import ResourceBase\n", "from viam.resource.registry import Registry, ResourceCreatorRegistration\n", "from viam.resource.types import Model, ModelFamily\n", @@ -615,7 +615,7 @@ " async def is_moving(self) -> bool:\n", " return not self.is_stopped\n", "\n", - " async def get_kinematics(self, extra: Optional[Dict[str, Any]] = None, **kwargs) -> Tuple[KinematicsFileFormat.ValueType, bytes]:\n", + " async def get_kinematics(self, extra: Optional[Dict[str, Any]] = None, **kwargs) -> Union[Tuple[KinematicsFileFormat.ValueType, bytes], Tuple[KinematicsFileFormat.ValueType, bytes, Mapping[str, Mesh]]]:\n", " return KinematicsFileFormat.KINEMATICS_FILE_FORMAT_SVA, self.kinematics\n", "\n", "async def main():\n", @@ -672,176 +672,7 @@ { "data": { "text/html": [ - "
# my-python-robot/my_cool_arm.py\n",
-       "\n",
-       "import asyncio\n",
-       "import json\n",
-       "from typing import Any, Dict, Optional, Tuple\n",
-       "\n",
-       "from viam.components.arm import Arm, JointPositions, KinematicsFileFormat, Pose\n",
-       "from viam.operations import run_with_operation\n",
-       "\n",
-       "\n",
-       "class MyCoolArm(Arm):\n",
-       "    # Subclass the Viam Arm component and implement the required functions\n",
-       "\n",
-       "    def __init__(self, name: str):\n",
-       "        # Starting position\n",
-       "        self.position = Pose(\n",
-       "            x=0,\n",
-       "            y=0,\n",
-       "            z=0,\n",
-       "            o_x=0,\n",
-       "            o_y=0,\n",
-       "            o_z=0,\n",
-       "            theta=0,\n",
-       "        )\n",
-       "\n",
-       "        # Starting joint positions\n",
-       "        self.joint_positions = JointPositions(values=[0, 0, 0, 0, 0, 0])\n",
-       "        self.is_stopped = True\n",
-       "\n",
-       "        # Minimal working kinematics model\n",
-       "        self.kinematics = json.dumps(\n",
-       "            {\n",
-       "                "name": "MyArm",\n",
-       "                "links": [{"id": "base", "parent": "world", "translation": {"x": 0, "y": 0, "z": 0}}],\n",
-       "                "joints": [\n",
-       "                    {"id": "waist", "type": "revolute", "parent": "base", "axis": {"x": 0, "y": 0, "z": 1}, "max": 359, "min": -359}\n",
-       "                ],\n",
-       "            }\n",
-       "        ).encode("utf-8")\n",
-       "        super().__init__(name)\n",
-       "\n",
-       "    async def get_end_position(self, extra: Optional[Dict[str, Any]] = None, **kwargs) -> Pose:\n",
-       "        return self.position\n",
-       "\n",
-       "    @run_with_operation\n",
-       "    async def move_to_position(\n",
-       "        self,\n",
-       "        pose: Pose,\n",
-       "        extra: Optional[Dict[str, Any]] = None,\n",
-       "        **kwargs,\n",
-       "    ):\n",
-       "        operation = self.get_operation(kwargs)\n",
-       "\n",
-       "        self.is_stopped = False\n",
-       "        self.position = pose\n",
-       "\n",
-       "        # Simulate the length of time it takes for the arm to move to its new position\n",
-       "        for x in range(10):\n",
-       "            await asyncio.sleep(1)\n",
-       "\n",
-       "            # Check if the operation is cancelled and, if it is, stop the arm's motion\n",
-       "            if await operation.is_cancelled():\n",
-       "                await self.stop()\n",
-       "                break\n",
-       "\n",
-       "        self.is_stopped = True\n",
-       "\n",
-       "    async def get_joint_positions(self, extra: Optional[Dict[str, Any]] = None, **kwargs) -> JointPositions:\n",
-       "        return self.joint_positions\n",
-       "\n",
-       "    @run_with_operation\n",
-       "    async def move_to_joint_positions(self, positions: JointPositions, extra: Optional[Dict[str, Any]] = None, **kwargs):\n",
-       "        operation = self.get_operation(kwargs)\n",
-       "\n",
-       "        self.is_stopped = False\n",
-       "        self.joint_positions = positions\n",
-       "\n",
-       "        # Simulate the length of time it takes for the arm to move to its new joint position\n",
-       "        for x in range(10):\n",
-       "            await asyncio.sleep(1)\n",
-       "\n",
-       "            # Check if the operation is cancelled and, if it is, stop the arm's motion\n",
-       "            if await operation.is_cancelled():\n",
-       "                await self.stop()\n",
-       "                break\n",
-       "\n",
-       "        self.is_stopped = True\n",
-       "\n",
-       "    async def stop(self, extra: Optional[Dict[str, Any]] = None, **kwargs):\n",
-       "        self.is_stopped = True\n",
-       "\n",
-       "    async def is_moving(self) -> bool:\n",
-       "        return not self.is_stopped\n",
-       "\n",
-       "    async def get_kinematics(self, extra: Optional[Dict[str, Any]] = None, **kwargs) -> Tuple[KinematicsFileFormat.ValueType, bytes]:\n",
-       "        return KinematicsFileFormat.KINEMATICS_FILE_FORMAT_SVA, self.kinematics\n",
-       "
\n" + "
# my-python-robot/my_cool_arm.py\n\nimport asyncio\nimport json\nfrom typing import Any, Dict, Optional, Tuple\n\nfrom viam.components.arm import Arm, JointPositions, KinematicsFileFormat, Pose\nfrom viam.operations import run_with_operation\n\n\nclass MyCoolArm(Arm):\n    # Subclass the Viam Arm component and implement the required functions\n\n    def __init__(self, name: str):\n        # Starting position\n        self.position = Pose(\n            x=0,\n            y=0,\n            z=0,\n            o_x=0,\n            o_y=0,\n            o_z=0,\n            theta=0,\n        )\n\n        # Starting joint positions\n        self.joint_positions = JointPositions(values=[0, 0, 0, 0, 0, 0])\n        self.is_stopped = True\n\n        # Minimal working kinematics model\n        self.kinematics = json.dumps(\n            {\n                "name": "MyArm",\n                "links": [{"id": "base", "parent": "world", "translation": {"x": 0, "y": 0, "z": 0}}],\n                "joints": [\n                    {"id": "waist", "type": "revolute", "parent": "base", "axis": {"x": 0, "y": 0, "z": 1}, "max": 359, "min": -359}\n                ],\n            }\n        ).encode("utf-8")\n        super().__init__(name)\n\n    async def get_end_position(self, extra: Optional[Dict[str, Any]] = None, **kwargs) -> Pose:\n        return self.position\n\n    @run_with_operation\n    async def move_to_position(\n        self,\n        pose: Pose,\n        extra: Optional[Dict[str, Any]] = None,\n        **kwargs,\n    ):\n        operation = self.get_operation(kwargs)\n\n        self.is_stopped = False\n        self.position = pose\n\n        # Simulate the length of time it takes for the arm to move to its new position\n        for x in range(10):\n            await asyncio.sleep(1)\n\n            # Check if the operation is cancelled and, if it is, stop the arm's motion\n            if await operation.is_cancelled():\n                await self.stop()\n                break\n\n        self.is_stopped = True\n\n    async def get_joint_positions(self, extra: Optional[Dict[str, Any]] = None, **kwargs) -> JointPositions:\n        return self.joint_positions\n\n    @run_with_operation\n    async def move_to_joint_positions(self, positions: JointPositions, extra: Optional[Dict[str, Any]] = None, **kwargs):\n        operation = self.get_operation(kwargs)\n\n        self.is_stopped = False\n        self.joint_positions = positions\n\n        # Simulate the length of time it takes for the arm to move to its new joint position\n        for x in range(10):\n            await asyncio.sleep(1)\n\n            # Check if the operation is cancelled and, if it is, stop the arm's motion\n            if await operation.is_cancelled():\n                await self.stop()\n                break\n\n        self.is_stopped = True\n\n    async def stop(self, extra: Optional[Dict[str, Any]] = None, **kwargs):\n        self.is_stopped = True\n\n    async def is_moving(self) -> bool:\n        return not self.is_stopped\n\n    async def get_kinematics(self, extra: Optional[Dict[str, Any]] = None, **kwargs) -> Union[Tuple[KinematicsFileFormat.ValueType, bytes], Tuple[KinematicsFileFormat.ValueType, bytes, Mapping[str, Mesh]]]:\n        return KinematicsFileFormat.KINEMATICS_FILE_FORMAT_SVA, self.kinematics\n
\n" ], "text/plain": [ "" @@ -1037,7 +868,7 @@ "from typing_extensions import Self\n", "\n", "from viam.proto.app.robot import ComponentConfig\n", - "from viam.proto.common import ResourceName\n", + "from viam.proto.common import Mesh, ResourceName\n", "from viam.resource.base import ResourceBase\n", "from viam.resource.types import Model, ModelFamily\n", "\n", diff --git a/docs/examples/my_cool_arm.py b/docs/examples/my_cool_arm.py index 1fcdb11e9d..889b3cb667 100644 --- a/docs/examples/my_cool_arm.py +++ b/docs/examples/my_cool_arm.py @@ -2,11 +2,11 @@ import asyncio import json -from typing import Any, Dict, List, Optional, Tuple +from typing import Any, Dict, List, Mapping, Optional, Tuple, Union from viam.components.arm import Arm, JointPositions, KinematicsFileFormat, Pose from viam.operations import run_with_operation -from viam.proto.common import Capsule, Geometry, Sphere +from viam.proto.common import Capsule, Geometry, Mesh, Sphere class MyCoolArm(Arm): @@ -100,7 +100,9 @@ async def is_moving(self) -> bool: async def get_geometries(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None) -> List[Geometry]: return self.geometries - async def get_kinematics(self, extra: Optional[Dict[str, Any]] = None, **kwargs) -> Tuple[KinematicsFileFormat.ValueType, bytes]: + async def get_kinematics( + self, extra: Optional[Dict[str, Any]] = None, **kwargs + ) -> Union[Tuple[KinematicsFileFormat.ValueType, bytes], Tuple[KinematicsFileFormat.ValueType, bytes, Mapping[str, Mesh]]]: return KinematicsFileFormat.KINEMATICS_FILE_FORMAT_SVA, self.kinematics async def close(self): diff --git a/src/viam/components/arm/arm.py b/src/viam/components/arm/arm.py index 747d751d86..b1cb779e4d 100644 --- a/src/viam/components/arm/arm.py +++ b/src/viam/components/arm/arm.py @@ -1,5 +1,5 @@ import abc -from typing import Any, Dict, Final, Optional, Tuple, Mapping +from typing import Any, Dict, Final, Optional, Tuple, Mapping, Union from viam.resource.types import API, RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT @@ -7,6 +7,11 @@ from . import JointPositions, KinematicsFileFormat, Pose from viam.proto.common import Mesh +KinematicsReturn = Union[ + Tuple[KinematicsFileFormat.ValueType, bytes], + Tuple[KinematicsFileFormat.ValueType, bytes, Mapping[str, Mesh]], +] + class Arm(ComponentBase): """ @@ -196,7 +201,7 @@ async def is_moving(self) -> bool: @abc.abstractmethod async def get_kinematics( self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs - ) -> Tuple[KinematicsFileFormat.ValueType, bytes, Mapping[str, Mesh]]: + ) -> KinematicsReturn: """ Get the kinematics information associated with the arm. @@ -218,6 +223,7 @@ async def get_kinematics( file, either in URDF format (``KinematicsFileFormat.KINEMATICS_FILE_FORMAT_URDF``) or Viam's kinematic parameter format (spatial vector algebra) (``KinematicsFileFormat.KINEMATICS_FILE_FORMAT_SVA``), and the second [1] value represents the byte contents of the file. + If available, a third [2] value provides meshes keyed by URDF filepath. For more information, see `Arm component `_. """ diff --git a/src/viam/components/arm/service.py b/src/viam/components/arm/service.py index 9f37f943e6..b4d3d7f5fb 100644 --- a/src/viam/components/arm/service.py +++ b/src/viam/components/arm/service.py @@ -109,7 +109,12 @@ async def GetKinematics(self, stream: Stream[GetKinematicsRequest, GetKinematics assert request is not None arm = self.get_resource(request.name) timeout = stream.deadline.time_remaining() if stream.deadline else None - format, kinematics_data, meshes = await arm.get_kinematics(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata) + kinematics = await arm.get_kinematics(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata) + if len(kinematics) == 2: + format, kinematics_data = kinematics + meshes = {} + else: + format, kinematics_data, meshes = kinematics response = GetKinematicsResponse(format=format, kinematics_data=kinematics_data, meshes_by_urdf_filepath=meshes) await stream.send_message(response) diff --git a/src/viam/components/gantry/gantry.py b/src/viam/components/gantry/gantry.py index 39e7140cdb..3556c00de4 100644 --- a/src/viam/components/gantry/gantry.py +++ b/src/viam/components/gantry/gantry.py @@ -1,5 +1,5 @@ import abc -from typing import Any, Dict, Final, List, Optional, Tuple, Mapping +from typing import Any, Dict, Final, List, Optional, Tuple, Mapping, Union from viam.components.arm import KinematicsFileFormat from viam.resource.types import API, RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT @@ -7,6 +7,11 @@ from ..component_base import ComponentBase +KinematicsReturn = Union[ + Tuple[KinematicsFileFormat.ValueType, bytes], + Tuple[KinematicsFileFormat.ValueType, bytes, Mapping[str, Mesh]], +] + class Gantry(ComponentBase): """ @@ -160,7 +165,7 @@ async def is_moving(self) -> bool: @abc.abstractmethod async def get_kinematics( self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs - ) -> Tuple[KinematicsFileFormat.ValueType, bytes, Mapping[str, Mesh]]: + ) -> KinematicsReturn: """ Get the kinematics information associated with the gantry. @@ -182,6 +187,7 @@ async def get_kinematics( file, either in URDF format (``KinematicsFileFormat.KINEMATICS_FILE_FORMAT_URDF``) or Viam's kinematic parameter format (spatial vector algebra) (``KinematicsFileFormat.KINEMATICS_FILE_FORMAT_SVA``), and the second [1] value represents the byte contents of the file. + If available, a third [2] value provides meshes keyed by URDF filepath. For more information, see `Arm component `_. """ diff --git a/src/viam/components/gantry/service.py b/src/viam/components/gantry/service.py index 221c08f62a..70f99a01d7 100644 --- a/src/viam/components/gantry/service.py +++ b/src/viam/components/gantry/service.py @@ -115,7 +115,12 @@ async def GetKinematics(self, stream: Stream[GetKinematicsRequest, GetKinematics assert request is not None gantry = self.get_resource(request.name) timeout = stream.deadline.time_remaining() if stream.deadline else None - format, data, meshes = await gantry.get_kinematics(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata) + kinematics = await gantry.get_kinematics(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata) + if len(kinematics) == 2: + format, data = kinematics + meshes = {} + else: + format, data, meshes = kinematics response = GetKinematicsResponse(format=format, kinematics_data=data, meshes_by_urdf_filepath=meshes) await stream.send_message(response) diff --git a/src/viam/components/gripper/gripper.py b/src/viam/components/gripper/gripper.py index d78378a7b7..7bb0af10c9 100644 --- a/src/viam/components/gripper/gripper.py +++ b/src/viam/components/gripper/gripper.py @@ -1,6 +1,6 @@ import abc from dataclasses import dataclass -from typing import Any, Dict, Final, Optional, Tuple, Mapping +from typing import Any, Dict, Final, Optional, Tuple, Mapping, Union from viam.components.component_base import ComponentBase from viam.resource.types import API, RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT @@ -8,6 +8,11 @@ from . import KinematicsFileFormat +KinematicsReturn = Union[ + Tuple[KinematicsFileFormat.ValueType, bytes], + Tuple[KinematicsFileFormat.ValueType, bytes, Mapping[str, Mesh]], +] + class Gripper(ComponentBase): """ @@ -162,7 +167,7 @@ async def get_kinematics( extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs, - ) -> Tuple[KinematicsFileFormat.ValueType, bytes, Mapping[str, Mesh]]: + ) -> KinematicsReturn: """ Get the kinematics information associated with the gripper. @@ -184,6 +189,7 @@ async def get_kinematics( file, either in URDF format (``KinematicsFileFormat.KINEMATICS_FILE_FORMAT_URDF``) or Viam's kinematic parameter format (spatial vector algebra) (``KinematicsFileFormat.KINEMATICS_FILE_FORMAT_SVA``), and the second [1] value represents the byte contents of the file. + If available, a third [2] value provides meshes keyed by URDF filepath. For more information, see `Gripper component `_. """ diff --git a/src/viam/components/gripper/service.py b/src/viam/components/gripper/service.py index 8ec94c5954..f40b02df3f 100644 --- a/src/viam/components/gripper/service.py +++ b/src/viam/components/gripper/service.py @@ -105,6 +105,11 @@ async def GetKinematics(self, stream: Stream[GetKinematicsRequest, GetKinematics assert request is not None gripper = self.get_resource(request.name) timeout = stream.deadline.time_remaining() if stream.deadline else None - format, kinematics_data, meshes = await gripper.get_kinematics(extra=struct_to_dict(request.extra), timeout=timeout) + kinematics = await gripper.get_kinematics(extra=struct_to_dict(request.extra), timeout=timeout) + if len(kinematics) == 2: + format, kinematics_data = kinematics + meshes = {} + else: + format, kinematics_data, meshes = kinematics response = GetKinematicsResponse(format=format, kinematics_data=kinematics_data, meshes_by_urdf_filepath=meshes) await stream.send_message(response) From 334da1b7f8a3e2822cd76ba65abad0c3b8add74f Mon Sep 17 00:00:00 2001 From: Nick Franczak Date: Thu, 22 Jan 2026 15:36:21 -0500 Subject: [PATCH 08/10] no need to remove audio in --- src/viam/components/audio_in/__init__.py | 24 +++ src/viam/components/audio_in/audio_in.py | 74 +++++++++ src/viam/components/audio_in/client.py | 76 ++++++++++ src/viam/components/audio_in/service.py | 83 +++++++++++ tests/test_audio_in.py | 182 +++++++++++++++++++++++ 5 files changed, 439 insertions(+) create mode 100644 src/viam/components/audio_in/__init__.py create mode 100644 src/viam/components/audio_in/audio_in.py create mode 100644 src/viam/components/audio_in/client.py create mode 100644 src/viam/components/audio_in/service.py create mode 100644 tests/test_audio_in.py diff --git a/src/viam/components/audio_in/__init__.py b/src/viam/components/audio_in/__init__.py new file mode 100644 index 0000000000..ca61c6a942 --- /dev/null +++ b/src/viam/components/audio_in/__init__.py @@ -0,0 +1,24 @@ +from viam.media.audio import AudioCodec +from viam.proto.common import AudioInfo +from viam.resource.registry import Registry, ResourceRegistration + +from .audio_in import AudioIn +from .client import AudioInClient +from .service import AudioInRPCService + +AudioResponse = AudioIn.AudioResponse + +__all__ = [ + "AudioIn", + "AudioResponse", + "AudioInfo", + "AudioCodec", +] + +Registry.register_api( + ResourceRegistration( + AudioIn, + AudioInRPCService, + lambda name, channel: AudioInClient(name, channel), + ) +) diff --git a/src/viam/components/audio_in/audio_in.py b/src/viam/components/audio_in/audio_in.py new file mode 100644 index 0000000000..7a19fc2e55 --- /dev/null +++ b/src/viam/components/audio_in/audio_in.py @@ -0,0 +1,74 @@ +import abc +import sys +from typing import Final, Optional + +from viam.proto.common import GetPropertiesResponse +from viam.proto.component.audioin import GetAudioResponse +from viam.resource.types import API, RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT +from viam.streams import Stream + +from ..component_base import ComponentBase + +if sys.version_info >= (3, 10): + from typing import TypeAlias +else: + from typing_extensions import TypeAlias + + +class AudioIn(ComponentBase): + """AudioIn represents a component that can capture audio. + + This acts as an abstract base class for any drivers representing specific + audio input implementations. This cannot be used on its own. If the ``__init__()`` function is + overridden, it must call the ``super().__init__()`` function. + """ + + API: Final = API( # pyright: ignore [reportIncompatibleVariableOverride] + RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT, "audio_in" + ) + + Properties: "TypeAlias" = GetPropertiesResponse + AudioResponse: "TypeAlias" = GetAudioResponse + AudioStream = Stream[AudioResponse] + + @abc.abstractmethod + async def get_audio( + self, codec: str, duration_seconds: float, previous_timestamp_ns: int, *, timeout: Optional[float] = None, **kwargs + ) -> AudioStream: + """ + Get a stream of audio from the device + + :: + + my_audio_in = AudioIn.from_robot(robot=machine, name="my_audio_in") + + stream = await my_audio_in.get_audio( + codec=AudioCodec.PCM16, + duration_seconds=10.0, + previous_timestamp_ns=0 + ) + + Args: + codec (str): The desired codec of the returned audio data + duration_seconds (float): duration of the stream. 0 = indefinite stream + previous_timestamp_ns (int): starting timestamp in nanoseconds for recording continuity. + Set to 0 to begin recording from the current time. + Returns: + AudioStream: stream of audio chunks. + ... + """ + + @abc.abstractmethod + async def get_properties(self, *, timeout: Optional[float] = None, **kwargs) -> Properties: + """ + Get the audio device's properties + + :: + + my_audio_in = AudioIn.from_robot(robot=machine, name="my_audio_in") + properties = await my_audio_in.get_properties() + + Returns: + Properties: The properties of the audio in device. + ... + """ diff --git a/src/viam/components/audio_in/client.py b/src/viam/components/audio_in/client.py new file mode 100644 index 0000000000..c025d6c25d --- /dev/null +++ b/src/viam/components/audio_in/client.py @@ -0,0 +1,76 @@ +import uuid +from typing import Any, Dict, List, Mapping, Optional + +from grpclib.client import Channel +from grpclib.client import Stream as ClientStream + +from viam.proto.common import DoCommandRequest, DoCommandResponse, Geometry, GetPropertiesRequest +from viam.proto.component.audioin import AudioInServiceStub, GetAudioRequest, GetAudioResponse +from viam.resource.rpc_client_base import ReconfigurableResourceRPCClientBase +from viam.streams import StreamWithIterator +from viam.utils import ValueTypes, dict_to_struct, get_geometries, struct_to_dict + +from .audio_in import AudioIn + + +class AudioInClient(AudioIn, ReconfigurableResourceRPCClientBase): + def __init__(self, name: str, channel: Channel) -> None: + self.channel = channel + self.client = AudioInServiceStub(channel) + super().__init__(name) + + async def get_audio( + self, + codec: str, + duration_seconds: float, + previous_timestamp_ns: int, + *, + extra: Optional[Dict[str, Any]] = None, + **kwargs, + ): + request = GetAudioRequest( + name=self.name, + codec=codec, + duration_seconds=duration_seconds, + previous_timestamp_nanoseconds=previous_timestamp_ns, + request_id=str(uuid.uuid4()), + extra=dict_to_struct(extra), + ) + + async def read(): + md = kwargs.get("metadata", self.Metadata()).proto + audio_stream: ClientStream[GetAudioRequest, GetAudioResponse] + async with self.client.GetAudio.open(metadata=md) as audio_stream: + try: + await audio_stream.send_message(request, end=True) + async for response in audio_stream: + yield response + except Exception as e: + raise (e) + + return StreamWithIterator(read()) + + async def get_properties( + self, + *, + timeout: Optional[float] = None, + **kwargs, + ) -> AudioIn.Properties: + md = kwargs.get("metadata", self.Metadata()).proto + return await self.client.GetProperties(GetPropertiesRequest(name=self.name), timeout=timeout, metadata=md) + + async def do_command( + self, + command: Mapping[str, ValueTypes], + *, + timeout: Optional[float] = None, + **kwargs, + ) -> Mapping[str, ValueTypes]: + md = kwargs.get("metadata", self.Metadata()).proto + request = DoCommandRequest(name=self.name, command=dict_to_struct(command)) + response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout, metadata=md) + return struct_to_dict(response.result) + + async def get_geometries(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> List[Geometry]: + md = kwargs.get("metadata", self.Metadata()) + return await get_geometries(self.client, self.name, extra, timeout, md) diff --git a/src/viam/components/audio_in/service.py b/src/viam/components/audio_in/service.py new file mode 100644 index 0000000000..cf23cd6b97 --- /dev/null +++ b/src/viam/components/audio_in/service.py @@ -0,0 +1,83 @@ +from grpclib.server import Stream +from h2.exceptions import StreamClosedError + +from viam.logging import getLogger +from viam.proto.common import ( + DoCommandRequest, + DoCommandResponse, + GetGeometriesRequest, + GetGeometriesResponse, + GetPropertiesRequest, + GetPropertiesResponse, +) +from viam.proto.component.audioin import AudioInServiceBase, GetAudioRequest, GetAudioResponse +from viam.resource.rpc_service_base import ResourceRPCServiceBase +from viam.utils import dict_to_struct, struct_to_dict + +from .audio_in import AudioIn + +LOGGER = getLogger(__name__) + + +class AudioInRPCService(AudioInServiceBase, ResourceRPCServiceBase[AudioIn]): + """ + gRPC Service for a generic audio in. + """ + + RESOURCE_TYPE = AudioIn + + async def GetAudio(self, stream: Stream[GetAudioRequest, GetAudioResponse]) -> None: + request = await stream.recv_message() + assert request is not None + name = request.name + audio_in = self.get_resource(name) + audio_stream = await audio_in.get_audio( + codec=request.codec, + duration_seconds=request.duration_seconds, + previous_timestamp_ns=request.previous_timestamp_nanoseconds, + metadata=stream.metadata, + ) + async for response in audio_stream: + try: + response.request_id = request.request_id + await stream.send_message(response) + except StreamClosedError: + return + except Exception as e: + LOGGER.error(e) + return + + async def GetProperties(self, stream: Stream[GetPropertiesRequest, GetPropertiesResponse]) -> None: + request = await stream.recv_message() + assert request is not None + name = request.name + audio_in = self.get_resource(name) + timeout = stream.deadline.time_remaining() if stream.deadline else None + properties = await audio_in.get_properties( + timeout=timeout, + metadata=stream.metadata, + ) + await stream.send_message(properties) + + async def DoCommand(self, stream: Stream[DoCommandRequest, DoCommandResponse]) -> None: + request = await stream.recv_message() + assert request is not None + name = request.name + audio_in = self.get_resource(name) + timeout = stream.deadline.time_remaining() if stream.deadline else None + result = await audio_in.do_command( + command=struct_to_dict(request.command), + timeout=timeout, + metadata=stream.metadata, + ) + response = DoCommandResponse(result=dict_to_struct(result)) + await stream.send_message(response) + + async def GetGeometries(self, stream: Stream[GetGeometriesRequest, GetGeometriesResponse]) -> None: + request = await stream.recv_message() + assert request is not None + arm = self.get_resource(request.name) + timeout = stream.deadline.time_remaining() if stream.deadline else None + geometries = await arm.get_geometries(extra=struct_to_dict(request.extra), timeout=timeout) + response = GetGeometriesResponse(geometries=geometries) + await stream.send_message(response) diff --git a/tests/test_audio_in.py b/tests/test_audio_in.py new file mode 100644 index 0000000000..af9684e6be --- /dev/null +++ b/tests/test_audio_in.py @@ -0,0 +1,182 @@ +import pytest +from grpclib.testing import ChannelFor + +from viam.components.audio_in import AudioIn, AudioInClient, AudioInRPCService, AudioResponse +from viam.components.generic.service import GenericRPCService +from viam.proto.common import ( + DoCommandRequest, + DoCommandResponse, + GetGeometriesRequest, + GetGeometriesResponse, + GetPropertiesRequest, + GetPropertiesResponse, +) +from viam.proto.component.audioin import AudioInServiceStub, GetAudioRequest +from viam.resource.manager import ResourceManager +from viam.utils import dict_to_struct, struct_to_dict + +from . import loose_approx +from .mocks.components import GEOMETRIES, MockAudioIn + +# Test properties for the mock AudioIn +PROPERTIES = AudioIn.Properties( + supported_codecs=["pcm16", "mp3"], + sample_rate_hz=44100, + num_channels=2, +) + + +@pytest.fixture(scope="function") +def audio_in() -> MockAudioIn: + return MockAudioIn(name="audio_in", properties=PROPERTIES) + + +@pytest.fixture(scope="function") +def service(audio_in: MockAudioIn) -> AudioInRPCService: + manager = ResourceManager([audio_in]) + return AudioInRPCService(manager) + + +@pytest.fixture(scope="function") +def generic_service(audio_in: MockAudioIn) -> GenericRPCService: + manager = ResourceManager([audio_in]) + return GenericRPCService(manager) + + +class TestAudioIn: + async def test_get_audio(self, audio_in: AudioIn): + previous_timestamp = 1000000000 # 1 second in nanoseconds + codec = "pcm16" + duration_seconds = 2.0 + + stream = await audio_in.get_audio(codec, duration_seconds, previous_timestamp) + + chunk_count = 0 + async for response in stream: + assert response.audio.audio_data is not None + assert response.audio.audio_info.codec == codec + assert response.audio.audio_info.sample_rate_hz == PROPERTIES.sample_rate_hz + assert response.audio.audio_info.num_channels == PROPERTIES.num_channels + assert response.audio.sequence == chunk_count + assert response.audio.start_timestamp_nanoseconds >= previous_timestamp + assert response.audio.end_timestamp_nanoseconds > response.audio.start_timestamp_nanoseconds + chunk_count += 1 + + assert chunk_count == 2 # Should have received 2 chunks from mock + + async def test_get_properties(self, audio_in: AudioIn): + properties = await audio_in.get_properties() + assert properties.supported_codecs == PROPERTIES.supported_codecs + assert properties.sample_rate_hz == PROPERTIES.sample_rate_hz + assert properties.num_channels == PROPERTIES.num_channels + + async def test_do_command(self, audio_in: AudioIn): + command = {"command": "args"} + resp = await audio_in.do_command(command) + assert resp == {"command": command} + + @pytest.mark.asyncio + async def test_get_geometries(self, audio_in: AudioIn): + geometries = await audio_in.get_geometries() + assert geometries == GEOMETRIES + + +class TestService: + async def test_get_audio(self, audio_in: AudioIn, service: AudioInRPCService): + async with ChannelFor([service]) as channel: + client = AudioInServiceStub(channel) + previous_timestamp = 1000000000 + codec = "pcm16" + duration_seconds = 2.0 + + request = GetAudioRequest( + name=audio_in.name, codec=codec, duration_seconds=duration_seconds, previous_timestamp_nanoseconds=previous_timestamp + ) + + async with client.GetAudio.open() as stream: + await stream.send_message(request) + + chunk_count = 0 + async for response in stream: + assert isinstance(response, AudioResponse) + assert response.audio.audio_data is not None + assert response.audio.audio_info.codec == codec + assert response.audio.audio_info.sample_rate_hz == PROPERTIES.sample_rate_hz + assert response.audio.audio_info.num_channels == PROPERTIES.num_channels + assert response.audio.sequence == chunk_count + chunk_count += 1 + + assert chunk_count > 0 + + async def test_get_properties(self, audio_in: MockAudioIn, service: AudioInRPCService): + assert audio_in.timeout is None + async with ChannelFor([service]) as channel: + client = AudioInServiceStub(channel) + response: GetPropertiesResponse = await client.GetProperties(GetPropertiesRequest(name=audio_in.name), timeout=1.82) + assert response.supported_codecs == PROPERTIES.supported_codecs + assert response.sample_rate_hz == PROPERTIES.sample_rate_hz + assert response.num_channels == PROPERTIES.num_channels + assert audio_in.timeout == loose_approx(1.82) + + async def test_do_command(self, audio_in: MockAudioIn, service: AudioInRPCService): + async with ChannelFor([service]) as channel: + client = AudioInServiceStub(channel) + command = {"command": "args"} + request = DoCommandRequest(name=audio_in.name, command=dict_to_struct(command)) + response: DoCommandResponse = await client.DoCommand(request) + result = struct_to_dict(response.result) + assert result == {"command": command} + + async def test_get_geometries(self, audio_in: MockAudioIn, service: AudioInRPCService): + async with ChannelFor([service]) as channel: + client = AudioInServiceStub(channel) + request = GetGeometriesRequest(name=audio_in.name) + response: GetGeometriesResponse = await client.GetGeometries(request) + assert [geometry for geometry in response.geometries] == GEOMETRIES + + +class TestClient: + async def test_get_audio(self, audio_in: AudioIn, service: AudioInRPCService): + async with ChannelFor([service]) as channel: + client = AudioInClient(audio_in.name, channel) + + previous_timestamp = 1000000000 + codec = "pcm16" + duration_seconds = 2.0 + + stream = await client.get_audio(codec, duration_seconds, previous_timestamp) + + chunk_count = 0 + async for resp in stream: + assert resp.audio.audio_data is not None + assert resp.audio.audio_info.codec == codec + assert resp.audio.audio_info.sample_rate_hz == PROPERTIES.sample_rate_hz + assert resp.audio.audio_info.num_channels == PROPERTIES.num_channels + assert resp.audio.sequence == chunk_count + chunk_count += 1 + + assert chunk_count > 0 + + async def test_get_properties(self, audio_in: MockAudioIn, service: AudioInRPCService): + assert audio_in.timeout is None + async with ChannelFor([service]) as channel: + client = AudioInClient(audio_in.name, channel) + properties = await client.get_properties(timeout=4.4) + assert properties.supported_codecs == PROPERTIES.supported_codecs + assert properties.sample_rate_hz == PROPERTIES.sample_rate_hz + assert properties.num_channels == PROPERTIES.num_channels + assert audio_in.timeout == loose_approx(4.4) + + async def test_do_command(self, audio_in: AudioIn, service: AudioInRPCService): + async with ChannelFor([service]) as channel: + client = AudioInClient(audio_in.name, channel) + command = {"command": "args"} + resp = await client.do_command(command) + assert resp == {"command": command} + + @pytest.mark.asyncio + async def test_get_geometries(self, audio_in: AudioIn, service: AudioInRPCService): + async with ChannelFor([service]) as channel: + client = AudioInClient(audio_in.name, channel) + geometries = await client.get_geometries() + assert geometries == GEOMETRIES From 8db6bea627a6e84caed4afcbe47ac1caca7e1c08 Mon Sep 17 00:00:00 2001 From: Nick Franczak Date: Thu, 22 Jan 2026 15:44:23 -0500 Subject: [PATCH 09/10] tests needed to be fixed of course --- tests/mocks/components.py | 49 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/tests/mocks/components.py b/tests/mocks/components.py index e04fc8bf02..7e658f0957 100644 --- a/tests/mocks/components.py +++ b/tests/mocks/components.py @@ -13,6 +13,7 @@ from google.protobuf.timestamp_pb2 import Timestamp from viam.components.arm import Arm, JointPositions, KinematicsFileFormat +from viam.components.audio_in import AudioIn from viam.components.audio_out import AudioOut from viam.components.base import Base from viam.components.board import Board, Tick @@ -33,6 +34,7 @@ from viam.errors import ResourceNotFoundError from viam.media.video import CameraMimeType, NamedImage, ViamImage from viam.proto.common import AudioInfo, Capsule, Geometry, GeoPoint, Orientation, Pose, PoseInFrame, ResponseMetadata, Sphere, Vector3, Mesh +from viam.proto.component.audioin import AudioChunk, GetAudioResponse from viam.proto.component.board import PowerMode from viam.proto.component.encoder import PositionType from viam.streams import StreamWithIterator @@ -111,6 +113,53 @@ async def get_geometries(self, *, extra: Optional[Dict[str, Any]] = None, timeou async def do_command(self, command: Mapping[str, ValueTypes], *, timeout: Optional[float] = None, **kwargs) -> Mapping[str, ValueTypes]: return {"command": command} + +class MockAudioIn(AudioIn): + def __init__(self, name: str, properties: AudioIn.Properties): + super().__init__(name) + self.properties = properties + self.geometries = GEOMETRIES + self.timeout: Optional[float] = None + self.extra: Optional[Dict[str, Any]] = None + + async def get_audio( + self, codec: str, duration_seconds: float, previous_timestamp_ns: int, *, timeout: Optional[float] = None, **kwargs + ) -> StreamWithIterator[GetAudioResponse]: + self.timeout = timeout + + async def read() -> AsyncIterator[GetAudioResponse]: + for sequence in range(2): + start_ts = previous_timestamp_ns + (sequence + 1) * 1_000_000_000 + end_ts = start_ts + 1_000_000_000 + yield GetAudioResponse( + audio=AudioChunk( + audio_data=b"mock-audio-data", + audio_info=AudioInfo( + codec=codec, + sample_rate_hz=self.properties.sample_rate_hz, + num_channels=self.properties.num_channels, + ), + start_timestamp_nanoseconds=start_ts, + end_timestamp_nanoseconds=end_ts, + sequence=sequence, + ) + ) + + return StreamWithIterator(read()) + + async def get_properties(self, *, timeout: Optional[float] = None, **kwargs) -> AudioIn.Properties: + self.timeout = timeout + return self.properties + + async def do_command(self, command: Mapping[str, ValueTypes], *, timeout: Optional[float] = None, **kwargs) -> Mapping[str, ValueTypes]: + return {"command": command} + + async def get_geometries(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs): + self.extra = extra + self.timeout = timeout + return self.geometries + + class MockAudioOut(AudioOut): def __init__(self, name: str, properties: AudioOut.Properties): super().__init__(name) From 101b5ffc6131bbfd3e1dc6ffcf14210607383e87 Mon Sep 17 00:00:00 2001 From: Nick Franczak Date: Fri, 23 Jan 2026 11:24:26 -0500 Subject: [PATCH 10/10] requested changes; make a shared return type; fix inconsistencies --- src/viam/components/__init__.py | 12 ++++++++++++ src/viam/components/arm/__init__.py | 2 ++ src/viam/components/arm/arm.py | 11 +++-------- src/viam/components/arm/client.py | 9 +++++---- src/viam/components/gantry/client.py | 7 +++---- src/viam/components/gantry/gantry.py | 10 ++-------- src/viam/components/gripper/client.py | 8 ++++---- src/viam/components/gripper/gripper.py | 10 ++-------- 8 files changed, 33 insertions(+), 36 deletions(-) diff --git a/src/viam/components/__init__.py b/src/viam/components/__init__.py index e69de29bb2..8a1abd54ac 100644 --- a/src/viam/components/__init__.py +++ b/src/viam/components/__init__.py @@ -0,0 +1,12 @@ +from typing import Mapping, Tuple, Union + +from viam.proto.common import KinematicsFileFormat, Mesh + +KinematicsReturn = Union[ + Tuple[KinematicsFileFormat.ValueType, bytes], + Tuple[KinematicsFileFormat.ValueType, bytes, Mapping[str, Mesh]], +] + +__all__ = [ + "KinematicsReturn", +] diff --git a/src/viam/components/arm/__init__.py b/src/viam/components/arm/__init__.py index 60278e4104..fcc9ce871a 100644 --- a/src/viam/components/arm/__init__.py +++ b/src/viam/components/arm/__init__.py @@ -1,3 +1,4 @@ +from viam.components import KinematicsReturn from viam.proto.common import KinematicsFileFormat, Pose from viam.proto.component.arm import JointPositions from viam.resource.registry import Registry, ResourceRegistration @@ -10,6 +11,7 @@ "Arm", "JointPositions", "KinematicsFileFormat", + "KinematicsReturn", "Pose", ] diff --git a/src/viam/components/arm/arm.py b/src/viam/components/arm/arm.py index b1cb779e4d..0c262f7ff6 100644 --- a/src/viam/components/arm/arm.py +++ b/src/viam/components/arm/arm.py @@ -1,16 +1,11 @@ import abc -from typing import Any, Dict, Final, Optional, Tuple, Mapping, Union +from typing import Any, Dict, Final, Optional from viam.resource.types import API, RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT +from .. import KinematicsReturn from ..component_base import ComponentBase -from . import JointPositions, KinematicsFileFormat, Pose -from viam.proto.common import Mesh - -KinematicsReturn = Union[ - Tuple[KinematicsFileFormat.ValueType, bytes], - Tuple[KinematicsFileFormat.ValueType, bytes, Mapping[str, Mesh]], -] +from . import JointPositions, Pose class Arm(ComponentBase): diff --git a/src/viam/components/arm/client.py b/src/viam/components/arm/client.py index 116d8ce75b..523eb8b314 100644 --- a/src/viam/components/arm/client.py +++ b/src/viam/components/arm/client.py @@ -1,8 +1,9 @@ -from typing import Any, Dict, List, Mapping, Optional, Tuple +from typing import Any, Dict, List, Mapping, Optional from grpclib.client import Channel -from viam.proto.common import DoCommandRequest, DoCommandResponse, Geometry, GetKinematicsRequest, GetKinematicsResponse, Mesh +from viam.components import KinematicsReturn +from viam.proto.common import DoCommandRequest, DoCommandResponse, Geometry, GetKinematicsRequest, GetKinematicsResponse from viam.proto.component.arm import ( ArmServiceStub, GetEndPositionRequest, @@ -19,7 +20,7 @@ from viam.resource.rpc_client_base import ReconfigurableResourceRPCClientBase from viam.utils import ValueTypes, dict_to_struct, get_geometries, struct_to_dict -from . import Arm, KinematicsFileFormat, Pose +from . import Arm, Pose class ArmClient(Arm, ReconfigurableResourceRPCClientBase): @@ -113,7 +114,7 @@ async def do_command( async def get_kinematics( self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs - ) -> Tuple[KinematicsFileFormat.ValueType, bytes, Mapping[str, Mesh]]: + ) -> KinematicsReturn: md = kwargs.get("metadata", self.Metadata()).proto request = GetKinematicsRequest(name=self.name, extra=dict_to_struct(extra)) response: GetKinematicsResponse = await self.client.GetKinematics(request, timeout=timeout, metadata=md) diff --git a/src/viam/components/gantry/client.py b/src/viam/components/gantry/client.py index 237c11c8c7..8a3fe2bf0a 100644 --- a/src/viam/components/gantry/client.py +++ b/src/viam/components/gantry/client.py @@ -1,15 +1,14 @@ -from typing import Any, Dict, List, Mapping, Optional, Tuple +from typing import Any, Dict, List, Mapping, Optional from grpclib.client import Channel +from viam.components import KinematicsReturn from viam.proto.common import ( DoCommandRequest, DoCommandResponse, Geometry, GetKinematicsRequest, GetKinematicsResponse, - KinematicsFileFormat, - Mesh, ) from viam.proto.component.gantry import ( GantryServiceStub, @@ -120,7 +119,7 @@ async def do_command( async def get_kinematics( self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs - ) -> Tuple[KinematicsFileFormat.ValueType, bytes, Mapping[str, Mesh]]: + ) -> KinematicsReturn: md = kwargs.get("metadata", self.Metadata()).proto request = GetKinematicsRequest(name=self.name, extra=dict_to_struct(extra)) response: GetKinematicsResponse = await self.client.GetKinematics(request, timeout=timeout, metadata=md) diff --git a/src/viam/components/gantry/gantry.py b/src/viam/components/gantry/gantry.py index 3556c00de4..59a07d2932 100644 --- a/src/viam/components/gantry/gantry.py +++ b/src/viam/components/gantry/gantry.py @@ -1,17 +1,11 @@ import abc -from typing import Any, Dict, Final, List, Optional, Tuple, Mapping, Union +from typing import Any, Dict, Final, List, Optional -from viam.components.arm import KinematicsFileFormat from viam.resource.types import API, RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT -from viam.proto.common import Mesh +from .. import KinematicsReturn from ..component_base import ComponentBase -KinematicsReturn = Union[ - Tuple[KinematicsFileFormat.ValueType, bytes], - Tuple[KinematicsFileFormat.ValueType, bytes, Mapping[str, Mesh]], -] - class Gantry(ComponentBase): """ diff --git a/src/viam/components/gripper/client.py b/src/viam/components/gripper/client.py index b90e4c6c84..2b8319b05d 100644 --- a/src/viam/components/gripper/client.py +++ b/src/viam/components/gripper/client.py @@ -1,8 +1,9 @@ -from typing import Any, Dict, List, Mapping, Optional, Tuple +from typing import Any, Dict, List, Mapping, Optional from grpclib.client import Channel -from viam.proto.common import DoCommandRequest, DoCommandResponse, Geometry, GetKinematicsRequest, GetKinematicsResponse, Mesh +from viam.components import KinematicsReturn +from viam.proto.common import DoCommandRequest, DoCommandResponse, Geometry, GetKinematicsRequest, GetKinematicsResponse from viam.proto.component.gripper import ( GrabRequest, GrabResponse, @@ -17,7 +18,6 @@ from viam.resource.rpc_client_base import ReconfigurableResourceRPCClientBase from viam.utils import ValueTypes, dict_to_struct, get_geometries, struct_to_dict -from . import KinematicsFileFormat from .gripper import Gripper @@ -101,7 +101,7 @@ async def get_kinematics( extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs, - ) -> Tuple[KinematicsFileFormat.ValueType, bytes, Mapping[str, Mesh]]: + ) -> KinematicsReturn: md = kwargs.get("metadata", self.Metadata()).proto request = GetKinematicsRequest(name=self.name, extra=dict_to_struct(extra)) response: GetKinematicsResponse = await self.client.GetKinematics(request, timeout=timeout, metadata=md) diff --git a/src/viam/components/gripper/gripper.py b/src/viam/components/gripper/gripper.py index 7bb0af10c9..b49b4aa609 100644 --- a/src/viam/components/gripper/gripper.py +++ b/src/viam/components/gripper/gripper.py @@ -1,17 +1,11 @@ import abc from dataclasses import dataclass -from typing import Any, Dict, Final, Optional, Tuple, Mapping, Union +from typing import Any, Dict, Final, Optional from viam.components.component_base import ComponentBase from viam.resource.types import API, RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT -from viam.proto.common import Mesh -from . import KinematicsFileFormat - -KinematicsReturn = Union[ - Tuple[KinematicsFileFormat.ValueType, bytes], - Tuple[KinematicsFileFormat.ValueType, bytes, Mapping[str, Mesh]], -] +from .. import KinematicsReturn class Gripper(ComponentBase):