ensemble-client 2.2.0__tar.gz → 2.3.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.4
1
+ Metadata-Version: 2.5
2
2
  Name: ensemble-client
3
- Version: 2.2.0
3
+ Version: 2.3.0
4
4
  Summary: Python client for the Ensemble peer-to-peer messaging daemon.
5
5
  Project-URL: Homepage, https://github.com/boxsie/ensemble
6
6
  Project-URL: Repository, https://github.com/boxsie/ensemble.git
@@ -20,7 +20,7 @@ Classifier: Topic :: Communications :: Chat
20
20
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
21
21
  Requires-Python: >=3.11
22
22
  Requires-Dist: cryptography>=41.0
23
- Requires-Dist: grpcio>=1.62
23
+ Requires-Dist: grpcio>=1.81.1
24
24
  Requires-Dist: protobuf>=5.0
25
25
  Provides-Extra: dev
26
26
  Requires-Dist: build>=1.0; extra == 'dev'
@@ -110,14 +110,17 @@ handshake without ever touching Tor. Ideal for iterating on
110
110
  ```bash
111
111
  # Terminal 1 — start a daemon in loopback mode.
112
112
  ensemble --headless --signaling=loopback \
113
- --data-dir /tmp/echo-daemon \
114
- --api-addr 127.0.0.1:9090
113
+ --data-dir /tmp/echo-daemon
115
114
 
116
115
  # Terminal 2 — register the echo service against it.
117
- python examples/echo.py --addr localhost:9090
116
+ python examples/echo.py --socket /tmp/echo-daemon/ensemble.sock
118
117
  ```
119
118
 
120
- No `--tor-path`, no `ENSEMBLE_ADMIN_KEY`, no onion descriptor. The
119
+ No `--tor-path`, no `ENSEMBLE_ADMIN_KEY`, no onion descriptor: the owner-only
120
+ `0600` Unix socket is the sole supported keyless API transport. To use
121
+ `--addr localhost:9090` instead, generate an admin key, start the daemon with
122
+ its public half, and pass the seed path to the example's `--auth-seed`; every
123
+ TCP listener requires admin auth, loopback included. The
121
124
  daemon's `GetStatus` still reports `tor_state == "ready"` once the
122
125
  loopback backend is up — that's a compat shim for SDK fixtures, not a
123
126
  Tor claim. Loopback is Linux-only (uses Unix domain sockets); pass
@@ -306,3 +309,21 @@ make proto
306
309
  - Daemon + source: <https://github.com/boxsie/ensemble>
307
310
  - Issues: <https://github.com/boxsie/ensemble/issues>
308
311
  - PyPI: <https://pypi.org/project/ensemble-client/>
312
+
313
+
314
+ ### connection lifetimes
315
+
316
+ Connecting a registered service retains a session claim until that registration
317
+ ends. Repeated connects with the same owner label and target are idempotent;
318
+ independent windows or rooms should use distinct labels. Release the same label
319
+ when its consumer finishes (`release_peer` in Python, `ReleasePeerAsync` in .NET).
320
+ Releasing one claim preserves other consumers and streams already in flight.
321
+ `disconnect_peer` / `DisconnectPeerAsync` remains the deliberate administrative
322
+ kick and may interrupt shared transport paths; use release for ordinary cleanup.
323
+
324
+ The daemon emits `OperatorPresence` with an attachment count and monotonically
325
+ increasing generation for the current registration. Launched backends can use it
326
+ to retain a remote connection while at least one frontend is attached, and release
327
+ when the last closes. Outstanding operations may retain their own bounded claim.
328
+ These lifecycle actions require a daemon with connection-ownership support;
329
+ older daemons do not implement release or emit attachment counts.
@@ -78,14 +78,17 @@ handshake without ever touching Tor. Ideal for iterating on
78
78
  ```bash
79
79
  # Terminal 1 — start a daemon in loopback mode.
80
80
  ensemble --headless --signaling=loopback \
81
- --data-dir /tmp/echo-daemon \
82
- --api-addr 127.0.0.1:9090
81
+ --data-dir /tmp/echo-daemon
83
82
 
84
83
  # Terminal 2 — register the echo service against it.
85
- python examples/echo.py --addr localhost:9090
84
+ python examples/echo.py --socket /tmp/echo-daemon/ensemble.sock
86
85
  ```
87
86
 
88
- No `--tor-path`, no `ENSEMBLE_ADMIN_KEY`, no onion descriptor. The
87
+ No `--tor-path`, no `ENSEMBLE_ADMIN_KEY`, no onion descriptor: the owner-only
88
+ `0600` Unix socket is the sole supported keyless API transport. To use
89
+ `--addr localhost:9090` instead, generate an admin key, start the daemon with
90
+ its public half, and pass the seed path to the example's `--auth-seed`; every
91
+ TCP listener requires admin auth, loopback included. The
89
92
  daemon's `GetStatus` still reports `tor_state == "ready"` once the
90
93
  loopback backend is up — that's a compat shim for SDK fixtures, not a
91
94
  Tor claim. Loopback is Linux-only (uses Unix domain sockets); pass
@@ -274,3 +277,21 @@ make proto
274
277
  - Daemon + source: <https://github.com/boxsie/ensemble>
275
278
  - Issues: <https://github.com/boxsie/ensemble/issues>
276
279
  - PyPI: <https://pypi.org/project/ensemble-client/>
280
+
281
+
282
+ ### connection lifetimes
283
+
284
+ Connecting a registered service retains a session claim until that registration
285
+ ends. Repeated connects with the same owner label and target are idempotent;
286
+ independent windows or rooms should use distinct labels. Release the same label
287
+ when its consumer finishes (`release_peer` in Python, `ReleasePeerAsync` in .NET).
288
+ Releasing one claim preserves other consumers and streams already in flight.
289
+ `disconnect_peer` / `DisconnectPeerAsync` remains the deliberate administrative
290
+ kick and may interrupt shared transport paths; use release for ordinary cleanup.
291
+
292
+ The daemon emits `OperatorPresence` with an attachment count and monotonically
293
+ increasing generation for the current registration. Launched backends can use it
294
+ to retain a remote connection while at least one frontend is attached, and release
295
+ when the last closes. Outstanding operations may retain their own bounded claim.
296
+ These lifecycle actions require a daemon with connection-ownership support;
297
+ older daemons do not implement release or emit attachment counts.
@@ -39,6 +39,7 @@ from .events import (
39
39
  ConnectionRequest,
40
40
  FileOffer,
41
41
  OperatorMessage,
42
+ OperatorPresence,
42
43
  PeerIntroduction,
43
44
  RpcMessage,
44
45
  ServiceEvent,
@@ -67,6 +68,7 @@ __all__ = [
67
68
  "EnsembleError",
68
69
  "FileOffer",
69
70
  "OperatorMessage",
71
+ "OperatorPresence",
70
72
  "PayloadTooLargeError",
71
73
  "PeerIntroduction",
72
74
  "PeerIntroductionHandler",
@@ -0,0 +1,387 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # NO CHECKED-IN PROTOBUF GENCODE
4
+ # source: ensemble.proto
5
+ # Protobuf Python Version: 6.33.5
6
+ """Generated protocol buffer code."""
7
+ from google.protobuf import descriptor as _descriptor
8
+ from google.protobuf import descriptor_pool as _descriptor_pool
9
+ from google.protobuf import runtime_version as _runtime_version
10
+ from google.protobuf import symbol_database as _symbol_database
11
+ from google.protobuf.internal import builder as _builder
12
+ _runtime_version.ValidateProtobufRuntimeVersion(
13
+ _runtime_version.Domain.PUBLIC,
14
+ 6,
15
+ 33,
16
+ 5,
17
+ '',
18
+ 'ensemble.proto'
19
+ )
20
+ # @@protoc_insertion_point(imports)
21
+
22
+ _sym_db = _symbol_database.Default()
23
+
24
+
25
+
26
+
27
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0e\x65nsemble.proto\x12\x0c\x65nsemble.api\"\x14\n\x12GetIdentityRequest\":\n\x13GetIdentityResponse\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\t\x12\x12\n\npublic_key\x18\x02 \x01(\x0c\"O\n\x14VerifyBindingRequest\x12\x0f\n\x07\x62inding\x18\x01 \x01(\x0c\x12\x15\n\rdilithium_pub\x18\x02 \x01(\x0c\x12\x0f\n\x07\x61\x64\x64ress\x18\x03 \x01(\t\"H\n\x15VerifyBindingResponse\x12\n\n\x02ok\x18\x01 \x01(\x08\x12\x13\n\x0b\x65\x64\x32\x35\x35\x31\x39_pub\x18\x02 \x01(\x0c\x12\x0e\n\x06reason\x18\x03 \x01(\t\"\x12\n\x10GetStatusRequest\"\xef\x01\n\x11GetStatusResponse\x12\x11\n\ttor_state\x18\x01 \x01(\t\x12\x12\n\npeer_count\x18\x02 \x01(\x05\x12\x12\n\nonion_addr\x18\x03 \x01(\t\x12\x11\n\tuptime_ms\x18\x04 \x01(\x03\x12\x0f\n\x07rt_size\x18\x05 \x01(\x05\x12\x18\n\x10last_announce_ms\x18\x06 \x01(\x03\x12\x17\n\x0fseeds_reachable\x18\x07 \x01(\x05\x12\x17\n\x0fseeds_attempted\x18\x08 \x01(\x05\x12\x10\n\x08stranded\x18\t \x01(\x08\x12\x1d\n\x15tor_bootstrap_percent\x18\n \x01(\x05\"\x15\n\x13ListContactsRequest\"C\n\x14ListContactsResponse\x12+\n\x08\x63ontacts\x18\x01 \x03(\x0b\x32\x19.ensemble.api.ContactInfo\"\x8d\x01\n\x0b\x43ontactInfo\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\t\x12\r\n\x05\x61lias\x18\x02 \x01(\t\x12\x12\n\npublic_key\x18\x03 \x01(\x0c\x12\x15\n\ronion_address\x18\x04 \x01(\t\x12\x10\n\x08\x61\x64\x64\x65\x64_at\x18\x05 \x01(\x03\x12\x11\n\tlast_seen\x18\x06 \x01(\x03\x12\x0e\n\x06online\x18\x07 \x01(\x08\"G\n\x11\x41\x64\x64\x43ontactRequest\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\t\x12\r\n\x05\x61lias\x18\x02 \x01(\t\x12\x12\n\npublic_key\x18\x03 \x01(\x0c\"\x14\n\x12\x41\x64\x64\x43ontactResponse\"\'\n\x14RemoveContactRequest\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\t\"\x17\n\x15RemoveContactResponse\"!\n\x0e\x43onnectRequest\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\t\"4\n\x0f\x43onnectResponse\x12\x10\n\x08\x61\x63\x63\x65pted\x18\x01 \x01(\x08\x12\x0f\n\x07message\x18\x02 \x01(\t\"*\n\x17\x41\x63\x63\x65ptConnectionRequest\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\t\"\x1a\n\x18\x41\x63\x63\x65ptConnectionResponse\"*\n\x17RejectConnectionRequest\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\t\"\x1a\n\x18RejectConnectionResponse\"\x12\n\x10ListPeersRequest\";\n\x11ListPeersResponse\x12&\n\x05peers\x18\x01 \x03(\x0b\x32\x17.ensemble.api.PeerEntry\"\x83\x01\n\tPeerEntry\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\t\x12\r\n\x05\x61lias\x18\x02 \x01(\t\x12\r\n\x05saved\x18\x03 \x01(\x08\x12\r\n\x05state\x18\x04 \x01(\t\x12\x0e\n\x06online\x18\x05 \x01(\x08\x12\x0c\n\x04kind\x18\x06 \x01(\t\x12\r\n\x05stage\x18\x07 \x01(\t\x12\x0b\n\x03via\x18\x08 \x01(\t\"$\n\x11\x44isconnectRequest\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\t\"\x14\n\x12\x44isconnectResponse\"3\n\x12SendMessageRequest\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\t\x12\x0c\n\x04text\x18\x02 \x01(\t\")\n\x13SendMessageResponse\x12\x12\n\nmessage_id\x18\x01 \x01(\t\"7\n\x15GetChatHistoryRequest\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\t\x12\r\n\x05limit\x18\x02 \x01(\x05\"\x87\x01\n\x0b\x43hatMessage\x12\n\n\x02id\x18\x01 \x01(\t\x12\x11\n\tfrom_addr\x18\x02 \x01(\t\x12\x0f\n\x07to_addr\x18\x03 \x01(\t\x12\x0c\n\x04text\x18\x04 \x01(\t\x12\x12\n\nsent_at_ms\x18\x05 \x01(\x03\x12\x13\n\x0b\x61\x63ked_at_ms\x18\x06 \x01(\x03\x12\x11\n\tdirection\x18\x07 \x01(\t\"E\n\x16GetChatHistoryResponse\x12+\n\x08messages\x18\x01 \x03(\x0b\x32\x19.ensemble.api.ChatMessage\"?\n\x18\x44\x65leteChatMessageRequest\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\t\x12\x12\n\nmessage_id\x18\x02 \x01(\t\",\n\x19\x44\x65leteChatMessageResponse\x12\x0f\n\x07\x64\x65leted\x18\x01 \x01(\x08\"*\n\x17\x43learChatHistoryRequest\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\t\"\x1a\n\x18\x43learChatHistoryResponse\"5\n\x0fSendFileRequest\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\t\x12\x11\n\tfile_path\x18\x02 \x01(\t\"\x94\x01\n\x10TransferProgress\x12\x13\n\x0btransfer_id\x18\x01 \x01(\t\x12\x10\n\x08\x66ilename\x18\x02 \x01(\t\x12\x13\n\x0btotal_bytes\x18\x03 \x01(\x04\x12\x12\n\nsent_bytes\x18\x04 \x01(\x04\x12\x0f\n\x07percent\x18\x05 \x01(\x02\x12\x10\n\x08\x63omplete\x18\x06 \x01(\x08\x12\r\n\x05\x65rror\x18\x07 \x01(\t\";\n\x11\x41\x63\x63\x65ptFileRequest\x12\x13\n\x0btransfer_id\x18\x01 \x01(\t\x12\x11\n\tsave_path\x18\x02 \x01(\t\"\x14\n\x12\x41\x63\x63\x65ptFileResponse\"(\n\x11RejectFileRequest\x12\x13\n\x0btransfer_id\x18\x01 \x01(\t\"\x14\n\x12RejectFileResponse\",\n\x15\x43\x61ncelTransferRequest\x12\x13\n\x0btransfer_id\x18\x01 \x01(\t\"\x18\n\x16\x43\x61ncelTransferResponse\"\'\n\x0e\x41\x64\x64NodeRequest\x12\x15\n\ronion_address\x18\x01 \x01(\t\"&\n\x0f\x41\x64\x64NodeResponse\x12\x13\n\x0bpeers_found\x18\x01 \x01(\x05\"\x15\n\x13GetDebugInfoRequest\"\xc5\x02\n\x14GetDebugInfoResponse\x12\x0f\n\x07rt_size\x18\x01 \x01(\x05\x12\'\n\x08rt_peers\x18\x02 \x03(\x0b\x32\x15.ensemble.api.DHTNode\x12,\n\x0b\x63onnections\x18\x03 \x03(\x0b\x32\x17.ensemble.api.PeerState\x12\x12\n\nonion_addr\x18\x04 \x01(\t\x12\x31\n\x08services\x18\x05 \x03(\x0b\x32\x1f.ensemble.api.RegisteredService\x12\x12\n\nseed_nodes\x18\x06 \x03(\t\x12\x33\n\nsupervised\x18\x07 \x03(\x0b\x32\x1f.ensemble.api.SupervisedService\x12\x35\n\nrejections\x18\x08 \x03(\x0b\x32!.ensemble.api.ConnectionRejection\"S\n\x13\x43onnectionRejection\x12\x0f\n\x07service\x18\x01 \x01(\t\x12\x0c\n\x04\x66rom\x18\x02 \x01(\t\x12\x0e\n\x06reason\x18\x03 \x01(\t\x12\r\n\x05\x61t_ms\x18\x04 \x01(\x03\"\x98\x01\n\x11SupervisedService\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0f\n\x07version\x18\x02 \x01(\t\x12\r\n\x05state\x18\x03 \x01(\t\x12\x0e\n\x06reason\x18\x04 \x01(\t\x12\x0b\n\x03pid\x18\x05 \x01(\x05\x12\x10\n\x08restarts\x18\x06 \x01(\x05\x12\x0f\n\x07\x65nabled\x18\x07 \x01(\x08\x12\x15\n\rstarted_at_ms\x18\x08 \x01(\x03\"L\n\x18StreamServiceLogsRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x12\n\ntail_lines\x18\x02 \x01(\x05\x12\x0e\n\x06\x66ollow\x18\x03 \x01(\x08\"=\n\x17StreamDaemonLogsRequest\x12\x12\n\ntail_lines\x18\x01 \x01(\x05\x12\x0e\n\x06\x66ollow\x18\x02 \x01(\x08\"-\n\x0eServiceLogLine\x12\x0c\n\x04line\x18\x01 \x01(\t\x12\r\n\x05ts_ms\x18\x02 \x01(\x03\"\xb8\x01\n\x15InstallServiceRequest\x12\x0e\n\x06source\x18\x01 \x01(\t\x12\x0e\n\x06sha256\x18\x02 \x01(\t\x12\x1b\n\x13\x61\x63\x63\x65pt_capabilities\x18\x03 \x01(\x08\x12\x11\n\tno_enable\x18\x04 \x01(\x08\x12\r\n\x05\x66orge\x18\x05 \x01(\t\x12\x12\n\nforge_kind\x18\x06 \x01(\t\x12\x17\n\x0f\x66rontend_choice\x18\x07 \x01(\t\x12\x13\n\x0bsupervision\x18\x08 \x01(\t\"\x9e\x01\n\x15UpgradeServiceRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\x12\x0e\n\x06sha256\x18\x03 \x01(\t\x12\x1b\n\x13\x61\x63\x63\x65pt_capabilities\x18\x04 \x01(\x08\x12\r\n\x05\x66orge\x18\x05 \x01(\t\x12\x12\n\nforge_kind\x18\x06 \x01(\t\x12\x17\n\x0f\x66rontend_choice\x18\x07 \x01(\t\"\xc5\x01\n\x0fInstallProgress\x12\r\n\x05stage\x18\x01 \x01(\t\x12\x0f\n\x07message\x18\x02 \x01(\t\x12\x12\n\nbytes_done\x18\x03 \x01(\x03\x12\x13\n\x0b\x62ytes_total\x18\x04 \x01(\x03\x12\x32\n\x06result\x18\x05 \x01(\x0b\x32\".ensemble.api.InstalledServiceInfo\x12\x35\n\x0c\x63\x61pabilities\x18\x06 \x01(\x0b\x32\x1f.ensemble.api.CapabilitySummary\"\xdf\x01\n\x11\x43\x61pabilitySummary\x12\x11\n\ttransport\x18\x01 \x01(\t\x12\x0b\n\x03\x61\x63l\x18\x02 \x01(\t\x12\x1b\n\x13\x64\x65\x63ides_connections\x18\x03 \x01(\x08\x12\x15\n\rhandles_files\x18\x04 \x01(\x08\x12\x10\n\x08\x63ommands\x18\x05 \x03(\t\x12\x19\n\x11max_payload_bytes\x18\x06 \x01(\x03\x12\x10\n\x08verified\x18\x07 \x01(\x08\x12\r\n\x05grown\x18\x08 \x03(\t\x12\x16\n\x0esub_identities\x18\t \x01(\x08\x12\x10\n\x08\x66rontend\x18\n \x01(\t\"&\n\x13\x44\x65scribeNodeRequest\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\t\"\xd6\x01\n\x0fNodeServiceCard\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x14\n\x0c\x64isplay_name\x18\x02 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x03 \x01(\t\x12\x10\n\x08\x63\x61tegory\x18\x04 \x01(\t\x12\x0c\n\x04icon\x18\x05 \x01(\t\x12\x0b\n\x03\x61\x63l\x18\x06 \x01(\t\x12\x12\n\nbehaviours\x18\x07 \x03(\t\x12\x11\n\tplacement\x18\x08 \x01(\t\x12\x11\n\tlinked_to\x18\t \x01(\t\x12\x12\n\nis_service\x18\n \x01(\x08\x12\x0f\n\x07\x61\x64\x64ress\x18\x0b \x01(\t\"\xe2\x01\n\x08NodeCard\x12\x10\n\x08nickname\x18\x01 \x01(\t\x12\x18\n\x10protocol_version\x18\x02 \x01(\t\x12\x15\n\rbuild_version\x18\x03 \x01(\t\x12\x13\n\x0b\x61\x63l_posture\x18\x04 \x01(\t\x12\x15\n\raccepts_files\x18\x05 \x01(\x08\x12\x18\n\x10\x64irect_transport\x18\x06 \x01(\x08\x12\x15\n\rrelay_offered\x18\x07 \x01(\x08\x12\x36\n\x0fpublic_services\x18\x08 \x03(\x0b\x32\x1d.ensemble.api.NodeServiceCard\"\xb0\x01\n\x14\x44\x65scribeNodeResponse\x12\x0e\n\x06served\x18\x01 \x01(\x08\x12\x0e\n\x06\x64\x65tail\x18\x02 \x01(\t\x12$\n\x04\x63\x61rd\x18\x03 \x01(\x0b\x32\x16.ensemble.api.NodeCard\x12\x10\n\x08verified\x18\x04 \x01(\x08\x12\r\n\x05\x65rror\x18\x05 \x01(\t\x12\x31\n\x07service\x18\x06 \x01(\x0b\x32 .ensemble.api.ServiceDescription\"R\n\x17UninstallServiceRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x11\n\tkeep_data\x18\x02 \x01(\x08\x12\x16\n\x0epurge_identity\x18\x03 \x01(\x08\"\x1a\n\x18UninstallServiceResponse\"&\n\x16RollbackServiceRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\"M\n\x17RollbackServiceResponse\x12\x32\n\x06result\x18\x01 \x01(\x0b\x32\".ensemble.api.InstalledServiceInfo\"5\n\x1cListInstalledServicesRequest\x12\x15\n\rcheck_updates\x18\x01 \x01(\x08\"U\n\x1dListInstalledServicesResponse\x12\x34\n\x08services\x18\x01 \x03(\x0b\x32\".ensemble.api.InstalledServiceInfo\"\xa6\x03\n\x14InstalledServiceInfo\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0f\n\x07version\x18\x02 \x01(\t\x12\r\n\x05state\x18\x03 \x01(\t\x12\x0e\n\x06reason\x18\x04 \x01(\t\x12\x0b\n\x03pid\x18\x05 \x01(\x05\x12\x10\n\x08restarts\x18\x06 \x01(\x05\x12\x0f\n\x07\x65nabled\x18\x07 \x01(\x08\x12\x15\n\rstarted_at_ms\x18\x08 \x01(\x03\x12\x0e\n\x06source\x18\t \x01(\t\x12\x0e\n\x06sha256\x18\n \x01(\t\x12\x10\n\x08verified\x18\x0b \x01(\x08\x12\x18\n\x10previous_version\x18\x0c \x01(\t\x12\x15\n\rupgradable_to\x18\r \x01(\t\x12\x10\n\x08\x66rontend\x18\x0e \x01(\t\x12+\n\x04\x63\x61rd\x18\x0f \x01(\x0b\x32\x1d.ensemble.api.NodeServiceCard\x12\x13\n\x0bsupervision\x18\x10 \x01(\t\x12\x19\n\x11\x63redential_issued\x18\x11 \x01(\x08\x12\x37\n\x0cpresentation\x18\x12 \x01(\x0b\x32!.ensemble.api.ServicePresentation\"\xb5\x01\n\x13ServicePresentation\x12\x0f\n\x07tagline\x18\x01 \x01(\t\x12\x0e\n\x06\x61\x63\x63\x65nt\x18\x02 \x01(\t\x12\x13\n\x0b\x62\x61nner_path\x18\x03 \x01(\t\x12\x0c\n\x04\x62ody\x18\x04 \x01(\t\x12-\n\x05links\x18\x05 \x03(\x0b\x32\x1e.ensemble.api.PresentationLink\x12+\n\tchangelog\x18\x06 \x03(\x0b\x32\x18.ensemble.api.ChangeNote\".\n\x10PresentationLink\x12\r\n\x05label\x18\x01 \x01(\t\x12\x0b\n\x03url\x18\x02 \x01(\t\",\n\nChangeNote\x12\x0f\n\x07version\x18\x01 \x01(\t\x12\r\n\x05notes\x18\x02 \x01(\t\",\n\x1cStartInstalledServiceRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\"\x1f\n\x1dStartInstalledServiceResponse\"#\n\x13\x42rokerLaunchRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\"\xc1\x01\n\x14\x42rokerLaunchResponse\x12\r\n\x05ready\x18\x01 \x01(\x08\x12\x0e\n\x06reason\x18\x02 \x01(\t\x12\x0f\n\x07\x63ommand\x18\x03 \x03(\t\x12\x38\n\x03\x65nv\x18\x04 \x03(\x0b\x32+.ensemble.api.BrokerLaunchResponse.EnvEntry\x12\x13\n\x0bworking_dir\x18\x05 \x01(\t\x1a*\n\x08\x45nvEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"+\n\x1bStopInstalledServiceRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\"\x1e\n\x1cStopInstalledServiceResponse\"-\n\x1dIssueServiceCredentialRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\"E\n\x1eIssueServiceCredentialResponse\x12\x12\n\ncredential\x18\x01 \x01(\t\x12\x0f\n\x07rotated\x18\x02 \x01(\x08\"6\n&RevokePreviousServiceCredentialRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\")\n\'RevokePreviousServiceCredentialResponse\"/\n\x1fRevokeServiceCredentialsRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\"\"\n RevokeServiceCredentialsResponse\"\xaa\x01\n\x14SetServiceEnvRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x38\n\x03set\x18\x02 \x03(\x0b\x32+.ensemble.api.SetServiceEnvRequest.SetEntry\x12\r\n\x05unset\x18\x03 \x03(\t\x12\x0f\n\x07replace\x18\x04 \x01(\x08\x1a*\n\x08SetEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"8\n\x15SetServiceEnvResponse\x12\x0c\n\x04keys\x18\x01 \x03(\t\x12\x11\n\trestarted\x18\x02 \x01(\x08\"$\n\x14GetServiceEnvRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\"l\n\x15GetServiceEnvResponse\x12\x0c\n\x04keys\x18\x01 \x03(\t\x12+\n\x08settings\x18\x02 \x03(\x0b\x32\x19.ensemble.api.SettingDecl\x12\x18\n\x10missing_required\x18\x03 \x03(\t\"\xc1\x02\n\x0bSettingDecl\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05label\x18\x02 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x03 \x01(\t\x12\x0c\n\x04type\x18\x04 \x01(\t\x12\x0f\n\x07\x64\x65\x66\x61ult\x18\x05 \x01(\t\x12\x10\n\x08required\x18\x06 \x01(\x08\x12\x0e\n\x06secret\x18\x07 \x01(\x08\x12\x13\n\x0b\x65num_values\x18\x08 \x03(\t\x12\x10\n\x03min\x18\t \x01(\x03H\x00\x88\x01\x01\x12\x10\n\x03max\x18\n \x01(\x03H\x01\x88\x01\x01\x12\x42\n\rrequired_when\x18\x0b \x03(\x0b\x32+.ensemble.api.SettingDecl.RequiredWhenEntry\x1a\x33\n\x11RequiredWhenEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x42\x06\n\x04_minB\x06\n\x04_max\"_\n\x15SignedServiceDocument\x12\x0b\n\x03\x64oc\x18\x01 \x01(\x0c\x12\x15\n\rdilithium_pub\x18\x02 \x01(\x0c\x12\x0f\n\x07\x62inding\x18\x03 \x01(\x0c\x12\x11\n\tsignature\x18\x04 \x01(\x0c\"k\n\rRegistryIndex\x12\x17\n\x0fgenerated_at_ms\x18\x01 \x01(\x03\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12,\n\x07\x65ntries\x18\x03 \x03(\x0b\x32\x1b.ensemble.api.RegistryEntry\"\x84\x01\n\rRegistryEntry\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12/\n\x08releases\x18\x03 \x03(\x0b\x32\x1d.ensemble.api.RegistryRelease\x12\x0f\n\x07tagline\x18\x04 \x01(\t\x12\x0e\n\x06\x61\x63\x63\x65nt\x18\x05 \x01(\t\"\xec\x01\n\x0fRegistryRelease\x12\x0f\n\x07version\x18\x01 \x01(\t\x12\x35\n\x0c\x63\x61pabilities\x18\x02 \x01(\x0b\x32\x1f.ensemble.api.CapabilitySummary\x12?\n\tplatforms\x18\x03 \x03(\x0b\x32,.ensemble.api.RegistryRelease.PlatformsEntry\x1aP\n\x0ePlatformsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12-\n\x05value\x18\x02 \x01(\x0b\x32\x1e.ensemble.api.RegistryArtifact:\x02\x38\x01\"=\n\x10RegistryArtifact\x12\x0b\n\x03url\x18\x01 \x01(\t\x12\x0e\n\x06sha256\x18\x02 \x01(\t\x12\x0c\n\x04size\x18\x03 \x01(\x03\"%\n\x12\x41\x64\x64RegistryRequest\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\t\"C\n\x13\x41\x64\x64RegistryResponse\x12,\n\x08registry\x18\x01 \x01(\x0b\x32\x1a.ensemble.api.RegistryInfo\"(\n\x15RemoveRegistryRequest\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\t\"\x18\n\x16RemoveRegistryResponse\"(\n\x15ListRegistriesRequest\x12\x0f\n\x07refresh\x18\x01 \x01(\x08\"H\n\x16ListRegistriesResponse\x12.\n\nregistries\x18\x01 \x03(\x0b\x32\x1a.ensemble.api.RegistryInfo\"k\n\x0cRegistryInfo\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12\x0f\n\x07\x65ntries\x18\x03 \x01(\x05\x12\x15\n\rfetched_at_ms\x18\x04 \x01(\x03\x12\r\n\x05\x65rror\x18\x05 \x01(\t\"9\n\x17SearchRegistriesRequest\x12\r\n\x05query\x18\x01 \x01(\t\x12\x0f\n\x07refresh\x18\x02 \x01(\x08\"C\n\x18SearchRegistriesResponse\x12\'\n\x04hits\x18\x01 \x03(\x0b\x32\x19.ensemble.api.RegistryHit\"\xce\x01\n\x0bRegistryHit\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12\x0f\n\x07version\x18\x03 \x01(\t\x12\x18\n\x10registry_address\x18\x04 \x01(\t\x12\x35\n\x0c\x63\x61pabilities\x18\x05 \x01(\x0b\x32\x1f.ensemble.api.CapabilitySummary\x12\x19\n\x11installed_version\x18\x06 \x01(\t\x12\x0f\n\x07tagline\x18\x07 \x01(\t\x12\x0e\n\x06\x61\x63\x63\x65nt\x18\x08 \x01(\t\"W\n\x11RegisteredService\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0f\n\x07\x61\x64\x64ress\x18\x02 \x01(\t\x12\x12\n\nonion_addr\x18\x03 \x01(\t\x12\x0f\n\x07managed\x18\x04 \x01(\x08\"$\n\x14\x44\x65leteServiceRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\"+\n\x15RotateAdminKeyRequest\x12\x12\n\npublic_key\x18\x01 \x01(\x0c\"\x18\n\x16RotateAdminKeyResponse\"\x17\n\x15\x44\x65leteServiceResponse\"U\n\x07\x44HTNode\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\t\x12\x12\n\nonion_addr\x18\x02 \x01(\t\x12\x11\n\tlast_seen\x18\x03 \x01(\x03J\x04\x08\x04\x10\x05R\x0cnode_address\"i\n\tPeerState\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\t\x12\r\n\x05state\x18\x02 \x01(\t\x12\r\n\x05\x65rror\x18\x03 \x01(\t\x12-\n\x06owners\x18\x04 \x03(\x0b\x32\x1d.ensemble.api.ConnectionOwner\"|\n\x0f\x43onnectionOwner\x12\n\n\x02id\x18\x01 \x01(\x04\x12\x0f\n\x07subject\x18\x02 \x01(\t\x12\x10\n\x08\x63onsumer\x18\x03 \x01(\t\x12\x10\n\x08lifetime\x18\x04 \x01(\t\x12\x11\n\treconnect\x18\x05 \x01(\x08\x12\x15\n\rexpires_at_ms\x18\x06 \x01(\x03\"\x12\n\x10SubscribeRequest\",\n\x0b\x44\x61\x65monEvent\x12\x0c\n\x04type\x18\x01 \x01(\t\x12\x0f\n\x07payload\x18\x02 \x01(\t\"\x87\x07\n\x14ServiceClientMessage\x12\x31\n\x08manifest\x18\x01 \x01(\x0b\x32\x1d.ensemble.api.ServiceManifestH\x00\x12\x38\n\x0csend_message\x18\x02 \x01(\x0b\x32 .ensemble.api.ServiceSendMessageH\x00\x12\x37\n\x06\x61\x63\x63\x65pt\x18\x03 \x01(\x0b\x32%.ensemble.api.ServiceAcceptConnectionH\x00\x12\x37\n\x06reject\x18\x04 \x01(\x0b\x32%.ensemble.api.ServiceRejectConnectionH\x00\x12<\n\x0eintroduce_peer\x18\x05 \x01(\x0b\x32\".ensemble.api.ServiceIntroducePeerH\x00\x12\x38\n\x0c\x63onnect_peer\x18\x06 \x01(\x0b\x32 .ensemble.api.ServiceConnectPeerH\x00\x12\x36\n\x0b\x61\x63\x63\x65pt_file\x18\x07 \x01(\x0b\x32\x1f.ensemble.api.ServiceAcceptFileH\x00\x12\x36\n\x0breject_file\x18\x08 \x01(\x0b\x32\x1f.ensemble.api.ServiceRejectFileH\x00\x12<\n\x0e\x63ommand_result\x18\t \x01(\x0b\x32\".ensemble.api.ServiceCommandResultH\x00\x12\x33\n\rmetric_sample\x18\n \x01(\x0b\x32\x1a.ensemble.api.MetricSampleH\x00\x12:\n\rsign_document\x18\x0b \x01(\x0b\x32!.ensemble.api.ServiceSignDocumentH\x00\x12>\n\x0f\x64isconnect_peer\x18\x0c \x01(\x0b\x32#.ensemble.api.ServiceDisconnectPeerH\x00\x12@\n\x10update_allowlist\x18\r \x01(\x0b\x32$.ensemble.api.ServiceUpdateAllowlistH\x00\x12\x36\n\x0bto_operator\x18\x0e \x01(\x0b\x32\x1f.ensemble.api.ServiceToOperatorH\x00\x12\x38\n\x0crelease_peer\x18\x0f \x01(\x0b\x32 .ensemble.api.ServiceReleasePeerH\x00\x42\x05\n\x03msg\"\xae\x01\n\x14ServiceServerMessage\x12\x35\n\nregistered\x18\x01 \x01(\x0b\x32\x1f.ensemble.api.ServiceRegisteredH\x00\x12+\n\x05\x65vent\x18\x02 \x01(\x0b\x32\x1a.ensemble.api.ServiceEventH\x00\x12+\n\x05\x65rror\x18\x03 \x01(\x0b\x32\x1a.ensemble.api.ServiceErrorH\x00\x42\x05\n\x03msg\"?\n\x0b\x43ommandSpec\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12\r\n\x05usage\x18\x03 \x01(\t\"\xa4\x03\n\x0fServiceManifest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12\x1e\n\x03\x61\x63l\x18\x03 \x01(\x0e\x32\x11.ensemble.api.ACL\x12\x11\n\tallowlist\x18\x04 \x03(\t\x12\x14\n\x0ckeypair_seed\x18\x05 \x01(\x0c\x12\x31\n\ttransport\x18\x06 \x01(\x0e\x32\x1e.ensemble.api.ServiceTransport\x12\x19\n\x11max_payload_bytes\x18\x07 \x01(\x03\x12\x31\n\nrate_limit\x18\x08 \x01(\x0b\x32\x1d.ensemble.api.RateLimitPolicy\x12\x1b\n\x13\x64\x65\x63ides_connections\x18\t \x01(\x08\x12\x15\n\rhandles_files\x18\n \x01(\x08\x12+\n\x08\x63ommands\x18\x0b \x03(\x0b\x32\x19.ensemble.api.CommandSpec\x12\x18\n\x10handles_commands\x18\x0c \x01(\x08\x12)\n\x07metrics\x18\r \x03(\x0b\x32\x18.ensemble.api.MetricSpec\"i\n\nMetricSpec\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0c\n\x04kind\x18\x02 \x01(\t\x12\x0c\n\x04unit\x18\x03 \x01(\t\x12\x12\n\nlabel_keys\x18\x04 \x03(\t\x12\x0c\n\x04help\x18\x05 \x01(\t\x12\x0f\n\x07\x62uckets\x18\x06 \x03(\x01\"\x9e\x01\n\x0cMetricSample\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x36\n\x06labels\x18\x02 \x03(\x0b\x32&.ensemble.api.MetricSample.LabelsEntry\x12\r\n\x05value\x18\x03 \x01(\x01\x12\n\n\x02ts\x18\x04 \x01(\x03\x1a-\n\x0bLabelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"=\n\x0fRateLimitPolicy\x12\x1b\n\x13requests_per_minute\x18\x01 \x01(\x05\x12\r\n\x05\x62urst\x18\x02 \x01(\x05\"f\n\x11ServiceRegistered\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\t\x12\r\n\x05onion\x18\x02 \x01(\t\x12\x31\n\ttransport\x18\x03 \x01(\x0e\x32\x1e.ensemble.api.ServiceTransport\"-\n\x0cServiceEvent\x12\x0c\n\x04type\x18\x01 \x01(\t\x12\x0f\n\x07payload\x18\x02 \x01(\x0c\"F\n\x17ServiceChatMessageEvent\x12\x11\n\tfrom_addr\x18\x01 \x01(\t\x12\x0c\n\x04text\x18\x02 \x01(\t\x12\n\n\x02ts\x18\x03 \x01(\x03\"F\n\x1dServiceConnectionRequestEvent\x12\x12\n\nrequest_id\x18\x01 \x01(\t\x12\x11\n\tfrom_addr\x18\x02 \x01(\t\"6\n!ServiceConnectionEstablishedEvent\x12\x11\n\tfrom_addr\x18\x01 \x01(\t\"1\n\x1cServiceConnectionClosedEvent\x12\x11\n\tfrom_addr\x18\x01 \x01(\t\"H\n\x16ServiceRpcMessageEvent\x12\x11\n\tfrom_addr\x18\x01 \x01(\t\x12\x0f\n\x07payload\x18\x02 \x01(\x0c\x12\n\n\x02ts\x18\x03 \x01(\x03\"_\n\x15ServiceFileOfferEvent\x12\x13\n\x0btransfer_id\x18\x01 \x01(\t\x12\x11\n\tfrom_addr\x18\x02 \x01(\t\x12\x10\n\x08\x66ilename\x18\x03 \x01(\t\x12\x0c\n\x04size\x18\x04 \x01(\x04\"X\n\x13ServiceCommandEvent\x12\x12\n\ncommand_id\x18\x01 \x01(\t\x12\x11\n\tfrom_addr\x18\x02 \x01(\t\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x0c\n\x04\x61rgs\x18\x04 \x01(\t\"D\n\x14ServiceCommandResult\x12\x12\n\ncommand_id\x18\x01 \x01(\t\x12\x0c\n\x04text\x18\x02 \x01(\t\x12\n\n\x02ok\x18\x03 \x01(\x08\"(\n\x11ServiceAcceptFile\x12\x13\n\x0btransfer_id\x18\x01 \x01(\t\"8\n\x11ServiceRejectFile\x12\x13\n\x0btransfer_id\x18\x01 \x01(\t\x12\x0e\n\x06reason\x18\x02 \x01(\t\"D\n\x12ServiceSendMessage\x12\x0f\n\x07to_addr\x18\x01 \x01(\t\x12\x0c\n\x04text\x18\x02 \x01(\t\x12\x0f\n\x07payload\x18\x03 \x01(\x0c\"-\n\x17ServiceAcceptConnection\x12\x12\n\nrequest_id\x18\x01 \x01(\t\"=\n\x17ServiceRejectConnection\x12\x12\n\nrequest_id\x18\x01 \x01(\t\x12\x0e\n\x06reason\x18\x02 \x01(\t\"6\n\x12ServiceConnectPeer\x12\x11\n\tpeer_addr\x18\x01 \x01(\t\x12\r\n\x05owner\x18\x02 \x01(\t\"6\n\x12ServiceReleasePeer\x12\x11\n\tpeer_addr\x18\x01 \x01(\t\x12\r\n\x05owner\x18\x02 \x01(\t\"A\n\x1cServiceOperatorPresenceEvent\x12\r\n\x05\x63ount\x18\x01 \x01(\r\x12\x12\n\ngeneration\x18\x02 \x01(\x04\"*\n\x15ServiceDisconnectPeer\x12\x11\n\tpeer_addr\x18\x01 \x01(\t\"5\n\x16ServiceUpdateAllowlist\x12\x0b\n\x03\x61\x64\x64\x18\x01 \x03(\t\x12\x0e\n\x06remove\x18\x02 \x03(\t\"$\n\x11ServiceToOperator\x12\x0f\n\x07payload\x18\x01 \x01(\x0c\":\n\x1bServiceOperatorMessageEvent\x12\x0f\n\x07payload\x18\x01 \x01(\x0c\x12\n\n\x02ts\x18\x02 \x01(\x03\"i\n\x1aServiceAttachClientMessage\x12\x31\n\x05start\x18\x01 \x01(\x0b\x32 .ensemble.api.ServiceAttachStartH\x00\x12\x11\n\x07payload\x18\x02 \x01(\x0cH\x00\x42\x05\n\x03msg\"\x14\n\x12ServiceAttachStart\"\x96\x01\n\x1aServiceAttachServerMessage\x12\x31\n\x08\x61ttached\x18\x01 \x01(\x0b\x32\x1d.ensemble.api.ServiceAttachedH\x00\x12\x11\n\x07payload\x18\x02 \x01(\x0cH\x00\x12+\n\x05\x65rror\x18\x03 \x01(\x0b\x32\x1a.ensemble.api.ServiceErrorH\x00\x42\x05\n\x03msg\"\'\n\x0fServiceAttached\x12\x14\n\x0cservice_addr\x18\x01 \x01(\t\"\x87\x01\n\x14ServiceIntroducePeer\x12\x0f\n\x07to_addr\x18\x01 \x01(\t\x12\x12\n\nother_addr\x18\x02 \x01(\t\x12\x12\n\nsession_id\x18\x03 \x01(\t\x12\x12\n\nexpires_at\x18\x04 \x01(\x03\x12\x11\n\trole_hint\x18\x05 \x01(\t\x12\x0f\n\x07payload\x18\x06 \x01(\x0c\":\n\x13ServiceSignDocument\x12\x12\n\nrequest_id\x18\x01 \x01(\t\x12\x0f\n\x07payload\x18\x02 \x01(\x0c\"\x87\x01\n\x16ServiceSignResultEvent\x12\x12\n\nrequest_id\x18\x01 \x01(\t\x12\x11\n\tsignature\x18\x02 \x01(\x0c\x12\x15\n\rdilithium_pub\x18\x03 \x01(\x0c\x12\x0f\n\x07\x62inding\x18\x04 \x01(\x0c\x12\x0f\n\x07\x61\x64\x64ress\x18\x05 \x01(\t\x12\r\n\x05\x65rror\x18\x06 \x01(\t\"\x98\x01\n\x1cServicePeerIntroductionEvent\x12\x19\n\x11\x66rom_service_addr\x18\x01 \x01(\t\x12\x11\n\tpeer_addr\x18\x02 \x01(\t\x12\x12\n\nsession_id\x18\x03 \x01(\t\x12\x12\n\nexpires_at\x18\x04 \x01(\x03\x12\x11\n\trole_hint\x18\x05 \x01(\t\x12\x0f\n\x07payload\x18\x06 \x01(\x0c\"Z\n\x0cServiceError\x12\x0f\n\x07message\x18\x01 \x01(\t\x12\x13\n\x0blimit_bytes\x18\x02 \x01(\x03\x12\x0c\n\x04\x63ode\x18\x03 \x01(\t\x12\x16\n\x0eretry_after_ms\x18\x04 \x01(\x03\"-\n\x1aListServiceCommandsRequest\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\t\"J\n\x1bListServiceCommandsResponse\x12+\n\x08\x63ommands\x18\x01 \x03(\x0b\x32\x19.ensemble.api.CommandSpec\"A\n\x12SendCommandRequest\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x0c\n\x04\x61rgs\x18\x03 \x01(\t\"P\n\x13SendCommandResponse\x12\x12\n\ncommand_id\x18\x01 \x01(\t\x12\x0c\n\x04text\x18\x02 \x01(\t\x12\n\n\x02ok\x18\x03 \x01(\x08\x12\x0b\n\x03leg\x18\x04 \x01(\t\"9\n\x11GetMetricsRequest\x12\x13\n\x0bname_prefix\x18\x01 \x01(\t\x12\x0f\n\x07service\x18\x02 \x01(\t\"o\n\x10MetricDescriptor\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0c\n\x04kind\x18\x02 \x01(\t\x12\x0c\n\x04unit\x18\x03 \x01(\t\x12\x12\n\nlabel_keys\x18\x04 \x03(\t\x12\x0c\n\x04help\x18\x05 \x01(\t\x12\x0f\n\x07\x62uckets\x18\x06 \x03(\x01\"(\n\x0bMetricPoint\x12\r\n\x05value\x18\x01 \x01(\x01\x12\n\n\x02ts\x18\x02 \x01(\x03\"2\n\x0cMetricBucket\x12\x13\n\x0bupper_bound\x18\x01 \x01(\x01\x12\r\n\x05\x63ount\x18\x02 \x01(\x04\"\x94\x02\n\x0cMetricSeries\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x36\n\x06labels\x18\x02 \x03(\x0b\x32&.ensemble.api.MetricSeries.LabelsEntry\x12)\n\x06points\x18\x03 \x03(\x0b\x32\x19.ensemble.api.MetricPoint\x12\r\n\x05value\x18\x04 \x01(\x01\x12\x0c\n\x04rate\x18\x05 \x01(\x01\x12\r\n\x05\x63ount\x18\x06 \x01(\x04\x12\x0b\n\x03sum\x18\x07 \x01(\x01\x12+\n\x07\x62uckets\x18\x08 \x03(\x0b\x32\x1a.ensemble.api.MetricBucket\x1a-\n\x0bLabelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\x9e\x01\n\x12GetMetricsResponse\x12\x33\n\x0b\x64\x65scriptors\x18\x01 \x03(\x0b\x32\x1e.ensemble.api.MetricDescriptor\x12*\n\x06series\x18\x02 \x03(\x0b\x32\x1a.ensemble.api.MetricSeries\x12\x16\n\x0e\x64ropped_series\x18\x03 \x01(\x04\x12\x0f\n\x07\x65nabled\x18\x04 \x01(\x08\"Q\n\x14StreamMetricsRequest\x12\x13\n\x0bname_prefix\x18\x01 \x01(\t\x12\x0f\n\x07service\x18\x02 \x01(\t\x12\x13\n\x0binterval_ms\x18\x03 \x01(\r\"\x98\x01\n\x0cMetricUpdate\x12\x33\n\x0b\x64\x65scriptors\x18\x01 \x03(\x0b\x32\x1e.ensemble.api.MetricDescriptor\x12*\n\x06series\x18\x02 \x03(\x0b\x32\x1a.ensemble.api.MetricSeries\x12\x16\n\x0e\x64ropped_series\x18\x03 \x01(\x04\x12\x0f\n\x07\x65nabled\x18\x04 \x01(\x08\"\x9f\x01\n\x12ServiceDescription\x12+\n\x04\x63\x61rd\x18\x01 \x01(\x0b\x32\x1d.ensemble.api.NodeServiceCard\x12\x18\n\x10protocol_version\x18\x02 \x01(\t\x12\x11\n\ttransport\x18\x03 \x01(\t\x12\x15\n\rhandles_files\x18\x04 \x01(\x08\x12\x18\n\x10handles_commands\x18\x05 \x01(\x08*O\n\x03\x41\x43L\x12\x13\n\x0f\x41\x43L_UNSPECIFIED\x10\x00\x12\x10\n\x0c\x41\x43L_CONTACTS\x10\x01\x12\x11\n\rACL_ALLOWLIST\x10\x02\x12\x0e\n\nACL_PUBLIC\x10\x03*\x88\x01\n\x10ServiceTransport\x12!\n\x1dSERVICE_TRANSPORT_UNSPECIFIED\x10\x00\x12\x1a\n\x16SERVICE_TRANSPORT_CHAT\x10\x01\x12\x1a\n\x16SERVICE_TRANSPORT_HTTP\x10\x02\x12\x19\n\x15SERVICE_TRANSPORT_RPC\x10\x03\x32\xa2$\n\x0f\x45nsembleService\x12R\n\x0bGetIdentity\x12 .ensemble.api.GetIdentityRequest\x1a!.ensemble.api.GetIdentityResponse\x12L\n\tGetStatus\x12\x1e.ensemble.api.GetStatusRequest\x1a\x1f.ensemble.api.GetStatusResponse\x12X\n\rVerifyBinding\x12\".ensemble.api.VerifyBindingRequest\x1a#.ensemble.api.VerifyBindingResponse\x12U\n\x0cListContacts\x12!.ensemble.api.ListContactsRequest\x1a\".ensemble.api.ListContactsResponse\x12O\n\nAddContact\x12\x1f.ensemble.api.AddContactRequest\x1a .ensemble.api.AddContactResponse\x12X\n\rRemoveContact\x12\".ensemble.api.RemoveContactRequest\x1a#.ensemble.api.RemoveContactResponse\x12\x46\n\x07\x43onnect\x12\x1c.ensemble.api.ConnectRequest\x1a\x1d.ensemble.api.ConnectResponse\x12\x61\n\x10\x41\x63\x63\x65ptConnection\x12%.ensemble.api.AcceptConnectionRequest\x1a&.ensemble.api.AcceptConnectionResponse\x12\x61\n\x10RejectConnection\x12%.ensemble.api.RejectConnectionRequest\x1a&.ensemble.api.RejectConnectionResponse\x12L\n\tListPeers\x12\x1e.ensemble.api.ListPeersRequest\x1a\x1f.ensemble.api.ListPeersResponse\x12O\n\nDisconnect\x12\x1f.ensemble.api.DisconnectRequest\x1a .ensemble.api.DisconnectResponse\x12R\n\x0bSendMessage\x12 .ensemble.api.SendMessageRequest\x1a!.ensemble.api.SendMessageResponse\x12[\n\x0eGetChatHistory\x12#.ensemble.api.GetChatHistoryRequest\x1a$.ensemble.api.GetChatHistoryResponse\x12\x64\n\x11\x44\x65leteChatMessage\x12&.ensemble.api.DeleteChatMessageRequest\x1a\'.ensemble.api.DeleteChatMessageResponse\x12\x61\n\x10\x43learChatHistory\x12%.ensemble.api.ClearChatHistoryRequest\x1a&.ensemble.api.ClearChatHistoryResponse\x12K\n\x08SendFile\x12\x1d.ensemble.api.SendFileRequest\x1a\x1e.ensemble.api.TransferProgress0\x01\x12O\n\nAcceptFile\x12\x1f.ensemble.api.AcceptFileRequest\x1a .ensemble.api.AcceptFileResponse\x12O\n\nRejectFile\x12\x1f.ensemble.api.RejectFileRequest\x1a .ensemble.api.RejectFileResponse\x12[\n\x0e\x43\x61ncelTransfer\x12#.ensemble.api.CancelTransferRequest\x1a$.ensemble.api.CancelTransferResponse\x12\x46\n\x07\x41\x64\x64Node\x12\x1c.ensemble.api.AddNodeRequest\x1a\x1d.ensemble.api.AddNodeResponse\x12U\n\x0cGetDebugInfo\x12!.ensemble.api.GetDebugInfoRequest\x1a\".ensemble.api.GetDebugInfoResponse\x12U\n\x0c\x44\x65scribeNode\x12!.ensemble.api.DescribeNodeRequest\x1a\".ensemble.api.DescribeNodeResponse\x12H\n\tSubscribe\x12\x1e.ensemble.api.SubscribeRequest\x1a\x19.ensemble.api.DaemonEvent0\x01\x12]\n\x0fRegisterService\x12\".ensemble.api.ServiceClientMessage\x1a\".ensemble.api.ServiceServerMessage(\x01\x30\x01\x12g\n\rAttachService\x12(.ensemble.api.ServiceAttachClientMessage\x1a(.ensemble.api.ServiceAttachServerMessage(\x01\x30\x01\x12X\n\rDeleteService\x12\".ensemble.api.DeleteServiceRequest\x1a#.ensemble.api.DeleteServiceResponse\x12[\n\x0eRotateAdminKey\x12#.ensemble.api.RotateAdminKeyRequest\x1a$.ensemble.api.RotateAdminKeyResponse\x12j\n\x13ListServiceCommands\x12(.ensemble.api.ListServiceCommandsRequest\x1a).ensemble.api.ListServiceCommandsResponse\x12T\n\x0bSendCommand\x12 .ensemble.api.SendCommandRequest\x1a!.ensemble.api.SendCommandResponse0\x01\x12O\n\nGetMetrics\x12\x1f.ensemble.api.GetMetricsRequest\x1a .ensemble.api.GetMetricsResponse\x12Q\n\rStreamMetrics\x12\".ensemble.api.StreamMetricsRequest\x1a\x1a.ensemble.api.MetricUpdate0\x01\x12[\n\x11StreamServiceLogs\x12&.ensemble.api.StreamServiceLogsRequest\x1a\x1c.ensemble.api.ServiceLogLine0\x01\x12Y\n\x10StreamDaemonLogs\x12%.ensemble.api.StreamDaemonLogsRequest\x1a\x1c.ensemble.api.ServiceLogLine0\x01\x12V\n\x0eInstallService\x12#.ensemble.api.InstallServiceRequest\x1a\x1d.ensemble.api.InstallProgress0\x01\x12V\n\x0eUpgradeService\x12#.ensemble.api.UpgradeServiceRequest\x1a\x1d.ensemble.api.InstallProgress0\x01\x12\x61\n\x10UninstallService\x12%.ensemble.api.UninstallServiceRequest\x1a&.ensemble.api.UninstallServiceResponse\x12^\n\x0fRollbackService\x12$.ensemble.api.RollbackServiceRequest\x1a%.ensemble.api.RollbackServiceResponse\x12p\n\x15ListInstalledServices\x12*.ensemble.api.ListInstalledServicesRequest\x1a+.ensemble.api.ListInstalledServicesResponse\x12p\n\x15StartInstalledService\x12*.ensemble.api.StartInstalledServiceRequest\x1a+.ensemble.api.StartInstalledServiceResponse\x12m\n\x14StopInstalledService\x12).ensemble.api.StopInstalledServiceRequest\x1a*.ensemble.api.StopInstalledServiceResponse\x12s\n\x16IssueServiceCredential\x12+.ensemble.api.IssueServiceCredentialRequest\x1a,.ensemble.api.IssueServiceCredentialResponse\x12\x8e\x01\n\x1fRevokePreviousServiceCredential\x12\x34.ensemble.api.RevokePreviousServiceCredentialRequest\x1a\x35.ensemble.api.RevokePreviousServiceCredentialResponse\x12y\n\x18RevokeServiceCredentials\x12-.ensemble.api.RevokeServiceCredentialsRequest\x1a..ensemble.api.RevokeServiceCredentialsResponse\x12U\n\x0c\x42rokerLaunch\x12!.ensemble.api.BrokerLaunchRequest\x1a\".ensemble.api.BrokerLaunchResponse\x12X\n\rSetServiceEnv\x12\".ensemble.api.SetServiceEnvRequest\x1a#.ensemble.api.SetServiceEnvResponse\x12X\n\rGetServiceEnv\x12\".ensemble.api.GetServiceEnvRequest\x1a#.ensemble.api.GetServiceEnvResponse\x12R\n\x0b\x41\x64\x64Registry\x12 .ensemble.api.AddRegistryRequest\x1a!.ensemble.api.AddRegistryResponse\x12[\n\x0eRemoveRegistry\x12#.ensemble.api.RemoveRegistryRequest\x1a$.ensemble.api.RemoveRegistryResponse\x12[\n\x0eListRegistries\x12#.ensemble.api.ListRegistriesRequest\x1a$.ensemble.api.ListRegistriesResponse\x12\x61\n\x10SearchRegistries\x12%.ensemble.api.SearchRegistriesRequest\x1a&.ensemble.api.SearchRegistriesResponseB#Z!github.com/boxsie/ensemble/api/pbb\x06proto3')
28
+
29
+ _globals = globals()
30
+ _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
31
+ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'ensemble_pb2', _globals)
32
+ if not _descriptor._USE_C_DESCRIPTORS:
33
+ _globals['DESCRIPTOR']._loaded_options = None
34
+ _globals['DESCRIPTOR']._serialized_options = b'Z!github.com/boxsie/ensemble/api/pb'
35
+ _globals['_BROKERLAUNCHRESPONSE_ENVENTRY']._loaded_options = None
36
+ _globals['_BROKERLAUNCHRESPONSE_ENVENTRY']._serialized_options = b'8\001'
37
+ _globals['_SETSERVICEENVREQUEST_SETENTRY']._loaded_options = None
38
+ _globals['_SETSERVICEENVREQUEST_SETENTRY']._serialized_options = b'8\001'
39
+ _globals['_SETTINGDECL_REQUIREDWHENENTRY']._loaded_options = None
40
+ _globals['_SETTINGDECL_REQUIREDWHENENTRY']._serialized_options = b'8\001'
41
+ _globals['_REGISTRYRELEASE_PLATFORMSENTRY']._loaded_options = None
42
+ _globals['_REGISTRYRELEASE_PLATFORMSENTRY']._serialized_options = b'8\001'
43
+ _globals['_METRICSAMPLE_LABELSENTRY']._loaded_options = None
44
+ _globals['_METRICSAMPLE_LABELSENTRY']._serialized_options = b'8\001'
45
+ _globals['_METRICSERIES_LABELSENTRY']._loaded_options = None
46
+ _globals['_METRICSERIES_LABELSENTRY']._serialized_options = b'8\001'
47
+ _globals['_ACL']._serialized_start=14740
48
+ _globals['_ACL']._serialized_end=14819
49
+ _globals['_SERVICETRANSPORT']._serialized_start=14822
50
+ _globals['_SERVICETRANSPORT']._serialized_end=14958
51
+ _globals['_GETIDENTITYREQUEST']._serialized_start=32
52
+ _globals['_GETIDENTITYREQUEST']._serialized_end=52
53
+ _globals['_GETIDENTITYRESPONSE']._serialized_start=54
54
+ _globals['_GETIDENTITYRESPONSE']._serialized_end=112
55
+ _globals['_VERIFYBINDINGREQUEST']._serialized_start=114
56
+ _globals['_VERIFYBINDINGREQUEST']._serialized_end=193
57
+ _globals['_VERIFYBINDINGRESPONSE']._serialized_start=195
58
+ _globals['_VERIFYBINDINGRESPONSE']._serialized_end=267
59
+ _globals['_GETSTATUSREQUEST']._serialized_start=269
60
+ _globals['_GETSTATUSREQUEST']._serialized_end=287
61
+ _globals['_GETSTATUSRESPONSE']._serialized_start=290
62
+ _globals['_GETSTATUSRESPONSE']._serialized_end=529
63
+ _globals['_LISTCONTACTSREQUEST']._serialized_start=531
64
+ _globals['_LISTCONTACTSREQUEST']._serialized_end=552
65
+ _globals['_LISTCONTACTSRESPONSE']._serialized_start=554
66
+ _globals['_LISTCONTACTSRESPONSE']._serialized_end=621
67
+ _globals['_CONTACTINFO']._serialized_start=624
68
+ _globals['_CONTACTINFO']._serialized_end=765
69
+ _globals['_ADDCONTACTREQUEST']._serialized_start=767
70
+ _globals['_ADDCONTACTREQUEST']._serialized_end=838
71
+ _globals['_ADDCONTACTRESPONSE']._serialized_start=840
72
+ _globals['_ADDCONTACTRESPONSE']._serialized_end=860
73
+ _globals['_REMOVECONTACTREQUEST']._serialized_start=862
74
+ _globals['_REMOVECONTACTREQUEST']._serialized_end=901
75
+ _globals['_REMOVECONTACTRESPONSE']._serialized_start=903
76
+ _globals['_REMOVECONTACTRESPONSE']._serialized_end=926
77
+ _globals['_CONNECTREQUEST']._serialized_start=928
78
+ _globals['_CONNECTREQUEST']._serialized_end=961
79
+ _globals['_CONNECTRESPONSE']._serialized_start=963
80
+ _globals['_CONNECTRESPONSE']._serialized_end=1015
81
+ _globals['_ACCEPTCONNECTIONREQUEST']._serialized_start=1017
82
+ _globals['_ACCEPTCONNECTIONREQUEST']._serialized_end=1059
83
+ _globals['_ACCEPTCONNECTIONRESPONSE']._serialized_start=1061
84
+ _globals['_ACCEPTCONNECTIONRESPONSE']._serialized_end=1087
85
+ _globals['_REJECTCONNECTIONREQUEST']._serialized_start=1089
86
+ _globals['_REJECTCONNECTIONREQUEST']._serialized_end=1131
87
+ _globals['_REJECTCONNECTIONRESPONSE']._serialized_start=1133
88
+ _globals['_REJECTCONNECTIONRESPONSE']._serialized_end=1159
89
+ _globals['_LISTPEERSREQUEST']._serialized_start=1161
90
+ _globals['_LISTPEERSREQUEST']._serialized_end=1179
91
+ _globals['_LISTPEERSRESPONSE']._serialized_start=1181
92
+ _globals['_LISTPEERSRESPONSE']._serialized_end=1240
93
+ _globals['_PEERENTRY']._serialized_start=1243
94
+ _globals['_PEERENTRY']._serialized_end=1374
95
+ _globals['_DISCONNECTREQUEST']._serialized_start=1376
96
+ _globals['_DISCONNECTREQUEST']._serialized_end=1412
97
+ _globals['_DISCONNECTRESPONSE']._serialized_start=1414
98
+ _globals['_DISCONNECTRESPONSE']._serialized_end=1434
99
+ _globals['_SENDMESSAGEREQUEST']._serialized_start=1436
100
+ _globals['_SENDMESSAGEREQUEST']._serialized_end=1487
101
+ _globals['_SENDMESSAGERESPONSE']._serialized_start=1489
102
+ _globals['_SENDMESSAGERESPONSE']._serialized_end=1530
103
+ _globals['_GETCHATHISTORYREQUEST']._serialized_start=1532
104
+ _globals['_GETCHATHISTORYREQUEST']._serialized_end=1587
105
+ _globals['_CHATMESSAGE']._serialized_start=1590
106
+ _globals['_CHATMESSAGE']._serialized_end=1725
107
+ _globals['_GETCHATHISTORYRESPONSE']._serialized_start=1727
108
+ _globals['_GETCHATHISTORYRESPONSE']._serialized_end=1796
109
+ _globals['_DELETECHATMESSAGEREQUEST']._serialized_start=1798
110
+ _globals['_DELETECHATMESSAGEREQUEST']._serialized_end=1861
111
+ _globals['_DELETECHATMESSAGERESPONSE']._serialized_start=1863
112
+ _globals['_DELETECHATMESSAGERESPONSE']._serialized_end=1907
113
+ _globals['_CLEARCHATHISTORYREQUEST']._serialized_start=1909
114
+ _globals['_CLEARCHATHISTORYREQUEST']._serialized_end=1951
115
+ _globals['_CLEARCHATHISTORYRESPONSE']._serialized_start=1953
116
+ _globals['_CLEARCHATHISTORYRESPONSE']._serialized_end=1979
117
+ _globals['_SENDFILEREQUEST']._serialized_start=1981
118
+ _globals['_SENDFILEREQUEST']._serialized_end=2034
119
+ _globals['_TRANSFERPROGRESS']._serialized_start=2037
120
+ _globals['_TRANSFERPROGRESS']._serialized_end=2185
121
+ _globals['_ACCEPTFILEREQUEST']._serialized_start=2187
122
+ _globals['_ACCEPTFILEREQUEST']._serialized_end=2246
123
+ _globals['_ACCEPTFILERESPONSE']._serialized_start=2248
124
+ _globals['_ACCEPTFILERESPONSE']._serialized_end=2268
125
+ _globals['_REJECTFILEREQUEST']._serialized_start=2270
126
+ _globals['_REJECTFILEREQUEST']._serialized_end=2310
127
+ _globals['_REJECTFILERESPONSE']._serialized_start=2312
128
+ _globals['_REJECTFILERESPONSE']._serialized_end=2332
129
+ _globals['_CANCELTRANSFERREQUEST']._serialized_start=2334
130
+ _globals['_CANCELTRANSFERREQUEST']._serialized_end=2378
131
+ _globals['_CANCELTRANSFERRESPONSE']._serialized_start=2380
132
+ _globals['_CANCELTRANSFERRESPONSE']._serialized_end=2404
133
+ _globals['_ADDNODEREQUEST']._serialized_start=2406
134
+ _globals['_ADDNODEREQUEST']._serialized_end=2445
135
+ _globals['_ADDNODERESPONSE']._serialized_start=2447
136
+ _globals['_ADDNODERESPONSE']._serialized_end=2485
137
+ _globals['_GETDEBUGINFOREQUEST']._serialized_start=2487
138
+ _globals['_GETDEBUGINFOREQUEST']._serialized_end=2508
139
+ _globals['_GETDEBUGINFORESPONSE']._serialized_start=2511
140
+ _globals['_GETDEBUGINFORESPONSE']._serialized_end=2836
141
+ _globals['_CONNECTIONREJECTION']._serialized_start=2838
142
+ _globals['_CONNECTIONREJECTION']._serialized_end=2921
143
+ _globals['_SUPERVISEDSERVICE']._serialized_start=2924
144
+ _globals['_SUPERVISEDSERVICE']._serialized_end=3076
145
+ _globals['_STREAMSERVICELOGSREQUEST']._serialized_start=3078
146
+ _globals['_STREAMSERVICELOGSREQUEST']._serialized_end=3154
147
+ _globals['_STREAMDAEMONLOGSREQUEST']._serialized_start=3156
148
+ _globals['_STREAMDAEMONLOGSREQUEST']._serialized_end=3217
149
+ _globals['_SERVICELOGLINE']._serialized_start=3219
150
+ _globals['_SERVICELOGLINE']._serialized_end=3264
151
+ _globals['_INSTALLSERVICEREQUEST']._serialized_start=3267
152
+ _globals['_INSTALLSERVICEREQUEST']._serialized_end=3451
153
+ _globals['_UPGRADESERVICEREQUEST']._serialized_start=3454
154
+ _globals['_UPGRADESERVICEREQUEST']._serialized_end=3612
155
+ _globals['_INSTALLPROGRESS']._serialized_start=3615
156
+ _globals['_INSTALLPROGRESS']._serialized_end=3812
157
+ _globals['_CAPABILITYSUMMARY']._serialized_start=3815
158
+ _globals['_CAPABILITYSUMMARY']._serialized_end=4038
159
+ _globals['_DESCRIBENODEREQUEST']._serialized_start=4040
160
+ _globals['_DESCRIBENODEREQUEST']._serialized_end=4078
161
+ _globals['_NODESERVICECARD']._serialized_start=4081
162
+ _globals['_NODESERVICECARD']._serialized_end=4295
163
+ _globals['_NODECARD']._serialized_start=4298
164
+ _globals['_NODECARD']._serialized_end=4524
165
+ _globals['_DESCRIBENODERESPONSE']._serialized_start=4527
166
+ _globals['_DESCRIBENODERESPONSE']._serialized_end=4703
167
+ _globals['_UNINSTALLSERVICEREQUEST']._serialized_start=4705
168
+ _globals['_UNINSTALLSERVICEREQUEST']._serialized_end=4787
169
+ _globals['_UNINSTALLSERVICERESPONSE']._serialized_start=4789
170
+ _globals['_UNINSTALLSERVICERESPONSE']._serialized_end=4815
171
+ _globals['_ROLLBACKSERVICEREQUEST']._serialized_start=4817
172
+ _globals['_ROLLBACKSERVICEREQUEST']._serialized_end=4855
173
+ _globals['_ROLLBACKSERVICERESPONSE']._serialized_start=4857
174
+ _globals['_ROLLBACKSERVICERESPONSE']._serialized_end=4934
175
+ _globals['_LISTINSTALLEDSERVICESREQUEST']._serialized_start=4936
176
+ _globals['_LISTINSTALLEDSERVICESREQUEST']._serialized_end=4989
177
+ _globals['_LISTINSTALLEDSERVICESRESPONSE']._serialized_start=4991
178
+ _globals['_LISTINSTALLEDSERVICESRESPONSE']._serialized_end=5076
179
+ _globals['_INSTALLEDSERVICEINFO']._serialized_start=5079
180
+ _globals['_INSTALLEDSERVICEINFO']._serialized_end=5501
181
+ _globals['_SERVICEPRESENTATION']._serialized_start=5504
182
+ _globals['_SERVICEPRESENTATION']._serialized_end=5685
183
+ _globals['_PRESENTATIONLINK']._serialized_start=5687
184
+ _globals['_PRESENTATIONLINK']._serialized_end=5733
185
+ _globals['_CHANGENOTE']._serialized_start=5735
186
+ _globals['_CHANGENOTE']._serialized_end=5779
187
+ _globals['_STARTINSTALLEDSERVICEREQUEST']._serialized_start=5781
188
+ _globals['_STARTINSTALLEDSERVICEREQUEST']._serialized_end=5825
189
+ _globals['_STARTINSTALLEDSERVICERESPONSE']._serialized_start=5827
190
+ _globals['_STARTINSTALLEDSERVICERESPONSE']._serialized_end=5858
191
+ _globals['_BROKERLAUNCHREQUEST']._serialized_start=5860
192
+ _globals['_BROKERLAUNCHREQUEST']._serialized_end=5895
193
+ _globals['_BROKERLAUNCHRESPONSE']._serialized_start=5898
194
+ _globals['_BROKERLAUNCHRESPONSE']._serialized_end=6091
195
+ _globals['_BROKERLAUNCHRESPONSE_ENVENTRY']._serialized_start=6049
196
+ _globals['_BROKERLAUNCHRESPONSE_ENVENTRY']._serialized_end=6091
197
+ _globals['_STOPINSTALLEDSERVICEREQUEST']._serialized_start=6093
198
+ _globals['_STOPINSTALLEDSERVICEREQUEST']._serialized_end=6136
199
+ _globals['_STOPINSTALLEDSERVICERESPONSE']._serialized_start=6138
200
+ _globals['_STOPINSTALLEDSERVICERESPONSE']._serialized_end=6168
201
+ _globals['_ISSUESERVICECREDENTIALREQUEST']._serialized_start=6170
202
+ _globals['_ISSUESERVICECREDENTIALREQUEST']._serialized_end=6215
203
+ _globals['_ISSUESERVICECREDENTIALRESPONSE']._serialized_start=6217
204
+ _globals['_ISSUESERVICECREDENTIALRESPONSE']._serialized_end=6286
205
+ _globals['_REVOKEPREVIOUSSERVICECREDENTIALREQUEST']._serialized_start=6288
206
+ _globals['_REVOKEPREVIOUSSERVICECREDENTIALREQUEST']._serialized_end=6342
207
+ _globals['_REVOKEPREVIOUSSERVICECREDENTIALRESPONSE']._serialized_start=6344
208
+ _globals['_REVOKEPREVIOUSSERVICECREDENTIALRESPONSE']._serialized_end=6385
209
+ _globals['_REVOKESERVICECREDENTIALSREQUEST']._serialized_start=6387
210
+ _globals['_REVOKESERVICECREDENTIALSREQUEST']._serialized_end=6434
211
+ _globals['_REVOKESERVICECREDENTIALSRESPONSE']._serialized_start=6436
212
+ _globals['_REVOKESERVICECREDENTIALSRESPONSE']._serialized_end=6470
213
+ _globals['_SETSERVICEENVREQUEST']._serialized_start=6473
214
+ _globals['_SETSERVICEENVREQUEST']._serialized_end=6643
215
+ _globals['_SETSERVICEENVREQUEST_SETENTRY']._serialized_start=6601
216
+ _globals['_SETSERVICEENVREQUEST_SETENTRY']._serialized_end=6643
217
+ _globals['_SETSERVICEENVRESPONSE']._serialized_start=6645
218
+ _globals['_SETSERVICEENVRESPONSE']._serialized_end=6701
219
+ _globals['_GETSERVICEENVREQUEST']._serialized_start=6703
220
+ _globals['_GETSERVICEENVREQUEST']._serialized_end=6739
221
+ _globals['_GETSERVICEENVRESPONSE']._serialized_start=6741
222
+ _globals['_GETSERVICEENVRESPONSE']._serialized_end=6849
223
+ _globals['_SETTINGDECL']._serialized_start=6852
224
+ _globals['_SETTINGDECL']._serialized_end=7173
225
+ _globals['_SETTINGDECL_REQUIREDWHENENTRY']._serialized_start=7106
226
+ _globals['_SETTINGDECL_REQUIREDWHENENTRY']._serialized_end=7157
227
+ _globals['_SIGNEDSERVICEDOCUMENT']._serialized_start=7175
228
+ _globals['_SIGNEDSERVICEDOCUMENT']._serialized_end=7270
229
+ _globals['_REGISTRYINDEX']._serialized_start=7272
230
+ _globals['_REGISTRYINDEX']._serialized_end=7379
231
+ _globals['_REGISTRYENTRY']._serialized_start=7382
232
+ _globals['_REGISTRYENTRY']._serialized_end=7514
233
+ _globals['_REGISTRYRELEASE']._serialized_start=7517
234
+ _globals['_REGISTRYRELEASE']._serialized_end=7753
235
+ _globals['_REGISTRYRELEASE_PLATFORMSENTRY']._serialized_start=7673
236
+ _globals['_REGISTRYRELEASE_PLATFORMSENTRY']._serialized_end=7753
237
+ _globals['_REGISTRYARTIFACT']._serialized_start=7755
238
+ _globals['_REGISTRYARTIFACT']._serialized_end=7816
239
+ _globals['_ADDREGISTRYREQUEST']._serialized_start=7818
240
+ _globals['_ADDREGISTRYREQUEST']._serialized_end=7855
241
+ _globals['_ADDREGISTRYRESPONSE']._serialized_start=7857
242
+ _globals['_ADDREGISTRYRESPONSE']._serialized_end=7924
243
+ _globals['_REMOVEREGISTRYREQUEST']._serialized_start=7926
244
+ _globals['_REMOVEREGISTRYREQUEST']._serialized_end=7966
245
+ _globals['_REMOVEREGISTRYRESPONSE']._serialized_start=7968
246
+ _globals['_REMOVEREGISTRYRESPONSE']._serialized_end=7992
247
+ _globals['_LISTREGISTRIESREQUEST']._serialized_start=7994
248
+ _globals['_LISTREGISTRIESREQUEST']._serialized_end=8034
249
+ _globals['_LISTREGISTRIESRESPONSE']._serialized_start=8036
250
+ _globals['_LISTREGISTRIESRESPONSE']._serialized_end=8108
251
+ _globals['_REGISTRYINFO']._serialized_start=8110
252
+ _globals['_REGISTRYINFO']._serialized_end=8217
253
+ _globals['_SEARCHREGISTRIESREQUEST']._serialized_start=8219
254
+ _globals['_SEARCHREGISTRIESREQUEST']._serialized_end=8276
255
+ _globals['_SEARCHREGISTRIESRESPONSE']._serialized_start=8278
256
+ _globals['_SEARCHREGISTRIESRESPONSE']._serialized_end=8345
257
+ _globals['_REGISTRYHIT']._serialized_start=8348
258
+ _globals['_REGISTRYHIT']._serialized_end=8554
259
+ _globals['_REGISTEREDSERVICE']._serialized_start=8556
260
+ _globals['_REGISTEREDSERVICE']._serialized_end=8643
261
+ _globals['_DELETESERVICEREQUEST']._serialized_start=8645
262
+ _globals['_DELETESERVICEREQUEST']._serialized_end=8681
263
+ _globals['_ROTATEADMINKEYREQUEST']._serialized_start=8683
264
+ _globals['_ROTATEADMINKEYREQUEST']._serialized_end=8726
265
+ _globals['_ROTATEADMINKEYRESPONSE']._serialized_start=8728
266
+ _globals['_ROTATEADMINKEYRESPONSE']._serialized_end=8752
267
+ _globals['_DELETESERVICERESPONSE']._serialized_start=8754
268
+ _globals['_DELETESERVICERESPONSE']._serialized_end=8777
269
+ _globals['_DHTNODE']._serialized_start=8779
270
+ _globals['_DHTNODE']._serialized_end=8864
271
+ _globals['_PEERSTATE']._serialized_start=8866
272
+ _globals['_PEERSTATE']._serialized_end=8971
273
+ _globals['_CONNECTIONOWNER']._serialized_start=8973
274
+ _globals['_CONNECTIONOWNER']._serialized_end=9097
275
+ _globals['_SUBSCRIBEREQUEST']._serialized_start=9099
276
+ _globals['_SUBSCRIBEREQUEST']._serialized_end=9117
277
+ _globals['_DAEMONEVENT']._serialized_start=9119
278
+ _globals['_DAEMONEVENT']._serialized_end=9163
279
+ _globals['_SERVICECLIENTMESSAGE']._serialized_start=9166
280
+ _globals['_SERVICECLIENTMESSAGE']._serialized_end=10069
281
+ _globals['_SERVICESERVERMESSAGE']._serialized_start=10072
282
+ _globals['_SERVICESERVERMESSAGE']._serialized_end=10246
283
+ _globals['_COMMANDSPEC']._serialized_start=10248
284
+ _globals['_COMMANDSPEC']._serialized_end=10311
285
+ _globals['_SERVICEMANIFEST']._serialized_start=10314
286
+ _globals['_SERVICEMANIFEST']._serialized_end=10734
287
+ _globals['_METRICSPEC']._serialized_start=10736
288
+ _globals['_METRICSPEC']._serialized_end=10841
289
+ _globals['_METRICSAMPLE']._serialized_start=10844
290
+ _globals['_METRICSAMPLE']._serialized_end=11002
291
+ _globals['_METRICSAMPLE_LABELSENTRY']._serialized_start=10957
292
+ _globals['_METRICSAMPLE_LABELSENTRY']._serialized_end=11002
293
+ _globals['_RATELIMITPOLICY']._serialized_start=11004
294
+ _globals['_RATELIMITPOLICY']._serialized_end=11065
295
+ _globals['_SERVICEREGISTERED']._serialized_start=11067
296
+ _globals['_SERVICEREGISTERED']._serialized_end=11169
297
+ _globals['_SERVICEEVENT']._serialized_start=11171
298
+ _globals['_SERVICEEVENT']._serialized_end=11216
299
+ _globals['_SERVICECHATMESSAGEEVENT']._serialized_start=11218
300
+ _globals['_SERVICECHATMESSAGEEVENT']._serialized_end=11288
301
+ _globals['_SERVICECONNECTIONREQUESTEVENT']._serialized_start=11290
302
+ _globals['_SERVICECONNECTIONREQUESTEVENT']._serialized_end=11360
303
+ _globals['_SERVICECONNECTIONESTABLISHEDEVENT']._serialized_start=11362
304
+ _globals['_SERVICECONNECTIONESTABLISHEDEVENT']._serialized_end=11416
305
+ _globals['_SERVICECONNECTIONCLOSEDEVENT']._serialized_start=11418
306
+ _globals['_SERVICECONNECTIONCLOSEDEVENT']._serialized_end=11467
307
+ _globals['_SERVICERPCMESSAGEEVENT']._serialized_start=11469
308
+ _globals['_SERVICERPCMESSAGEEVENT']._serialized_end=11541
309
+ _globals['_SERVICEFILEOFFEREVENT']._serialized_start=11543
310
+ _globals['_SERVICEFILEOFFEREVENT']._serialized_end=11638
311
+ _globals['_SERVICECOMMANDEVENT']._serialized_start=11640
312
+ _globals['_SERVICECOMMANDEVENT']._serialized_end=11728
313
+ _globals['_SERVICECOMMANDRESULT']._serialized_start=11730
314
+ _globals['_SERVICECOMMANDRESULT']._serialized_end=11798
315
+ _globals['_SERVICEACCEPTFILE']._serialized_start=11800
316
+ _globals['_SERVICEACCEPTFILE']._serialized_end=11840
317
+ _globals['_SERVICEREJECTFILE']._serialized_start=11842
318
+ _globals['_SERVICEREJECTFILE']._serialized_end=11898
319
+ _globals['_SERVICESENDMESSAGE']._serialized_start=11900
320
+ _globals['_SERVICESENDMESSAGE']._serialized_end=11968
321
+ _globals['_SERVICEACCEPTCONNECTION']._serialized_start=11970
322
+ _globals['_SERVICEACCEPTCONNECTION']._serialized_end=12015
323
+ _globals['_SERVICEREJECTCONNECTION']._serialized_start=12017
324
+ _globals['_SERVICEREJECTCONNECTION']._serialized_end=12078
325
+ _globals['_SERVICECONNECTPEER']._serialized_start=12080
326
+ _globals['_SERVICECONNECTPEER']._serialized_end=12134
327
+ _globals['_SERVICERELEASEPEER']._serialized_start=12136
328
+ _globals['_SERVICERELEASEPEER']._serialized_end=12190
329
+ _globals['_SERVICEOPERATORPRESENCEEVENT']._serialized_start=12192
330
+ _globals['_SERVICEOPERATORPRESENCEEVENT']._serialized_end=12257
331
+ _globals['_SERVICEDISCONNECTPEER']._serialized_start=12259
332
+ _globals['_SERVICEDISCONNECTPEER']._serialized_end=12301
333
+ _globals['_SERVICEUPDATEALLOWLIST']._serialized_start=12303
334
+ _globals['_SERVICEUPDATEALLOWLIST']._serialized_end=12356
335
+ _globals['_SERVICETOOPERATOR']._serialized_start=12358
336
+ _globals['_SERVICETOOPERATOR']._serialized_end=12394
337
+ _globals['_SERVICEOPERATORMESSAGEEVENT']._serialized_start=12396
338
+ _globals['_SERVICEOPERATORMESSAGEEVENT']._serialized_end=12454
339
+ _globals['_SERVICEATTACHCLIENTMESSAGE']._serialized_start=12456
340
+ _globals['_SERVICEATTACHCLIENTMESSAGE']._serialized_end=12561
341
+ _globals['_SERVICEATTACHSTART']._serialized_start=12563
342
+ _globals['_SERVICEATTACHSTART']._serialized_end=12583
343
+ _globals['_SERVICEATTACHSERVERMESSAGE']._serialized_start=12586
344
+ _globals['_SERVICEATTACHSERVERMESSAGE']._serialized_end=12736
345
+ _globals['_SERVICEATTACHED']._serialized_start=12738
346
+ _globals['_SERVICEATTACHED']._serialized_end=12777
347
+ _globals['_SERVICEINTRODUCEPEER']._serialized_start=12780
348
+ _globals['_SERVICEINTRODUCEPEER']._serialized_end=12915
349
+ _globals['_SERVICESIGNDOCUMENT']._serialized_start=12917
350
+ _globals['_SERVICESIGNDOCUMENT']._serialized_end=12975
351
+ _globals['_SERVICESIGNRESULTEVENT']._serialized_start=12978
352
+ _globals['_SERVICESIGNRESULTEVENT']._serialized_end=13113
353
+ _globals['_SERVICEPEERINTRODUCTIONEVENT']._serialized_start=13116
354
+ _globals['_SERVICEPEERINTRODUCTIONEVENT']._serialized_end=13268
355
+ _globals['_SERVICEERROR']._serialized_start=13270
356
+ _globals['_SERVICEERROR']._serialized_end=13360
357
+ _globals['_LISTSERVICECOMMANDSREQUEST']._serialized_start=13362
358
+ _globals['_LISTSERVICECOMMANDSREQUEST']._serialized_end=13407
359
+ _globals['_LISTSERVICECOMMANDSRESPONSE']._serialized_start=13409
360
+ _globals['_LISTSERVICECOMMANDSRESPONSE']._serialized_end=13483
361
+ _globals['_SENDCOMMANDREQUEST']._serialized_start=13485
362
+ _globals['_SENDCOMMANDREQUEST']._serialized_end=13550
363
+ _globals['_SENDCOMMANDRESPONSE']._serialized_start=13552
364
+ _globals['_SENDCOMMANDRESPONSE']._serialized_end=13632
365
+ _globals['_GETMETRICSREQUEST']._serialized_start=13634
366
+ _globals['_GETMETRICSREQUEST']._serialized_end=13691
367
+ _globals['_METRICDESCRIPTOR']._serialized_start=13693
368
+ _globals['_METRICDESCRIPTOR']._serialized_end=13804
369
+ _globals['_METRICPOINT']._serialized_start=13806
370
+ _globals['_METRICPOINT']._serialized_end=13846
371
+ _globals['_METRICBUCKET']._serialized_start=13848
372
+ _globals['_METRICBUCKET']._serialized_end=13898
373
+ _globals['_METRICSERIES']._serialized_start=13901
374
+ _globals['_METRICSERIES']._serialized_end=14177
375
+ _globals['_METRICSERIES_LABELSENTRY']._serialized_start=10957
376
+ _globals['_METRICSERIES_LABELSENTRY']._serialized_end=11002
377
+ _globals['_GETMETRICSRESPONSE']._serialized_start=14180
378
+ _globals['_GETMETRICSRESPONSE']._serialized_end=14338
379
+ _globals['_STREAMMETRICSREQUEST']._serialized_start=14340
380
+ _globals['_STREAMMETRICSREQUEST']._serialized_end=14421
381
+ _globals['_METRICUPDATE']._serialized_start=14424
382
+ _globals['_METRICUPDATE']._serialized_end=14576
383
+ _globals['_SERVICEDESCRIPTION']._serialized_start=14579
384
+ _globals['_SERVICEDESCRIPTION']._serialized_end=14738
385
+ _globals['_ENSEMBLESERVICE']._serialized_start=14961
386
+ _globals['_ENSEMBLESERVICE']._serialized_end=19603
387
+ # @@protoc_insertion_point(module_scope)