diff --git a/go.sum b/go.sum
index c23afb4718c63e0424aaa4805c160dd724735e56..e79fdfe453e8f261d715fe3f81e8c81d3d26b7fb 100644
--- a/go.sum
+++ b/go.sum
@@ -13,8 +13,6 @@ github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ3
 github.com/davecgh/go-spew v0.0.0-20161028175848-04cdfd42973b/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
-github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
-github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/gdamore/encoding v1.0.0/go.mod h1:alR0ol34c49FCSBLjhosxzcPHQbf2trDkoo5dl+VrEg=
 github.com/gdamore/tcell v1.3.0/go.mod h1:Hjvr+Ofd+gLglo7RYKxxnzCBmev3BzsS67MebKS4zMM=
@@ -38,6 +36,7 @@ github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEW
 github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
 github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
 github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
+github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
 github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
 github.com/gosimple/slug v1.13.1 h1:bQ+kpX9Qa6tHRaK+fZR0A0M2Kd7Pa5eHPPsb1JpHD+Q=
 github.com/gosimple/slug v1.13.1/go.mod h1:UiRaFH+GEilHstLUmcBgWcI42viBN7mAb818JrYOeFQ=
@@ -54,12 +53,9 @@ github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHm
 github.com/klauspost/compress v1.13.6 h1:P76CopJELS0TiO2mebmnzgWaajssP/EszplttgQxcgc=
 github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
 github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
-github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
 github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0=
 github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk=
 github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
-github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
-github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
 github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
 github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
 github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
@@ -68,6 +64,7 @@ github.com/lucasb-eyer/go-colorful v1.0.3/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i
 github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
 github.com/mattn/go-runewidth v0.0.8/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
 github.com/minio/highwayhash v1.0.2 h1:Aak5U0nElisjDCfPSG79Tgzkn2gl66NxOMspRrKnA/g=
+github.com/minio/highwayhash v1.0.2/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY=
 github.com/mitchellh/mapstructure v1.4.2 h1:6h7AQ0yhTcIsmFmnAwQls75jp2Gzs4iB8W7pjMO+rqo=
 github.com/mitchellh/mapstructure v1.4.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
 github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
@@ -78,7 +75,9 @@ github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjY
 github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe h1:iruDEfMl2E6fbMZ9s0scYfZQ84/6SPL6zC8ACM2oIL0=
 github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc=
 github.com/nats-io/jwt/v2 v2.0.3 h1:i/O6cmIsjpcQyWDYNcq2JyZ3/VTF8SJ4JWluI5OhpvI=
+github.com/nats-io/jwt/v2 v2.0.3/go.mod h1:VRP+deawSXyhNjXmxPCHskrR6Mq50BqpEI5SEcNiGlY=
 github.com/nats-io/nats-server/v2 v2.5.0 h1:wsnVaaXH9VRSg+A2MVg5Q727/CqxnmPLGFQ3YZYKTQg=
+github.com/nats-io/nats-server/v2 v2.5.0/go.mod h1:Kj86UtrXAL6LwYRA6H4RqzkHhK0Vcv2ZnKD5WbQ1t3g=
 github.com/nats-io/nats.go v1.23.0 h1:lR28r7IX44WjYgdiKz9GmUeW0uh/m33uD3yEjLZ2cOE=
 github.com/nats-io/nats.go v1.23.0/go.mod h1:ki/Scsa23edbh8IRZbCuNXR9TDcbvfaSijKtaqQgw+Q=
 github.com/nats-io/nkeys v0.3.0 h1:cgM5tL53EvYRU+2YLXIK0G2mJtK12Ft9oeooSZMA2G8=
@@ -183,6 +182,7 @@ golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
 golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE=
 golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
 golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac h1:7zkz7BUtwNFFqcowJ+RIgu2MaV/MapERkDIy+mwPyjs=
+golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
 golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
 golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
@@ -204,7 +204,6 @@ google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqw
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
 gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
 gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
diff --git a/perxis-proto b/perxis-proto
index 062d090c3a8e44d3cc4ca61678bf58c0e7377812..6e55b78ebc551eb6f3ee9be1b1c7464749091e68 160000
--- a/perxis-proto
+++ b/perxis-proto
@@ -1 +1 @@
-Subproject commit 062d090c3a8e44d3cc4ca61678bf58c0e7377812
+Subproject commit 6e55b78ebc551eb6f3ee9be1b1c7464749091e68
diff --git a/pkg/extension/action.go b/pkg/extension/action.go
index 3f090dffc541dcdee9f3dba7b0b8e6adc30931df..9e4247c03e42e743ddd3710dd916d1a39635c52d 100644
--- a/pkg/extension/action.go
+++ b/pkg/extension/action.go
@@ -18,6 +18,8 @@ type (
 	ActionRequest  = pb.ActionRequest
 	ActionResponse = pb.ActionResponse
 
+	ActionTarget = pb.Target
+
 	//ActionRequest struct {
 	//	Extension    string
 	//	Action       string
@@ -61,6 +63,8 @@ const (
 type Action struct {
 	Extension        string                  `mapstructure:"extension,omitempty"`   // Расширение
 	Action           string                  `mapstructure:"action,omitempty"`      // Идентификатор действия
+	Target           ActionTarget            `mapstructure:"target,omitempty"`      // Отображение результата действия
+	Parent           string                  `mapstructure:"parent,omitempty"`      // Идентификатор родительского действия (для отображения в меню)
 	Name             string                  `mapstructure:"name,omitempty"`        // Название действия для отображения в интерфейсе (пункт меню, кнопка).
 	Description      string                  `mapstructure:"description,omitempty"` // Описание действия для отображения в интерфейсе
 	Icon             string                  `mapstructure:"icon,omitempty"`        // Название иконки для отображения действия в интерфейсе
@@ -71,14 +75,17 @@ type Action struct {
 	Refs             []*references.Reference `mapstructure:"refs,omitempty"`        // Ссылки на записи используемые для выполнения действия (назначение ссылок зависит от действия и расширения)
 	ParamsCollection string                  `mapstructure:"params_collection,omitempty"`
 	Request          *ActionRequest          `mapstructure:"request,omitempty"`           // Параметры запроса (используется в случае `ActionResponse.next`)
-	NavigationAction bool                    `mapstructure:"navigation_action,omitempty"` // Флаг указывающий что действие переносить пользователя в другую часть интерфейса, а не отправляет запрос на сервер
+	NavigationAction bool                    `mapstructure:"navigation_action,omitempty"` // Флаг указывающий, что действие должно переносить пользователя в другую часть интерфейса, а не отправлять запрос на сервер
 	NavigationRoute  string                  `mapstructure:"navigation_route,omitempty"`
+	Autorun          bool                    `mapstructure:"autorun,omitempty"` // Параметр указывающий, что действие выполняется автоматически
+	Confirm          bool                    `mapstructure:"confirm,omitempty"` // Параметр указывающий, что действие требует подтверждения пользователя
 }
 
 func ActionToMap(action *Action) map[string]interface{} {
 	res := make(map[string]interface{})
-	mapstructure.Decode(action, &res)
+	_ = mapstructure.Decode(action, &res)
 	res["kind"] = int64(action.Kind.Number())
+	res["target"] = int64(action.Target.Number())
 	return res
 }
 
@@ -172,6 +179,8 @@ func ActionFromPB(a *pb.Action) *Action {
 	return &Action{
 		Extension:        a.Extension,
 		Action:           a.Action,
+		Target:           a.Target,
+		Parent:           a.Parent,
 		Name:             a.Name,
 		Description:      a.Description,
 		Icon:             a.Icon,
@@ -185,6 +194,8 @@ func ActionFromPB(a *pb.Action) *Action {
 		//Request:          ActionRequestFromPB(a.Request),
 		NavigationAction: a.NavigationAction,
 		NavigationRoute:  a.NavigationRoute,
+		Autorun:          a.Autorun,
+		Confirm:          a.Confirm,
 	}
 }
 
diff --git a/proto/extensions/extension.pb.go b/proto/extensions/extension.pb.go
index 23120cb2360e06a7b62529ff92183044efebe791..a74f1cea28680560beea1a8e6a08db8c70342ecf 100644
--- a/proto/extensions/extension.pb.go
+++ b/proto/extensions/extension.pb.go
@@ -31,6 +31,71 @@ const (
 	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
 )
 
+// Target - определяет как открывать результат выполнения действия в пользовательском интерфейсе
+type Target int32
+
+const (
+	Target_DEFAULT      Target = 0   // По умолчанию (если нет других условий, то MODAL)
+	Target_MODAL        Target = 1   // Открывать в модальном окне
+	Target_WIDE         Target = 2   // Открывать в широком модальном окне
+	Target_MAIN         Target = 4   // Открывать в главной рабочей области (часть без меню)
+	Target_DRAWER       Target = 5   // Открывать в боковой панели
+	Target_NOTIFICATION Target = 6   // Открывать виде всплывающего уведомлении
+	Target_BLANK        Target = 7   // Открывать в новой вкладке
+	Target_NONE         Target = 100 // Не отображать результат
+)
+
+// Enum value maps for Target.
+var (
+	Target_name = map[int32]string{
+		0:   "DEFAULT",
+		1:   "MODAL",
+		2:   "WIDE",
+		4:   "MAIN",
+		5:   "DRAWER",
+		6:   "NOTIFICATION",
+		7:   "BLANK",
+		100: "NONE",
+	}
+	Target_value = map[string]int32{
+		"DEFAULT":      0,
+		"MODAL":        1,
+		"WIDE":         2,
+		"MAIN":         4,
+		"DRAWER":       5,
+		"NOTIFICATION": 6,
+		"BLANK":        7,
+		"NONE":         100,
+	}
+)
+
+func (x Target) Enum() *Target {
+	p := new(Target)
+	*p = x
+	return p
+}
+
+func (x Target) String() string {
+	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (Target) Descriptor() protoreflect.EnumDescriptor {
+	return file_extensions_extension_proto_enumTypes[0].Descriptor()
+}
+
+func (Target) Type() protoreflect.EnumType {
+	return &file_extensions_extension_proto_enumTypes[0]
+}
+
+func (x Target) Number() protoreflect.EnumNumber {
+	return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use Target.Descriptor instead.
+func (Target) EnumDescriptor() ([]byte, []int) {
+	return file_extensions_extension_proto_rawDescGZIP(), []int{0}
+}
+
 type ExtensionRequestResult_State int32
 
 const (
@@ -70,11 +135,11 @@ func (x ExtensionRequestResult_State) String() string {
 }
 
 func (ExtensionRequestResult_State) Descriptor() protoreflect.EnumDescriptor {
-	return file_extensions_extension_proto_enumTypes[0].Descriptor()
+	return file_extensions_extension_proto_enumTypes[1].Descriptor()
 }
 
 func (ExtensionRequestResult_State) Type() protoreflect.EnumType {
-	return &file_extensions_extension_proto_enumTypes[0]
+	return &file_extensions_extension_proto_enumTypes[1]
 }
 
 func (x ExtensionRequestResult_State) Number() protoreflect.EnumNumber {
@@ -125,11 +190,11 @@ func (x ActionResponse_State) String() string {
 }
 
 func (ActionResponse_State) Descriptor() protoreflect.EnumDescriptor {
-	return file_extensions_extension_proto_enumTypes[1].Descriptor()
+	return file_extensions_extension_proto_enumTypes[2].Descriptor()
 }
 
 func (ActionResponse_State) Type() protoreflect.EnumType {
-	return &file_extensions_extension_proto_enumTypes[1]
+	return &file_extensions_extension_proto_enumTypes[2]
 }
 
 func (x ActionResponse_State) Number() protoreflect.EnumNumber {
@@ -141,42 +206,97 @@ func (ActionResponse_State) EnumDescriptor() ([]byte, []int) {
 	return file_extensions_extension_proto_rawDescGZIP(), []int{10, 0}
 }
 
+type ActionResponse_Format int32
+
+const (
+	ActionResponse_PLAIN    ActionResponse_Format = 0
+	ActionResponse_HTML     ActionResponse_Format = 1
+	ActionResponse_MARKDOWN ActionResponse_Format = 2
+)
+
+// Enum value maps for ActionResponse_Format.
+var (
+	ActionResponse_Format_name = map[int32]string{
+		0: "PLAIN",
+		1: "HTML",
+		2: "MARKDOWN",
+	}
+	ActionResponse_Format_value = map[string]int32{
+		"PLAIN":    0,
+		"HTML":     1,
+		"MARKDOWN": 2,
+	}
+)
+
+func (x ActionResponse_Format) Enum() *ActionResponse_Format {
+	p := new(ActionResponse_Format)
+	*p = x
+	return p
+}
+
+func (x ActionResponse_Format) String() string {
+	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (ActionResponse_Format) Descriptor() protoreflect.EnumDescriptor {
+	return file_extensions_extension_proto_enumTypes[3].Descriptor()
+}
+
+func (ActionResponse_Format) Type() protoreflect.EnumType {
+	return &file_extensions_extension_proto_enumTypes[3]
+}
+
+func (x ActionResponse_Format) Number() protoreflect.EnumNumber {
+	return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use ActionResponse_Format.Descriptor instead.
+func (ActionResponse_Format) EnumDescriptor() ([]byte, []int) {
+	return file_extensions_extension_proto_rawDescGZIP(), []int{10, 1}
+}
+
 // Kind описывает c какой сущность системы связано действие и что требуется передать в качестве параметров
 // Интерфейс загружает пользовательские действия и отображает их в интерфейсе в зависимости от ActionType.
 type Action_Kind int32
 
 const (
-	Action_DEFAULT     Action_Kind = 0 // Действие не отображается в интерфейсе и могут используется для выполнения дополнительных запросов (см. `ActionResponse.next`) или напрямую из сторонних приложений.
-	Action_SPACE       Action_Kind = 1 // Действие связано с пространством (требуется передача space_id). Отображается в меню "Действия".
-	Action_ENVIRONMENT Action_Kind = 2 // Действие связано с окружением (требуется передача space_id, env_id). Отображается в меню "Действия".
-	Action_COLLECTION  Action_Kind = 3 // Действие связано с коллекцией (требуется передача space_id, env_id, collection_id). Отображается на экране списка записей.
-	Action_ITEM        Action_Kind = 4 // Действие связано с записью (требуется передача space_id, env_id, collection_id, item_id). Отображается на экране редактирования записи.
-	Action_ITEMS       Action_Kind = 5 // Действие связано с несколькими записями (требуется передача space_id, env_id, collection_id, item_ids). Отображается на экране списка записей.
-	Action_REVISION    Action_Kind = 6 // Действие связано с ревизией записи (требуется передача space_id, env_id, collection_id, item_id, rev_id). На данный момент не используется.
-	Action_CREATE      Action_Kind = 7 // Действие создание записи (требуется передача space_id, env_id, collection_id).
+	Action_DEFAULT          Action_Kind = 0     // Действие не отображается в интерфейсе и могут используется для выполнения дополнительных запросов (см. `ActionResponse.next`) или напрямую из сторонних приложений.
+	Action_SPACE            Action_Kind = 1     // Действие связано с пространством (требуется передача space_id). Отображается в меню "Действия".
+	Action_ENVIRONMENT      Action_Kind = 2     // Действие связано с окружением (требуется передача space_id, env_id). Отображается в меню "Действия".
+	Action_COLLECTION       Action_Kind = 3     // Действие связано с коллекцией (требуется передача space_id, env_id, collection_id). Отображается на экране списка записей.
+	Action_ITEM             Action_Kind = 4     // Действие связано с записью (требуется передача space_id, env_id, collection_id, item_id). Отображается на экране редактирования записи.
+	Action_ITEMS            Action_Kind = 5     // Действие связано с несколькими записями (требуется передача space_id, env_id, collection_id, item_ids). Отображается на экране списка записей.
+	Action_REVISION         Action_Kind = 6     // Действие связано с ревизией записи (требуется передача space_id, env_id, collection_id, item_id, rev_id). На данный момент не используется.
+	Action_CREATE           Action_Kind = 7     // Действие создание записи (требуется передача space_id, env_id, collection_id).
+	Action_MAIN_MENU        Action_Kind = 10000 // Действие отображается в главном меню (требуется передача space_id, env_id)
+	Action_MAIN_MENU_BOTTOM Action_Kind = 10010 // Действие отображается в главном меню внизу (требуется передача space_id, env_id)
 )
 
 // Enum value maps for Action_Kind.
 var (
 	Action_Kind_name = map[int32]string{
-		0: "DEFAULT",
-		1: "SPACE",
-		2: "ENVIRONMENT",
-		3: "COLLECTION",
-		4: "ITEM",
-		5: "ITEMS",
-		6: "REVISION",
-		7: "CREATE",
+		0:     "DEFAULT",
+		1:     "SPACE",
+		2:     "ENVIRONMENT",
+		3:     "COLLECTION",
+		4:     "ITEM",
+		5:     "ITEMS",
+		6:     "REVISION",
+		7:     "CREATE",
+		10000: "MAIN_MENU",
+		10010: "MAIN_MENU_BOTTOM",
 	}
 	Action_Kind_value = map[string]int32{
-		"DEFAULT":     0,
-		"SPACE":       1,
-		"ENVIRONMENT": 2,
-		"COLLECTION":  3,
-		"ITEM":        4,
-		"ITEMS":       5,
-		"REVISION":    6,
-		"CREATE":      7,
+		"DEFAULT":          0,
+		"SPACE":            1,
+		"ENVIRONMENT":      2,
+		"COLLECTION":       3,
+		"ITEM":             4,
+		"ITEMS":            5,
+		"REVISION":         6,
+		"CREATE":           7,
+		"MAIN_MENU":        10000,
+		"MAIN_MENU_BOTTOM": 10010,
 	}
 )
 
@@ -191,11 +311,11 @@ func (x Action_Kind) String() string {
 }
 
 func (Action_Kind) Descriptor() protoreflect.EnumDescriptor {
-	return file_extensions_extension_proto_enumTypes[2].Descriptor()
+	return file_extensions_extension_proto_enumTypes[4].Descriptor()
 }
 
 func (Action_Kind) Type() protoreflect.EnumType {
-	return &file_extensions_extension_proto_enumTypes[2]
+	return &file_extensions_extension_proto_enumTypes[4]
 }
 
 func (x Action_Kind) Number() protoreflect.EnumNumber {
@@ -897,8 +1017,12 @@ type ActionResponse struct {
 	unknownFields protoimpl.UnknownFields
 
 	State    ActionResponse_State    `protobuf:"varint,10000,opt,name=state,proto3,enum=extensions.ActionResponse_State" json:"state,omitempty"`                                                         // Состояние расширение
+	Target   Target                  `protobuf:"varint,10010,opt,name=target,proto3,enum=extensions.Target" json:"target,omitempty"`                                                                     // Как открывать результат выполнения действия в пользовательском интерфейсе (переопределяет значение в Action)
+	Format   ActionResponse_Format   `protobuf:"varint,10050,opt,name=format,proto3,enum=extensions.ActionResponse_Format" json:"format,omitempty"`                                                      // Формат полей msg  и error
 	Msg      string                  `protobuf:"bytes,10100,opt,name=msg,proto3" json:"msg,omitempty"`                                                                                                   // Сообщение о выполнении действия
-	Error    string                  `protobuf:"bytes,10200,opt,name=error,proto3" json:"error,omitempty"`                                                                                               // Сообщение в случае ошибки
+	Title    string                  `protobuf:"bytes,10110,opt,name=title,proto3" json:"title,omitempty"`                                                                                               // Текст для отображения в интерфейсе
+	Image    string                  `protobuf:"bytes,10140,opt,name=image,proto3" json:"image,omitempty"`                                                                                               // Изображение для отображения в интерфейсе (шапке окна)
+	Error    string                  `protobuf:"bytes,10200,opt,name=error,proto3" json:"error,omitempty"`                                                                                               // Сообщение в случае ошибки (дополнительно к msg)
 	Next     []*Action               `protobuf:"bytes,10300,rep,name=next,proto3" json:"next,omitempty"`                                                                                                 // Следующие возможные действия. Интерфейс отображает как варианты дальнейших действий пользователя
 	Metadata map[string]string       `protobuf:"bytes,10400,rep,name=metadata,proto3" json:"metadata,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // Метаданные запроса
 	Refs     []*references.Reference `protobuf:"bytes,10320,rep,name=refs,proto3" json:"refs,omitempty"`                                                                                                 // Ссылки на записи (назначение ссылок зависит от действия и расширения)
@@ -943,6 +1067,20 @@ func (x *ActionResponse) GetState() ActionResponse_State {
 	return ActionResponse_DONE
 }
 
+func (x *ActionResponse) GetTarget() Target {
+	if x != nil {
+		return x.Target
+	}
+	return Target_DEFAULT
+}
+
+func (x *ActionResponse) GetFormat() ActionResponse_Format {
+	if x != nil {
+		return x.Format
+	}
+	return ActionResponse_PLAIN
+}
+
 func (x *ActionResponse) GetMsg() string {
 	if x != nil {
 		return x.Msg
@@ -950,6 +1088,20 @@ func (x *ActionResponse) GetMsg() string {
 	return ""
 }
 
+func (x *ActionResponse) GetTitle() string {
+	if x != nil {
+		return x.Title
+	}
+	return ""
+}
+
+func (x *ActionResponse) GetImage() string {
+	if x != nil {
+		return x.Image
+	}
+	return ""
+}
+
 func (x *ActionResponse) GetError() string {
 	if x != nil {
 		return x.Error
@@ -978,33 +1130,61 @@ func (x *ActionResponse) GetRefs() []*references.Reference {
 	return nil
 }
 
-//*
-//Action описывает как коллекцию в системе с предуставновленными действиями, так и возможные дальнейшие действия после
-//получения ответа  (см. `ActionResponse.next`)
+// *
+// Action описывает как коллекцию в системе с предуставновленными действиями, так и возможные дальнейшие действия после
+// получения ответа  (см. `ActionResponse.next`)
 //
-//Если поле `request` присутствует, но не все требуемые поля заполнены, то значения для них берутся из текущих значений.
+// Если поле `request` присутствует, но не все требуемые поля заполнены, то значения для них берутся из текущих значений.
 //
-//Коллекция: space_actions (Пространство/Действия)
-//Действия сохраненные в коллекции не содержат поля `request`. Значение заполняется текущими значениями.
+// Коллекция: space_actions (Пространство/Действия)
+// Действия сохраненные в коллекции не содержат поля `request`. Значение заполняется текущими значениями.
 //
-//Пользовательские действия добавляются при установке расширений или при
-//настройке в системную коллекции `Пространство/Действия` (system_actions). Расширения самостоятельно контролирует создание необходимых
-//им действий в коллекции.
+// Пользовательские действия добавляются при установке расширений или при
+// настройке в системную коллекции `Пространство/Действия` (system_actions). Расширения самостоятельно контролирует создание необходимых
+// им действий в коллекции.
 //
-//Интерфейс загружает пользовательские действия и отображает их в интерфейсе соответствующим образом.
+// Интерфейс загружает пользовательские действия и отображает их в интерфейсе соответствующим образом.
 type Action struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 
-	Extension   string                `protobuf:"bytes,10000,opt,name=extension,proto3" json:"extension,omitempty"`                    // Расширение
-	Action      string                `protobuf:"bytes,10100,opt,name=action,proto3" json:"action,omitempty"`                          // Идентификатор действия
+	// DEPRECATED: Используйте `action` в формате URI
+	Extension string `protobuf:"bytes,10000,opt,name=extension,proto3" json:"extension,omitempty"` // Расширение
+	// Идентификатор действия (в формате URI)
+	// Варианты использования:
+	// - пустой - никаких действий не выполняется
+	// - `action_id` - простое действие (если установлено расширение, то оно используется)
+	// - `grpc:///extension_id/action_id` - полное действие с указанием расширения
+	// - `https://host/path` - действие по HTTP(S)
+	// - `ui:///path` - действие в интерфейсе
+	// - `/path` - действие в интерфейсе
+	//
+	// Пример: `https://example.com/api/v1/action` - будет выполнен запрос HTTP по указанному URL.
+	// Сервер может вернуть ответ в формате JSON или HTML/MD. Дальнейшие действия определяется оп заголовку ответа
+	// `Content-Type`:
+	// - `application/json` - ответ в формате JSON. Структура ответа соответствует `ActionResponse` и интерпретируется
+	// тем же способом что и ответ от GRPC.
+	// - `text/html` - ответ в формате HTML. Интерфейс отображает ответ в виде сообщения в IFrame
+	// - `text/markdown` - ответ в формате MD. Интерфейс отображает ответ в виде сообщения.
+	//
+	// Переменные `:var` заменяются на текуще значение в пользовательском интерфейсе
+	// Перечень переменных для подстановки:
+	// - :spaceId
+	// - :envId
+	// - :colId
+	// - :itemId
+	//
+	// Пример: `ui:///spaces/:spaceId/envs/:envId/cols/:colId` - будет выполнено действие в интерфейсе.
+	Action      string                `protobuf:"bytes,10100,opt,name=action,proto3" json:"action,omitempty"`
+	Target      Target                `protobuf:"varint,10110,opt,name=target,proto3,enum=extensions.Target" json:"target,omitempty"`  // как должен отображаться результат действия
+	Parent      string                `protobuf:"bytes,10120,opt,name=parent,proto3" json:"parent,omitempty"`                          // Идентификатор родительского действия (для отображения в меню)
 	Name        string                `protobuf:"bytes,10200,opt,name=name,proto3" json:"name,omitempty"`                              // Название действия для отображения в интерфейсе (пункт меню, кнопка).
 	Description string                `protobuf:"bytes,10210,opt,name=description,proto3" json:"description,omitempty"`                // Описание действия для отображения в интерфейсе
 	Icon        string                `protobuf:"bytes,10220,opt,name=icon,proto3" json:"icon,omitempty"`                              // Название иконки для отображения действия в интерфейсе
 	Image       *references.Reference `protobuf:"bytes,10230,opt,name=image,proto3" json:"image,omitempty"`                            // Изображение для отображения в действия в интерфейсе
 	Groups      []string              `protobuf:"bytes,10240,rep,name=groups,proto3" json:"groups,omitempty"`                          // Группы отображения действия в интерфейсе
-	Kind        Action_Kind           `protobuf:"varint,10300,opt,name=kind,proto3,enum=extensions.Action_Kind" json:"kind,omitempty"` // Указывает на что направлено действие
+	Kind        Action_Kind           `protobuf:"varint,10300,opt,name=kind,proto3,enum=extensions.Action_Kind" json:"kind,omitempty"` // Указывает область действия (где отображается действие)
 	Classes     []string              `protobuf:"bytes,10310,rep,name=classes,proto3" json:"classes,omitempty"`                        // Классы данных к которым применимо действие (название коллекций или специальных групп в рамках которых данное действие применимо)
 	// Для `CREATE` действуют следующие правила:
 	// - Для создание записей в коллекции применимы действия которые содержат в classes название коллекции
@@ -1015,8 +1195,9 @@ type Action struct {
 	// Коллекция для сохранения параметрами действия. Если параметр указан, то при выполнении действия будет открываться
 	// форма создания записи в указанной коллекции
 	ParamsCollection string         `protobuf:"bytes,10330,opt,name=params_collection,json=paramsCollection,proto3" json:"params_collection,omitempty"`
-	Request          *ActionRequest `protobuf:"bytes,10400,opt,name=request,proto3" json:"request,omitempty"`                                            // Параметры запроса (используется в случае `ActionResponse.next`)
-	NavigationAction bool           `protobuf:"varint,10500,opt,name=navigation_action,json=navigationAction,proto3" json:"navigation_action,omitempty"` // Флаг указывающий что действие переносить пользователя в другую часть интерфейса, а не отправляет запрос на сервер
+	Request          *ActionRequest `protobuf:"bytes,10400,opt,name=request,proto3" json:"request,omitempty"` // Параметры запроса (используется в случае `ActionResponse.next`)
+	// DEPRECATED: Используйте `action_url` вместо `navigation_route`
+	NavigationAction bool `protobuf:"varint,10500,opt,name=navigation_action,json=navigationAction,proto3" json:"navigation_action,omitempty"` // Флаг указывающий что действие переносить пользователя в другую часть интерфейса, а не отправляет запрос на сервер
 	// navigation_route - Строка шаблон для перехода в интерфейсе
 	// При указании полного адреса (http(s)://xyz), URL открывается в новом окне браузера
 	// Относительный адрес в пользовательском интерфейсе переносит пользователя в соответствующий раздел без перезагрузки приложения
@@ -1028,7 +1209,14 @@ type Action struct {
 	// - :colId
 	// - :itemId
 	//
+	// DEPRECATED: Используйте `action_type == "NAVIGATION"`
 	NavigationRoute string `protobuf:"bytes,10510,opt,name=navigation_route,json=navigationRoute,proto3" json:"navigation_route,omitempty"`
+	// Параметр указывающий что действие выполняется автоматически
+	// Если указано, то действие выполняется автоматически каждый раз при загрузке приложения
+	Autorun bool `protobuf:"varint,10520,opt,name=autorun,proto3" json:"autorun,omitempty"`
+	// Параметр указывающий что действие требует подтверждения пользователя
+	// Перед выполнением действия пользователю отображается информация о действии и кнопки подтверждения/отмены
+	Confirm bool `protobuf:"varint,10530,opt,name=confirm,proto3" json:"confirm,omitempty"`
 }
 
 func (x *Action) Reset() {
@@ -1077,6 +1265,20 @@ func (x *Action) GetAction() string {
 	return ""
 }
 
+func (x *Action) GetTarget() Target {
+	if x != nil {
+		return x.Target
+	}
+	return Target_DEFAULT
+}
+
+func (x *Action) GetParent() string {
+	if x != nil {
+		return x.Parent
+	}
+	return ""
+}
+
 func (x *Action) GetName() string {
 	if x != nil {
 		return x.Name
@@ -1161,6 +1363,20 @@ func (x *Action) GetNavigationRoute() string {
 	return ""
 }
 
+func (x *Action) GetAutorun() bool {
+	if x != nil {
+		return x.Autorun
+	}
+	return false
+}
+
+func (x *Action) GetConfirm() bool {
+	if x != nil {
+		return x.Confirm
+	}
+	return false
+}
+
 var File_extensions_extension_proto protoreflect.FileDescriptor
 
 var file_extensions_extension_proto_rawDesc = []byte{
@@ -1268,101 +1484,130 @@ var file_extensions_extension_proto_rawDesc = []byte{
 	0x3b, 0x0a, 0x0d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79,
 	0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b,
 	0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
-	0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xa9, 0x03, 0x0a,
+	0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xed, 0x04, 0x0a,
 	0x0e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12,
 	0x37, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x90, 0x4e, 0x20, 0x01, 0x28, 0x0e, 0x32,
 	0x20, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x41, 0x63, 0x74,
 	0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74,
-	0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x11, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18,
-	0xf4, 0x4e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x15, 0x0a, 0x05, 0x65,
-	0x72, 0x72, 0x6f, 0x72, 0x18, 0xd8, 0x4f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72,
-	0x6f, 0x72, 0x12, 0x27, 0x0a, 0x04, 0x6e, 0x65, 0x78, 0x74, 0x18, 0xbc, 0x50, 0x20, 0x03, 0x28,
-	0x0b, 0x32, 0x12, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x41,
-	0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x04, 0x6e, 0x65, 0x78, 0x74, 0x12, 0x45, 0x0a, 0x08, 0x6d,
-	0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0xa0, 0x51, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28,
-	0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x41, 0x63, 0x74, 0x69,
-	0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64,
-	0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61,
-	0x74, 0x61, 0x12, 0x32, 0x0a, 0x04, 0x72, 0x65, 0x66, 0x73, 0x18, 0xd0, 0x50, 0x20, 0x03, 0x28,
-	0x0b, 0x32, 0x1d, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x72, 0x65, 0x66, 0x65,
-	0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65,
-	0x52, 0x04, 0x72, 0x65, 0x66, 0x73, 0x1a, 0x3b, 0x0a, 0x0d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61,
-	0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01,
-	0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c,
-	0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a,
-	0x02, 0x38, 0x01, 0x22, 0x53, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x08, 0x0a, 0x04,
-	0x44, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10,
-	0x01, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x12, 0x0f,
-	0x0a, 0x0b, 0x49, 0x4e, 0x5f, 0x50, 0x52, 0x4f, 0x47, 0x52, 0x45, 0x53, 0x53, 0x10, 0x03, 0x12,
-	0x17, 0x0a, 0x13, 0x50, 0x41, 0x52, 0x41, 0x4d, 0x45, 0x54, 0x45, 0x52, 0x53, 0x5f, 0x52, 0x45,
-	0x51, 0x55, 0x49, 0x52, 0x45, 0x44, 0x10, 0x04, 0x22, 0x87, 0x05, 0x0a, 0x06, 0x41, 0x63, 0x74,
-	0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x09, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e,
-	0x18, 0x90, 0x4e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69,
-	0x6f, 0x6e, 0x12, 0x17, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xf4, 0x4e, 0x20,
-	0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x13, 0x0a, 0x04, 0x6e,
-	0x61, 0x6d, 0x65, 0x18, 0xd8, 0x4f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65,
-	0x12, 0x21, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18,
-	0xe2, 0x4f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74,
-	0x69, 0x6f, 0x6e, 0x12, 0x13, 0x0a, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x18, 0xec, 0x4f, 0x20, 0x01,
-	0x28, 0x09, 0x52, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x12, 0x34, 0x0a, 0x05, 0x69, 0x6d, 0x61, 0x67,
-	0x65, 0x18, 0xf6, 0x4f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65,
+	0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x2b, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67,
+	0x65, 0x74, 0x18, 0x9a, 0x4e, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x12, 0x2e, 0x65, 0x78, 0x74, 0x65,
+	0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x06, 0x74,
+	0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x3a, 0x0a, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18,
+	0xc2, 0x4e, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69,
+	0x6f, 0x6e, 0x73, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+	0x73, 0x65, 0x2e, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x52, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61,
+	0x74, 0x12, 0x11, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0xf4, 0x4e, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x03, 0x6d, 0x73, 0x67, 0x12, 0x15, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0xfe, 0x4e,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x15, 0x0a, 0x05, 0x69,
+	0x6d, 0x61, 0x67, 0x65, 0x18, 0x9c, 0x4f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x69, 0x6d, 0x61,
+	0x67, 0x65, 0x12, 0x15, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xd8, 0x4f, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x27, 0x0a, 0x04, 0x6e, 0x65, 0x78,
+	0x74, 0x18, 0xbc, 0x50, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e,
+	0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x04, 0x6e, 0x65,
+	0x78, 0x74, 0x12, 0x45, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0xa0,
+	0x51, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f,
+	0x6e, 0x73, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+	0x65, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52,
+	0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x32, 0x0a, 0x04, 0x72, 0x65, 0x66,
+	0x73, 0x18, 0xd0, 0x50, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65,
 	0x6e, 0x74, 0x2e, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65,
-	0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x17,
-	0x0a, 0x06, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x18, 0x80, 0x50, 0x20, 0x03, 0x28, 0x09, 0x52,
-	0x06, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0x2c, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18,
-	0xbc, 0x50, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69,
-	0x6f, 0x6e, 0x73, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x4b, 0x69, 0x6e, 0x64, 0x52,
-	0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x19, 0x0a, 0x07, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x65, 0x73,
-	0x18, 0xc6, 0x50, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x65, 0x73,
-	0x12, 0x32, 0x0a, 0x04, 0x72, 0x65, 0x66, 0x73, 0x18, 0xd0, 0x50, 0x20, 0x03, 0x28, 0x0b, 0x32,
-	0x1d, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65,
-	0x6e, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x04,
-	0x72, 0x65, 0x66, 0x73, 0x12, 0x2c, 0x0a, 0x11, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x5f, 0x63,
-	0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xda, 0x50, 0x20, 0x01, 0x28, 0x09,
-	0x52, 0x10, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69,
-	0x6f, 0x6e, 0x12, 0x34, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xa0, 0x51,
-	0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e,
-	0x73, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52,
-	0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x11, 0x6e, 0x61, 0x76, 0x69,
-	0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x84, 0x52,
-	0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x6e, 0x61, 0x76, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e,
-	0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x0a, 0x10, 0x6e, 0x61, 0x76, 0x69, 0x67, 0x61,
-	0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x18, 0x8e, 0x52, 0x20, 0x01, 0x28,
-	0x09, 0x52, 0x0f, 0x6e, 0x61, 0x76, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x6f, 0x75,
-	0x74, 0x65, 0x22, 0x6e, 0x0a, 0x04, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45,
-	0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x53, 0x50, 0x41, 0x43, 0x45,
-	0x10, 0x01, 0x12, 0x0f, 0x0a, 0x0b, 0x45, 0x4e, 0x56, 0x49, 0x52, 0x4f, 0x4e, 0x4d, 0x45, 0x4e,
-	0x54, 0x10, 0x02, 0x12, 0x0e, 0x0a, 0x0a, 0x43, 0x4f, 0x4c, 0x4c, 0x45, 0x43, 0x54, 0x49, 0x4f,
-	0x4e, 0x10, 0x03, 0x12, 0x08, 0x0a, 0x04, 0x49, 0x54, 0x45, 0x4d, 0x10, 0x04, 0x12, 0x09, 0x0a,
-	0x05, 0x49, 0x54, 0x45, 0x4d, 0x53, 0x10, 0x05, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x45, 0x56, 0x49,
-	0x53, 0x49, 0x4f, 0x4e, 0x10, 0x06, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45,
-	0x10, 0x07, 0x32, 0xe3, 0x02, 0x0a, 0x09, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e,
-	0x12, 0x44, 0x0a, 0x07, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x12, 0x1a, 0x2e, 0x65, 0x78,
-	0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c,
-	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73,
-	0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70,
-	0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x3e, 0x0a, 0x05, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x12,
-	0x18, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x43, 0x68, 0x65,
-	0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x65, 0x78, 0x74, 0x65,
-	0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70,
-	0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x41, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65,
-	0x12, 0x19, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x55, 0x70,
-	0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x65, 0x78,
-	0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52,
-	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4a, 0x0a, 0x09, 0x55, 0x6e, 0x69,
-	0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x12, 0x1c, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69,
-	0x6f, 0x6e, 0x73, 0x2e, 0x55, 0x6e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71,
-	0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e,
-	0x73, 0x2e, 0x55, 0x6e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f,
-	0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x41, 0x0a, 0x06, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12,
-	0x19, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x41, 0x63, 0x74,
-	0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x65, 0x78, 0x74,
-	0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65,
-	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x3a, 0x5a, 0x38, 0x67, 0x69, 0x74, 0x2e,
-	0x70, 0x65, 0x72, 0x78, 0x2e, 0x72, 0x75, 0x2f, 0x70, 0x65, 0x72, 0x78, 0x69, 0x73, 0x2f, 0x70,
-	0x65, 0x72, 0x78, 0x69, 0x73, 0x2d, 0x67, 0x6f, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65,
-	0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x3b, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73,
-	0x69, 0x6f, 0x6e, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+	0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x04, 0x72, 0x65, 0x66, 0x73, 0x1a, 0x3b, 0x0a,
+	0x0d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10,
+	0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79,
+	0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x53, 0x0a, 0x05, 0x53, 0x74,
+	0x61, 0x74, 0x65, 0x12, 0x08, 0x0a, 0x04, 0x44, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x09, 0x0a,
+	0x05, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x45, 0x4e, 0x44,
+	0x49, 0x4e, 0x47, 0x10, 0x02, 0x12, 0x0f, 0x0a, 0x0b, 0x49, 0x4e, 0x5f, 0x50, 0x52, 0x4f, 0x47,
+	0x52, 0x45, 0x53, 0x53, 0x10, 0x03, 0x12, 0x17, 0x0a, 0x13, 0x50, 0x41, 0x52, 0x41, 0x4d, 0x45,
+	0x54, 0x45, 0x52, 0x53, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x49, 0x52, 0x45, 0x44, 0x10, 0x04, 0x22,
+	0x2b, 0x0a, 0x06, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x09, 0x0a, 0x05, 0x50, 0x4c, 0x41,
+	0x49, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x48, 0x54, 0x4d, 0x4c, 0x10, 0x01, 0x12, 0x0c,
+	0x0a, 0x08, 0x4d, 0x41, 0x52, 0x4b, 0x44, 0x4f, 0x57, 0x4e, 0x10, 0x02, 0x22, 0xab, 0x06, 0x0a,
+	0x06, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x09, 0x65, 0x78, 0x74, 0x65, 0x6e,
+	0x73, 0x69, 0x6f, 0x6e, 0x18, 0x90, 0x4e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x65, 0x78, 0x74,
+	0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x17, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e,
+	0x18, 0xf4, 0x4e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12,
+	0x2b, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0xfe, 0x4e, 0x20, 0x01, 0x28, 0x0e,
+	0x32, 0x12, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x54, 0x61,
+	0x72, 0x67, 0x65, 0x74, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x17, 0x0a, 0x06,
+	0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x88, 0x4f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70,
+	0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x13, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0xd8, 0x4f,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0b, 0x64, 0x65,
+	0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xe2, 0x4f, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x13, 0x0a,
+	0x04, 0x69, 0x63, 0x6f, 0x6e, 0x18, 0xec, 0x4f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x69, 0x63,
+	0x6f, 0x6e, 0x12, 0x34, 0x0a, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0xf6, 0x4f, 0x20, 0x01,
+	0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x72, 0x65, 0x66,
+	0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63,
+	0x65, 0x52, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x17, 0x0a, 0x06, 0x67, 0x72, 0x6f, 0x75,
+	0x70, 0x73, 0x18, 0x80, 0x50, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x67, 0x72, 0x6f, 0x75, 0x70,
+	0x73, 0x12, 0x2c, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0xbc, 0x50, 0x20, 0x01, 0x28, 0x0e,
+	0x32, 0x17, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x41, 0x63,
+	0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x4b, 0x69, 0x6e, 0x64, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12,
+	0x19, 0x0a, 0x07, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x65, 0x73, 0x18, 0xc6, 0x50, 0x20, 0x03, 0x28,
+	0x09, 0x52, 0x07, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x65, 0x73, 0x12, 0x32, 0x0a, 0x04, 0x72, 0x65,
+	0x66, 0x73, 0x18, 0xd0, 0x50, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x63, 0x6f, 0x6e, 0x74,
+	0x65, 0x6e, 0x74, 0x2e, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x2e, 0x52,
+	0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x04, 0x72, 0x65, 0x66, 0x73, 0x12, 0x2c,
+	0x0a, 0x11, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x5f, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74,
+	0x69, 0x6f, 0x6e, 0x18, 0xda, 0x50, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x70, 0x61, 0x72, 0x61,
+	0x6d, 0x73, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x34, 0x0a, 0x07,
+	0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xa0, 0x51, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19,
+	0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x41, 0x63, 0x74, 0x69,
+	0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65,
+	0x73, 0x74, 0x12, 0x2c, 0x0a, 0x11, 0x6e, 0x61, 0x76, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+	0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x84, 0x52, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10,
+	0x6e, 0x61, 0x76, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e,
+	0x12, 0x2a, 0x0a, 0x10, 0x6e, 0x61, 0x76, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72,
+	0x6f, 0x75, 0x74, 0x65, 0x18, 0x8e, 0x52, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x6e, 0x61, 0x76,
+	0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x12, 0x19, 0x0a, 0x07,
+	0x61, 0x75, 0x74, 0x6f, 0x72, 0x75, 0x6e, 0x18, 0x98, 0x52, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07,
+	0x61, 0x75, 0x74, 0x6f, 0x72, 0x75, 0x6e, 0x12, 0x19, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x66, 0x69,
+	0x72, 0x6d, 0x18, 0xa2, 0x52, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x66, 0x69,
+	0x72, 0x6d, 0x22, 0x95, 0x01, 0x0a, 0x04, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x0b, 0x0a, 0x07, 0x44,
+	0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x53, 0x50, 0x41, 0x43,
+	0x45, 0x10, 0x01, 0x12, 0x0f, 0x0a, 0x0b, 0x45, 0x4e, 0x56, 0x49, 0x52, 0x4f, 0x4e, 0x4d, 0x45,
+	0x4e, 0x54, 0x10, 0x02, 0x12, 0x0e, 0x0a, 0x0a, 0x43, 0x4f, 0x4c, 0x4c, 0x45, 0x43, 0x54, 0x49,
+	0x4f, 0x4e, 0x10, 0x03, 0x12, 0x08, 0x0a, 0x04, 0x49, 0x54, 0x45, 0x4d, 0x10, 0x04, 0x12, 0x09,
+	0x0a, 0x05, 0x49, 0x54, 0x45, 0x4d, 0x53, 0x10, 0x05, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x45, 0x56,
+	0x49, 0x53, 0x49, 0x4f, 0x4e, 0x10, 0x06, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x52, 0x45, 0x41, 0x54,
+	0x45, 0x10, 0x07, 0x12, 0x0e, 0x0a, 0x09, 0x4d, 0x41, 0x49, 0x4e, 0x5f, 0x4d, 0x45, 0x4e, 0x55,
+	0x10, 0x90, 0x4e, 0x12, 0x15, 0x0a, 0x10, 0x4d, 0x41, 0x49, 0x4e, 0x5f, 0x4d, 0x45, 0x4e, 0x55,
+	0x5f, 0x42, 0x4f, 0x54, 0x54, 0x4f, 0x4d, 0x10, 0x9a, 0x4e, 0x2a, 0x67, 0x0a, 0x06, 0x54, 0x61,
+	0x72, 0x67, 0x65, 0x74, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10,
+	0x00, 0x12, 0x09, 0x0a, 0x05, 0x4d, 0x4f, 0x44, 0x41, 0x4c, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04,
+	0x57, 0x49, 0x44, 0x45, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x4d, 0x41, 0x49, 0x4e, 0x10, 0x04,
+	0x12, 0x0a, 0x0a, 0x06, 0x44, 0x52, 0x41, 0x57, 0x45, 0x52, 0x10, 0x05, 0x12, 0x10, 0x0a, 0x0c,
+	0x4e, 0x4f, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x06, 0x12, 0x09,
+	0x0a, 0x05, 0x42, 0x4c, 0x41, 0x4e, 0x4b, 0x10, 0x07, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e,
+	0x45, 0x10, 0x64, 0x32, 0xe3, 0x02, 0x0a, 0x09, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f,
+	0x6e, 0x12, 0x44, 0x0a, 0x07, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x12, 0x1a, 0x2e, 0x65,
+	0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c,
+	0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e,
+	0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x73,
+	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x3e, 0x0a, 0x05, 0x43, 0x68, 0x65, 0x63, 0x6b,
+	0x12, 0x18, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x43, 0x68,
+	0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x65, 0x78, 0x74,
+	0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73,
+	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x41, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74,
+	0x65, 0x12, 0x19, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x55,
+	0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x65,
+	0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65,
+	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4a, 0x0a, 0x09, 0x55, 0x6e,
+	0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x12, 0x1c, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73,
+	0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x55, 0x6e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65,
+	0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f,
+	0x6e, 0x73, 0x2e, 0x55, 0x6e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70,
+	0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x41, 0x0a, 0x06, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e,
+	0x12, 0x19, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x41, 0x63,
+	0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x65, 0x78,
+	0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52,
+	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x3a, 0x5a, 0x38, 0x67, 0x69, 0x74,
+	0x2e, 0x70, 0x65, 0x72, 0x78, 0x2e, 0x72, 0x75, 0x2f, 0x70, 0x65, 0x72, 0x78, 0x69, 0x73, 0x2f,
+	0x70, 0x65, 0x72, 0x78, 0x69, 0x73, 0x2d, 0x67, 0x6f, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f,
+	0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x3b, 0x65, 0x78, 0x74, 0x65, 0x6e,
+	0x73, 0x69, 0x6f, 0x6e, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
 }
 
 var (
@@ -1377,60 +1622,65 @@ func file_extensions_extension_proto_rawDescGZIP() []byte {
 	return file_extensions_extension_proto_rawDescData
 }
 
-var file_extensions_extension_proto_enumTypes = make([]protoimpl.EnumInfo, 3)
+var file_extensions_extension_proto_enumTypes = make([]protoimpl.EnumInfo, 5)
 var file_extensions_extension_proto_msgTypes = make([]protoimpl.MessageInfo, 14)
 var file_extensions_extension_proto_goTypes = []interface{}{
-	(ExtensionRequestResult_State)(0), // 0: extensions.ExtensionRequestResult.State
-	(ActionResponse_State)(0),         // 1: extensions.ActionResponse.State
-	(Action_Kind)(0),                  // 2: extensions.Action.Kind
-	(*InstallRequest)(nil),            // 3: extensions.InstallRequest
-	(*ExtensionRequestResult)(nil),    // 4: extensions.ExtensionRequestResult
-	(*InstallResponse)(nil),           // 5: extensions.InstallResponse
-	(*UninstallRequest)(nil),          // 6: extensions.UninstallRequest
-	(*UninstallResponse)(nil),         // 7: extensions.UninstallResponse
-	(*UpdateRequest)(nil),             // 8: extensions.UpdateRequest
-	(*UpdateResponse)(nil),            // 9: extensions.UpdateResponse
-	(*CheckRequest)(nil),              // 10: extensions.CheckRequest
-	(*CheckResponse)(nil),             // 11: extensions.CheckResponse
-	(*ActionRequest)(nil),             // 12: extensions.ActionRequest
-	(*ActionResponse)(nil),            // 13: extensions.ActionResponse
-	(*Action)(nil),                    // 14: extensions.Action
-	nil,                               // 15: extensions.ActionRequest.MetadataEntry
-	nil,                               // 16: extensions.ActionResponse.MetadataEntry
-	(*references.Reference)(nil),      // 17: content.references.Reference
+	(Target)(0),                       // 0: extensions.Target
+	(ExtensionRequestResult_State)(0), // 1: extensions.ExtensionRequestResult.State
+	(ActionResponse_State)(0),         // 2: extensions.ActionResponse.State
+	(ActionResponse_Format)(0),        // 3: extensions.ActionResponse.Format
+	(Action_Kind)(0),                  // 4: extensions.Action.Kind
+	(*InstallRequest)(nil),            // 5: extensions.InstallRequest
+	(*ExtensionRequestResult)(nil),    // 6: extensions.ExtensionRequestResult
+	(*InstallResponse)(nil),           // 7: extensions.InstallResponse
+	(*UninstallRequest)(nil),          // 8: extensions.UninstallRequest
+	(*UninstallResponse)(nil),         // 9: extensions.UninstallResponse
+	(*UpdateRequest)(nil),             // 10: extensions.UpdateRequest
+	(*UpdateResponse)(nil),            // 11: extensions.UpdateResponse
+	(*CheckRequest)(nil),              // 12: extensions.CheckRequest
+	(*CheckResponse)(nil),             // 13: extensions.CheckResponse
+	(*ActionRequest)(nil),             // 14: extensions.ActionRequest
+	(*ActionResponse)(nil),            // 15: extensions.ActionResponse
+	(*Action)(nil),                    // 16: extensions.Action
+	nil,                               // 17: extensions.ActionRequest.MetadataEntry
+	nil,                               // 18: extensions.ActionResponse.MetadataEntry
+	(*references.Reference)(nil),      // 19: content.references.Reference
 }
 var file_extensions_extension_proto_depIdxs = []int32{
-	0,  // 0: extensions.ExtensionRequestResult.state:type_name -> extensions.ExtensionRequestResult.State
-	4,  // 1: extensions.InstallResponse.results:type_name -> extensions.ExtensionRequestResult
-	4,  // 2: extensions.UninstallResponse.results:type_name -> extensions.ExtensionRequestResult
-	4,  // 3: extensions.UpdateResponse.results:type_name -> extensions.ExtensionRequestResult
-	4,  // 4: extensions.CheckResponse.results:type_name -> extensions.ExtensionRequestResult
-	15, // 5: extensions.ActionRequest.metadata:type_name -> extensions.ActionRequest.MetadataEntry
-	17, // 6: extensions.ActionRequest.refs:type_name -> content.references.Reference
-	17, // 7: extensions.ActionRequest.params:type_name -> content.references.Reference
-	1,  // 8: extensions.ActionResponse.state:type_name -> extensions.ActionResponse.State
-	14, // 9: extensions.ActionResponse.next:type_name -> extensions.Action
-	16, // 10: extensions.ActionResponse.metadata:type_name -> extensions.ActionResponse.MetadataEntry
-	17, // 11: extensions.ActionResponse.refs:type_name -> content.references.Reference
-	17, // 12: extensions.Action.image:type_name -> content.references.Reference
-	2,  // 13: extensions.Action.kind:type_name -> extensions.Action.Kind
-	17, // 14: extensions.Action.refs:type_name -> content.references.Reference
-	12, // 15: extensions.Action.request:type_name -> extensions.ActionRequest
-	3,  // 16: extensions.Extension.Install:input_type -> extensions.InstallRequest
-	10, // 17: extensions.Extension.Check:input_type -> extensions.CheckRequest
-	8,  // 18: extensions.Extension.Update:input_type -> extensions.UpdateRequest
-	6,  // 19: extensions.Extension.Uninstall:input_type -> extensions.UninstallRequest
-	12, // 20: extensions.Extension.Action:input_type -> extensions.ActionRequest
-	5,  // 21: extensions.Extension.Install:output_type -> extensions.InstallResponse
-	11, // 22: extensions.Extension.Check:output_type -> extensions.CheckResponse
-	9,  // 23: extensions.Extension.Update:output_type -> extensions.UpdateResponse
-	7,  // 24: extensions.Extension.Uninstall:output_type -> extensions.UninstallResponse
-	13, // 25: extensions.Extension.Action:output_type -> extensions.ActionResponse
-	21, // [21:26] is the sub-list for method output_type
-	16, // [16:21] is the sub-list for method input_type
-	16, // [16:16] is the sub-list for extension type_name
-	16, // [16:16] is the sub-list for extension extendee
-	0,  // [0:16] is the sub-list for field type_name
+	1,  // 0: extensions.ExtensionRequestResult.state:type_name -> extensions.ExtensionRequestResult.State
+	6,  // 1: extensions.InstallResponse.results:type_name -> extensions.ExtensionRequestResult
+	6,  // 2: extensions.UninstallResponse.results:type_name -> extensions.ExtensionRequestResult
+	6,  // 3: extensions.UpdateResponse.results:type_name -> extensions.ExtensionRequestResult
+	6,  // 4: extensions.CheckResponse.results:type_name -> extensions.ExtensionRequestResult
+	17, // 5: extensions.ActionRequest.metadata:type_name -> extensions.ActionRequest.MetadataEntry
+	19, // 6: extensions.ActionRequest.refs:type_name -> content.references.Reference
+	19, // 7: extensions.ActionRequest.params:type_name -> content.references.Reference
+	2,  // 8: extensions.ActionResponse.state:type_name -> extensions.ActionResponse.State
+	0,  // 9: extensions.ActionResponse.target:type_name -> extensions.Target
+	3,  // 10: extensions.ActionResponse.format:type_name -> extensions.ActionResponse.Format
+	16, // 11: extensions.ActionResponse.next:type_name -> extensions.Action
+	18, // 12: extensions.ActionResponse.metadata:type_name -> extensions.ActionResponse.MetadataEntry
+	19, // 13: extensions.ActionResponse.refs:type_name -> content.references.Reference
+	0,  // 14: extensions.Action.target:type_name -> extensions.Target
+	19, // 15: extensions.Action.image:type_name -> content.references.Reference
+	4,  // 16: extensions.Action.kind:type_name -> extensions.Action.Kind
+	19, // 17: extensions.Action.refs:type_name -> content.references.Reference
+	14, // 18: extensions.Action.request:type_name -> extensions.ActionRequest
+	5,  // 19: extensions.Extension.Install:input_type -> extensions.InstallRequest
+	12, // 20: extensions.Extension.Check:input_type -> extensions.CheckRequest
+	10, // 21: extensions.Extension.Update:input_type -> extensions.UpdateRequest
+	8,  // 22: extensions.Extension.Uninstall:input_type -> extensions.UninstallRequest
+	14, // 23: extensions.Extension.Action:input_type -> extensions.ActionRequest
+	7,  // 24: extensions.Extension.Install:output_type -> extensions.InstallResponse
+	13, // 25: extensions.Extension.Check:output_type -> extensions.CheckResponse
+	11, // 26: extensions.Extension.Update:output_type -> extensions.UpdateResponse
+	9,  // 27: extensions.Extension.Uninstall:output_type -> extensions.UninstallResponse
+	15, // 28: extensions.Extension.Action:output_type -> extensions.ActionResponse
+	24, // [24:29] is the sub-list for method output_type
+	19, // [19:24] is the sub-list for method input_type
+	19, // [19:19] is the sub-list for extension type_name
+	19, // [19:19] is the sub-list for extension extendee
+	0,  // [0:19] is the sub-list for field type_name
 }
 
 func init() { file_extensions_extension_proto_init() }
@@ -1589,7 +1839,7 @@ func file_extensions_extension_proto_init() {
 		File: protoimpl.DescBuilder{
 			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
 			RawDescriptor: file_extensions_extension_proto_rawDesc,
-			NumEnums:      3,
+			NumEnums:      5,
 			NumMessages:   14,
 			NumExtensions: 0,
 			NumServices:   1,
diff --git a/proto/extensions/extension_grpc.pb.go b/proto/extensions/extension_grpc.pb.go
index 550f0bdfada581863151e88ec94e4732d9a94508..784527d37db21be2337aa3406ef3dd83eb87e940 100644
--- a/proto/extensions/extension_grpc.pb.go
+++ b/proto/extensions/extension_grpc.pb.go
@@ -63,10 +63,10 @@ type ExtensionClient interface {
 	// доступное для всех пользователей.
 	//
 	// Примеры пользовательских действий:
-	// - "Собрать сайт" - добавляется Perxis.Web для сборки сайта, доступна пользователю через меню,
-	//   параметры space_id, env_id. При вызове выполняется запрос на сервер ProcessAction.
-	// - "Посмотреть задачи" - добавляется Tasks для перехода на коллекцию задач. Отображается в меню,
-	//   параметры space_id, env_id.
+	//   - "Собрать сайт" - добавляется Perxis.Web для сборки сайта, доступна пользователю через меню,
+	//     параметры space_id, env_id. При вызове выполняется запрос на сервер ProcessAction.
+	//   - "Посмотреть задачи" - добавляется Tasks для перехода на коллекцию задач. Отображается в меню,
+	//     параметры space_id, env_id.
 	//
 	// Приложения так же могут использовать действия для вызова обработки в других приложениях при
 	// необходимости.
@@ -153,10 +153,10 @@ type ExtensionServer interface {
 	// доступное для всех пользователей.
 	//
 	// Примеры пользовательских действий:
-	// - "Собрать сайт" - добавляется Perxis.Web для сборки сайта, доступна пользователю через меню,
-	//   параметры space_id, env_id. При вызове выполняется запрос на сервер ProcessAction.
-	// - "Посмотреть задачи" - добавляется Tasks для перехода на коллекцию задач. Отображается в меню,
-	//   параметры space_id, env_id.
+	//   - "Собрать сайт" - добавляется Perxis.Web для сборки сайта, доступна пользователю через меню,
+	//     параметры space_id, env_id. При вызове выполняется запрос на сервер ProcessAction.
+	//   - "Посмотреть задачи" - добавляется Tasks для перехода на коллекцию задач. Отображается в меню,
+	//     параметры space_id, env_id.
 	//
 	// Приложения так же могут использовать действия для вызова обработки в других приложениях при
 	// необходимости.
diff --git a/proto/extensions/manager.pb.go b/proto/extensions/manager.pb.go
index be2193d80f6b5b7c1efc10db15cbdd2be63ec6ad..cb5b209259d642794eb201b9bb60bbf60c87d3f9 100644
--- a/proto/extensions/manager.pb.go
+++ b/proto/extensions/manager.pb.go
@@ -27,8 +27,8 @@
 
 // Code generated by protoc-gen-go. DO NOT EDIT.
 // versions:
-// 	protoc-gen-go v1.29.0
-// 	protoc        v3.21.12
+// 	protoc-gen-go v1.31.0
+// 	protoc        v4.23.4
 // source: extensions/manager.proto
 
 package extensions
diff --git a/proto/extensions/manager_grpc.pb.go b/proto/extensions/manager_grpc.pb.go
index 093b6165f912a2f22f9482a8f3035ce3b2bc07e9..aa5a5105bffb683691d866f65127857d5453192c 100644
--- a/proto/extensions/manager_grpc.pb.go
+++ b/proto/extensions/manager_grpc.pb.go
@@ -28,7 +28,7 @@
 // Code generated by protoc-gen-go-grpc. DO NOT EDIT.
 // versions:
 // - protoc-gen-go-grpc v1.3.0
-// - protoc             v3.21.12
+// - protoc             v4.23.4
 // source: extensions/manager.proto
 
 package extensions