diff --git a/Makefile b/Makefile
index d591223784f193f941f3975ba970047cb81710f3..874e3f4155e2a11e4759347350831a6b99184f8c 100644
--- a/Makefile
+++ b/Makefile
@@ -1,5 +1,5 @@
 PROTODIR=perxis-proto/proto
-DSTDIR=clients
+DSTDIR=proto
 ALLPROTO?=$(shell find $(PROTODIR) -name '*.proto' )
 # Убираем status.proto нужен только для front
 PROTOFILES=	$(filter-out $(PROTODIR)/status/status.proto, $(ALLPROTO))
diff --git a/clients/clients/clients_pb2.py b/clients/clients/clients_pb2.py
deleted file mode 100644
index 2e32ad7e924cc14e6d488bfd0fbb649b941bbf09..0000000000000000000000000000000000000000
--- a/clients/clients/clients_pb2.py
+++ /dev/null
@@ -1,182 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by the protocol buffer compiler.  DO NOT EDIT!
-# source: clients/clients.proto
-"""Generated protocol buffer code."""
-from google.protobuf import descriptor as _descriptor
-from google.protobuf import descriptor_pool as _descriptor_pool
-from google.protobuf import message as _message
-from google.protobuf import reflection as _reflection
-from google.protobuf import symbol_database as _symbol_database
-# @@protoc_insertion_point(imports)
-
-_sym_db = _symbol_database.Default()
-
-
-from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2
-
-
-DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x15\x63lients/clients.proto\x12\x0f\x63ontent.clients\x1a\x1bgoogle/protobuf/empty.proto\"\x9d\x03\n\x06\x43lient\x12\n\n\x02id\x18\x01 \x01(\t\x12\x10\n\x08space_id\x18\x02 \x01(\t\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x06 \x01(\t\x12\x15\n\x08\x64isabled\x18\x07 \x01(\x08H\x00\x88\x01\x01\x12\x0f\n\x07role_id\x18\x08 \x01(\t\x12,\n\x05oauth\x18\n \x01(\x0b\x32\x1d.content.clients.Client.OAuth\x12(\n\x03tls\x18\x0b \x01(\x0b\x32\x1b.content.clients.Client.TLS\x12/\n\x07\x61pi_key\x18\x0c \x01(\x0b\x32\x1e.content.clients.Client.APIKey\x1aU\n\x05OAuth\x12\x11\n\tclient_id\x18\x04 \x01(\t\x12\x0f\n\x07\x61uth_id\x18\x05 \x01(\t\x12\x11\n\ttoken_url\x18\n \x01(\t\x12\x15\n\rclient_secret\x18\x0b \x01(\t\x1a%\n\x06\x41PIKey\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x0e\n\x06rotate\x18\x02 \x01(\x08\x1a\x16\n\x03TLS\x12\x0f\n\x07subject\x18\x01 \x01(\tB\x0b\n\t_disabled\"8\n\rCreateRequest\x12\'\n\x06\x63lient\x18\x01 \x01(\x0b\x32\x17.content.clients.Client\":\n\x0e\x43reateResponse\x12(\n\x07\x63reated\x18\x01 \x01(\x0b\x32\x17.content.clients.Client\"*\n\nGetRequest\x12\x10\n\x08space_id\x18\x01 \x01(\t\x12\n\n\x02id\x18\x02 \x01(\t\"6\n\x0bGetResponse\x12\'\n\x06\x63lient\x18\x01 \x01(\x0b\x32\x17.content.clients.Client\"_\n\x0cGetByRequest\x12\x10\n\x08space_id\x18\x01 \x01(\t\x12\x17\n\x0foauth_client_id\x18\x02 \x01(\t\x12\x13\n\x0btls_subject\x18\x03 \x01(\t\x12\x0f\n\x07\x61pi_key\x18\x04 \x01(\t\"8\n\rGetByResponse\x12\'\n\x06\x63lient\x18\x01 \x01(\x0b\x32\x17.content.clients.Client\"8\n\rUpdateRequest\x12\'\n\x06\x63lient\x18\x01 \x01(\x0b\x32\x17.content.clients.Client\"\x1f\n\x0bListRequest\x12\x10\n\x08space_id\x18\x01 \x01(\t\"8\n\x0cListResponse\x12(\n\x07\x63lients\x18\x01 \x03(\x0b\x32\x17.content.clients.Client\"-\n\rDeleteRequest\x12\x10\n\x08space_id\x18\x01 \x01(\t\x12\n\n\x02id\x18\x02 \x01(\t\"=\n\rEnableRequest\x12\x10\n\x08space_id\x18\x01 \x01(\t\x12\n\n\x02id\x18\x02 \x01(\t\x12\x0e\n\x06\x65nable\x18\x03 \x01(\x08\x32\xf7\x03\n\x07\x43lients\x12K\n\x06\x43reate\x12\x1e.content.clients.CreateRequest\x1a\x1f.content.clients.CreateResponse\"\x00\x12\x42\n\x03Get\x12\x1b.content.clients.GetRequest\x1a\x1c.content.clients.GetResponse\"\x00\x12H\n\x05GetBy\x12\x1d.content.clients.GetByRequest\x1a\x1e.content.clients.GetByResponse\"\x00\x12\x42\n\x06Update\x12\x1e.content.clients.UpdateRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x45\n\x04List\x12\x1c.content.clients.ListRequest\x1a\x1d.content.clients.ListResponse\"\x00\x12\x42\n\x06\x44\x65lete\x12\x1e.content.clients.DeleteRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x42\n\x06\x45nable\x12\x1e.content.clients.EnableRequest\x1a\x16.google.protobuf.Empty\"\x00\x42\x34Z2git.perx.ru/perxis/perxis-go/proto/clients;clientsb\x06proto3')
-
-
-
-_CLIENT = DESCRIPTOR.message_types_by_name['Client']
-_CLIENT_OAUTH = _CLIENT.nested_types_by_name['OAuth']
-_CLIENT_APIKEY = _CLIENT.nested_types_by_name['APIKey']
-_CLIENT_TLS = _CLIENT.nested_types_by_name['TLS']
-_CREATEREQUEST = DESCRIPTOR.message_types_by_name['CreateRequest']
-_CREATERESPONSE = DESCRIPTOR.message_types_by_name['CreateResponse']
-_GETREQUEST = DESCRIPTOR.message_types_by_name['GetRequest']
-_GETRESPONSE = DESCRIPTOR.message_types_by_name['GetResponse']
-_GETBYREQUEST = DESCRIPTOR.message_types_by_name['GetByRequest']
-_GETBYRESPONSE = DESCRIPTOR.message_types_by_name['GetByResponse']
-_UPDATEREQUEST = DESCRIPTOR.message_types_by_name['UpdateRequest']
-_LISTREQUEST = DESCRIPTOR.message_types_by_name['ListRequest']
-_LISTRESPONSE = DESCRIPTOR.message_types_by_name['ListResponse']
-_DELETEREQUEST = DESCRIPTOR.message_types_by_name['DeleteRequest']
-_ENABLEREQUEST = DESCRIPTOR.message_types_by_name['EnableRequest']
-Client = _reflection.GeneratedProtocolMessageType('Client', (_message.Message,), {
-
-  'OAuth' : _reflection.GeneratedProtocolMessageType('OAuth', (_message.Message,), {
-    'DESCRIPTOR' : _CLIENT_OAUTH,
-    '__module__' : 'clients.clients_pb2'
-    # @@protoc_insertion_point(class_scope:content.clients.Client.OAuth)
-    })
-  ,
-
-  'APIKey' : _reflection.GeneratedProtocolMessageType('APIKey', (_message.Message,), {
-    'DESCRIPTOR' : _CLIENT_APIKEY,
-    '__module__' : 'clients.clients_pb2'
-    # @@protoc_insertion_point(class_scope:content.clients.Client.APIKey)
-    })
-  ,
-
-  'TLS' : _reflection.GeneratedProtocolMessageType('TLS', (_message.Message,), {
-    'DESCRIPTOR' : _CLIENT_TLS,
-    '__module__' : 'clients.clients_pb2'
-    # @@protoc_insertion_point(class_scope:content.clients.Client.TLS)
-    })
-  ,
-  'DESCRIPTOR' : _CLIENT,
-  '__module__' : 'clients.clients_pb2'
-  # @@protoc_insertion_point(class_scope:content.clients.Client)
-  })
-_sym_db.RegisterMessage(Client)
-_sym_db.RegisterMessage(Client.OAuth)
-_sym_db.RegisterMessage(Client.APIKey)
-_sym_db.RegisterMessage(Client.TLS)
-
-CreateRequest = _reflection.GeneratedProtocolMessageType('CreateRequest', (_message.Message,), {
-  'DESCRIPTOR' : _CREATEREQUEST,
-  '__module__' : 'clients.clients_pb2'
-  # @@protoc_insertion_point(class_scope:content.clients.CreateRequest)
-  })
-_sym_db.RegisterMessage(CreateRequest)
-
-CreateResponse = _reflection.GeneratedProtocolMessageType('CreateResponse', (_message.Message,), {
-  'DESCRIPTOR' : _CREATERESPONSE,
-  '__module__' : 'clients.clients_pb2'
-  # @@protoc_insertion_point(class_scope:content.clients.CreateResponse)
-  })
-_sym_db.RegisterMessage(CreateResponse)
-
-GetRequest = _reflection.GeneratedProtocolMessageType('GetRequest', (_message.Message,), {
-  'DESCRIPTOR' : _GETREQUEST,
-  '__module__' : 'clients.clients_pb2'
-  # @@protoc_insertion_point(class_scope:content.clients.GetRequest)
-  })
-_sym_db.RegisterMessage(GetRequest)
-
-GetResponse = _reflection.GeneratedProtocolMessageType('GetResponse', (_message.Message,), {
-  'DESCRIPTOR' : _GETRESPONSE,
-  '__module__' : 'clients.clients_pb2'
-  # @@protoc_insertion_point(class_scope:content.clients.GetResponse)
-  })
-_sym_db.RegisterMessage(GetResponse)
-
-GetByRequest = _reflection.GeneratedProtocolMessageType('GetByRequest', (_message.Message,), {
-  'DESCRIPTOR' : _GETBYREQUEST,
-  '__module__' : 'clients.clients_pb2'
-  # @@protoc_insertion_point(class_scope:content.clients.GetByRequest)
-  })
-_sym_db.RegisterMessage(GetByRequest)
-
-GetByResponse = _reflection.GeneratedProtocolMessageType('GetByResponse', (_message.Message,), {
-  'DESCRIPTOR' : _GETBYRESPONSE,
-  '__module__' : 'clients.clients_pb2'
-  # @@protoc_insertion_point(class_scope:content.clients.GetByResponse)
-  })
-_sym_db.RegisterMessage(GetByResponse)
-
-UpdateRequest = _reflection.GeneratedProtocolMessageType('UpdateRequest', (_message.Message,), {
-  'DESCRIPTOR' : _UPDATEREQUEST,
-  '__module__' : 'clients.clients_pb2'
-  # @@protoc_insertion_point(class_scope:content.clients.UpdateRequest)
-  })
-_sym_db.RegisterMessage(UpdateRequest)
-
-ListRequest = _reflection.GeneratedProtocolMessageType('ListRequest', (_message.Message,), {
-  'DESCRIPTOR' : _LISTREQUEST,
-  '__module__' : 'clients.clients_pb2'
-  # @@protoc_insertion_point(class_scope:content.clients.ListRequest)
-  })
-_sym_db.RegisterMessage(ListRequest)
-
-ListResponse = _reflection.GeneratedProtocolMessageType('ListResponse', (_message.Message,), {
-  'DESCRIPTOR' : _LISTRESPONSE,
-  '__module__' : 'clients.clients_pb2'
-  # @@protoc_insertion_point(class_scope:content.clients.ListResponse)
-  })
-_sym_db.RegisterMessage(ListResponse)
-
-DeleteRequest = _reflection.GeneratedProtocolMessageType('DeleteRequest', (_message.Message,), {
-  'DESCRIPTOR' : _DELETEREQUEST,
-  '__module__' : 'clients.clients_pb2'
-  # @@protoc_insertion_point(class_scope:content.clients.DeleteRequest)
-  })
-_sym_db.RegisterMessage(DeleteRequest)
-
-EnableRequest = _reflection.GeneratedProtocolMessageType('EnableRequest', (_message.Message,), {
-  'DESCRIPTOR' : _ENABLEREQUEST,
-  '__module__' : 'clients.clients_pb2'
-  # @@protoc_insertion_point(class_scope:content.clients.EnableRequest)
-  })
-_sym_db.RegisterMessage(EnableRequest)
-
-_CLIENTS = DESCRIPTOR.services_by_name['Clients']
-if _descriptor._USE_C_DESCRIPTORS == False:
-
-  DESCRIPTOR._options = None
-  DESCRIPTOR._serialized_options = b'Z2git.perx.ru/perxis/perxis-go/proto/clients;clients'
-  _CLIENT._serialized_start=72
-  _CLIENT._serialized_end=485
-  _CLIENT_OAUTH._serialized_start=324
-  _CLIENT_OAUTH._serialized_end=409
-  _CLIENT_APIKEY._serialized_start=411
-  _CLIENT_APIKEY._serialized_end=448
-  _CLIENT_TLS._serialized_start=450
-  _CLIENT_TLS._serialized_end=472
-  _CREATEREQUEST._serialized_start=487
-  _CREATEREQUEST._serialized_end=543
-  _CREATERESPONSE._serialized_start=545
-  _CREATERESPONSE._serialized_end=603
-  _GETREQUEST._serialized_start=605
-  _GETREQUEST._serialized_end=647
-  _GETRESPONSE._serialized_start=649
-  _GETRESPONSE._serialized_end=703
-  _GETBYREQUEST._serialized_start=705
-  _GETBYREQUEST._serialized_end=800
-  _GETBYRESPONSE._serialized_start=802
-  _GETBYRESPONSE._serialized_end=858
-  _UPDATEREQUEST._serialized_start=860
-  _UPDATEREQUEST._serialized_end=916
-  _LISTREQUEST._serialized_start=918
-  _LISTREQUEST._serialized_end=949
-  _LISTRESPONSE._serialized_start=951
-  _LISTRESPONSE._serialized_end=1007
-  _DELETEREQUEST._serialized_start=1009
-  _DELETEREQUEST._serialized_end=1054
-  _ENABLEREQUEST._serialized_start=1056
-  _ENABLEREQUEST._serialized_end=1117
-  _CLIENTS._serialized_start=1120
-  _CLIENTS._serialized_end=1623
-# @@protoc_insertion_point(module_scope)
diff --git a/clients/collaborators/collaborators_pb2.py b/clients/collaborators/collaborators_pb2.py
deleted file mode 100644
index e522a44ffe82e4e0c9e6603e2da9e2dc4cc104db..0000000000000000000000000000000000000000
--- a/clients/collaborators/collaborators_pb2.py
+++ /dev/null
@@ -1,110 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by the protocol buffer compiler.  DO NOT EDIT!
-# source: collaborators/collaborators.proto
-"""Generated protocol buffer code."""
-from google.protobuf import descriptor as _descriptor
-from google.protobuf import descriptor_pool as _descriptor_pool
-from google.protobuf import message as _message
-from google.protobuf import reflection as _reflection
-from google.protobuf import symbol_database as _symbol_database
-# @@protoc_insertion_point(imports)
-
-_sym_db = _symbol_database.Default()
-
-
-from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2
-from common import common_pb2 as common_dot_common__pb2
-
-
-DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n!collaborators/collaborators.proto\x12\x15\x63ontent.collaborators\x1a\x1bgoogle/protobuf/empty.proto\x1a\x13\x63ommon/common.proto\"=\n\nSetRequest\x12\x10\n\x08space_id\x18\x01 \x01(\t\x12\x0f\n\x07subject\x18\x02 \x01(\t\x12\x0c\n\x04role\x18\x03 \x01(\t\"/\n\nGetRequest\x12\x10\n\x08space_id\x18\x01 \x01(\t\x12\x0f\n\x07subject\x18\x02 \x01(\t\"\x1b\n\x0bGetResponse\x12\x0c\n\x04role\x18\x03 \x01(\t\"2\n\rRemoveRequest\x12\x10\n\x08space_id\x18\x01 \x01(\t\x12\x0f\n\x07subject\x18\x02 \x01(\t\",\n\x18ListCollaboratorsRequest\x12\x10\n\x08space_id\x18\x01 \x01(\t\"H\n\x19ListCollaboratorsResponse\x12+\n\rcollaborators\x18\x01 \x03(\x0b\x32\x14.common.Collaborator\"$\n\x11ListSpacesRequest\x12\x0f\n\x07subject\x18\x01 \x01(\t\":\n\x12ListSpacesResponse\x12$\n\x06spaces\x18\x01 \x03(\x0b\x32\x14.common.Collaborator2\xcc\x03\n\rCollaborators\x12\x42\n\x03Set\x12!.content.collaborators.SetRequest\x1a\x16.google.protobuf.Empty\"\x00\x12N\n\x03Get\x12!.content.collaborators.GetRequest\x1a\".content.collaborators.GetResponse\"\x00\x12H\n\x06Remove\x12$.content.collaborators.RemoveRequest\x1a\x16.google.protobuf.Empty\"\x00\x12x\n\x11ListCollaborators\x12/.content.collaborators.ListCollaboratorsRequest\x1a\x30.content.collaborators.ListCollaboratorsResponse\"\x00\x12\x63\n\nListSpaces\x12(.content.collaborators.ListSpacesRequest\x1a).content.collaborators.ListSpacesResponse\"\x00\x42@Z>git.perx.ru/perxis/perxis-go/proto/collaborators;collaboratorsb\x06proto3')
-
-
-
-_SETREQUEST = DESCRIPTOR.message_types_by_name['SetRequest']
-_GETREQUEST = DESCRIPTOR.message_types_by_name['GetRequest']
-_GETRESPONSE = DESCRIPTOR.message_types_by_name['GetResponse']
-_REMOVEREQUEST = DESCRIPTOR.message_types_by_name['RemoveRequest']
-_LISTCOLLABORATORSREQUEST = DESCRIPTOR.message_types_by_name['ListCollaboratorsRequest']
-_LISTCOLLABORATORSRESPONSE = DESCRIPTOR.message_types_by_name['ListCollaboratorsResponse']
-_LISTSPACESREQUEST = DESCRIPTOR.message_types_by_name['ListSpacesRequest']
-_LISTSPACESRESPONSE = DESCRIPTOR.message_types_by_name['ListSpacesResponse']
-SetRequest = _reflection.GeneratedProtocolMessageType('SetRequest', (_message.Message,), {
-  'DESCRIPTOR' : _SETREQUEST,
-  '__module__' : 'collaborators.collaborators_pb2'
-  # @@protoc_insertion_point(class_scope:content.collaborators.SetRequest)
-  })
-_sym_db.RegisterMessage(SetRequest)
-
-GetRequest = _reflection.GeneratedProtocolMessageType('GetRequest', (_message.Message,), {
-  'DESCRIPTOR' : _GETREQUEST,
-  '__module__' : 'collaborators.collaborators_pb2'
-  # @@protoc_insertion_point(class_scope:content.collaborators.GetRequest)
-  })
-_sym_db.RegisterMessage(GetRequest)
-
-GetResponse = _reflection.GeneratedProtocolMessageType('GetResponse', (_message.Message,), {
-  'DESCRIPTOR' : _GETRESPONSE,
-  '__module__' : 'collaborators.collaborators_pb2'
-  # @@protoc_insertion_point(class_scope:content.collaborators.GetResponse)
-  })
-_sym_db.RegisterMessage(GetResponse)
-
-RemoveRequest = _reflection.GeneratedProtocolMessageType('RemoveRequest', (_message.Message,), {
-  'DESCRIPTOR' : _REMOVEREQUEST,
-  '__module__' : 'collaborators.collaborators_pb2'
-  # @@protoc_insertion_point(class_scope:content.collaborators.RemoveRequest)
-  })
-_sym_db.RegisterMessage(RemoveRequest)
-
-ListCollaboratorsRequest = _reflection.GeneratedProtocolMessageType('ListCollaboratorsRequest', (_message.Message,), {
-  'DESCRIPTOR' : _LISTCOLLABORATORSREQUEST,
-  '__module__' : 'collaborators.collaborators_pb2'
-  # @@protoc_insertion_point(class_scope:content.collaborators.ListCollaboratorsRequest)
-  })
-_sym_db.RegisterMessage(ListCollaboratorsRequest)
-
-ListCollaboratorsResponse = _reflection.GeneratedProtocolMessageType('ListCollaboratorsResponse', (_message.Message,), {
-  'DESCRIPTOR' : _LISTCOLLABORATORSRESPONSE,
-  '__module__' : 'collaborators.collaborators_pb2'
-  # @@protoc_insertion_point(class_scope:content.collaborators.ListCollaboratorsResponse)
-  })
-_sym_db.RegisterMessage(ListCollaboratorsResponse)
-
-ListSpacesRequest = _reflection.GeneratedProtocolMessageType('ListSpacesRequest', (_message.Message,), {
-  'DESCRIPTOR' : _LISTSPACESREQUEST,
-  '__module__' : 'collaborators.collaborators_pb2'
-  # @@protoc_insertion_point(class_scope:content.collaborators.ListSpacesRequest)
-  })
-_sym_db.RegisterMessage(ListSpacesRequest)
-
-ListSpacesResponse = _reflection.GeneratedProtocolMessageType('ListSpacesResponse', (_message.Message,), {
-  'DESCRIPTOR' : _LISTSPACESRESPONSE,
-  '__module__' : 'collaborators.collaborators_pb2'
-  # @@protoc_insertion_point(class_scope:content.collaborators.ListSpacesResponse)
-  })
-_sym_db.RegisterMessage(ListSpacesResponse)
-
-_COLLABORATORS = DESCRIPTOR.services_by_name['Collaborators']
-if _descriptor._USE_C_DESCRIPTORS == False:
-
-  DESCRIPTOR._options = None
-  DESCRIPTOR._serialized_options = b'Z>git.perx.ru/perxis/perxis-go/proto/collaborators;collaborators'
-  _SETREQUEST._serialized_start=110
-  _SETREQUEST._serialized_end=171
-  _GETREQUEST._serialized_start=173
-  _GETREQUEST._serialized_end=220
-  _GETRESPONSE._serialized_start=222
-  _GETRESPONSE._serialized_end=249
-  _REMOVEREQUEST._serialized_start=251
-  _REMOVEREQUEST._serialized_end=301
-  _LISTCOLLABORATORSREQUEST._serialized_start=303
-  _LISTCOLLABORATORSREQUEST._serialized_end=347
-  _LISTCOLLABORATORSRESPONSE._serialized_start=349
-  _LISTCOLLABORATORSRESPONSE._serialized_end=421
-  _LISTSPACESREQUEST._serialized_start=423
-  _LISTSPACESREQUEST._serialized_end=459
-  _LISTSPACESRESPONSE._serialized_start=461
-  _LISTSPACESRESPONSE._serialized_end=519
-  _COLLABORATORS._serialized_start=522
-  _COLLABORATORS._serialized_end=982
-# @@protoc_insertion_point(module_scope)
diff --git a/clients/collections/collections_pb2.py b/clients/collections/collections_pb2.py
deleted file mode 100644
index 16c2ac27f7873a9286e4343620f65ab4948c3dc0..0000000000000000000000000000000000000000
--- a/clients/collections/collections_pb2.py
+++ /dev/null
@@ -1,187 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by the protocol buffer compiler.  DO NOT EDIT!
-# source: collections/collections.proto
-"""Generated protocol buffer code."""
-from google.protobuf import descriptor as _descriptor
-from google.protobuf import descriptor_pool as _descriptor_pool
-from google.protobuf import message as _message
-from google.protobuf import reflection as _reflection
-from google.protobuf import symbol_database as _symbol_database
-# @@protoc_insertion_point(imports)
-
-_sym_db = _symbol_database.Default()
-
-
-from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2
-from common import common_pb2 as common_dot_common__pb2
-from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2
-
-
-DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1d\x63ollections/collections.proto\x12\x13\x63ontent.collections\x1a\x1bgoogle/protobuf/empty.proto\x1a\x13\x63ommon/common.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"s\n\x06\x41\x63\x63\x65ss\x12\x1f\n\x07\x61\x63tions\x18\x01 \x03(\x0e\x32\x0e.common.Action\x12\x15\n\rhidden_fields\x18\x05 \x03(\t\x12\x17\n\x0freadonly_fields\x18\x06 \x03(\t\x12\x18\n\x10writeonly_fields\x18\x07 \x03(\t\"\x80\x05\n\nCollection\x12\n\n\x02id\x18\x01 \x01(\t\x12\x10\n\x08space_id\x18\x02 \x01(\t\x12\x0e\n\x06\x65nv_id\x18\x03 \x01(\t\x12\x0c\n\x04name\x18\x04 \x01(\t\x12\x13\n\x06single\x18\x05 \x01(\x08H\x00\x88\x01\x01\x12\x13\n\x06system\x18\x06 \x01(\x08H\x01\x88\x01\x01\x12\x14\n\x07no_data\x18\x0c \x01(\x08H\x02\x88\x01\x01\x12\x0e\n\x06schema\x18\x07 \x01(\t\x12\x0e\n\x06hidden\x18\r \x01(\x08\x12\x32\n\x04view\x18\t \x01(\x0b\x32$.content.collections.Collection.View\x12=\n\nstate_info\x18\n \x01(\x0b\x32).content.collections.Collection.StateInfo\x12+\n\x06\x61\x63\x63\x65ss\x18\x14 \x01(\x0b\x32\x1b.content.collections.Access\x1aO\n\x04View\x12\x10\n\x08space_id\x18\x01 \x01(\t\x12\x0e\n\x06\x65nv_id\x18\x02 \x01(\t\x12\x15\n\rcollection_id\x18\x03 \x01(\t\x12\x0e\n\x06\x66ilter\x18\x04 \x01(\t\x1a\x7f\n\tStateInfo\x12\x34\n\x05state\x18\x01 \x01(\x0e\x32%.content.collections.Collection.State\x12\x0c\n\x04info\x18\x02 \x01(\t\x12.\n\nstarted_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\"B\n\x05State\x12\x07\n\x03NEW\x10\x00\x12\r\n\tPREPARING\x10\x01\x12\t\n\x05READY\x10\x02\x12\t\n\x05\x45RROR\x10\x03\x12\x0b\n\x07\x43HANGED\x10\x04\x42\t\n\x07_singleB\t\n\x07_systemB\n\n\x08_no_data\"D\n\rCreateRequest\x12\x33\n\ncollection\x18\x01 \x01(\x0b\x32\x1f.content.collections.Collection\"B\n\x0e\x43reateResponse\x12\x30\n\x07\x63reated\x18\x01 \x01(\x0b\x32\x1f.content.collections.Collection\"-\n\nGetOptions\x12\x1f\n\x17\x64isable_schema_includes\x18\x01 \x01(\x08\"w\n\nGetRequest\x12\x10\n\x08space_id\x18\x01 \x01(\t\x12\x0e\n\x06\x65nv_id\x18\x02 \x01(\t\x12\x15\n\rcollection_id\x18\x03 \x01(\t\x12\x30\n\x07options\x18\x04 \x01(\x0b\x32\x1f.content.collections.GetOptions\"B\n\x0bGetResponse\x12\x33\n\ncollection\x18\x01 \x01(\x0b\x32\x1f.content.collections.Collection\"\xd5\x01\n\x0bListRequest\x12\x10\n\x08space_id\x18\x01 \x01(\t\x12\x0e\n\x06\x65nv_id\x18\x02 \x01(\t\x12\x37\n\x06\x66ilter\x18\x05 \x01(\x0b\x32\'.content.collections.ListRequest.Filter\x1ak\n\x06\x46ilter\x12\x16\n\x0e\x65xclude_system\x18\x01 \x01(\x08\x12\x17\n\x0finclude_no_data\x18\x05 \x01(\x08\x12\x16\n\x0einclude_hidden\x18\x06 \x01(\x08\x12\x0c\n\x04name\x18\x03 \x03(\t\x12\n\n\x02id\x18\x04 \x03(\t\"D\n\x0cListResponse\x12\x34\n\x0b\x63ollections\x18\x01 \x03(\x0b\x32\x1f.content.collections.Collection\"D\n\rUpdateRequest\x12\x33\n\ncollection\x18\x01 \x01(\x0b\x32\x1f.content.collections.Collection\"[\n\x10SetSchemaRequest\x12\x10\n\x08space_id\x18\x01 \x01(\t\x12\x0e\n\x06\x65nv_id\x18\x02 \x01(\t\x12\x15\n\rcollection_id\x18\x03 \x01(\t\x12\x0e\n\x06schema\x18\x04 \x01(\t\"H\n\rDeleteRequest\x12\x10\n\x08space_id\x18\x01 \x01(\t\x12\x0e\n\x06\x65nv_id\x18\x02 \x01(\t\x12\x15\n\rcollection_id\x18\x03 \x01(\t2\xdb\x03\n\x0b\x43ollections\x12S\n\x06\x43reate\x12\".content.collections.CreateRequest\x1a#.content.collections.CreateResponse\"\x00\x12J\n\x03Get\x12\x1f.content.collections.GetRequest\x1a .content.collections.GetResponse\"\x00\x12M\n\x04List\x12 .content.collections.ListRequest\x1a!.content.collections.ListResponse\"\x00\x12\x46\n\x06Update\x12\".content.collections.UpdateRequest\x1a\x16.google.protobuf.Empty\"\x00\x12L\n\tSetSchema\x12%.content.collections.SetSchemaRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x46\n\x06\x44\x65lete\x12\".content.collections.DeleteRequest\x1a\x16.google.protobuf.Empty\"\x00\x42<Z:git.perx.ru/perxis/perxis-go/proto/collections;collectionsb\x06proto3')
-
-
-
-_ACCESS = DESCRIPTOR.message_types_by_name['Access']
-_COLLECTION = DESCRIPTOR.message_types_by_name['Collection']
-_COLLECTION_VIEW = _COLLECTION.nested_types_by_name['View']
-_COLLECTION_STATEINFO = _COLLECTION.nested_types_by_name['StateInfo']
-_CREATEREQUEST = DESCRIPTOR.message_types_by_name['CreateRequest']
-_CREATERESPONSE = DESCRIPTOR.message_types_by_name['CreateResponse']
-_GETOPTIONS = DESCRIPTOR.message_types_by_name['GetOptions']
-_GETREQUEST = DESCRIPTOR.message_types_by_name['GetRequest']
-_GETRESPONSE = DESCRIPTOR.message_types_by_name['GetResponse']
-_LISTREQUEST = DESCRIPTOR.message_types_by_name['ListRequest']
-_LISTREQUEST_FILTER = _LISTREQUEST.nested_types_by_name['Filter']
-_LISTRESPONSE = DESCRIPTOR.message_types_by_name['ListResponse']
-_UPDATEREQUEST = DESCRIPTOR.message_types_by_name['UpdateRequest']
-_SETSCHEMAREQUEST = DESCRIPTOR.message_types_by_name['SetSchemaRequest']
-_DELETEREQUEST = DESCRIPTOR.message_types_by_name['DeleteRequest']
-_COLLECTION_STATE = _COLLECTION.enum_types_by_name['State']
-Access = _reflection.GeneratedProtocolMessageType('Access', (_message.Message,), {
-  'DESCRIPTOR' : _ACCESS,
-  '__module__' : 'collections.collections_pb2'
-  # @@protoc_insertion_point(class_scope:content.collections.Access)
-  })
-_sym_db.RegisterMessage(Access)
-
-Collection = _reflection.GeneratedProtocolMessageType('Collection', (_message.Message,), {
-
-  'View' : _reflection.GeneratedProtocolMessageType('View', (_message.Message,), {
-    'DESCRIPTOR' : _COLLECTION_VIEW,
-    '__module__' : 'collections.collections_pb2'
-    # @@protoc_insertion_point(class_scope:content.collections.Collection.View)
-    })
-  ,
-
-  'StateInfo' : _reflection.GeneratedProtocolMessageType('StateInfo', (_message.Message,), {
-    'DESCRIPTOR' : _COLLECTION_STATEINFO,
-    '__module__' : 'collections.collections_pb2'
-    # @@protoc_insertion_point(class_scope:content.collections.Collection.StateInfo)
-    })
-  ,
-  'DESCRIPTOR' : _COLLECTION,
-  '__module__' : 'collections.collections_pb2'
-  # @@protoc_insertion_point(class_scope:content.collections.Collection)
-  })
-_sym_db.RegisterMessage(Collection)
-_sym_db.RegisterMessage(Collection.View)
-_sym_db.RegisterMessage(Collection.StateInfo)
-
-CreateRequest = _reflection.GeneratedProtocolMessageType('CreateRequest', (_message.Message,), {
-  'DESCRIPTOR' : _CREATEREQUEST,
-  '__module__' : 'collections.collections_pb2'
-  # @@protoc_insertion_point(class_scope:content.collections.CreateRequest)
-  })
-_sym_db.RegisterMessage(CreateRequest)
-
-CreateResponse = _reflection.GeneratedProtocolMessageType('CreateResponse', (_message.Message,), {
-  'DESCRIPTOR' : _CREATERESPONSE,
-  '__module__' : 'collections.collections_pb2'
-  # @@protoc_insertion_point(class_scope:content.collections.CreateResponse)
-  })
-_sym_db.RegisterMessage(CreateResponse)
-
-GetOptions = _reflection.GeneratedProtocolMessageType('GetOptions', (_message.Message,), {
-  'DESCRIPTOR' : _GETOPTIONS,
-  '__module__' : 'collections.collections_pb2'
-  # @@protoc_insertion_point(class_scope:content.collections.GetOptions)
-  })
-_sym_db.RegisterMessage(GetOptions)
-
-GetRequest = _reflection.GeneratedProtocolMessageType('GetRequest', (_message.Message,), {
-  'DESCRIPTOR' : _GETREQUEST,
-  '__module__' : 'collections.collections_pb2'
-  # @@protoc_insertion_point(class_scope:content.collections.GetRequest)
-  })
-_sym_db.RegisterMessage(GetRequest)
-
-GetResponse = _reflection.GeneratedProtocolMessageType('GetResponse', (_message.Message,), {
-  'DESCRIPTOR' : _GETRESPONSE,
-  '__module__' : 'collections.collections_pb2'
-  # @@protoc_insertion_point(class_scope:content.collections.GetResponse)
-  })
-_sym_db.RegisterMessage(GetResponse)
-
-ListRequest = _reflection.GeneratedProtocolMessageType('ListRequest', (_message.Message,), {
-
-  'Filter' : _reflection.GeneratedProtocolMessageType('Filter', (_message.Message,), {
-    'DESCRIPTOR' : _LISTREQUEST_FILTER,
-    '__module__' : 'collections.collections_pb2'
-    # @@protoc_insertion_point(class_scope:content.collections.ListRequest.Filter)
-    })
-  ,
-  'DESCRIPTOR' : _LISTREQUEST,
-  '__module__' : 'collections.collections_pb2'
-  # @@protoc_insertion_point(class_scope:content.collections.ListRequest)
-  })
-_sym_db.RegisterMessage(ListRequest)
-_sym_db.RegisterMessage(ListRequest.Filter)
-
-ListResponse = _reflection.GeneratedProtocolMessageType('ListResponse', (_message.Message,), {
-  'DESCRIPTOR' : _LISTRESPONSE,
-  '__module__' : 'collections.collections_pb2'
-  # @@protoc_insertion_point(class_scope:content.collections.ListResponse)
-  })
-_sym_db.RegisterMessage(ListResponse)
-
-UpdateRequest = _reflection.GeneratedProtocolMessageType('UpdateRequest', (_message.Message,), {
-  'DESCRIPTOR' : _UPDATEREQUEST,
-  '__module__' : 'collections.collections_pb2'
-  # @@protoc_insertion_point(class_scope:content.collections.UpdateRequest)
-  })
-_sym_db.RegisterMessage(UpdateRequest)
-
-SetSchemaRequest = _reflection.GeneratedProtocolMessageType('SetSchemaRequest', (_message.Message,), {
-  'DESCRIPTOR' : _SETSCHEMAREQUEST,
-  '__module__' : 'collections.collections_pb2'
-  # @@protoc_insertion_point(class_scope:content.collections.SetSchemaRequest)
-  })
-_sym_db.RegisterMessage(SetSchemaRequest)
-
-DeleteRequest = _reflection.GeneratedProtocolMessageType('DeleteRequest', (_message.Message,), {
-  'DESCRIPTOR' : _DELETEREQUEST,
-  '__module__' : 'collections.collections_pb2'
-  # @@protoc_insertion_point(class_scope:content.collections.DeleteRequest)
-  })
-_sym_db.RegisterMessage(DeleteRequest)
-
-_COLLECTIONS = DESCRIPTOR.services_by_name['Collections']
-if _descriptor._USE_C_DESCRIPTORS == False:
-
-  DESCRIPTOR._options = None
-  DESCRIPTOR._serialized_options = b'Z:git.perx.ru/perxis/perxis-go/proto/collections;collections'
-  _ACCESS._serialized_start=137
-  _ACCESS._serialized_end=252
-  _COLLECTION._serialized_start=255
-  _COLLECTION._serialized_end=895
-  _COLLECTION_VIEW._serialized_start=585
-  _COLLECTION_VIEW._serialized_end=664
-  _COLLECTION_STATEINFO._serialized_start=666
-  _COLLECTION_STATEINFO._serialized_end=793
-  _COLLECTION_STATE._serialized_start=795
-  _COLLECTION_STATE._serialized_end=861
-  _CREATEREQUEST._serialized_start=897
-  _CREATEREQUEST._serialized_end=965
-  _CREATERESPONSE._serialized_start=967
-  _CREATERESPONSE._serialized_end=1033
-  _GETOPTIONS._serialized_start=1035
-  _GETOPTIONS._serialized_end=1080
-  _GETREQUEST._serialized_start=1082
-  _GETREQUEST._serialized_end=1201
-  _GETRESPONSE._serialized_start=1203
-  _GETRESPONSE._serialized_end=1269
-  _LISTREQUEST._serialized_start=1272
-  _LISTREQUEST._serialized_end=1485
-  _LISTREQUEST_FILTER._serialized_start=1378
-  _LISTREQUEST_FILTER._serialized_end=1485
-  _LISTRESPONSE._serialized_start=1487
-  _LISTRESPONSE._serialized_end=1555
-  _UPDATEREQUEST._serialized_start=1557
-  _UPDATEREQUEST._serialized_end=1625
-  _SETSCHEMAREQUEST._serialized_start=1627
-  _SETSCHEMAREQUEST._serialized_end=1718
-  _DELETEREQUEST._serialized_start=1720
-  _DELETEREQUEST._serialized_end=1792
-  _COLLECTIONS._serialized_start=1795
-  _COLLECTIONS._serialized_end=2270
-# @@protoc_insertion_point(module_scope)
diff --git a/clients/common/common_pb2.py b/clients/common/common_pb2.py
deleted file mode 100644
index 0ef74a906795044939feb8c875992496c87ea31d..0000000000000000000000000000000000000000
--- a/clients/common/common_pb2.py
+++ /dev/null
@@ -1,182 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by the protocol buffer compiler.  DO NOT EDIT!
-# source: common/common.proto
-"""Generated protocol buffer code."""
-from google.protobuf.internal import enum_type_wrapper
-from google.protobuf import descriptor as _descriptor
-from google.protobuf import descriptor_pool as _descriptor_pool
-from google.protobuf import message as _message
-from google.protobuf import reflection as _reflection
-from google.protobuf import symbol_database as _symbol_database
-# @@protoc_insertion_point(imports)
-
-_sym_db = _symbol_database.Default()
-
-
-from google.protobuf import struct_pb2 as google_dot_protobuf_dot_struct__pb2
-
-
-DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x13\x63ommon/common.proto\x12\x06\x63ommon\x1a\x1cgoogle/protobuf/struct.proto\"\xa6\x05\n\x05\x45rror\x12\x12\n\nerror_code\x18\x01 \x01(\x04\x12\x10\n\x08\x65rror_id\x18\x02 \x01(\t\x12\x0e\n\x06reason\x18\x03 \x01(\t\x12\x0e\n\x06\x64omain\x18\x04 \x01(\t\x12-\n\x08metadata\x18\t \x03(\x0b\x32\x1b.common.Error.MetadataEntry\x12-\n\x0b\x62\x61\x64_request\x18\n \x01(\x0b\x32\x18.common.Error.BadRequest\x12+\n\ndebug_info\x18\x0b \x01(\x0b\x32\x17.common.Error.DebugInfo\x12 \n\x04help\x18\x64 \x01(\x0b\x32\x12.common.Error.Help\x12;\n\x12localized_messages\x18\xc8\x01 \x03(\x0b\x32\x1e.common.Error.LocalizedMessage\x1a{\n\nBadRequest\x12\x37\n\x06\x65rrors\x18\x01 \x03(\x0b\x32\'.common.Error.BadRequest.FieldViolation\x1a\x34\n\x0e\x46ieldViolation\x12\r\n\x05\x66ield\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x1aX\n\x04Help\x12&\n\x05links\x18\x01 \x03(\x0b\x32\x17.common.Error.Help.Link\x1a(\n\x04Link\x12\x13\n\x0b\x64\x65scription\x18\x01 \x01(\t\x12\x0b\n\x03url\x18\x02 \x01(\t\x1a\x30\n\tDebugInfo\x12\x13\n\x0bstack_trace\x18\x01 \x03(\t\x12\x0e\n\x06\x64\x65tail\x18\x02 \x01(\t\x1a\x33\n\x10LocalizedMessage\x12\x0e\n\x06locale\x18\x01 \x01(\t\x12\x0f\n\x07message\x18\x02 \x01(\t\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"J\n\x06\x46ilter\x12\n\n\x02op\x18\x01 \x01(\t\x12\r\n\x05\x66ield\x18\x02 \x01(\t\x12%\n\x05value\x18\x03 \x01(\x0b\x32\x16.google.protobuf.Value\"h\n\x0b\x46indOptions\x12\x0c\n\x04sort\x18\x01 \x03(\t\x12\x10\n\x08page_num\x18\x02 \x01(\x05\x12\x11\n\tpage_size\x18\x03 \x01(\x05\x12\x0e\n\x06\x66ields\x18\x04 \x03(\t\x12\x16\n\x0e\x65xclude_fields\x18\x05 \x01(\x08\"\xd3\x01\n\x04Rule\x12\x15\n\rcollection_id\x18\x01 \x01(\t\x12\x1f\n\x07\x61\x63tions\x18\x02 \x03(\x0e\x32\x0e.common.Action\x12\x1e\n\x06\x61\x63\x63\x65ss\x18\x03 \x01(\x0e\x32\x0e.common.Access\x12\x15\n\rhidden_fields\x18\x05 \x03(\t\x12\x17\n\x0freadonly_fields\x18\x06 \x03(\t\x12\x18\n\x10writeonly_fields\x18\x07 \x03(\t\x12\x13\n\x0bread_filter\x18\x08 \x01(\t\x12\x14\n\x0cwrite_filter\x18\t \x01(\t\"?\n\x0c\x43ollaborator\x12\x10\n\x08space_id\x18\x01 \x01(\t\x12\x0f\n\x07subject\x18\x02 \x01(\t\x12\x0c\n\x04role\x18\x03 \x01(\t\"p\n\x07Version\x12\x16\n\x0eserver_version\x18\x01 \x01(\t\x12\x13\n\x0b\x61pi_version\x18\x02 \x01(\t\x12\x12\n\nbuild_time\x18\x03 \x01(\t\x12\x0e\n\x06\x63ommit\x18\x04 \x01(\t\x12\x14\n\x0c\x62uild_number\x18\x05 \x01(\x05*%\n\x06\x41\x63\x63\x65ss\x12\x07\n\x03\x41NY\x10\x00\x12\x08\n\x04MINE\x10\x01\x12\x08\n\x04ROLE\x10\x02*C\n\x06\x41\x63tion\x12\x0b\n\x07UNKNOWN\x10\x00\x12\n\n\x06\x43REATE\x10\x01\x12\x08\n\x04READ\x10\x02\x12\n\n\x06UPDATE\x10\x03\x12\n\n\x06\x44\x45LETE\x10\x04\x42\x32Z0git.perx.ru/perxis/perxis-go/proto/common;commonb\x06proto3')
-
-_ACCESS = DESCRIPTOR.enum_types_by_name['Access']
-Access = enum_type_wrapper.EnumTypeWrapper(_ACCESS)
-_ACTION = DESCRIPTOR.enum_types_by_name['Action']
-Action = enum_type_wrapper.EnumTypeWrapper(_ACTION)
-ANY = 0
-MINE = 1
-ROLE = 2
-UNKNOWN = 0
-CREATE = 1
-READ = 2
-UPDATE = 3
-DELETE = 4
-
-
-_ERROR = DESCRIPTOR.message_types_by_name['Error']
-_ERROR_BADREQUEST = _ERROR.nested_types_by_name['BadRequest']
-_ERROR_BADREQUEST_FIELDVIOLATION = _ERROR_BADREQUEST.nested_types_by_name['FieldViolation']
-_ERROR_HELP = _ERROR.nested_types_by_name['Help']
-_ERROR_HELP_LINK = _ERROR_HELP.nested_types_by_name['Link']
-_ERROR_DEBUGINFO = _ERROR.nested_types_by_name['DebugInfo']
-_ERROR_LOCALIZEDMESSAGE = _ERROR.nested_types_by_name['LocalizedMessage']
-_ERROR_METADATAENTRY = _ERROR.nested_types_by_name['MetadataEntry']
-_FILTER = DESCRIPTOR.message_types_by_name['Filter']
-_FINDOPTIONS = DESCRIPTOR.message_types_by_name['FindOptions']
-_RULE = DESCRIPTOR.message_types_by_name['Rule']
-_COLLABORATOR = DESCRIPTOR.message_types_by_name['Collaborator']
-_VERSION = DESCRIPTOR.message_types_by_name['Version']
-Error = _reflection.GeneratedProtocolMessageType('Error', (_message.Message,), {
-
-  'BadRequest' : _reflection.GeneratedProtocolMessageType('BadRequest', (_message.Message,), {
-
-    'FieldViolation' : _reflection.GeneratedProtocolMessageType('FieldViolation', (_message.Message,), {
-      'DESCRIPTOR' : _ERROR_BADREQUEST_FIELDVIOLATION,
-      '__module__' : 'common.common_pb2'
-      # @@protoc_insertion_point(class_scope:common.Error.BadRequest.FieldViolation)
-      })
-    ,
-    'DESCRIPTOR' : _ERROR_BADREQUEST,
-    '__module__' : 'common.common_pb2'
-    # @@protoc_insertion_point(class_scope:common.Error.BadRequest)
-    })
-  ,
-
-  'Help' : _reflection.GeneratedProtocolMessageType('Help', (_message.Message,), {
-
-    'Link' : _reflection.GeneratedProtocolMessageType('Link', (_message.Message,), {
-      'DESCRIPTOR' : _ERROR_HELP_LINK,
-      '__module__' : 'common.common_pb2'
-      # @@protoc_insertion_point(class_scope:common.Error.Help.Link)
-      })
-    ,
-    'DESCRIPTOR' : _ERROR_HELP,
-    '__module__' : 'common.common_pb2'
-    # @@protoc_insertion_point(class_scope:common.Error.Help)
-    })
-  ,
-
-  'DebugInfo' : _reflection.GeneratedProtocolMessageType('DebugInfo', (_message.Message,), {
-    'DESCRIPTOR' : _ERROR_DEBUGINFO,
-    '__module__' : 'common.common_pb2'
-    # @@protoc_insertion_point(class_scope:common.Error.DebugInfo)
-    })
-  ,
-
-  'LocalizedMessage' : _reflection.GeneratedProtocolMessageType('LocalizedMessage', (_message.Message,), {
-    'DESCRIPTOR' : _ERROR_LOCALIZEDMESSAGE,
-    '__module__' : 'common.common_pb2'
-    # @@protoc_insertion_point(class_scope:common.Error.LocalizedMessage)
-    })
-  ,
-
-  'MetadataEntry' : _reflection.GeneratedProtocolMessageType('MetadataEntry', (_message.Message,), {
-    'DESCRIPTOR' : _ERROR_METADATAENTRY,
-    '__module__' : 'common.common_pb2'
-    # @@protoc_insertion_point(class_scope:common.Error.MetadataEntry)
-    })
-  ,
-  'DESCRIPTOR' : _ERROR,
-  '__module__' : 'common.common_pb2'
-  # @@protoc_insertion_point(class_scope:common.Error)
-  })
-_sym_db.RegisterMessage(Error)
-_sym_db.RegisterMessage(Error.BadRequest)
-_sym_db.RegisterMessage(Error.BadRequest.FieldViolation)
-_sym_db.RegisterMessage(Error.Help)
-_sym_db.RegisterMessage(Error.Help.Link)
-_sym_db.RegisterMessage(Error.DebugInfo)
-_sym_db.RegisterMessage(Error.LocalizedMessage)
-_sym_db.RegisterMessage(Error.MetadataEntry)
-
-Filter = _reflection.GeneratedProtocolMessageType('Filter', (_message.Message,), {
-  'DESCRIPTOR' : _FILTER,
-  '__module__' : 'common.common_pb2'
-  # @@protoc_insertion_point(class_scope:common.Filter)
-  })
-_sym_db.RegisterMessage(Filter)
-
-FindOptions = _reflection.GeneratedProtocolMessageType('FindOptions', (_message.Message,), {
-  'DESCRIPTOR' : _FINDOPTIONS,
-  '__module__' : 'common.common_pb2'
-  # @@protoc_insertion_point(class_scope:common.FindOptions)
-  })
-_sym_db.RegisterMessage(FindOptions)
-
-Rule = _reflection.GeneratedProtocolMessageType('Rule', (_message.Message,), {
-  'DESCRIPTOR' : _RULE,
-  '__module__' : 'common.common_pb2'
-  # @@protoc_insertion_point(class_scope:common.Rule)
-  })
-_sym_db.RegisterMessage(Rule)
-
-Collaborator = _reflection.GeneratedProtocolMessageType('Collaborator', (_message.Message,), {
-  'DESCRIPTOR' : _COLLABORATOR,
-  '__module__' : 'common.common_pb2'
-  # @@protoc_insertion_point(class_scope:common.Collaborator)
-  })
-_sym_db.RegisterMessage(Collaborator)
-
-Version = _reflection.GeneratedProtocolMessageType('Version', (_message.Message,), {
-  'DESCRIPTOR' : _VERSION,
-  '__module__' : 'common.common_pb2'
-  # @@protoc_insertion_point(class_scope:common.Version)
-  })
-_sym_db.RegisterMessage(Version)
-
-if _descriptor._USE_C_DESCRIPTORS == False:
-
-  DESCRIPTOR._options = None
-  DESCRIPTOR._serialized_options = b'Z0git.perx.ru/perxis/perxis-go/proto/common;common'
-  _ERROR_METADATAENTRY._options = None
-  _ERROR_METADATAENTRY._serialized_options = b'8\001'
-  _ACCESS._serialized_start=1317
-  _ACCESS._serialized_end=1354
-  _ACTION._serialized_start=1356
-  _ACTION._serialized_end=1423
-  _ERROR._serialized_start=62
-  _ERROR._serialized_end=740
-  _ERROR_BADREQUEST._serialized_start=375
-  _ERROR_BADREQUEST._serialized_end=498
-  _ERROR_BADREQUEST_FIELDVIOLATION._serialized_start=446
-  _ERROR_BADREQUEST_FIELDVIOLATION._serialized_end=498
-  _ERROR_HELP._serialized_start=500
-  _ERROR_HELP._serialized_end=588
-  _ERROR_HELP_LINK._serialized_start=548
-  _ERROR_HELP_LINK._serialized_end=588
-  _ERROR_DEBUGINFO._serialized_start=590
-  _ERROR_DEBUGINFO._serialized_end=638
-  _ERROR_LOCALIZEDMESSAGE._serialized_start=640
-  _ERROR_LOCALIZEDMESSAGE._serialized_end=691
-  _ERROR_METADATAENTRY._serialized_start=693
-  _ERROR_METADATAENTRY._serialized_end=740
-  _FILTER._serialized_start=742
-  _FILTER._serialized_end=816
-  _FINDOPTIONS._serialized_start=818
-  _FINDOPTIONS._serialized_end=922
-  _RULE._serialized_start=925
-  _RULE._serialized_end=1136
-  _COLLABORATOR._serialized_start=1138
-  _COLLABORATOR._serialized_end=1201
-  _VERSION._serialized_start=1203
-  _VERSION._serialized_end=1315
-# @@protoc_insertion_point(module_scope)
diff --git a/clients/delivery/delivery_pb2.py b/clients/delivery/delivery_pb2.py
deleted file mode 100644
index 3ffb52d1cfd2f2a9eca28bf66f2255bcc87226c9..0000000000000000000000000000000000000000
--- a/clients/delivery/delivery_pb2.py
+++ /dev/null
@@ -1,172 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by the protocol buffer compiler.  DO NOT EDIT!
-# source: delivery/delivery.proto
-"""Generated protocol buffer code."""
-from google.protobuf import descriptor as _descriptor
-from google.protobuf import descriptor_pool as _descriptor_pool
-from google.protobuf import message as _message
-from google.protobuf import reflection as _reflection
-from google.protobuf import symbol_database as _symbol_database
-# @@protoc_insertion_point(imports)
-
-_sym_db = _symbol_database.Default()
-
-
-from locales import locales_pb2 as locales_dot_locales__pb2
-from environments import environments_pb2 as environments_dot_environments__pb2
-from collections import collections_pb2 as collections_dot_collections__pb2
-from items import items_pb2 as items_dot_items__pb2
-
-
-DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x17\x64\x65livery/delivery.proto\x12\x08\x64\x65livery\x1a\x15locales/locales.proto\x1a\x1f\x65nvironments/environments.proto\x1a\x1d\x63ollections/collections.proto\x1a\x11items/items.proto\"&\n\x12ListLocalesRequest\x12\x10\n\x08space_id\x18\x01 \x01(\t\"?\n\x13ListLocalesResponse\x12(\n\x07locales\x18\x01 \x03(\x0b\x32\x17.content.locales.Locale\"9\n\x15GetEnvironmentRequest\x12\x10\n\x08space_id\x18\x01 \x01(\t\x12\x0e\n\x06\x65nv_id\x18\x02 \x01(\t\"H\n\x16GetEnvironmentResponse\x12.\n\x03\x65nv\x18\x01 \x01(\x0b\x32!.content.environments.Environment\"+\n\x17ListEnvironmentsRequest\x12\x10\n\x08space_id\x18\x01 \x01(\t\"K\n\x18ListEnvironmentsResponse\x12/\n\x04\x65nvs\x18\x01 \x03(\x0b\x32!.content.environments.Environment\"O\n\x14GetCollectionRequest\x12\x10\n\x08space_id\x18\x01 \x01(\t\x12\x0e\n\x06\x65nv_id\x18\x02 \x01(\t\x12\x15\n\rcollection_id\x18\x03 \x01(\t\"L\n\x15GetCollectionResponse\x12\x33\n\ncollection\x18\x01 \x01(\x0b\x32\x1f.content.collections.Collection\":\n\x16ListCollectionsRequest\x12\x10\n\x08space_id\x18\x01 \x01(\t\x12\x0e\n\x06\x65nv_id\x18\x02 \x01(\t\"O\n\x17ListCollectionsResponse\x12\x34\n\x0b\x63ollections\x18\x01 \x03(\x0b\x32\x1f.content.collections.Collection\"\x8f\x01\n\x0eGetItemRequest\x12\x10\n\x08space_id\x18\x01 \x01(\t\x12\x0e\n\x06\x65nv_id\x18\x02 \x01(\t\x12\x15\n\rcollection_id\x18\x03 \x01(\t\x12\x0f\n\x07item_id\x18\x05 \x01(\t\x12\x33\n\x07options\x18\x06 \x01(\x0b\x32\".content.items.GetPublishedOptions\"4\n\x0fGetItemResponse\x12!\n\x04item\x18\x01 \x01(\x0b\x32\x13.content.items.Item\"\xa8\x01\n\x10\x46indItemsRequest\x12\x10\n\x08space_id\x18\x01 \x01(\t\x12\x0e\n\x06\x65nv_id\x18\x02 \x01(\t\x12\x15\n\rcollection_id\x18\x03 \x01(\t\x12%\n\x06\x66ilter\x18\x05 \x01(\x0b\x32\x15.content.items.Filter\x12\x34\n\x07options\x18\x06 \x01(\x0b\x32#.content.items.FindPublishedOptions\"F\n\x11\x46indItemsResponse\x12\"\n\x05items\x18\x01 \x03(\x0b\x32\x13.content.items.Item\x12\r\n\x05total\x18\x02 \x01(\x05\x32\xc4\x04\n\x08\x44\x65livery\x12L\n\x0bListLocales\x12\x1c.delivery.ListLocalesRequest\x1a\x1d.delivery.ListLocalesResponse\"\x00\x12U\n\x0eGetEnvironment\x12\x1f.delivery.GetEnvironmentRequest\x1a .delivery.GetEnvironmentResponse\"\x00\x12[\n\x10ListEnvironments\x12!.delivery.ListEnvironmentsRequest\x1a\".delivery.ListEnvironmentsResponse\"\x00\x12R\n\rGetCollection\x12\x1e.delivery.GetCollectionRequest\x1a\x1f.delivery.GetCollectionResponse\"\x00\x12X\n\x0fListCollections\x12 .delivery.ListCollectionsRequest\x1a!.delivery.ListCollectionsResponse\"\x00\x12@\n\x07GetItem\x12\x18.delivery.GetItemRequest\x1a\x19.delivery.GetItemResponse\"\x00\x12\x46\n\tFindItems\x12\x1a.delivery.FindItemsRequest\x1a\x1b.delivery.FindItemsResponse\"\x00\x42\x36Z4git.perx.ru/perxis/perxis-go/proto/delivery;deliveryb\x06proto3')
-
-
-
-_LISTLOCALESREQUEST = DESCRIPTOR.message_types_by_name['ListLocalesRequest']
-_LISTLOCALESRESPONSE = DESCRIPTOR.message_types_by_name['ListLocalesResponse']
-_GETENVIRONMENTREQUEST = DESCRIPTOR.message_types_by_name['GetEnvironmentRequest']
-_GETENVIRONMENTRESPONSE = DESCRIPTOR.message_types_by_name['GetEnvironmentResponse']
-_LISTENVIRONMENTSREQUEST = DESCRIPTOR.message_types_by_name['ListEnvironmentsRequest']
-_LISTENVIRONMENTSRESPONSE = DESCRIPTOR.message_types_by_name['ListEnvironmentsResponse']
-_GETCOLLECTIONREQUEST = DESCRIPTOR.message_types_by_name['GetCollectionRequest']
-_GETCOLLECTIONRESPONSE = DESCRIPTOR.message_types_by_name['GetCollectionResponse']
-_LISTCOLLECTIONSREQUEST = DESCRIPTOR.message_types_by_name['ListCollectionsRequest']
-_LISTCOLLECTIONSRESPONSE = DESCRIPTOR.message_types_by_name['ListCollectionsResponse']
-_GETITEMREQUEST = DESCRIPTOR.message_types_by_name['GetItemRequest']
-_GETITEMRESPONSE = DESCRIPTOR.message_types_by_name['GetItemResponse']
-_FINDITEMSREQUEST = DESCRIPTOR.message_types_by_name['FindItemsRequest']
-_FINDITEMSRESPONSE = DESCRIPTOR.message_types_by_name['FindItemsResponse']
-ListLocalesRequest = _reflection.GeneratedProtocolMessageType('ListLocalesRequest', (_message.Message,), {
-  'DESCRIPTOR' : _LISTLOCALESREQUEST,
-  '__module__' : 'delivery.delivery_pb2'
-  # @@protoc_insertion_point(class_scope:delivery.ListLocalesRequest)
-  })
-_sym_db.RegisterMessage(ListLocalesRequest)
-
-ListLocalesResponse = _reflection.GeneratedProtocolMessageType('ListLocalesResponse', (_message.Message,), {
-  'DESCRIPTOR' : _LISTLOCALESRESPONSE,
-  '__module__' : 'delivery.delivery_pb2'
-  # @@protoc_insertion_point(class_scope:delivery.ListLocalesResponse)
-  })
-_sym_db.RegisterMessage(ListLocalesResponse)
-
-GetEnvironmentRequest = _reflection.GeneratedProtocolMessageType('GetEnvironmentRequest', (_message.Message,), {
-  'DESCRIPTOR' : _GETENVIRONMENTREQUEST,
-  '__module__' : 'delivery.delivery_pb2'
-  # @@protoc_insertion_point(class_scope:delivery.GetEnvironmentRequest)
-  })
-_sym_db.RegisterMessage(GetEnvironmentRequest)
-
-GetEnvironmentResponse = _reflection.GeneratedProtocolMessageType('GetEnvironmentResponse', (_message.Message,), {
-  'DESCRIPTOR' : _GETENVIRONMENTRESPONSE,
-  '__module__' : 'delivery.delivery_pb2'
-  # @@protoc_insertion_point(class_scope:delivery.GetEnvironmentResponse)
-  })
-_sym_db.RegisterMessage(GetEnvironmentResponse)
-
-ListEnvironmentsRequest = _reflection.GeneratedProtocolMessageType('ListEnvironmentsRequest', (_message.Message,), {
-  'DESCRIPTOR' : _LISTENVIRONMENTSREQUEST,
-  '__module__' : 'delivery.delivery_pb2'
-  # @@protoc_insertion_point(class_scope:delivery.ListEnvironmentsRequest)
-  })
-_sym_db.RegisterMessage(ListEnvironmentsRequest)
-
-ListEnvironmentsResponse = _reflection.GeneratedProtocolMessageType('ListEnvironmentsResponse', (_message.Message,), {
-  'DESCRIPTOR' : _LISTENVIRONMENTSRESPONSE,
-  '__module__' : 'delivery.delivery_pb2'
-  # @@protoc_insertion_point(class_scope:delivery.ListEnvironmentsResponse)
-  })
-_sym_db.RegisterMessage(ListEnvironmentsResponse)
-
-GetCollectionRequest = _reflection.GeneratedProtocolMessageType('GetCollectionRequest', (_message.Message,), {
-  'DESCRIPTOR' : _GETCOLLECTIONREQUEST,
-  '__module__' : 'delivery.delivery_pb2'
-  # @@protoc_insertion_point(class_scope:delivery.GetCollectionRequest)
-  })
-_sym_db.RegisterMessage(GetCollectionRequest)
-
-GetCollectionResponse = _reflection.GeneratedProtocolMessageType('GetCollectionResponse', (_message.Message,), {
-  'DESCRIPTOR' : _GETCOLLECTIONRESPONSE,
-  '__module__' : 'delivery.delivery_pb2'
-  # @@protoc_insertion_point(class_scope:delivery.GetCollectionResponse)
-  })
-_sym_db.RegisterMessage(GetCollectionResponse)
-
-ListCollectionsRequest = _reflection.GeneratedProtocolMessageType('ListCollectionsRequest', (_message.Message,), {
-  'DESCRIPTOR' : _LISTCOLLECTIONSREQUEST,
-  '__module__' : 'delivery.delivery_pb2'
-  # @@protoc_insertion_point(class_scope:delivery.ListCollectionsRequest)
-  })
-_sym_db.RegisterMessage(ListCollectionsRequest)
-
-ListCollectionsResponse = _reflection.GeneratedProtocolMessageType('ListCollectionsResponse', (_message.Message,), {
-  'DESCRIPTOR' : _LISTCOLLECTIONSRESPONSE,
-  '__module__' : 'delivery.delivery_pb2'
-  # @@protoc_insertion_point(class_scope:delivery.ListCollectionsResponse)
-  })
-_sym_db.RegisterMessage(ListCollectionsResponse)
-
-GetItemRequest = _reflection.GeneratedProtocolMessageType('GetItemRequest', (_message.Message,), {
-  'DESCRIPTOR' : _GETITEMREQUEST,
-  '__module__' : 'delivery.delivery_pb2'
-  # @@protoc_insertion_point(class_scope:delivery.GetItemRequest)
-  })
-_sym_db.RegisterMessage(GetItemRequest)
-
-GetItemResponse = _reflection.GeneratedProtocolMessageType('GetItemResponse', (_message.Message,), {
-  'DESCRIPTOR' : _GETITEMRESPONSE,
-  '__module__' : 'delivery.delivery_pb2'
-  # @@protoc_insertion_point(class_scope:delivery.GetItemResponse)
-  })
-_sym_db.RegisterMessage(GetItemResponse)
-
-FindItemsRequest = _reflection.GeneratedProtocolMessageType('FindItemsRequest', (_message.Message,), {
-  'DESCRIPTOR' : _FINDITEMSREQUEST,
-  '__module__' : 'delivery.delivery_pb2'
-  # @@protoc_insertion_point(class_scope:delivery.FindItemsRequest)
-  })
-_sym_db.RegisterMessage(FindItemsRequest)
-
-FindItemsResponse = _reflection.GeneratedProtocolMessageType('FindItemsResponse', (_message.Message,), {
-  'DESCRIPTOR' : _FINDITEMSRESPONSE,
-  '__module__' : 'delivery.delivery_pb2'
-  # @@protoc_insertion_point(class_scope:delivery.FindItemsResponse)
-  })
-_sym_db.RegisterMessage(FindItemsResponse)
-
-_DELIVERY = DESCRIPTOR.services_by_name['Delivery']
-if _descriptor._USE_C_DESCRIPTORS == False:
-
-  DESCRIPTOR._options = None
-  DESCRIPTOR._serialized_options = b'Z4git.perx.ru/perxis/perxis-go/proto/delivery;delivery'
-  _LISTLOCALESREQUEST._serialized_start=143
-  _LISTLOCALESREQUEST._serialized_end=181
-  _LISTLOCALESRESPONSE._serialized_start=183
-  _LISTLOCALESRESPONSE._serialized_end=246
-  _GETENVIRONMENTREQUEST._serialized_start=248
-  _GETENVIRONMENTREQUEST._serialized_end=305
-  _GETENVIRONMENTRESPONSE._serialized_start=307
-  _GETENVIRONMENTRESPONSE._serialized_end=379
-  _LISTENVIRONMENTSREQUEST._serialized_start=381
-  _LISTENVIRONMENTSREQUEST._serialized_end=424
-  _LISTENVIRONMENTSRESPONSE._serialized_start=426
-  _LISTENVIRONMENTSRESPONSE._serialized_end=501
-  _GETCOLLECTIONREQUEST._serialized_start=503
-  _GETCOLLECTIONREQUEST._serialized_end=582
-  _GETCOLLECTIONRESPONSE._serialized_start=584
-  _GETCOLLECTIONRESPONSE._serialized_end=660
-  _LISTCOLLECTIONSREQUEST._serialized_start=662
-  _LISTCOLLECTIONSREQUEST._serialized_end=720
-  _LISTCOLLECTIONSRESPONSE._serialized_start=722
-  _LISTCOLLECTIONSRESPONSE._serialized_end=801
-  _GETITEMREQUEST._serialized_start=804
-  _GETITEMREQUEST._serialized_end=947
-  _GETITEMRESPONSE._serialized_start=949
-  _GETITEMRESPONSE._serialized_end=1001
-  _FINDITEMSREQUEST._serialized_start=1004
-  _FINDITEMSREQUEST._serialized_end=1172
-  _FINDITEMSRESPONSE._serialized_start=1174
-  _FINDITEMSRESPONSE._serialized_end=1244
-  _DELIVERY._serialized_start=1247
-  _DELIVERY._serialized_end=1827
-# @@protoc_insertion_point(module_scope)
diff --git a/clients/environments/environments_pb2.py b/clients/environments/environments_pb2.py
deleted file mode 100644
index 1a9aa1426d092b937e25f6c8fc615df55264b0b5..0000000000000000000000000000000000000000
--- a/clients/environments/environments_pb2.py
+++ /dev/null
@@ -1,152 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by the protocol buffer compiler.  DO NOT EDIT!
-# source: environments/environments.proto
-"""Generated protocol buffer code."""
-from google.protobuf import descriptor as _descriptor
-from google.protobuf import descriptor_pool as _descriptor_pool
-from google.protobuf import message as _message
-from google.protobuf import reflection as _reflection
-from google.protobuf import symbol_database as _symbol_database
-# @@protoc_insertion_point(imports)
-
-_sym_db = _symbol_database.Default()
-
-
-from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2
-
-
-DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1f\x65nvironments/environments.proto\x12\x14\x63ontent.environments\x1a\x1bgoogle/protobuf/empty.proto\"\x8f\x02\n\x0b\x45nvironment\x12\n\n\x02id\x18\x01 \x01(\t\x12\x10\n\x08space_id\x18\x02 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x03 \x01(\t\x12\x36\n\x05state\x18\x04 \x01(\x0e\x32\'.content.environments.Environment.State\x12\x12\n\nstate_info\x18\x05 \x01(\t\x12\x0f\n\x07\x61liases\x18\x06 \x03(\t\x12,\n\x06\x63onfig\x18\n \x01(\x0b\x32\x1c.content.environments.Config\"B\n\x05State\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x07\n\x03NEW\x10\x01\x12\r\n\tPREPARING\x10\x02\x12\t\n\x05READY\x10\x03\x12\t\n\x05\x45RROR\x10\x04\"-\n\x06\x43onfig\x12\x11\n\tsource_id\x18\x01 \x01(\t\x12\x10\n\x08\x66\x65\x61tures\x18\x02 \x03(\t\"?\n\rCreateRequest\x12.\n\x03\x65nv\x18\x01 \x01(\x0b\x32!.content.environments.Environment\"D\n\x0e\x43reateResponse\x12\x32\n\x07\x63reated\x18\x01 \x01(\x0b\x32!.content.environments.Environment\"\x1f\n\x0bListRequest\x12\x10\n\x08space_id\x18\x01 \x01(\t\"?\n\x0cListResponse\x12/\n\x04\x65nvs\x18\x01 \x03(\x0b\x32!.content.environments.Environment\".\n\nGetRequest\x12\x10\n\x08space_id\x18\x01 \x01(\t\x12\x0e\n\x06\x65nv_id\x18\x02 \x01(\t\"=\n\x0bGetResponse\x12.\n\x03\x65nv\x18\x01 \x01(\x0b\x32!.content.environments.Environment\"?\n\rUpdateRequest\x12.\n\x03\x65nv\x18\x01 \x01(\x0b\x32!.content.environments.Environment\"B\n\x0fSetAliasRequest\x12\x10\n\x08space_id\x18\x01 \x01(\t\x12\x0e\n\x06\x65nv_id\x18\x02 \x01(\t\x12\r\n\x05\x61lias\x18\x03 \x01(\t\"E\n\x12RemoveAliasRequest\x12\x10\n\x08space_id\x18\x01 \x01(\t\x12\x0e\n\x06\x65nv_id\x18\x02 \x01(\t\x12\r\n\x05\x61lias\x18\x03 \x01(\t\"1\n\rDeleteRequest\x12\x10\n\x08space_id\x18\x01 \x01(\t\x12\x0e\n\x06\x65nv_id\x18\x02 \x01(\t2\xb6\x04\n\x0c\x45nvironments\x12U\n\x06\x43reate\x12#.content.environments.CreateRequest\x1a$.content.environments.CreateResponse\"\x00\x12L\n\x03Get\x12 .content.environments.GetRequest\x1a!.content.environments.GetResponse\"\x00\x12O\n\x04List\x12!.content.environments.ListRequest\x1a\".content.environments.ListResponse\"\x00\x12G\n\x06Update\x12#.content.environments.UpdateRequest\x1a\x16.google.protobuf.Empty\"\x00\x12K\n\x08SetAlias\x12%.content.environments.SetAliasRequest\x1a\x16.google.protobuf.Empty\"\x00\x12Q\n\x0bRemoveAlias\x12(.content.environments.RemoveAliasRequest\x1a\x16.google.protobuf.Empty\"\x00\x12G\n\x06\x44\x65lete\x12#.content.environments.DeleteRequest\x1a\x16.google.protobuf.Empty\"\x00\x42>Z<git.perx.ru/perxis/perxis-go/proto/environments;environmentsb\x06proto3')
-
-
-
-_ENVIRONMENT = DESCRIPTOR.message_types_by_name['Environment']
-_CONFIG = DESCRIPTOR.message_types_by_name['Config']
-_CREATEREQUEST = DESCRIPTOR.message_types_by_name['CreateRequest']
-_CREATERESPONSE = DESCRIPTOR.message_types_by_name['CreateResponse']
-_LISTREQUEST = DESCRIPTOR.message_types_by_name['ListRequest']
-_LISTRESPONSE = DESCRIPTOR.message_types_by_name['ListResponse']
-_GETREQUEST = DESCRIPTOR.message_types_by_name['GetRequest']
-_GETRESPONSE = DESCRIPTOR.message_types_by_name['GetResponse']
-_UPDATEREQUEST = DESCRIPTOR.message_types_by_name['UpdateRequest']
-_SETALIASREQUEST = DESCRIPTOR.message_types_by_name['SetAliasRequest']
-_REMOVEALIASREQUEST = DESCRIPTOR.message_types_by_name['RemoveAliasRequest']
-_DELETEREQUEST = DESCRIPTOR.message_types_by_name['DeleteRequest']
-_ENVIRONMENT_STATE = _ENVIRONMENT.enum_types_by_name['State']
-Environment = _reflection.GeneratedProtocolMessageType('Environment', (_message.Message,), {
-  'DESCRIPTOR' : _ENVIRONMENT,
-  '__module__' : 'environments.environments_pb2'
-  # @@protoc_insertion_point(class_scope:content.environments.Environment)
-  })
-_sym_db.RegisterMessage(Environment)
-
-Config = _reflection.GeneratedProtocolMessageType('Config', (_message.Message,), {
-  'DESCRIPTOR' : _CONFIG,
-  '__module__' : 'environments.environments_pb2'
-  # @@protoc_insertion_point(class_scope:content.environments.Config)
-  })
-_sym_db.RegisterMessage(Config)
-
-CreateRequest = _reflection.GeneratedProtocolMessageType('CreateRequest', (_message.Message,), {
-  'DESCRIPTOR' : _CREATEREQUEST,
-  '__module__' : 'environments.environments_pb2'
-  # @@protoc_insertion_point(class_scope:content.environments.CreateRequest)
-  })
-_sym_db.RegisterMessage(CreateRequest)
-
-CreateResponse = _reflection.GeneratedProtocolMessageType('CreateResponse', (_message.Message,), {
-  'DESCRIPTOR' : _CREATERESPONSE,
-  '__module__' : 'environments.environments_pb2'
-  # @@protoc_insertion_point(class_scope:content.environments.CreateResponse)
-  })
-_sym_db.RegisterMessage(CreateResponse)
-
-ListRequest = _reflection.GeneratedProtocolMessageType('ListRequest', (_message.Message,), {
-  'DESCRIPTOR' : _LISTREQUEST,
-  '__module__' : 'environments.environments_pb2'
-  # @@protoc_insertion_point(class_scope:content.environments.ListRequest)
-  })
-_sym_db.RegisterMessage(ListRequest)
-
-ListResponse = _reflection.GeneratedProtocolMessageType('ListResponse', (_message.Message,), {
-  'DESCRIPTOR' : _LISTRESPONSE,
-  '__module__' : 'environments.environments_pb2'
-  # @@protoc_insertion_point(class_scope:content.environments.ListResponse)
-  })
-_sym_db.RegisterMessage(ListResponse)
-
-GetRequest = _reflection.GeneratedProtocolMessageType('GetRequest', (_message.Message,), {
-  'DESCRIPTOR' : _GETREQUEST,
-  '__module__' : 'environments.environments_pb2'
-  # @@protoc_insertion_point(class_scope:content.environments.GetRequest)
-  })
-_sym_db.RegisterMessage(GetRequest)
-
-GetResponse = _reflection.GeneratedProtocolMessageType('GetResponse', (_message.Message,), {
-  'DESCRIPTOR' : _GETRESPONSE,
-  '__module__' : 'environments.environments_pb2'
-  # @@protoc_insertion_point(class_scope:content.environments.GetResponse)
-  })
-_sym_db.RegisterMessage(GetResponse)
-
-UpdateRequest = _reflection.GeneratedProtocolMessageType('UpdateRequest', (_message.Message,), {
-  'DESCRIPTOR' : _UPDATEREQUEST,
-  '__module__' : 'environments.environments_pb2'
-  # @@protoc_insertion_point(class_scope:content.environments.UpdateRequest)
-  })
-_sym_db.RegisterMessage(UpdateRequest)
-
-SetAliasRequest = _reflection.GeneratedProtocolMessageType('SetAliasRequest', (_message.Message,), {
-  'DESCRIPTOR' : _SETALIASREQUEST,
-  '__module__' : 'environments.environments_pb2'
-  # @@protoc_insertion_point(class_scope:content.environments.SetAliasRequest)
-  })
-_sym_db.RegisterMessage(SetAliasRequest)
-
-RemoveAliasRequest = _reflection.GeneratedProtocolMessageType('RemoveAliasRequest', (_message.Message,), {
-  'DESCRIPTOR' : _REMOVEALIASREQUEST,
-  '__module__' : 'environments.environments_pb2'
-  # @@protoc_insertion_point(class_scope:content.environments.RemoveAliasRequest)
-  })
-_sym_db.RegisterMessage(RemoveAliasRequest)
-
-DeleteRequest = _reflection.GeneratedProtocolMessageType('DeleteRequest', (_message.Message,), {
-  'DESCRIPTOR' : _DELETEREQUEST,
-  '__module__' : 'environments.environments_pb2'
-  # @@protoc_insertion_point(class_scope:content.environments.DeleteRequest)
-  })
-_sym_db.RegisterMessage(DeleteRequest)
-
-_ENVIRONMENTS = DESCRIPTOR.services_by_name['Environments']
-if _descriptor._USE_C_DESCRIPTORS == False:
-
-  DESCRIPTOR._options = None
-  DESCRIPTOR._serialized_options = b'Z<git.perx.ru/perxis/perxis-go/proto/environments;environments'
-  _ENVIRONMENT._serialized_start=87
-  _ENVIRONMENT._serialized_end=358
-  _ENVIRONMENT_STATE._serialized_start=292
-  _ENVIRONMENT_STATE._serialized_end=358
-  _CONFIG._serialized_start=360
-  _CONFIG._serialized_end=405
-  _CREATEREQUEST._serialized_start=407
-  _CREATEREQUEST._serialized_end=470
-  _CREATERESPONSE._serialized_start=472
-  _CREATERESPONSE._serialized_end=540
-  _LISTREQUEST._serialized_start=542
-  _LISTREQUEST._serialized_end=573
-  _LISTRESPONSE._serialized_start=575
-  _LISTRESPONSE._serialized_end=638
-  _GETREQUEST._serialized_start=640
-  _GETREQUEST._serialized_end=686
-  _GETRESPONSE._serialized_start=688
-  _GETRESPONSE._serialized_end=749
-  _UPDATEREQUEST._serialized_start=751
-  _UPDATEREQUEST._serialized_end=814
-  _SETALIASREQUEST._serialized_start=816
-  _SETALIASREQUEST._serialized_end=882
-  _REMOVEALIASREQUEST._serialized_start=884
-  _REMOVEALIASREQUEST._serialized_end=953
-  _DELETEREQUEST._serialized_start=955
-  _DELETEREQUEST._serialized_end=1004
-  _ENVIRONMENTS._serialized_start=1007
-  _ENVIRONMENTS._serialized_end=1573
-# @@protoc_insertion_point(module_scope)
diff --git a/clients/extensions/extension_pb2.py b/clients/extensions/extension_pb2.py
deleted file mode 100644
index a9996aade1aa994dbc8193db1c7c42376932d141..0000000000000000000000000000000000000000
--- a/clients/extensions/extension_pb2.py
+++ /dev/null
@@ -1,184 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by the protocol buffer compiler.  DO NOT EDIT!
-# source: extensions/extension.proto
-"""Generated protocol buffer code."""
-from google.protobuf import descriptor as _descriptor
-from google.protobuf import descriptor_pool as _descriptor_pool
-from google.protobuf import message as _message
-from google.protobuf import reflection as _reflection
-from google.protobuf import symbol_database as _symbol_database
-# @@protoc_insertion_point(imports)
-
-_sym_db = _symbol_database.Default()
-
-
-from references import references_pb2 as references_dot_references__pb2
-
-
-DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1a\x65xtensions/extension.proto\x12\nextensions\x1a\x1breferences/references.proto\"Y\n\x0eInstallRequest\x12\x13\n\nextensions\x18\x90N \x03(\t\x12\x11\n\x08space_id\x18\x9aN \x01(\t\x12\x0f\n\x06\x65nv_id\x18\xa4N \x01(\t\x12\x0e\n\x05\x66orce\x18\xf4N \x01(\x08\"\xd9\x01\n\x16\x45xtensionRequestResult\x12\x38\n\x05state\x18\x90N \x01(\x0e\x32(.extensions.ExtensionRequestResult.State\x12\x12\n\textension\x18\xf4N \x01(\t\x12\x0c\n\x03msg\x18\xd8O \x01(\t\x12\x0e\n\x05\x65rror\x18\xbcP \x01(\t\x12\x19\n\x10update_available\x18\xa0Q \x01(\x08\"8\n\x05State\x12\x06\n\x02OK\x10\x00\x12\t\n\x05\x45RROR\x10\x01\x12\x0b\n\x07PENDING\x10\x02\x12\x0f\n\x0bIN_PROGRESS\x10\x03\"G\n\x0fInstallResponse\x12\x34\n\x07results\x18\x90N \x03(\x0b\x32\".extensions.ExtensionRequestResult\"l\n\x10UninstallRequest\x12\x13\n\nextensions\x18\x90N \x03(\t\x12\x11\n\x08space_id\x18\x9aN \x01(\t\x12\x0f\n\x06\x65nv_id\x18\xa4N \x01(\t\x12\x0f\n\x06remove\x18\xf4N \x01(\x08\x12\x0e\n\x05\x66orce\x18\xd8O \x01(\x08\"I\n\x11UninstallResponse\x12\x34\n\x07results\x18\x90N \x03(\x0b\x32\".extensions.ExtensionRequestResult\"X\n\rUpdateRequest\x12\x13\n\nextensions\x18\x90N \x03(\t\x12\x11\n\x08space_id\x18\x9aN \x01(\t\x12\x0f\n\x06\x65nv_id\x18\xa4N \x01(\t\x12\x0e\n\x05\x66orce\x18\xf4N \x01(\x08\"F\n\x0eUpdateResponse\x12\x34\n\x07results\x18\x90N \x03(\x0b\x32\".extensions.ExtensionRequestResult\"G\n\x0c\x43heckRequest\x12\x13\n\nextensions\x18\x90N \x03(\t\x12\x11\n\x08space_id\x18\x9aN \x01(\t\x12\x0f\n\x06\x65nv_id\x18\xa4N \x01(\t\"E\n\rCheckResponse\x12\x34\n\x07results\x18\x90N \x03(\x0b\x32\".extensions.ExtensionRequestResult\"\xf1\x02\n\rActionRequest\x12\x12\n\textension\x18\xe8\x07 \x01(\t\x12\x0f\n\x06\x61\x63tion\x18\xf4N \x01(\t\x12\x11\n\x08space_id\x18\x84R \x01(\t\x12\x0f\n\x06\x65nv_id\x18\x8eR \x01(\t\x12\x16\n\rcollection_id\x18\x98R \x01(\t\x12\x10\n\x07item_id\x18\xa2R \x01(\t\x12\x11\n\x08item_ids\x18\xacR \x03(\t\x12\x0f\n\x06\x66ields\x18\xb6R \x03(\t\x12:\n\x08metadata\x18\xf8U \x03(\x0b\x32\'.extensions.ActionRequest.MetadataEntry\x12,\n\x04refs\x18\x82V \x03(\x0b\x32\x1d.content.references.Reference\x12.\n\x06params\x18\x8cV \x01(\x0b\x32\x1d.content.references.Reference\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xdb\x02\n\x0e\x41\x63tionResponse\x12\x30\n\x05state\x18\x90N \x01(\x0e\x32 .extensions.ActionResponse.State\x12\x0c\n\x03msg\x18\xf4N \x01(\t\x12\x0e\n\x05\x65rror\x18\xd8O \x01(\t\x12!\n\x04next\x18\xbcP \x03(\x0b\x32\x12.extensions.Action\x12;\n\x08metadata\x18\xa0Q \x03(\x0b\x32(.extensions.ActionResponse.MetadataEntry\x12,\n\x04refs\x18\xd0P \x03(\x0b\x32\x1d.content.references.Reference\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\":\n\x05State\x12\x08\n\x04\x44ONE\x10\x00\x12\t\n\x05\x45RROR\x10\x01\x12\x0b\n\x07PENDING\x10\x02\x12\x0f\n\x0bIN_PROGRESS\x10\x03\"\xf9\x03\n\x06\x41\x63tion\x12\x12\n\textension\x18\x90N \x01(\t\x12\x0f\n\x06\x61\x63tion\x18\xf4N \x01(\t\x12\r\n\x04name\x18\xd8O \x01(\t\x12\x14\n\x0b\x64\x65scription\x18\xe2O \x01(\t\x12\r\n\x04icon\x18\xecO \x01(\t\x12-\n\x05image\x18\xf6O \x01(\x0b\x32\x1d.content.references.Reference\x12\x0f\n\x06groups\x18\x80P \x03(\t\x12&\n\x04kind\x18\xbcP \x01(\x0e\x32\x17.extensions.Action.Kind\x12\x10\n\x07\x63lasses\x18\xc6P \x03(\t\x12,\n\x04refs\x18\xd0P \x03(\x0b\x32\x1d.content.references.Reference\x12\x1a\n\x11params_collection\x18\xdaP \x01(\t\x12+\n\x07request\x18\xa0Q \x01(\x0b\x32\x19.extensions.ActionRequest\x12\x1a\n\x11navigation_action\x18\x84R \x01(\x08\x12\x19\n\x10navigation_route\x18\x8eR \x01(\t\"n\n\x04Kind\x12\x0b\n\x07\x44\x45\x46\x41ULT\x10\x00\x12\t\n\x05SPACE\x10\x01\x12\x0f\n\x0b\x45NVIRONMENT\x10\x02\x12\x0e\n\nCOLLECTION\x10\x03\x12\x08\n\x04ITEM\x10\x04\x12\t\n\x05ITEMS\x10\x05\x12\x0c\n\x08REVISION\x10\x06\x12\n\n\x06\x43REATE\x10\x07\x32\xe3\x02\n\tExtension\x12\x44\n\x07Install\x12\x1a.extensions.InstallRequest\x1a\x1b.extensions.InstallResponse\"\x00\x12>\n\x05\x43heck\x12\x18.extensions.CheckRequest\x1a\x19.extensions.CheckResponse\"\x00\x12\x41\n\x06Update\x12\x19.extensions.UpdateRequest\x1a\x1a.extensions.UpdateResponse\"\x00\x12J\n\tUninstall\x12\x1c.extensions.UninstallRequest\x1a\x1d.extensions.UninstallResponse\"\x00\x12\x41\n\x06\x41\x63tion\x12\x19.extensions.ActionRequest\x1a\x1a.extensions.ActionResponse\"\x00\x42:Z8git.perx.ru/perxis/perxis-go/proto/extensions;extensionsb\x06proto3')
-
-
-
-_INSTALLREQUEST = DESCRIPTOR.message_types_by_name['InstallRequest']
-_EXTENSIONREQUESTRESULT = DESCRIPTOR.message_types_by_name['ExtensionRequestResult']
-_INSTALLRESPONSE = DESCRIPTOR.message_types_by_name['InstallResponse']
-_UNINSTALLREQUEST = DESCRIPTOR.message_types_by_name['UninstallRequest']
-_UNINSTALLRESPONSE = DESCRIPTOR.message_types_by_name['UninstallResponse']
-_UPDATEREQUEST = DESCRIPTOR.message_types_by_name['UpdateRequest']
-_UPDATERESPONSE = DESCRIPTOR.message_types_by_name['UpdateResponse']
-_CHECKREQUEST = DESCRIPTOR.message_types_by_name['CheckRequest']
-_CHECKRESPONSE = DESCRIPTOR.message_types_by_name['CheckResponse']
-_ACTIONREQUEST = DESCRIPTOR.message_types_by_name['ActionRequest']
-_ACTIONREQUEST_METADATAENTRY = _ACTIONREQUEST.nested_types_by_name['MetadataEntry']
-_ACTIONRESPONSE = DESCRIPTOR.message_types_by_name['ActionResponse']
-_ACTIONRESPONSE_METADATAENTRY = _ACTIONRESPONSE.nested_types_by_name['MetadataEntry']
-_ACTION = DESCRIPTOR.message_types_by_name['Action']
-_EXTENSIONREQUESTRESULT_STATE = _EXTENSIONREQUESTRESULT.enum_types_by_name['State']
-_ACTIONRESPONSE_STATE = _ACTIONRESPONSE.enum_types_by_name['State']
-_ACTION_KIND = _ACTION.enum_types_by_name['Kind']
-InstallRequest = _reflection.GeneratedProtocolMessageType('InstallRequest', (_message.Message,), {
-  'DESCRIPTOR' : _INSTALLREQUEST,
-  '__module__' : 'extensions.extension_pb2'
-  # @@protoc_insertion_point(class_scope:extensions.InstallRequest)
-  })
-_sym_db.RegisterMessage(InstallRequest)
-
-ExtensionRequestResult = _reflection.GeneratedProtocolMessageType('ExtensionRequestResult', (_message.Message,), {
-  'DESCRIPTOR' : _EXTENSIONREQUESTRESULT,
-  '__module__' : 'extensions.extension_pb2'
-  # @@protoc_insertion_point(class_scope:extensions.ExtensionRequestResult)
-  })
-_sym_db.RegisterMessage(ExtensionRequestResult)
-
-InstallResponse = _reflection.GeneratedProtocolMessageType('InstallResponse', (_message.Message,), {
-  'DESCRIPTOR' : _INSTALLRESPONSE,
-  '__module__' : 'extensions.extension_pb2'
-  # @@protoc_insertion_point(class_scope:extensions.InstallResponse)
-  })
-_sym_db.RegisterMessage(InstallResponse)
-
-UninstallRequest = _reflection.GeneratedProtocolMessageType('UninstallRequest', (_message.Message,), {
-  'DESCRIPTOR' : _UNINSTALLREQUEST,
-  '__module__' : 'extensions.extension_pb2'
-  # @@protoc_insertion_point(class_scope:extensions.UninstallRequest)
-  })
-_sym_db.RegisterMessage(UninstallRequest)
-
-UninstallResponse = _reflection.GeneratedProtocolMessageType('UninstallResponse', (_message.Message,), {
-  'DESCRIPTOR' : _UNINSTALLRESPONSE,
-  '__module__' : 'extensions.extension_pb2'
-  # @@protoc_insertion_point(class_scope:extensions.UninstallResponse)
-  })
-_sym_db.RegisterMessage(UninstallResponse)
-
-UpdateRequest = _reflection.GeneratedProtocolMessageType('UpdateRequest', (_message.Message,), {
-  'DESCRIPTOR' : _UPDATEREQUEST,
-  '__module__' : 'extensions.extension_pb2'
-  # @@protoc_insertion_point(class_scope:extensions.UpdateRequest)
-  })
-_sym_db.RegisterMessage(UpdateRequest)
-
-UpdateResponse = _reflection.GeneratedProtocolMessageType('UpdateResponse', (_message.Message,), {
-  'DESCRIPTOR' : _UPDATERESPONSE,
-  '__module__' : 'extensions.extension_pb2'
-  # @@protoc_insertion_point(class_scope:extensions.UpdateResponse)
-  })
-_sym_db.RegisterMessage(UpdateResponse)
-
-CheckRequest = _reflection.GeneratedProtocolMessageType('CheckRequest', (_message.Message,), {
-  'DESCRIPTOR' : _CHECKREQUEST,
-  '__module__' : 'extensions.extension_pb2'
-  # @@protoc_insertion_point(class_scope:extensions.CheckRequest)
-  })
-_sym_db.RegisterMessage(CheckRequest)
-
-CheckResponse = _reflection.GeneratedProtocolMessageType('CheckResponse', (_message.Message,), {
-  'DESCRIPTOR' : _CHECKRESPONSE,
-  '__module__' : 'extensions.extension_pb2'
-  # @@protoc_insertion_point(class_scope:extensions.CheckResponse)
-  })
-_sym_db.RegisterMessage(CheckResponse)
-
-ActionRequest = _reflection.GeneratedProtocolMessageType('ActionRequest', (_message.Message,), {
-
-  'MetadataEntry' : _reflection.GeneratedProtocolMessageType('MetadataEntry', (_message.Message,), {
-    'DESCRIPTOR' : _ACTIONREQUEST_METADATAENTRY,
-    '__module__' : 'extensions.extension_pb2'
-    # @@protoc_insertion_point(class_scope:extensions.ActionRequest.MetadataEntry)
-    })
-  ,
-  'DESCRIPTOR' : _ACTIONREQUEST,
-  '__module__' : 'extensions.extension_pb2'
-  # @@protoc_insertion_point(class_scope:extensions.ActionRequest)
-  })
-_sym_db.RegisterMessage(ActionRequest)
-_sym_db.RegisterMessage(ActionRequest.MetadataEntry)
-
-ActionResponse = _reflection.GeneratedProtocolMessageType('ActionResponse', (_message.Message,), {
-
-  'MetadataEntry' : _reflection.GeneratedProtocolMessageType('MetadataEntry', (_message.Message,), {
-    'DESCRIPTOR' : _ACTIONRESPONSE_METADATAENTRY,
-    '__module__' : 'extensions.extension_pb2'
-    # @@protoc_insertion_point(class_scope:extensions.ActionResponse.MetadataEntry)
-    })
-  ,
-  'DESCRIPTOR' : _ACTIONRESPONSE,
-  '__module__' : 'extensions.extension_pb2'
-  # @@protoc_insertion_point(class_scope:extensions.ActionResponse)
-  })
-_sym_db.RegisterMessage(ActionResponse)
-_sym_db.RegisterMessage(ActionResponse.MetadataEntry)
-
-Action = _reflection.GeneratedProtocolMessageType('Action', (_message.Message,), {
-  'DESCRIPTOR' : _ACTION,
-  '__module__' : 'extensions.extension_pb2'
-  # @@protoc_insertion_point(class_scope:extensions.Action)
-  })
-_sym_db.RegisterMessage(Action)
-
-_EXTENSION = DESCRIPTOR.services_by_name['Extension']
-if _descriptor._USE_C_DESCRIPTORS == False:
-
-  DESCRIPTOR._options = None
-  DESCRIPTOR._serialized_options = b'Z8git.perx.ru/perxis/perxis-go/proto/extensions;extensions'
-  _ACTIONREQUEST_METADATAENTRY._options = None
-  _ACTIONREQUEST_METADATAENTRY._serialized_options = b'8\001'
-  _ACTIONRESPONSE_METADATAENTRY._options = None
-  _ACTIONRESPONSE_METADATAENTRY._serialized_options = b'8\001'
-  _INSTALLREQUEST._serialized_start=71
-  _INSTALLREQUEST._serialized_end=160
-  _EXTENSIONREQUESTRESULT._serialized_start=163
-  _EXTENSIONREQUESTRESULT._serialized_end=380
-  _EXTENSIONREQUESTRESULT_STATE._serialized_start=324
-  _EXTENSIONREQUESTRESULT_STATE._serialized_end=380
-  _INSTALLRESPONSE._serialized_start=382
-  _INSTALLRESPONSE._serialized_end=453
-  _UNINSTALLREQUEST._serialized_start=455
-  _UNINSTALLREQUEST._serialized_end=563
-  _UNINSTALLRESPONSE._serialized_start=565
-  _UNINSTALLRESPONSE._serialized_end=638
-  _UPDATEREQUEST._serialized_start=640
-  _UPDATEREQUEST._serialized_end=728
-  _UPDATERESPONSE._serialized_start=730
-  _UPDATERESPONSE._serialized_end=800
-  _CHECKREQUEST._serialized_start=802
-  _CHECKREQUEST._serialized_end=873
-  _CHECKRESPONSE._serialized_start=875
-  _CHECKRESPONSE._serialized_end=944
-  _ACTIONREQUEST._serialized_start=947
-  _ACTIONREQUEST._serialized_end=1316
-  _ACTIONREQUEST_METADATAENTRY._serialized_start=1269
-  _ACTIONREQUEST_METADATAENTRY._serialized_end=1316
-  _ACTIONRESPONSE._serialized_start=1319
-  _ACTIONRESPONSE._serialized_end=1666
-  _ACTIONRESPONSE_METADATAENTRY._serialized_start=1269
-  _ACTIONRESPONSE_METADATAENTRY._serialized_end=1316
-  _ACTIONRESPONSE_STATE._serialized_start=1608
-  _ACTIONRESPONSE_STATE._serialized_end=1666
-  _ACTION._serialized_start=1669
-  _ACTION._serialized_end=2174
-  _ACTION_KIND._serialized_start=2064
-  _ACTION_KIND._serialized_end=2174
-  _EXTENSION._serialized_start=2177
-  _EXTENSION._serialized_end=2532
-# @@protoc_insertion_point(module_scope)
diff --git a/clients/extensions/manager_pb2.py b/clients/extensions/manager_pb2.py
deleted file mode 100644
index ca25fdafd7179d7789f50c7b4f26fd09275cedd0..0000000000000000000000000000000000000000
--- a/clients/extensions/manager_pb2.py
+++ /dev/null
@@ -1,134 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by the protocol buffer compiler.  DO NOT EDIT!
-# source: extensions/manager.proto
-"""Generated protocol buffer code."""
-from google.protobuf import descriptor as _descriptor
-from google.protobuf import descriptor_pool as _descriptor_pool
-from google.protobuf import message as _message
-from google.protobuf import reflection as _reflection
-from google.protobuf import symbol_database as _symbol_database
-# @@protoc_insertion_point(imports)
-
-_sym_db = _symbol_database.Default()
-
-
-
-
-DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x18\x65xtensions/manager.proto\x12\nextensions\"\x8d\x02\n\x13\x45xtensionDescriptor\x12\x12\n\textension\x18\x90N \x01(\t\x12\x0e\n\x05title\x18\x9aN \x01(\t\x12\x14\n\x0b\x64\x65scription\x18\xa4N \x01(\t\x12\x10\n\x07version\x18\xf4N \x01(\t\x12\x1c\n\x13version_description\x18\xfeN \x01(\t\x12\r\n\x04\x64\x65ps\x18\xd8O \x03(\t\x12\x0b\n\x03url\x18\x05 \x01(\t\x12?\n\x08metadata\x18\x06 \x03(\x0b\x32-.extensions.ExtensionDescriptor.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"P\n\x19RegisterExtensionsRequest\x12\x33\n\nextensions\x18\x01 \x03(\x0b\x32\x1f.extensions.ExtensionDescriptor\"\x1c\n\x1aRegisterExtensionsResponse\"R\n\x1bUnregisterExtensionsRequest\x12\x33\n\nextensions\x18\x01 \x03(\x0b\x32\x1f.extensions.ExtensionDescriptor\"\x1e\n\x1cUnregisterExtensionsResponse\")\n\x14ListExtensionsFilter\x12\x11\n\textension\x18\x01 \x03(\t\"I\n\x15ListExtensionsRequest\x12\x30\n\x06\x66ilter\x18\x01 \x01(\x0b\x32 .extensions.ListExtensionsFilter\"M\n\x16ListExtensionsResponse\x12\x33\n\nextensions\x18\x01 \x03(\x0b\x32\x1f.extensions.ExtensionDescriptor\"\xf5\x01\n\x0fSpaceExtensions\x12\x12\n\textension\x18\x90N \x01(\t\x12\x0e\n\x05title\x18\x9aN \x01(\t\x12\x10\n\x07version\x18\xf4N \x01(\t\x12\r\n\x04\x64\x65ps\x18\xd8O \x03(\t\x12\x31\n\x05state\x18\xbcP \x01(\x0e\x32!.extensions.SpaceExtensions.State\x12\x15\n\x0cstatus_error\x18\xa0Q \x01(\t\x12\x13\n\nstatus_msg\x18\x84R \x01(\t\">\n\x05State\x12\x0b\n\x07PENDING\x10\x00\x12\r\n\tINSTALLED\x10\x01\x12\x0f\n\x0bIN_PROGRESS\x10\x02\x12\x08\n\x04\x46\x41IL\x10\x03\x32\xc1\x02\n\x10\x45xtensionManager\x12\x65\n\x12RegisterExtensions\x12%.extensions.RegisterExtensionsRequest\x1a&.extensions.RegisterExtensionsResponse\"\x00\x12k\n\x14UnregisterExtensions\x12\'.extensions.UnregisterExtensionsRequest\x1a(.extensions.UnregisterExtensionsResponse\"\x00\x12Y\n\x0eListExtensions\x12!.extensions.ListExtensionsRequest\x1a\".extensions.ListExtensionsResponse\"\x00\x42:Z8git.perx.ru/perxis/perxis-go/proto/extensions;extensionsb\x06proto3')
-
-
-
-_EXTENSIONDESCRIPTOR = DESCRIPTOR.message_types_by_name['ExtensionDescriptor']
-_EXTENSIONDESCRIPTOR_METADATAENTRY = _EXTENSIONDESCRIPTOR.nested_types_by_name['MetadataEntry']
-_REGISTEREXTENSIONSREQUEST = DESCRIPTOR.message_types_by_name['RegisterExtensionsRequest']
-_REGISTEREXTENSIONSRESPONSE = DESCRIPTOR.message_types_by_name['RegisterExtensionsResponse']
-_UNREGISTEREXTENSIONSREQUEST = DESCRIPTOR.message_types_by_name['UnregisterExtensionsRequest']
-_UNREGISTEREXTENSIONSRESPONSE = DESCRIPTOR.message_types_by_name['UnregisterExtensionsResponse']
-_LISTEXTENSIONSFILTER = DESCRIPTOR.message_types_by_name['ListExtensionsFilter']
-_LISTEXTENSIONSREQUEST = DESCRIPTOR.message_types_by_name['ListExtensionsRequest']
-_LISTEXTENSIONSRESPONSE = DESCRIPTOR.message_types_by_name['ListExtensionsResponse']
-_SPACEEXTENSIONS = DESCRIPTOR.message_types_by_name['SpaceExtensions']
-_SPACEEXTENSIONS_STATE = _SPACEEXTENSIONS.enum_types_by_name['State']
-ExtensionDescriptor = _reflection.GeneratedProtocolMessageType('ExtensionDescriptor', (_message.Message,), {
-
-  'MetadataEntry' : _reflection.GeneratedProtocolMessageType('MetadataEntry', (_message.Message,), {
-    'DESCRIPTOR' : _EXTENSIONDESCRIPTOR_METADATAENTRY,
-    '__module__' : 'extensions.manager_pb2'
-    # @@protoc_insertion_point(class_scope:extensions.ExtensionDescriptor.MetadataEntry)
-    })
-  ,
-  'DESCRIPTOR' : _EXTENSIONDESCRIPTOR,
-  '__module__' : 'extensions.manager_pb2'
-  # @@protoc_insertion_point(class_scope:extensions.ExtensionDescriptor)
-  })
-_sym_db.RegisterMessage(ExtensionDescriptor)
-_sym_db.RegisterMessage(ExtensionDescriptor.MetadataEntry)
-
-RegisterExtensionsRequest = _reflection.GeneratedProtocolMessageType('RegisterExtensionsRequest', (_message.Message,), {
-  'DESCRIPTOR' : _REGISTEREXTENSIONSREQUEST,
-  '__module__' : 'extensions.manager_pb2'
-  # @@protoc_insertion_point(class_scope:extensions.RegisterExtensionsRequest)
-  })
-_sym_db.RegisterMessage(RegisterExtensionsRequest)
-
-RegisterExtensionsResponse = _reflection.GeneratedProtocolMessageType('RegisterExtensionsResponse', (_message.Message,), {
-  'DESCRIPTOR' : _REGISTEREXTENSIONSRESPONSE,
-  '__module__' : 'extensions.manager_pb2'
-  # @@protoc_insertion_point(class_scope:extensions.RegisterExtensionsResponse)
-  })
-_sym_db.RegisterMessage(RegisterExtensionsResponse)
-
-UnregisterExtensionsRequest = _reflection.GeneratedProtocolMessageType('UnregisterExtensionsRequest', (_message.Message,), {
-  'DESCRIPTOR' : _UNREGISTEREXTENSIONSREQUEST,
-  '__module__' : 'extensions.manager_pb2'
-  # @@protoc_insertion_point(class_scope:extensions.UnregisterExtensionsRequest)
-  })
-_sym_db.RegisterMessage(UnregisterExtensionsRequest)
-
-UnregisterExtensionsResponse = _reflection.GeneratedProtocolMessageType('UnregisterExtensionsResponse', (_message.Message,), {
-  'DESCRIPTOR' : _UNREGISTEREXTENSIONSRESPONSE,
-  '__module__' : 'extensions.manager_pb2'
-  # @@protoc_insertion_point(class_scope:extensions.UnregisterExtensionsResponse)
-  })
-_sym_db.RegisterMessage(UnregisterExtensionsResponse)
-
-ListExtensionsFilter = _reflection.GeneratedProtocolMessageType('ListExtensionsFilter', (_message.Message,), {
-  'DESCRIPTOR' : _LISTEXTENSIONSFILTER,
-  '__module__' : 'extensions.manager_pb2'
-  # @@protoc_insertion_point(class_scope:extensions.ListExtensionsFilter)
-  })
-_sym_db.RegisterMessage(ListExtensionsFilter)
-
-ListExtensionsRequest = _reflection.GeneratedProtocolMessageType('ListExtensionsRequest', (_message.Message,), {
-  'DESCRIPTOR' : _LISTEXTENSIONSREQUEST,
-  '__module__' : 'extensions.manager_pb2'
-  # @@protoc_insertion_point(class_scope:extensions.ListExtensionsRequest)
-  })
-_sym_db.RegisterMessage(ListExtensionsRequest)
-
-ListExtensionsResponse = _reflection.GeneratedProtocolMessageType('ListExtensionsResponse', (_message.Message,), {
-  'DESCRIPTOR' : _LISTEXTENSIONSRESPONSE,
-  '__module__' : 'extensions.manager_pb2'
-  # @@protoc_insertion_point(class_scope:extensions.ListExtensionsResponse)
-  })
-_sym_db.RegisterMessage(ListExtensionsResponse)
-
-SpaceExtensions = _reflection.GeneratedProtocolMessageType('SpaceExtensions', (_message.Message,), {
-  'DESCRIPTOR' : _SPACEEXTENSIONS,
-  '__module__' : 'extensions.manager_pb2'
-  # @@protoc_insertion_point(class_scope:extensions.SpaceExtensions)
-  })
-_sym_db.RegisterMessage(SpaceExtensions)
-
-_EXTENSIONMANAGER = DESCRIPTOR.services_by_name['ExtensionManager']
-if _descriptor._USE_C_DESCRIPTORS == False:
-
-  DESCRIPTOR._options = None
-  DESCRIPTOR._serialized_options = b'Z8git.perx.ru/perxis/perxis-go/proto/extensions;extensions'
-  _EXTENSIONDESCRIPTOR_METADATAENTRY._options = None
-  _EXTENSIONDESCRIPTOR_METADATAENTRY._serialized_options = b'8\001'
-  _EXTENSIONDESCRIPTOR._serialized_start=41
-  _EXTENSIONDESCRIPTOR._serialized_end=310
-  _EXTENSIONDESCRIPTOR_METADATAENTRY._serialized_start=263
-  _EXTENSIONDESCRIPTOR_METADATAENTRY._serialized_end=310
-  _REGISTEREXTENSIONSREQUEST._serialized_start=312
-  _REGISTEREXTENSIONSREQUEST._serialized_end=392
-  _REGISTEREXTENSIONSRESPONSE._serialized_start=394
-  _REGISTEREXTENSIONSRESPONSE._serialized_end=422
-  _UNREGISTEREXTENSIONSREQUEST._serialized_start=424
-  _UNREGISTEREXTENSIONSREQUEST._serialized_end=506
-  _UNREGISTEREXTENSIONSRESPONSE._serialized_start=508
-  _UNREGISTEREXTENSIONSRESPONSE._serialized_end=538
-  _LISTEXTENSIONSFILTER._serialized_start=540
-  _LISTEXTENSIONSFILTER._serialized_end=581
-  _LISTEXTENSIONSREQUEST._serialized_start=583
-  _LISTEXTENSIONSREQUEST._serialized_end=656
-  _LISTEXTENSIONSRESPONSE._serialized_start=658
-  _LISTEXTENSIONSRESPONSE._serialized_end=735
-  _SPACEEXTENSIONS._serialized_start=738
-  _SPACEEXTENSIONS._serialized_end=983
-  _SPACEEXTENSIONS_STATE._serialized_start=921
-  _SPACEEXTENSIONS_STATE._serialized_end=983
-  _EXTENSIONMANAGER._serialized_start=986
-  _EXTENSIONMANAGER._serialized_end=1307
-# @@protoc_insertion_point(module_scope)
diff --git a/clients/files/files_pb2.py b/clients/files/files_pb2.py
deleted file mode 100644
index 28ecd0a5b2ffc76dfd1b2ac9cca869b1154eddb2..0000000000000000000000000000000000000000
--- a/clients/files/files_pb2.py
+++ /dev/null
@@ -1,209 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by the protocol buffer compiler.  DO NOT EDIT!
-# source: files/files.proto
-"""Generated protocol buffer code."""
-from google.protobuf import descriptor as _descriptor
-from google.protobuf import descriptor_pool as _descriptor_pool
-from google.protobuf import message as _message
-from google.protobuf import reflection as _reflection
-from google.protobuf import symbol_database as _symbol_database
-# @@protoc_insertion_point(imports)
-
-_sym_db = _symbol_database.Default()
-
-
-from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2
-
-
-DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x11\x66iles/files.proto\x12\x05\x66iles\x1a\x1bgoogle/protobuf/empty.proto\"N\n\x04\x46ile\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x0c\n\x04size\x18\x03 \x01(\x05\x12\x11\n\tmime_type\x18\x04 \x01(\t\x12\x0b\n\x03url\x18\x05 \x01(\t\"\x8a\x01\n\x0fMultipartUpload\x12\x19\n\x04\x66ile\x18\x01 \x01(\x0b\x32\x0b.files.File\x12\x11\n\tupload_id\x18\x02 \x01(\t\x12\x11\n\tpart_size\x18\x03 \x01(\x05\x12\x11\n\tpart_urls\x18\x04 \x03(\t\x12#\n\x05parts\x18\x05 \x03(\x0b\x32\x14.files.CompletedPart\"7\n\x06Upload\x12\x19\n\x04\x66ile\x18\x01 \x01(\x0b\x32\x0b.files.File\x12\x12\n\nupload_url\x18\x02 \x01(\t\"+\n\rCompletedPart\x12\x0e\n\x06number\x18\x01 \x01(\x05\x12\n\n\x02id\x18\x02 \x01(\t\"<\n\x12StartUploadRequest\x12&\n\x06upload\x18\x01 \x01(\x0b\x32\x16.files.MultipartUpload\"=\n\x13StartUploadResponse\x12&\n\x06upload\x18\x01 \x01(\x0b\x32\x16.files.MultipartUpload\"?\n\x15\x43ompleteUploadRequest\x12&\n\x06upload\x18\x01 \x01(\x0b\x32\x16.files.MultipartUpload\"@\n\x16\x43ompleteUploadResponse\x12&\n\x06upload\x18\x01 \x01(\x0b\x32\x16.files.MultipartUpload\"<\n\x12\x41\x62ortUploadRequest\x12&\n\x06upload\x18\x01 \x01(\x0b\x32\x16.files.MultipartUpload\"\x15\n\x13\x41\x62ortUploadResponse\";\n\x11MoveUploadRequest\x12&\n\x06upload\x18\x01 \x01(\x0b\x32\x16.files.MultipartUpload\"/\n\x12MoveUploadResponse\x12\x19\n\x04\x66ile\x18\x01 \x01(\x0b\x32\x0b.files.File\"*\n\rUploadRequest\x12\x19\n\x04\x66ile\x18\x01 \x01(\x0b\x32\x0b.files.File\"/\n\x0eUploadResponse\x12\x1d\n\x06upload\x18\x01 \x01(\x0b\x32\r.files.Upload\"\x1c\n\x0eGetFileRequest\x12\n\n\x02id\x18\x01 \x01(\t\",\n\x0fGetFileResponse\x12\x19\n\x04\x66ile\x18\x01 \x01(\x0b\x32\x0b.files.File\".\n\x11\x44\x65leteFileRequest\x12\x19\n\x04\x66ile\x18\x01 \x01(\x0b\x32\x0b.files.File\"\x14\n\x12\x44\x65leteFileResponse2\xe0\x03\n\x05\x46iles\x12\x46\n\x0bStartUpload\x12\x19.files.StartUploadRequest\x1a\x1a.files.StartUploadResponse\"\x00\x12O\n\x0e\x43ompleteUpload\x12\x1c.files.CompleteUploadRequest\x1a\x1d.files.CompleteUploadResponse\"\x00\x12\x42\n\x0b\x41\x62ortUpload\x12\x19.files.AbortUploadRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x43\n\nMoveUpload\x12\x18.files.MoveUploadRequest\x1a\x19.files.MoveUploadResponse\"\x00\x12\x37\n\x06Upload\x12\x14.files.UploadRequest\x1a\x15.files.UploadResponse\"\x00\x12:\n\x07GetFile\x12\x15.files.GetFileRequest\x1a\x16.files.GetFileResponse\"\x00\x12@\n\nDeleteFile\x12\x18.files.DeleteFileRequest\x1a\x16.google.protobuf.Empty\"\x00\x42\x30Z.git.perx.ru/perxis/perxis-go/proto/files;filesb\x06proto3')
-
-
-
-_FILE = DESCRIPTOR.message_types_by_name['File']
-_MULTIPARTUPLOAD = DESCRIPTOR.message_types_by_name['MultipartUpload']
-_UPLOAD = DESCRIPTOR.message_types_by_name['Upload']
-_COMPLETEDPART = DESCRIPTOR.message_types_by_name['CompletedPart']
-_STARTUPLOADREQUEST = DESCRIPTOR.message_types_by_name['StartUploadRequest']
-_STARTUPLOADRESPONSE = DESCRIPTOR.message_types_by_name['StartUploadResponse']
-_COMPLETEUPLOADREQUEST = DESCRIPTOR.message_types_by_name['CompleteUploadRequest']
-_COMPLETEUPLOADRESPONSE = DESCRIPTOR.message_types_by_name['CompleteUploadResponse']
-_ABORTUPLOADREQUEST = DESCRIPTOR.message_types_by_name['AbortUploadRequest']
-_ABORTUPLOADRESPONSE = DESCRIPTOR.message_types_by_name['AbortUploadResponse']
-_MOVEUPLOADREQUEST = DESCRIPTOR.message_types_by_name['MoveUploadRequest']
-_MOVEUPLOADRESPONSE = DESCRIPTOR.message_types_by_name['MoveUploadResponse']
-_UPLOADREQUEST = DESCRIPTOR.message_types_by_name['UploadRequest']
-_UPLOADRESPONSE = DESCRIPTOR.message_types_by_name['UploadResponse']
-_GETFILEREQUEST = DESCRIPTOR.message_types_by_name['GetFileRequest']
-_GETFILERESPONSE = DESCRIPTOR.message_types_by_name['GetFileResponse']
-_DELETEFILEREQUEST = DESCRIPTOR.message_types_by_name['DeleteFileRequest']
-_DELETEFILERESPONSE = DESCRIPTOR.message_types_by_name['DeleteFileResponse']
-File = _reflection.GeneratedProtocolMessageType('File', (_message.Message,), {
-  'DESCRIPTOR' : _FILE,
-  '__module__' : 'files.files_pb2'
-  # @@protoc_insertion_point(class_scope:files.File)
-  })
-_sym_db.RegisterMessage(File)
-
-MultipartUpload = _reflection.GeneratedProtocolMessageType('MultipartUpload', (_message.Message,), {
-  'DESCRIPTOR' : _MULTIPARTUPLOAD,
-  '__module__' : 'files.files_pb2'
-  # @@protoc_insertion_point(class_scope:files.MultipartUpload)
-  })
-_sym_db.RegisterMessage(MultipartUpload)
-
-Upload = _reflection.GeneratedProtocolMessageType('Upload', (_message.Message,), {
-  'DESCRIPTOR' : _UPLOAD,
-  '__module__' : 'files.files_pb2'
-  # @@protoc_insertion_point(class_scope:files.Upload)
-  })
-_sym_db.RegisterMessage(Upload)
-
-CompletedPart = _reflection.GeneratedProtocolMessageType('CompletedPart', (_message.Message,), {
-  'DESCRIPTOR' : _COMPLETEDPART,
-  '__module__' : 'files.files_pb2'
-  # @@protoc_insertion_point(class_scope:files.CompletedPart)
-  })
-_sym_db.RegisterMessage(CompletedPart)
-
-StartUploadRequest = _reflection.GeneratedProtocolMessageType('StartUploadRequest', (_message.Message,), {
-  'DESCRIPTOR' : _STARTUPLOADREQUEST,
-  '__module__' : 'files.files_pb2'
-  # @@protoc_insertion_point(class_scope:files.StartUploadRequest)
-  })
-_sym_db.RegisterMessage(StartUploadRequest)
-
-StartUploadResponse = _reflection.GeneratedProtocolMessageType('StartUploadResponse', (_message.Message,), {
-  'DESCRIPTOR' : _STARTUPLOADRESPONSE,
-  '__module__' : 'files.files_pb2'
-  # @@protoc_insertion_point(class_scope:files.StartUploadResponse)
-  })
-_sym_db.RegisterMessage(StartUploadResponse)
-
-CompleteUploadRequest = _reflection.GeneratedProtocolMessageType('CompleteUploadRequest', (_message.Message,), {
-  'DESCRIPTOR' : _COMPLETEUPLOADREQUEST,
-  '__module__' : 'files.files_pb2'
-  # @@protoc_insertion_point(class_scope:files.CompleteUploadRequest)
-  })
-_sym_db.RegisterMessage(CompleteUploadRequest)
-
-CompleteUploadResponse = _reflection.GeneratedProtocolMessageType('CompleteUploadResponse', (_message.Message,), {
-  'DESCRIPTOR' : _COMPLETEUPLOADRESPONSE,
-  '__module__' : 'files.files_pb2'
-  # @@protoc_insertion_point(class_scope:files.CompleteUploadResponse)
-  })
-_sym_db.RegisterMessage(CompleteUploadResponse)
-
-AbortUploadRequest = _reflection.GeneratedProtocolMessageType('AbortUploadRequest', (_message.Message,), {
-  'DESCRIPTOR' : _ABORTUPLOADREQUEST,
-  '__module__' : 'files.files_pb2'
-  # @@protoc_insertion_point(class_scope:files.AbortUploadRequest)
-  })
-_sym_db.RegisterMessage(AbortUploadRequest)
-
-AbortUploadResponse = _reflection.GeneratedProtocolMessageType('AbortUploadResponse', (_message.Message,), {
-  'DESCRIPTOR' : _ABORTUPLOADRESPONSE,
-  '__module__' : 'files.files_pb2'
-  # @@protoc_insertion_point(class_scope:files.AbortUploadResponse)
-  })
-_sym_db.RegisterMessage(AbortUploadResponse)
-
-MoveUploadRequest = _reflection.GeneratedProtocolMessageType('MoveUploadRequest', (_message.Message,), {
-  'DESCRIPTOR' : _MOVEUPLOADREQUEST,
-  '__module__' : 'files.files_pb2'
-  # @@protoc_insertion_point(class_scope:files.MoveUploadRequest)
-  })
-_sym_db.RegisterMessage(MoveUploadRequest)
-
-MoveUploadResponse = _reflection.GeneratedProtocolMessageType('MoveUploadResponse', (_message.Message,), {
-  'DESCRIPTOR' : _MOVEUPLOADRESPONSE,
-  '__module__' : 'files.files_pb2'
-  # @@protoc_insertion_point(class_scope:files.MoveUploadResponse)
-  })
-_sym_db.RegisterMessage(MoveUploadResponse)
-
-UploadRequest = _reflection.GeneratedProtocolMessageType('UploadRequest', (_message.Message,), {
-  'DESCRIPTOR' : _UPLOADREQUEST,
-  '__module__' : 'files.files_pb2'
-  # @@protoc_insertion_point(class_scope:files.UploadRequest)
-  })
-_sym_db.RegisterMessage(UploadRequest)
-
-UploadResponse = _reflection.GeneratedProtocolMessageType('UploadResponse', (_message.Message,), {
-  'DESCRIPTOR' : _UPLOADRESPONSE,
-  '__module__' : 'files.files_pb2'
-  # @@protoc_insertion_point(class_scope:files.UploadResponse)
-  })
-_sym_db.RegisterMessage(UploadResponse)
-
-GetFileRequest = _reflection.GeneratedProtocolMessageType('GetFileRequest', (_message.Message,), {
-  'DESCRIPTOR' : _GETFILEREQUEST,
-  '__module__' : 'files.files_pb2'
-  # @@protoc_insertion_point(class_scope:files.GetFileRequest)
-  })
-_sym_db.RegisterMessage(GetFileRequest)
-
-GetFileResponse = _reflection.GeneratedProtocolMessageType('GetFileResponse', (_message.Message,), {
-  'DESCRIPTOR' : _GETFILERESPONSE,
-  '__module__' : 'files.files_pb2'
-  # @@protoc_insertion_point(class_scope:files.GetFileResponse)
-  })
-_sym_db.RegisterMessage(GetFileResponse)
-
-DeleteFileRequest = _reflection.GeneratedProtocolMessageType('DeleteFileRequest', (_message.Message,), {
-  'DESCRIPTOR' : _DELETEFILEREQUEST,
-  '__module__' : 'files.files_pb2'
-  # @@protoc_insertion_point(class_scope:files.DeleteFileRequest)
-  })
-_sym_db.RegisterMessage(DeleteFileRequest)
-
-DeleteFileResponse = _reflection.GeneratedProtocolMessageType('DeleteFileResponse', (_message.Message,), {
-  'DESCRIPTOR' : _DELETEFILERESPONSE,
-  '__module__' : 'files.files_pb2'
-  # @@protoc_insertion_point(class_scope:files.DeleteFileResponse)
-  })
-_sym_db.RegisterMessage(DeleteFileResponse)
-
-_FILES = DESCRIPTOR.services_by_name['Files']
-if _descriptor._USE_C_DESCRIPTORS == False:
-
-  DESCRIPTOR._options = None
-  DESCRIPTOR._serialized_options = b'Z.git.perx.ru/perxis/perxis-go/proto/files;files'
-  _FILE._serialized_start=57
-  _FILE._serialized_end=135
-  _MULTIPARTUPLOAD._serialized_start=138
-  _MULTIPARTUPLOAD._serialized_end=276
-  _UPLOAD._serialized_start=278
-  _UPLOAD._serialized_end=333
-  _COMPLETEDPART._serialized_start=335
-  _COMPLETEDPART._serialized_end=378
-  _STARTUPLOADREQUEST._serialized_start=380
-  _STARTUPLOADREQUEST._serialized_end=440
-  _STARTUPLOADRESPONSE._serialized_start=442
-  _STARTUPLOADRESPONSE._serialized_end=503
-  _COMPLETEUPLOADREQUEST._serialized_start=505
-  _COMPLETEUPLOADREQUEST._serialized_end=568
-  _COMPLETEUPLOADRESPONSE._serialized_start=570
-  _COMPLETEUPLOADRESPONSE._serialized_end=634
-  _ABORTUPLOADREQUEST._serialized_start=636
-  _ABORTUPLOADREQUEST._serialized_end=696
-  _ABORTUPLOADRESPONSE._serialized_start=698
-  _ABORTUPLOADRESPONSE._serialized_end=719
-  _MOVEUPLOADREQUEST._serialized_start=721
-  _MOVEUPLOADREQUEST._serialized_end=780
-  _MOVEUPLOADRESPONSE._serialized_start=782
-  _MOVEUPLOADRESPONSE._serialized_end=829
-  _UPLOADREQUEST._serialized_start=831
-  _UPLOADREQUEST._serialized_end=873
-  _UPLOADRESPONSE._serialized_start=875
-  _UPLOADRESPONSE._serialized_end=922
-  _GETFILEREQUEST._serialized_start=924
-  _GETFILEREQUEST._serialized_end=952
-  _GETFILERESPONSE._serialized_start=954
-  _GETFILERESPONSE._serialized_end=998
-  _DELETEFILEREQUEST._serialized_start=1000
-  _DELETEFILEREQUEST._serialized_end=1046
-  _DELETEFILERESPONSE._serialized_start=1048
-  _DELETEFILERESPONSE._serialized_end=1068
-  _FILES._serialized_start=1071
-  _FILES._serialized_end=1551
-# @@protoc_insertion_point(module_scope)
diff --git a/clients/invitations/invitations_pb2.py b/clients/invitations/invitations_pb2.py
deleted file mode 100644
index ae7411e5dfea0a905480ed74133d0b76a2f564ff..0000000000000000000000000000000000000000
--- a/clients/invitations/invitations_pb2.py
+++ /dev/null
@@ -1,181 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by the protocol buffer compiler.  DO NOT EDIT!
-# source: invitations/invitations.proto
-"""Generated protocol buffer code."""
-from google.protobuf import descriptor as _descriptor
-from google.protobuf import descriptor_pool as _descriptor_pool
-from google.protobuf import message as _message
-from google.protobuf import reflection as _reflection
-from google.protobuf import symbol_database as _symbol_database
-# @@protoc_insertion_point(imports)
-
-_sym_db = _symbol_database.Default()
-
-
-from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2
-from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2
-from google.protobuf import wrappers_pb2 as google_dot_protobuf_dot_wrappers__pb2
-
-
-DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1dinvitations/invitations.proto\x12\x13\x63ontent.invitations\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1egoogle/protobuf/wrappers.proto\"\xca\x01\n\nInvitation\x12\n\n\x02id\x18\x01 \x01(\t\x12\r\n\x05\x65mail\x18\x02 \x01(\t\x12\x0e\n\x06org_id\x18\x03 \x01(\t\x12\x10\n\x08space_id\x18\x04 \x01(\t\x12\x10\n\x08owner_id\x18\x05 \x01(\t\x12\x0c\n\x04role\x18\x06 \x01(\t\x12.\n\ncreated_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12/\n\x0bvalid_until\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\"e\n\x06\x46ilter\x12\n\n\x02id\x18\x01 \x03(\t\x12\r\n\x05\x65mail\x18\x02 \x03(\t\x12\x0e\n\x06org_id\x18\x03 \x03(\t\x12\x10\n\x08space_id\x18\x04 \x03(\t\x12\x10\n\x08owner_id\x18\x05 \x03(\t\x12\x0c\n\x04role\x18\x06 \x03(\t\"@\n\x0b\x46indOptions\x12\x0c\n\x04sort\x18\x01 \x03(\t\x12\x10\n\x08page_num\x18\x02 \x01(\x05\x12\x11\n\tpage_size\x18\x03 \x01(\x05\"D\n\rCreateRequest\x12\x33\n\ninvitation\x18\x01 \x01(\x0b\x32\x1f.content.invitations.Invitation\"E\n\x0e\x43reateResponse\x12\x33\n\ninvitation\x18\x01 \x01(\x0b\x32\x1f.content.invitations.Invitation\"#\n\nGetRequest\x12\x15\n\rinvitation_id\x18\x01 \x01(\t\"B\n\x0bGetResponse\x12\x33\n\ninvitation\x18\x01 \x01(\x0b\x32\x1f.content.invitations.Invitation\"\xdb\x01\n\rUpdateRequest\x12\x15\n\rinvitation_id\x18\x01 \x01(\t\x12(\n\x04sent\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12+\n\x07pending\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12+\n\x07sent_at\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12/\n\x0bvalid_until\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\"\x1a\n\x18UpdateInvitationResponse\"7\n\rAcceptRequest\x12\x15\n\rinvitation_id\x18\x01 \x01(\t\x12\x0f\n\x07user_id\x18\x02 \x01(\t\"\x1a\n\x18\x41\x63\x63\x65ptInvitationResponse\"j\n\x0b\x46indRequest\x12+\n\x06\x66ilter\x18\x01 \x01(\x0b\x32\x1b.content.invitations.Filter\x12.\n\x04opts\x18\x02 \x01(\x0b\x32 .content.invitations.FindOptions\"S\n\x0c\x46indResponse\x12\x34\n\x0binvitations\x18\x01 \x03(\x0b\x32\x1f.content.invitations.Invitation\x12\r\n\x05total\x18\x02 \x01(\x03\"&\n\rDeleteRequest\x12\x15\n\rinvitation_id\x18\x01 \x01(\t\"\x1f\n\x1d\x44\x65leteSpaceInvitationResponse2\x8d\x03\n\x0bInvitations\x12S\n\x06\x43reate\x12\".content.invitations.CreateRequest\x1a#.content.invitations.CreateResponse\"\x00\x12J\n\x03Get\x12\x1f.content.invitations.GetRequest\x1a .content.invitations.GetResponse\"\x00\x12\x46\n\x06\x41\x63\x63\x65pt\x12\".content.invitations.AcceptRequest\x1a\x16.google.protobuf.Empty\"\x00\x12M\n\x04\x46ind\x12 .content.invitations.FindRequest\x1a!.content.invitations.FindResponse\"\x00\x12\x46\n\x06\x44\x65lete\x12\".content.invitations.DeleteRequest\x1a\x16.google.protobuf.Empty\"\x00\x42<Z:git.perx.ru/perxis/perxis-go/proto/invitations;invitationsb\x06proto3')
-
-
-
-_INVITATION = DESCRIPTOR.message_types_by_name['Invitation']
-_FILTER = DESCRIPTOR.message_types_by_name['Filter']
-_FINDOPTIONS = DESCRIPTOR.message_types_by_name['FindOptions']
-_CREATEREQUEST = DESCRIPTOR.message_types_by_name['CreateRequest']
-_CREATERESPONSE = DESCRIPTOR.message_types_by_name['CreateResponse']
-_GETREQUEST = DESCRIPTOR.message_types_by_name['GetRequest']
-_GETRESPONSE = DESCRIPTOR.message_types_by_name['GetResponse']
-_UPDATEREQUEST = DESCRIPTOR.message_types_by_name['UpdateRequest']
-_UPDATEINVITATIONRESPONSE = DESCRIPTOR.message_types_by_name['UpdateInvitationResponse']
-_ACCEPTREQUEST = DESCRIPTOR.message_types_by_name['AcceptRequest']
-_ACCEPTINVITATIONRESPONSE = DESCRIPTOR.message_types_by_name['AcceptInvitationResponse']
-_FINDREQUEST = DESCRIPTOR.message_types_by_name['FindRequest']
-_FINDRESPONSE = DESCRIPTOR.message_types_by_name['FindResponse']
-_DELETEREQUEST = DESCRIPTOR.message_types_by_name['DeleteRequest']
-_DELETESPACEINVITATIONRESPONSE = DESCRIPTOR.message_types_by_name['DeleteSpaceInvitationResponse']
-Invitation = _reflection.GeneratedProtocolMessageType('Invitation', (_message.Message,), {
-  'DESCRIPTOR' : _INVITATION,
-  '__module__' : 'invitations.invitations_pb2'
-  # @@protoc_insertion_point(class_scope:content.invitations.Invitation)
-  })
-_sym_db.RegisterMessage(Invitation)
-
-Filter = _reflection.GeneratedProtocolMessageType('Filter', (_message.Message,), {
-  'DESCRIPTOR' : _FILTER,
-  '__module__' : 'invitations.invitations_pb2'
-  # @@protoc_insertion_point(class_scope:content.invitations.Filter)
-  })
-_sym_db.RegisterMessage(Filter)
-
-FindOptions = _reflection.GeneratedProtocolMessageType('FindOptions', (_message.Message,), {
-  'DESCRIPTOR' : _FINDOPTIONS,
-  '__module__' : 'invitations.invitations_pb2'
-  # @@protoc_insertion_point(class_scope:content.invitations.FindOptions)
-  })
-_sym_db.RegisterMessage(FindOptions)
-
-CreateRequest = _reflection.GeneratedProtocolMessageType('CreateRequest', (_message.Message,), {
-  'DESCRIPTOR' : _CREATEREQUEST,
-  '__module__' : 'invitations.invitations_pb2'
-  # @@protoc_insertion_point(class_scope:content.invitations.CreateRequest)
-  })
-_sym_db.RegisterMessage(CreateRequest)
-
-CreateResponse = _reflection.GeneratedProtocolMessageType('CreateResponse', (_message.Message,), {
-  'DESCRIPTOR' : _CREATERESPONSE,
-  '__module__' : 'invitations.invitations_pb2'
-  # @@protoc_insertion_point(class_scope:content.invitations.CreateResponse)
-  })
-_sym_db.RegisterMessage(CreateResponse)
-
-GetRequest = _reflection.GeneratedProtocolMessageType('GetRequest', (_message.Message,), {
-  'DESCRIPTOR' : _GETREQUEST,
-  '__module__' : 'invitations.invitations_pb2'
-  # @@protoc_insertion_point(class_scope:content.invitations.GetRequest)
-  })
-_sym_db.RegisterMessage(GetRequest)
-
-GetResponse = _reflection.GeneratedProtocolMessageType('GetResponse', (_message.Message,), {
-  'DESCRIPTOR' : _GETRESPONSE,
-  '__module__' : 'invitations.invitations_pb2'
-  # @@protoc_insertion_point(class_scope:content.invitations.GetResponse)
-  })
-_sym_db.RegisterMessage(GetResponse)
-
-UpdateRequest = _reflection.GeneratedProtocolMessageType('UpdateRequest', (_message.Message,), {
-  'DESCRIPTOR' : _UPDATEREQUEST,
-  '__module__' : 'invitations.invitations_pb2'
-  # @@protoc_insertion_point(class_scope:content.invitations.UpdateRequest)
-  })
-_sym_db.RegisterMessage(UpdateRequest)
-
-UpdateInvitationResponse = _reflection.GeneratedProtocolMessageType('UpdateInvitationResponse', (_message.Message,), {
-  'DESCRIPTOR' : _UPDATEINVITATIONRESPONSE,
-  '__module__' : 'invitations.invitations_pb2'
-  # @@protoc_insertion_point(class_scope:content.invitations.UpdateInvitationResponse)
-  })
-_sym_db.RegisterMessage(UpdateInvitationResponse)
-
-AcceptRequest = _reflection.GeneratedProtocolMessageType('AcceptRequest', (_message.Message,), {
-  'DESCRIPTOR' : _ACCEPTREQUEST,
-  '__module__' : 'invitations.invitations_pb2'
-  # @@protoc_insertion_point(class_scope:content.invitations.AcceptRequest)
-  })
-_sym_db.RegisterMessage(AcceptRequest)
-
-AcceptInvitationResponse = _reflection.GeneratedProtocolMessageType('AcceptInvitationResponse', (_message.Message,), {
-  'DESCRIPTOR' : _ACCEPTINVITATIONRESPONSE,
-  '__module__' : 'invitations.invitations_pb2'
-  # @@protoc_insertion_point(class_scope:content.invitations.AcceptInvitationResponse)
-  })
-_sym_db.RegisterMessage(AcceptInvitationResponse)
-
-FindRequest = _reflection.GeneratedProtocolMessageType('FindRequest', (_message.Message,), {
-  'DESCRIPTOR' : _FINDREQUEST,
-  '__module__' : 'invitations.invitations_pb2'
-  # @@protoc_insertion_point(class_scope:content.invitations.FindRequest)
-  })
-_sym_db.RegisterMessage(FindRequest)
-
-FindResponse = _reflection.GeneratedProtocolMessageType('FindResponse', (_message.Message,), {
-  'DESCRIPTOR' : _FINDRESPONSE,
-  '__module__' : 'invitations.invitations_pb2'
-  # @@protoc_insertion_point(class_scope:content.invitations.FindResponse)
-  })
-_sym_db.RegisterMessage(FindResponse)
-
-DeleteRequest = _reflection.GeneratedProtocolMessageType('DeleteRequest', (_message.Message,), {
-  'DESCRIPTOR' : _DELETEREQUEST,
-  '__module__' : 'invitations.invitations_pb2'
-  # @@protoc_insertion_point(class_scope:content.invitations.DeleteRequest)
-  })
-_sym_db.RegisterMessage(DeleteRequest)
-
-DeleteSpaceInvitationResponse = _reflection.GeneratedProtocolMessageType('DeleteSpaceInvitationResponse', (_message.Message,), {
-  'DESCRIPTOR' : _DELETESPACEINVITATIONRESPONSE,
-  '__module__' : 'invitations.invitations_pb2'
-  # @@protoc_insertion_point(class_scope:content.invitations.DeleteSpaceInvitationResponse)
-  })
-_sym_db.RegisterMessage(DeleteSpaceInvitationResponse)
-
-_INVITATIONS = DESCRIPTOR.services_by_name['Invitations']
-if _descriptor._USE_C_DESCRIPTORS == False:
-
-  DESCRIPTOR._options = None
-  DESCRIPTOR._serialized_options = b'Z:git.perx.ru/perxis/perxis-go/proto/invitations;invitations'
-  _INVITATION._serialized_start=149
-  _INVITATION._serialized_end=351
-  _FILTER._serialized_start=353
-  _FILTER._serialized_end=454
-  _FINDOPTIONS._serialized_start=456
-  _FINDOPTIONS._serialized_end=520
-  _CREATEREQUEST._serialized_start=522
-  _CREATEREQUEST._serialized_end=590
-  _CREATERESPONSE._serialized_start=592
-  _CREATERESPONSE._serialized_end=661
-  _GETREQUEST._serialized_start=663
-  _GETREQUEST._serialized_end=698
-  _GETRESPONSE._serialized_start=700
-  _GETRESPONSE._serialized_end=766
-  _UPDATEREQUEST._serialized_start=769
-  _UPDATEREQUEST._serialized_end=988
-  _UPDATEINVITATIONRESPONSE._serialized_start=990
-  _UPDATEINVITATIONRESPONSE._serialized_end=1016
-  _ACCEPTREQUEST._serialized_start=1018
-  _ACCEPTREQUEST._serialized_end=1073
-  _ACCEPTINVITATIONRESPONSE._serialized_start=1075
-  _ACCEPTINVITATIONRESPONSE._serialized_end=1101
-  _FINDREQUEST._serialized_start=1103
-  _FINDREQUEST._serialized_end=1209
-  _FINDRESPONSE._serialized_start=1211
-  _FINDRESPONSE._serialized_end=1294
-  _DELETEREQUEST._serialized_start=1296
-  _DELETEREQUEST._serialized_end=1334
-  _DELETESPACEINVITATIONRESPONSE._serialized_start=1336
-  _DELETESPACEINVITATIONRESPONSE._serialized_end=1367
-  _INVITATIONS._serialized_start=1370
-  _INVITATIONS._serialized_end=1767
-# @@protoc_insertion_point(module_scope)
diff --git a/clients/items/items_pb2.py b/clients/items/items_pb2.py
deleted file mode 100644
index 0078dd557335993642037c09305c9eeeb78e12d4..0000000000000000000000000000000000000000
--- a/clients/items/items_pb2.py
+++ /dev/null
@@ -1,458 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by the protocol buffer compiler.  DO NOT EDIT!
-# source: items/items.proto
-"""Generated protocol buffer code."""
-from google.protobuf import descriptor as _descriptor
-from google.protobuf import descriptor_pool as _descriptor_pool
-from google.protobuf import message as _message
-from google.protobuf import reflection as _reflection
-from google.protobuf import symbol_database as _symbol_database
-# @@protoc_insertion_point(imports)
-
-_sym_db = _symbol_database.Default()
-
-
-from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2
-from common import common_pb2 as common_dot_common__pb2
-from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2
-from google.protobuf import struct_pb2 as google_dot_protobuf_dot_struct__pb2
-
-
-DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x11items/items.proto\x12\rcontent.items\x1a\x1bgoogle/protobuf/empty.proto\x1a\x13\x63ommon/common.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1cgoogle/protobuf/struct.proto\"\'\n\x05\x45rror\x12\x0f\n\x07message\x18\x01 \x01(\t\x12\r\n\x05\x66ield\x18\x02 \x01(\t\"3\n\x0b\x44\x65\x63odeError\x12$\n\x06\x65rrors\x18\x02 \x03(\x0b\x32\x14.content.items.Error\"7\n\x0fValidationError\x12$\n\x06\x65rrors\x18\x02 \x03(\x0b\x32\x14.content.items.Error\"9\n\x11ModificationError\x12$\n\x06\x65rrors\x18\x02 \x03(\x0b\x32\x14.content.items.Error\"g\n\x0bPermissions\x12\x0c\n\x04\x65\x64it\x18\x01 \x01(\x08\x12\x0f\n\x07\x61rchive\x18\x02 \x01(\x08\x12\x0f\n\x07publish\x18\x03 \x01(\x08\x12\x13\n\x0bsoft_delete\x18\x04 \x01(\x08\x12\x13\n\x0bhard_delete\x18\x05 \x01(\x08\"\xb8\x06\n\x04Item\x12\n\n\x02id\x18\x01 \x01(\t\x12\x10\n\x08space_id\x18\x02 \x01(\t\x12\x0e\n\x06\x65nv_id\x18\x03 \x01(\t\x12\x15\n\rcollection_id\x18\x04 \x01(\t\x12(\n\x05state\x18\x05 \x01(\x0e\x32\x19.content.items.Item.State\x12\x32\n\x0e\x63reated_rev_at\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x12\n\ncreated_by\x18\x07 \x01(\t\x12.\n\ncreated_at\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x12\n\nupdated_by\x18\t \x01(\t\x12.\n\nupdated_at\x18\n \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12%\n\x04\x64\x61ta\x18\x0b \x01(\x0b\x32\x17.google.protobuf.Struct\x12;\n\x0ctranslations\x18\x0c \x03(\x0b\x32%.content.items.Item.TranslationsEntry\x12\x13\n\x0brevision_id\x18\r \x01(\t\x12\x30\n\x0cpublished_at\x18\x0e \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x14\n\x0cpublished_by\x18\x0f \x01(\t\x12/\n\x0b\x61rchived_at\x18\x10 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x13\n\x0b\x61rchived_by\x18\x11 \x01(\t\x12\x0e\n\x06locale\x18\x12 \x01(\t\x12\x0f\n\x07\x64\x65leted\x18\x13 \x01(\x08\x12\x0e\n\x06hidden\x18\x14 \x01(\x08\x12\x10\n\x08template\x18\x15 \x01(\x08\x12/\n\x0bpermissions\x18\x16 \x01(\x0b\x32\x1a.content.items.Permissions\x1aL\n\x11TranslationsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12&\n\x05value\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct:\x02\x38\x01\"<\n\x05State\x12\t\n\x05\x44RAFT\x10\x00\x12\r\n\tPUBLISHED\x10\x01\x12\x0b\n\x07\x43HANGED\x10\x02\x12\x0c\n\x08\x41RCHIVED\x10\x03\"=\n\x06\x46ilter\x12\n\n\x02id\x18\x01 \x03(\t\x12\x1c\n\x04\x64\x61ta\x18\x02 \x03(\x0b\x32\x0e.common.Filter\x12\t\n\x01q\x18\x03 \x03(\t\"%\n\rCreateOptions\x12\x14\n\x0cupdate_attrs\x18\x01 \x01(\x08\"x\n\x0b\x46indOptions\x12$\n\x07options\x18\x02 \x01(\x0b\x32\x13.common.FindOptions\x12\x0f\n\x07\x64\x65leted\x18\x03 \x01(\x08\x12\x0f\n\x07regular\x18\x04 \x01(\x08\x12\x0e\n\x06hidden\x18\x05 \x01(\x08\x12\x11\n\ttemplates\x18\x06 \x01(\x08\"%\n\rUpdateOptions\x12\x14\n\x0cupdate_attrs\x18\x01 \x01(\x08\"(\n\x13GetPublishedOptions\x12\x11\n\tlocale_id\x18\x01 \x01(\t\"\x1e\n\rDeleteOptions\x12\r\n\x05\x65rase\x18\x01 \x01(\x08\"&\n\x0ePublishOptions\x12\x14\n\x0cupdate_attrs\x18\x01 \x01(\x08\"\x83\x01\n\x14\x46indPublishedOptions\x12$\n\x07options\x18\x02 \x01(\x0b\x32\x13.common.FindOptions\x12\x11\n\tlocale_id\x18\x03 \x01(\t\x12\x0f\n\x07regular\x18\x04 \x01(\x08\x12\x0e\n\x06hidden\x18\x05 \x01(\x08\x12\x11\n\ttemplates\x18\x06 \x01(\x08\";\n\x13\x46indArchivedOptions\x12$\n\x07options\x18\x02 \x01(\x0b\x32\x13.common.FindOptions\"<\n\x14ListRevisionsOptions\x12$\n\x07options\x18\x02 \x01(\x0b\x32\x13.common.FindOptions\"a\n\rCreateRequest\x12!\n\x04item\x18\x01 \x01(\x0b\x32\x13.content.items.Item\x12-\n\x07options\x18\x02 \x01(\x0b\x32\x1c.content.items.CreateOptions\"6\n\x0e\x43reateResponse\x12$\n\x07\x63reated\x18\x01 \x01(\x0b\x32\x13.content.items.Item\"6\n\x11IntrospectRequest\x12!\n\x04item\x18\x01 \x01(\x0b\x32\x13.content.items.Item\"\x8b\x01\n\x12IntrospectResponse\x12!\n\x04item\x18\x01 \x01(\x0b\x32\x13.content.items.Item\x12\x0e\n\x06schema\x18\x02 \x01(\t\x12\x42\n\x11validation_errors\x18\x03 \x03(\x0b\x32\'.common.Error.BadRequest.FieldViolation\"V\n\nGetRequest\x12\x10\n\x08space_id\x18\x01 \x01(\t\x12\x0e\n\x06\x65nv_id\x18\x02 \x01(\t\x12\x15\n\rcollection_id\x18\x03 \x01(\t\x12\x0f\n\x07item_id\x18\x04 \x01(\t\"0\n\x0bGetResponse\x12!\n\x04item\x18\x01 \x01(\x0b\x32\x13.content.items.Item\"\x9a\x01\n\x0b\x46indRequest\x12\x10\n\x08space_id\x18\x01 \x01(\t\x12\x0e\n\x06\x65nv_id\x18\x02 \x01(\t\x12\x15\n\rcollection_id\x18\x03 \x01(\t\x12%\n\x06\x66ilter\x18\x04 \x01(\x0b\x32\x15.content.items.Filter\x12+\n\x07options\x18\x05 \x01(\x0b\x32\x1a.content.items.FindOptions\"A\n\x0c\x46indResponse\x12\"\n\x05items\x18\x01 \x03(\x0b\x32\x13.content.items.Item\x12\r\n\x05total\x18\x02 \x01(\x05\"a\n\rUpdateRequest\x12!\n\x04item\x18\x01 \x01(\x0b\x32\x13.content.items.Item\x12-\n\x07options\x18\x02 \x01(\x0b\x32\x1c.content.items.UpdateOptions\"\x88\x01\n\rDeleteRequest\x12\x10\n\x08space_id\x18\x01 \x01(\t\x12\x0e\n\x06\x65nv_id\x18\x02 \x01(\t\x12\x15\n\rcollection_id\x18\x03 \x01(\t\x12\x0f\n\x07item_id\x18\x04 \x01(\t\x12-\n\x07options\x18\x05 \x01(\x0b\x32\x1c.content.items.DeleteOptions\"[\n\x0fUndeleteRequest\x12\x10\n\x08space_id\x18\x01 \x01(\t\x12\x0e\n\x06\x65nv_id\x18\x02 \x01(\t\x12\x15\n\rcollection_id\x18\x03 \x01(\t\x12\x0f\n\x07item_id\x18\x04 \x01(\t\"c\n\x0ePublishRequest\x12!\n\x04item\x18\x01 \x01(\x0b\x32\x13.content.items.Item\x12.\n\x07options\x18\x02 \x01(\x0b\x32\x1d.content.items.PublishOptions\"5\n\x10UnpublishRequest\x12!\n\x04item\x18\x01 \x01(\x0b\x32\x13.content.items.Item\"\x94\x01\n\x13GetPublishedRequest\x12\x10\n\x08space_id\x18\x01 \x01(\t\x12\x0e\n\x06\x65nv_id\x18\x02 \x01(\t\x12\x15\n\rcollection_id\x18\x03 \x01(\t\x12\x0f\n\x07item_id\x18\x05 \x01(\t\x12\x33\n\x07options\x18\n \x01(\x0b\x32\".content.items.GetPublishedOptions\"9\n\x14GetPublishedResponse\x12!\n\x04item\x18\x01 \x01(\x0b\x32\x13.content.items.Item\"\xac\x01\n\x14\x46indPublishedRequest\x12\x10\n\x08space_id\x18\x01 \x01(\t\x12\x0e\n\x06\x65nv_id\x18\x02 \x01(\t\x12\x15\n\rcollection_id\x18\x03 \x01(\t\x12%\n\x06\x66ilter\x18\x04 \x01(\x0b\x32\x15.content.items.Filter\x12\x34\n\x07options\x18\n \x01(\x0b\x32#.content.items.FindPublishedOptions\"J\n\x15\x46indPublishedResponse\x12\"\n\x05items\x18\x01 \x03(\x0b\x32\x13.content.items.Item\x12\r\n\x05total\x18\x02 \x01(\x05\"s\n\x12GetRevisionRequest\x12\x10\n\x08space_id\x18\x01 \x01(\t\x12\x0e\n\x06\x65nv_id\x18\x02 \x01(\t\x12\x15\n\rcollection_id\x18\x03 \x01(\t\x12\x0f\n\x07item_id\x18\x04 \x01(\t\x12\x13\n\x0brevision_id\x18\x05 \x01(\t\"8\n\x13GetRevisionResponse\x12!\n\x04item\x18\x01 \x01(\x0b\x32\x13.content.items.Item\"\x96\x01\n\x14ListRevisionsRequest\x12\x10\n\x08space_id\x18\x01 \x01(\t\x12\x0e\n\x06\x65nv_id\x18\x02 \x01(\t\x12\x15\n\rcollection_id\x18\x03 \x01(\t\x12\x0f\n\x07item_id\x18\x04 \x01(\t\x12\x34\n\x07options\x18\n \x01(\x0b\x32#.content.items.ListRevisionsOptions\";\n\x15ListRevisionsResponse\x12\"\n\x05items\x18\x01 \x03(\x0b\x32\x13.content.items.Item\"3\n\x0e\x41rchiveRequest\x12!\n\x04item\x18\x01 \x01(\x0b\x32\x13.content.items.Item\"5\n\x10UnarchiveRequest\x12!\n\x04item\x18\x01 \x01(\x0b\x32\x13.content.items.Item\"\xaa\x01\n\x13\x46indArchivedRequest\x12\x10\n\x08space_id\x18\x01 \x01(\t\x12\x0e\n\x06\x65nv_id\x18\x02 \x01(\t\x12\x15\n\rcollection_id\x18\x03 \x01(\t\x12%\n\x06\x66ilter\x18\x04 \x01(\x0b\x32\x15.content.items.Filter\x12\x33\n\x07options\x18\x06 \x01(\x0b\x32\".content.items.FindArchivedOptions\"I\n\x14\x46indArchivedResponse\x12\"\n\x05items\x18\x01 \x03(\x0b\x32\x13.content.items.Item\x12\r\n\x05total\x18\x02 \x01(\x05\x32\xd4\t\n\x05Items\x12G\n\x06\x43reate\x12\x1c.content.items.CreateRequest\x1a\x1d.content.items.CreateResponse\"\x00\x12S\n\nIntrospect\x12 .content.items.IntrospectRequest\x1a!.content.items.IntrospectResponse\"\x00\x12>\n\x03Get\x12\x19.content.items.GetRequest\x1a\x1a.content.items.GetResponse\"\x00\x12\x41\n\x04\x46ind\x12\x1a.content.items.FindRequest\x1a\x1b.content.items.FindResponse\"\x00\x12@\n\x06Update\x12\x1c.content.items.UpdateRequest\x1a\x16.google.protobuf.Empty\"\x00\x12@\n\x06\x44\x65lete\x12\x1c.content.items.DeleteRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x44\n\x08Undelete\x12\x1e.content.items.UndeleteRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x42\n\x07Publish\x12\x1d.content.items.PublishRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x46\n\tUnpublish\x12\x1f.content.items.UnpublishRequest\x1a\x16.google.protobuf.Empty\"\x00\x12Y\n\x0cGetPublished\x12\".content.items.GetPublishedRequest\x1a#.content.items.GetPublishedResponse\"\x00\x12\\\n\rFindPublished\x12#.content.items.FindPublishedRequest\x1a$.content.items.FindPublishedResponse\"\x00\x12V\n\x0bGetRevision\x12!.content.items.GetRevisionRequest\x1a\".content.items.GetRevisionResponse\"\x00\x12\\\n\rListRevisions\x12#.content.items.ListRevisionsRequest\x1a$.content.items.ListRevisionsResponse\"\x00\x12\x42\n\x07\x41rchive\x12\x1d.content.items.ArchiveRequest\x1a\x16.google.protobuf.Empty\"\x00\x12Y\n\x0c\x46indArchived\x12\".content.items.FindArchivedRequest\x1a#.content.items.FindArchivedResponse\"\x00\x12\x46\n\tUnarchive\x12\x1f.content.items.UnarchiveRequest\x1a\x16.google.protobuf.Empty\"\x00\x42\x30Z.git.perx.ru/perxis/perxis-go/proto/items;itemsb\x06proto3')
-
-
-
-_ERROR = DESCRIPTOR.message_types_by_name['Error']
-_DECODEERROR = DESCRIPTOR.message_types_by_name['DecodeError']
-_VALIDATIONERROR = DESCRIPTOR.message_types_by_name['ValidationError']
-_MODIFICATIONERROR = DESCRIPTOR.message_types_by_name['ModificationError']
-_PERMISSIONS = DESCRIPTOR.message_types_by_name['Permissions']
-_ITEM = DESCRIPTOR.message_types_by_name['Item']
-_ITEM_TRANSLATIONSENTRY = _ITEM.nested_types_by_name['TranslationsEntry']
-_FILTER = DESCRIPTOR.message_types_by_name['Filter']
-_CREATEOPTIONS = DESCRIPTOR.message_types_by_name['CreateOptions']
-_FINDOPTIONS = DESCRIPTOR.message_types_by_name['FindOptions']
-_UPDATEOPTIONS = DESCRIPTOR.message_types_by_name['UpdateOptions']
-_GETPUBLISHEDOPTIONS = DESCRIPTOR.message_types_by_name['GetPublishedOptions']
-_DELETEOPTIONS = DESCRIPTOR.message_types_by_name['DeleteOptions']
-_PUBLISHOPTIONS = DESCRIPTOR.message_types_by_name['PublishOptions']
-_FINDPUBLISHEDOPTIONS = DESCRIPTOR.message_types_by_name['FindPublishedOptions']
-_FINDARCHIVEDOPTIONS = DESCRIPTOR.message_types_by_name['FindArchivedOptions']
-_LISTREVISIONSOPTIONS = DESCRIPTOR.message_types_by_name['ListRevisionsOptions']
-_CREATEREQUEST = DESCRIPTOR.message_types_by_name['CreateRequest']
-_CREATERESPONSE = DESCRIPTOR.message_types_by_name['CreateResponse']
-_INTROSPECTREQUEST = DESCRIPTOR.message_types_by_name['IntrospectRequest']
-_INTROSPECTRESPONSE = DESCRIPTOR.message_types_by_name['IntrospectResponse']
-_GETREQUEST = DESCRIPTOR.message_types_by_name['GetRequest']
-_GETRESPONSE = DESCRIPTOR.message_types_by_name['GetResponse']
-_FINDREQUEST = DESCRIPTOR.message_types_by_name['FindRequest']
-_FINDRESPONSE = DESCRIPTOR.message_types_by_name['FindResponse']
-_UPDATEREQUEST = DESCRIPTOR.message_types_by_name['UpdateRequest']
-_DELETEREQUEST = DESCRIPTOR.message_types_by_name['DeleteRequest']
-_UNDELETEREQUEST = DESCRIPTOR.message_types_by_name['UndeleteRequest']
-_PUBLISHREQUEST = DESCRIPTOR.message_types_by_name['PublishRequest']
-_UNPUBLISHREQUEST = DESCRIPTOR.message_types_by_name['UnpublishRequest']
-_GETPUBLISHEDREQUEST = DESCRIPTOR.message_types_by_name['GetPublishedRequest']
-_GETPUBLISHEDRESPONSE = DESCRIPTOR.message_types_by_name['GetPublishedResponse']
-_FINDPUBLISHEDREQUEST = DESCRIPTOR.message_types_by_name['FindPublishedRequest']
-_FINDPUBLISHEDRESPONSE = DESCRIPTOR.message_types_by_name['FindPublishedResponse']
-_GETREVISIONREQUEST = DESCRIPTOR.message_types_by_name['GetRevisionRequest']
-_GETREVISIONRESPONSE = DESCRIPTOR.message_types_by_name['GetRevisionResponse']
-_LISTREVISIONSREQUEST = DESCRIPTOR.message_types_by_name['ListRevisionsRequest']
-_LISTREVISIONSRESPONSE = DESCRIPTOR.message_types_by_name['ListRevisionsResponse']
-_ARCHIVEREQUEST = DESCRIPTOR.message_types_by_name['ArchiveRequest']
-_UNARCHIVEREQUEST = DESCRIPTOR.message_types_by_name['UnarchiveRequest']
-_FINDARCHIVEDREQUEST = DESCRIPTOR.message_types_by_name['FindArchivedRequest']
-_FINDARCHIVEDRESPONSE = DESCRIPTOR.message_types_by_name['FindArchivedResponse']
-_ITEM_STATE = _ITEM.enum_types_by_name['State']
-Error = _reflection.GeneratedProtocolMessageType('Error', (_message.Message,), {
-  'DESCRIPTOR' : _ERROR,
-  '__module__' : 'items.items_pb2'
-  # @@protoc_insertion_point(class_scope:content.items.Error)
-  })
-_sym_db.RegisterMessage(Error)
-
-DecodeError = _reflection.GeneratedProtocolMessageType('DecodeError', (_message.Message,), {
-  'DESCRIPTOR' : _DECODEERROR,
-  '__module__' : 'items.items_pb2'
-  # @@protoc_insertion_point(class_scope:content.items.DecodeError)
-  })
-_sym_db.RegisterMessage(DecodeError)
-
-ValidationError = _reflection.GeneratedProtocolMessageType('ValidationError', (_message.Message,), {
-  'DESCRIPTOR' : _VALIDATIONERROR,
-  '__module__' : 'items.items_pb2'
-  # @@protoc_insertion_point(class_scope:content.items.ValidationError)
-  })
-_sym_db.RegisterMessage(ValidationError)
-
-ModificationError = _reflection.GeneratedProtocolMessageType('ModificationError', (_message.Message,), {
-  'DESCRIPTOR' : _MODIFICATIONERROR,
-  '__module__' : 'items.items_pb2'
-  # @@protoc_insertion_point(class_scope:content.items.ModificationError)
-  })
-_sym_db.RegisterMessage(ModificationError)
-
-Permissions = _reflection.GeneratedProtocolMessageType('Permissions', (_message.Message,), {
-  'DESCRIPTOR' : _PERMISSIONS,
-  '__module__' : 'items.items_pb2'
-  # @@protoc_insertion_point(class_scope:content.items.Permissions)
-  })
-_sym_db.RegisterMessage(Permissions)
-
-Item = _reflection.GeneratedProtocolMessageType('Item', (_message.Message,), {
-
-  'TranslationsEntry' : _reflection.GeneratedProtocolMessageType('TranslationsEntry', (_message.Message,), {
-    'DESCRIPTOR' : _ITEM_TRANSLATIONSENTRY,
-    '__module__' : 'items.items_pb2'
-    # @@protoc_insertion_point(class_scope:content.items.Item.TranslationsEntry)
-    })
-  ,
-  'DESCRIPTOR' : _ITEM,
-  '__module__' : 'items.items_pb2'
-  # @@protoc_insertion_point(class_scope:content.items.Item)
-  })
-_sym_db.RegisterMessage(Item)
-_sym_db.RegisterMessage(Item.TranslationsEntry)
-
-Filter = _reflection.GeneratedProtocolMessageType('Filter', (_message.Message,), {
-  'DESCRIPTOR' : _FILTER,
-  '__module__' : 'items.items_pb2'
-  # @@protoc_insertion_point(class_scope:content.items.Filter)
-  })
-_sym_db.RegisterMessage(Filter)
-
-CreateOptions = _reflection.GeneratedProtocolMessageType('CreateOptions', (_message.Message,), {
-  'DESCRIPTOR' : _CREATEOPTIONS,
-  '__module__' : 'items.items_pb2'
-  # @@protoc_insertion_point(class_scope:content.items.CreateOptions)
-  })
-_sym_db.RegisterMessage(CreateOptions)
-
-FindOptions = _reflection.GeneratedProtocolMessageType('FindOptions', (_message.Message,), {
-  'DESCRIPTOR' : _FINDOPTIONS,
-  '__module__' : 'items.items_pb2'
-  # @@protoc_insertion_point(class_scope:content.items.FindOptions)
-  })
-_sym_db.RegisterMessage(FindOptions)
-
-UpdateOptions = _reflection.GeneratedProtocolMessageType('UpdateOptions', (_message.Message,), {
-  'DESCRIPTOR' : _UPDATEOPTIONS,
-  '__module__' : 'items.items_pb2'
-  # @@protoc_insertion_point(class_scope:content.items.UpdateOptions)
-  })
-_sym_db.RegisterMessage(UpdateOptions)
-
-GetPublishedOptions = _reflection.GeneratedProtocolMessageType('GetPublishedOptions', (_message.Message,), {
-  'DESCRIPTOR' : _GETPUBLISHEDOPTIONS,
-  '__module__' : 'items.items_pb2'
-  # @@protoc_insertion_point(class_scope:content.items.GetPublishedOptions)
-  })
-_sym_db.RegisterMessage(GetPublishedOptions)
-
-DeleteOptions = _reflection.GeneratedProtocolMessageType('DeleteOptions', (_message.Message,), {
-  'DESCRIPTOR' : _DELETEOPTIONS,
-  '__module__' : 'items.items_pb2'
-  # @@protoc_insertion_point(class_scope:content.items.DeleteOptions)
-  })
-_sym_db.RegisterMessage(DeleteOptions)
-
-PublishOptions = _reflection.GeneratedProtocolMessageType('PublishOptions', (_message.Message,), {
-  'DESCRIPTOR' : _PUBLISHOPTIONS,
-  '__module__' : 'items.items_pb2'
-  # @@protoc_insertion_point(class_scope:content.items.PublishOptions)
-  })
-_sym_db.RegisterMessage(PublishOptions)
-
-FindPublishedOptions = _reflection.GeneratedProtocolMessageType('FindPublishedOptions', (_message.Message,), {
-  'DESCRIPTOR' : _FINDPUBLISHEDOPTIONS,
-  '__module__' : 'items.items_pb2'
-  # @@protoc_insertion_point(class_scope:content.items.FindPublishedOptions)
-  })
-_sym_db.RegisterMessage(FindPublishedOptions)
-
-FindArchivedOptions = _reflection.GeneratedProtocolMessageType('FindArchivedOptions', (_message.Message,), {
-  'DESCRIPTOR' : _FINDARCHIVEDOPTIONS,
-  '__module__' : 'items.items_pb2'
-  # @@protoc_insertion_point(class_scope:content.items.FindArchivedOptions)
-  })
-_sym_db.RegisterMessage(FindArchivedOptions)
-
-ListRevisionsOptions = _reflection.GeneratedProtocolMessageType('ListRevisionsOptions', (_message.Message,), {
-  'DESCRIPTOR' : _LISTREVISIONSOPTIONS,
-  '__module__' : 'items.items_pb2'
-  # @@protoc_insertion_point(class_scope:content.items.ListRevisionsOptions)
-  })
-_sym_db.RegisterMessage(ListRevisionsOptions)
-
-CreateRequest = _reflection.GeneratedProtocolMessageType('CreateRequest', (_message.Message,), {
-  'DESCRIPTOR' : _CREATEREQUEST,
-  '__module__' : 'items.items_pb2'
-  # @@protoc_insertion_point(class_scope:content.items.CreateRequest)
-  })
-_sym_db.RegisterMessage(CreateRequest)
-
-CreateResponse = _reflection.GeneratedProtocolMessageType('CreateResponse', (_message.Message,), {
-  'DESCRIPTOR' : _CREATERESPONSE,
-  '__module__' : 'items.items_pb2'
-  # @@protoc_insertion_point(class_scope:content.items.CreateResponse)
-  })
-_sym_db.RegisterMessage(CreateResponse)
-
-IntrospectRequest = _reflection.GeneratedProtocolMessageType('IntrospectRequest', (_message.Message,), {
-  'DESCRIPTOR' : _INTROSPECTREQUEST,
-  '__module__' : 'items.items_pb2'
-  # @@protoc_insertion_point(class_scope:content.items.IntrospectRequest)
-  })
-_sym_db.RegisterMessage(IntrospectRequest)
-
-IntrospectResponse = _reflection.GeneratedProtocolMessageType('IntrospectResponse', (_message.Message,), {
-  'DESCRIPTOR' : _INTROSPECTRESPONSE,
-  '__module__' : 'items.items_pb2'
-  # @@protoc_insertion_point(class_scope:content.items.IntrospectResponse)
-  })
-_sym_db.RegisterMessage(IntrospectResponse)
-
-GetRequest = _reflection.GeneratedProtocolMessageType('GetRequest', (_message.Message,), {
-  'DESCRIPTOR' : _GETREQUEST,
-  '__module__' : 'items.items_pb2'
-  # @@protoc_insertion_point(class_scope:content.items.GetRequest)
-  })
-_sym_db.RegisterMessage(GetRequest)
-
-GetResponse = _reflection.GeneratedProtocolMessageType('GetResponse', (_message.Message,), {
-  'DESCRIPTOR' : _GETRESPONSE,
-  '__module__' : 'items.items_pb2'
-  # @@protoc_insertion_point(class_scope:content.items.GetResponse)
-  })
-_sym_db.RegisterMessage(GetResponse)
-
-FindRequest = _reflection.GeneratedProtocolMessageType('FindRequest', (_message.Message,), {
-  'DESCRIPTOR' : _FINDREQUEST,
-  '__module__' : 'items.items_pb2'
-  # @@protoc_insertion_point(class_scope:content.items.FindRequest)
-  })
-_sym_db.RegisterMessage(FindRequest)
-
-FindResponse = _reflection.GeneratedProtocolMessageType('FindResponse', (_message.Message,), {
-  'DESCRIPTOR' : _FINDRESPONSE,
-  '__module__' : 'items.items_pb2'
-  # @@protoc_insertion_point(class_scope:content.items.FindResponse)
-  })
-_sym_db.RegisterMessage(FindResponse)
-
-UpdateRequest = _reflection.GeneratedProtocolMessageType('UpdateRequest', (_message.Message,), {
-  'DESCRIPTOR' : _UPDATEREQUEST,
-  '__module__' : 'items.items_pb2'
-  # @@protoc_insertion_point(class_scope:content.items.UpdateRequest)
-  })
-_sym_db.RegisterMessage(UpdateRequest)
-
-DeleteRequest = _reflection.GeneratedProtocolMessageType('DeleteRequest', (_message.Message,), {
-  'DESCRIPTOR' : _DELETEREQUEST,
-  '__module__' : 'items.items_pb2'
-  # @@protoc_insertion_point(class_scope:content.items.DeleteRequest)
-  })
-_sym_db.RegisterMessage(DeleteRequest)
-
-UndeleteRequest = _reflection.GeneratedProtocolMessageType('UndeleteRequest', (_message.Message,), {
-  'DESCRIPTOR' : _UNDELETEREQUEST,
-  '__module__' : 'items.items_pb2'
-  # @@protoc_insertion_point(class_scope:content.items.UndeleteRequest)
-  })
-_sym_db.RegisterMessage(UndeleteRequest)
-
-PublishRequest = _reflection.GeneratedProtocolMessageType('PublishRequest', (_message.Message,), {
-  'DESCRIPTOR' : _PUBLISHREQUEST,
-  '__module__' : 'items.items_pb2'
-  # @@protoc_insertion_point(class_scope:content.items.PublishRequest)
-  })
-_sym_db.RegisterMessage(PublishRequest)
-
-UnpublishRequest = _reflection.GeneratedProtocolMessageType('UnpublishRequest', (_message.Message,), {
-  'DESCRIPTOR' : _UNPUBLISHREQUEST,
-  '__module__' : 'items.items_pb2'
-  # @@protoc_insertion_point(class_scope:content.items.UnpublishRequest)
-  })
-_sym_db.RegisterMessage(UnpublishRequest)
-
-GetPublishedRequest = _reflection.GeneratedProtocolMessageType('GetPublishedRequest', (_message.Message,), {
-  'DESCRIPTOR' : _GETPUBLISHEDREQUEST,
-  '__module__' : 'items.items_pb2'
-  # @@protoc_insertion_point(class_scope:content.items.GetPublishedRequest)
-  })
-_sym_db.RegisterMessage(GetPublishedRequest)
-
-GetPublishedResponse = _reflection.GeneratedProtocolMessageType('GetPublishedResponse', (_message.Message,), {
-  'DESCRIPTOR' : _GETPUBLISHEDRESPONSE,
-  '__module__' : 'items.items_pb2'
-  # @@protoc_insertion_point(class_scope:content.items.GetPublishedResponse)
-  })
-_sym_db.RegisterMessage(GetPublishedResponse)
-
-FindPublishedRequest = _reflection.GeneratedProtocolMessageType('FindPublishedRequest', (_message.Message,), {
-  'DESCRIPTOR' : _FINDPUBLISHEDREQUEST,
-  '__module__' : 'items.items_pb2'
-  # @@protoc_insertion_point(class_scope:content.items.FindPublishedRequest)
-  })
-_sym_db.RegisterMessage(FindPublishedRequest)
-
-FindPublishedResponse = _reflection.GeneratedProtocolMessageType('FindPublishedResponse', (_message.Message,), {
-  'DESCRIPTOR' : _FINDPUBLISHEDRESPONSE,
-  '__module__' : 'items.items_pb2'
-  # @@protoc_insertion_point(class_scope:content.items.FindPublishedResponse)
-  })
-_sym_db.RegisterMessage(FindPublishedResponse)
-
-GetRevisionRequest = _reflection.GeneratedProtocolMessageType('GetRevisionRequest', (_message.Message,), {
-  'DESCRIPTOR' : _GETREVISIONREQUEST,
-  '__module__' : 'items.items_pb2'
-  # @@protoc_insertion_point(class_scope:content.items.GetRevisionRequest)
-  })
-_sym_db.RegisterMessage(GetRevisionRequest)
-
-GetRevisionResponse = _reflection.GeneratedProtocolMessageType('GetRevisionResponse', (_message.Message,), {
-  'DESCRIPTOR' : _GETREVISIONRESPONSE,
-  '__module__' : 'items.items_pb2'
-  # @@protoc_insertion_point(class_scope:content.items.GetRevisionResponse)
-  })
-_sym_db.RegisterMessage(GetRevisionResponse)
-
-ListRevisionsRequest = _reflection.GeneratedProtocolMessageType('ListRevisionsRequest', (_message.Message,), {
-  'DESCRIPTOR' : _LISTREVISIONSREQUEST,
-  '__module__' : 'items.items_pb2'
-  # @@protoc_insertion_point(class_scope:content.items.ListRevisionsRequest)
-  })
-_sym_db.RegisterMessage(ListRevisionsRequest)
-
-ListRevisionsResponse = _reflection.GeneratedProtocolMessageType('ListRevisionsResponse', (_message.Message,), {
-  'DESCRIPTOR' : _LISTREVISIONSRESPONSE,
-  '__module__' : 'items.items_pb2'
-  # @@protoc_insertion_point(class_scope:content.items.ListRevisionsResponse)
-  })
-_sym_db.RegisterMessage(ListRevisionsResponse)
-
-ArchiveRequest = _reflection.GeneratedProtocolMessageType('ArchiveRequest', (_message.Message,), {
-  'DESCRIPTOR' : _ARCHIVEREQUEST,
-  '__module__' : 'items.items_pb2'
-  # @@protoc_insertion_point(class_scope:content.items.ArchiveRequest)
-  })
-_sym_db.RegisterMessage(ArchiveRequest)
-
-UnarchiveRequest = _reflection.GeneratedProtocolMessageType('UnarchiveRequest', (_message.Message,), {
-  'DESCRIPTOR' : _UNARCHIVEREQUEST,
-  '__module__' : 'items.items_pb2'
-  # @@protoc_insertion_point(class_scope:content.items.UnarchiveRequest)
-  })
-_sym_db.RegisterMessage(UnarchiveRequest)
-
-FindArchivedRequest = _reflection.GeneratedProtocolMessageType('FindArchivedRequest', (_message.Message,), {
-  'DESCRIPTOR' : _FINDARCHIVEDREQUEST,
-  '__module__' : 'items.items_pb2'
-  # @@protoc_insertion_point(class_scope:content.items.FindArchivedRequest)
-  })
-_sym_db.RegisterMessage(FindArchivedRequest)
-
-FindArchivedResponse = _reflection.GeneratedProtocolMessageType('FindArchivedResponse', (_message.Message,), {
-  'DESCRIPTOR' : _FINDARCHIVEDRESPONSE,
-  '__module__' : 'items.items_pb2'
-  # @@protoc_insertion_point(class_scope:content.items.FindArchivedResponse)
-  })
-_sym_db.RegisterMessage(FindArchivedResponse)
-
-_ITEMS = DESCRIPTOR.services_by_name['Items']
-if _descriptor._USE_C_DESCRIPTORS == False:
-
-  DESCRIPTOR._options = None
-  DESCRIPTOR._serialized_options = b'Z.git.perx.ru/perxis/perxis-go/proto/items;items'
-  _ITEM_TRANSLATIONSENTRY._options = None
-  _ITEM_TRANSLATIONSENTRY._serialized_options = b'8\001'
-  _ERROR._serialized_start=149
-  _ERROR._serialized_end=188
-  _DECODEERROR._serialized_start=190
-  _DECODEERROR._serialized_end=241
-  _VALIDATIONERROR._serialized_start=243
-  _VALIDATIONERROR._serialized_end=298
-  _MODIFICATIONERROR._serialized_start=300
-  _MODIFICATIONERROR._serialized_end=357
-  _PERMISSIONS._serialized_start=359
-  _PERMISSIONS._serialized_end=462
-  _ITEM._serialized_start=465
-  _ITEM._serialized_end=1289
-  _ITEM_TRANSLATIONSENTRY._serialized_start=1151
-  _ITEM_TRANSLATIONSENTRY._serialized_end=1227
-  _ITEM_STATE._serialized_start=1229
-  _ITEM_STATE._serialized_end=1289
-  _FILTER._serialized_start=1291
-  _FILTER._serialized_end=1352
-  _CREATEOPTIONS._serialized_start=1354
-  _CREATEOPTIONS._serialized_end=1391
-  _FINDOPTIONS._serialized_start=1393
-  _FINDOPTIONS._serialized_end=1513
-  _UPDATEOPTIONS._serialized_start=1515
-  _UPDATEOPTIONS._serialized_end=1552
-  _GETPUBLISHEDOPTIONS._serialized_start=1554
-  _GETPUBLISHEDOPTIONS._serialized_end=1594
-  _DELETEOPTIONS._serialized_start=1596
-  _DELETEOPTIONS._serialized_end=1626
-  _PUBLISHOPTIONS._serialized_start=1628
-  _PUBLISHOPTIONS._serialized_end=1666
-  _FINDPUBLISHEDOPTIONS._serialized_start=1669
-  _FINDPUBLISHEDOPTIONS._serialized_end=1800
-  _FINDARCHIVEDOPTIONS._serialized_start=1802
-  _FINDARCHIVEDOPTIONS._serialized_end=1861
-  _LISTREVISIONSOPTIONS._serialized_start=1863
-  _LISTREVISIONSOPTIONS._serialized_end=1923
-  _CREATEREQUEST._serialized_start=1925
-  _CREATEREQUEST._serialized_end=2022
-  _CREATERESPONSE._serialized_start=2024
-  _CREATERESPONSE._serialized_end=2078
-  _INTROSPECTREQUEST._serialized_start=2080
-  _INTROSPECTREQUEST._serialized_end=2134
-  _INTROSPECTRESPONSE._serialized_start=2137
-  _INTROSPECTRESPONSE._serialized_end=2276
-  _GETREQUEST._serialized_start=2278
-  _GETREQUEST._serialized_end=2364
-  _GETRESPONSE._serialized_start=2366
-  _GETRESPONSE._serialized_end=2414
-  _FINDREQUEST._serialized_start=2417
-  _FINDREQUEST._serialized_end=2571
-  _FINDRESPONSE._serialized_start=2573
-  _FINDRESPONSE._serialized_end=2638
-  _UPDATEREQUEST._serialized_start=2640
-  _UPDATEREQUEST._serialized_end=2737
-  _DELETEREQUEST._serialized_start=2740
-  _DELETEREQUEST._serialized_end=2876
-  _UNDELETEREQUEST._serialized_start=2878
-  _UNDELETEREQUEST._serialized_end=2969
-  _PUBLISHREQUEST._serialized_start=2971
-  _PUBLISHREQUEST._serialized_end=3070
-  _UNPUBLISHREQUEST._serialized_start=3072
-  _UNPUBLISHREQUEST._serialized_end=3125
-  _GETPUBLISHEDREQUEST._serialized_start=3128
-  _GETPUBLISHEDREQUEST._serialized_end=3276
-  _GETPUBLISHEDRESPONSE._serialized_start=3278
-  _GETPUBLISHEDRESPONSE._serialized_end=3335
-  _FINDPUBLISHEDREQUEST._serialized_start=3338
-  _FINDPUBLISHEDREQUEST._serialized_end=3510
-  _FINDPUBLISHEDRESPONSE._serialized_start=3512
-  _FINDPUBLISHEDRESPONSE._serialized_end=3586
-  _GETREVISIONREQUEST._serialized_start=3588
-  _GETREVISIONREQUEST._serialized_end=3703
-  _GETREVISIONRESPONSE._serialized_start=3705
-  _GETREVISIONRESPONSE._serialized_end=3761
-  _LISTREVISIONSREQUEST._serialized_start=3764
-  _LISTREVISIONSREQUEST._serialized_end=3914
-  _LISTREVISIONSRESPONSE._serialized_start=3916
-  _LISTREVISIONSRESPONSE._serialized_end=3975
-  _ARCHIVEREQUEST._serialized_start=3977
-  _ARCHIVEREQUEST._serialized_end=4028
-  _UNARCHIVEREQUEST._serialized_start=4030
-  _UNARCHIVEREQUEST._serialized_end=4083
-  _FINDARCHIVEDREQUEST._serialized_start=4086
-  _FINDARCHIVEDREQUEST._serialized_end=4256
-  _FINDARCHIVEDRESPONSE._serialized_start=4258
-  _FINDARCHIVEDRESPONSE._serialized_end=4331
-  _ITEMS._serialized_start=4334
-  _ITEMS._serialized_end=5570
-# @@protoc_insertion_point(module_scope)
diff --git a/clients/members/members_pb2.py b/clients/members/members_pb2.py
deleted file mode 100644
index 93e6a8e091c45bc628dbd457c9ef1dd3273e71d8..0000000000000000000000000000000000000000
--- a/clients/members/members_pb2.py
+++ /dev/null
@@ -1,152 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by the protocol buffer compiler.  DO NOT EDIT!
-# source: members/members.proto
-"""Generated protocol buffer code."""
-from google.protobuf.internal import enum_type_wrapper
-from google.protobuf import descriptor as _descriptor
-from google.protobuf import descriptor_pool as _descriptor_pool
-from google.protobuf import message as _message
-from google.protobuf import reflection as _reflection
-from google.protobuf import symbol_database as _symbol_database
-# @@protoc_insertion_point(imports)
-
-_sym_db = _symbol_database.Default()
-
-
-from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2
-from common import common_pb2 as common_dot_common__pb2
-
-
-DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x15members/members.proto\x12\x0f\x61\x63\x63ount.members\x1a\x1bgoogle/protobuf/empty.proto\x1a\x13\x63ommon/common.proto\"N\n\x06Member\x12\x0e\n\x06org_id\x18\x01 \x01(\t\x12\x0f\n\x07user_id\x18\x02 \x01(\t\x12#\n\x04role\x18\x03 \x01(\x0e\x32\x15.account.members.Role\"R\n\nSetRequest\x12\x0e\n\x06org_id\x18\x01 \x01(\t\x12\x0f\n\x07user_id\x18\x02 \x01(\t\x12#\n\x04role\x18\x03 \x01(\x0e\x32\x15.account.members.Role\"-\n\nGetRequest\x12\x0e\n\x06org_id\x18\x01 \x01(\t\x12\x0f\n\x07user_id\x18\x02 \x01(\t\"2\n\x0bGetResponse\x12#\n\x04role\x18\x03 \x01(\x0e\x32\x15.account.members.Role\"0\n\rRemoveRequest\x12\x0e\n\x06org_id\x18\x01 \x01(\t\x12\x0f\n\x07user_id\x18\x02 \x01(\t\"$\n\x12ListMembersRequest\x12\x0e\n\x06org_id\x18\x01 \x01(\t\"?\n\x13ListMembersResponse\x12(\n\x07members\x18\x01 \x03(\x0b\x32\x17.account.members.Member\"+\n\x18ListOrganizationsRequest\x12\x0f\n\x07user_id\x18\x01 \x01(\t\"K\n\x19ListOrganizationsResponse\x12.\n\rorganizations\x18\x01 \x03(\x0b\x32\x17.account.members.Member\"F\n\x18OnCollaboratorSetRequest\x12*\n\x0c\x63ollaborator\x18\x01 \x01(\x0b\x32\x14.common.Collaborator\"4\n\x19OnCollaboratorSetResponse\x12\x17\n\x0f\x64\x65layed_task_id\x18\x01 \x01(\t*8\n\x04Role\x12\x0e\n\nNOT_MEMBER\x10\x00\x12\n\n\x06MEMBER\x10\x01\x12\t\n\x05OWNER\x10\x02\x12\t\n\x05\x41\x44MIN\x10\x03\x32\x99\x03\n\x07Members\x12<\n\x03Set\x12\x1b.account.members.SetRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x42\n\x03Get\x12\x1b.account.members.GetRequest\x1a\x1c.account.members.GetResponse\"\x00\x12\x42\n\x06Remove\x12\x1e.account.members.RemoveRequest\x1a\x16.google.protobuf.Empty\"\x00\x12Z\n\x0bListMembers\x12#.account.members.ListMembersRequest\x1a$.account.members.ListMembersResponse\"\x00\x12l\n\x11ListOrganizations\x12).account.members.ListOrganizationsRequest\x1a*.account.members.ListOrganizationsResponse\"\x00\x32x\n\x08Observer\x12l\n\x11OnCollaboratorSet\x12).account.members.OnCollaboratorSetRequest\x1a*.account.members.OnCollaboratorSetResponse\"\x00\x42\x34Z2git.perx.ru/perxis/perxis-go/proto/members;membersb\x06proto3')
-
-_ROLE = DESCRIPTOR.enum_types_by_name['Role']
-Role = enum_type_wrapper.EnumTypeWrapper(_ROLE)
-NOT_MEMBER = 0
-MEMBER = 1
-OWNER = 2
-ADMIN = 3
-
-
-_MEMBER = DESCRIPTOR.message_types_by_name['Member']
-_SETREQUEST = DESCRIPTOR.message_types_by_name['SetRequest']
-_GETREQUEST = DESCRIPTOR.message_types_by_name['GetRequest']
-_GETRESPONSE = DESCRIPTOR.message_types_by_name['GetResponse']
-_REMOVEREQUEST = DESCRIPTOR.message_types_by_name['RemoveRequest']
-_LISTMEMBERSREQUEST = DESCRIPTOR.message_types_by_name['ListMembersRequest']
-_LISTMEMBERSRESPONSE = DESCRIPTOR.message_types_by_name['ListMembersResponse']
-_LISTORGANIZATIONSREQUEST = DESCRIPTOR.message_types_by_name['ListOrganizationsRequest']
-_LISTORGANIZATIONSRESPONSE = DESCRIPTOR.message_types_by_name['ListOrganizationsResponse']
-_ONCOLLABORATORSETREQUEST = DESCRIPTOR.message_types_by_name['OnCollaboratorSetRequest']
-_ONCOLLABORATORSETRESPONSE = DESCRIPTOR.message_types_by_name['OnCollaboratorSetResponse']
-Member = _reflection.GeneratedProtocolMessageType('Member', (_message.Message,), {
-  'DESCRIPTOR' : _MEMBER,
-  '__module__' : 'members.members_pb2'
-  # @@protoc_insertion_point(class_scope:account.members.Member)
-  })
-_sym_db.RegisterMessage(Member)
-
-SetRequest = _reflection.GeneratedProtocolMessageType('SetRequest', (_message.Message,), {
-  'DESCRIPTOR' : _SETREQUEST,
-  '__module__' : 'members.members_pb2'
-  # @@protoc_insertion_point(class_scope:account.members.SetRequest)
-  })
-_sym_db.RegisterMessage(SetRequest)
-
-GetRequest = _reflection.GeneratedProtocolMessageType('GetRequest', (_message.Message,), {
-  'DESCRIPTOR' : _GETREQUEST,
-  '__module__' : 'members.members_pb2'
-  # @@protoc_insertion_point(class_scope:account.members.GetRequest)
-  })
-_sym_db.RegisterMessage(GetRequest)
-
-GetResponse = _reflection.GeneratedProtocolMessageType('GetResponse', (_message.Message,), {
-  'DESCRIPTOR' : _GETRESPONSE,
-  '__module__' : 'members.members_pb2'
-  # @@protoc_insertion_point(class_scope:account.members.GetResponse)
-  })
-_sym_db.RegisterMessage(GetResponse)
-
-RemoveRequest = _reflection.GeneratedProtocolMessageType('RemoveRequest', (_message.Message,), {
-  'DESCRIPTOR' : _REMOVEREQUEST,
-  '__module__' : 'members.members_pb2'
-  # @@protoc_insertion_point(class_scope:account.members.RemoveRequest)
-  })
-_sym_db.RegisterMessage(RemoveRequest)
-
-ListMembersRequest = _reflection.GeneratedProtocolMessageType('ListMembersRequest', (_message.Message,), {
-  'DESCRIPTOR' : _LISTMEMBERSREQUEST,
-  '__module__' : 'members.members_pb2'
-  # @@protoc_insertion_point(class_scope:account.members.ListMembersRequest)
-  })
-_sym_db.RegisterMessage(ListMembersRequest)
-
-ListMembersResponse = _reflection.GeneratedProtocolMessageType('ListMembersResponse', (_message.Message,), {
-  'DESCRIPTOR' : _LISTMEMBERSRESPONSE,
-  '__module__' : 'members.members_pb2'
-  # @@protoc_insertion_point(class_scope:account.members.ListMembersResponse)
-  })
-_sym_db.RegisterMessage(ListMembersResponse)
-
-ListOrganizationsRequest = _reflection.GeneratedProtocolMessageType('ListOrganizationsRequest', (_message.Message,), {
-  'DESCRIPTOR' : _LISTORGANIZATIONSREQUEST,
-  '__module__' : 'members.members_pb2'
-  # @@protoc_insertion_point(class_scope:account.members.ListOrganizationsRequest)
-  })
-_sym_db.RegisterMessage(ListOrganizationsRequest)
-
-ListOrganizationsResponse = _reflection.GeneratedProtocolMessageType('ListOrganizationsResponse', (_message.Message,), {
-  'DESCRIPTOR' : _LISTORGANIZATIONSRESPONSE,
-  '__module__' : 'members.members_pb2'
-  # @@protoc_insertion_point(class_scope:account.members.ListOrganizationsResponse)
-  })
-_sym_db.RegisterMessage(ListOrganizationsResponse)
-
-OnCollaboratorSetRequest = _reflection.GeneratedProtocolMessageType('OnCollaboratorSetRequest', (_message.Message,), {
-  'DESCRIPTOR' : _ONCOLLABORATORSETREQUEST,
-  '__module__' : 'members.members_pb2'
-  # @@protoc_insertion_point(class_scope:account.members.OnCollaboratorSetRequest)
-  })
-_sym_db.RegisterMessage(OnCollaboratorSetRequest)
-
-OnCollaboratorSetResponse = _reflection.GeneratedProtocolMessageType('OnCollaboratorSetResponse', (_message.Message,), {
-  'DESCRIPTOR' : _ONCOLLABORATORSETRESPONSE,
-  '__module__' : 'members.members_pb2'
-  # @@protoc_insertion_point(class_scope:account.members.OnCollaboratorSetResponse)
-  })
-_sym_db.RegisterMessage(OnCollaboratorSetResponse)
-
-_MEMBERS = DESCRIPTOR.services_by_name['Members']
-_OBSERVER = DESCRIPTOR.services_by_name['Observer']
-if _descriptor._USE_C_DESCRIPTORS == False:
-
-  DESCRIPTOR._options = None
-  DESCRIPTOR._serialized_options = b'Z2git.perx.ru/perxis/perxis-go/proto/members;members'
-  _ROLE._serialized_start=756
-  _ROLE._serialized_end=812
-  _MEMBER._serialized_start=92
-  _MEMBER._serialized_end=170
-  _SETREQUEST._serialized_start=172
-  _SETREQUEST._serialized_end=254
-  _GETREQUEST._serialized_start=256
-  _GETREQUEST._serialized_end=301
-  _GETRESPONSE._serialized_start=303
-  _GETRESPONSE._serialized_end=353
-  _REMOVEREQUEST._serialized_start=355
-  _REMOVEREQUEST._serialized_end=403
-  _LISTMEMBERSREQUEST._serialized_start=405
-  _LISTMEMBERSREQUEST._serialized_end=441
-  _LISTMEMBERSRESPONSE._serialized_start=443
-  _LISTMEMBERSRESPONSE._serialized_end=506
-  _LISTORGANIZATIONSREQUEST._serialized_start=508
-  _LISTORGANIZATIONSREQUEST._serialized_end=551
-  _LISTORGANIZATIONSRESPONSE._serialized_start=553
-  _LISTORGANIZATIONSRESPONSE._serialized_end=628
-  _ONCOLLABORATORSETREQUEST._serialized_start=630
-  _ONCOLLABORATORSETREQUEST._serialized_end=700
-  _ONCOLLABORATORSETRESPONSE._serialized_start=702
-  _ONCOLLABORATORSETRESPONSE._serialized_end=754
-  _MEMBERS._serialized_start=815
-  _MEMBERS._serialized_end=1224
-  _OBSERVER._serialized_start=1226
-  _OBSERVER._serialized_end=1346
-# @@protoc_insertion_point(module_scope)
diff --git a/clients/organizations/organizations_pb2.py b/clients/organizations/organizations_pb2.py
deleted file mode 100644
index 1f9d8997596b68e953b8d40d36944d8edd1dca28..0000000000000000000000000000000000000000
--- a/clients/organizations/organizations_pb2.py
+++ /dev/null
@@ -1,130 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by the protocol buffer compiler.  DO NOT EDIT!
-# source: organizations/organizations.proto
-"""Generated protocol buffer code."""
-from google.protobuf import descriptor as _descriptor
-from google.protobuf import descriptor_pool as _descriptor_pool
-from google.protobuf import message as _message
-from google.protobuf import reflection as _reflection
-from google.protobuf import symbol_database as _symbol_database
-# @@protoc_insertion_point(imports)
-
-_sym_db = _symbol_database.Default()
-
-
-from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2
-from common import common_pb2 as common_dot_common__pb2
-
-
-DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n!organizations/organizations.proto\x12\x15\x61\x63\x63ount.organizations\x1a\x1bgoogle/protobuf/empty.proto\x1a\x13\x63ommon/common.proto\"s\n\x0cOrganization\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x03 \x01(\t\x12\x10\n\x08logo_url\x18\x05 \x01(\t\x12\x15\n\x08owner_id\x18\x06 \x01(\tH\x00\x88\x01\x01\x42\x0b\n\t_owner_id\"A\n\rCreateRequest\x12\x30\n\x03org\x18\x01 \x01(\x0b\x32#.account.organizations.Organization\"F\n\x0e\x43reateResponse\x12\x34\n\x07\x63reated\x18\x01 \x01(\x0b\x32#.account.organizations.Organization\"\x1c\n\nGetRequest\x12\x0e\n\x06org_id\x18\x01 \x01(\t\"?\n\x0bGetResponse\x12\x30\n\x03org\x18\x01 \x01(\x0b\x32#.account.organizations.Organization\"A\n\rUpdateRequest\x12\x30\n\x03org\x18\x01 \x01(\x0b\x32#.account.organizations.Organization\"\x1f\n\rDeleteRequest\x12\x0e\n\x06org_id\x18\x01 \x01(\t\"$\n\x06\x46ilter\x12\x0b\n\x03ids\x18\x03 \x03(\t\x12\r\n\x05names\x18\x04 \x03(\t\"_\n\x0b\x46indRequest\x12-\n\x06\x66ilter\x18\x01 \x01(\x0b\x32\x1d.account.organizations.Filter\x12!\n\x04opts\x18\x02 \x01(\x0b\x32\x13.common.FindOptions\"P\n\x0c\x46indResponse\x12\x31\n\x04orgs\x18\x01 \x03(\x0b\x32#.account.organizations.Organization\x12\r\n\x05total\x18\x02 \x01(\x03\x32\x9f\x03\n\rOrganizations\x12W\n\x06\x43reate\x12$.account.organizations.CreateRequest\x1a%.account.organizations.CreateResponse\"\x00\x12N\n\x03Get\x12!.account.organizations.GetRequest\x1a\".account.organizations.GetResponse\"\x00\x12H\n\x06\x44\x65lete\x12$.account.organizations.DeleteRequest\x1a\x16.google.protobuf.Empty\"\x00\x12Q\n\x04\x46ind\x12\".account.organizations.FindRequest\x1a#.account.organizations.FindResponse\"\x00\x12H\n\x06Update\x12$.account.organizations.UpdateRequest\x1a\x16.google.protobuf.Empty\"\x00\x42@Z>git.perx.ru/perxis/perxis-go/proto/organizations;organizationsb\x06proto3')
-
-
-
-_ORGANIZATION = DESCRIPTOR.message_types_by_name['Organization']
-_CREATEREQUEST = DESCRIPTOR.message_types_by_name['CreateRequest']
-_CREATERESPONSE = DESCRIPTOR.message_types_by_name['CreateResponse']
-_GETREQUEST = DESCRIPTOR.message_types_by_name['GetRequest']
-_GETRESPONSE = DESCRIPTOR.message_types_by_name['GetResponse']
-_UPDATEREQUEST = DESCRIPTOR.message_types_by_name['UpdateRequest']
-_DELETEREQUEST = DESCRIPTOR.message_types_by_name['DeleteRequest']
-_FILTER = DESCRIPTOR.message_types_by_name['Filter']
-_FINDREQUEST = DESCRIPTOR.message_types_by_name['FindRequest']
-_FINDRESPONSE = DESCRIPTOR.message_types_by_name['FindResponse']
-Organization = _reflection.GeneratedProtocolMessageType('Organization', (_message.Message,), {
-  'DESCRIPTOR' : _ORGANIZATION,
-  '__module__' : 'organizations.organizations_pb2'
-  # @@protoc_insertion_point(class_scope:account.organizations.Organization)
-  })
-_sym_db.RegisterMessage(Organization)
-
-CreateRequest = _reflection.GeneratedProtocolMessageType('CreateRequest', (_message.Message,), {
-  'DESCRIPTOR' : _CREATEREQUEST,
-  '__module__' : 'organizations.organizations_pb2'
-  # @@protoc_insertion_point(class_scope:account.organizations.CreateRequest)
-  })
-_sym_db.RegisterMessage(CreateRequest)
-
-CreateResponse = _reflection.GeneratedProtocolMessageType('CreateResponse', (_message.Message,), {
-  'DESCRIPTOR' : _CREATERESPONSE,
-  '__module__' : 'organizations.organizations_pb2'
-  # @@protoc_insertion_point(class_scope:account.organizations.CreateResponse)
-  })
-_sym_db.RegisterMessage(CreateResponse)
-
-GetRequest = _reflection.GeneratedProtocolMessageType('GetRequest', (_message.Message,), {
-  'DESCRIPTOR' : _GETREQUEST,
-  '__module__' : 'organizations.organizations_pb2'
-  # @@protoc_insertion_point(class_scope:account.organizations.GetRequest)
-  })
-_sym_db.RegisterMessage(GetRequest)
-
-GetResponse = _reflection.GeneratedProtocolMessageType('GetResponse', (_message.Message,), {
-  'DESCRIPTOR' : _GETRESPONSE,
-  '__module__' : 'organizations.organizations_pb2'
-  # @@protoc_insertion_point(class_scope:account.organizations.GetResponse)
-  })
-_sym_db.RegisterMessage(GetResponse)
-
-UpdateRequest = _reflection.GeneratedProtocolMessageType('UpdateRequest', (_message.Message,), {
-  'DESCRIPTOR' : _UPDATEREQUEST,
-  '__module__' : 'organizations.organizations_pb2'
-  # @@protoc_insertion_point(class_scope:account.organizations.UpdateRequest)
-  })
-_sym_db.RegisterMessage(UpdateRequest)
-
-DeleteRequest = _reflection.GeneratedProtocolMessageType('DeleteRequest', (_message.Message,), {
-  'DESCRIPTOR' : _DELETEREQUEST,
-  '__module__' : 'organizations.organizations_pb2'
-  # @@protoc_insertion_point(class_scope:account.organizations.DeleteRequest)
-  })
-_sym_db.RegisterMessage(DeleteRequest)
-
-Filter = _reflection.GeneratedProtocolMessageType('Filter', (_message.Message,), {
-  'DESCRIPTOR' : _FILTER,
-  '__module__' : 'organizations.organizations_pb2'
-  # @@protoc_insertion_point(class_scope:account.organizations.Filter)
-  })
-_sym_db.RegisterMessage(Filter)
-
-FindRequest = _reflection.GeneratedProtocolMessageType('FindRequest', (_message.Message,), {
-  'DESCRIPTOR' : _FINDREQUEST,
-  '__module__' : 'organizations.organizations_pb2'
-  # @@protoc_insertion_point(class_scope:account.organizations.FindRequest)
-  })
-_sym_db.RegisterMessage(FindRequest)
-
-FindResponse = _reflection.GeneratedProtocolMessageType('FindResponse', (_message.Message,), {
-  'DESCRIPTOR' : _FINDRESPONSE,
-  '__module__' : 'organizations.organizations_pb2'
-  # @@protoc_insertion_point(class_scope:account.organizations.FindResponse)
-  })
-_sym_db.RegisterMessage(FindResponse)
-
-_ORGANIZATIONS = DESCRIPTOR.services_by_name['Organizations']
-if _descriptor._USE_C_DESCRIPTORS == False:
-
-  DESCRIPTOR._options = None
-  DESCRIPTOR._serialized_options = b'Z>git.perx.ru/perxis/perxis-go/proto/organizations;organizations'
-  _ORGANIZATION._serialized_start=110
-  _ORGANIZATION._serialized_end=225
-  _CREATEREQUEST._serialized_start=227
-  _CREATEREQUEST._serialized_end=292
-  _CREATERESPONSE._serialized_start=294
-  _CREATERESPONSE._serialized_end=364
-  _GETREQUEST._serialized_start=366
-  _GETREQUEST._serialized_end=394
-  _GETRESPONSE._serialized_start=396
-  _GETRESPONSE._serialized_end=459
-  _UPDATEREQUEST._serialized_start=461
-  _UPDATEREQUEST._serialized_end=526
-  _DELETEREQUEST._serialized_start=528
-  _DELETEREQUEST._serialized_end=559
-  _FILTER._serialized_start=561
-  _FILTER._serialized_end=597
-  _FINDREQUEST._serialized_start=599
-  _FINDREQUEST._serialized_end=694
-  _FINDRESPONSE._serialized_start=696
-  _FINDRESPONSE._serialized_end=776
-  _ORGANIZATIONS._serialized_start=779
-  _ORGANIZATIONS._serialized_end=1194
-# @@protoc_insertion_point(module_scope)
diff --git a/clients/references/references_pb2.py b/clients/references/references_pb2.py
deleted file mode 100644
index 12f7e4649c89d6460e4219541364f4f25025b46a..0000000000000000000000000000000000000000
--- a/clients/references/references_pb2.py
+++ /dev/null
@@ -1,59 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by the protocol buffer compiler.  DO NOT EDIT!
-# source: references/references.proto
-"""Generated protocol buffer code."""
-from google.protobuf import descriptor as _descriptor
-from google.protobuf import descriptor_pool as _descriptor_pool
-from google.protobuf import message as _message
-from google.protobuf import reflection as _reflection
-from google.protobuf import symbol_database as _symbol_database
-# @@protoc_insertion_point(imports)
-
-_sym_db = _symbol_database.Default()
-
-
-from items import items_pb2 as items_dot_items__pb2
-
-
-DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1breferences/references.proto\x12\x12\x63ontent.references\x1a\x11items/items.proto\".\n\tReference\x12\n\n\x02id\x18\x01 \x01(\t\x12\x15\n\rcollection_id\x18\x02 \x01(\t\"a\n\nGetRequest\x12\x10\n\x08space_id\x18\x01 \x01(\t\x12\x0e\n\x06\x65nv_id\x18\x02 \x01(\t\x12\x31\n\nreferences\x18\x03 \x03(\x0b\x32\x1d.content.references.Reference\"b\n\x0bGetResponse\x12\"\n\x05items\x18\x01 \x03(\x0b\x32\x13.content.items.Item\x12/\n\x08notfound\x18\x02 \x03(\x0b\x32\x1d.content.references.Reference2V\n\nReferences\x12H\n\x03Get\x12\x1e.content.references.GetRequest\x1a\x1f.content.references.GetResponse\"\x00\x42:Z8git.perx.ru/perxis/perxis-go/proto/references;referencesb\x06proto3')
-
-
-
-_REFERENCE = DESCRIPTOR.message_types_by_name['Reference']
-_GETREQUEST = DESCRIPTOR.message_types_by_name['GetRequest']
-_GETRESPONSE = DESCRIPTOR.message_types_by_name['GetResponse']
-Reference = _reflection.GeneratedProtocolMessageType('Reference', (_message.Message,), {
-  'DESCRIPTOR' : _REFERENCE,
-  '__module__' : 'references.references_pb2'
-  # @@protoc_insertion_point(class_scope:content.references.Reference)
-  })
-_sym_db.RegisterMessage(Reference)
-
-GetRequest = _reflection.GeneratedProtocolMessageType('GetRequest', (_message.Message,), {
-  'DESCRIPTOR' : _GETREQUEST,
-  '__module__' : 'references.references_pb2'
-  # @@protoc_insertion_point(class_scope:content.references.GetRequest)
-  })
-_sym_db.RegisterMessage(GetRequest)
-
-GetResponse = _reflection.GeneratedProtocolMessageType('GetResponse', (_message.Message,), {
-  'DESCRIPTOR' : _GETRESPONSE,
-  '__module__' : 'references.references_pb2'
-  # @@protoc_insertion_point(class_scope:content.references.GetResponse)
-  })
-_sym_db.RegisterMessage(GetResponse)
-
-_REFERENCES = DESCRIPTOR.services_by_name['References']
-if _descriptor._USE_C_DESCRIPTORS == False:
-
-  DESCRIPTOR._options = None
-  DESCRIPTOR._serialized_options = b'Z8git.perx.ru/perxis/perxis-go/proto/references;references'
-  _REFERENCE._serialized_start=70
-  _REFERENCE._serialized_end=116
-  _GETREQUEST._serialized_start=118
-  _GETREQUEST._serialized_end=215
-  _GETRESPONSE._serialized_start=217
-  _GETRESPONSE._serialized_end=315
-  _REFERENCES._serialized_start=317
-  _REFERENCES._serialized_end=403
-# @@protoc_insertion_point(module_scope)
diff --git a/clients/roles/roles_pb2.py b/clients/roles/roles_pb2.py
deleted file mode 100644
index d602286ac968171ef358def7452b7e7b61b9c6a4..0000000000000000000000000000000000000000
--- a/clients/roles/roles_pb2.py
+++ /dev/null
@@ -1,120 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by the protocol buffer compiler.  DO NOT EDIT!
-# source: roles/roles.proto
-"""Generated protocol buffer code."""
-from google.protobuf import descriptor as _descriptor
-from google.protobuf import descriptor_pool as _descriptor_pool
-from google.protobuf import message as _message
-from google.protobuf import reflection as _reflection
-from google.protobuf import symbol_database as _symbol_database
-# @@protoc_insertion_point(imports)
-
-_sym_db = _symbol_database.Default()
-
-
-from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2
-from common import common_pb2 as common_dot_common__pb2
-
-
-DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x11roles/roles.proto\x12\rcontent.roles\x1a\x1bgoogle/protobuf/empty.proto\x1a\x13\x63ommon/common.proto\"\x86\x01\n\x04Role\x12\n\n\x02id\x18\x01 \x01(\t\x12\x10\n\x08space_id\x18\x02 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x03 \x01(\t\x12\x1b\n\x05rules\x18\x04 \x03(\x0b\x32\x0c.common.Rule\x12\x14\n\x0c\x65nvironments\x18\x05 \x03(\t\x12\x18\n\x10\x61llow_management\x18\n \x01(\x08\"2\n\rCreateRequest\x12!\n\x04role\x18\x01 \x01(\x0b\x32\x13.content.roles.Role\"6\n\x0e\x43reateResponse\x12$\n\x07\x63reated\x18\x01 \x01(\x0b\x32\x13.content.roles.Role\"/\n\nGetRequest\x12\x10\n\x08space_id\x18\x01 \x01(\t\x12\x0f\n\x07role_id\x18\x02 \x01(\t\"0\n\x0bGetResponse\x12!\n\x04role\x18\x01 \x01(\x0b\x32\x13.content.roles.Role\"2\n\rUpdateRequest\x12!\n\x04role\x18\x01 \x01(\x0b\x32\x13.content.roles.Role\"\x1f\n\x0bListRequest\x12\x10\n\x08space_id\x18\x01 \x01(\t\"2\n\x0cListResponse\x12\"\n\x05roles\x18\x01 \x03(\x0b\x32\x13.content.roles.Role\"2\n\rDeleteRequest\x12\x10\n\x08space_id\x18\x01 \x01(\t\x12\x0f\n\x07role_id\x18\x02 \x01(\t2\xd7\x02\n\x05Roles\x12G\n\x06\x43reate\x12\x1c.content.roles.CreateRequest\x1a\x1d.content.roles.CreateResponse\"\x00\x12>\n\x03Get\x12\x19.content.roles.GetRequest\x1a\x1a.content.roles.GetResponse\"\x00\x12@\n\x06Update\x12\x1c.content.roles.UpdateRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x41\n\x04List\x12\x1a.content.roles.ListRequest\x1a\x1b.content.roles.ListResponse\"\x00\x12@\n\x06\x44\x65lete\x12\x1c.content.roles.DeleteRequest\x1a\x16.google.protobuf.Empty\"\x00\x42\x30Z.git.perx.ru/perxis/perxis-go/proto/roles;rolesb\x06proto3')
-
-
-
-_ROLE = DESCRIPTOR.message_types_by_name['Role']
-_CREATEREQUEST = DESCRIPTOR.message_types_by_name['CreateRequest']
-_CREATERESPONSE = DESCRIPTOR.message_types_by_name['CreateResponse']
-_GETREQUEST = DESCRIPTOR.message_types_by_name['GetRequest']
-_GETRESPONSE = DESCRIPTOR.message_types_by_name['GetResponse']
-_UPDATEREQUEST = DESCRIPTOR.message_types_by_name['UpdateRequest']
-_LISTREQUEST = DESCRIPTOR.message_types_by_name['ListRequest']
-_LISTRESPONSE = DESCRIPTOR.message_types_by_name['ListResponse']
-_DELETEREQUEST = DESCRIPTOR.message_types_by_name['DeleteRequest']
-Role = _reflection.GeneratedProtocolMessageType('Role', (_message.Message,), {
-  'DESCRIPTOR' : _ROLE,
-  '__module__' : 'roles.roles_pb2'
-  # @@protoc_insertion_point(class_scope:content.roles.Role)
-  })
-_sym_db.RegisterMessage(Role)
-
-CreateRequest = _reflection.GeneratedProtocolMessageType('CreateRequest', (_message.Message,), {
-  'DESCRIPTOR' : _CREATEREQUEST,
-  '__module__' : 'roles.roles_pb2'
-  # @@protoc_insertion_point(class_scope:content.roles.CreateRequest)
-  })
-_sym_db.RegisterMessage(CreateRequest)
-
-CreateResponse = _reflection.GeneratedProtocolMessageType('CreateResponse', (_message.Message,), {
-  'DESCRIPTOR' : _CREATERESPONSE,
-  '__module__' : 'roles.roles_pb2'
-  # @@protoc_insertion_point(class_scope:content.roles.CreateResponse)
-  })
-_sym_db.RegisterMessage(CreateResponse)
-
-GetRequest = _reflection.GeneratedProtocolMessageType('GetRequest', (_message.Message,), {
-  'DESCRIPTOR' : _GETREQUEST,
-  '__module__' : 'roles.roles_pb2'
-  # @@protoc_insertion_point(class_scope:content.roles.GetRequest)
-  })
-_sym_db.RegisterMessage(GetRequest)
-
-GetResponse = _reflection.GeneratedProtocolMessageType('GetResponse', (_message.Message,), {
-  'DESCRIPTOR' : _GETRESPONSE,
-  '__module__' : 'roles.roles_pb2'
-  # @@protoc_insertion_point(class_scope:content.roles.GetResponse)
-  })
-_sym_db.RegisterMessage(GetResponse)
-
-UpdateRequest = _reflection.GeneratedProtocolMessageType('UpdateRequest', (_message.Message,), {
-  'DESCRIPTOR' : _UPDATEREQUEST,
-  '__module__' : 'roles.roles_pb2'
-  # @@protoc_insertion_point(class_scope:content.roles.UpdateRequest)
-  })
-_sym_db.RegisterMessage(UpdateRequest)
-
-ListRequest = _reflection.GeneratedProtocolMessageType('ListRequest', (_message.Message,), {
-  'DESCRIPTOR' : _LISTREQUEST,
-  '__module__' : 'roles.roles_pb2'
-  # @@protoc_insertion_point(class_scope:content.roles.ListRequest)
-  })
-_sym_db.RegisterMessage(ListRequest)
-
-ListResponse = _reflection.GeneratedProtocolMessageType('ListResponse', (_message.Message,), {
-  'DESCRIPTOR' : _LISTRESPONSE,
-  '__module__' : 'roles.roles_pb2'
-  # @@protoc_insertion_point(class_scope:content.roles.ListResponse)
-  })
-_sym_db.RegisterMessage(ListResponse)
-
-DeleteRequest = _reflection.GeneratedProtocolMessageType('DeleteRequest', (_message.Message,), {
-  'DESCRIPTOR' : _DELETEREQUEST,
-  '__module__' : 'roles.roles_pb2'
-  # @@protoc_insertion_point(class_scope:content.roles.DeleteRequest)
-  })
-_sym_db.RegisterMessage(DeleteRequest)
-
-_ROLES = DESCRIPTOR.services_by_name['Roles']
-if _descriptor._USE_C_DESCRIPTORS == False:
-
-  DESCRIPTOR._options = None
-  DESCRIPTOR._serialized_options = b'Z.git.perx.ru/perxis/perxis-go/proto/roles;roles'
-  _ROLE._serialized_start=87
-  _ROLE._serialized_end=221
-  _CREATEREQUEST._serialized_start=223
-  _CREATEREQUEST._serialized_end=273
-  _CREATERESPONSE._serialized_start=275
-  _CREATERESPONSE._serialized_end=329
-  _GETREQUEST._serialized_start=331
-  _GETREQUEST._serialized_end=378
-  _GETRESPONSE._serialized_start=380
-  _GETRESPONSE._serialized_end=428
-  _UPDATEREQUEST._serialized_start=430
-  _UPDATEREQUEST._serialized_end=480
-  _LISTREQUEST._serialized_start=482
-  _LISTREQUEST._serialized_end=513
-  _LISTRESPONSE._serialized_start=515
-  _LISTRESPONSE._serialized_end=565
-  _DELETEREQUEST._serialized_start=567
-  _DELETEREQUEST._serialized_end=617
-  _ROLES._serialized_start=620
-  _ROLES._serialized_end=963
-# @@protoc_insertion_point(module_scope)
diff --git a/clients/spaces/spaces_pb2.py b/clients/spaces/spaces_pb2.py
deleted file mode 100644
index 6d9f0e6249f59493025e80b6f08ff267eeeae2df..0000000000000000000000000000000000000000
--- a/clients/spaces/spaces_pb2.py
+++ /dev/null
@@ -1,152 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by the protocol buffer compiler.  DO NOT EDIT!
-# source: spaces/spaces.proto
-"""Generated protocol buffer code."""
-from google.protobuf.internal import enum_type_wrapper
-from google.protobuf import descriptor as _descriptor
-from google.protobuf import descriptor_pool as _descriptor_pool
-from google.protobuf import message as _message
-from google.protobuf import reflection as _reflection
-from google.protobuf import symbol_database as _symbol_database
-# @@protoc_insertion_point(imports)
-
-_sym_db = _symbol_database.Default()
-
-
-from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2
-
-
-DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x13spaces/spaces.proto\x12\x0e\x63ontent.spaces\x1a\x1bgoogle/protobuf/empty.proto\"\x94\x01\n\x05Space\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0e\n\x06org_id\x18\x02 \x01(\t\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x04 \x01(\t\x12$\n\x05state\x18\x05 \x01(\x0e\x32\x15.content.spaces.State\x12&\n\x06\x63onfig\x18\n \x01(\x0b\x32\x16.content.spaces.Config\"\x1a\n\x06\x43onfig\x12\x10\n\x08\x66\x65\x61tures\x18\x01 \x03(\t\"5\n\rCreateRequest\x12$\n\x05space\x18\x01 \x01(\x0b\x32\x15.content.spaces.Space\"8\n\x0e\x43reateResponse\x12&\n\x07\x63reated\x18\x01 \x01(\x0b\x32\x15.content.spaces.Space\"\x1e\n\nGetRequest\x12\x10\n\x08space_id\x18\x01 \x01(\t\"3\n\x0bGetResponse\x12$\n\x05space\x18\x01 \x01(\x0b\x32\x15.content.spaces.Space\"\x1d\n\x0bListRequest\x12\x0e\n\x06org_id\x18\x01 \x01(\t\"5\n\x0cListResponse\x12%\n\x06spaces\x18\x01 \x03(\x0b\x32\x15.content.spaces.Space\"5\n\rUpdateRequest\x12$\n\x05space\x18\x01 \x01(\x0b\x32\x15.content.spaces.Space\"O\n\x13UpdateConfigRequest\x12\x10\n\x08space_id\x18\x01 \x01(\t\x12&\n\x06\x63onfig\x18\x02 \x01(\x0b\x32\x16.content.spaces.Config\"!\n\rDeleteRequest\x12\x10\n\x08space_id\x18\x01 \x01(\t*p\n\x05State\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x07\n\x03NEW\x10\x01\x12\t\n\x05READY\x10\x02\x12\r\n\tPREPARING\x10\x03\x12\x0f\n\x0bMAINTENANCE\x10\x04\x12\r\n\tMIGRATION\x10\x05\x12\x0c\n\x08\x44\x45LETING\x10\x06\x12\t\n\x05\x45RROR\x10\x07\x32\xaf\x03\n\x06Spaces\x12I\n\x06\x43reate\x12\x1d.content.spaces.CreateRequest\x1a\x1e.content.spaces.CreateResponse\"\x00\x12@\n\x03Get\x12\x1a.content.spaces.GetRequest\x1a\x1b.content.spaces.GetResponse\"\x00\x12\x43\n\x04List\x12\x1b.content.spaces.ListRequest\x1a\x1c.content.spaces.ListResponse\"\x00\x12\x41\n\x06Update\x12\x1d.content.spaces.UpdateRequest\x1a\x16.google.protobuf.Empty\"\x00\x12M\n\x0cUpdateConfig\x12#.content.spaces.UpdateConfigRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x41\n\x06\x44\x65lete\x12\x1d.content.spaces.DeleteRequest\x1a\x16.google.protobuf.Empty\"\x00\x42\x32Z0git.perx.ru/perxis/perxis-go/proto/spaces;spacesb\x06proto3')
-
-_STATE = DESCRIPTOR.enum_types_by_name['State']
-State = enum_type_wrapper.EnumTypeWrapper(_STATE)
-UNKNOWN = 0
-NEW = 1
-READY = 2
-PREPARING = 3
-MAINTENANCE = 4
-MIGRATION = 5
-DELETING = 6
-ERROR = 7
-
-
-_SPACE = DESCRIPTOR.message_types_by_name['Space']
-_CONFIG = DESCRIPTOR.message_types_by_name['Config']
-_CREATEREQUEST = DESCRIPTOR.message_types_by_name['CreateRequest']
-_CREATERESPONSE = DESCRIPTOR.message_types_by_name['CreateResponse']
-_GETREQUEST = DESCRIPTOR.message_types_by_name['GetRequest']
-_GETRESPONSE = DESCRIPTOR.message_types_by_name['GetResponse']
-_LISTREQUEST = DESCRIPTOR.message_types_by_name['ListRequest']
-_LISTRESPONSE = DESCRIPTOR.message_types_by_name['ListResponse']
-_UPDATEREQUEST = DESCRIPTOR.message_types_by_name['UpdateRequest']
-_UPDATECONFIGREQUEST = DESCRIPTOR.message_types_by_name['UpdateConfigRequest']
-_DELETEREQUEST = DESCRIPTOR.message_types_by_name['DeleteRequest']
-Space = _reflection.GeneratedProtocolMessageType('Space', (_message.Message,), {
-  'DESCRIPTOR' : _SPACE,
-  '__module__' : 'spaces.spaces_pb2'
-  # @@protoc_insertion_point(class_scope:content.spaces.Space)
-  })
-_sym_db.RegisterMessage(Space)
-
-Config = _reflection.GeneratedProtocolMessageType('Config', (_message.Message,), {
-  'DESCRIPTOR' : _CONFIG,
-  '__module__' : 'spaces.spaces_pb2'
-  # @@protoc_insertion_point(class_scope:content.spaces.Config)
-  })
-_sym_db.RegisterMessage(Config)
-
-CreateRequest = _reflection.GeneratedProtocolMessageType('CreateRequest', (_message.Message,), {
-  'DESCRIPTOR' : _CREATEREQUEST,
-  '__module__' : 'spaces.spaces_pb2'
-  # @@protoc_insertion_point(class_scope:content.spaces.CreateRequest)
-  })
-_sym_db.RegisterMessage(CreateRequest)
-
-CreateResponse = _reflection.GeneratedProtocolMessageType('CreateResponse', (_message.Message,), {
-  'DESCRIPTOR' : _CREATERESPONSE,
-  '__module__' : 'spaces.spaces_pb2'
-  # @@protoc_insertion_point(class_scope:content.spaces.CreateResponse)
-  })
-_sym_db.RegisterMessage(CreateResponse)
-
-GetRequest = _reflection.GeneratedProtocolMessageType('GetRequest', (_message.Message,), {
-  'DESCRIPTOR' : _GETREQUEST,
-  '__module__' : 'spaces.spaces_pb2'
-  # @@protoc_insertion_point(class_scope:content.spaces.GetRequest)
-  })
-_sym_db.RegisterMessage(GetRequest)
-
-GetResponse = _reflection.GeneratedProtocolMessageType('GetResponse', (_message.Message,), {
-  'DESCRIPTOR' : _GETRESPONSE,
-  '__module__' : 'spaces.spaces_pb2'
-  # @@protoc_insertion_point(class_scope:content.spaces.GetResponse)
-  })
-_sym_db.RegisterMessage(GetResponse)
-
-ListRequest = _reflection.GeneratedProtocolMessageType('ListRequest', (_message.Message,), {
-  'DESCRIPTOR' : _LISTREQUEST,
-  '__module__' : 'spaces.spaces_pb2'
-  # @@protoc_insertion_point(class_scope:content.spaces.ListRequest)
-  })
-_sym_db.RegisterMessage(ListRequest)
-
-ListResponse = _reflection.GeneratedProtocolMessageType('ListResponse', (_message.Message,), {
-  'DESCRIPTOR' : _LISTRESPONSE,
-  '__module__' : 'spaces.spaces_pb2'
-  # @@protoc_insertion_point(class_scope:content.spaces.ListResponse)
-  })
-_sym_db.RegisterMessage(ListResponse)
-
-UpdateRequest = _reflection.GeneratedProtocolMessageType('UpdateRequest', (_message.Message,), {
-  'DESCRIPTOR' : _UPDATEREQUEST,
-  '__module__' : 'spaces.spaces_pb2'
-  # @@protoc_insertion_point(class_scope:content.spaces.UpdateRequest)
-  })
-_sym_db.RegisterMessage(UpdateRequest)
-
-UpdateConfigRequest = _reflection.GeneratedProtocolMessageType('UpdateConfigRequest', (_message.Message,), {
-  'DESCRIPTOR' : _UPDATECONFIGREQUEST,
-  '__module__' : 'spaces.spaces_pb2'
-  # @@protoc_insertion_point(class_scope:content.spaces.UpdateConfigRequest)
-  })
-_sym_db.RegisterMessage(UpdateConfigRequest)
-
-DeleteRequest = _reflection.GeneratedProtocolMessageType('DeleteRequest', (_message.Message,), {
-  'DESCRIPTOR' : _DELETEREQUEST,
-  '__module__' : 'spaces.spaces_pb2'
-  # @@protoc_insertion_point(class_scope:content.spaces.DeleteRequest)
-  })
-_sym_db.RegisterMessage(DeleteRequest)
-
-_SPACES = DESCRIPTOR.services_by_name['Spaces']
-if _descriptor._USE_C_DESCRIPTORS == False:
-
-  DESCRIPTOR._options = None
-  DESCRIPTOR._serialized_options = b'Z0git.perx.ru/perxis/perxis-go/proto/spaces;spaces'
-  _STATE._serialized_start=702
-  _STATE._serialized_end=814
-  _SPACE._serialized_start=69
-  _SPACE._serialized_end=217
-  _CONFIG._serialized_start=219
-  _CONFIG._serialized_end=245
-  _CREATEREQUEST._serialized_start=247
-  _CREATEREQUEST._serialized_end=300
-  _CREATERESPONSE._serialized_start=302
-  _CREATERESPONSE._serialized_end=358
-  _GETREQUEST._serialized_start=360
-  _GETREQUEST._serialized_end=390
-  _GETRESPONSE._serialized_start=392
-  _GETRESPONSE._serialized_end=443
-  _LISTREQUEST._serialized_start=445
-  _LISTREQUEST._serialized_end=474
-  _LISTRESPONSE._serialized_start=476
-  _LISTRESPONSE._serialized_end=529
-  _UPDATEREQUEST._serialized_start=531
-  _UPDATEREQUEST._serialized_end=584
-  _UPDATECONFIGREQUEST._serialized_start=586
-  _UPDATECONFIGREQUEST._serialized_end=665
-  _DELETEREQUEST._serialized_start=667
-  _DELETEREQUEST._serialized_end=700
-  _SPACES._serialized_start=817
-  _SPACES._serialized_end=1248
-# @@protoc_insertion_point(module_scope)
diff --git a/perxis-proto b/perxis-proto
index ed11d439846b40a3e78e1fe8483569e32653ac22..d9fd1b7382944ef12019bcab1ad00334d9b90a88 160000
--- a/perxis-proto
+++ b/perxis-proto
@@ -1 +1 @@
-Subproject commit ed11d439846b40a3e78e1fe8483569e32653ac22
+Subproject commit d9fd1b7382944ef12019bcab1ad00334d9b90a88
diff --git a/proto/clients/clients_pb2.py b/proto/clients/clients_pb2.py
new file mode 100644
index 0000000000000000000000000000000000000000..5471674b6543b3198576be97bd358254f13e7a53
--- /dev/null
+++ b/proto/clients/clients_pb2.py
@@ -0,0 +1,57 @@
+# -*- coding: utf-8 -*-
+# Generated by the protocol buffer compiler.  DO NOT EDIT!
+# source: clients/clients.proto
+"""Generated protocol buffer code."""
+from google.protobuf.internal import builder as _builder
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import descriptor_pool as _descriptor_pool
+from google.protobuf import symbol_database as _symbol_database
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2
+
+
+DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x15\x63lients/clients.proto\x12\x0f\x63ontent.clients\x1a\x1bgoogle/protobuf/empty.proto\"\x9d\x03\n\x06\x43lient\x12\n\n\x02id\x18\x01 \x01(\t\x12\x10\n\x08space_id\x18\x02 \x01(\t\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x06 \x01(\t\x12\x15\n\x08\x64isabled\x18\x07 \x01(\x08H\x00\x88\x01\x01\x12\x0f\n\x07role_id\x18\x08 \x01(\t\x12,\n\x05oauth\x18\n \x01(\x0b\x32\x1d.content.clients.Client.OAuth\x12(\n\x03tls\x18\x0b \x01(\x0b\x32\x1b.content.clients.Client.TLS\x12/\n\x07\x61pi_key\x18\x0c \x01(\x0b\x32\x1e.content.clients.Client.APIKey\x1aU\n\x05OAuth\x12\x11\n\tclient_id\x18\x04 \x01(\t\x12\x0f\n\x07\x61uth_id\x18\x05 \x01(\t\x12\x11\n\ttoken_url\x18\n \x01(\t\x12\x15\n\rclient_secret\x18\x0b \x01(\t\x1a%\n\x06\x41PIKey\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x0e\n\x06rotate\x18\x02 \x01(\x08\x1a\x16\n\x03TLS\x12\x0f\n\x07subject\x18\x01 \x01(\tB\x0b\n\t_disabled\"8\n\rCreateRequest\x12\'\n\x06\x63lient\x18\x01 \x01(\x0b\x32\x17.content.clients.Client\":\n\x0e\x43reateResponse\x12(\n\x07\x63reated\x18\x01 \x01(\x0b\x32\x17.content.clients.Client\"*\n\nGetRequest\x12\x10\n\x08space_id\x18\x01 \x01(\t\x12\n\n\x02id\x18\x02 \x01(\t\"6\n\x0bGetResponse\x12\'\n\x06\x63lient\x18\x01 \x01(\x0b\x32\x17.content.clients.Client\"_\n\x0cGetByRequest\x12\x10\n\x08space_id\x18\x01 \x01(\t\x12\x17\n\x0foauth_client_id\x18\x02 \x01(\t\x12\x13\n\x0btls_subject\x18\x03 \x01(\t\x12\x0f\n\x07\x61pi_key\x18\x04 \x01(\t\"8\n\rGetByResponse\x12\'\n\x06\x63lient\x18\x01 \x01(\x0b\x32\x17.content.clients.Client\"8\n\rUpdateRequest\x12\'\n\x06\x63lient\x18\x01 \x01(\x0b\x32\x17.content.clients.Client\"\x1f\n\x0bListRequest\x12\x10\n\x08space_id\x18\x01 \x01(\t\"8\n\x0cListResponse\x12(\n\x07\x63lients\x18\x01 \x03(\x0b\x32\x17.content.clients.Client\"-\n\rDeleteRequest\x12\x10\n\x08space_id\x18\x01 \x01(\t\x12\n\n\x02id\x18\x02 \x01(\t\"=\n\rEnableRequest\x12\x10\n\x08space_id\x18\x01 \x01(\t\x12\n\n\x02id\x18\x02 \x01(\t\x12\x0e\n\x06\x65nable\x18\x03 \x01(\x08\x32\xf7\x03\n\x07\x43lients\x12K\n\x06\x43reate\x12\x1e.content.clients.CreateRequest\x1a\x1f.content.clients.CreateResponse\"\x00\x12\x42\n\x03Get\x12\x1b.content.clients.GetRequest\x1a\x1c.content.clients.GetResponse\"\x00\x12H\n\x05GetBy\x12\x1d.content.clients.GetByRequest\x1a\x1e.content.clients.GetByResponse\"\x00\x12\x42\n\x06Update\x12\x1e.content.clients.UpdateRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x45\n\x04List\x12\x1c.content.clients.ListRequest\x1a\x1d.content.clients.ListResponse\"\x00\x12\x42\n\x06\x44\x65lete\x12\x1e.content.clients.DeleteRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x42\n\x06\x45nable\x12\x1e.content.clients.EnableRequest\x1a\x16.google.protobuf.Empty\"\x00\x42\x34Z2git.perx.ru/perxis/perxis-go/proto/clients;clientsb\x06proto3')
+
+_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
+_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'clients.clients_pb2', globals())
+if _descriptor._USE_C_DESCRIPTORS == False:
+
+  DESCRIPTOR._options = None
+  DESCRIPTOR._serialized_options = b'Z2git.perx.ru/perxis/perxis-go/proto/clients;clients'
+  _CLIENT._serialized_start=72
+  _CLIENT._serialized_end=485
+  _CLIENT_OAUTH._serialized_start=324
+  _CLIENT_OAUTH._serialized_end=409
+  _CLIENT_APIKEY._serialized_start=411
+  _CLIENT_APIKEY._serialized_end=448
+  _CLIENT_TLS._serialized_start=450
+  _CLIENT_TLS._serialized_end=472
+  _CREATEREQUEST._serialized_start=487
+  _CREATEREQUEST._serialized_end=543
+  _CREATERESPONSE._serialized_start=545
+  _CREATERESPONSE._serialized_end=603
+  _GETREQUEST._serialized_start=605
+  _GETREQUEST._serialized_end=647
+  _GETRESPONSE._serialized_start=649
+  _GETRESPONSE._serialized_end=703
+  _GETBYREQUEST._serialized_start=705
+  _GETBYREQUEST._serialized_end=800
+  _GETBYRESPONSE._serialized_start=802
+  _GETBYRESPONSE._serialized_end=858
+  _UPDATEREQUEST._serialized_start=860
+  _UPDATEREQUEST._serialized_end=916
+  _LISTREQUEST._serialized_start=918
+  _LISTREQUEST._serialized_end=949
+  _LISTRESPONSE._serialized_start=951
+  _LISTRESPONSE._serialized_end=1007
+  _DELETEREQUEST._serialized_start=1009
+  _DELETEREQUEST._serialized_end=1054
+  _ENABLEREQUEST._serialized_start=1056
+  _ENABLEREQUEST._serialized_end=1117
+  _CLIENTS._serialized_start=1120
+  _CLIENTS._serialized_end=1623
+# @@protoc_insertion_point(module_scope)
diff --git a/clients/clients/clients_pb2_grpc.py b/proto/clients/clients_pb2_grpc.py
similarity index 100%
rename from clients/clients/clients_pb2_grpc.py
rename to proto/clients/clients_pb2_grpc.py
diff --git a/proto/collaborators/collaborators_pb2.py b/proto/collaborators/collaborators_pb2.py
new file mode 100644
index 0000000000000000000000000000000000000000..448cc3bc911edd6b7a9a9d515bab94c23c09445e
--- /dev/null
+++ b/proto/collaborators/collaborators_pb2.py
@@ -0,0 +1,44 @@
+# -*- coding: utf-8 -*-
+# Generated by the protocol buffer compiler.  DO NOT EDIT!
+# source: collaborators/collaborators.proto
+"""Generated protocol buffer code."""
+from google.protobuf.internal import builder as _builder
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import descriptor_pool as _descriptor_pool
+from google.protobuf import symbol_database as _symbol_database
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2
+from common import common_pb2 as common_dot_common__pb2
+
+
+DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n!collaborators/collaborators.proto\x12\x15\x63ontent.collaborators\x1a\x1bgoogle/protobuf/empty.proto\x1a\x13\x63ommon/common.proto\"=\n\nSetRequest\x12\x10\n\x08space_id\x18\x01 \x01(\t\x12\x0f\n\x07subject\x18\x02 \x01(\t\x12\x0c\n\x04role\x18\x03 \x01(\t\"/\n\nGetRequest\x12\x10\n\x08space_id\x18\x01 \x01(\t\x12\x0f\n\x07subject\x18\x02 \x01(\t\"\x1b\n\x0bGetResponse\x12\x0c\n\x04role\x18\x03 \x01(\t\"2\n\rRemoveRequest\x12\x10\n\x08space_id\x18\x01 \x01(\t\x12\x0f\n\x07subject\x18\x02 \x01(\t\",\n\x18ListCollaboratorsRequest\x12\x10\n\x08space_id\x18\x01 \x01(\t\"H\n\x19ListCollaboratorsResponse\x12+\n\rcollaborators\x18\x01 \x03(\x0b\x32\x14.common.Collaborator\"$\n\x11ListSpacesRequest\x12\x0f\n\x07subject\x18\x01 \x01(\t\":\n\x12ListSpacesResponse\x12$\n\x06spaces\x18\x01 \x03(\x0b\x32\x14.common.Collaborator2\xcc\x03\n\rCollaborators\x12\x42\n\x03Set\x12!.content.collaborators.SetRequest\x1a\x16.google.protobuf.Empty\"\x00\x12N\n\x03Get\x12!.content.collaborators.GetRequest\x1a\".content.collaborators.GetResponse\"\x00\x12H\n\x06Remove\x12$.content.collaborators.RemoveRequest\x1a\x16.google.protobuf.Empty\"\x00\x12x\n\x11ListCollaborators\x12/.content.collaborators.ListCollaboratorsRequest\x1a\x30.content.collaborators.ListCollaboratorsResponse\"\x00\x12\x63\n\nListSpaces\x12(.content.collaborators.ListSpacesRequest\x1a).content.collaborators.ListSpacesResponse\"\x00\x42@Z>git.perx.ru/perxis/perxis-go/proto/collaborators;collaboratorsb\x06proto3')
+
+_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
+_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'collaborators.collaborators_pb2', globals())
+if _descriptor._USE_C_DESCRIPTORS == False:
+
+  DESCRIPTOR._options = None
+  DESCRIPTOR._serialized_options = b'Z>git.perx.ru/perxis/perxis-go/proto/collaborators;collaborators'
+  _SETREQUEST._serialized_start=110
+  _SETREQUEST._serialized_end=171
+  _GETREQUEST._serialized_start=173
+  _GETREQUEST._serialized_end=220
+  _GETRESPONSE._serialized_start=222
+  _GETRESPONSE._serialized_end=249
+  _REMOVEREQUEST._serialized_start=251
+  _REMOVEREQUEST._serialized_end=301
+  _LISTCOLLABORATORSREQUEST._serialized_start=303
+  _LISTCOLLABORATORSREQUEST._serialized_end=347
+  _LISTCOLLABORATORSRESPONSE._serialized_start=349
+  _LISTCOLLABORATORSRESPONSE._serialized_end=421
+  _LISTSPACESREQUEST._serialized_start=423
+  _LISTSPACESREQUEST._serialized_end=459
+  _LISTSPACESRESPONSE._serialized_start=461
+  _LISTSPACESRESPONSE._serialized_end=519
+  _COLLABORATORS._serialized_start=522
+  _COLLABORATORS._serialized_end=982
+# @@protoc_insertion_point(module_scope)
diff --git a/clients/collaborators/collaborators_pb2_grpc.py b/proto/collaborators/collaborators_pb2_grpc.py
similarity index 100%
rename from clients/collaborators/collaborators_pb2_grpc.py
rename to proto/collaborators/collaborators_pb2_grpc.py
diff --git a/proto/collections/collections_pb2.py b/proto/collections/collections_pb2.py
new file mode 100644
index 0000000000000000000000000000000000000000..80d9d08b604cc6768fcfc26235e66c69073b197b
--- /dev/null
+++ b/proto/collections/collections_pb2.py
@@ -0,0 +1,61 @@
+# -*- coding: utf-8 -*-
+# Generated by the protocol buffer compiler.  DO NOT EDIT!
+# source: collections/collections.proto
+"""Generated protocol buffer code."""
+from google.protobuf.internal import builder as _builder
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import descriptor_pool as _descriptor_pool
+from google.protobuf import symbol_database as _symbol_database
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2
+from common import common_pb2 as common_dot_common__pb2
+from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2
+
+
+DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1d\x63ollections/collections.proto\x12\x13\x63ontent.collections\x1a\x1bgoogle/protobuf/empty.proto\x1a\x13\x63ommon/common.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"s\n\x06\x41\x63\x63\x65ss\x12\x1f\n\x07\x61\x63tions\x18\x01 \x03(\x0e\x32\x0e.common.Action\x12\x15\n\rhidden_fields\x18\x05 \x03(\t\x12\x17\n\x0freadonly_fields\x18\x06 \x03(\t\x12\x18\n\x10writeonly_fields\x18\x07 \x03(\t\"\x8e\x05\n\nCollection\x12\n\n\x02id\x18\x01 \x01(\t\x12\x10\n\x08space_id\x18\x02 \x01(\t\x12\x0e\n\x06\x65nv_id\x18\x03 \x01(\t\x12\x0c\n\x04name\x18\x04 \x01(\t\x12\x13\n\x06single\x18\x05 \x01(\x08H\x00\x88\x01\x01\x12\x13\n\x06system\x18\x06 \x01(\x08H\x01\x88\x01\x01\x12\x14\n\x07no_data\x18\x0c \x01(\x08H\x02\x88\x01\x01\x12\x0e\n\x06schema\x18\x07 \x01(\t\x12\x0e\n\x06hidden\x18\r \x01(\x08\x12\x32\n\x04view\x18\t \x01(\x0b\x32$.content.collections.Collection.View\x12=\n\nstate_info\x18\n \x01(\x0b\x32).content.collections.Collection.StateInfo\x12\x0c\n\x04tags\x18\x10 \x03(\t\x12+\n\x06\x61\x63\x63\x65ss\x18\x14 \x01(\x0b\x32\x1b.content.collections.Access\x1aO\n\x04View\x12\x10\n\x08space_id\x18\x01 \x01(\t\x12\x0e\n\x06\x65nv_id\x18\x02 \x01(\t\x12\x15\n\rcollection_id\x18\x03 \x01(\t\x12\x0e\n\x06\x66ilter\x18\x04 \x01(\t\x1a\x7f\n\tStateInfo\x12\x34\n\x05state\x18\x01 \x01(\x0e\x32%.content.collections.Collection.State\x12\x0c\n\x04info\x18\x02 \x01(\t\x12.\n\nstarted_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\"B\n\x05State\x12\x07\n\x03NEW\x10\x00\x12\r\n\tPREPARING\x10\x01\x12\t\n\x05READY\x10\x02\x12\t\n\x05\x45RROR\x10\x03\x12\x0b\n\x07\x43HANGED\x10\x04\x42\t\n\x07_singleB\t\n\x07_systemB\n\n\x08_no_data\"D\n\rCreateRequest\x12\x33\n\ncollection\x18\x01 \x01(\x0b\x32\x1f.content.collections.Collection\"B\n\x0e\x43reateResponse\x12\x30\n\x07\x63reated\x18\x01 \x01(\x0b\x32\x1f.content.collections.Collection\"-\n\nGetOptions\x12\x1f\n\x17\x64isable_schema_includes\x18\x01 \x01(\x08\"w\n\nGetRequest\x12\x10\n\x08space_id\x18\x01 \x01(\t\x12\x0e\n\x06\x65nv_id\x18\x02 \x01(\t\x12\x15\n\rcollection_id\x18\x03 \x01(\t\x12\x30\n\x07options\x18\x04 \x01(\x0b\x32\x1f.content.collections.GetOptions\"B\n\x0bGetResponse\x12\x33\n\ncollection\x18\x01 \x01(\x0b\x32\x1f.content.collections.Collection\"\xd5\x01\n\x0bListRequest\x12\x10\n\x08space_id\x18\x01 \x01(\t\x12\x0e\n\x06\x65nv_id\x18\x02 \x01(\t\x12\x37\n\x06\x66ilter\x18\x05 \x01(\x0b\x32\'.content.collections.ListRequest.Filter\x1ak\n\x06\x46ilter\x12\x16\n\x0e\x65xclude_system\x18\x01 \x01(\x08\x12\x17\n\x0finclude_no_data\x18\x05 \x01(\x08\x12\x16\n\x0einclude_hidden\x18\x06 \x01(\x08\x12\x0c\n\x04name\x18\x03 \x03(\t\x12\n\n\x02id\x18\x04 \x03(\t\"D\n\x0cListResponse\x12\x34\n\x0b\x63ollections\x18\x01 \x03(\x0b\x32\x1f.content.collections.Collection\"D\n\rUpdateRequest\x12\x33\n\ncollection\x18\x01 \x01(\x0b\x32\x1f.content.collections.Collection\"[\n\x10SetSchemaRequest\x12\x10\n\x08space_id\x18\x01 \x01(\t\x12\x0e\n\x06\x65nv_id\x18\x02 \x01(\t\x12\x15\n\rcollection_id\x18\x03 \x01(\t\x12\x0e\n\x06schema\x18\x04 \x01(\t\"H\n\rDeleteRequest\x12\x10\n\x08space_id\x18\x01 \x01(\t\x12\x0e\n\x06\x65nv_id\x18\x02 \x01(\t\x12\x15\n\rcollection_id\x18\x03 \x01(\t2\xdb\x03\n\x0b\x43ollections\x12S\n\x06\x43reate\x12\".content.collections.CreateRequest\x1a#.content.collections.CreateResponse\"\x00\x12J\n\x03Get\x12\x1f.content.collections.GetRequest\x1a .content.collections.GetResponse\"\x00\x12M\n\x04List\x12 .content.collections.ListRequest\x1a!.content.collections.ListResponse\"\x00\x12\x46\n\x06Update\x12\".content.collections.UpdateRequest\x1a\x16.google.protobuf.Empty\"\x00\x12L\n\tSetSchema\x12%.content.collections.SetSchemaRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x46\n\x06\x44\x65lete\x12\".content.collections.DeleteRequest\x1a\x16.google.protobuf.Empty\"\x00\x42<Z:git.perx.ru/perxis/perxis-go/proto/collections;collectionsb\x06proto3')
+
+_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
+_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'collections.collections_pb2', globals())
+if _descriptor._USE_C_DESCRIPTORS == False:
+
+  DESCRIPTOR._options = None
+  DESCRIPTOR._serialized_options = b'Z:git.perx.ru/perxis/perxis-go/proto/collections;collections'
+  _ACCESS._serialized_start=137
+  _ACCESS._serialized_end=252
+  _COLLECTION._serialized_start=255
+  _COLLECTION._serialized_end=909
+  _COLLECTION_VIEW._serialized_start=599
+  _COLLECTION_VIEW._serialized_end=678
+  _COLLECTION_STATEINFO._serialized_start=680
+  _COLLECTION_STATEINFO._serialized_end=807
+  _COLLECTION_STATE._serialized_start=809
+  _COLLECTION_STATE._serialized_end=875
+  _CREATEREQUEST._serialized_start=911
+  _CREATEREQUEST._serialized_end=979
+  _CREATERESPONSE._serialized_start=981
+  _CREATERESPONSE._serialized_end=1047
+  _GETOPTIONS._serialized_start=1049
+  _GETOPTIONS._serialized_end=1094
+  _GETREQUEST._serialized_start=1096
+  _GETREQUEST._serialized_end=1215
+  _GETRESPONSE._serialized_start=1217
+  _GETRESPONSE._serialized_end=1283
+  _LISTREQUEST._serialized_start=1286
+  _LISTREQUEST._serialized_end=1499
+  _LISTREQUEST_FILTER._serialized_start=1392
+  _LISTREQUEST_FILTER._serialized_end=1499
+  _LISTRESPONSE._serialized_start=1501
+  _LISTRESPONSE._serialized_end=1569
+  _UPDATEREQUEST._serialized_start=1571
+  _UPDATEREQUEST._serialized_end=1639
+  _SETSCHEMAREQUEST._serialized_start=1641
+  _SETSCHEMAREQUEST._serialized_end=1732
+  _DELETEREQUEST._serialized_start=1734
+  _DELETEREQUEST._serialized_end=1806
+  _COLLECTIONS._serialized_start=1809
+  _COLLECTIONS._serialized_end=2284
+# @@protoc_insertion_point(module_scope)
diff --git a/clients/collections/collections_pb2_grpc.py b/proto/collections/collections_pb2_grpc.py
similarity index 100%
rename from clients/collections/collections_pb2_grpc.py
rename to proto/collections/collections_pb2_grpc.py
diff --git a/proto/common/common_pb2.py b/proto/common/common_pb2.py
new file mode 100644
index 0000000000000000000000000000000000000000..c40bb17a5e731e9dcd46db9397cb7ec49e53d3e9
--- /dev/null
+++ b/proto/common/common_pb2.py
@@ -0,0 +1,57 @@
+# -*- coding: utf-8 -*-
+# Generated by the protocol buffer compiler.  DO NOT EDIT!
+# source: common/common.proto
+"""Generated protocol buffer code."""
+from google.protobuf.internal import builder as _builder
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import descriptor_pool as _descriptor_pool
+from google.protobuf import symbol_database as _symbol_database
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+from google.protobuf import struct_pb2 as google_dot_protobuf_dot_struct__pb2
+
+
+DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x13\x63ommon/common.proto\x12\x06\x63ommon\x1a\x1cgoogle/protobuf/struct.proto\"\xa6\x05\n\x05\x45rror\x12\x12\n\nerror_code\x18\x01 \x01(\x04\x12\x10\n\x08\x65rror_id\x18\x02 \x01(\t\x12\x0e\n\x06reason\x18\x03 \x01(\t\x12\x0e\n\x06\x64omain\x18\x04 \x01(\t\x12-\n\x08metadata\x18\t \x03(\x0b\x32\x1b.common.Error.MetadataEntry\x12-\n\x0b\x62\x61\x64_request\x18\n \x01(\x0b\x32\x18.common.Error.BadRequest\x12+\n\ndebug_info\x18\x0b \x01(\x0b\x32\x17.common.Error.DebugInfo\x12 \n\x04help\x18\x64 \x01(\x0b\x32\x12.common.Error.Help\x12;\n\x12localized_messages\x18\xc8\x01 \x03(\x0b\x32\x1e.common.Error.LocalizedMessage\x1a{\n\nBadRequest\x12\x37\n\x06\x65rrors\x18\x01 \x03(\x0b\x32\'.common.Error.BadRequest.FieldViolation\x1a\x34\n\x0e\x46ieldViolation\x12\r\n\x05\x66ield\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x1aX\n\x04Help\x12&\n\x05links\x18\x01 \x03(\x0b\x32\x17.common.Error.Help.Link\x1a(\n\x04Link\x12\x13\n\x0b\x64\x65scription\x18\x01 \x01(\t\x12\x0b\n\x03url\x18\x02 \x01(\t\x1a\x30\n\tDebugInfo\x12\x13\n\x0bstack_trace\x18\x01 \x03(\t\x12\x0e\n\x06\x64\x65tail\x18\x02 \x01(\t\x1a\x33\n\x10LocalizedMessage\x12\x0e\n\x06locale\x18\x01 \x01(\t\x12\x0f\n\x07message\x18\x02 \x01(\t\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"J\n\x06\x46ilter\x12\n\n\x02op\x18\x01 \x01(\t\x12\r\n\x05\x66ield\x18\x02 \x01(\t\x12%\n\x05value\x18\x03 \x01(\x0b\x32\x16.google.protobuf.Value\"h\n\x0b\x46indOptions\x12\x0c\n\x04sort\x18\x01 \x03(\t\x12\x10\n\x08page_num\x18\x02 \x01(\x05\x12\x11\n\tpage_size\x18\x03 \x01(\x05\x12\x0e\n\x06\x66ields\x18\x04 \x03(\t\x12\x16\n\x0e\x65xclude_fields\x18\x05 \x01(\x08\"\xd3\x01\n\x04Rule\x12\x15\n\rcollection_id\x18\x01 \x01(\t\x12\x1f\n\x07\x61\x63tions\x18\x02 \x03(\x0e\x32\x0e.common.Action\x12\x1e\n\x06\x61\x63\x63\x65ss\x18\x03 \x01(\x0e\x32\x0e.common.Access\x12\x15\n\rhidden_fields\x18\x05 \x03(\t\x12\x17\n\x0freadonly_fields\x18\x06 \x03(\t\x12\x18\n\x10writeonly_fields\x18\x07 \x03(\t\x12\x13\n\x0bread_filter\x18\x08 \x01(\t\x12\x14\n\x0cwrite_filter\x18\t \x01(\t\"?\n\x0c\x43ollaborator\x12\x10\n\x08space_id\x18\x01 \x01(\t\x12\x0f\n\x07subject\x18\x02 \x01(\t\x12\x0c\n\x04role\x18\x03 \x01(\t\"p\n\x07Version\x12\x16\n\x0eserver_version\x18\x01 \x01(\t\x12\x13\n\x0b\x61pi_version\x18\x02 \x01(\t\x12\x12\n\nbuild_time\x18\x03 \x01(\t\x12\x0e\n\x06\x63ommit\x18\x04 \x01(\t\x12\x14\n\x0c\x62uild_number\x18\x05 \x01(\x05*%\n\x06\x41\x63\x63\x65ss\x12\x07\n\x03\x41NY\x10\x00\x12\x08\n\x04MINE\x10\x01\x12\x08\n\x04ROLE\x10\x02*C\n\x06\x41\x63tion\x12\x0b\n\x07UNKNOWN\x10\x00\x12\n\n\x06\x43REATE\x10\x01\x12\x08\n\x04READ\x10\x02\x12\n\n\x06UPDATE\x10\x03\x12\n\n\x06\x44\x45LETE\x10\x04\x42\x32Z0git.perx.ru/perxis/perxis-go/proto/common;commonb\x06proto3')
+
+_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
+_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'common.common_pb2', globals())
+if _descriptor._USE_C_DESCRIPTORS == False:
+
+  DESCRIPTOR._options = None
+  DESCRIPTOR._serialized_options = b'Z0git.perx.ru/perxis/perxis-go/proto/common;common'
+  _ERROR_METADATAENTRY._options = None
+  _ERROR_METADATAENTRY._serialized_options = b'8\001'
+  _ACCESS._serialized_start=1317
+  _ACCESS._serialized_end=1354
+  _ACTION._serialized_start=1356
+  _ACTION._serialized_end=1423
+  _ERROR._serialized_start=62
+  _ERROR._serialized_end=740
+  _ERROR_BADREQUEST._serialized_start=375
+  _ERROR_BADREQUEST._serialized_end=498
+  _ERROR_BADREQUEST_FIELDVIOLATION._serialized_start=446
+  _ERROR_BADREQUEST_FIELDVIOLATION._serialized_end=498
+  _ERROR_HELP._serialized_start=500
+  _ERROR_HELP._serialized_end=588
+  _ERROR_HELP_LINK._serialized_start=548
+  _ERROR_HELP_LINK._serialized_end=588
+  _ERROR_DEBUGINFO._serialized_start=590
+  _ERROR_DEBUGINFO._serialized_end=638
+  _ERROR_LOCALIZEDMESSAGE._serialized_start=640
+  _ERROR_LOCALIZEDMESSAGE._serialized_end=691
+  _ERROR_METADATAENTRY._serialized_start=693
+  _ERROR_METADATAENTRY._serialized_end=740
+  _FILTER._serialized_start=742
+  _FILTER._serialized_end=816
+  _FINDOPTIONS._serialized_start=818
+  _FINDOPTIONS._serialized_end=922
+  _RULE._serialized_start=925
+  _RULE._serialized_end=1136
+  _COLLABORATOR._serialized_start=1138
+  _COLLABORATOR._serialized_end=1201
+  _VERSION._serialized_start=1203
+  _VERSION._serialized_end=1315
+# @@protoc_insertion_point(module_scope)
diff --git a/clients/common/common_pb2_grpc.py b/proto/common/common_pb2_grpc.py
similarity index 100%
rename from clients/common/common_pb2_grpc.py
rename to proto/common/common_pb2_grpc.py
diff --git a/proto/delivery/delivery_pb2.py b/proto/delivery/delivery_pb2.py
new file mode 100644
index 0000000000000000000000000000000000000000..878baaae61788348899afabf1e7cc6b12def8419
--- /dev/null
+++ b/proto/delivery/delivery_pb2.py
@@ -0,0 +1,69 @@
+# -*- coding: utf-8 -*-
+# Generated by the protocol buffer compiler.  DO NOT EDIT!
+# source: delivery/delivery.proto
+"""Generated protocol buffer code."""
+from google.protobuf.internal import builder as _builder
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import descriptor_pool as _descriptor_pool
+from google.protobuf import symbol_database as _symbol_database
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+from locales import locales_pb2 as locales_dot_locales__pb2
+from environments import environments_pb2 as environments_dot_environments__pb2
+from collections import collections_pb2 as collections_dot_collections__pb2
+from items import items_pb2 as items_dot_items__pb2
+from google.protobuf import struct_pb2 as google_dot_protobuf_dot_struct__pb2
+
+
+DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x17\x64\x65livery/delivery.proto\x12\x08\x64\x65livery\x1a\x15locales/locales.proto\x1a\x1f\x65nvironments/environments.proto\x1a\x1d\x63ollections/collections.proto\x1a\x11items/items.proto\x1a\x1cgoogle/protobuf/struct.proto\"&\n\x12ListLocalesRequest\x12\x10\n\x08space_id\x18\x01 \x01(\t\"?\n\x13ListLocalesResponse\x12(\n\x07locales\x18\x01 \x03(\x0b\x32\x17.content.locales.Locale\"9\n\x15GetEnvironmentRequest\x12\x10\n\x08space_id\x18\x01 \x01(\t\x12\x0e\n\x06\x65nv_id\x18\x02 \x01(\t\"H\n\x16GetEnvironmentResponse\x12.\n\x03\x65nv\x18\x01 \x01(\x0b\x32!.content.environments.Environment\"+\n\x17ListEnvironmentsRequest\x12\x10\n\x08space_id\x18\x01 \x01(\t\"K\n\x18ListEnvironmentsResponse\x12/\n\x04\x65nvs\x18\x01 \x03(\x0b\x32!.content.environments.Environment\"O\n\x14GetCollectionRequest\x12\x10\n\x08space_id\x18\x01 \x01(\t\x12\x0e\n\x06\x65nv_id\x18\x02 \x01(\t\x12\x15\n\rcollection_id\x18\x03 \x01(\t\"L\n\x15GetCollectionResponse\x12\x33\n\ncollection\x18\x01 \x01(\x0b\x32\x1f.content.collections.Collection\":\n\x16ListCollectionsRequest\x12\x10\n\x08space_id\x18\x01 \x01(\t\x12\x0e\n\x06\x65nv_id\x18\x02 \x01(\t\"O\n\x17ListCollectionsResponse\x12\x34\n\x0b\x63ollections\x18\x01 \x03(\x0b\x32\x1f.content.collections.Collection\"\x8f\x01\n\x0eGetItemRequest\x12\x10\n\x08space_id\x18\x01 \x01(\t\x12\x0e\n\x06\x65nv_id\x18\x02 \x01(\t\x12\x15\n\rcollection_id\x18\x03 \x01(\t\x12\x0f\n\x07item_id\x18\x05 \x01(\t\x12\x33\n\x07options\x18\x06 \x01(\x0b\x32\".content.items.GetPublishedOptions\"4\n\x0fGetItemResponse\x12!\n\x04item\x18\x01 \x01(\x0b\x32\x13.content.items.Item\"\xa8\x01\n\x10\x46indItemsRequest\x12\x10\n\x08space_id\x18\x01 \x01(\t\x12\x0e\n\x06\x65nv_id\x18\x02 \x01(\t\x12\x15\n\rcollection_id\x18\x03 \x01(\t\x12%\n\x06\x66ilter\x18\x05 \x01(\x0b\x32\x15.content.items.Filter\x12\x34\n\x07options\x18\x06 \x01(\x0b\x32#.content.items.FindPublishedOptions\"F\n\x11\x46indItemsResponse\x12\"\n\x05items\x18\x01 \x03(\x0b\x32\x13.content.items.Item\x12\r\n\x05total\x18\x02 \x01(\x05\"y\n\x10\x41ggregateOptions\x12\x36\n\x06\x66ields\x18\x01 \x03(\x0b\x32&.delivery.AggregateOptions.FieldsEntry\x1a-\n\x0b\x46ieldsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\x9f\x01\n\x10\x41ggregateRequest\x12\x10\n\x08space_id\x18\x01 \x01(\t\x12\x0e\n\x06\x65nv_id\x18\x02 \x01(\t\x12\x15\n\rcollection_id\x18\x03 \x01(\t\x12%\n\x06\x66ilter\x18\x04 \x01(\x0b\x32\x15.content.items.Filter\x12+\n\x07options\x18\n \x01(\x0b\x32\x1a.delivery.AggregateOptions\"<\n\x11\x41ggregateResponse\x12\'\n\x06result\x18\x01 \x01(\x0b\x32\x17.google.protobuf.Struct2\x8c\x05\n\x08\x44\x65livery\x12L\n\x0bListLocales\x12\x1c.delivery.ListLocalesRequest\x1a\x1d.delivery.ListLocalesResponse\"\x00\x12U\n\x0eGetEnvironment\x12\x1f.delivery.GetEnvironmentRequest\x1a .delivery.GetEnvironmentResponse\"\x00\x12[\n\x10ListEnvironments\x12!.delivery.ListEnvironmentsRequest\x1a\".delivery.ListEnvironmentsResponse\"\x00\x12R\n\rGetCollection\x12\x1e.delivery.GetCollectionRequest\x1a\x1f.delivery.GetCollectionResponse\"\x00\x12X\n\x0fListCollections\x12 .delivery.ListCollectionsRequest\x1a!.delivery.ListCollectionsResponse\"\x00\x12@\n\x07GetItem\x12\x18.delivery.GetItemRequest\x1a\x19.delivery.GetItemResponse\"\x00\x12\x46\n\tFindItems\x12\x1a.delivery.FindItemsRequest\x1a\x1b.delivery.FindItemsResponse\"\x00\x12\x46\n\tAggregate\x12\x1a.delivery.AggregateRequest\x1a\x1b.delivery.AggregateResponse\"\x00\x42\x36Z4git.perx.ru/perxis/perxis-go/proto/delivery;deliveryb\x06proto3')
+
+_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
+_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'delivery.delivery_pb2', globals())
+if _descriptor._USE_C_DESCRIPTORS == False:
+
+  DESCRIPTOR._options = None
+  DESCRIPTOR._serialized_options = b'Z4git.perx.ru/perxis/perxis-go/proto/delivery;delivery'
+  _AGGREGATEOPTIONS_FIELDSENTRY._options = None
+  _AGGREGATEOPTIONS_FIELDSENTRY._serialized_options = b'8\001'
+  _LISTLOCALESREQUEST._serialized_start=173
+  _LISTLOCALESREQUEST._serialized_end=211
+  _LISTLOCALESRESPONSE._serialized_start=213
+  _LISTLOCALESRESPONSE._serialized_end=276
+  _GETENVIRONMENTREQUEST._serialized_start=278
+  _GETENVIRONMENTREQUEST._serialized_end=335
+  _GETENVIRONMENTRESPONSE._serialized_start=337
+  _GETENVIRONMENTRESPONSE._serialized_end=409
+  _LISTENVIRONMENTSREQUEST._serialized_start=411
+  _LISTENVIRONMENTSREQUEST._serialized_end=454
+  _LISTENVIRONMENTSRESPONSE._serialized_start=456
+  _LISTENVIRONMENTSRESPONSE._serialized_end=531
+  _GETCOLLECTIONREQUEST._serialized_start=533
+  _GETCOLLECTIONREQUEST._serialized_end=612
+  _GETCOLLECTIONRESPONSE._serialized_start=614
+  _GETCOLLECTIONRESPONSE._serialized_end=690
+  _LISTCOLLECTIONSREQUEST._serialized_start=692
+  _LISTCOLLECTIONSREQUEST._serialized_end=750
+  _LISTCOLLECTIONSRESPONSE._serialized_start=752
+  _LISTCOLLECTIONSRESPONSE._serialized_end=831
+  _GETITEMREQUEST._serialized_start=834
+  _GETITEMREQUEST._serialized_end=977
+  _GETITEMRESPONSE._serialized_start=979
+  _GETITEMRESPONSE._serialized_end=1031
+  _FINDITEMSREQUEST._serialized_start=1034
+  _FINDITEMSREQUEST._serialized_end=1202
+  _FINDITEMSRESPONSE._serialized_start=1204
+  _FINDITEMSRESPONSE._serialized_end=1274
+  _AGGREGATEOPTIONS._serialized_start=1276
+  _AGGREGATEOPTIONS._serialized_end=1397
+  _AGGREGATEOPTIONS_FIELDSENTRY._serialized_start=1352
+  _AGGREGATEOPTIONS_FIELDSENTRY._serialized_end=1397
+  _AGGREGATEREQUEST._serialized_start=1400
+  _AGGREGATEREQUEST._serialized_end=1559
+  _AGGREGATERESPONSE._serialized_start=1561
+  _AGGREGATERESPONSE._serialized_end=1621
+  _DELIVERY._serialized_start=1624
+  _DELIVERY._serialized_end=2276
+# @@protoc_insertion_point(module_scope)
diff --git a/clients/delivery/delivery_pb2_grpc.py b/proto/delivery/delivery_pb2_grpc.py
similarity index 88%
rename from clients/delivery/delivery_pb2_grpc.py
rename to proto/delivery/delivery_pb2_grpc.py
index a95af964835926dd307a71c09192b253964bb880..dfa521fa10f6cdf4e46b3d789d582aba9075e935 100644
--- a/clients/delivery/delivery_pb2_grpc.py
+++ b/proto/delivery/delivery_pb2_grpc.py
@@ -49,6 +49,11 @@ class DeliveryStub(object):
                 request_serializer=delivery_dot_delivery__pb2.FindItemsRequest.SerializeToString,
                 response_deserializer=delivery_dot_delivery__pb2.FindItemsResponse.FromString,
                 )
+        self.Aggregate = channel.unary_unary(
+                '/delivery.Delivery/Aggregate',
+                request_serializer=delivery_dot_delivery__pb2.AggregateRequest.SerializeToString,
+                response_deserializer=delivery_dot_delivery__pb2.AggregateResponse.FromString,
+                )
 
 
 class DeliveryServicer(object):
@@ -96,6 +101,12 @@ class DeliveryServicer(object):
         context.set_details('Method not implemented!')
         raise NotImplementedError('Method not implemented!')
 
+    def Aggregate(self, request, context):
+        """Missing associated documentation comment in .proto file."""
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
 
 def add_DeliveryServicer_to_server(servicer, server):
     rpc_method_handlers = {
@@ -134,6 +145,11 @@ def add_DeliveryServicer_to_server(servicer, server):
                     request_deserializer=delivery_dot_delivery__pb2.FindItemsRequest.FromString,
                     response_serializer=delivery_dot_delivery__pb2.FindItemsResponse.SerializeToString,
             ),
+            'Aggregate': grpc.unary_unary_rpc_method_handler(
+                    servicer.Aggregate,
+                    request_deserializer=delivery_dot_delivery__pb2.AggregateRequest.FromString,
+                    response_serializer=delivery_dot_delivery__pb2.AggregateResponse.SerializeToString,
+            ),
     }
     generic_handler = grpc.method_handlers_generic_handler(
             'delivery.Delivery', rpc_method_handlers)
@@ -262,3 +278,20 @@ class Delivery(object):
             delivery_dot_delivery__pb2.FindItemsResponse.FromString,
             options, channel_credentials,
             insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+
+    @staticmethod
+    def Aggregate(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            insecure=False,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/delivery.Delivery/Aggregate',
+            delivery_dot_delivery__pb2.AggregateRequest.SerializeToString,
+            delivery_dot_delivery__pb2.AggregateResponse.FromString,
+            options, channel_credentials,
+            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
diff --git a/proto/environments/environments_pb2.py b/proto/environments/environments_pb2.py
new file mode 100644
index 0000000000000000000000000000000000000000..f14d3a8610f2b6413903136357fc8cd367288cae
--- /dev/null
+++ b/proto/environments/environments_pb2.py
@@ -0,0 +1,60 @@
+# -*- coding: utf-8 -*-
+# Generated by the protocol buffer compiler.  DO NOT EDIT!
+# source: environments/environments.proto
+"""Generated protocol buffer code."""
+from google.protobuf.internal import builder as _builder
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import descriptor_pool as _descriptor_pool
+from google.protobuf import symbol_database as _symbol_database
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2
+from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2
+
+
+DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1f\x65nvironments/environments.proto\x12\x14\x63ontent.environments\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"\xb4\x01\n\x0b\x45nvironment\x12\n\n\x02id\x18\x01 \x01(\t\x12\x10\n\x08space_id\x18\x02 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x03 \x01(\t\x12\x33\n\nstate_info\x18\x04 \x01(\x0b\x32\x1f.content.environments.StateInfo\x12\x0f\n\x07\x61liases\x18\x06 \x03(\t\x12,\n\x06\x63onfig\x18\n \x01(\x0b\x32\x1c.content.environments.Config\"\xc3\x01\n\tStateInfo\x12\x34\n\x05state\x18\x01 \x01(\x0e\x32%.content.environments.StateInfo.State\x12\x0c\n\x04info\x18\x02 \x01(\t\x12.\n\nstarted_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\"B\n\x05State\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x07\n\x03NEW\x10\x01\x12\r\n\tPREPARING\x10\x02\x12\t\n\x05READY\x10\x03\x12\t\n\x05\x45RROR\x10\x04\"-\n\x06\x43onfig\x12\x11\n\tsource_id\x18\x01 \x01(\t\x12\x10\n\x08\x66\x65\x61tures\x18\x02 \x03(\t\"?\n\rCreateRequest\x12.\n\x03\x65nv\x18\x01 \x01(\x0b\x32!.content.environments.Environment\"D\n\x0e\x43reateResponse\x12\x32\n\x07\x63reated\x18\x01 \x01(\x0b\x32!.content.environments.Environment\"\x1f\n\x0bListRequest\x12\x10\n\x08space_id\x18\x01 \x01(\t\"?\n\x0cListResponse\x12/\n\x04\x65nvs\x18\x01 \x03(\x0b\x32!.content.environments.Environment\".\n\nGetRequest\x12\x10\n\x08space_id\x18\x01 \x01(\t\x12\x0e\n\x06\x65nv_id\x18\x02 \x01(\t\"=\n\x0bGetResponse\x12.\n\x03\x65nv\x18\x01 \x01(\x0b\x32!.content.environments.Environment\"?\n\rUpdateRequest\x12.\n\x03\x65nv\x18\x01 \x01(\x0b\x32!.content.environments.Environment\"B\n\x0fSetAliasRequest\x12\x10\n\x08space_id\x18\x01 \x01(\t\x12\x0e\n\x06\x65nv_id\x18\x02 \x01(\t\x12\r\n\x05\x61lias\x18\x03 \x01(\t\"E\n\x12RemoveAliasRequest\x12\x10\n\x08space_id\x18\x01 \x01(\t\x12\x0e\n\x06\x65nv_id\x18\x02 \x01(\t\x12\r\n\x05\x61lias\x18\x03 \x01(\t\"1\n\rDeleteRequest\x12\x10\n\x08space_id\x18\x01 \x01(\t\x12\x0e\n\x06\x65nv_id\x18\x02 \x01(\t\"i\n\x0eMigrateRequest\x12\x10\n\x08space_id\x18\x01 \x01(\t\x12\x0e\n\x06\x65nv_id\x18\x02 \x01(\t\x12\x35\n\x07options\x18\n \x01(\x0b\x32$.content.environments.MigrateOptions\"\x1e\n\x0eMigrateOptions\x12\x0c\n\x04wait\x18\x01 \x01(\x08\x32\x81\x05\n\x0c\x45nvironments\x12U\n\x06\x43reate\x12#.content.environments.CreateRequest\x1a$.content.environments.CreateResponse\"\x00\x12L\n\x03Get\x12 .content.environments.GetRequest\x1a!.content.environments.GetResponse\"\x00\x12O\n\x04List\x12!.content.environments.ListRequest\x1a\".content.environments.ListResponse\"\x00\x12G\n\x06Update\x12#.content.environments.UpdateRequest\x1a\x16.google.protobuf.Empty\"\x00\x12K\n\x08SetAlias\x12%.content.environments.SetAliasRequest\x1a\x16.google.protobuf.Empty\"\x00\x12Q\n\x0bRemoveAlias\x12(.content.environments.RemoveAliasRequest\x1a\x16.google.protobuf.Empty\"\x00\x12G\n\x06\x44\x65lete\x12#.content.environments.DeleteRequest\x1a\x16.google.protobuf.Empty\"\x00\x12I\n\x07Migrate\x12$.content.environments.MigrateRequest\x1a\x16.google.protobuf.Empty\"\x00\x42>Z<git.perx.ru/perxis/perxis-go/proto/environments;environmentsb\x06proto3')
+
+_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
+_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'environments.environments_pb2', globals())
+if _descriptor._USE_C_DESCRIPTORS == False:
+
+  DESCRIPTOR._options = None
+  DESCRIPTOR._serialized_options = b'Z<git.perx.ru/perxis/perxis-go/proto/environments;environments'
+  _ENVIRONMENT._serialized_start=120
+  _ENVIRONMENT._serialized_end=300
+  _STATEINFO._serialized_start=303
+  _STATEINFO._serialized_end=498
+  _STATEINFO_STATE._serialized_start=432
+  _STATEINFO_STATE._serialized_end=498
+  _CONFIG._serialized_start=500
+  _CONFIG._serialized_end=545
+  _CREATEREQUEST._serialized_start=547
+  _CREATEREQUEST._serialized_end=610
+  _CREATERESPONSE._serialized_start=612
+  _CREATERESPONSE._serialized_end=680
+  _LISTREQUEST._serialized_start=682
+  _LISTREQUEST._serialized_end=713
+  _LISTRESPONSE._serialized_start=715
+  _LISTRESPONSE._serialized_end=778
+  _GETREQUEST._serialized_start=780
+  _GETREQUEST._serialized_end=826
+  _GETRESPONSE._serialized_start=828
+  _GETRESPONSE._serialized_end=889
+  _UPDATEREQUEST._serialized_start=891
+  _UPDATEREQUEST._serialized_end=954
+  _SETALIASREQUEST._serialized_start=956
+  _SETALIASREQUEST._serialized_end=1022
+  _REMOVEALIASREQUEST._serialized_start=1024
+  _REMOVEALIASREQUEST._serialized_end=1093
+  _DELETEREQUEST._serialized_start=1095
+  _DELETEREQUEST._serialized_end=1144
+  _MIGRATEREQUEST._serialized_start=1146
+  _MIGRATEREQUEST._serialized_end=1251
+  _MIGRATEOPTIONS._serialized_start=1253
+  _MIGRATEOPTIONS._serialized_end=1283
+  _ENVIRONMENTS._serialized_start=1286
+  _ENVIRONMENTS._serialized_end=1927
+# @@protoc_insertion_point(module_scope)
diff --git a/clients/environments/environments_pb2_grpc.py b/proto/environments/environments_pb2_grpc.py
similarity index 88%
rename from clients/environments/environments_pb2_grpc.py
rename to proto/environments/environments_pb2_grpc.py
index 079945761305b1ec86c05226ae2ea28417113413..684b892b3a5b90b7816b27bf4254ee6eb58d7a09 100644
--- a/clients/environments/environments_pb2_grpc.py
+++ b/proto/environments/environments_pb2_grpc.py
@@ -50,6 +50,11 @@ class EnvironmentsStub(object):
                 request_serializer=environments_dot_environments__pb2.DeleteRequest.SerializeToString,
                 response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString,
                 )
+        self.Migrate = channel.unary_unary(
+                '/content.environments.Environments/Migrate',
+                request_serializer=environments_dot_environments__pb2.MigrateRequest.SerializeToString,
+                response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString,
+                )
 
 
 class EnvironmentsServicer(object):
@@ -97,6 +102,12 @@ class EnvironmentsServicer(object):
         context.set_details('Method not implemented!')
         raise NotImplementedError('Method not implemented!')
 
+    def Migrate(self, request, context):
+        """Missing associated documentation comment in .proto file."""
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
 
 def add_EnvironmentsServicer_to_server(servicer, server):
     rpc_method_handlers = {
@@ -135,6 +146,11 @@ def add_EnvironmentsServicer_to_server(servicer, server):
                     request_deserializer=environments_dot_environments__pb2.DeleteRequest.FromString,
                     response_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString,
             ),
+            'Migrate': grpc.unary_unary_rpc_method_handler(
+                    servicer.Migrate,
+                    request_deserializer=environments_dot_environments__pb2.MigrateRequest.FromString,
+                    response_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString,
+            ),
     }
     generic_handler = grpc.method_handlers_generic_handler(
             'content.environments.Environments', rpc_method_handlers)
@@ -263,3 +279,20 @@ class Environments(object):
             google_dot_protobuf_dot_empty__pb2.Empty.FromString,
             options, channel_credentials,
             insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+
+    @staticmethod
+    def Migrate(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            insecure=False,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/content.environments.Environments/Migrate',
+            environments_dot_environments__pb2.MigrateRequest.SerializeToString,
+            google_dot_protobuf_dot_empty__pb2.Empty.FromString,
+            options, channel_credentials,
+            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
diff --git a/proto/extensions/extension_pb2.py b/proto/extensions/extension_pb2.py
new file mode 100644
index 0000000000000000000000000000000000000000..29b6f16973bdc6aa15aebeea9803c86e783c5000
--- /dev/null
+++ b/proto/extensions/extension_pb2.py
@@ -0,0 +1,65 @@
+# -*- coding: utf-8 -*-
+# Generated by the protocol buffer compiler.  DO NOT EDIT!
+# source: extensions/extension.proto
+"""Generated protocol buffer code."""
+from google.protobuf.internal import builder as _builder
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import descriptor_pool as _descriptor_pool
+from google.protobuf import symbol_database as _symbol_database
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+from references import references_pb2 as references_dot_references__pb2
+
+
+DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1a\x65xtensions/extension.proto\x12\nextensions\x1a\x1breferences/references.proto\"Y\n\x0eInstallRequest\x12\x13\n\nextensions\x18\x90N \x03(\t\x12\x11\n\x08space_id\x18\x9aN \x01(\t\x12\x0f\n\x06\x65nv_id\x18\xa4N \x01(\t\x12\x0e\n\x05\x66orce\x18\xf4N \x01(\x08\"\xf2\x01\n\x16\x45xtensionRequestResult\x12\x38\n\x05state\x18\x90N \x01(\x0e\x32(.extensions.ExtensionRequestResult.State\x12\x12\n\textension\x18\xf4N \x01(\t\x12\x0c\n\x03msg\x18\xd8O \x01(\t\x12\x0e\n\x05\x65rror\x18\xbcP \x01(\t\x12\x19\n\x10update_available\x18\xa0Q \x01(\x08\"Q\n\x05State\x12\x06\n\x02OK\x10\x00\x12\t\n\x05\x45RROR\x10\x01\x12\x0b\n\x07PENDING\x10\x02\x12\x0f\n\x0bIN_PROGRESS\x10\x03\x12\x17\n\x13PARAMETERS_REQUIRED\x10\x04\"G\n\x0fInstallResponse\x12\x34\n\x07results\x18\x90N \x03(\x0b\x32\".extensions.ExtensionRequestResult\"l\n\x10UninstallRequest\x12\x13\n\nextensions\x18\x90N \x03(\t\x12\x11\n\x08space_id\x18\x9aN \x01(\t\x12\x0f\n\x06\x65nv_id\x18\xa4N \x01(\t\x12\x0f\n\x06remove\x18\xf4N \x01(\x08\x12\x0e\n\x05\x66orce\x18\xd8O \x01(\x08\"I\n\x11UninstallResponse\x12\x34\n\x07results\x18\x90N \x03(\x0b\x32\".extensions.ExtensionRequestResult\"X\n\rUpdateRequest\x12\x13\n\nextensions\x18\x90N \x03(\t\x12\x11\n\x08space_id\x18\x9aN \x01(\t\x12\x0f\n\x06\x65nv_id\x18\xa4N \x01(\t\x12\x0e\n\x05\x66orce\x18\xf4N \x01(\x08\"F\n\x0eUpdateResponse\x12\x34\n\x07results\x18\x90N \x03(\x0b\x32\".extensions.ExtensionRequestResult\"G\n\x0c\x43heckRequest\x12\x13\n\nextensions\x18\x90N \x03(\t\x12\x11\n\x08space_id\x18\x9aN \x01(\t\x12\x0f\n\x06\x65nv_id\x18\xa4N \x01(\t\"E\n\rCheckResponse\x12\x34\n\x07results\x18\x90N \x03(\x0b\x32\".extensions.ExtensionRequestResult\"\xf1\x02\n\rActionRequest\x12\x12\n\textension\x18\xe8\x07 \x01(\t\x12\x0f\n\x06\x61\x63tion\x18\xf4N \x01(\t\x12\x11\n\x08space_id\x18\x84R \x01(\t\x12\x0f\n\x06\x65nv_id\x18\x8eR \x01(\t\x12\x16\n\rcollection_id\x18\x98R \x01(\t\x12\x10\n\x07item_id\x18\xa2R \x01(\t\x12\x11\n\x08item_ids\x18\xacR \x03(\t\x12\x0f\n\x06\x66ields\x18\xb6R \x03(\t\x12:\n\x08metadata\x18\xf8U \x03(\x0b\x32\'.extensions.ActionRequest.MetadataEntry\x12,\n\x04refs\x18\x82V \x03(\x0b\x32\x1d.content.references.Reference\x12.\n\x06params\x18\x8cV \x01(\x0b\x32\x1d.content.references.Reference\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xf4\x02\n\x0e\x41\x63tionResponse\x12\x30\n\x05state\x18\x90N \x01(\x0e\x32 .extensions.ActionResponse.State\x12\x0c\n\x03msg\x18\xf4N \x01(\t\x12\x0e\n\x05\x65rror\x18\xd8O \x01(\t\x12!\n\x04next\x18\xbcP \x03(\x0b\x32\x12.extensions.Action\x12;\n\x08metadata\x18\xa0Q \x03(\x0b\x32(.extensions.ActionResponse.MetadataEntry\x12,\n\x04refs\x18\xd0P \x03(\x0b\x32\x1d.content.references.Reference\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"S\n\x05State\x12\x08\n\x04\x44ONE\x10\x00\x12\t\n\x05\x45RROR\x10\x01\x12\x0b\n\x07PENDING\x10\x02\x12\x0f\n\x0bIN_PROGRESS\x10\x03\x12\x17\n\x13PARAMETERS_REQUIRED\x10\x04\"\xf9\x03\n\x06\x41\x63tion\x12\x12\n\textension\x18\x90N \x01(\t\x12\x0f\n\x06\x61\x63tion\x18\xf4N \x01(\t\x12\r\n\x04name\x18\xd8O \x01(\t\x12\x14\n\x0b\x64\x65scription\x18\xe2O \x01(\t\x12\r\n\x04icon\x18\xecO \x01(\t\x12-\n\x05image\x18\xf6O \x01(\x0b\x32\x1d.content.references.Reference\x12\x0f\n\x06groups\x18\x80P \x03(\t\x12&\n\x04kind\x18\xbcP \x01(\x0e\x32\x17.extensions.Action.Kind\x12\x10\n\x07\x63lasses\x18\xc6P \x03(\t\x12,\n\x04refs\x18\xd0P \x03(\x0b\x32\x1d.content.references.Reference\x12\x1a\n\x11params_collection\x18\xdaP \x01(\t\x12+\n\x07request\x18\xa0Q \x01(\x0b\x32\x19.extensions.ActionRequest\x12\x1a\n\x11navigation_action\x18\x84R \x01(\x08\x12\x19\n\x10navigation_route\x18\x8eR \x01(\t\"n\n\x04Kind\x12\x0b\n\x07\x44\x45\x46\x41ULT\x10\x00\x12\t\n\x05SPACE\x10\x01\x12\x0f\n\x0b\x45NVIRONMENT\x10\x02\x12\x0e\n\nCOLLECTION\x10\x03\x12\x08\n\x04ITEM\x10\x04\x12\t\n\x05ITEMS\x10\x05\x12\x0c\n\x08REVISION\x10\x06\x12\n\n\x06\x43REATE\x10\x07\x32\xe3\x02\n\tExtension\x12\x44\n\x07Install\x12\x1a.extensions.InstallRequest\x1a\x1b.extensions.InstallResponse\"\x00\x12>\n\x05\x43heck\x12\x18.extensions.CheckRequest\x1a\x19.extensions.CheckResponse\"\x00\x12\x41\n\x06Update\x12\x19.extensions.UpdateRequest\x1a\x1a.extensions.UpdateResponse\"\x00\x12J\n\tUninstall\x12\x1c.extensions.UninstallRequest\x1a\x1d.extensions.UninstallResponse\"\x00\x12\x41\n\x06\x41\x63tion\x12\x19.extensions.ActionRequest\x1a\x1a.extensions.ActionResponse\"\x00\x42:Z8git.perx.ru/perxis/perxis-go/proto/extensions;extensionsb\x06proto3')
+
+_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
+_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'extensions.extension_pb2', globals())
+if _descriptor._USE_C_DESCRIPTORS == False:
+
+  DESCRIPTOR._options = None
+  DESCRIPTOR._serialized_options = b'Z8git.perx.ru/perxis/perxis-go/proto/extensions;extensions'
+  _ACTIONREQUEST_METADATAENTRY._options = None
+  _ACTIONREQUEST_METADATAENTRY._serialized_options = b'8\001'
+  _ACTIONRESPONSE_METADATAENTRY._options = None
+  _ACTIONRESPONSE_METADATAENTRY._serialized_options = b'8\001'
+  _INSTALLREQUEST._serialized_start=71
+  _INSTALLREQUEST._serialized_end=160
+  _EXTENSIONREQUESTRESULT._serialized_start=163
+  _EXTENSIONREQUESTRESULT._serialized_end=405
+  _EXTENSIONREQUESTRESULT_STATE._serialized_start=324
+  _EXTENSIONREQUESTRESULT_STATE._serialized_end=405
+  _INSTALLRESPONSE._serialized_start=407
+  _INSTALLRESPONSE._serialized_end=478
+  _UNINSTALLREQUEST._serialized_start=480
+  _UNINSTALLREQUEST._serialized_end=588
+  _UNINSTALLRESPONSE._serialized_start=590
+  _UNINSTALLRESPONSE._serialized_end=663
+  _UPDATEREQUEST._serialized_start=665
+  _UPDATEREQUEST._serialized_end=753
+  _UPDATERESPONSE._serialized_start=755
+  _UPDATERESPONSE._serialized_end=825
+  _CHECKREQUEST._serialized_start=827
+  _CHECKREQUEST._serialized_end=898
+  _CHECKRESPONSE._serialized_start=900
+  _CHECKRESPONSE._serialized_end=969
+  _ACTIONREQUEST._serialized_start=972
+  _ACTIONREQUEST._serialized_end=1341
+  _ACTIONREQUEST_METADATAENTRY._serialized_start=1294
+  _ACTIONREQUEST_METADATAENTRY._serialized_end=1341
+  _ACTIONRESPONSE._serialized_start=1344
+  _ACTIONRESPONSE._serialized_end=1716
+  _ACTIONRESPONSE_METADATAENTRY._serialized_start=1294
+  _ACTIONRESPONSE_METADATAENTRY._serialized_end=1341
+  _ACTIONRESPONSE_STATE._serialized_start=1633
+  _ACTIONRESPONSE_STATE._serialized_end=1716
+  _ACTION._serialized_start=1719
+  _ACTION._serialized_end=2224
+  _ACTION_KIND._serialized_start=2114
+  _ACTION_KIND._serialized_end=2224
+  _EXTENSION._serialized_start=2227
+  _EXTENSION._serialized_end=2582
+# @@protoc_insertion_point(module_scope)
diff --git a/clients/extensions/extension_pb2_grpc.py b/proto/extensions/extension_pb2_grpc.py
similarity index 100%
rename from clients/extensions/extension_pb2_grpc.py
rename to proto/extensions/extension_pb2_grpc.py
diff --git a/proto/extensions/manager_pb2.py b/proto/extensions/manager_pb2.py
new file mode 100644
index 0000000000000000000000000000000000000000..9625286a1bc0b25683f5e7211b8688d740ed3437
--- /dev/null
+++ b/proto/extensions/manager_pb2.py
@@ -0,0 +1,50 @@
+# -*- coding: utf-8 -*-
+# Generated by the protocol buffer compiler.  DO NOT EDIT!
+# source: extensions/manager.proto
+"""Generated protocol buffer code."""
+from google.protobuf.internal import builder as _builder
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import descriptor_pool as _descriptor_pool
+from google.protobuf import symbol_database as _symbol_database
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+
+
+DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x18\x65xtensions/manager.proto\x12\nextensions\"\x8d\x02\n\x13\x45xtensionDescriptor\x12\x12\n\textension\x18\x90N \x01(\t\x12\x0e\n\x05title\x18\x9aN \x01(\t\x12\x14\n\x0b\x64\x65scription\x18\xa4N \x01(\t\x12\x10\n\x07version\x18\xf4N \x01(\t\x12\x1c\n\x13version_description\x18\xfeN \x01(\t\x12\r\n\x04\x64\x65ps\x18\xd8O \x03(\t\x12\x0b\n\x03url\x18\x05 \x01(\t\x12?\n\x08metadata\x18\x06 \x03(\x0b\x32-.extensions.ExtensionDescriptor.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"P\n\x19RegisterExtensionsRequest\x12\x33\n\nextensions\x18\x01 \x03(\x0b\x32\x1f.extensions.ExtensionDescriptor\"\x1c\n\x1aRegisterExtensionsResponse\"R\n\x1bUnregisterExtensionsRequest\x12\x33\n\nextensions\x18\x01 \x03(\x0b\x32\x1f.extensions.ExtensionDescriptor\"\x1e\n\x1cUnregisterExtensionsResponse\")\n\x14ListExtensionsFilter\x12\x11\n\textension\x18\x01 \x03(\t\"I\n\x15ListExtensionsRequest\x12\x30\n\x06\x66ilter\x18\x01 \x01(\x0b\x32 .extensions.ListExtensionsFilter\"M\n\x16ListExtensionsResponse\x12\x33\n\nextensions\x18\x01 \x03(\x0b\x32\x1f.extensions.ExtensionDescriptor\"\xf5\x01\n\x0fSpaceExtensions\x12\x12\n\textension\x18\x90N \x01(\t\x12\x0e\n\x05title\x18\x9aN \x01(\t\x12\x10\n\x07version\x18\xf4N \x01(\t\x12\r\n\x04\x64\x65ps\x18\xd8O \x03(\t\x12\x31\n\x05state\x18\xbcP \x01(\x0e\x32!.extensions.SpaceExtensions.State\x12\x15\n\x0cstatus_error\x18\xa0Q \x01(\t\x12\x13\n\nstatus_msg\x18\x84R \x01(\t\">\n\x05State\x12\x0b\n\x07PENDING\x10\x00\x12\r\n\tINSTALLED\x10\x01\x12\x0f\n\x0bIN_PROGRESS\x10\x02\x12\x08\n\x04\x46\x41IL\x10\x03\x32\xc1\x02\n\x10\x45xtensionManager\x12\x65\n\x12RegisterExtensions\x12%.extensions.RegisterExtensionsRequest\x1a&.extensions.RegisterExtensionsResponse\"\x00\x12k\n\x14UnregisterExtensions\x12\'.extensions.UnregisterExtensionsRequest\x1a(.extensions.UnregisterExtensionsResponse\"\x00\x12Y\n\x0eListExtensions\x12!.extensions.ListExtensionsRequest\x1a\".extensions.ListExtensionsResponse\"\x00\x42:Z8git.perx.ru/perxis/perxis-go/proto/extensions;extensionsb\x06proto3')
+
+_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
+_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'extensions.manager_pb2', globals())
+if _descriptor._USE_C_DESCRIPTORS == False:
+
+  DESCRIPTOR._options = None
+  DESCRIPTOR._serialized_options = b'Z8git.perx.ru/perxis/perxis-go/proto/extensions;extensions'
+  _EXTENSIONDESCRIPTOR_METADATAENTRY._options = None
+  _EXTENSIONDESCRIPTOR_METADATAENTRY._serialized_options = b'8\001'
+  _EXTENSIONDESCRIPTOR._serialized_start=41
+  _EXTENSIONDESCRIPTOR._serialized_end=310
+  _EXTENSIONDESCRIPTOR_METADATAENTRY._serialized_start=263
+  _EXTENSIONDESCRIPTOR_METADATAENTRY._serialized_end=310
+  _REGISTEREXTENSIONSREQUEST._serialized_start=312
+  _REGISTEREXTENSIONSREQUEST._serialized_end=392
+  _REGISTEREXTENSIONSRESPONSE._serialized_start=394
+  _REGISTEREXTENSIONSRESPONSE._serialized_end=422
+  _UNREGISTEREXTENSIONSREQUEST._serialized_start=424
+  _UNREGISTEREXTENSIONSREQUEST._serialized_end=506
+  _UNREGISTEREXTENSIONSRESPONSE._serialized_start=508
+  _UNREGISTEREXTENSIONSRESPONSE._serialized_end=538
+  _LISTEXTENSIONSFILTER._serialized_start=540
+  _LISTEXTENSIONSFILTER._serialized_end=581
+  _LISTEXTENSIONSREQUEST._serialized_start=583
+  _LISTEXTENSIONSREQUEST._serialized_end=656
+  _LISTEXTENSIONSRESPONSE._serialized_start=658
+  _LISTEXTENSIONSRESPONSE._serialized_end=735
+  _SPACEEXTENSIONS._serialized_start=738
+  _SPACEEXTENSIONS._serialized_end=983
+  _SPACEEXTENSIONS_STATE._serialized_start=921
+  _SPACEEXTENSIONS_STATE._serialized_end=983
+  _EXTENSIONMANAGER._serialized_start=986
+  _EXTENSIONMANAGER._serialized_end=1307
+# @@protoc_insertion_point(module_scope)
diff --git a/clients/extensions/manager_pb2_grpc.py b/proto/extensions/manager_pb2_grpc.py
similarity index 100%
rename from clients/extensions/manager_pb2_grpc.py
rename to proto/extensions/manager_pb2_grpc.py
diff --git a/proto/files/files_pb2.py b/proto/files/files_pb2.py
new file mode 100644
index 0000000000000000000000000000000000000000..fe8f93d114953142eb3868c31ac557d3f5146be2
--- /dev/null
+++ b/proto/files/files_pb2.py
@@ -0,0 +1,63 @@
+# -*- coding: utf-8 -*-
+# Generated by the protocol buffer compiler.  DO NOT EDIT!
+# source: files/files.proto
+"""Generated protocol buffer code."""
+from google.protobuf.internal import builder as _builder
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import descriptor_pool as _descriptor_pool
+from google.protobuf import symbol_database as _symbol_database
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2
+
+
+DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x11\x66iles/files.proto\x12\x05\x66iles\x1a\x1bgoogle/protobuf/empty.proto\"N\n\x04\x46ile\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x0c\n\x04size\x18\x03 \x01(\x05\x12\x11\n\tmime_type\x18\x04 \x01(\t\x12\x0b\n\x03url\x18\x05 \x01(\t\"\x8a\x01\n\x0fMultipartUpload\x12\x19\n\x04\x66ile\x18\x01 \x01(\x0b\x32\x0b.files.File\x12\x11\n\tupload_id\x18\x02 \x01(\t\x12\x11\n\tpart_size\x18\x03 \x01(\x05\x12\x11\n\tpart_urls\x18\x04 \x03(\t\x12#\n\x05parts\x18\x05 \x03(\x0b\x32\x14.files.CompletedPart\"7\n\x06Upload\x12\x19\n\x04\x66ile\x18\x01 \x01(\x0b\x32\x0b.files.File\x12\x12\n\nupload_url\x18\x02 \x01(\t\"+\n\rCompletedPart\x12\x0e\n\x06number\x18\x01 \x01(\x05\x12\n\n\x02id\x18\x02 \x01(\t\"<\n\x12StartUploadRequest\x12&\n\x06upload\x18\x01 \x01(\x0b\x32\x16.files.MultipartUpload\"=\n\x13StartUploadResponse\x12&\n\x06upload\x18\x01 \x01(\x0b\x32\x16.files.MultipartUpload\"?\n\x15\x43ompleteUploadRequest\x12&\n\x06upload\x18\x01 \x01(\x0b\x32\x16.files.MultipartUpload\"@\n\x16\x43ompleteUploadResponse\x12&\n\x06upload\x18\x01 \x01(\x0b\x32\x16.files.MultipartUpload\"<\n\x12\x41\x62ortUploadRequest\x12&\n\x06upload\x18\x01 \x01(\x0b\x32\x16.files.MultipartUpload\"\x15\n\x13\x41\x62ortUploadResponse\";\n\x11MoveUploadRequest\x12&\n\x06upload\x18\x01 \x01(\x0b\x32\x16.files.MultipartUpload\"/\n\x12MoveUploadResponse\x12\x19\n\x04\x66ile\x18\x01 \x01(\x0b\x32\x0b.files.File\"*\n\rUploadRequest\x12\x19\n\x04\x66ile\x18\x01 \x01(\x0b\x32\x0b.files.File\"/\n\x0eUploadResponse\x12\x1d\n\x06upload\x18\x01 \x01(\x0b\x32\r.files.Upload\"\x1c\n\x0eGetFileRequest\x12\n\n\x02id\x18\x01 \x01(\t\",\n\x0fGetFileResponse\x12\x19\n\x04\x66ile\x18\x01 \x01(\x0b\x32\x0b.files.File\".\n\x11\x44\x65leteFileRequest\x12\x19\n\x04\x66ile\x18\x01 \x01(\x0b\x32\x0b.files.File\"\x14\n\x12\x44\x65leteFileResponse2\xe0\x03\n\x05\x46iles\x12\x46\n\x0bStartUpload\x12\x19.files.StartUploadRequest\x1a\x1a.files.StartUploadResponse\"\x00\x12O\n\x0e\x43ompleteUpload\x12\x1c.files.CompleteUploadRequest\x1a\x1d.files.CompleteUploadResponse\"\x00\x12\x42\n\x0b\x41\x62ortUpload\x12\x19.files.AbortUploadRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x43\n\nMoveUpload\x12\x18.files.MoveUploadRequest\x1a\x19.files.MoveUploadResponse\"\x00\x12\x37\n\x06Upload\x12\x14.files.UploadRequest\x1a\x15.files.UploadResponse\"\x00\x12:\n\x07GetFile\x12\x15.files.GetFileRequest\x1a\x16.files.GetFileResponse\"\x00\x12@\n\nDeleteFile\x12\x18.files.DeleteFileRequest\x1a\x16.google.protobuf.Empty\"\x00\x42\x30Z.git.perx.ru/perxis/perxis-go/proto/files;filesb\x06proto3')
+
+_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
+_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'files.files_pb2', globals())
+if _descriptor._USE_C_DESCRIPTORS == False:
+
+  DESCRIPTOR._options = None
+  DESCRIPTOR._serialized_options = b'Z.git.perx.ru/perxis/perxis-go/proto/files;files'
+  _FILE._serialized_start=57
+  _FILE._serialized_end=135
+  _MULTIPARTUPLOAD._serialized_start=138
+  _MULTIPARTUPLOAD._serialized_end=276
+  _UPLOAD._serialized_start=278
+  _UPLOAD._serialized_end=333
+  _COMPLETEDPART._serialized_start=335
+  _COMPLETEDPART._serialized_end=378
+  _STARTUPLOADREQUEST._serialized_start=380
+  _STARTUPLOADREQUEST._serialized_end=440
+  _STARTUPLOADRESPONSE._serialized_start=442
+  _STARTUPLOADRESPONSE._serialized_end=503
+  _COMPLETEUPLOADREQUEST._serialized_start=505
+  _COMPLETEUPLOADREQUEST._serialized_end=568
+  _COMPLETEUPLOADRESPONSE._serialized_start=570
+  _COMPLETEUPLOADRESPONSE._serialized_end=634
+  _ABORTUPLOADREQUEST._serialized_start=636
+  _ABORTUPLOADREQUEST._serialized_end=696
+  _ABORTUPLOADRESPONSE._serialized_start=698
+  _ABORTUPLOADRESPONSE._serialized_end=719
+  _MOVEUPLOADREQUEST._serialized_start=721
+  _MOVEUPLOADREQUEST._serialized_end=780
+  _MOVEUPLOADRESPONSE._serialized_start=782
+  _MOVEUPLOADRESPONSE._serialized_end=829
+  _UPLOADREQUEST._serialized_start=831
+  _UPLOADREQUEST._serialized_end=873
+  _UPLOADRESPONSE._serialized_start=875
+  _UPLOADRESPONSE._serialized_end=922
+  _GETFILEREQUEST._serialized_start=924
+  _GETFILEREQUEST._serialized_end=952
+  _GETFILERESPONSE._serialized_start=954
+  _GETFILERESPONSE._serialized_end=998
+  _DELETEFILEREQUEST._serialized_start=1000
+  _DELETEFILEREQUEST._serialized_end=1046
+  _DELETEFILERESPONSE._serialized_start=1048
+  _DELETEFILERESPONSE._serialized_end=1068
+  _FILES._serialized_start=1071
+  _FILES._serialized_end=1551
+# @@protoc_insertion_point(module_scope)
diff --git a/clients/files/files_pb2_grpc.py b/proto/files/files_pb2_grpc.py
similarity index 100%
rename from clients/files/files_pb2_grpc.py
rename to proto/files/files_pb2_grpc.py
diff --git a/clients/images/images_pb2.py b/proto/images/images_pb2.py
similarity index 53%
rename from clients/images/images_pb2.py
rename to proto/images/images_pb2.py
index ed24084b9c2c5c82a1ded7a54fb88370f2157278..1f8422f7a956324bccff1817470dc15901e958aa 100644
--- a/clients/images/images_pb2.py
+++ b/proto/images/images_pb2.py
@@ -2,10 +2,9 @@
 # Generated by the protocol buffer compiler.  DO NOT EDIT!
 # source: images/images.proto
 """Generated protocol buffer code."""
+from google.protobuf.internal import builder as _builder
 from google.protobuf import descriptor as _descriptor
 from google.protobuf import descriptor_pool as _descriptor_pool
-from google.protobuf import message as _message
-from google.protobuf import reflection as _reflection
 from google.protobuf import symbol_database as _symbol_database
 # @@protoc_insertion_point(imports)
 
@@ -17,42 +16,8 @@ from files import files_pb2 as files_dot_files__pb2
 
 DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x13images/images.proto\x12\x06images\x1a\x11\x66iles/files.proto\"\"\n\x05Param\x12\n\n\x02op\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x03(\t\"\x83\x01\n\nGetRequest\x12\x1b\n\x06source\x18\x01 \x01(\x0b\x32\x0b.files.File\x12+\n\x04opts\x18\x02 \x01(\x0b\x32\x1d.images.GetRequest.GetOptions\x1a+\n\nGetOptions\x12\x1d\n\x06params\x18\x01 \x03(\x0b\x32\r.images.Param\"*\n\x0bGetResponse\x12\x1b\n\x06result\x18\x01 \x01(\x0b\x32\x0b.files.File2:\n\x06Images\x12\x30\n\x03Get\x12\x12.images.GetRequest\x1a\x13.images.GetResponse\"\x00\x42\x32Z0git.perx.ru/perxis/perxis-go/proto/images;imagesb\x06proto3')
 
-
-
-_PARAM = DESCRIPTOR.message_types_by_name['Param']
-_GETREQUEST = DESCRIPTOR.message_types_by_name['GetRequest']
-_GETREQUEST_GETOPTIONS = _GETREQUEST.nested_types_by_name['GetOptions']
-_GETRESPONSE = DESCRIPTOR.message_types_by_name['GetResponse']
-Param = _reflection.GeneratedProtocolMessageType('Param', (_message.Message,), {
-  'DESCRIPTOR' : _PARAM,
-  '__module__' : 'images.images_pb2'
-  # @@protoc_insertion_point(class_scope:images.Param)
-  })
-_sym_db.RegisterMessage(Param)
-
-GetRequest = _reflection.GeneratedProtocolMessageType('GetRequest', (_message.Message,), {
-
-  'GetOptions' : _reflection.GeneratedProtocolMessageType('GetOptions', (_message.Message,), {
-    'DESCRIPTOR' : _GETREQUEST_GETOPTIONS,
-    '__module__' : 'images.images_pb2'
-    # @@protoc_insertion_point(class_scope:images.GetRequest.GetOptions)
-    })
-  ,
-  'DESCRIPTOR' : _GETREQUEST,
-  '__module__' : 'images.images_pb2'
-  # @@protoc_insertion_point(class_scope:images.GetRequest)
-  })
-_sym_db.RegisterMessage(GetRequest)
-_sym_db.RegisterMessage(GetRequest.GetOptions)
-
-GetResponse = _reflection.GeneratedProtocolMessageType('GetResponse', (_message.Message,), {
-  'DESCRIPTOR' : _GETRESPONSE,
-  '__module__' : 'images.images_pb2'
-  # @@protoc_insertion_point(class_scope:images.GetResponse)
-  })
-_sym_db.RegisterMessage(GetResponse)
-
-_IMAGES = DESCRIPTOR.services_by_name['Images']
+_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
+_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'images.images_pb2', globals())
 if _descriptor._USE_C_DESCRIPTORS == False:
 
   DESCRIPTOR._options = None
diff --git a/clients/images/images_pb2_grpc.py b/proto/images/images_pb2_grpc.py
similarity index 100%
rename from clients/images/images_pb2_grpc.py
rename to proto/images/images_pb2_grpc.py
diff --git a/proto/invitations/invitations_pb2.py b/proto/invitations/invitations_pb2.py
new file mode 100644
index 0000000000000000000000000000000000000000..9e613f199f738cb548b95e1947663fcaa9a81cc8
--- /dev/null
+++ b/proto/invitations/invitations_pb2.py
@@ -0,0 +1,59 @@
+# -*- coding: utf-8 -*-
+# Generated by the protocol buffer compiler.  DO NOT EDIT!
+# source: invitations/invitations.proto
+"""Generated protocol buffer code."""
+from google.protobuf.internal import builder as _builder
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import descriptor_pool as _descriptor_pool
+from google.protobuf import symbol_database as _symbol_database
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2
+from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2
+from google.protobuf import wrappers_pb2 as google_dot_protobuf_dot_wrappers__pb2
+
+
+DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1dinvitations/invitations.proto\x12\x13\x63ontent.invitations\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1egoogle/protobuf/wrappers.proto\"\xca\x01\n\nInvitation\x12\n\n\x02id\x18\x01 \x01(\t\x12\r\n\x05\x65mail\x18\x02 \x01(\t\x12\x0e\n\x06org_id\x18\x03 \x01(\t\x12\x10\n\x08space_id\x18\x04 \x01(\t\x12\x10\n\x08owner_id\x18\x05 \x01(\t\x12\x0c\n\x04role\x18\x06 \x01(\t\x12.\n\ncreated_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12/\n\x0bvalid_until\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\"e\n\x06\x46ilter\x12\n\n\x02id\x18\x01 \x03(\t\x12\r\n\x05\x65mail\x18\x02 \x03(\t\x12\x0e\n\x06org_id\x18\x03 \x03(\t\x12\x10\n\x08space_id\x18\x04 \x03(\t\x12\x10\n\x08owner_id\x18\x05 \x03(\t\x12\x0c\n\x04role\x18\x06 \x03(\t\"@\n\x0b\x46indOptions\x12\x0c\n\x04sort\x18\x01 \x03(\t\x12\x10\n\x08page_num\x18\x02 \x01(\x05\x12\x11\n\tpage_size\x18\x03 \x01(\x05\"D\n\rCreateRequest\x12\x33\n\ninvitation\x18\x01 \x01(\x0b\x32\x1f.content.invitations.Invitation\"E\n\x0e\x43reateResponse\x12\x33\n\ninvitation\x18\x01 \x01(\x0b\x32\x1f.content.invitations.Invitation\"#\n\nGetRequest\x12\x15\n\rinvitation_id\x18\x01 \x01(\t\"B\n\x0bGetResponse\x12\x33\n\ninvitation\x18\x01 \x01(\x0b\x32\x1f.content.invitations.Invitation\"\xdb\x01\n\rUpdateRequest\x12\x15\n\rinvitation_id\x18\x01 \x01(\t\x12(\n\x04sent\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12+\n\x07pending\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12+\n\x07sent_at\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12/\n\x0bvalid_until\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\"\x1a\n\x18UpdateInvitationResponse\"7\n\rAcceptRequest\x12\x15\n\rinvitation_id\x18\x01 \x01(\t\x12\x0f\n\x07user_id\x18\x02 \x01(\t\"\x1a\n\x18\x41\x63\x63\x65ptInvitationResponse\"j\n\x0b\x46indRequest\x12+\n\x06\x66ilter\x18\x01 \x01(\x0b\x32\x1b.content.invitations.Filter\x12.\n\x04opts\x18\x02 \x01(\x0b\x32 .content.invitations.FindOptions\"S\n\x0c\x46indResponse\x12\x34\n\x0binvitations\x18\x01 \x03(\x0b\x32\x1f.content.invitations.Invitation\x12\r\n\x05total\x18\x02 \x01(\x03\"&\n\rDeleteRequest\x12\x15\n\rinvitation_id\x18\x01 \x01(\t\"\x1f\n\x1d\x44\x65leteSpaceInvitationResponse2\x8d\x03\n\x0bInvitations\x12S\n\x06\x43reate\x12\".content.invitations.CreateRequest\x1a#.content.invitations.CreateResponse\"\x00\x12J\n\x03Get\x12\x1f.content.invitations.GetRequest\x1a .content.invitations.GetResponse\"\x00\x12\x46\n\x06\x41\x63\x63\x65pt\x12\".content.invitations.AcceptRequest\x1a\x16.google.protobuf.Empty\"\x00\x12M\n\x04\x46ind\x12 .content.invitations.FindRequest\x1a!.content.invitations.FindResponse\"\x00\x12\x46\n\x06\x44\x65lete\x12\".content.invitations.DeleteRequest\x1a\x16.google.protobuf.Empty\"\x00\x42<Z:git.perx.ru/perxis/perxis-go/proto/invitations;invitationsb\x06proto3')
+
+_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
+_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'invitations.invitations_pb2', globals())
+if _descriptor._USE_C_DESCRIPTORS == False:
+
+  DESCRIPTOR._options = None
+  DESCRIPTOR._serialized_options = b'Z:git.perx.ru/perxis/perxis-go/proto/invitations;invitations'
+  _INVITATION._serialized_start=149
+  _INVITATION._serialized_end=351
+  _FILTER._serialized_start=353
+  _FILTER._serialized_end=454
+  _FINDOPTIONS._serialized_start=456
+  _FINDOPTIONS._serialized_end=520
+  _CREATEREQUEST._serialized_start=522
+  _CREATEREQUEST._serialized_end=590
+  _CREATERESPONSE._serialized_start=592
+  _CREATERESPONSE._serialized_end=661
+  _GETREQUEST._serialized_start=663
+  _GETREQUEST._serialized_end=698
+  _GETRESPONSE._serialized_start=700
+  _GETRESPONSE._serialized_end=766
+  _UPDATEREQUEST._serialized_start=769
+  _UPDATEREQUEST._serialized_end=988
+  _UPDATEINVITATIONRESPONSE._serialized_start=990
+  _UPDATEINVITATIONRESPONSE._serialized_end=1016
+  _ACCEPTREQUEST._serialized_start=1018
+  _ACCEPTREQUEST._serialized_end=1073
+  _ACCEPTINVITATIONRESPONSE._serialized_start=1075
+  _ACCEPTINVITATIONRESPONSE._serialized_end=1101
+  _FINDREQUEST._serialized_start=1103
+  _FINDREQUEST._serialized_end=1209
+  _FINDRESPONSE._serialized_start=1211
+  _FINDRESPONSE._serialized_end=1294
+  _DELETEREQUEST._serialized_start=1296
+  _DELETEREQUEST._serialized_end=1334
+  _DELETESPACEINVITATIONRESPONSE._serialized_start=1336
+  _DELETESPACEINVITATIONRESPONSE._serialized_end=1367
+  _INVITATIONS._serialized_start=1370
+  _INVITATIONS._serialized_end=1767
+# @@protoc_insertion_point(module_scope)
diff --git a/clients/invitations/invitations_pb2_grpc.py b/proto/invitations/invitations_pb2_grpc.py
similarity index 100%
rename from clients/invitations/invitations_pb2_grpc.py
rename to proto/invitations/invitations_pb2_grpc.py
diff --git a/proto/items/items_pb2.py b/proto/items/items_pb2.py
new file mode 100644
index 0000000000000000000000000000000000000000..6f7d4b050e48076a5791de9b103c3935e55d65b3
--- /dev/null
+++ b/proto/items/items_pb2.py
@@ -0,0 +1,148 @@
+# -*- coding: utf-8 -*-
+# Generated by the protocol buffer compiler.  DO NOT EDIT!
+# source: items/items.proto
+"""Generated protocol buffer code."""
+from google.protobuf.internal import builder as _builder
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import descriptor_pool as _descriptor_pool
+from google.protobuf import symbol_database as _symbol_database
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2
+from common import common_pb2 as common_dot_common__pb2
+from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2
+from google.protobuf import struct_pb2 as google_dot_protobuf_dot_struct__pb2
+
+
+DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x11items/items.proto\x12\rcontent.items\x1a\x1bgoogle/protobuf/empty.proto\x1a\x13\x63ommon/common.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1cgoogle/protobuf/struct.proto\"\'\n\x05\x45rror\x12\x0f\n\x07message\x18\x01 \x01(\t\x12\r\n\x05\x66ield\x18\x02 \x01(\t\"3\n\x0b\x44\x65\x63odeError\x12$\n\x06\x65rrors\x18\x02 \x03(\x0b\x32\x14.content.items.Error\"7\n\x0fValidationError\x12$\n\x06\x65rrors\x18\x02 \x03(\x0b\x32\x14.content.items.Error\"9\n\x11ModificationError\x12$\n\x06\x65rrors\x18\x02 \x03(\x0b\x32\x14.content.items.Error\"g\n\x0bPermissions\x12\x0c\n\x04\x65\x64it\x18\x01 \x01(\x08\x12\x0f\n\x07\x61rchive\x18\x02 \x01(\x08\x12\x0f\n\x07publish\x18\x03 \x01(\x08\x12\x13\n\x0bsoft_delete\x18\x04 \x01(\x08\x12\x13\n\x0bhard_delete\x18\x05 \x01(\x08\"\xb8\x06\n\x04Item\x12\n\n\x02id\x18\x01 \x01(\t\x12\x10\n\x08space_id\x18\x02 \x01(\t\x12\x0e\n\x06\x65nv_id\x18\x03 \x01(\t\x12\x15\n\rcollection_id\x18\x04 \x01(\t\x12(\n\x05state\x18\x05 \x01(\x0e\x32\x19.content.items.Item.State\x12\x32\n\x0e\x63reated_rev_at\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x12\n\ncreated_by\x18\x07 \x01(\t\x12.\n\ncreated_at\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x12\n\nupdated_by\x18\t \x01(\t\x12.\n\nupdated_at\x18\n \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12%\n\x04\x64\x61ta\x18\x0b \x01(\x0b\x32\x17.google.protobuf.Struct\x12;\n\x0ctranslations\x18\x0c \x03(\x0b\x32%.content.items.Item.TranslationsEntry\x12\x13\n\x0brevision_id\x18\r \x01(\t\x12\x30\n\x0cpublished_at\x18\x0e \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x14\n\x0cpublished_by\x18\x0f \x01(\t\x12/\n\x0b\x61rchived_at\x18\x10 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x13\n\x0b\x61rchived_by\x18\x11 \x01(\t\x12\x0e\n\x06locale\x18\x12 \x01(\t\x12\x0f\n\x07\x64\x65leted\x18\x13 \x01(\x08\x12\x0e\n\x06hidden\x18\x14 \x01(\x08\x12\x10\n\x08template\x18\x15 \x01(\x08\x12/\n\x0bpermissions\x18\x16 \x01(\x0b\x32\x1a.content.items.Permissions\x1aL\n\x11TranslationsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12&\n\x05value\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct:\x02\x38\x01\"<\n\x05State\x12\t\n\x05\x44RAFT\x10\x00\x12\r\n\tPUBLISHED\x10\x01\x12\x0b\n\x07\x43HANGED\x10\x02\x12\x0c\n\x08\x41RCHIVED\x10\x03\"W\n\x0b\x45ventCreate\x12\x10\n\x08space_id\x18\x01 \x01(\t\x12\x0e\n\x06\x65nv_id\x18\x02 \x01(\t\x12\x15\n\rcollection_id\x18\x03 \x01(\t\x12\x0f\n\x07item_id\x18\x04 \x01(\t\"W\n\x0b\x45ventUpdate\x12\x10\n\x08space_id\x18\x01 \x01(\t\x12\x0e\n\x06\x65nv_id\x18\x02 \x01(\t\x12\x15\n\rcollection_id\x18\x03 \x01(\t\x12\x0f\n\x07item_id\x18\x04 \x01(\t\"X\n\x0c\x45ventPublish\x12\x10\n\x08space_id\x18\x01 \x01(\t\x12\x0e\n\x06\x65nv_id\x18\x02 \x01(\t\x12\x15\n\rcollection_id\x18\x03 \x01(\t\x12\x0f\n\x07item_id\x18\x04 \x01(\t\"Z\n\x0e\x45ventUnpublish\x12\x10\n\x08space_id\x18\x01 \x01(\t\x12\x0e\n\x06\x65nv_id\x18\x02 \x01(\t\x12\x15\n\rcollection_id\x18\x03 \x01(\t\x12\x0f\n\x07item_id\x18\x04 \x01(\t\"W\n\x0b\x45ventDelete\x12\x10\n\x08space_id\x18\x01 \x01(\t\x12\x0e\n\x06\x65nv_id\x18\x02 \x01(\t\x12\x15\n\rcollection_id\x18\x03 \x01(\t\x12\x0f\n\x07item_id\x18\x04 \x01(\t\"=\n\x06\x46ilter\x12\n\n\x02id\x18\x01 \x03(\t\x12\x1c\n\x04\x64\x61ta\x18\x02 \x03(\x0b\x32\x0e.common.Filter\x12\t\n\x01q\x18\x03 \x03(\t\"%\n\rCreateOptions\x12\x14\n\x0cupdate_attrs\x18\x01 \x01(\x08\"x\n\x0b\x46indOptions\x12$\n\x07options\x18\x02 \x01(\x0b\x32\x13.common.FindOptions\x12\x0f\n\x07\x64\x65leted\x18\x03 \x01(\x08\x12\x0f\n\x07regular\x18\x04 \x01(\x08\x12\x0e\n\x06hidden\x18\x05 \x01(\x08\x12\x11\n\ttemplates\x18\x06 \x01(\x08\"%\n\rUpdateOptions\x12\x14\n\x0cupdate_attrs\x18\x01 \x01(\x08\"(\n\x13GetPublishedOptions\x12\x11\n\tlocale_id\x18\x01 \x01(\t\"\x1e\n\rDeleteOptions\x12\r\n\x05\x65rase\x18\x01 \x01(\x08\"&\n\x0ePublishOptions\x12\x14\n\x0cupdate_attrs\x18\x01 \x01(\x08\"\x83\x01\n\x14\x46indPublishedOptions\x12$\n\x07options\x18\x02 \x01(\x0b\x32\x13.common.FindOptions\x12\x11\n\tlocale_id\x18\x03 \x01(\t\x12\x0f\n\x07regular\x18\x04 \x01(\x08\x12\x0e\n\x06hidden\x18\x05 \x01(\x08\x12\x11\n\ttemplates\x18\x06 \x01(\x08\";\n\x13\x46indArchivedOptions\x12$\n\x07options\x18\x02 \x01(\x0b\x32\x13.common.FindOptions\"<\n\x14ListRevisionsOptions\x12$\n\x07options\x18\x02 \x01(\x0b\x32\x13.common.FindOptions\"~\n\x10\x41ggregateOptions\x12;\n\x06\x66ields\x18\x01 \x03(\x0b\x32+.content.items.AggregateOptions.FieldsEntry\x1a-\n\x0b\x46ieldsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\x90\x01\n\x19\x41ggregatePublishedOptions\x12\x44\n\x06\x66ields\x18\x01 \x03(\x0b\x32\x34.content.items.AggregatePublishedOptions.FieldsEntry\x1a-\n\x0b\x46ieldsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"a\n\rCreateRequest\x12!\n\x04item\x18\x01 \x01(\x0b\x32\x13.content.items.Item\x12-\n\x07options\x18\x02 \x01(\x0b\x32\x1c.content.items.CreateOptions\"6\n\x0e\x43reateResponse\x12$\n\x07\x63reated\x18\x01 \x01(\x0b\x32\x13.content.items.Item\"6\n\x11IntrospectRequest\x12!\n\x04item\x18\x01 \x01(\x0b\x32\x13.content.items.Item\"\x8b\x01\n\x12IntrospectResponse\x12!\n\x04item\x18\x01 \x01(\x0b\x32\x13.content.items.Item\x12\x0e\n\x06schema\x18\x02 \x01(\t\x12\x42\n\x11validation_errors\x18\x03 \x03(\x0b\x32\'.common.Error.BadRequest.FieldViolation\"V\n\nGetRequest\x12\x10\n\x08space_id\x18\x01 \x01(\t\x12\x0e\n\x06\x65nv_id\x18\x02 \x01(\t\x12\x15\n\rcollection_id\x18\x03 \x01(\t\x12\x0f\n\x07item_id\x18\x04 \x01(\t\"0\n\x0bGetResponse\x12!\n\x04item\x18\x01 \x01(\x0b\x32\x13.content.items.Item\"\x9a\x01\n\x0b\x46indRequest\x12\x10\n\x08space_id\x18\x01 \x01(\t\x12\x0e\n\x06\x65nv_id\x18\x02 \x01(\t\x12\x15\n\rcollection_id\x18\x03 \x01(\t\x12%\n\x06\x66ilter\x18\x04 \x01(\x0b\x32\x15.content.items.Filter\x12+\n\x07options\x18\x05 \x01(\x0b\x32\x1a.content.items.FindOptions\"A\n\x0c\x46indResponse\x12\"\n\x05items\x18\x01 \x03(\x0b\x32\x13.content.items.Item\x12\r\n\x05total\x18\x02 \x01(\x05\"a\n\rUpdateRequest\x12!\n\x04item\x18\x01 \x01(\x0b\x32\x13.content.items.Item\x12-\n\x07options\x18\x02 \x01(\x0b\x32\x1c.content.items.UpdateOptions\"\x88\x01\n\rDeleteRequest\x12\x10\n\x08space_id\x18\x01 \x01(\t\x12\x0e\n\x06\x65nv_id\x18\x02 \x01(\t\x12\x15\n\rcollection_id\x18\x03 \x01(\t\x12\x0f\n\x07item_id\x18\x04 \x01(\t\x12-\n\x07options\x18\x05 \x01(\x0b\x32\x1c.content.items.DeleteOptions\"[\n\x0fUndeleteRequest\x12\x10\n\x08space_id\x18\x01 \x01(\t\x12\x0e\n\x06\x65nv_id\x18\x02 \x01(\t\x12\x15\n\rcollection_id\x18\x03 \x01(\t\x12\x0f\n\x07item_id\x18\x04 \x01(\t\"c\n\x0ePublishRequest\x12!\n\x04item\x18\x01 \x01(\x0b\x32\x13.content.items.Item\x12.\n\x07options\x18\x02 \x01(\x0b\x32\x1d.content.items.PublishOptions\"5\n\x10UnpublishRequest\x12!\n\x04item\x18\x01 \x01(\x0b\x32\x13.content.items.Item\"\x94\x01\n\x13GetPublishedRequest\x12\x10\n\x08space_id\x18\x01 \x01(\t\x12\x0e\n\x06\x65nv_id\x18\x02 \x01(\t\x12\x15\n\rcollection_id\x18\x03 \x01(\t\x12\x0f\n\x07item_id\x18\x05 \x01(\t\x12\x33\n\x07options\x18\n \x01(\x0b\x32\".content.items.GetPublishedOptions\"9\n\x14GetPublishedResponse\x12!\n\x04item\x18\x01 \x01(\x0b\x32\x13.content.items.Item\"\xac\x01\n\x14\x46indPublishedRequest\x12\x10\n\x08space_id\x18\x01 \x01(\t\x12\x0e\n\x06\x65nv_id\x18\x02 \x01(\t\x12\x15\n\rcollection_id\x18\x03 \x01(\t\x12%\n\x06\x66ilter\x18\x04 \x01(\x0b\x32\x15.content.items.Filter\x12\x34\n\x07options\x18\n \x01(\x0b\x32#.content.items.FindPublishedOptions\"J\n\x15\x46indPublishedResponse\x12\"\n\x05items\x18\x01 \x03(\x0b\x32\x13.content.items.Item\x12\r\n\x05total\x18\x02 \x01(\x05\"\xa4\x01\n\x10\x41ggregateRequest\x12\x10\n\x08space_id\x18\x01 \x01(\t\x12\x0e\n\x06\x65nv_id\x18\x02 \x01(\t\x12\x15\n\rcollection_id\x18\x03 \x01(\t\x12%\n\x06\x66ilter\x18\x04 \x01(\x0b\x32\x15.content.items.Filter\x12\x30\n\x07options\x18\n \x01(\x0b\x32\x1f.content.items.AggregateOptions\"<\n\x11\x41ggregateResponse\x12\'\n\x06result\x18\x01 \x01(\x0b\x32\x17.google.protobuf.Struct\"\xb6\x01\n\x19\x41ggregatePublishedRequest\x12\x10\n\x08space_id\x18\x01 \x01(\t\x12\x0e\n\x06\x65nv_id\x18\x02 \x01(\t\x12\x15\n\rcollection_id\x18\x03 \x01(\t\x12%\n\x06\x66ilter\x18\x04 \x01(\x0b\x32\x15.content.items.Filter\x12\x39\n\x07options\x18\n \x01(\x0b\x32(.content.items.AggregatePublishedOptions\"E\n\x1a\x41ggregatePublishedResponse\x12\'\n\x06result\x18\x01 \x01(\x0b\x32\x17.google.protobuf.Struct\"s\n\x12GetRevisionRequest\x12\x10\n\x08space_id\x18\x01 \x01(\t\x12\x0e\n\x06\x65nv_id\x18\x02 \x01(\t\x12\x15\n\rcollection_id\x18\x03 \x01(\t\x12\x0f\n\x07item_id\x18\x04 \x01(\t\x12\x13\n\x0brevision_id\x18\x05 \x01(\t\"8\n\x13GetRevisionResponse\x12!\n\x04item\x18\x01 \x01(\x0b\x32\x13.content.items.Item\"\x96\x01\n\x14ListRevisionsRequest\x12\x10\n\x08space_id\x18\x01 \x01(\t\x12\x0e\n\x06\x65nv_id\x18\x02 \x01(\t\x12\x15\n\rcollection_id\x18\x03 \x01(\t\x12\x0f\n\x07item_id\x18\x04 \x01(\t\x12\x34\n\x07options\x18\n \x01(\x0b\x32#.content.items.ListRevisionsOptions\";\n\x15ListRevisionsResponse\x12\"\n\x05items\x18\x01 \x03(\x0b\x32\x13.content.items.Item\"3\n\x0e\x41rchiveRequest\x12!\n\x04item\x18\x01 \x01(\x0b\x32\x13.content.items.Item\"5\n\x10UnarchiveRequest\x12!\n\x04item\x18\x01 \x01(\x0b\x32\x13.content.items.Item\"\xaa\x01\n\x13\x46indArchivedRequest\x12\x10\n\x08space_id\x18\x01 \x01(\t\x12\x0e\n\x06\x65nv_id\x18\x02 \x01(\t\x12\x15\n\rcollection_id\x18\x03 \x01(\t\x12%\n\x06\x66ilter\x18\x04 \x01(\x0b\x32\x15.content.items.Filter\x12\x33\n\x07options\x18\x06 \x01(\x0b\x32\".content.items.FindArchivedOptions\"I\n\x14\x46indArchivedResponse\x12\"\n\x05items\x18\x01 \x03(\x0b\x32\x13.content.items.Item\x12\r\n\x05total\x18\x02 \x01(\x05\x32\x93\x0b\n\x05Items\x12G\n\x06\x43reate\x12\x1c.content.items.CreateRequest\x1a\x1d.content.items.CreateResponse\"\x00\x12S\n\nIntrospect\x12 .content.items.IntrospectRequest\x1a!.content.items.IntrospectResponse\"\x00\x12>\n\x03Get\x12\x19.content.items.GetRequest\x1a\x1a.content.items.GetResponse\"\x00\x12\x41\n\x04\x46ind\x12\x1a.content.items.FindRequest\x1a\x1b.content.items.FindResponse\"\x00\x12@\n\x06Update\x12\x1c.content.items.UpdateRequest\x1a\x16.google.protobuf.Empty\"\x00\x12@\n\x06\x44\x65lete\x12\x1c.content.items.DeleteRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x44\n\x08Undelete\x12\x1e.content.items.UndeleteRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x42\n\x07Publish\x12\x1d.content.items.PublishRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x46\n\tUnpublish\x12\x1f.content.items.UnpublishRequest\x1a\x16.google.protobuf.Empty\"\x00\x12Y\n\x0cGetPublished\x12\".content.items.GetPublishedRequest\x1a#.content.items.GetPublishedResponse\"\x00\x12\\\n\rFindPublished\x12#.content.items.FindPublishedRequest\x1a$.content.items.FindPublishedResponse\"\x00\x12P\n\tAggregate\x12\x1f.content.items.AggregateRequest\x1a .content.items.AggregateResponse\"\x00\x12k\n\x12\x41ggregatePublished\x12(.content.items.AggregatePublishedRequest\x1a).content.items.AggregatePublishedResponse\"\x00\x12V\n\x0bGetRevision\x12!.content.items.GetRevisionRequest\x1a\".content.items.GetRevisionResponse\"\x00\x12\\\n\rListRevisions\x12#.content.items.ListRevisionsRequest\x1a$.content.items.ListRevisionsResponse\"\x00\x12\x42\n\x07\x41rchive\x12\x1d.content.items.ArchiveRequest\x1a\x16.google.protobuf.Empty\"\x00\x12Y\n\x0c\x46indArchived\x12\".content.items.FindArchivedRequest\x1a#.content.items.FindArchivedResponse\"\x00\x12\x46\n\tUnarchive\x12\x1f.content.items.UnarchiveRequest\x1a\x16.google.protobuf.Empty\"\x00\x42\x30Z.git.perx.ru/perxis/perxis-go/proto/items;itemsb\x06proto3')
+
+_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
+_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'items.items_pb2', globals())
+if _descriptor._USE_C_DESCRIPTORS == False:
+
+  DESCRIPTOR._options = None
+  DESCRIPTOR._serialized_options = b'Z.git.perx.ru/perxis/perxis-go/proto/items;items'
+  _ITEM_TRANSLATIONSENTRY._options = None
+  _ITEM_TRANSLATIONSENTRY._serialized_options = b'8\001'
+  _AGGREGATEOPTIONS_FIELDSENTRY._options = None
+  _AGGREGATEOPTIONS_FIELDSENTRY._serialized_options = b'8\001'
+  _AGGREGATEPUBLISHEDOPTIONS_FIELDSENTRY._options = None
+  _AGGREGATEPUBLISHEDOPTIONS_FIELDSENTRY._serialized_options = b'8\001'
+  _ERROR._serialized_start=149
+  _ERROR._serialized_end=188
+  _DECODEERROR._serialized_start=190
+  _DECODEERROR._serialized_end=241
+  _VALIDATIONERROR._serialized_start=243
+  _VALIDATIONERROR._serialized_end=298
+  _MODIFICATIONERROR._serialized_start=300
+  _MODIFICATIONERROR._serialized_end=357
+  _PERMISSIONS._serialized_start=359
+  _PERMISSIONS._serialized_end=462
+  _ITEM._serialized_start=465
+  _ITEM._serialized_end=1289
+  _ITEM_TRANSLATIONSENTRY._serialized_start=1151
+  _ITEM_TRANSLATIONSENTRY._serialized_end=1227
+  _ITEM_STATE._serialized_start=1229
+  _ITEM_STATE._serialized_end=1289
+  _EVENTCREATE._serialized_start=1291
+  _EVENTCREATE._serialized_end=1378
+  _EVENTUPDATE._serialized_start=1380
+  _EVENTUPDATE._serialized_end=1467
+  _EVENTPUBLISH._serialized_start=1469
+  _EVENTPUBLISH._serialized_end=1557
+  _EVENTUNPUBLISH._serialized_start=1559
+  _EVENTUNPUBLISH._serialized_end=1649
+  _EVENTDELETE._serialized_start=1651
+  _EVENTDELETE._serialized_end=1738
+  _FILTER._serialized_start=1740
+  _FILTER._serialized_end=1801
+  _CREATEOPTIONS._serialized_start=1803
+  _CREATEOPTIONS._serialized_end=1840
+  _FINDOPTIONS._serialized_start=1842
+  _FINDOPTIONS._serialized_end=1962
+  _UPDATEOPTIONS._serialized_start=1964
+  _UPDATEOPTIONS._serialized_end=2001
+  _GETPUBLISHEDOPTIONS._serialized_start=2003
+  _GETPUBLISHEDOPTIONS._serialized_end=2043
+  _DELETEOPTIONS._serialized_start=2045
+  _DELETEOPTIONS._serialized_end=2075
+  _PUBLISHOPTIONS._serialized_start=2077
+  _PUBLISHOPTIONS._serialized_end=2115
+  _FINDPUBLISHEDOPTIONS._serialized_start=2118
+  _FINDPUBLISHEDOPTIONS._serialized_end=2249
+  _FINDARCHIVEDOPTIONS._serialized_start=2251
+  _FINDARCHIVEDOPTIONS._serialized_end=2310
+  _LISTREVISIONSOPTIONS._serialized_start=2312
+  _LISTREVISIONSOPTIONS._serialized_end=2372
+  _AGGREGATEOPTIONS._serialized_start=2374
+  _AGGREGATEOPTIONS._serialized_end=2500
+  _AGGREGATEOPTIONS_FIELDSENTRY._serialized_start=2455
+  _AGGREGATEOPTIONS_FIELDSENTRY._serialized_end=2500
+  _AGGREGATEPUBLISHEDOPTIONS._serialized_start=2503
+  _AGGREGATEPUBLISHEDOPTIONS._serialized_end=2647
+  _AGGREGATEPUBLISHEDOPTIONS_FIELDSENTRY._serialized_start=2455
+  _AGGREGATEPUBLISHEDOPTIONS_FIELDSENTRY._serialized_end=2500
+  _CREATEREQUEST._serialized_start=2649
+  _CREATEREQUEST._serialized_end=2746
+  _CREATERESPONSE._serialized_start=2748
+  _CREATERESPONSE._serialized_end=2802
+  _INTROSPECTREQUEST._serialized_start=2804
+  _INTROSPECTREQUEST._serialized_end=2858
+  _INTROSPECTRESPONSE._serialized_start=2861
+  _INTROSPECTRESPONSE._serialized_end=3000
+  _GETREQUEST._serialized_start=3002
+  _GETREQUEST._serialized_end=3088
+  _GETRESPONSE._serialized_start=3090
+  _GETRESPONSE._serialized_end=3138
+  _FINDREQUEST._serialized_start=3141
+  _FINDREQUEST._serialized_end=3295
+  _FINDRESPONSE._serialized_start=3297
+  _FINDRESPONSE._serialized_end=3362
+  _UPDATEREQUEST._serialized_start=3364
+  _UPDATEREQUEST._serialized_end=3461
+  _DELETEREQUEST._serialized_start=3464
+  _DELETEREQUEST._serialized_end=3600
+  _UNDELETEREQUEST._serialized_start=3602
+  _UNDELETEREQUEST._serialized_end=3693
+  _PUBLISHREQUEST._serialized_start=3695
+  _PUBLISHREQUEST._serialized_end=3794
+  _UNPUBLISHREQUEST._serialized_start=3796
+  _UNPUBLISHREQUEST._serialized_end=3849
+  _GETPUBLISHEDREQUEST._serialized_start=3852
+  _GETPUBLISHEDREQUEST._serialized_end=4000
+  _GETPUBLISHEDRESPONSE._serialized_start=4002
+  _GETPUBLISHEDRESPONSE._serialized_end=4059
+  _FINDPUBLISHEDREQUEST._serialized_start=4062
+  _FINDPUBLISHEDREQUEST._serialized_end=4234
+  _FINDPUBLISHEDRESPONSE._serialized_start=4236
+  _FINDPUBLISHEDRESPONSE._serialized_end=4310
+  _AGGREGATEREQUEST._serialized_start=4313
+  _AGGREGATEREQUEST._serialized_end=4477
+  _AGGREGATERESPONSE._serialized_start=4479
+  _AGGREGATERESPONSE._serialized_end=4539
+  _AGGREGATEPUBLISHEDREQUEST._serialized_start=4542
+  _AGGREGATEPUBLISHEDREQUEST._serialized_end=4724
+  _AGGREGATEPUBLISHEDRESPONSE._serialized_start=4726
+  _AGGREGATEPUBLISHEDRESPONSE._serialized_end=4795
+  _GETREVISIONREQUEST._serialized_start=4797
+  _GETREVISIONREQUEST._serialized_end=4912
+  _GETREVISIONRESPONSE._serialized_start=4914
+  _GETREVISIONRESPONSE._serialized_end=4970
+  _LISTREVISIONSREQUEST._serialized_start=4973
+  _LISTREVISIONSREQUEST._serialized_end=5123
+  _LISTREVISIONSRESPONSE._serialized_start=5125
+  _LISTREVISIONSRESPONSE._serialized_end=5184
+  _ARCHIVEREQUEST._serialized_start=5186
+  _ARCHIVEREQUEST._serialized_end=5237
+  _UNARCHIVEREQUEST._serialized_start=5239
+  _UNARCHIVEREQUEST._serialized_end=5292
+  _FINDARCHIVEDREQUEST._serialized_start=5295
+  _FINDARCHIVEDREQUEST._serialized_end=5465
+  _FINDARCHIVEDRESPONSE._serialized_start=5467
+  _FINDARCHIVEDRESPONSE._serialized_end=5540
+  _ITEMS._serialized_start=5543
+  _ITEMS._serialized_end=6970
+# @@protoc_insertion_point(module_scope)
diff --git a/clients/items/items_pb2_grpc.py b/proto/items/items_pb2_grpc.py
similarity index 88%
rename from clients/items/items_pb2_grpc.py
rename to proto/items/items_pb2_grpc.py
index 50b968c82948c33fd0ba345fb13bf7f31ad41b5a..aa3b45991c3510efbd5a85925eaf339d2bc4ff63 100644
--- a/clients/items/items_pb2_grpc.py
+++ b/proto/items/items_pb2_grpc.py
@@ -72,6 +72,16 @@ class ItemsStub(object):
                 request_serializer=items_dot_items__pb2.FindPublishedRequest.SerializeToString,
                 response_deserializer=items_dot_items__pb2.FindPublishedResponse.FromString,
                 )
+        self.Aggregate = channel.unary_unary(
+                '/content.items.Items/Aggregate',
+                request_serializer=items_dot_items__pb2.AggregateRequest.SerializeToString,
+                response_deserializer=items_dot_items__pb2.AggregateResponse.FromString,
+                )
+        self.AggregatePublished = channel.unary_unary(
+                '/content.items.Items/AggregatePublished',
+                request_serializer=items_dot_items__pb2.AggregatePublishedRequest.SerializeToString,
+                response_deserializer=items_dot_items__pb2.AggregatePublishedResponse.FromString,
+                )
         self.GetRevision = channel.unary_unary(
                 '/content.items.Items/GetRevision',
                 request_serializer=items_dot_items__pb2.GetRevisionRequest.SerializeToString,
@@ -178,6 +188,22 @@ class ItemsServicer(object):
         context.set_details('Method not implemented!')
         raise NotImplementedError('Method not implemented!')
 
+    def Aggregate(self, request, context):
+        """*
+        Расчет значений по существующим данным. Например, получение среднего значения поля
+        """
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
+    def AggregatePublished(self, request, context):
+        """*
+        Расчет значений по существующим **опубликованным** данным.
+        """
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
     def GetRevision(self, request, context):
         """Missing associated documentation comment in .proto file."""
         context.set_code(grpc.StatusCode.UNIMPLEMENTED)
@@ -266,6 +292,16 @@ def add_ItemsServicer_to_server(servicer, server):
                     request_deserializer=items_dot_items__pb2.FindPublishedRequest.FromString,
                     response_serializer=items_dot_items__pb2.FindPublishedResponse.SerializeToString,
             ),
+            'Aggregate': grpc.unary_unary_rpc_method_handler(
+                    servicer.Aggregate,
+                    request_deserializer=items_dot_items__pb2.AggregateRequest.FromString,
+                    response_serializer=items_dot_items__pb2.AggregateResponse.SerializeToString,
+            ),
+            'AggregatePublished': grpc.unary_unary_rpc_method_handler(
+                    servicer.AggregatePublished,
+                    request_deserializer=items_dot_items__pb2.AggregatePublishedRequest.FromString,
+                    response_serializer=items_dot_items__pb2.AggregatePublishedResponse.SerializeToString,
+            ),
             'GetRevision': grpc.unary_unary_rpc_method_handler(
                     servicer.GetRevision,
                     request_deserializer=items_dot_items__pb2.GetRevisionRequest.FromString,
@@ -490,6 +526,40 @@ class Items(object):
             options, channel_credentials,
             insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
 
+    @staticmethod
+    def Aggregate(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            insecure=False,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/content.items.Items/Aggregate',
+            items_dot_items__pb2.AggregateRequest.SerializeToString,
+            items_dot_items__pb2.AggregateResponse.FromString,
+            options, channel_credentials,
+            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+
+    @staticmethod
+    def AggregatePublished(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            insecure=False,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/content.items.Items/AggregatePublished',
+            items_dot_items__pb2.AggregatePublishedRequest.SerializeToString,
+            items_dot_items__pb2.AggregatePublishedResponse.FromString,
+            options, channel_credentials,
+            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+
     @staticmethod
     def GetRevision(request,
             target,
diff --git a/clients/locales/locales_pb2.py b/proto/locales/locales_pb2.py
similarity index 50%
rename from clients/locales/locales_pb2.py
rename to proto/locales/locales_pb2.py
index 822a5ff23813ece634bda8673436861632530481..ece0e7c9d681f5c6c658b438a10e321b86efe3a8 100644
--- a/clients/locales/locales_pb2.py
+++ b/proto/locales/locales_pb2.py
@@ -2,10 +2,9 @@
 # Generated by the protocol buffer compiler.  DO NOT EDIT!
 # source: locales/locales.proto
 """Generated protocol buffer code."""
+from google.protobuf.internal import builder as _builder
 from google.protobuf import descriptor as _descriptor
 from google.protobuf import descriptor_pool as _descriptor_pool
-from google.protobuf import message as _message
-from google.protobuf import reflection as _reflection
 from google.protobuf import symbol_database as _symbol_database
 # @@protoc_insertion_point(imports)
 
@@ -17,57 +16,8 @@ from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2
 
 DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x15locales/locales.proto\x12\x0f\x63ontent.locales\x1a\x1bgoogle/protobuf/empty.proto\"4\n\x06Locale\x12\n\n\x02id\x18\x01 \x01(\t\x12\x10\n\x08space_id\x18\x02 \x01(\t\x12\x0c\n\x04name\x18\x03 \x01(\t\"8\n\rCreateRequest\x12\'\n\x06locale\x18\x01 \x01(\x0b\x32\x17.content.locales.Locale\"9\n\x0e\x43reateResponse\x12\'\n\x06locale\x18\x01 \x01(\x0b\x32\x17.content.locales.Locale\"\x1f\n\x0bListRequest\x12\x10\n\x08space_id\x18\x01 \x01(\t\"8\n\x0cListResponse\x12(\n\x07locales\x18\x01 \x03(\x0b\x32\x17.content.locales.Locale\"4\n\rDeleteRequest\x12\x10\n\x08space_id\x18\x01 \x01(\t\x12\x11\n\tlocale_id\x18\x02 \x01(\t2\xe1\x01\n\x07Locales\x12K\n\x06\x43reate\x12\x1e.content.locales.CreateRequest\x1a\x1f.content.locales.CreateResponse\"\x00\x12\x45\n\x04List\x12\x1c.content.locales.ListRequest\x1a\x1d.content.locales.ListResponse\"\x00\x12\x42\n\x06\x44\x65lete\x12\x1e.content.locales.DeleteRequest\x1a\x16.google.protobuf.Empty\"\x00\x42\x34Z2git.perx.ru/perxis/perxis-go/proto/locales;localesb\x06proto3')
 
-
-
-_LOCALE = DESCRIPTOR.message_types_by_name['Locale']
-_CREATEREQUEST = DESCRIPTOR.message_types_by_name['CreateRequest']
-_CREATERESPONSE = DESCRIPTOR.message_types_by_name['CreateResponse']
-_LISTREQUEST = DESCRIPTOR.message_types_by_name['ListRequest']
-_LISTRESPONSE = DESCRIPTOR.message_types_by_name['ListResponse']
-_DELETEREQUEST = DESCRIPTOR.message_types_by_name['DeleteRequest']
-Locale = _reflection.GeneratedProtocolMessageType('Locale', (_message.Message,), {
-  'DESCRIPTOR' : _LOCALE,
-  '__module__' : 'locales.locales_pb2'
-  # @@protoc_insertion_point(class_scope:content.locales.Locale)
-  })
-_sym_db.RegisterMessage(Locale)
-
-CreateRequest = _reflection.GeneratedProtocolMessageType('CreateRequest', (_message.Message,), {
-  'DESCRIPTOR' : _CREATEREQUEST,
-  '__module__' : 'locales.locales_pb2'
-  # @@protoc_insertion_point(class_scope:content.locales.CreateRequest)
-  })
-_sym_db.RegisterMessage(CreateRequest)
-
-CreateResponse = _reflection.GeneratedProtocolMessageType('CreateResponse', (_message.Message,), {
-  'DESCRIPTOR' : _CREATERESPONSE,
-  '__module__' : 'locales.locales_pb2'
-  # @@protoc_insertion_point(class_scope:content.locales.CreateResponse)
-  })
-_sym_db.RegisterMessage(CreateResponse)
-
-ListRequest = _reflection.GeneratedProtocolMessageType('ListRequest', (_message.Message,), {
-  'DESCRIPTOR' : _LISTREQUEST,
-  '__module__' : 'locales.locales_pb2'
-  # @@protoc_insertion_point(class_scope:content.locales.ListRequest)
-  })
-_sym_db.RegisterMessage(ListRequest)
-
-ListResponse = _reflection.GeneratedProtocolMessageType('ListResponse', (_message.Message,), {
-  'DESCRIPTOR' : _LISTRESPONSE,
-  '__module__' : 'locales.locales_pb2'
-  # @@protoc_insertion_point(class_scope:content.locales.ListResponse)
-  })
-_sym_db.RegisterMessage(ListResponse)
-
-DeleteRequest = _reflection.GeneratedProtocolMessageType('DeleteRequest', (_message.Message,), {
-  'DESCRIPTOR' : _DELETEREQUEST,
-  '__module__' : 'locales.locales_pb2'
-  # @@protoc_insertion_point(class_scope:content.locales.DeleteRequest)
-  })
-_sym_db.RegisterMessage(DeleteRequest)
-
-_LOCALES = DESCRIPTOR.services_by_name['Locales']
+_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
+_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'locales.locales_pb2', globals())
 if _descriptor._USE_C_DESCRIPTORS == False:
 
   DESCRIPTOR._options = None
diff --git a/clients/locales/locales_pb2_grpc.py b/proto/locales/locales_pb2_grpc.py
similarity index 100%
rename from clients/locales/locales_pb2_grpc.py
rename to proto/locales/locales_pb2_grpc.py
diff --git a/proto/members/members_pb2.py b/proto/members/members_pb2.py
new file mode 100644
index 0000000000000000000000000000000000000000..4ec01b4272e446926fafabddcbd07ce6a5fc4c8f
--- /dev/null
+++ b/proto/members/members_pb2.py
@@ -0,0 +1,54 @@
+# -*- coding: utf-8 -*-
+# Generated by the protocol buffer compiler.  DO NOT EDIT!
+# source: members/members.proto
+"""Generated protocol buffer code."""
+from google.protobuf.internal import builder as _builder
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import descriptor_pool as _descriptor_pool
+from google.protobuf import symbol_database as _symbol_database
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2
+from common import common_pb2 as common_dot_common__pb2
+
+
+DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x15members/members.proto\x12\x0f\x61\x63\x63ount.members\x1a\x1bgoogle/protobuf/empty.proto\x1a\x13\x63ommon/common.proto\"N\n\x06Member\x12\x0e\n\x06org_id\x18\x01 \x01(\t\x12\x0f\n\x07user_id\x18\x02 \x01(\t\x12#\n\x04role\x18\x03 \x01(\x0e\x32\x15.account.members.Role\"R\n\nSetRequest\x12\x0e\n\x06org_id\x18\x01 \x01(\t\x12\x0f\n\x07user_id\x18\x02 \x01(\t\x12#\n\x04role\x18\x03 \x01(\x0e\x32\x15.account.members.Role\"-\n\nGetRequest\x12\x0e\n\x06org_id\x18\x01 \x01(\t\x12\x0f\n\x07user_id\x18\x02 \x01(\t\"2\n\x0bGetResponse\x12#\n\x04role\x18\x03 \x01(\x0e\x32\x15.account.members.Role\"0\n\rRemoveRequest\x12\x0e\n\x06org_id\x18\x01 \x01(\t\x12\x0f\n\x07user_id\x18\x02 \x01(\t\"$\n\x12ListMembersRequest\x12\x0e\n\x06org_id\x18\x01 \x01(\t\"?\n\x13ListMembersResponse\x12(\n\x07members\x18\x01 \x03(\x0b\x32\x17.account.members.Member\"+\n\x18ListOrganizationsRequest\x12\x0f\n\x07user_id\x18\x01 \x01(\t\"K\n\x19ListOrganizationsResponse\x12.\n\rorganizations\x18\x01 \x03(\x0b\x32\x17.account.members.Member\"F\n\x18OnCollaboratorSetRequest\x12*\n\x0c\x63ollaborator\x18\x01 \x01(\x0b\x32\x14.common.Collaborator\"4\n\x19OnCollaboratorSetResponse\x12\x17\n\x0f\x64\x65layed_task_id\x18\x01 \x01(\t*8\n\x04Role\x12\x0e\n\nNOT_MEMBER\x10\x00\x12\n\n\x06MEMBER\x10\x01\x12\t\n\x05OWNER\x10\x02\x12\t\n\x05\x41\x44MIN\x10\x03\x32\x99\x03\n\x07Members\x12<\n\x03Set\x12\x1b.account.members.SetRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x42\n\x03Get\x12\x1b.account.members.GetRequest\x1a\x1c.account.members.GetResponse\"\x00\x12\x42\n\x06Remove\x12\x1e.account.members.RemoveRequest\x1a\x16.google.protobuf.Empty\"\x00\x12Z\n\x0bListMembers\x12#.account.members.ListMembersRequest\x1a$.account.members.ListMembersResponse\"\x00\x12l\n\x11ListOrganizations\x12).account.members.ListOrganizationsRequest\x1a*.account.members.ListOrganizationsResponse\"\x00\x32x\n\x08Observer\x12l\n\x11OnCollaboratorSet\x12).account.members.OnCollaboratorSetRequest\x1a*.account.members.OnCollaboratorSetResponse\"\x00\x42\x34Z2git.perx.ru/perxis/perxis-go/proto/members;membersb\x06proto3')
+
+_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
+_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'members.members_pb2', globals())
+if _descriptor._USE_C_DESCRIPTORS == False:
+
+  DESCRIPTOR._options = None
+  DESCRIPTOR._serialized_options = b'Z2git.perx.ru/perxis/perxis-go/proto/members;members'
+  _ROLE._serialized_start=756
+  _ROLE._serialized_end=812
+  _MEMBER._serialized_start=92
+  _MEMBER._serialized_end=170
+  _SETREQUEST._serialized_start=172
+  _SETREQUEST._serialized_end=254
+  _GETREQUEST._serialized_start=256
+  _GETREQUEST._serialized_end=301
+  _GETRESPONSE._serialized_start=303
+  _GETRESPONSE._serialized_end=353
+  _REMOVEREQUEST._serialized_start=355
+  _REMOVEREQUEST._serialized_end=403
+  _LISTMEMBERSREQUEST._serialized_start=405
+  _LISTMEMBERSREQUEST._serialized_end=441
+  _LISTMEMBERSRESPONSE._serialized_start=443
+  _LISTMEMBERSRESPONSE._serialized_end=506
+  _LISTORGANIZATIONSREQUEST._serialized_start=508
+  _LISTORGANIZATIONSREQUEST._serialized_end=551
+  _LISTORGANIZATIONSRESPONSE._serialized_start=553
+  _LISTORGANIZATIONSRESPONSE._serialized_end=628
+  _ONCOLLABORATORSETREQUEST._serialized_start=630
+  _ONCOLLABORATORSETREQUEST._serialized_end=700
+  _ONCOLLABORATORSETRESPONSE._serialized_start=702
+  _ONCOLLABORATORSETRESPONSE._serialized_end=754
+  _MEMBERS._serialized_start=815
+  _MEMBERS._serialized_end=1224
+  _OBSERVER._serialized_start=1226
+  _OBSERVER._serialized_end=1346
+# @@protoc_insertion_point(module_scope)
diff --git a/clients/members/members_pb2_grpc.py b/proto/members/members_pb2_grpc.py
similarity index 100%
rename from clients/members/members_pb2_grpc.py
rename to proto/members/members_pb2_grpc.py
diff --git a/proto/organizations/organizations_pb2.py b/proto/organizations/organizations_pb2.py
new file mode 100644
index 0000000000000000000000000000000000000000..8900870f98589f71052ee5028af4c640e93f1c6b
--- /dev/null
+++ b/proto/organizations/organizations_pb2.py
@@ -0,0 +1,48 @@
+# -*- coding: utf-8 -*-
+# Generated by the protocol buffer compiler.  DO NOT EDIT!
+# source: organizations/organizations.proto
+"""Generated protocol buffer code."""
+from google.protobuf.internal import builder as _builder
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import descriptor_pool as _descriptor_pool
+from google.protobuf import symbol_database as _symbol_database
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2
+from common import common_pb2 as common_dot_common__pb2
+
+
+DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n!organizations/organizations.proto\x12\x15\x61\x63\x63ount.organizations\x1a\x1bgoogle/protobuf/empty.proto\x1a\x13\x63ommon/common.proto\"s\n\x0cOrganization\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x03 \x01(\t\x12\x10\n\x08logo_url\x18\x05 \x01(\t\x12\x15\n\x08owner_id\x18\x06 \x01(\tH\x00\x88\x01\x01\x42\x0b\n\t_owner_id\"A\n\rCreateRequest\x12\x30\n\x03org\x18\x01 \x01(\x0b\x32#.account.organizations.Organization\"F\n\x0e\x43reateResponse\x12\x34\n\x07\x63reated\x18\x01 \x01(\x0b\x32#.account.organizations.Organization\"\x1c\n\nGetRequest\x12\x0e\n\x06org_id\x18\x01 \x01(\t\"?\n\x0bGetResponse\x12\x30\n\x03org\x18\x01 \x01(\x0b\x32#.account.organizations.Organization\"A\n\rUpdateRequest\x12\x30\n\x03org\x18\x01 \x01(\x0b\x32#.account.organizations.Organization\"\x1f\n\rDeleteRequest\x12\x0e\n\x06org_id\x18\x01 \x01(\t\"$\n\x06\x46ilter\x12\x0b\n\x03ids\x18\x03 \x03(\t\x12\r\n\x05names\x18\x04 \x03(\t\"_\n\x0b\x46indRequest\x12-\n\x06\x66ilter\x18\x01 \x01(\x0b\x32\x1d.account.organizations.Filter\x12!\n\x04opts\x18\x02 \x01(\x0b\x32\x13.common.FindOptions\"P\n\x0c\x46indResponse\x12\x31\n\x04orgs\x18\x01 \x03(\x0b\x32#.account.organizations.Organization\x12\r\n\x05total\x18\x02 \x01(\x03\x32\x9f\x03\n\rOrganizations\x12W\n\x06\x43reate\x12$.account.organizations.CreateRequest\x1a%.account.organizations.CreateResponse\"\x00\x12N\n\x03Get\x12!.account.organizations.GetRequest\x1a\".account.organizations.GetResponse\"\x00\x12H\n\x06\x44\x65lete\x12$.account.organizations.DeleteRequest\x1a\x16.google.protobuf.Empty\"\x00\x12Q\n\x04\x46ind\x12\".account.organizations.FindRequest\x1a#.account.organizations.FindResponse\"\x00\x12H\n\x06Update\x12$.account.organizations.UpdateRequest\x1a\x16.google.protobuf.Empty\"\x00\x42@Z>git.perx.ru/perxis/perxis-go/proto/organizations;organizationsb\x06proto3')
+
+_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
+_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'organizations.organizations_pb2', globals())
+if _descriptor._USE_C_DESCRIPTORS == False:
+
+  DESCRIPTOR._options = None
+  DESCRIPTOR._serialized_options = b'Z>git.perx.ru/perxis/perxis-go/proto/organizations;organizations'
+  _ORGANIZATION._serialized_start=110
+  _ORGANIZATION._serialized_end=225
+  _CREATEREQUEST._serialized_start=227
+  _CREATEREQUEST._serialized_end=292
+  _CREATERESPONSE._serialized_start=294
+  _CREATERESPONSE._serialized_end=364
+  _GETREQUEST._serialized_start=366
+  _GETREQUEST._serialized_end=394
+  _GETRESPONSE._serialized_start=396
+  _GETRESPONSE._serialized_end=459
+  _UPDATEREQUEST._serialized_start=461
+  _UPDATEREQUEST._serialized_end=526
+  _DELETEREQUEST._serialized_start=528
+  _DELETEREQUEST._serialized_end=559
+  _FILTER._serialized_start=561
+  _FILTER._serialized_end=597
+  _FINDREQUEST._serialized_start=599
+  _FINDREQUEST._serialized_end=694
+  _FINDRESPONSE._serialized_start=696
+  _FINDRESPONSE._serialized_end=776
+  _ORGANIZATIONS._serialized_start=779
+  _ORGANIZATIONS._serialized_end=1194
+# @@protoc_insertion_point(module_scope)
diff --git a/clients/organizations/organizations_pb2_grpc.py b/proto/organizations/organizations_pb2_grpc.py
similarity index 100%
rename from clients/organizations/organizations_pb2_grpc.py
rename to proto/organizations/organizations_pb2_grpc.py
diff --git a/proto/references/references_pb2.py b/proto/references/references_pb2.py
new file mode 100644
index 0000000000000000000000000000000000000000..eabf1293c51e0e7cadf488b570565db0731bafe1
--- /dev/null
+++ b/proto/references/references_pb2.py
@@ -0,0 +1,33 @@
+# -*- coding: utf-8 -*-
+# Generated by the protocol buffer compiler.  DO NOT EDIT!
+# source: references/references.proto
+"""Generated protocol buffer code."""
+from google.protobuf.internal import builder as _builder
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import descriptor_pool as _descriptor_pool
+from google.protobuf import symbol_database as _symbol_database
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+from items import items_pb2 as items_dot_items__pb2
+
+
+DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1breferences/references.proto\x12\x12\x63ontent.references\x1a\x11items/items.proto\"@\n\tReference\x12\n\n\x02id\x18\x01 \x01(\t\x12\x15\n\rcollection_id\x18\x02 \x01(\t\x12\x10\n\x08\x64isabled\x18\x03 \x01(\x08\"a\n\nGetRequest\x12\x10\n\x08space_id\x18\x01 \x01(\t\x12\x0e\n\x06\x65nv_id\x18\x02 \x01(\t\x12\x31\n\nreferences\x18\x03 \x03(\x0b\x32\x1d.content.references.Reference\"b\n\x0bGetResponse\x12\"\n\x05items\x18\x01 \x03(\x0b\x32\x13.content.items.Item\x12/\n\x08notfound\x18\x02 \x03(\x0b\x32\x1d.content.references.Reference2V\n\nReferences\x12H\n\x03Get\x12\x1e.content.references.GetRequest\x1a\x1f.content.references.GetResponse\"\x00\x42:Z8git.perx.ru/perxis/perxis-go/proto/references;referencesb\x06proto3')
+
+_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
+_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'references.references_pb2', globals())
+if _descriptor._USE_C_DESCRIPTORS == False:
+
+  DESCRIPTOR._options = None
+  DESCRIPTOR._serialized_options = b'Z8git.perx.ru/perxis/perxis-go/proto/references;references'
+  _REFERENCE._serialized_start=70
+  _REFERENCE._serialized_end=134
+  _GETREQUEST._serialized_start=136
+  _GETREQUEST._serialized_end=233
+  _GETRESPONSE._serialized_start=235
+  _GETRESPONSE._serialized_end=333
+  _REFERENCES._serialized_start=335
+  _REFERENCES._serialized_end=421
+# @@protoc_insertion_point(module_scope)
diff --git a/clients/references/references_pb2_grpc.py b/proto/references/references_pb2_grpc.py
similarity index 100%
rename from clients/references/references_pb2_grpc.py
rename to proto/references/references_pb2_grpc.py
diff --git a/proto/roles/roles_pb2.py b/proto/roles/roles_pb2.py
new file mode 100644
index 0000000000000000000000000000000000000000..7db56da095ce4b1c848634dcaabd047c924f2968
--- /dev/null
+++ b/proto/roles/roles_pb2.py
@@ -0,0 +1,46 @@
+# -*- coding: utf-8 -*-
+# Generated by the protocol buffer compiler.  DO NOT EDIT!
+# source: roles/roles.proto
+"""Generated protocol buffer code."""
+from google.protobuf.internal import builder as _builder
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import descriptor_pool as _descriptor_pool
+from google.protobuf import symbol_database as _symbol_database
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2
+from common import common_pb2 as common_dot_common__pb2
+
+
+DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x11roles/roles.proto\x12\rcontent.roles\x1a\x1bgoogle/protobuf/empty.proto\x1a\x13\x63ommon/common.proto\"\x86\x01\n\x04Role\x12\n\n\x02id\x18\x01 \x01(\t\x12\x10\n\x08space_id\x18\x02 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x03 \x01(\t\x12\x1b\n\x05rules\x18\x04 \x03(\x0b\x32\x0c.common.Rule\x12\x14\n\x0c\x65nvironments\x18\x05 \x03(\t\x12\x18\n\x10\x61llow_management\x18\n \x01(\x08\"2\n\rCreateRequest\x12!\n\x04role\x18\x01 \x01(\x0b\x32\x13.content.roles.Role\"6\n\x0e\x43reateResponse\x12$\n\x07\x63reated\x18\x01 \x01(\x0b\x32\x13.content.roles.Role\"/\n\nGetRequest\x12\x10\n\x08space_id\x18\x01 \x01(\t\x12\x0f\n\x07role_id\x18\x02 \x01(\t\"0\n\x0bGetResponse\x12!\n\x04role\x18\x01 \x01(\x0b\x32\x13.content.roles.Role\"2\n\rUpdateRequest\x12!\n\x04role\x18\x01 \x01(\x0b\x32\x13.content.roles.Role\"\x1f\n\x0bListRequest\x12\x10\n\x08space_id\x18\x01 \x01(\t\"2\n\x0cListResponse\x12\"\n\x05roles\x18\x01 \x03(\x0b\x32\x13.content.roles.Role\"2\n\rDeleteRequest\x12\x10\n\x08space_id\x18\x01 \x01(\t\x12\x0f\n\x07role_id\x18\x02 \x01(\t2\xd7\x02\n\x05Roles\x12G\n\x06\x43reate\x12\x1c.content.roles.CreateRequest\x1a\x1d.content.roles.CreateResponse\"\x00\x12>\n\x03Get\x12\x19.content.roles.GetRequest\x1a\x1a.content.roles.GetResponse\"\x00\x12@\n\x06Update\x12\x1c.content.roles.UpdateRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x41\n\x04List\x12\x1a.content.roles.ListRequest\x1a\x1b.content.roles.ListResponse\"\x00\x12@\n\x06\x44\x65lete\x12\x1c.content.roles.DeleteRequest\x1a\x16.google.protobuf.Empty\"\x00\x42\x30Z.git.perx.ru/perxis/perxis-go/proto/roles;rolesb\x06proto3')
+
+_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
+_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'roles.roles_pb2', globals())
+if _descriptor._USE_C_DESCRIPTORS == False:
+
+  DESCRIPTOR._options = None
+  DESCRIPTOR._serialized_options = b'Z.git.perx.ru/perxis/perxis-go/proto/roles;roles'
+  _ROLE._serialized_start=87
+  _ROLE._serialized_end=221
+  _CREATEREQUEST._serialized_start=223
+  _CREATEREQUEST._serialized_end=273
+  _CREATERESPONSE._serialized_start=275
+  _CREATERESPONSE._serialized_end=329
+  _GETREQUEST._serialized_start=331
+  _GETREQUEST._serialized_end=378
+  _GETRESPONSE._serialized_start=380
+  _GETRESPONSE._serialized_end=428
+  _UPDATEREQUEST._serialized_start=430
+  _UPDATEREQUEST._serialized_end=480
+  _LISTREQUEST._serialized_start=482
+  _LISTREQUEST._serialized_end=513
+  _LISTRESPONSE._serialized_start=515
+  _LISTRESPONSE._serialized_end=565
+  _DELETEREQUEST._serialized_start=567
+  _DELETEREQUEST._serialized_end=617
+  _ROLES._serialized_start=620
+  _ROLES._serialized_end=963
+# @@protoc_insertion_point(module_scope)
diff --git a/clients/roles/roles_pb2_grpc.py b/proto/roles/roles_pb2_grpc.py
similarity index 100%
rename from clients/roles/roles_pb2_grpc.py
rename to proto/roles/roles_pb2_grpc.py
diff --git a/proto/spaces/spaces_pb2.py b/proto/spaces/spaces_pb2.py
new file mode 100644
index 0000000000000000000000000000000000000000..2515e5672dccceebe73d6caffd45073403a63d75
--- /dev/null
+++ b/proto/spaces/spaces_pb2.py
@@ -0,0 +1,51 @@
+# -*- coding: utf-8 -*-
+# Generated by the protocol buffer compiler.  DO NOT EDIT!
+# source: spaces/spaces.proto
+"""Generated protocol buffer code."""
+from google.protobuf.internal import builder as _builder
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import descriptor_pool as _descriptor_pool
+from google.protobuf import symbol_database as _symbol_database
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2
+
+
+DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x13spaces/spaces.proto\x12\x0e\x63ontent.spaces\x1a\x1bgoogle/protobuf/empty.proto\"\x94\x01\n\x05Space\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0e\n\x06org_id\x18\x02 \x01(\t\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x04 \x01(\t\x12$\n\x05state\x18\x05 \x01(\x0e\x32\x15.content.spaces.State\x12&\n\x06\x63onfig\x18\n \x01(\x0b\x32\x16.content.spaces.Config\"\x1a\n\x06\x43onfig\x12\x10\n\x08\x66\x65\x61tures\x18\x01 \x03(\t\"5\n\rCreateRequest\x12$\n\x05space\x18\x01 \x01(\x0b\x32\x15.content.spaces.Space\"8\n\x0e\x43reateResponse\x12&\n\x07\x63reated\x18\x01 \x01(\x0b\x32\x15.content.spaces.Space\"\x1e\n\nGetRequest\x12\x10\n\x08space_id\x18\x01 \x01(\t\"3\n\x0bGetResponse\x12$\n\x05space\x18\x01 \x01(\x0b\x32\x15.content.spaces.Space\"\x1d\n\x0bListRequest\x12\x0e\n\x06org_id\x18\x01 \x01(\t\"5\n\x0cListResponse\x12%\n\x06spaces\x18\x01 \x03(\x0b\x32\x15.content.spaces.Space\"5\n\rUpdateRequest\x12$\n\x05space\x18\x01 \x01(\x0b\x32\x15.content.spaces.Space\"O\n\x13UpdateConfigRequest\x12\x10\n\x08space_id\x18\x01 \x01(\t\x12&\n\x06\x63onfig\x18\x02 \x01(\x0b\x32\x16.content.spaces.Config\"!\n\rDeleteRequest\x12\x10\n\x08space_id\x18\x01 \x01(\t*p\n\x05State\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x07\n\x03NEW\x10\x01\x12\t\n\x05READY\x10\x02\x12\r\n\tPREPARING\x10\x03\x12\x0f\n\x0bMAINTENANCE\x10\x04\x12\r\n\tMIGRATION\x10\x05\x12\x0c\n\x08\x44\x45LETING\x10\x06\x12\t\n\x05\x45RROR\x10\x07\x32\xaf\x03\n\x06Spaces\x12I\n\x06\x43reate\x12\x1d.content.spaces.CreateRequest\x1a\x1e.content.spaces.CreateResponse\"\x00\x12@\n\x03Get\x12\x1a.content.spaces.GetRequest\x1a\x1b.content.spaces.GetResponse\"\x00\x12\x43\n\x04List\x12\x1b.content.spaces.ListRequest\x1a\x1c.content.spaces.ListResponse\"\x00\x12\x41\n\x06Update\x12\x1d.content.spaces.UpdateRequest\x1a\x16.google.protobuf.Empty\"\x00\x12M\n\x0cUpdateConfig\x12#.content.spaces.UpdateConfigRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x41\n\x06\x44\x65lete\x12\x1d.content.spaces.DeleteRequest\x1a\x16.google.protobuf.Empty\"\x00\x42\x32Z0git.perx.ru/perxis/perxis-go/proto/spaces;spacesb\x06proto3')
+
+_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
+_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'spaces.spaces_pb2', globals())
+if _descriptor._USE_C_DESCRIPTORS == False:
+
+  DESCRIPTOR._options = None
+  DESCRIPTOR._serialized_options = b'Z0git.perx.ru/perxis/perxis-go/proto/spaces;spaces'
+  _STATE._serialized_start=702
+  _STATE._serialized_end=814
+  _SPACE._serialized_start=69
+  _SPACE._serialized_end=217
+  _CONFIG._serialized_start=219
+  _CONFIG._serialized_end=245
+  _CREATEREQUEST._serialized_start=247
+  _CREATEREQUEST._serialized_end=300
+  _CREATERESPONSE._serialized_start=302
+  _CREATERESPONSE._serialized_end=358
+  _GETREQUEST._serialized_start=360
+  _GETREQUEST._serialized_end=390
+  _GETRESPONSE._serialized_start=392
+  _GETRESPONSE._serialized_end=443
+  _LISTREQUEST._serialized_start=445
+  _LISTREQUEST._serialized_end=474
+  _LISTRESPONSE._serialized_start=476
+  _LISTRESPONSE._serialized_end=529
+  _UPDATEREQUEST._serialized_start=531
+  _UPDATEREQUEST._serialized_end=584
+  _UPDATECONFIGREQUEST._serialized_start=586
+  _UPDATECONFIGREQUEST._serialized_end=665
+  _DELETEREQUEST._serialized_start=667
+  _DELETEREQUEST._serialized_end=700
+  _SPACES._serialized_start=817
+  _SPACES._serialized_end=1248
+# @@protoc_insertion_point(module_scope)
diff --git a/clients/spaces/spaces_pb2_grpc.py b/proto/spaces/spaces_pb2_grpc.py
similarity index 100%
rename from clients/spaces/spaces_pb2_grpc.py
rename to proto/spaces/spaces_pb2_grpc.py
diff --git a/clients/users/users_pb2.py b/proto/users/users_pb2.py
similarity index 50%
rename from clients/users/users_pb2.py
rename to proto/users/users_pb2.py
index f5d126b092a825bcb786ecc60ef60c91f44b9276..79f373b06b0f733db9ee18984f034a0a1981e5a6 100644
--- a/clients/users/users_pb2.py
+++ b/proto/users/users_pb2.py
@@ -2,10 +2,9 @@
 # Generated by the protocol buffer compiler.  DO NOT EDIT!
 # source: users/users.proto
 """Generated protocol buffer code."""
+from google.protobuf.internal import builder as _builder
 from google.protobuf import descriptor as _descriptor
 from google.protobuf import descriptor_pool as _descriptor_pool
-from google.protobuf import message as _message
-from google.protobuf import reflection as _reflection
 from google.protobuf import symbol_database as _symbol_database
 # @@protoc_insertion_point(imports)
 
@@ -19,105 +18,8 @@ from common import common_pb2 as common_dot_common__pb2
 
 DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x11users/users.proto\x12\raccount.users\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1egoogle/protobuf/wrappers.proto\x1a\x13\x63ommon/common.proto\"\xcd\x01\n\x04User\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x12\n\nidentities\x18\x03 \x03(\t\x12\x14\n\x0c\x64isplay_name\x18\x04 \x01(\t\x12\r\n\x05\x65mail\x18\x05 \x01(\t\x12\x32\n\x0e\x65mail_verified\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x12\n\navatar_url\x18\x07 \x01(\t\x12*\n\x06system\x18\n \x01(\x0b\x32\x1a.google.protobuf.BoolValue\"\xbb\x01\n\x06\x46ilter\x12\n\n\x02id\x18\x01 \x03(\t\x12\x0c\n\x04name\x18\x02 \x03(\t\x12\x12\n\nidentities\x18\x03 \x03(\t\x12\x14\n\x0c\x64isplay_name\x18\x04 \x03(\t\x12\r\n\x05\x65mail\x18\x05 \x03(\t\x12\x32\n\x0e\x65mail_verified\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12*\n\x06system\x18\n \x01(\x0b\x32\x1a.google.protobuf.BoolValue\"4\n\rCreateRequest\x12#\n\x06\x63reate\x18\x01 \x01(\x0b\x32\x13.account.users.User\"3\n\x0e\x43reateResponse\x12!\n\x04user\x18\x01 \x01(\x0b\x32\x13.account.users.User\"\x1d\n\nGetRequest\x12\x0f\n\x07user_id\x18\x01 \x01(\t\"0\n\x0bGetResponse\x12!\n\x04user\x18\x01 \x01(\x0b\x32\x13.account.users.User\"Z\n\x0b\x46indRequest\x12%\n\x06\x66ilter\x18\x01 \x01(\x0b\x32\x15.account.users.Filter\x12$\n\x07options\x18\n \x01(\x0b\x32\x13.common.FindOptions\"A\n\x0c\x46indResponse\x12\"\n\x05users\x18\x01 \x03(\x0b\x32\x13.account.users.User\x12\r\n\x05total\x18\x02 \x01(\x03\"4\n\rUpdateRequest\x12#\n\x06update\x18\x02 \x01(\x0b\x32\x13.account.users.User\" \n\rDeleteRequest\x12\x0f\n\x07user_id\x18\x01 \x01(\t\"(\n\x14GetByIdentityRequest\x12\x10\n\x08identity\x18\x01 \x01(\t\":\n\x15GetByIdentityResponse\x12!\n\x04user\x18\x01 \x01(\x0b\x32\x13.account.users.User2\xb5\x03\n\x05Users\x12G\n\x06\x43reate\x12\x1c.account.users.CreateRequest\x1a\x1d.account.users.CreateResponse\"\x00\x12>\n\x03Get\x12\x19.account.users.GetRequest\x1a\x1a.account.users.GetResponse\"\x00\x12\x41\n\x04\x46ind\x12\x1a.account.users.FindRequest\x1a\x1b.account.users.FindResponse\"\x00\x12@\n\x06Update\x12\x1c.account.users.UpdateRequest\x1a\x16.google.protobuf.Empty\"\x00\x12@\n\x06\x44\x65lete\x12\x1c.account.users.DeleteRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\\\n\rGetByIdentity\x12#.account.users.GetByIdentityRequest\x1a$.account.users.GetByIdentityResponse\"\x00\x42\x30Z.git.perx.ru/perxis/perxis-go/proto/users;usersb\x06proto3')
 
-
-
-_USER = DESCRIPTOR.message_types_by_name['User']
-_FILTER = DESCRIPTOR.message_types_by_name['Filter']
-_CREATEREQUEST = DESCRIPTOR.message_types_by_name['CreateRequest']
-_CREATERESPONSE = DESCRIPTOR.message_types_by_name['CreateResponse']
-_GETREQUEST = DESCRIPTOR.message_types_by_name['GetRequest']
-_GETRESPONSE = DESCRIPTOR.message_types_by_name['GetResponse']
-_FINDREQUEST = DESCRIPTOR.message_types_by_name['FindRequest']
-_FINDRESPONSE = DESCRIPTOR.message_types_by_name['FindResponse']
-_UPDATEREQUEST = DESCRIPTOR.message_types_by_name['UpdateRequest']
-_DELETEREQUEST = DESCRIPTOR.message_types_by_name['DeleteRequest']
-_GETBYIDENTITYREQUEST = DESCRIPTOR.message_types_by_name['GetByIdentityRequest']
-_GETBYIDENTITYRESPONSE = DESCRIPTOR.message_types_by_name['GetByIdentityResponse']
-User = _reflection.GeneratedProtocolMessageType('User', (_message.Message,), {
-  'DESCRIPTOR' : _USER,
-  '__module__' : 'users.users_pb2'
-  # @@protoc_insertion_point(class_scope:account.users.User)
-  })
-_sym_db.RegisterMessage(User)
-
-Filter = _reflection.GeneratedProtocolMessageType('Filter', (_message.Message,), {
-  'DESCRIPTOR' : _FILTER,
-  '__module__' : 'users.users_pb2'
-  # @@protoc_insertion_point(class_scope:account.users.Filter)
-  })
-_sym_db.RegisterMessage(Filter)
-
-CreateRequest = _reflection.GeneratedProtocolMessageType('CreateRequest', (_message.Message,), {
-  'DESCRIPTOR' : _CREATEREQUEST,
-  '__module__' : 'users.users_pb2'
-  # @@protoc_insertion_point(class_scope:account.users.CreateRequest)
-  })
-_sym_db.RegisterMessage(CreateRequest)
-
-CreateResponse = _reflection.GeneratedProtocolMessageType('CreateResponse', (_message.Message,), {
-  'DESCRIPTOR' : _CREATERESPONSE,
-  '__module__' : 'users.users_pb2'
-  # @@protoc_insertion_point(class_scope:account.users.CreateResponse)
-  })
-_sym_db.RegisterMessage(CreateResponse)
-
-GetRequest = _reflection.GeneratedProtocolMessageType('GetRequest', (_message.Message,), {
-  'DESCRIPTOR' : _GETREQUEST,
-  '__module__' : 'users.users_pb2'
-  # @@protoc_insertion_point(class_scope:account.users.GetRequest)
-  })
-_sym_db.RegisterMessage(GetRequest)
-
-GetResponse = _reflection.GeneratedProtocolMessageType('GetResponse', (_message.Message,), {
-  'DESCRIPTOR' : _GETRESPONSE,
-  '__module__' : 'users.users_pb2'
-  # @@protoc_insertion_point(class_scope:account.users.GetResponse)
-  })
-_sym_db.RegisterMessage(GetResponse)
-
-FindRequest = _reflection.GeneratedProtocolMessageType('FindRequest', (_message.Message,), {
-  'DESCRIPTOR' : _FINDREQUEST,
-  '__module__' : 'users.users_pb2'
-  # @@protoc_insertion_point(class_scope:account.users.FindRequest)
-  })
-_sym_db.RegisterMessage(FindRequest)
-
-FindResponse = _reflection.GeneratedProtocolMessageType('FindResponse', (_message.Message,), {
-  'DESCRIPTOR' : _FINDRESPONSE,
-  '__module__' : 'users.users_pb2'
-  # @@protoc_insertion_point(class_scope:account.users.FindResponse)
-  })
-_sym_db.RegisterMessage(FindResponse)
-
-UpdateRequest = _reflection.GeneratedProtocolMessageType('UpdateRequest', (_message.Message,), {
-  'DESCRIPTOR' : _UPDATEREQUEST,
-  '__module__' : 'users.users_pb2'
-  # @@protoc_insertion_point(class_scope:account.users.UpdateRequest)
-  })
-_sym_db.RegisterMessage(UpdateRequest)
-
-DeleteRequest = _reflection.GeneratedProtocolMessageType('DeleteRequest', (_message.Message,), {
-  'DESCRIPTOR' : _DELETEREQUEST,
-  '__module__' : 'users.users_pb2'
-  # @@protoc_insertion_point(class_scope:account.users.DeleteRequest)
-  })
-_sym_db.RegisterMessage(DeleteRequest)
-
-GetByIdentityRequest = _reflection.GeneratedProtocolMessageType('GetByIdentityRequest', (_message.Message,), {
-  'DESCRIPTOR' : _GETBYIDENTITYREQUEST,
-  '__module__' : 'users.users_pb2'
-  # @@protoc_insertion_point(class_scope:account.users.GetByIdentityRequest)
-  })
-_sym_db.RegisterMessage(GetByIdentityRequest)
-
-GetByIdentityResponse = _reflection.GeneratedProtocolMessageType('GetByIdentityResponse', (_message.Message,), {
-  'DESCRIPTOR' : _GETBYIDENTITYRESPONSE,
-  '__module__' : 'users.users_pb2'
-  # @@protoc_insertion_point(class_scope:account.users.GetByIdentityResponse)
-  })
-_sym_db.RegisterMessage(GetByIdentityResponse)
-
-_USERS = DESCRIPTOR.services_by_name['Users']
+_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
+_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'users.users_pb2', globals())
 if _descriptor._USE_C_DESCRIPTORS == False:
 
   DESCRIPTOR._options = None
diff --git a/clients/users/users_pb2_grpc.py b/proto/users/users_pb2_grpc.py
similarity index 100%
rename from clients/users/users_pb2_grpc.py
rename to proto/users/users_pb2_grpc.py
diff --git a/clients/versions/account/versions_pb2.py b/proto/versions/account/versions_pb2.py
similarity index 73%
rename from clients/versions/account/versions_pb2.py
rename to proto/versions/account/versions_pb2.py
index 0924cff3ba2048b18641e5929874fef72f7524b9..76eb65aaeb074511deca137436bf11c3a5e22b46 100644
--- a/clients/versions/account/versions_pb2.py
+++ b/proto/versions/account/versions_pb2.py
@@ -2,10 +2,9 @@
 # Generated by the protocol buffer compiler.  DO NOT EDIT!
 # source: versions/account/versions.proto
 """Generated protocol buffer code."""
+from google.protobuf.internal import builder as _builder
 from google.protobuf import descriptor as _descriptor
 from google.protobuf import descriptor_pool as _descriptor_pool
-from google.protobuf import message as _message
-from google.protobuf import reflection as _reflection
 from google.protobuf import symbol_database as _symbol_database
 # @@protoc_insertion_point(imports)
 
@@ -18,17 +17,8 @@ from common import common_pb2 as common_dot_common__pb2
 
 DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1fversions/account/versions.proto\x12\x07\x61\x63\x63ount\x1a\x1bgoogle/protobuf/empty.proto\x1a\x13\x63ommon/common.proto\"/\n\x0bGetResponse\x12 \n\x07version\x18\x01 \x01(\x0b\x32\x0f.common.Version2A\n\x08Versions\x12\x35\n\x03Get\x12\x16.google.protobuf.Empty\x1a\x14.account.GetResponse\"\x00\x42=Z;git.perx.ru/perxis/perxis-go/proto/versions/account;accountb\x06proto3')
 
-
-
-_GETRESPONSE = DESCRIPTOR.message_types_by_name['GetResponse']
-GetResponse = _reflection.GeneratedProtocolMessageType('GetResponse', (_message.Message,), {
-  'DESCRIPTOR' : _GETRESPONSE,
-  '__module__' : 'versions.account.versions_pb2'
-  # @@protoc_insertion_point(class_scope:account.GetResponse)
-  })
-_sym_db.RegisterMessage(GetResponse)
-
-_VERSIONS = DESCRIPTOR.services_by_name['Versions']
+_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
+_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'versions.account.versions_pb2', globals())
 if _descriptor._USE_C_DESCRIPTORS == False:
 
   DESCRIPTOR._options = None
diff --git a/clients/versions/account/versions_pb2_grpc.py b/proto/versions/account/versions_pb2_grpc.py
similarity index 100%
rename from clients/versions/account/versions_pb2_grpc.py
rename to proto/versions/account/versions_pb2_grpc.py
diff --git a/clients/versions/content/versions_pb2.py b/proto/versions/content/versions_pb2.py
similarity index 73%
rename from clients/versions/content/versions_pb2.py
rename to proto/versions/content/versions_pb2.py
index 12ff3f74909e8055b57149549df17bae69650dff..0bf103074ffa85ef9bd75ce37dd79df00dd4a58e 100644
--- a/clients/versions/content/versions_pb2.py
+++ b/proto/versions/content/versions_pb2.py
@@ -2,10 +2,9 @@
 # Generated by the protocol buffer compiler.  DO NOT EDIT!
 # source: versions/content/versions.proto
 """Generated protocol buffer code."""
+from google.protobuf.internal import builder as _builder
 from google.protobuf import descriptor as _descriptor
 from google.protobuf import descriptor_pool as _descriptor_pool
-from google.protobuf import message as _message
-from google.protobuf import reflection as _reflection
 from google.protobuf import symbol_database as _symbol_database
 # @@protoc_insertion_point(imports)
 
@@ -18,17 +17,8 @@ from common import common_pb2 as common_dot_common__pb2
 
 DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1fversions/content/versions.proto\x12\x07\x63ontent\x1a\x1bgoogle/protobuf/empty.proto\x1a\x13\x63ommon/common.proto\"/\n\x0bGetResponse\x12 \n\x07version\x18\x01 \x01(\x0b\x32\x0f.common.Version2A\n\x08Versions\x12\x35\n\x03Get\x12\x16.google.protobuf.Empty\x1a\x14.content.GetResponse\"\x00\x42=Z;git.perx.ru/perxis/perxis-go/proto/versions/content;contentb\x06proto3')
 
-
-
-_GETRESPONSE = DESCRIPTOR.message_types_by_name['GetResponse']
-GetResponse = _reflection.GeneratedProtocolMessageType('GetResponse', (_message.Message,), {
-  'DESCRIPTOR' : _GETRESPONSE,
-  '__module__' : 'versions.content.versions_pb2'
-  # @@protoc_insertion_point(class_scope:content.GetResponse)
-  })
-_sym_db.RegisterMessage(GetResponse)
-
-_VERSIONS = DESCRIPTOR.services_by_name['Versions']
+_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
+_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'versions.content.versions_pb2', globals())
 if _descriptor._USE_C_DESCRIPTORS == False:
 
   DESCRIPTOR._options = None
diff --git a/clients/versions/content/versions_pb2_grpc.py b/proto/versions/content/versions_pb2_grpc.py
similarity index 100%
rename from clients/versions/content/versions_pb2_grpc.py
rename to proto/versions/content/versions_pb2_grpc.py