diff --git a/authorization/src/main/java/io/deephaven/auth/codegen/impl/ConsoleServiceAuthWiring.java b/authorization/src/main/java/io/deephaven/auth/codegen/impl/ConsoleServiceAuthWiring.java
index fc866261aaa..c4fb74e36f7 100644
--- a/authorization/src/main/java/io/deephaven/auth/codegen/impl/ConsoleServiceAuthWiring.java
+++ b/authorization/src/main/java/io/deephaven/auth/codegen/impl/ConsoleServiceAuthWiring.java
@@ -11,6 +11,7 @@
 import io.deephaven.auth.ServiceAuthWiring;
 import io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest;
 import io.deephaven.proto.backplane.script.grpc.BindTableToVariableRequest;
+import io.deephaven.proto.backplane.script.grpc.CancelAutoCompleteRequest;
 import io.deephaven.proto.backplane.script.grpc.CancelCommandRequest;
 import io.deephaven.proto.backplane.script.grpc.ConsoleServiceGrpc;
 import io.deephaven.proto.backplane.script.grpc.ExecuteCommandRequest;
@@ -52,6 +53,8 @@ default ServerServiceDefinition intercept(ConsoleServiceGrpc.ConsoleServiceImplB
         serviceBuilder.addMethod(ServiceAuthWiring.intercept(
                 service, "AutoCompleteStream", this::onCallStartedAutoCompleteStream,
                 this::onMessageReceivedAutoCompleteStream));
+        serviceBuilder.addMethod(ServiceAuthWiring.intercept(
+                service, "CancelAutoComplete", null, this::onMessageReceivedCancelAutoComplete));
         serviceBuilder.addMethod(ServiceAuthWiring.intercept(
                 service, "OpenAutoCompleteStream", null, this::onMessageReceivedOpenAutoCompleteStream));
         serviceBuilder.addMethod(ServiceAuthWiring.intercept(
@@ -141,6 +144,16 @@ void onMessageReceivedBindTableToVariable(AuthContext authContext,
      */
     void onMessageReceivedAutoCompleteStream(AuthContext authContext, AutoCompleteRequest request);
 
+    /**
+     * Authorize a request to CancelAutoComplete.
+     *
+     * @param authContext the authentication context of the request
+     * @param request the request to authorize
+     * @throws io.grpc.StatusRuntimeException if the user is not authorized to invoke CancelAutoComplete
+     */
+    void onMessageReceivedCancelAutoComplete(AuthContext authContext,
+            CancelAutoCompleteRequest request);
+
     /**
      * Authorize a request to OpenAutoCompleteStream.
      *
@@ -187,6 +200,9 @@ public void onCallStartedAutoCompleteStream(AuthContext authContext) {}
         public void onMessageReceivedAutoCompleteStream(AuthContext authContext,
                 AutoCompleteRequest request) {}
 
+        public void onMessageReceivedCancelAutoComplete(AuthContext authContext,
+                CancelAutoCompleteRequest request) {}
+
         public void onMessageReceivedOpenAutoCompleteStream(AuthContext authContext,
                 AutoCompleteRequest request) {}
 
@@ -238,6 +254,11 @@ public void onMessageReceivedAutoCompleteStream(AuthContext authContext,
             ServiceAuthWiring.operationNotAllowed();
         }
 
+        public void onMessageReceivedCancelAutoComplete(AuthContext authContext,
+                CancelAutoCompleteRequest request) {
+            ServiceAuthWiring.operationNotAllowed();
+        }
+
         public void onMessageReceivedOpenAutoCompleteStream(AuthContext authContext,
                 AutoCompleteRequest request) {
             ServiceAuthWiring.operationNotAllowed();
@@ -313,6 +334,13 @@ public void onMessageReceivedAutoCompleteStream(AuthContext authContext,
             }
         }
 
+        public void onMessageReceivedCancelAutoComplete(AuthContext authContext,
+                CancelAutoCompleteRequest request) {
+            if (delegate != null) {
+                delegate.onMessageReceivedCancelAutoComplete(authContext, request);
+            }
+        }
+
         public void onMessageReceivedOpenAutoCompleteStream(AuthContext authContext,
                 AutoCompleteRequest request) {
             if (delegate != null) {
diff --git a/cpp-client/deephaven/client/proto/deephaven/proto/console.grpc.pb.cc b/cpp-client/deephaven/client/proto/deephaven/proto/console.grpc.pb.cc
index ef652765dd0..556f17f83b4 100644
--- a/cpp-client/deephaven/client/proto/deephaven/proto/console.grpc.pb.cc
+++ b/cpp-client/deephaven/client/proto/deephaven/proto/console.grpc.pb.cc
@@ -35,6 +35,7 @@ static const char* ConsoleService_method_names[] = {
   "/io.deephaven.proto.backplane.script.grpc.ConsoleService/CancelCommand",
   "/io.deephaven.proto.backplane.script.grpc.ConsoleService/BindTableToVariable",
   "/io.deephaven.proto.backplane.script.grpc.ConsoleService/AutoCompleteStream",
+  "/io.deephaven.proto.backplane.script.grpc.ConsoleService/CancelAutoComplete",
   "/io.deephaven.proto.backplane.script.grpc.ConsoleService/OpenAutoCompleteStream",
   "/io.deephaven.proto.backplane.script.grpc.ConsoleService/NextAutoCompleteStream",
 };
@@ -54,8 +55,9 @@ ConsoleService::Stub::Stub(const std::shared_ptr< ::grpc::ChannelInterface>& cha
   , rpcmethod_CancelCommand_(ConsoleService_method_names[5], options.suffix_for_stats(),::grpc::internal::RpcMethod::NORMAL_RPC, channel)
   , rpcmethod_BindTableToVariable_(ConsoleService_method_names[6], options.suffix_for_stats(),::grpc::internal::RpcMethod::NORMAL_RPC, channel)
   , rpcmethod_AutoCompleteStream_(ConsoleService_method_names[7], options.suffix_for_stats(),::grpc::internal::RpcMethod::BIDI_STREAMING, channel)
-  , rpcmethod_OpenAutoCompleteStream_(ConsoleService_method_names[8], options.suffix_for_stats(),::grpc::internal::RpcMethod::SERVER_STREAMING, channel)
-  , rpcmethod_NextAutoCompleteStream_(ConsoleService_method_names[9], options.suffix_for_stats(),::grpc::internal::RpcMethod::NORMAL_RPC, channel)
+  , rpcmethod_CancelAutoComplete_(ConsoleService_method_names[8], options.suffix_for_stats(),::grpc::internal::RpcMethod::NORMAL_RPC, channel)
+  , rpcmethod_OpenAutoCompleteStream_(ConsoleService_method_names[9], options.suffix_for_stats(),::grpc::internal::RpcMethod::SERVER_STREAMING, channel)
+  , rpcmethod_NextAutoCompleteStream_(ConsoleService_method_names[10], options.suffix_for_stats(),::grpc::internal::RpcMethod::NORMAL_RPC, channel)
   {}
 
 ::grpc::Status ConsoleService::Stub::GetConsoleTypes(::grpc::ClientContext* context, const ::io::deephaven::proto::backplane::script::grpc::GetConsoleTypesRequest& request, ::io::deephaven::proto::backplane::script::grpc::GetConsoleTypesResponse* response) {
@@ -228,6 +230,29 @@ ::grpc::ClientAsyncReaderWriter< ::io::deephaven::proto::backplane::script::grpc
   return ::grpc::internal::ClientAsyncReaderWriterFactory< ::io::deephaven::proto::backplane::script::grpc::AutoCompleteRequest, ::io::deephaven::proto::backplane::script::grpc::AutoCompleteResponse>::Create(channel_.get(), cq, rpcmethod_AutoCompleteStream_, context, false, nullptr);
 }
 
+::grpc::Status ConsoleService::Stub::CancelAutoComplete(::grpc::ClientContext* context, const ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteRequest& request, ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteResponse* response) {
+  return ::grpc::internal::BlockingUnaryCall< ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteRequest, ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteResponse, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(channel_.get(), rpcmethod_CancelAutoComplete_, context, request, response);
+}
+
+void ConsoleService::Stub::async::CancelAutoComplete(::grpc::ClientContext* context, const ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteRequest* request, ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteResponse* response, std::function<void(::grpc::Status)> f) {
+  ::grpc::internal::CallbackUnaryCall< ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteRequest, ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteResponse, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(stub_->channel_.get(), stub_->rpcmethod_CancelAutoComplete_, context, request, response, std::move(f));
+}
+
+void ConsoleService::Stub::async::CancelAutoComplete(::grpc::ClientContext* context, const ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteRequest* request, ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteResponse* response, ::grpc::ClientUnaryReactor* reactor) {
+  ::grpc::internal::ClientCallbackUnaryFactory::Create< ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(stub_->channel_.get(), stub_->rpcmethod_CancelAutoComplete_, context, request, response, reactor);
+}
+
+::grpc::ClientAsyncResponseReader< ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteResponse>* ConsoleService::Stub::PrepareAsyncCancelAutoCompleteRaw(::grpc::ClientContext* context, const ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteRequest& request, ::grpc::CompletionQueue* cq) {
+  return ::grpc::internal::ClientAsyncResponseReaderHelper::Create< ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteResponse, ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteRequest, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(channel_.get(), cq, rpcmethod_CancelAutoComplete_, context, request);
+}
+
+::grpc::ClientAsyncResponseReader< ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteResponse>* ConsoleService::Stub::AsyncCancelAutoCompleteRaw(::grpc::ClientContext* context, const ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteRequest& request, ::grpc::CompletionQueue* cq) {
+  auto* result =
+    this->PrepareAsyncCancelAutoCompleteRaw(context, request, cq);
+  result->StartCall();
+  return result;
+}
+
 ::grpc::ClientReader< ::io::deephaven::proto::backplane::script::grpc::AutoCompleteResponse>* ConsoleService::Stub::OpenAutoCompleteStreamRaw(::grpc::ClientContext* context, const ::io::deephaven::proto::backplane::script::grpc::AutoCompleteRequest& request) {
   return ::grpc::internal::ClientReaderFactory< ::io::deephaven::proto::backplane::script::grpc::AutoCompleteResponse>::Create(channel_.get(), rpcmethod_OpenAutoCompleteStream_, context, request);
 }
@@ -350,6 +375,16 @@ ConsoleService::Service::Service() {
              }, this)));
   AddMethod(new ::grpc::internal::RpcServiceMethod(
       ConsoleService_method_names[8],
+      ::grpc::internal::RpcMethod::NORMAL_RPC,
+      new ::grpc::internal::RpcMethodHandler< ConsoleService::Service, ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteRequest, ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteResponse, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(
+          [](ConsoleService::Service* service,
+             ::grpc::ServerContext* ctx,
+             const ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteRequest* req,
+             ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteResponse* resp) {
+               return service->CancelAutoComplete(ctx, req, resp);
+             }, this)));
+  AddMethod(new ::grpc::internal::RpcServiceMethod(
+      ConsoleService_method_names[9],
       ::grpc::internal::RpcMethod::SERVER_STREAMING,
       new ::grpc::internal::ServerStreamingHandler< ConsoleService::Service, ::io::deephaven::proto::backplane::script::grpc::AutoCompleteRequest, ::io::deephaven::proto::backplane::script::grpc::AutoCompleteResponse>(
           [](ConsoleService::Service* service,
@@ -359,7 +394,7 @@ ConsoleService::Service::Service() {
                return service->OpenAutoCompleteStream(ctx, req, writer);
              }, this)));
   AddMethod(new ::grpc::internal::RpcServiceMethod(
-      ConsoleService_method_names[9],
+      ConsoleService_method_names[10],
       ::grpc::internal::RpcMethod::NORMAL_RPC,
       new ::grpc::internal::RpcMethodHandler< ConsoleService::Service, ::io::deephaven::proto::backplane::script::grpc::AutoCompleteRequest, ::io::deephaven::proto::backplane::script::grpc::BrowserNextResponse, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(
           [](ConsoleService::Service* service,
@@ -428,6 +463,13 @@ ::grpc::Status ConsoleService::Service::AutoCompleteStream(::grpc::ServerContext
   return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
 }
 
+::grpc::Status ConsoleService::Service::CancelAutoComplete(::grpc::ServerContext* context, const ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteRequest* request, ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteResponse* response) {
+  (void) context;
+  (void) request;
+  (void) response;
+  return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
+}
+
 ::grpc::Status ConsoleService::Service::OpenAutoCompleteStream(::grpc::ServerContext* context, const ::io::deephaven::proto::backplane::script::grpc::AutoCompleteRequest* request, ::grpc::ServerWriter< ::io::deephaven::proto::backplane::script::grpc::AutoCompleteResponse>* writer) {
   (void) context;
   (void) request;
diff --git a/cpp-client/deephaven/client/proto/deephaven/proto/console.grpc.pb.h b/cpp-client/deephaven/client/proto/deephaven/proto/console.grpc.pb.h
index e49a144cf82..cf4eb129ff6 100644
--- a/cpp-client/deephaven/client/proto/deephaven/proto/console.grpc.pb.h
+++ b/cpp-client/deephaven/client/proto/deephaven/proto/console.grpc.pb.h
@@ -110,6 +110,13 @@ class ConsoleService final {
     std::unique_ptr< ::grpc::ClientAsyncReaderWriterInterface< ::io::deephaven::proto::backplane::script::grpc::AutoCompleteRequest, ::io::deephaven::proto::backplane::script::grpc::AutoCompleteResponse>> PrepareAsyncAutoCompleteStream(::grpc::ClientContext* context, ::grpc::CompletionQueue* cq) {
       return std::unique_ptr< ::grpc::ClientAsyncReaderWriterInterface< ::io::deephaven::proto::backplane::script::grpc::AutoCompleteRequest, ::io::deephaven::proto::backplane::script::grpc::AutoCompleteResponse>>(PrepareAsyncAutoCompleteStreamRaw(context, cq));
     }
+    virtual ::grpc::Status CancelAutoComplete(::grpc::ClientContext* context, const ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteRequest& request, ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteResponse* response) = 0;
+    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteResponse>> AsyncCancelAutoComplete(::grpc::ClientContext* context, const ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteRequest& request, ::grpc::CompletionQueue* cq) {
+      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteResponse>>(AsyncCancelAutoCompleteRaw(context, request, cq));
+    }
+    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteResponse>> PrepareAsyncCancelAutoComplete(::grpc::ClientContext* context, const ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteRequest& request, ::grpc::CompletionQueue* cq) {
+      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteResponse>>(PrepareAsyncCancelAutoCompleteRaw(context, request, cq));
+    }
     //
     // Half of the browser-based (browser's can't do bidirectional streams without websockets)
     // implementation for AutoCompleteStream.
@@ -153,6 +160,8 @@ class ConsoleService final {
       // be closed as well. A given document should only be edited within one stream at a
       // time.
       virtual void AutoCompleteStream(::grpc::ClientContext* context, ::grpc::ClientBidiReactor< ::io::deephaven::proto::backplane::script::grpc::AutoCompleteRequest,::io::deephaven::proto::backplane::script::grpc::AutoCompleteResponse>* reactor) = 0;
+      virtual void CancelAutoComplete(::grpc::ClientContext* context, const ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteRequest* request, ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteResponse* response, std::function<void(::grpc::Status)>) = 0;
+      virtual void CancelAutoComplete(::grpc::ClientContext* context, const ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteRequest* request, ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteResponse* response, ::grpc::ClientUnaryReactor* reactor) = 0;
       //
       // Half of the browser-based (browser's can't do bidirectional streams without websockets)
       // implementation for AutoCompleteStream.
@@ -184,6 +193,8 @@ class ConsoleService final {
     virtual ::grpc::ClientReaderWriterInterface< ::io::deephaven::proto::backplane::script::grpc::AutoCompleteRequest, ::io::deephaven::proto::backplane::script::grpc::AutoCompleteResponse>* AutoCompleteStreamRaw(::grpc::ClientContext* context) = 0;
     virtual ::grpc::ClientAsyncReaderWriterInterface< ::io::deephaven::proto::backplane::script::grpc::AutoCompleteRequest, ::io::deephaven::proto::backplane::script::grpc::AutoCompleteResponse>* AsyncAutoCompleteStreamRaw(::grpc::ClientContext* context, ::grpc::CompletionQueue* cq, void* tag) = 0;
     virtual ::grpc::ClientAsyncReaderWriterInterface< ::io::deephaven::proto::backplane::script::grpc::AutoCompleteRequest, ::io::deephaven::proto::backplane::script::grpc::AutoCompleteResponse>* PrepareAsyncAutoCompleteStreamRaw(::grpc::ClientContext* context, ::grpc::CompletionQueue* cq) = 0;
+    virtual ::grpc::ClientAsyncResponseReaderInterface< ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteResponse>* AsyncCancelAutoCompleteRaw(::grpc::ClientContext* context, const ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteRequest& request, ::grpc::CompletionQueue* cq) = 0;
+    virtual ::grpc::ClientAsyncResponseReaderInterface< ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteResponse>* PrepareAsyncCancelAutoCompleteRaw(::grpc::ClientContext* context, const ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteRequest& request, ::grpc::CompletionQueue* cq) = 0;
     virtual ::grpc::ClientReaderInterface< ::io::deephaven::proto::backplane::script::grpc::AutoCompleteResponse>* OpenAutoCompleteStreamRaw(::grpc::ClientContext* context, const ::io::deephaven::proto::backplane::script::grpc::AutoCompleteRequest& request) = 0;
     virtual ::grpc::ClientAsyncReaderInterface< ::io::deephaven::proto::backplane::script::grpc::AutoCompleteResponse>* AsyncOpenAutoCompleteStreamRaw(::grpc::ClientContext* context, const ::io::deephaven::proto::backplane::script::grpc::AutoCompleteRequest& request, ::grpc::CompletionQueue* cq, void* tag) = 0;
     virtual ::grpc::ClientAsyncReaderInterface< ::io::deephaven::proto::backplane::script::grpc::AutoCompleteResponse>* PrepareAsyncOpenAutoCompleteStreamRaw(::grpc::ClientContext* context, const ::io::deephaven::proto::backplane::script::grpc::AutoCompleteRequest& request, ::grpc::CompletionQueue* cq) = 0;
@@ -253,6 +264,13 @@ class ConsoleService final {
     std::unique_ptr<  ::grpc::ClientAsyncReaderWriter< ::io::deephaven::proto::backplane::script::grpc::AutoCompleteRequest, ::io::deephaven::proto::backplane::script::grpc::AutoCompleteResponse>> PrepareAsyncAutoCompleteStream(::grpc::ClientContext* context, ::grpc::CompletionQueue* cq) {
       return std::unique_ptr< ::grpc::ClientAsyncReaderWriter< ::io::deephaven::proto::backplane::script::grpc::AutoCompleteRequest, ::io::deephaven::proto::backplane::script::grpc::AutoCompleteResponse>>(PrepareAsyncAutoCompleteStreamRaw(context, cq));
     }
+    ::grpc::Status CancelAutoComplete(::grpc::ClientContext* context, const ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteRequest& request, ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteResponse* response) override;
+    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteResponse>> AsyncCancelAutoComplete(::grpc::ClientContext* context, const ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteRequest& request, ::grpc::CompletionQueue* cq) {
+      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteResponse>>(AsyncCancelAutoCompleteRaw(context, request, cq));
+    }
+    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteResponse>> PrepareAsyncCancelAutoComplete(::grpc::ClientContext* context, const ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteRequest& request, ::grpc::CompletionQueue* cq) {
+      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteResponse>>(PrepareAsyncCancelAutoCompleteRaw(context, request, cq));
+    }
     std::unique_ptr< ::grpc::ClientReader< ::io::deephaven::proto::backplane::script::grpc::AutoCompleteResponse>> OpenAutoCompleteStream(::grpc::ClientContext* context, const ::io::deephaven::proto::backplane::script::grpc::AutoCompleteRequest& request) {
       return std::unique_ptr< ::grpc::ClientReader< ::io::deephaven::proto::backplane::script::grpc::AutoCompleteResponse>>(OpenAutoCompleteStreamRaw(context, request));
     }
@@ -286,6 +304,8 @@ class ConsoleService final {
       void BindTableToVariable(::grpc::ClientContext* context, const ::io::deephaven::proto::backplane::script::grpc::BindTableToVariableRequest* request, ::io::deephaven::proto::backplane::script::grpc::BindTableToVariableResponse* response, std::function<void(::grpc::Status)>) override;
       void BindTableToVariable(::grpc::ClientContext* context, const ::io::deephaven::proto::backplane::script::grpc::BindTableToVariableRequest* request, ::io::deephaven::proto::backplane::script::grpc::BindTableToVariableResponse* response, ::grpc::ClientUnaryReactor* reactor) override;
       void AutoCompleteStream(::grpc::ClientContext* context, ::grpc::ClientBidiReactor< ::io::deephaven::proto::backplane::script::grpc::AutoCompleteRequest,::io::deephaven::proto::backplane::script::grpc::AutoCompleteResponse>* reactor) override;
+      void CancelAutoComplete(::grpc::ClientContext* context, const ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteRequest* request, ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteResponse* response, std::function<void(::grpc::Status)>) override;
+      void CancelAutoComplete(::grpc::ClientContext* context, const ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteRequest* request, ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteResponse* response, ::grpc::ClientUnaryReactor* reactor) override;
       void OpenAutoCompleteStream(::grpc::ClientContext* context, const ::io::deephaven::proto::backplane::script::grpc::AutoCompleteRequest* request, ::grpc::ClientReadReactor< ::io::deephaven::proto::backplane::script::grpc::AutoCompleteResponse>* reactor) override;
       void NextAutoCompleteStream(::grpc::ClientContext* context, const ::io::deephaven::proto::backplane::script::grpc::AutoCompleteRequest* request, ::io::deephaven::proto::backplane::script::grpc::BrowserNextResponse* response, std::function<void(::grpc::Status)>) override;
       void NextAutoCompleteStream(::grpc::ClientContext* context, const ::io::deephaven::proto::backplane::script::grpc::AutoCompleteRequest* request, ::io::deephaven::proto::backplane::script::grpc::BrowserNextResponse* response, ::grpc::ClientUnaryReactor* reactor) override;
@@ -318,6 +338,8 @@ class ConsoleService final {
     ::grpc::ClientReaderWriter< ::io::deephaven::proto::backplane::script::grpc::AutoCompleteRequest, ::io::deephaven::proto::backplane::script::grpc::AutoCompleteResponse>* AutoCompleteStreamRaw(::grpc::ClientContext* context) override;
     ::grpc::ClientAsyncReaderWriter< ::io::deephaven::proto::backplane::script::grpc::AutoCompleteRequest, ::io::deephaven::proto::backplane::script::grpc::AutoCompleteResponse>* AsyncAutoCompleteStreamRaw(::grpc::ClientContext* context, ::grpc::CompletionQueue* cq, void* tag) override;
     ::grpc::ClientAsyncReaderWriter< ::io::deephaven::proto::backplane::script::grpc::AutoCompleteRequest, ::io::deephaven::proto::backplane::script::grpc::AutoCompleteResponse>* PrepareAsyncAutoCompleteStreamRaw(::grpc::ClientContext* context, ::grpc::CompletionQueue* cq) override;
+    ::grpc::ClientAsyncResponseReader< ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteResponse>* AsyncCancelAutoCompleteRaw(::grpc::ClientContext* context, const ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteRequest& request, ::grpc::CompletionQueue* cq) override;
+    ::grpc::ClientAsyncResponseReader< ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteResponse>* PrepareAsyncCancelAutoCompleteRaw(::grpc::ClientContext* context, const ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteRequest& request, ::grpc::CompletionQueue* cq) override;
     ::grpc::ClientReader< ::io::deephaven::proto::backplane::script::grpc::AutoCompleteResponse>* OpenAutoCompleteStreamRaw(::grpc::ClientContext* context, const ::io::deephaven::proto::backplane::script::grpc::AutoCompleteRequest& request) override;
     ::grpc::ClientAsyncReader< ::io::deephaven::proto::backplane::script::grpc::AutoCompleteResponse>* AsyncOpenAutoCompleteStreamRaw(::grpc::ClientContext* context, const ::io::deephaven::proto::backplane::script::grpc::AutoCompleteRequest& request, ::grpc::CompletionQueue* cq, void* tag) override;
     ::grpc::ClientAsyncReader< ::io::deephaven::proto::backplane::script::grpc::AutoCompleteResponse>* PrepareAsyncOpenAutoCompleteStreamRaw(::grpc::ClientContext* context, const ::io::deephaven::proto::backplane::script::grpc::AutoCompleteRequest& request, ::grpc::CompletionQueue* cq) override;
@@ -331,6 +353,7 @@ class ConsoleService final {
     const ::grpc::internal::RpcMethod rpcmethod_CancelCommand_;
     const ::grpc::internal::RpcMethod rpcmethod_BindTableToVariable_;
     const ::grpc::internal::RpcMethod rpcmethod_AutoCompleteStream_;
+    const ::grpc::internal::RpcMethod rpcmethod_CancelAutoComplete_;
     const ::grpc::internal::RpcMethod rpcmethod_OpenAutoCompleteStream_;
     const ::grpc::internal::RpcMethod rpcmethod_NextAutoCompleteStream_;
   };
@@ -353,6 +376,7 @@ class ConsoleService final {
     // be closed as well. A given document should only be edited within one stream at a
     // time.
     virtual ::grpc::Status AutoCompleteStream(::grpc::ServerContext* context, ::grpc::ServerReaderWriter< ::io::deephaven::proto::backplane::script::grpc::AutoCompleteResponse, ::io::deephaven::proto::backplane::script::grpc::AutoCompleteRequest>* stream);
+    virtual ::grpc::Status CancelAutoComplete(::grpc::ServerContext* context, const ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteRequest* request, ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteResponse* response);
     //
     // Half of the browser-based (browser's can't do bidirectional streams without websockets)
     // implementation for AutoCompleteStream.
@@ -522,12 +546,32 @@ class ConsoleService final {
     }
   };
   template <class BaseClass>
+  class WithAsyncMethod_CancelAutoComplete : public BaseClass {
+   private:
+    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
+   public:
+    WithAsyncMethod_CancelAutoComplete() {
+      ::grpc::Service::MarkMethodAsync(8);
+    }
+    ~WithAsyncMethod_CancelAutoComplete() override {
+      BaseClassMustBeDerivedFromService(this);
+    }
+    // disable synchronous version of this method
+    ::grpc::Status CancelAutoComplete(::grpc::ServerContext* /*context*/, const ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteRequest* /*request*/, ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteResponse* /*response*/) override {
+      abort();
+      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
+    }
+    void RequestCancelAutoComplete(::grpc::ServerContext* context, ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteRequest* request, ::grpc::ServerAsyncResponseWriter< ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteResponse>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
+      ::grpc::Service::RequestAsyncUnary(8, context, request, response, new_call_cq, notification_cq, tag);
+    }
+  };
+  template <class BaseClass>
   class WithAsyncMethod_OpenAutoCompleteStream : public BaseClass {
    private:
     void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
    public:
     WithAsyncMethod_OpenAutoCompleteStream() {
-      ::grpc::Service::MarkMethodAsync(8);
+      ::grpc::Service::MarkMethodAsync(9);
     }
     ~WithAsyncMethod_OpenAutoCompleteStream() override {
       BaseClassMustBeDerivedFromService(this);
@@ -538,7 +582,7 @@ class ConsoleService final {
       return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
     }
     void RequestOpenAutoCompleteStream(::grpc::ServerContext* context, ::io::deephaven::proto::backplane::script::grpc::AutoCompleteRequest* request, ::grpc::ServerAsyncWriter< ::io::deephaven::proto::backplane::script::grpc::AutoCompleteResponse>* writer, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
-      ::grpc::Service::RequestAsyncServerStreaming(8, context, request, writer, new_call_cq, notification_cq, tag);
+      ::grpc::Service::RequestAsyncServerStreaming(9, context, request, writer, new_call_cq, notification_cq, tag);
     }
   };
   template <class BaseClass>
@@ -547,7 +591,7 @@ class ConsoleService final {
     void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
    public:
     WithAsyncMethod_NextAutoCompleteStream() {
-      ::grpc::Service::MarkMethodAsync(9);
+      ::grpc::Service::MarkMethodAsync(10);
     }
     ~WithAsyncMethod_NextAutoCompleteStream() override {
       BaseClassMustBeDerivedFromService(this);
@@ -558,10 +602,10 @@ class ConsoleService final {
       return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
     }
     void RequestNextAutoCompleteStream(::grpc::ServerContext* context, ::io::deephaven::proto::backplane::script::grpc::AutoCompleteRequest* request, ::grpc::ServerAsyncResponseWriter< ::io::deephaven::proto::backplane::script::grpc::BrowserNextResponse>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
-      ::grpc::Service::RequestAsyncUnary(9, context, request, response, new_call_cq, notification_cq, tag);
+      ::grpc::Service::RequestAsyncUnary(10, context, request, response, new_call_cq, notification_cq, tag);
     }
   };
-  typedef WithAsyncMethod_GetConsoleTypes<WithAsyncMethod_StartConsole<WithAsyncMethod_GetHeapInfo<WithAsyncMethod_SubscribeToLogs<WithAsyncMethod_ExecuteCommand<WithAsyncMethod_CancelCommand<WithAsyncMethod_BindTableToVariable<WithAsyncMethod_AutoCompleteStream<WithAsyncMethod_OpenAutoCompleteStream<WithAsyncMethod_NextAutoCompleteStream<Service > > > > > > > > > > AsyncService;
+  typedef WithAsyncMethod_GetConsoleTypes<WithAsyncMethod_StartConsole<WithAsyncMethod_GetHeapInfo<WithAsyncMethod_SubscribeToLogs<WithAsyncMethod_ExecuteCommand<WithAsyncMethod_CancelCommand<WithAsyncMethod_BindTableToVariable<WithAsyncMethod_AutoCompleteStream<WithAsyncMethod_CancelAutoComplete<WithAsyncMethod_OpenAutoCompleteStream<WithAsyncMethod_NextAutoCompleteStream<Service > > > > > > > > > > > AsyncService;
   template <class BaseClass>
   class WithCallbackMethod_GetConsoleTypes : public BaseClass {
    private:
@@ -770,12 +814,39 @@ class ConsoleService final {
       { return nullptr; }
   };
   template <class BaseClass>
+  class WithCallbackMethod_CancelAutoComplete : public BaseClass {
+   private:
+    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
+   public:
+    WithCallbackMethod_CancelAutoComplete() {
+      ::grpc::Service::MarkMethodCallback(8,
+          new ::grpc::internal::CallbackUnaryHandler< ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteRequest, ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteResponse>(
+            [this](
+                   ::grpc::CallbackServerContext* context, const ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteRequest* request, ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteResponse* response) { return this->CancelAutoComplete(context, request, response); }));}
+    void SetMessageAllocatorFor_CancelAutoComplete(
+        ::grpc::MessageAllocator< ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteRequest, ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteResponse>* allocator) {
+      ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(8);
+      static_cast<::grpc::internal::CallbackUnaryHandler< ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteRequest, ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteResponse>*>(handler)
+              ->SetMessageAllocator(allocator);
+    }
+    ~WithCallbackMethod_CancelAutoComplete() override {
+      BaseClassMustBeDerivedFromService(this);
+    }
+    // disable synchronous version of this method
+    ::grpc::Status CancelAutoComplete(::grpc::ServerContext* /*context*/, const ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteRequest* /*request*/, ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteResponse* /*response*/) override {
+      abort();
+      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
+    }
+    virtual ::grpc::ServerUnaryReactor* CancelAutoComplete(
+      ::grpc::CallbackServerContext* /*context*/, const ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteRequest* /*request*/, ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteResponse* /*response*/)  { return nullptr; }
+  };
+  template <class BaseClass>
   class WithCallbackMethod_OpenAutoCompleteStream : public BaseClass {
    private:
     void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
    public:
     WithCallbackMethod_OpenAutoCompleteStream() {
-      ::grpc::Service::MarkMethodCallback(8,
+      ::grpc::Service::MarkMethodCallback(9,
           new ::grpc::internal::CallbackServerStreamingHandler< ::io::deephaven::proto::backplane::script::grpc::AutoCompleteRequest, ::io::deephaven::proto::backplane::script::grpc::AutoCompleteResponse>(
             [this](
                    ::grpc::CallbackServerContext* context, const ::io::deephaven::proto::backplane::script::grpc::AutoCompleteRequest* request) { return this->OpenAutoCompleteStream(context, request); }));
@@ -797,13 +868,13 @@ class ConsoleService final {
     void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
    public:
     WithCallbackMethod_NextAutoCompleteStream() {
-      ::grpc::Service::MarkMethodCallback(9,
+      ::grpc::Service::MarkMethodCallback(10,
           new ::grpc::internal::CallbackUnaryHandler< ::io::deephaven::proto::backplane::script::grpc::AutoCompleteRequest, ::io::deephaven::proto::backplane::script::grpc::BrowserNextResponse>(
             [this](
                    ::grpc::CallbackServerContext* context, const ::io::deephaven::proto::backplane::script::grpc::AutoCompleteRequest* request, ::io::deephaven::proto::backplane::script::grpc::BrowserNextResponse* response) { return this->NextAutoCompleteStream(context, request, response); }));}
     void SetMessageAllocatorFor_NextAutoCompleteStream(
         ::grpc::MessageAllocator< ::io::deephaven::proto::backplane::script::grpc::AutoCompleteRequest, ::io::deephaven::proto::backplane::script::grpc::BrowserNextResponse>* allocator) {
-      ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(9);
+      ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(10);
       static_cast<::grpc::internal::CallbackUnaryHandler< ::io::deephaven::proto::backplane::script::grpc::AutoCompleteRequest, ::io::deephaven::proto::backplane::script::grpc::BrowserNextResponse>*>(handler)
               ->SetMessageAllocator(allocator);
     }
@@ -818,7 +889,7 @@ class ConsoleService final {
     virtual ::grpc::ServerUnaryReactor* NextAutoCompleteStream(
       ::grpc::CallbackServerContext* /*context*/, const ::io::deephaven::proto::backplane::script::grpc::AutoCompleteRequest* /*request*/, ::io::deephaven::proto::backplane::script::grpc::BrowserNextResponse* /*response*/)  { return nullptr; }
   };
-  typedef WithCallbackMethod_GetConsoleTypes<WithCallbackMethod_StartConsole<WithCallbackMethod_GetHeapInfo<WithCallbackMethod_SubscribeToLogs<WithCallbackMethod_ExecuteCommand<WithCallbackMethod_CancelCommand<WithCallbackMethod_BindTableToVariable<WithCallbackMethod_AutoCompleteStream<WithCallbackMethod_OpenAutoCompleteStream<WithCallbackMethod_NextAutoCompleteStream<Service > > > > > > > > > > CallbackService;
+  typedef WithCallbackMethod_GetConsoleTypes<WithCallbackMethod_StartConsole<WithCallbackMethod_GetHeapInfo<WithCallbackMethod_SubscribeToLogs<WithCallbackMethod_ExecuteCommand<WithCallbackMethod_CancelCommand<WithCallbackMethod_BindTableToVariable<WithCallbackMethod_AutoCompleteStream<WithCallbackMethod_CancelAutoComplete<WithCallbackMethod_OpenAutoCompleteStream<WithCallbackMethod_NextAutoCompleteStream<Service > > > > > > > > > > > CallbackService;
   typedef CallbackService ExperimentalCallbackService;
   template <class BaseClass>
   class WithGenericMethod_GetConsoleTypes : public BaseClass {
@@ -957,12 +1028,29 @@ class ConsoleService final {
     }
   };
   template <class BaseClass>
+  class WithGenericMethod_CancelAutoComplete : public BaseClass {
+   private:
+    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
+   public:
+    WithGenericMethod_CancelAutoComplete() {
+      ::grpc::Service::MarkMethodGeneric(8);
+    }
+    ~WithGenericMethod_CancelAutoComplete() override {
+      BaseClassMustBeDerivedFromService(this);
+    }
+    // disable synchronous version of this method
+    ::grpc::Status CancelAutoComplete(::grpc::ServerContext* /*context*/, const ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteRequest* /*request*/, ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteResponse* /*response*/) override {
+      abort();
+      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
+    }
+  };
+  template <class BaseClass>
   class WithGenericMethod_OpenAutoCompleteStream : public BaseClass {
    private:
     void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
    public:
     WithGenericMethod_OpenAutoCompleteStream() {
-      ::grpc::Service::MarkMethodGeneric(8);
+      ::grpc::Service::MarkMethodGeneric(9);
     }
     ~WithGenericMethod_OpenAutoCompleteStream() override {
       BaseClassMustBeDerivedFromService(this);
@@ -979,7 +1067,7 @@ class ConsoleService final {
     void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
    public:
     WithGenericMethod_NextAutoCompleteStream() {
-      ::grpc::Service::MarkMethodGeneric(9);
+      ::grpc::Service::MarkMethodGeneric(10);
     }
     ~WithGenericMethod_NextAutoCompleteStream() override {
       BaseClassMustBeDerivedFromService(this);
@@ -1151,12 +1239,32 @@ class ConsoleService final {
     }
   };
   template <class BaseClass>
+  class WithRawMethod_CancelAutoComplete : public BaseClass {
+   private:
+    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
+   public:
+    WithRawMethod_CancelAutoComplete() {
+      ::grpc::Service::MarkMethodRaw(8);
+    }
+    ~WithRawMethod_CancelAutoComplete() override {
+      BaseClassMustBeDerivedFromService(this);
+    }
+    // disable synchronous version of this method
+    ::grpc::Status CancelAutoComplete(::grpc::ServerContext* /*context*/, const ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteRequest* /*request*/, ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteResponse* /*response*/) override {
+      abort();
+      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
+    }
+    void RequestCancelAutoComplete(::grpc::ServerContext* context, ::grpc::ByteBuffer* request, ::grpc::ServerAsyncResponseWriter< ::grpc::ByteBuffer>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
+      ::grpc::Service::RequestAsyncUnary(8, context, request, response, new_call_cq, notification_cq, tag);
+    }
+  };
+  template <class BaseClass>
   class WithRawMethod_OpenAutoCompleteStream : public BaseClass {
    private:
     void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
    public:
     WithRawMethod_OpenAutoCompleteStream() {
-      ::grpc::Service::MarkMethodRaw(8);
+      ::grpc::Service::MarkMethodRaw(9);
     }
     ~WithRawMethod_OpenAutoCompleteStream() override {
       BaseClassMustBeDerivedFromService(this);
@@ -1167,7 +1275,7 @@ class ConsoleService final {
       return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
     }
     void RequestOpenAutoCompleteStream(::grpc::ServerContext* context, ::grpc::ByteBuffer* request, ::grpc::ServerAsyncWriter< ::grpc::ByteBuffer>* writer, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
-      ::grpc::Service::RequestAsyncServerStreaming(8, context, request, writer, new_call_cq, notification_cq, tag);
+      ::grpc::Service::RequestAsyncServerStreaming(9, context, request, writer, new_call_cq, notification_cq, tag);
     }
   };
   template <class BaseClass>
@@ -1176,7 +1284,7 @@ class ConsoleService final {
     void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
    public:
     WithRawMethod_NextAutoCompleteStream() {
-      ::grpc::Service::MarkMethodRaw(9);
+      ::grpc::Service::MarkMethodRaw(10);
     }
     ~WithRawMethod_NextAutoCompleteStream() override {
       BaseClassMustBeDerivedFromService(this);
@@ -1187,7 +1295,7 @@ class ConsoleService final {
       return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
     }
     void RequestNextAutoCompleteStream(::grpc::ServerContext* context, ::grpc::ByteBuffer* request, ::grpc::ServerAsyncResponseWriter< ::grpc::ByteBuffer>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
-      ::grpc::Service::RequestAsyncUnary(9, context, request, response, new_call_cq, notification_cq, tag);
+      ::grpc::Service::RequestAsyncUnary(10, context, request, response, new_call_cq, notification_cq, tag);
     }
   };
   template <class BaseClass>
@@ -1368,12 +1476,34 @@ class ConsoleService final {
       { return nullptr; }
   };
   template <class BaseClass>
+  class WithRawCallbackMethod_CancelAutoComplete : public BaseClass {
+   private:
+    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
+   public:
+    WithRawCallbackMethod_CancelAutoComplete() {
+      ::grpc::Service::MarkMethodRawCallback(8,
+          new ::grpc::internal::CallbackUnaryHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>(
+            [this](
+                   ::grpc::CallbackServerContext* context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response) { return this->CancelAutoComplete(context, request, response); }));
+    }
+    ~WithRawCallbackMethod_CancelAutoComplete() override {
+      BaseClassMustBeDerivedFromService(this);
+    }
+    // disable synchronous version of this method
+    ::grpc::Status CancelAutoComplete(::grpc::ServerContext* /*context*/, const ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteRequest* /*request*/, ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteResponse* /*response*/) override {
+      abort();
+      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
+    }
+    virtual ::grpc::ServerUnaryReactor* CancelAutoComplete(
+      ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)  { return nullptr; }
+  };
+  template <class BaseClass>
   class WithRawCallbackMethod_OpenAutoCompleteStream : public BaseClass {
    private:
     void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
    public:
     WithRawCallbackMethod_OpenAutoCompleteStream() {
-      ::grpc::Service::MarkMethodRawCallback(8,
+      ::grpc::Service::MarkMethodRawCallback(9,
           new ::grpc::internal::CallbackServerStreamingHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>(
             [this](
                    ::grpc::CallbackServerContext* context, const::grpc::ByteBuffer* request) { return this->OpenAutoCompleteStream(context, request); }));
@@ -1395,7 +1525,7 @@ class ConsoleService final {
     void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
    public:
     WithRawCallbackMethod_NextAutoCompleteStream() {
-      ::grpc::Service::MarkMethodRawCallback(9,
+      ::grpc::Service::MarkMethodRawCallback(10,
           new ::grpc::internal::CallbackUnaryHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>(
             [this](
                    ::grpc::CallbackServerContext* context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response) { return this->NextAutoCompleteStream(context, request, response); }));
@@ -1574,12 +1704,39 @@ class ConsoleService final {
     virtual ::grpc::Status StreamedBindTableToVariable(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::io::deephaven::proto::backplane::script::grpc::BindTableToVariableRequest,::io::deephaven::proto::backplane::script::grpc::BindTableToVariableResponse>* server_unary_streamer) = 0;
   };
   template <class BaseClass>
+  class WithStreamedUnaryMethod_CancelAutoComplete : public BaseClass {
+   private:
+    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
+   public:
+    WithStreamedUnaryMethod_CancelAutoComplete() {
+      ::grpc::Service::MarkMethodStreamed(8,
+        new ::grpc::internal::StreamedUnaryHandler<
+          ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteRequest, ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteResponse>(
+            [this](::grpc::ServerContext* context,
+                   ::grpc::ServerUnaryStreamer<
+                     ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteRequest, ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteResponse>* streamer) {
+                       return this->StreamedCancelAutoComplete(context,
+                         streamer);
+                  }));
+    }
+    ~WithStreamedUnaryMethod_CancelAutoComplete() override {
+      BaseClassMustBeDerivedFromService(this);
+    }
+    // disable regular version of this method
+    ::grpc::Status CancelAutoComplete(::grpc::ServerContext* /*context*/, const ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteRequest* /*request*/, ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteResponse* /*response*/) override {
+      abort();
+      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
+    }
+    // replace default version of method with streamed unary
+    virtual ::grpc::Status StreamedCancelAutoComplete(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteRequest,::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteResponse>* server_unary_streamer) = 0;
+  };
+  template <class BaseClass>
   class WithStreamedUnaryMethod_NextAutoCompleteStream : public BaseClass {
    private:
     void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
    public:
     WithStreamedUnaryMethod_NextAutoCompleteStream() {
-      ::grpc::Service::MarkMethodStreamed(9,
+      ::grpc::Service::MarkMethodStreamed(10,
         new ::grpc::internal::StreamedUnaryHandler<
           ::io::deephaven::proto::backplane::script::grpc::AutoCompleteRequest, ::io::deephaven::proto::backplane::script::grpc::BrowserNextResponse>(
             [this](::grpc::ServerContext* context,
@@ -1600,7 +1757,7 @@ class ConsoleService final {
     // replace default version of method with streamed unary
     virtual ::grpc::Status StreamedNextAutoCompleteStream(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::io::deephaven::proto::backplane::script::grpc::AutoCompleteRequest,::io::deephaven::proto::backplane::script::grpc::BrowserNextResponse>* server_unary_streamer) = 0;
   };
-  typedef WithStreamedUnaryMethod_GetConsoleTypes<WithStreamedUnaryMethod_StartConsole<WithStreamedUnaryMethod_GetHeapInfo<WithStreamedUnaryMethod_ExecuteCommand<WithStreamedUnaryMethod_CancelCommand<WithStreamedUnaryMethod_BindTableToVariable<WithStreamedUnaryMethod_NextAutoCompleteStream<Service > > > > > > > StreamedUnaryService;
+  typedef WithStreamedUnaryMethod_GetConsoleTypes<WithStreamedUnaryMethod_StartConsole<WithStreamedUnaryMethod_GetHeapInfo<WithStreamedUnaryMethod_ExecuteCommand<WithStreamedUnaryMethod_CancelCommand<WithStreamedUnaryMethod_BindTableToVariable<WithStreamedUnaryMethod_CancelAutoComplete<WithStreamedUnaryMethod_NextAutoCompleteStream<Service > > > > > > > > StreamedUnaryService;
   template <class BaseClass>
   class WithSplitStreamingMethod_SubscribeToLogs : public BaseClass {
    private:
@@ -1634,7 +1791,7 @@ class ConsoleService final {
     void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
    public:
     WithSplitStreamingMethod_OpenAutoCompleteStream() {
-      ::grpc::Service::MarkMethodStreamed(8,
+      ::grpc::Service::MarkMethodStreamed(9,
         new ::grpc::internal::SplitServerStreamingHandler<
           ::io::deephaven::proto::backplane::script::grpc::AutoCompleteRequest, ::io::deephaven::proto::backplane::script::grpc::AutoCompleteResponse>(
             [this](::grpc::ServerContext* context,
@@ -1656,7 +1813,7 @@ class ConsoleService final {
     virtual ::grpc::Status StreamedOpenAutoCompleteStream(::grpc::ServerContext* context, ::grpc::ServerSplitStreamer< ::io::deephaven::proto::backplane::script::grpc::AutoCompleteRequest,::io::deephaven::proto::backplane::script::grpc::AutoCompleteResponse>* server_split_streamer) = 0;
   };
   typedef WithSplitStreamingMethod_SubscribeToLogs<WithSplitStreamingMethod_OpenAutoCompleteStream<Service > > SplitStreamedService;
-  typedef WithStreamedUnaryMethod_GetConsoleTypes<WithStreamedUnaryMethod_StartConsole<WithStreamedUnaryMethod_GetHeapInfo<WithSplitStreamingMethod_SubscribeToLogs<WithStreamedUnaryMethod_ExecuteCommand<WithStreamedUnaryMethod_CancelCommand<WithStreamedUnaryMethod_BindTableToVariable<WithSplitStreamingMethod_OpenAutoCompleteStream<WithStreamedUnaryMethod_NextAutoCompleteStream<Service > > > > > > > > > StreamedService;
+  typedef WithStreamedUnaryMethod_GetConsoleTypes<WithStreamedUnaryMethod_StartConsole<WithStreamedUnaryMethod_GetHeapInfo<WithSplitStreamingMethod_SubscribeToLogs<WithStreamedUnaryMethod_ExecuteCommand<WithStreamedUnaryMethod_CancelCommand<WithStreamedUnaryMethod_BindTableToVariable<WithStreamedUnaryMethod_CancelAutoComplete<WithSplitStreamingMethod_OpenAutoCompleteStream<WithStreamedUnaryMethod_NextAutoCompleteStream<Service > > > > > > > > > > StreamedService;
 };
 
 }  // namespace grpc
diff --git a/cpp-client/deephaven/client/proto/deephaven/proto/console.pb.cc b/cpp-client/deephaven/client/proto/deephaven/proto/console.pb.cc
index cc7383a6dd4..2e8e48057c2 100644
--- a/cpp-client/deephaven/client/proto/deephaven/proto/console.pb.cc
+++ b/cpp-client/deephaven/client/proto/deephaven/proto/console.pb.cc
@@ -201,9 +201,35 @@ struct CancelCommandResponseDefaultTypeInternal {
   };
 };
 PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 CancelCommandResponseDefaultTypeInternal _CancelCommandResponse_default_instance_;
+PROTOBUF_CONSTEXPR CancelAutoCompleteRequest::CancelAutoCompleteRequest(
+    ::_pbi::ConstantInitialized)
+  : console_id_(nullptr)
+  , request_id_(0){}
+struct CancelAutoCompleteRequestDefaultTypeInternal {
+  PROTOBUF_CONSTEXPR CancelAutoCompleteRequestDefaultTypeInternal()
+      : _instance(::_pbi::ConstantInitialized{}) {}
+  ~CancelAutoCompleteRequestDefaultTypeInternal() {}
+  union {
+    CancelAutoCompleteRequest _instance;
+  };
+};
+PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 CancelAutoCompleteRequestDefaultTypeInternal _CancelAutoCompleteRequest_default_instance_;
+PROTOBUF_CONSTEXPR CancelAutoCompleteResponse::CancelAutoCompleteResponse(
+    ::_pbi::ConstantInitialized){}
+struct CancelAutoCompleteResponseDefaultTypeInternal {
+  PROTOBUF_CONSTEXPR CancelAutoCompleteResponseDefaultTypeInternal()
+      : _instance(::_pbi::ConstantInitialized{}) {}
+  ~CancelAutoCompleteResponseDefaultTypeInternal() {}
+  union {
+    CancelAutoCompleteResponse _instance;
+  };
+};
+PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 CancelAutoCompleteResponseDefaultTypeInternal _CancelAutoCompleteResponse_default_instance_;
 PROTOBUF_CONSTEXPR AutoCompleteRequest::AutoCompleteRequest(
     ::_pbi::ConstantInitialized)
-  : _oneof_case_{}{}
+  : console_id_(nullptr)
+  , request_id_(0)
+  , _oneof_case_{}{}
 struct AutoCompleteRequestDefaultTypeInternal {
   PROTOBUF_CONSTEXPR AutoCompleteRequestDefaultTypeInternal()
       : _instance(::_pbi::ConstantInitialized{}) {}
@@ -215,7 +241,9 @@ struct AutoCompleteRequestDefaultTypeInternal {
 PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 AutoCompleteRequestDefaultTypeInternal _AutoCompleteRequest_default_instance_;
 PROTOBUF_CONSTEXPR AutoCompleteResponse::AutoCompleteResponse(
     ::_pbi::ConstantInitialized)
-  : _oneof_case_{}{}
+  : request_id_(0)
+  , success_(false)
+  , _oneof_case_{}{}
 struct AutoCompleteResponseDefaultTypeInternal {
   PROTOBUF_CONSTEXPR AutoCompleteResponseDefaultTypeInternal()
       : _instance(::_pbi::ConstantInitialized{}) {}
@@ -344,6 +372,19 @@ struct PositionDefaultTypeInternal {
   };
 };
 PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 PositionDefaultTypeInternal _Position_default_instance_;
+PROTOBUF_CONSTEXPR MarkupContent::MarkupContent(
+    ::_pbi::ConstantInitialized)
+  : kind_(&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{})
+  , value_(&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{}){}
+struct MarkupContentDefaultTypeInternal {
+  PROTOBUF_CONSTEXPR MarkupContentDefaultTypeInternal()
+      : _instance(::_pbi::ConstantInitialized{}) {}
+  ~MarkupContentDefaultTypeInternal() {}
+  union {
+    MarkupContent _instance;
+  };
+};
+PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 MarkupContentDefaultTypeInternal _MarkupContent_default_instance_;
 PROTOBUF_CONSTEXPR GetCompletionItemsRequest::GetCompletionItemsRequest(
     ::_pbi::ConstantInitialized)
   : console_id_(nullptr)
@@ -393,10 +434,10 @@ PROTOBUF_CONSTEXPR CompletionItem::CompletionItem(
   , commit_characters_()
   , label_(&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{})
   , detail_(&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{})
-  , documentation_(&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{})
   , sort_text_(&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{})
   , filter_text_(&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{})
   , text_edit_(nullptr)
+  , documentation_(nullptr)
   , start_(0)
   , length_(0)
   , kind_(0)
@@ -425,6 +466,178 @@ struct TextEditDefaultTypeInternal {
   };
 };
 PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 TextEditDefaultTypeInternal _TextEdit_default_instance_;
+PROTOBUF_CONSTEXPR GetSignatureHelpRequest::GetSignatureHelpRequest(
+    ::_pbi::ConstantInitialized)
+  : context_(nullptr)
+  , text_document_(nullptr)
+  , position_(nullptr){}
+struct GetSignatureHelpRequestDefaultTypeInternal {
+  PROTOBUF_CONSTEXPR GetSignatureHelpRequestDefaultTypeInternal()
+      : _instance(::_pbi::ConstantInitialized{}) {}
+  ~GetSignatureHelpRequestDefaultTypeInternal() {}
+  union {
+    GetSignatureHelpRequest _instance;
+  };
+};
+PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 GetSignatureHelpRequestDefaultTypeInternal _GetSignatureHelpRequest_default_instance_;
+PROTOBUF_CONSTEXPR SignatureHelpContext::SignatureHelpContext(
+    ::_pbi::ConstantInitialized)
+  : trigger_character_(&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{})
+  , active_signature_help_(nullptr)
+  , trigger_kind_(0)
+  , is_retrigger_(false){}
+struct SignatureHelpContextDefaultTypeInternal {
+  PROTOBUF_CONSTEXPR SignatureHelpContextDefaultTypeInternal()
+      : _instance(::_pbi::ConstantInitialized{}) {}
+  ~SignatureHelpContextDefaultTypeInternal() {}
+  union {
+    SignatureHelpContext _instance;
+  };
+};
+PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 SignatureHelpContextDefaultTypeInternal _SignatureHelpContext_default_instance_;
+PROTOBUF_CONSTEXPR GetSignatureHelpResponse::GetSignatureHelpResponse(
+    ::_pbi::ConstantInitialized)
+  : signatures_()
+  , active_signature_(0)
+  , active_parameter_(0){}
+struct GetSignatureHelpResponseDefaultTypeInternal {
+  PROTOBUF_CONSTEXPR GetSignatureHelpResponseDefaultTypeInternal()
+      : _instance(::_pbi::ConstantInitialized{}) {}
+  ~GetSignatureHelpResponseDefaultTypeInternal() {}
+  union {
+    GetSignatureHelpResponse _instance;
+  };
+};
+PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 GetSignatureHelpResponseDefaultTypeInternal _GetSignatureHelpResponse_default_instance_;
+PROTOBUF_CONSTEXPR SignatureInformation::SignatureInformation(
+    ::_pbi::ConstantInitialized)
+  : parameters_()
+  , label_(&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{})
+  , documentation_(nullptr)
+  , active_parameter_(0){}
+struct SignatureInformationDefaultTypeInternal {
+  PROTOBUF_CONSTEXPR SignatureInformationDefaultTypeInternal()
+      : _instance(::_pbi::ConstantInitialized{}) {}
+  ~SignatureInformationDefaultTypeInternal() {}
+  union {
+    SignatureInformation _instance;
+  };
+};
+PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 SignatureInformationDefaultTypeInternal _SignatureInformation_default_instance_;
+PROTOBUF_CONSTEXPR ParameterInformation::ParameterInformation(
+    ::_pbi::ConstantInitialized)
+  : label_(&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{})
+  , documentation_(nullptr){}
+struct ParameterInformationDefaultTypeInternal {
+  PROTOBUF_CONSTEXPR ParameterInformationDefaultTypeInternal()
+      : _instance(::_pbi::ConstantInitialized{}) {}
+  ~ParameterInformationDefaultTypeInternal() {}
+  union {
+    ParameterInformation _instance;
+  };
+};
+PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 ParameterInformationDefaultTypeInternal _ParameterInformation_default_instance_;
+PROTOBUF_CONSTEXPR GetHoverRequest::GetHoverRequest(
+    ::_pbi::ConstantInitialized)
+  : text_document_(nullptr)
+  , position_(nullptr){}
+struct GetHoverRequestDefaultTypeInternal {
+  PROTOBUF_CONSTEXPR GetHoverRequestDefaultTypeInternal()
+      : _instance(::_pbi::ConstantInitialized{}) {}
+  ~GetHoverRequestDefaultTypeInternal() {}
+  union {
+    GetHoverRequest _instance;
+  };
+};
+PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 GetHoverRequestDefaultTypeInternal _GetHoverRequest_default_instance_;
+PROTOBUF_CONSTEXPR GetHoverResponse::GetHoverResponse(
+    ::_pbi::ConstantInitialized)
+  : contents_(nullptr)
+  , range_(nullptr){}
+struct GetHoverResponseDefaultTypeInternal {
+  PROTOBUF_CONSTEXPR GetHoverResponseDefaultTypeInternal()
+      : _instance(::_pbi::ConstantInitialized{}) {}
+  ~GetHoverResponseDefaultTypeInternal() {}
+  union {
+    GetHoverResponse _instance;
+  };
+};
+PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 GetHoverResponseDefaultTypeInternal _GetHoverResponse_default_instance_;
+PROTOBUF_CONSTEXPR GetDiagnosticRequest::GetDiagnosticRequest(
+    ::_pbi::ConstantInitialized)
+  : identifier_(&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{})
+  , previous_result_id_(&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{})
+  , text_document_(nullptr){}
+struct GetDiagnosticRequestDefaultTypeInternal {
+  PROTOBUF_CONSTEXPR GetDiagnosticRequestDefaultTypeInternal()
+      : _instance(::_pbi::ConstantInitialized{}) {}
+  ~GetDiagnosticRequestDefaultTypeInternal() {}
+  union {
+    GetDiagnosticRequest _instance;
+  };
+};
+PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 GetDiagnosticRequestDefaultTypeInternal _GetDiagnosticRequest_default_instance_;
+PROTOBUF_CONSTEXPR GetPullDiagnosticResponse::GetPullDiagnosticResponse(
+    ::_pbi::ConstantInitialized)
+  : items_()
+  , kind_(&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{})
+  , result_id_(&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{}){}
+struct GetPullDiagnosticResponseDefaultTypeInternal {
+  PROTOBUF_CONSTEXPR GetPullDiagnosticResponseDefaultTypeInternal()
+      : _instance(::_pbi::ConstantInitialized{}) {}
+  ~GetPullDiagnosticResponseDefaultTypeInternal() {}
+  union {
+    GetPullDiagnosticResponse _instance;
+  };
+};
+PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 GetPullDiagnosticResponseDefaultTypeInternal _GetPullDiagnosticResponse_default_instance_;
+PROTOBUF_CONSTEXPR GetPublishDiagnosticResponse::GetPublishDiagnosticResponse(
+    ::_pbi::ConstantInitialized)
+  : diagnostics_()
+  , uri_(&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{})
+  , version_(0){}
+struct GetPublishDiagnosticResponseDefaultTypeInternal {
+  PROTOBUF_CONSTEXPR GetPublishDiagnosticResponseDefaultTypeInternal()
+      : _instance(::_pbi::ConstantInitialized{}) {}
+  ~GetPublishDiagnosticResponseDefaultTypeInternal() {}
+  union {
+    GetPublishDiagnosticResponse _instance;
+  };
+};
+PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 GetPublishDiagnosticResponseDefaultTypeInternal _GetPublishDiagnosticResponse_default_instance_;
+PROTOBUF_CONSTEXPR Diagnostic_CodeDescription::Diagnostic_CodeDescription(
+    ::_pbi::ConstantInitialized)
+  : href_(&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{}){}
+struct Diagnostic_CodeDescriptionDefaultTypeInternal {
+  PROTOBUF_CONSTEXPR Diagnostic_CodeDescriptionDefaultTypeInternal()
+      : _instance(::_pbi::ConstantInitialized{}) {}
+  ~Diagnostic_CodeDescriptionDefaultTypeInternal() {}
+  union {
+    Diagnostic_CodeDescription _instance;
+  };
+};
+PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 Diagnostic_CodeDescriptionDefaultTypeInternal _Diagnostic_CodeDescription_default_instance_;
+PROTOBUF_CONSTEXPR Diagnostic::Diagnostic(
+    ::_pbi::ConstantInitialized)
+  : tags_()
+  , _tags_cached_byte_size_(0)
+  , code_(&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{})
+  , source_(&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{})
+  , message_(&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{})
+  , data_(&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{})
+  , range_(nullptr)
+  , code_description_(nullptr)
+  , severity_(0)
+{}
+struct DiagnosticDefaultTypeInternal {
+  PROTOBUF_CONSTEXPR DiagnosticDefaultTypeInternal()
+      : _instance(::_pbi::ConstantInitialized{}) {}
+  ~DiagnosticDefaultTypeInternal() {}
+  union {
+    Diagnostic _instance;
+  };
+};
+PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 DiagnosticDefaultTypeInternal _Diagnostic_default_instance_;
 PROTOBUF_CONSTEXPR FigureDescriptor_ChartDescriptor::FigureDescriptor_ChartDescriptor(
     ::_pbi::ConstantInitialized)
   : series_()
@@ -712,8 +925,8 @@ PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORIT
 }  // namespace proto
 }  // namespace deephaven
 }  // namespace io
-static ::_pb::Metadata file_level_metadata_deephaven_2fproto_2fconsole_2eproto[45];
-static const ::_pb::EnumDescriptor* file_level_enum_descriptors_deephaven_2fproto_2fconsole_2eproto[7];
+static ::_pb::Metadata file_level_metadata_deephaven_2fproto_2fconsole_2eproto[60];
+static const ::_pb::EnumDescriptor* file_level_enum_descriptors_deephaven_2fproto_2fconsole_2eproto[9];
 static constexpr ::_pb::ServiceDescriptor const** file_level_service_descriptors_deephaven_2fproto_2fconsole_2eproto = nullptr;
 
 const uint32_t TableStruct_deephaven_2fproto_2fconsole_2eproto::offsets[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = {
@@ -823,11 +1036,30 @@ const uint32_t TableStruct_deephaven_2fproto_2fconsole_2eproto::offsets[] PROTOB
   ~0u,  // no _weak_field_map_
   ~0u,  // no _inlined_string_donated_
   ~0u,  // no _has_bits_
+  PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteRequest, _internal_metadata_),
+  ~0u,  // no _extensions_
+  ~0u,  // no _oneof_case_
+  ~0u,  // no _weak_field_map_
+  ~0u,  // no _inlined_string_donated_
+  PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteRequest, console_id_),
+  PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteRequest, request_id_),
+  ~0u,  // no _has_bits_
+  PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteResponse, _internal_metadata_),
+  ~0u,  // no _extensions_
+  ~0u,  // no _oneof_case_
+  ~0u,  // no _weak_field_map_
+  ~0u,  // no _inlined_string_donated_
+  ~0u,  // no _has_bits_
   PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::AutoCompleteRequest, _internal_metadata_),
   ~0u,  // no _extensions_
   PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::AutoCompleteRequest, _oneof_case_[0]),
   ~0u,  // no _weak_field_map_
   ~0u,  // no _inlined_string_donated_
+  PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::AutoCompleteRequest, console_id_),
+  PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::AutoCompleteRequest, request_id_),
+  ::_pbi::kInvalidFieldOffsetTag,
+  ::_pbi::kInvalidFieldOffsetTag,
+  ::_pbi::kInvalidFieldOffsetTag,
   ::_pbi::kInvalidFieldOffsetTag,
   ::_pbi::kInvalidFieldOffsetTag,
   ::_pbi::kInvalidFieldOffsetTag,
@@ -839,6 +1071,12 @@ const uint32_t TableStruct_deephaven_2fproto_2fconsole_2eproto::offsets[] PROTOB
   PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::AutoCompleteResponse, _oneof_case_[0]),
   ~0u,  // no _weak_field_map_
   ~0u,  // no _inlined_string_donated_
+  PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::AutoCompleteResponse, request_id_),
+  PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::AutoCompleteResponse, success_),
+  ::_pbi::kInvalidFieldOffsetTag,
+  ::_pbi::kInvalidFieldOffsetTag,
+  ::_pbi::kInvalidFieldOffsetTag,
+  ::_pbi::kInvalidFieldOffsetTag,
   ::_pbi::kInvalidFieldOffsetTag,
   PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::AutoCompleteResponse, response_),
   ~0u,  // no _has_bits_
@@ -916,6 +1154,14 @@ const uint32_t TableStruct_deephaven_2fproto_2fconsole_2eproto::offsets[] PROTOB
   PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::Position, line_),
   PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::Position, character_),
   ~0u,  // no _has_bits_
+  PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::MarkupContent, _internal_metadata_),
+  ~0u,  // no _extensions_
+  ~0u,  // no _oneof_case_
+  ~0u,  // no _weak_field_map_
+  ~0u,  // no _inlined_string_donated_
+  PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::MarkupContent, kind_),
+  PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::MarkupContent, value_),
+  ~0u,  // no _has_bits_
   PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsRequest, _internal_metadata_),
   ~0u,  // no _extensions_
   ~0u,  // no _oneof_case_
@@ -954,7 +1200,6 @@ const uint32_t TableStruct_deephaven_2fproto_2fconsole_2eproto::offsets[] PROTOB
   PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::CompletionItem, label_),
   PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::CompletionItem, kind_),
   PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::CompletionItem, detail_),
-  PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::CompletionItem, documentation_),
   PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::CompletionItem, deprecated_),
   PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::CompletionItem, preselect_),
   PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::CompletionItem, text_edit_),
@@ -963,6 +1208,7 @@ const uint32_t TableStruct_deephaven_2fproto_2fconsole_2eproto::offsets[] PROTOB
   PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::CompletionItem, insert_text_format_),
   PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::CompletionItem, additional_text_edits_),
   PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::CompletionItem, commit_characters_),
+  PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::CompletionItem, documentation_),
   ~0u,  // no _has_bits_
   PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::TextEdit, _internal_metadata_),
   ~0u,  // no _extensions_
@@ -971,6 +1217,144 @@ const uint32_t TableStruct_deephaven_2fproto_2fconsole_2eproto::offsets[] PROTOB
   ~0u,  // no _inlined_string_donated_
   PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::TextEdit, range_),
   PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::TextEdit, text_),
+  ~0u,  // no _has_bits_
+  PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpRequest, _internal_metadata_),
+  ~0u,  // no _extensions_
+  ~0u,  // no _oneof_case_
+  ~0u,  // no _weak_field_map_
+  ~0u,  // no _inlined_string_donated_
+  PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpRequest, context_),
+  PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpRequest, text_document_),
+  PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpRequest, position_),
+  PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::SignatureHelpContext, _has_bits_),
+  PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::SignatureHelpContext, _internal_metadata_),
+  ~0u,  // no _extensions_
+  ~0u,  // no _oneof_case_
+  ~0u,  // no _weak_field_map_
+  ~0u,  // no _inlined_string_donated_
+  PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::SignatureHelpContext, trigger_kind_),
+  PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::SignatureHelpContext, trigger_character_),
+  PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::SignatureHelpContext, is_retrigger_),
+  PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::SignatureHelpContext, active_signature_help_),
+  ~0u,
+  0,
+  ~0u,
+  ~0u,
+  PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpResponse, _has_bits_),
+  PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpResponse, _internal_metadata_),
+  ~0u,  // no _extensions_
+  ~0u,  // no _oneof_case_
+  ~0u,  // no _weak_field_map_
+  ~0u,  // no _inlined_string_donated_
+  PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpResponse, signatures_),
+  PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpResponse, active_signature_),
+  PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpResponse, active_parameter_),
+  ~0u,
+  0,
+  1,
+  PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::SignatureInformation, _has_bits_),
+  PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::SignatureInformation, _internal_metadata_),
+  ~0u,  // no _extensions_
+  ~0u,  // no _oneof_case_
+  ~0u,  // no _weak_field_map_
+  ~0u,  // no _inlined_string_donated_
+  PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::SignatureInformation, label_),
+  PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::SignatureInformation, documentation_),
+  PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::SignatureInformation, parameters_),
+  PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::SignatureInformation, active_parameter_),
+  ~0u,
+  ~0u,
+  ~0u,
+  0,
+  ~0u,  // no _has_bits_
+  PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::ParameterInformation, _internal_metadata_),
+  ~0u,  // no _extensions_
+  ~0u,  // no _oneof_case_
+  ~0u,  // no _weak_field_map_
+  ~0u,  // no _inlined_string_donated_
+  PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::ParameterInformation, label_),
+  PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::ParameterInformation, documentation_),
+  ~0u,  // no _has_bits_
+  PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::GetHoverRequest, _internal_metadata_),
+  ~0u,  // no _extensions_
+  ~0u,  // no _oneof_case_
+  ~0u,  // no _weak_field_map_
+  ~0u,  // no _inlined_string_donated_
+  PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::GetHoverRequest, text_document_),
+  PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::GetHoverRequest, position_),
+  ~0u,  // no _has_bits_
+  PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::GetHoverResponse, _internal_metadata_),
+  ~0u,  // no _extensions_
+  ~0u,  // no _oneof_case_
+  ~0u,  // no _weak_field_map_
+  ~0u,  // no _inlined_string_donated_
+  PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::GetHoverResponse, contents_),
+  PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::GetHoverResponse, range_),
+  PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::GetDiagnosticRequest, _has_bits_),
+  PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::GetDiagnosticRequest, _internal_metadata_),
+  ~0u,  // no _extensions_
+  ~0u,  // no _oneof_case_
+  ~0u,  // no _weak_field_map_
+  ~0u,  // no _inlined_string_donated_
+  PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::GetDiagnosticRequest, text_document_),
+  PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::GetDiagnosticRequest, identifier_),
+  PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::GetDiagnosticRequest, previous_result_id_),
+  ~0u,
+  0,
+  1,
+  PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::GetPullDiagnosticResponse, _has_bits_),
+  PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::GetPullDiagnosticResponse, _internal_metadata_),
+  ~0u,  // no _extensions_
+  ~0u,  // no _oneof_case_
+  ~0u,  // no _weak_field_map_
+  ~0u,  // no _inlined_string_donated_
+  PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::GetPullDiagnosticResponse, kind_),
+  PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::GetPullDiagnosticResponse, result_id_),
+  PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::GetPullDiagnosticResponse, items_),
+  ~0u,
+  0,
+  ~0u,
+  PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::GetPublishDiagnosticResponse, _has_bits_),
+  PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::GetPublishDiagnosticResponse, _internal_metadata_),
+  ~0u,  // no _extensions_
+  ~0u,  // no _oneof_case_
+  ~0u,  // no _weak_field_map_
+  ~0u,  // no _inlined_string_donated_
+  PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::GetPublishDiagnosticResponse, uri_),
+  PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::GetPublishDiagnosticResponse, version_),
+  PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::GetPublishDiagnosticResponse, diagnostics_),
+  ~0u,
+  0,
+  ~0u,
+  ~0u,  // no _has_bits_
+  PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::Diagnostic_CodeDescription, _internal_metadata_),
+  ~0u,  // no _extensions_
+  ~0u,  // no _oneof_case_
+  ~0u,  // no _weak_field_map_
+  ~0u,  // no _inlined_string_donated_
+  PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::Diagnostic_CodeDescription, href_),
+  PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::Diagnostic, _has_bits_),
+  PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::Diagnostic, _internal_metadata_),
+  ~0u,  // no _extensions_
+  ~0u,  // no _oneof_case_
+  ~0u,  // no _weak_field_map_
+  ~0u,  // no _inlined_string_donated_
+  PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::Diagnostic, range_),
+  PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::Diagnostic, severity_),
+  PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::Diagnostic, code_),
+  PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::Diagnostic, code_description_),
+  PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::Diagnostic, source_),
+  PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::Diagnostic, message_),
+  PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::Diagnostic, tags_),
+  PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::Diagnostic, data_),
+  ~0u,
+  ~0u,
+  0,
+  3,
+  1,
+  ~0u,
+  ~0u,
+  2,
   PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_ChartDescriptor, _has_bits_),
   PROTOBUF_FIELD_OFFSET(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_ChartDescriptor, _internal_metadata_),
   ~0u,  // no _extensions_
@@ -1251,37 +1635,52 @@ static const ::_pbi::MigrationSchema schemas[] PROTOBUF_SECTION_VARIABLE(protode
   { 85, -1, -1, sizeof(::io::deephaven::proto::backplane::script::grpc::BindTableToVariableResponse)},
   { 91, -1, -1, sizeof(::io::deephaven::proto::backplane::script::grpc::CancelCommandRequest)},
   { 99, -1, -1, sizeof(::io::deephaven::proto::backplane::script::grpc::CancelCommandResponse)},
-  { 105, -1, -1, sizeof(::io::deephaven::proto::backplane::script::grpc::AutoCompleteRequest)},
-  { 116, -1, -1, sizeof(::io::deephaven::proto::backplane::script::grpc::AutoCompleteResponse)},
-  { 124, -1, -1, sizeof(::io::deephaven::proto::backplane::script::grpc::BrowserNextResponse)},
-  { 130, -1, -1, sizeof(::io::deephaven::proto::backplane::script::grpc::OpenDocumentRequest)},
-  { 138, -1, -1, sizeof(::io::deephaven::proto::backplane::script::grpc::TextDocumentItem)},
-  { 148, -1, -1, sizeof(::io::deephaven::proto::backplane::script::grpc::CloseDocumentRequest)},
-  { 156, -1, -1, sizeof(::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest_TextDocumentContentChangeEvent)},
-  { 165, -1, -1, sizeof(::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest)},
-  { 174, -1, -1, sizeof(::io::deephaven::proto::backplane::script::grpc::DocumentRange)},
-  { 182, -1, -1, sizeof(::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier)},
-  { 190, -1, -1, sizeof(::io::deephaven::proto::backplane::script::grpc::Position)},
-  { 198, -1, -1, sizeof(::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsRequest)},
-  { 209, -1, -1, sizeof(::io::deephaven::proto::backplane::script::grpc::CompletionContext)},
-  { 217, -1, -1, sizeof(::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsResponse)},
-  { 226, -1, -1, sizeof(::io::deephaven::proto::backplane::script::grpc::CompletionItem)},
-  { 246, -1, -1, sizeof(::io::deephaven::proto::backplane::script::grpc::TextEdit)},
-  { 254, 275, -1, sizeof(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_ChartDescriptor)},
-  { 290, 310, -1, sizeof(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_SeriesDescriptor)},
-  { 324, -1, -1, sizeof(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_MultiSeriesDescriptor)},
-  { 344, 353, -1, sizeof(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault)},
-  { 356, 365, -1, sizeof(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_DoubleMapWithDefault)},
-  { 368, 377, -1, sizeof(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BoolMapWithDefault)},
-  { 380, 407, -1, sizeof(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_AxisDescriptor)},
-  { 428, -1, -1, sizeof(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod)},
-  { 436, -1, -1, sizeof(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor_Holiday)},
-  { 444, -1, -1, sizeof(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor_LocalDate)},
-  { 453, -1, -1, sizeof(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor)},
-  { 464, -1, -1, sizeof(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_MultiSeriesSourceDescriptor)},
-  { 474, -1, -1, sizeof(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_SourceDescriptor)},
-  { 487, -1, -1, sizeof(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_OneClickDescriptor)},
-  { 496, 510, -1, sizeof(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor)},
+  { 105, -1, -1, sizeof(::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteRequest)},
+  { 113, -1, -1, sizeof(::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteResponse)},
+  { 119, -1, -1, sizeof(::io::deephaven::proto::backplane::script::grpc::AutoCompleteRequest)},
+  { 135, -1, -1, sizeof(::io::deephaven::proto::backplane::script::grpc::AutoCompleteResponse)},
+  { 149, -1, -1, sizeof(::io::deephaven::proto::backplane::script::grpc::BrowserNextResponse)},
+  { 155, -1, -1, sizeof(::io::deephaven::proto::backplane::script::grpc::OpenDocumentRequest)},
+  { 163, -1, -1, sizeof(::io::deephaven::proto::backplane::script::grpc::TextDocumentItem)},
+  { 173, -1, -1, sizeof(::io::deephaven::proto::backplane::script::grpc::CloseDocumentRequest)},
+  { 181, -1, -1, sizeof(::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest_TextDocumentContentChangeEvent)},
+  { 190, -1, -1, sizeof(::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest)},
+  { 199, -1, -1, sizeof(::io::deephaven::proto::backplane::script::grpc::DocumentRange)},
+  { 207, -1, -1, sizeof(::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier)},
+  { 215, -1, -1, sizeof(::io::deephaven::proto::backplane::script::grpc::Position)},
+  { 223, -1, -1, sizeof(::io::deephaven::proto::backplane::script::grpc::MarkupContent)},
+  { 231, -1, -1, sizeof(::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsRequest)},
+  { 242, -1, -1, sizeof(::io::deephaven::proto::backplane::script::grpc::CompletionContext)},
+  { 250, -1, -1, sizeof(::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsResponse)},
+  { 259, -1, -1, sizeof(::io::deephaven::proto::backplane::script::grpc::CompletionItem)},
+  { 279, -1, -1, sizeof(::io::deephaven::proto::backplane::script::grpc::TextEdit)},
+  { 287, -1, -1, sizeof(::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpRequest)},
+  { 296, 306, -1, sizeof(::io::deephaven::proto::backplane::script::grpc::SignatureHelpContext)},
+  { 310, 319, -1, sizeof(::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpResponse)},
+  { 322, 332, -1, sizeof(::io::deephaven::proto::backplane::script::grpc::SignatureInformation)},
+  { 336, -1, -1, sizeof(::io::deephaven::proto::backplane::script::grpc::ParameterInformation)},
+  { 344, -1, -1, sizeof(::io::deephaven::proto::backplane::script::grpc::GetHoverRequest)},
+  { 352, -1, -1, sizeof(::io::deephaven::proto::backplane::script::grpc::GetHoverResponse)},
+  { 360, 369, -1, sizeof(::io::deephaven::proto::backplane::script::grpc::GetDiagnosticRequest)},
+  { 372, 381, -1, sizeof(::io::deephaven::proto::backplane::script::grpc::GetPullDiagnosticResponse)},
+  { 384, 393, -1, sizeof(::io::deephaven::proto::backplane::script::grpc::GetPublishDiagnosticResponse)},
+  { 396, -1, -1, sizeof(::io::deephaven::proto::backplane::script::grpc::Diagnostic_CodeDescription)},
+  { 403, 417, -1, sizeof(::io::deephaven::proto::backplane::script::grpc::Diagnostic)},
+  { 425, 446, -1, sizeof(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_ChartDescriptor)},
+  { 461, 481, -1, sizeof(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_SeriesDescriptor)},
+  { 495, -1, -1, sizeof(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_MultiSeriesDescriptor)},
+  { 515, 524, -1, sizeof(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault)},
+  { 527, 536, -1, sizeof(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_DoubleMapWithDefault)},
+  { 539, 548, -1, sizeof(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BoolMapWithDefault)},
+  { 551, 578, -1, sizeof(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_AxisDescriptor)},
+  { 599, -1, -1, sizeof(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod)},
+  { 607, -1, -1, sizeof(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor_Holiday)},
+  { 615, -1, -1, sizeof(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor_LocalDate)},
+  { 624, -1, -1, sizeof(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor)},
+  { 635, -1, -1, sizeof(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_MultiSeriesSourceDescriptor)},
+  { 645, -1, -1, sizeof(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_SourceDescriptor)},
+  { 658, -1, -1, sizeof(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_OneClickDescriptor)},
+  { 667, 681, -1, sizeof(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor)},
 };
 
 static const ::_pb::Message* const file_default_instances[] = {
@@ -1299,6 +1698,8 @@ static const ::_pb::Message* const file_default_instances[] = {
   &::io::deephaven::proto::backplane::script::grpc::_BindTableToVariableResponse_default_instance_._instance,
   &::io::deephaven::proto::backplane::script::grpc::_CancelCommandRequest_default_instance_._instance,
   &::io::deephaven::proto::backplane::script::grpc::_CancelCommandResponse_default_instance_._instance,
+  &::io::deephaven::proto::backplane::script::grpc::_CancelAutoCompleteRequest_default_instance_._instance,
+  &::io::deephaven::proto::backplane::script::grpc::_CancelAutoCompleteResponse_default_instance_._instance,
   &::io::deephaven::proto::backplane::script::grpc::_AutoCompleteRequest_default_instance_._instance,
   &::io::deephaven::proto::backplane::script::grpc::_AutoCompleteResponse_default_instance_._instance,
   &::io::deephaven::proto::backplane::script::grpc::_BrowserNextResponse_default_instance_._instance,
@@ -1310,11 +1711,24 @@ static const ::_pb::Message* const file_default_instances[] = {
   &::io::deephaven::proto::backplane::script::grpc::_DocumentRange_default_instance_._instance,
   &::io::deephaven::proto::backplane::script::grpc::_VersionedTextDocumentIdentifier_default_instance_._instance,
   &::io::deephaven::proto::backplane::script::grpc::_Position_default_instance_._instance,
+  &::io::deephaven::proto::backplane::script::grpc::_MarkupContent_default_instance_._instance,
   &::io::deephaven::proto::backplane::script::grpc::_GetCompletionItemsRequest_default_instance_._instance,
   &::io::deephaven::proto::backplane::script::grpc::_CompletionContext_default_instance_._instance,
   &::io::deephaven::proto::backplane::script::grpc::_GetCompletionItemsResponse_default_instance_._instance,
   &::io::deephaven::proto::backplane::script::grpc::_CompletionItem_default_instance_._instance,
   &::io::deephaven::proto::backplane::script::grpc::_TextEdit_default_instance_._instance,
+  &::io::deephaven::proto::backplane::script::grpc::_GetSignatureHelpRequest_default_instance_._instance,
+  &::io::deephaven::proto::backplane::script::grpc::_SignatureHelpContext_default_instance_._instance,
+  &::io::deephaven::proto::backplane::script::grpc::_GetSignatureHelpResponse_default_instance_._instance,
+  &::io::deephaven::proto::backplane::script::grpc::_SignatureInformation_default_instance_._instance,
+  &::io::deephaven::proto::backplane::script::grpc::_ParameterInformation_default_instance_._instance,
+  &::io::deephaven::proto::backplane::script::grpc::_GetHoverRequest_default_instance_._instance,
+  &::io::deephaven::proto::backplane::script::grpc::_GetHoverResponse_default_instance_._instance,
+  &::io::deephaven::proto::backplane::script::grpc::_GetDiagnosticRequest_default_instance_._instance,
+  &::io::deephaven::proto::backplane::script::grpc::_GetPullDiagnosticResponse_default_instance_._instance,
+  &::io::deephaven::proto::backplane::script::grpc::_GetPublishDiagnosticResponse_default_instance_._instance,
+  &::io::deephaven::proto::backplane::script::grpc::_Diagnostic_CodeDescription_default_instance_._instance,
+  &::io::deephaven::proto::backplane::script::grpc::_Diagnostic_default_instance_._instance,
   &::io::deephaven::proto::backplane::script::grpc::_FigureDescriptor_ChartDescriptor_default_instance_._instance,
   &::io::deephaven::proto::backplane::script::grpc::_FigureDescriptor_SeriesDescriptor_default_instance_._instance,
   &::io::deephaven::proto::backplane::script::grpc::_FigureDescriptor_MultiSeriesDescriptor_default_instance_._instance,
@@ -1365,77 +1779,169 @@ const char descriptor_table_protodef_deephaven_2fproto_2fconsole_2eproto[] PROTO
   "\022=\n\nconsole_id\030\001 \001(\0132).io.deephaven.prot"
   "o.backplane.grpc.Ticket\022=\n\ncommand_id\030\002 "
   "\001(\0132).io.deephaven.proto.backplane.grpc."
-  "Ticket\"\027\n\025CancelCommandResponse\"\223\003\n\023Auto"
-  "CompleteRequest\022V\n\ropen_document\030\001 \001(\0132="
+  "Ticket\"\027\n\025CancelCommandResponse\"n\n\031Cance"
+  "lAutoCompleteRequest\022=\n\nconsole_id\030\001 \001(\013"
+  "2).io.deephaven.proto.backplane.grpc.Tic"
+  "ket\022\022\n\nrequest_id\030\002 \001(\005\"\034\n\032CancelAutoCom"
+  "pleteResponse\"\361\005\n\023AutoCompleteRequest\022=\n"
+  "\nconsole_id\030\005 \001(\0132).io.deephaven.proto.b"
+  "ackplane.grpc.Ticket\022\022\n\nrequest_id\030\006 \001(\005"
+  "\022V\n\ropen_document\030\001 \001(\0132=.io.deephaven.p"
+  "roto.backplane.script.grpc.OpenDocumentR"
+  "equestH\000\022Z\n\017change_document\030\002 \001(\0132\?.io.d"
+  "eephaven.proto.backplane.script.grpc.Cha"
+  "ngeDocumentRequestH\000\022c\n\024get_completion_i"
+  "tems\030\003 \001(\0132C.io.deephaven.proto.backplan"
+  "e.script.grpc.GetCompletionItemsRequestH"
+  "\000\022_\n\022get_signature_help\030\007 \001(\0132A.io.deeph"
+  "aven.proto.backplane.script.grpc.GetSign"
+  "atureHelpRequestH\000\022N\n\tget_hover\030\010 \001(\01329."
+  "io.deephaven.proto.backplane.script.grpc"
+  ".GetHoverRequestH\000\022X\n\016get_diagnostic\030\t \001"
+  "(\0132>.io.deephaven.proto.backplane.script"
+  ".grpc.GetDiagnosticRequestH\000\022X\n\016close_do"
+  "cument\030\004 \001(\0132>.io.deephaven.proto.backpl"
+  "ane.script.grpc.CloseDocumentRequestH\000B\t"
+  "\n\007request\"\221\004\n\024AutoCompleteResponse\022\022\n\nre"
+  "quest_id\030\002 \001(\005\022\017\n\007success\030\003 \001(\010\022`\n\020compl"
+  "etion_items\030\001 \001(\0132D.io.deephaven.proto.b"
+  "ackplane.script.grpc.GetCompletionItemsR"
+  "esponseH\000\022X\n\nsignatures\030\004 \001(\0132B.io.deeph"
+  "aven.proto.backplane.script.grpc.GetSign"
+  "atureHelpResponseH\000\022K\n\005hover\030\005 \001(\0132:.io."
+  "deephaven.proto.backplane.script.grpc.Ge"
+  "tHoverResponseH\000\022Y\n\ndiagnostic\030\006 \001(\0132C.i"
+  "o.deephaven.proto.backplane.script.grpc."
+  "GetPullDiagnosticResponseH\000\022d\n\022diagnosti"
+  "c_publish\030\007 \001(\0132F.io.deephaven.proto.bac"
+  "kplane.script.grpc.GetPublishDiagnosticR"
+  "esponseH\000B\n\n\010response\"\025\n\023BrowserNextResp"
+  "onse\"\253\001\n\023OpenDocumentRequest\022A\n\nconsole_"
+  "id\030\001 \001(\0132).io.deephaven.proto.backplane."
+  "grpc.TicketB\002\030\001\022Q\n\rtext_document\030\002 \001(\0132:"
   ".io.deephaven.proto.backplane.script.grp"
-  "c.OpenDocumentRequestH\000\022Z\n\017change_docume"
-  "nt\030\002 \001(\0132\?.io.deephaven.proto.backplane."
-  "script.grpc.ChangeDocumentRequestH\000\022c\n\024g"
-  "et_completion_items\030\003 \001(\0132C.io.deephaven"
-  ".proto.backplane.script.grpc.GetCompleti"
-  "onItemsRequestH\000\022X\n\016close_document\030\004 \001(\013"
-  "2>.io.deephaven.proto.backplane.script.g"
-  "rpc.CloseDocumentRequestH\000B\t\n\007request\"\204\001"
-  "\n\024AutoCompleteResponse\022`\n\020completion_ite"
-  "ms\030\001 \001(\0132D.io.deephaven.proto.backplane."
-  "script.grpc.GetCompletionItemsResponseH\000"
-  "B\n\n\010response\"\025\n\023BrowserNextResponse\"\247\001\n\023"
-  "OpenDocumentRequest\022=\n\nconsole_id\030\001 \001(\0132"
-  ").io.deephaven.proto.backplane.grpc.Tick"
-  "et\022Q\n\rtext_document\030\002 \001(\0132:.io.deephaven"
-  ".proto.backplane.script.grpc.TextDocumen"
-  "tItem\"S\n\020TextDocumentItem\022\013\n\003uri\030\001 \001(\t\022\023"
-  "\n\013language_id\030\002 \001(\t\022\017\n\007version\030\003 \001(\005\022\014\n\004"
-  "text\030\004 \001(\t\"\267\001\n\024CloseDocumentRequest\022=\n\nc"
-  "onsole_id\030\001 \001(\0132).io.deephaven.proto.bac"
-  "kplane.grpc.Ticket\022`\n\rtext_document\030\002 \001("
-  "\0132I.io.deephaven.proto.backplane.script."
-  "grpc.VersionedTextDocumentIdentifier\"\300\003\n"
-  "\025ChangeDocumentRequest\022=\n\nconsole_id\030\001 \001"
-  "(\0132).io.deephaven.proto.backplane.grpc.T"
-  "icket\022`\n\rtext_document\030\002 \001(\0132I.io.deepha"
-  "ven.proto.backplane.script.grpc.Versione"
-  "dTextDocumentIdentifier\022w\n\017content_chang"
-  "es\030\003 \003(\0132^.io.deephaven.proto.backplane."
-  "script.grpc.ChangeDocumentRequest.TextDo"
-  "cumentContentChangeEvent\032\214\001\n\036TextDocumen"
-  "tContentChangeEvent\022F\n\005range\030\001 \001(\01327.io."
-  "deephaven.proto.backplane.script.grpc.Do"
-  "cumentRange\022\024\n\014range_length\030\002 \001(\005\022\014\n\004tex"
-  "t\030\003 \001(\t\"\223\001\n\rDocumentRange\022A\n\005start\030\001 \001(\013"
-  "22.io.deephaven.proto.backplane.script.g"
-  "rpc.Position\022\?\n\003end\030\002 \001(\01322.io.deephaven"
-  ".proto.backplane.script.grpc.Position\"\?\n"
-  "\037VersionedTextDocumentIdentifier\022\013\n\003uri\030"
-  "\001 \001(\t\022\017\n\007version\030\002 \001(\005\"+\n\010Position\022\014\n\004li"
-  "ne\030\001 \001(\005\022\021\n\tcharacter\030\002 \001(\005\"\344\002\n\031GetCompl"
-  "etionItemsRequest\022=\n\nconsole_id\030\001 \001(\0132)."
-  "io.deephaven.proto.backplane.grpc.Ticket"
-  "\022L\n\007context\030\002 \001(\0132;.io.deephaven.proto.b"
-  "ackplane.script.grpc.CompletionContext\022`"
-  "\n\rtext_document\030\003 \001(\0132I.io.deephaven.pro"
+  "c.TextDocumentItem\"S\n\020TextDocumentItem\022\013"
+  "\n\003uri\030\001 \001(\t\022\023\n\013language_id\030\002 \001(\t\022\017\n\007vers"
+  "ion\030\003 \001(\005\022\014\n\004text\030\004 \001(\t\"\273\001\n\024CloseDocumen"
+  "tRequest\022A\n\nconsole_id\030\001 \001(\0132).io.deepha"
+  "ven.proto.backplane.grpc.TicketB\002\030\001\022`\n\rt"
+  "ext_document\030\002 \001(\0132I.io.deephaven.proto."
+  "backplane.script.grpc.VersionedTextDocum"
+  "entIdentifier\"\304\003\n\025ChangeDocumentRequest\022"
+  "A\n\nconsole_id\030\001 \001(\0132).io.deephaven.proto"
+  ".backplane.grpc.TicketB\002\030\001\022`\n\rtext_docum"
+  "ent\030\002 \001(\0132I.io.deephaven.proto.backplane"
+  ".script.grpc.VersionedTextDocumentIdenti"
+  "fier\022w\n\017content_changes\030\003 \003(\0132^.io.deeph"
+  "aven.proto.backplane.script.grpc.ChangeD"
+  "ocumentRequest.TextDocumentContentChange"
+  "Event\032\214\001\n\036TextDocumentContentChangeEvent"
+  "\022F\n\005range\030\001 \001(\01327.io.deephaven.proto.bac"
+  "kplane.script.grpc.DocumentRange\022\024\n\014rang"
+  "e_length\030\002 \001(\005\022\014\n\004text\030\003 \001(\t\"\223\001\n\rDocumen"
+  "tRange\022A\n\005start\030\001 \001(\01322.io.deephaven.pro"
+  "to.backplane.script.grpc.Position\022\?\n\003end"
+  "\030\002 \001(\01322.io.deephaven.proto.backplane.sc"
+  "ript.grpc.Position\"\?\n\037VersionedTextDocum"
+  "entIdentifier\022\013\n\003uri\030\001 \001(\t\022\017\n\007version\030\002 "
+  "\001(\005\"+\n\010Position\022\014\n\004line\030\001 \001(\005\022\021\n\tcharact"
+  "er\030\002 \001(\005\",\n\rMarkupContent\022\014\n\004kind\030\001 \001(\t\022"
+  "\r\n\005value\030\002 \001(\t\"\354\002\n\031GetCompletionItemsReq"
+  "uest\022A\n\nconsole_id\030\001 \001(\0132).io.deephaven."
+  "proto.backplane.grpc.TicketB\002\030\001\022L\n\007conte"
+  "xt\030\002 \001(\0132;.io.deephaven.proto.backplane."
+  "script.grpc.CompletionContext\022`\n\rtext_do"
+  "cument\030\003 \001(\0132I.io.deephaven.proto.backpl"
+  "ane.script.grpc.VersionedTextDocumentIde"
+  "ntifier\022D\n\010position\030\004 \001(\01322.io.deephaven"
+  ".proto.backplane.script.grpc.Position\022\026\n"
+  "\nrequest_id\030\005 \001(\005B\002\030\001\"D\n\021CompletionConte"
+  "xt\022\024\n\014trigger_kind\030\001 \001(\005\022\031\n\021trigger_char"
+  "acter\030\002 \001(\t\"\222\001\n\032GetCompletionItemsRespon"
+  "se\022G\n\005items\030\001 \003(\01328.io.deephaven.proto.b"
+  "ackplane.script.grpc.CompletionItem\022\026\n\nr"
+  "equest_id\030\002 \001(\005B\002\030\001\022\023\n\007success\030\003 \001(\010B\002\030\001"
+  "\"\322\003\n\016CompletionItem\022\r\n\005start\030\001 \001(\005\022\016\n\006le"
+  "ngth\030\002 \001(\005\022\r\n\005label\030\003 \001(\t\022\014\n\004kind\030\004 \001(\005\022"
+  "\016\n\006detail\030\005 \001(\t\022\022\n\ndeprecated\030\007 \001(\010\022\021\n\tp"
+  "reselect\030\010 \001(\010\022E\n\ttext_edit\030\t \001(\01322.io.d"
+  "eephaven.proto.backplane.script.grpc.Tex"
+  "tEdit\022\021\n\tsort_text\030\n \001(\t\022\023\n\013filter_text\030"
+  "\013 \001(\t\022\032\n\022insert_text_format\030\014 \001(\005\022Q\n\025add"
+  "itional_text_edits\030\r \003(\01322.io.deephaven."
+  "proto.backplane.script.grpc.TextEdit\022\031\n\021"
+  "commit_characters\030\016 \003(\t\022N\n\rdocumentation"
+  "\030\017 \001(\01327.io.deephaven.proto.backplane.sc"
+  "ript.grpc.MarkupContentJ\004\010\006\020\007\"`\n\010TextEdi"
+  "t\022F\n\005range\030\001 \001(\01327.io.deephaven.proto.ba"
+  "ckplane.script.grpc.DocumentRange\022\014\n\004tex"
+  "t\030\002 \001(\t\"\222\002\n\027GetSignatureHelpRequest\022O\n\007c"
+  "ontext\030\001 \001(\0132>.io.deephaven.proto.backpl"
+  "ane.script.grpc.SignatureHelpContext\022`\n\r"
+  "text_document\030\002 \001(\0132I.io.deephaven.proto"
+  ".backplane.script.grpc.VersionedTextDocu"
+  "mentIdentifier\022D\n\010position\030\003 \001(\01322.io.de"
+  "ephaven.proto.backplane.script.grpc.Posi"
+  "tion\"\333\001\n\024SignatureHelpContext\022\024\n\014trigger"
+  "_kind\030\001 \001(\005\022\036\n\021trigger_character\030\002 \001(\tH\000"
+  "\210\001\001\022\024\n\014is_retrigger\030\003 \001(\010\022a\n\025active_sign"
+  "ature_help\030\004 \001(\0132B.io.deephaven.proto.ba"
+  "ckplane.script.grpc.GetSignatureHelpResp"
+  "onseB\024\n\022_trigger_character\"\326\001\n\030GetSignat"
+  "ureHelpResponse\022R\n\nsignatures\030\001 \003(\0132>.io"
+  ".deephaven.proto.backplane.script.grpc.S"
+  "ignatureInformation\022\035\n\020active_signature\030"
+  "\002 \001(\005H\000\210\001\001\022\035\n\020active_parameter\030\003 \001(\005H\001\210\001"
+  "\001B\023\n\021_active_signatureB\023\n\021_active_parame"
+  "ter\"\375\001\n\024SignatureInformation\022\r\n\005label\030\001 "
+  "\001(\t\022N\n\rdocumentation\030\002 \001(\01327.io.deephave"
+  "n.proto.backplane.script.grpc.MarkupCont"
+  "ent\022R\n\nparameters\030\003 \003(\0132>.io.deephaven.p"
+  "roto.backplane.script.grpc.ParameterInfo"
+  "rmation\022\035\n\020active_parameter\030\004 \001(\005H\000\210\001\001B\023"
+  "\n\021_active_parameter\"u\n\024ParameterInformat"
+  "ion\022\r\n\005label\030\001 \001(\t\022N\n\rdocumentation\030\002 \001("
+  "\01327.io.deephaven.proto.backplane.script."
+  "grpc.MarkupContent\"\271\001\n\017GetHoverRequest\022`"
+  "\n\rtext_document\030\001 \001(\0132I.io.deephaven.pro"
   "to.backplane.script.grpc.VersionedTextDo"
-  "cumentIdentifier\022D\n\010position\030\004 \001(\01322.io."
+  "cumentIdentifier\022D\n\010position\030\002 \001(\01322.io."
   "deephaven.proto.backplane.script.grpc.Po"
-  "sition\022\022\n\nrequest_id\030\005 \001(\005\"D\n\021Completion"
-  "Context\022\024\n\014trigger_kind\030\001 \001(\005\022\031\n\021trigger"
-  "_character\030\002 \001(\t\"\212\001\n\032GetCompletionItemsR"
-  "esponse\022G\n\005items\030\001 \003(\01328.io.deephaven.pr"
-  "oto.backplane.script.grpc.CompletionItem"
-  "\022\022\n\nrequest_id\030\002 \001(\005\022\017\n\007success\030\003 \001(\010\"\223\003"
-  "\n\016CompletionItem\022\r\n\005start\030\001 \001(\005\022\016\n\006lengt"
-  "h\030\002 \001(\005\022\r\n\005label\030\003 \001(\t\022\014\n\004kind\030\004 \001(\005\022\016\n\006"
-  "detail\030\005 \001(\t\022\025\n\rdocumentation\030\006 \001(\t\022\022\n\nd"
-  "eprecated\030\007 \001(\010\022\021\n\tpreselect\030\010 \001(\010\022E\n\tte"
-  "xt_edit\030\t \001(\01322.io.deephaven.proto.backp"
-  "lane.script.grpc.TextEdit\022\021\n\tsort_text\030\n"
-  " \001(\t\022\023\n\013filter_text\030\013 \001(\t\022\032\n\022insert_text"
-  "_format\030\014 \001(\005\022Q\n\025additional_text_edits\030\r"
-  " \003(\01322.io.deephaven.proto.backplane.scri"
-  "pt.grpc.TextEdit\022\031\n\021commit_characters\030\016 "
-  "\003(\t\"`\n\010TextEdit\022F\n\005range\030\001 \001(\01327.io.deep"
-  "haven.proto.backplane.script.grpc.Docume"
-  "ntRange\022\014\n\004text\030\002 \001(\t\"\3460\n\020FigureDescript"
+  "sition\"\245\001\n\020GetHoverResponse\022I\n\010contents\030"
+  "\001 \001(\01327.io.deephaven.proto.backplane.scr"
+  "ipt.grpc.MarkupContent\022F\n\005range\030\002 \001(\01327."
+  "io.deephaven.proto.backplane.script.grpc"
+  ".DocumentRange\"\330\001\n\024GetDiagnosticRequest\022"
+  "`\n\rtext_document\030\001 \001(\0132I.io.deephaven.pr"
+  "oto.backplane.script.grpc.VersionedTextD"
+  "ocumentIdentifier\022\027\n\nidentifier\030\002 \001(\tH\000\210"
+  "\001\001\022\037\n\022previous_result_id\030\003 \001(\tH\001\210\001\001B\r\n\013_"
+  "identifierB\025\n\023_previous_result_id\"\224\001\n\031Ge"
+  "tPullDiagnosticResponse\022\014\n\004kind\030\001 \001(\t\022\026\n"
+  "\tresult_id\030\002 \001(\tH\000\210\001\001\022C\n\005items\030\003 \003(\01324.i"
+  "o.deephaven.proto.backplane.script.grpc."
+  "DiagnosticB\014\n\n_result_id\"\230\001\n\034GetPublishD"
+  "iagnosticResponse\022\013\n\003uri\030\001 \001(\t\022\024\n\007versio"
+  "n\030\002 \001(\005H\000\210\001\001\022I\n\013diagnostics\030\003 \003(\01324.io.d"
+  "eephaven.proto.backplane.script.grpc.Dia"
+  "gnosticB\n\n\010_version\"\247\005\n\nDiagnostic\022F\n\005ra"
+  "nge\030\001 \001(\01327.io.deephaven.proto.backplane"
+  ".script.grpc.DocumentRange\022Y\n\010severity\030\002"
+  " \001(\0162G.io.deephaven.proto.backplane.scri"
+  "pt.grpc.Diagnostic.DiagnosticSeverity\022\021\n"
+  "\004code\030\003 \001(\tH\000\210\001\001\022c\n\020code_description\030\004 \001"
+  "(\0132D.io.deephaven.proto.backplane.script"
+  ".grpc.Diagnostic.CodeDescriptionH\001\210\001\001\022\023\n"
+  "\006source\030\005 \001(\tH\002\210\001\001\022\017\n\007message\030\006 \001(\t\022P\n\004t"
+  "ags\030\007 \003(\0162B.io.deephaven.proto.backplane"
+  ".script.grpc.Diagnostic.DiagnosticTag\022\021\n"
+  "\004data\030\t \001(\014H\003\210\001\001\032\037\n\017CodeDescription\022\014\n\004h"
+  "ref\030\001 \001(\t\"]\n\022DiagnosticSeverity\022\024\n\020NOT_S"
+  "ET_SEVERITY\020\000\022\t\n\005ERROR\020\001\022\013\n\007WARNING\020\002\022\017\n"
+  "\013INFORMATION\020\003\022\010\n\004HINT\020\004\"A\n\rDiagnosticTa"
+  "g\022\017\n\013NOT_SET_TAG\020\000\022\017\n\013UNNECESSARY\020\001\022\016\n\nD"
+  "EPRECATED\020\002B\007\n\005_codeB\023\n\021_code_descriptio"
+  "nB\t\n\007_sourceB\007\n\005_data\"\3460\n\020FigureDescript"
   "or\022\022\n\005title\030\001 \001(\tH\000\210\001\001\022\022\n\ntitle_font\030\002 \001"
   "(\t\022\023\n\013title_color\030\003 \001(\t\022\033\n\017update_interv"
   "al\030\007 \001(\003B\0020\001\022\014\n\004cols\030\010 \001(\005\022\014\n\004rows\030\t \001(\005"
@@ -1591,7 +2097,7 @@ const char descriptor_table_protodef_deephaven_2fproto_2fconsole_2eproto[] PROTO
   "\004TIME\020\007\022\010\n\004OPEN\020\010\022\010\n\004HIGH\020\t\022\007\n\003LOW\020\n\022\t\n\005"
   "CLOSE\020\013\022\t\n\005SHAPE\020\014\022\010\n\004SIZE\020\r\022\t\n\005LABEL\020\016\022"
   "\t\n\005COLOR\020\017\022\n\n\006PARENT\020\020\022\016\n\nHOVER_TEXT\020\021\022\010"
-  "\n\004TEXT\020\022B\010\n\006_titleJ\004\010\013\020\014J\004\010\014\020\r2\216\014\n\016Conso"
+  "\n\004TEXT\020\022B\010\n\006_titleJ\004\010\013\020\014J\004\010\014\020\r2\262\r\n\016Conso"
   "leService\022\230\001\n\017GetConsoleTypes\022@.io.deeph"
   "aven.proto.backplane.script.grpc.GetCons"
   "oleTypesRequest\032A.io.deephaven.proto.bac"
@@ -1622,17 +2128,21 @@ const char descriptor_table_protodef_deephaven_2fproto_2fconsole_2eproto[] PROTO
   "utoCompleteStream\022=.io.deephaven.proto.b"
   "ackplane.script.grpc.AutoCompleteRequest"
   "\032>.io.deephaven.proto.backplane.script.g"
-  "rpc.AutoCompleteResponse\"\000(\0010\001\022\233\001\n\026OpenA"
-  "utoCompleteStream\022=.io.deephaven.proto.b"
-  "ackplane.script.grpc.AutoCompleteRequest"
-  "\032>.io.deephaven.proto.backplane.script.g"
-  "rpc.AutoCompleteResponse\"\0000\001\022\230\001\n\026NextAut"
-  "oCompleteStream\022=.io.deephaven.proto.bac"
-  "kplane.script.grpc.AutoCompleteRequest\032="
-  ".io.deephaven.proto.backplane.script.grp"
-  "c.BrowserNextResponse\"\000BCH\001P\001Z=github.co"
-  "m/deephaven/deephaven-core/go/internal/p"
-  "roto/consoleb\006proto3"
+  "rpc.AutoCompleteResponse\"\000(\0010\001\022\241\001\n\022Cance"
+  "lAutoComplete\022C.io.deephaven.proto.backp"
+  "lane.script.grpc.CancelAutoCompleteReque"
+  "st\032D.io.deephaven.proto.backplane.script"
+  ".grpc.CancelAutoCompleteResponse\"\000\022\233\001\n\026O"
+  "penAutoCompleteStream\022=.io.deephaven.pro"
+  "to.backplane.script.grpc.AutoCompleteReq"
+  "uest\032>.io.deephaven.proto.backplane.scri"
+  "pt.grpc.AutoCompleteResponse\"\0000\001\022\230\001\n\026Nex"
+  "tAutoCompleteStream\022=.io.deephaven.proto"
+  ".backplane.script.grpc.AutoCompleteReque"
+  "st\032=.io.deephaven.proto.backplane.script"
+  ".grpc.BrowserNextResponse\"\000BCH\001P\001Z=githu"
+  "b.com/deephaven/deephaven-core/go/intern"
+  "al/proto/consoleb\006proto3"
   ;
 static const ::_pbi::DescriptorTable* const descriptor_table_deephaven_2fproto_2fconsole_2eproto_deps[2] = {
   &::descriptor_table_deephaven_2fproto_2fapplication_2eproto,
@@ -1640,9 +2150,9 @@ static const ::_pbi::DescriptorTable* const descriptor_table_deephaven_2fproto_2
 };
 static ::_pbi::once_flag descriptor_table_deephaven_2fproto_2fconsole_2eproto_once;
 const ::_pbi::DescriptorTable descriptor_table_deephaven_2fproto_2fconsole_2eproto = {
-    false, false, 11980, descriptor_table_protodef_deephaven_2fproto_2fconsole_2eproto,
+    false, false, 15824, descriptor_table_protodef_deephaven_2fproto_2fconsole_2eproto,
     "deephaven/proto/console.proto",
-    &descriptor_table_deephaven_2fproto_2fconsole_2eproto_once, descriptor_table_deephaven_2fproto_2fconsole_2eproto_deps, 2, 45,
+    &descriptor_table_deephaven_2fproto_2fconsole_2eproto_once, descriptor_table_deephaven_2fproto_2fconsole_2eproto_deps, 2, 60,
     schemas, file_default_instances, TableStruct_deephaven_2fproto_2fconsole_2eproto::offsets,
     file_level_metadata_deephaven_2fproto_2fconsole_2eproto, file_level_enum_descriptors_deephaven_2fproto_2fconsole_2eproto,
     file_level_service_descriptors_deephaven_2fproto_2fconsole_2eproto,
@@ -1659,10 +2169,60 @@ namespace proto {
 namespace backplane {
 namespace script {
 namespace grpc {
-const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* FigureDescriptor_ChartDescriptor_ChartType_descriptor() {
+const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* Diagnostic_DiagnosticSeverity_descriptor() {
   ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&descriptor_table_deephaven_2fproto_2fconsole_2eproto);
   return file_level_enum_descriptors_deephaven_2fproto_2fconsole_2eproto[0];
 }
+bool Diagnostic_DiagnosticSeverity_IsValid(int value) {
+  switch (value) {
+    case 0:
+    case 1:
+    case 2:
+    case 3:
+    case 4:
+      return true;
+    default:
+      return false;
+  }
+}
+
+#if (__cplusplus < 201703) && (!defined(_MSC_VER) || (_MSC_VER >= 1900 && _MSC_VER < 1912))
+constexpr Diagnostic_DiagnosticSeverity Diagnostic::NOT_SET_SEVERITY;
+constexpr Diagnostic_DiagnosticSeverity Diagnostic::ERROR;
+constexpr Diagnostic_DiagnosticSeverity Diagnostic::WARNING;
+constexpr Diagnostic_DiagnosticSeverity Diagnostic::INFORMATION;
+constexpr Diagnostic_DiagnosticSeverity Diagnostic::HINT;
+constexpr Diagnostic_DiagnosticSeverity Diagnostic::DiagnosticSeverity_MIN;
+constexpr Diagnostic_DiagnosticSeverity Diagnostic::DiagnosticSeverity_MAX;
+constexpr int Diagnostic::DiagnosticSeverity_ARRAYSIZE;
+#endif  // (__cplusplus < 201703) && (!defined(_MSC_VER) || (_MSC_VER >= 1900 && _MSC_VER < 1912))
+const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* Diagnostic_DiagnosticTag_descriptor() {
+  ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&descriptor_table_deephaven_2fproto_2fconsole_2eproto);
+  return file_level_enum_descriptors_deephaven_2fproto_2fconsole_2eproto[1];
+}
+bool Diagnostic_DiagnosticTag_IsValid(int value) {
+  switch (value) {
+    case 0:
+    case 1:
+    case 2:
+      return true;
+    default:
+      return false;
+  }
+}
+
+#if (__cplusplus < 201703) && (!defined(_MSC_VER) || (_MSC_VER >= 1900 && _MSC_VER < 1912))
+constexpr Diagnostic_DiagnosticTag Diagnostic::NOT_SET_TAG;
+constexpr Diagnostic_DiagnosticTag Diagnostic::UNNECESSARY;
+constexpr Diagnostic_DiagnosticTag Diagnostic::DEPRECATED;
+constexpr Diagnostic_DiagnosticTag Diagnostic::DiagnosticTag_MIN;
+constexpr Diagnostic_DiagnosticTag Diagnostic::DiagnosticTag_MAX;
+constexpr int Diagnostic::DiagnosticTag_ARRAYSIZE;
+#endif  // (__cplusplus < 201703) && (!defined(_MSC_VER) || (_MSC_VER >= 1900 && _MSC_VER < 1912))
+const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* FigureDescriptor_ChartDescriptor_ChartType_descriptor() {
+  ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&descriptor_table_deephaven_2fproto_2fconsole_2eproto);
+  return file_level_enum_descriptors_deephaven_2fproto_2fconsole_2eproto[2];
+}
 bool FigureDescriptor_ChartDescriptor_ChartType_IsValid(int value) {
   switch (value) {
     case 0:
@@ -1692,7 +2252,7 @@ constexpr int FigureDescriptor_ChartDescriptor::ChartType_ARRAYSIZE;
 #endif  // (__cplusplus < 201703) && (!defined(_MSC_VER) || (_MSC_VER >= 1900 && _MSC_VER < 1912))
 const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* FigureDescriptor_AxisDescriptor_AxisFormatType_descriptor() {
   ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&descriptor_table_deephaven_2fproto_2fconsole_2eproto);
-  return file_level_enum_descriptors_deephaven_2fproto_2fconsole_2eproto[1];
+  return file_level_enum_descriptors_deephaven_2fproto_2fconsole_2eproto[3];
 }
 bool FigureDescriptor_AxisDescriptor_AxisFormatType_IsValid(int value) {
   switch (value) {
@@ -1713,7 +2273,7 @@ constexpr int FigureDescriptor_AxisDescriptor::AxisFormatType_ARRAYSIZE;
 #endif  // (__cplusplus < 201703) && (!defined(_MSC_VER) || (_MSC_VER >= 1900 && _MSC_VER < 1912))
 const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* FigureDescriptor_AxisDescriptor_AxisType_descriptor() {
   ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&descriptor_table_deephaven_2fproto_2fconsole_2eproto);
-  return file_level_enum_descriptors_deephaven_2fproto_2fconsole_2eproto[2];
+  return file_level_enum_descriptors_deephaven_2fproto_2fconsole_2eproto[4];
 }
 bool FigureDescriptor_AxisDescriptor_AxisType_IsValid(int value) {
   switch (value) {
@@ -1742,7 +2302,7 @@ constexpr int FigureDescriptor_AxisDescriptor::AxisType_ARRAYSIZE;
 #endif  // (__cplusplus < 201703) && (!defined(_MSC_VER) || (_MSC_VER >= 1900 && _MSC_VER < 1912))
 const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* FigureDescriptor_AxisDescriptor_AxisPosition_descriptor() {
   ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&descriptor_table_deephaven_2fproto_2fconsole_2eproto);
-  return file_level_enum_descriptors_deephaven_2fproto_2fconsole_2eproto[3];
+  return file_level_enum_descriptors_deephaven_2fproto_2fconsole_2eproto[5];
 }
 bool FigureDescriptor_AxisDescriptor_AxisPosition_IsValid(int value) {
   switch (value) {
@@ -1769,7 +2329,7 @@ constexpr int FigureDescriptor_AxisDescriptor::AxisPosition_ARRAYSIZE;
 #endif  // (__cplusplus < 201703) && (!defined(_MSC_VER) || (_MSC_VER >= 1900 && _MSC_VER < 1912))
 const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* FigureDescriptor_BusinessCalendarDescriptor_DayOfWeek_descriptor() {
   ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&descriptor_table_deephaven_2fproto_2fconsole_2eproto);
-  return file_level_enum_descriptors_deephaven_2fproto_2fconsole_2eproto[4];
+  return file_level_enum_descriptors_deephaven_2fproto_2fconsole_2eproto[6];
 }
 bool FigureDescriptor_BusinessCalendarDescriptor_DayOfWeek_IsValid(int value) {
   switch (value) {
@@ -1800,7 +2360,7 @@ constexpr int FigureDescriptor_BusinessCalendarDescriptor::DayOfWeek_ARRAYSIZE;
 #endif  // (__cplusplus < 201703) && (!defined(_MSC_VER) || (_MSC_VER >= 1900 && _MSC_VER < 1912))
 const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* FigureDescriptor_SeriesPlotStyle_descriptor() {
   ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&descriptor_table_deephaven_2fproto_2fconsole_2eproto);
-  return file_level_enum_descriptors_deephaven_2fproto_2fconsole_2eproto[5];
+  return file_level_enum_descriptors_deephaven_2fproto_2fconsole_2eproto[7];
 }
 bool FigureDescriptor_SeriesPlotStyle_IsValid(int value) {
   switch (value) {
@@ -1841,7 +2401,7 @@ constexpr int FigureDescriptor::SeriesPlotStyle_ARRAYSIZE;
 #endif  // (__cplusplus < 201703) && (!defined(_MSC_VER) || (_MSC_VER >= 1900 && _MSC_VER < 1912))
 const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* FigureDescriptor_SourceType_descriptor() {
   ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&descriptor_table_deephaven_2fproto_2fconsole_2eproto);
-  return file_level_enum_descriptors_deephaven_2fproto_2fconsole_2eproto[6];
+  return file_level_enum_descriptors_deephaven_2fproto_2fconsole_2eproto[8];
 }
 bool FigureDescriptor_SourceType_IsValid(int value) {
   switch (value) {
@@ -4407,130 +4967,48 @@ ::PROTOBUF_NAMESPACE_ID::Metadata CancelCommandResponse::GetMetadata() const {
 
 // ===================================================================
 
-class AutoCompleteRequest::_Internal {
+class CancelAutoCompleteRequest::_Internal {
  public:
-  static const ::io::deephaven::proto::backplane::script::grpc::OpenDocumentRequest& open_document(const AutoCompleteRequest* msg);
-  static const ::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest& change_document(const AutoCompleteRequest* msg);
-  static const ::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsRequest& get_completion_items(const AutoCompleteRequest* msg);
-  static const ::io::deephaven::proto::backplane::script::grpc::CloseDocumentRequest& close_document(const AutoCompleteRequest* msg);
+  static const ::io::deephaven::proto::backplane::grpc::Ticket& console_id(const CancelAutoCompleteRequest* msg);
 };
 
-const ::io::deephaven::proto::backplane::script::grpc::OpenDocumentRequest&
-AutoCompleteRequest::_Internal::open_document(const AutoCompleteRequest* msg) {
-  return *msg->request_.open_document_;
-}
-const ::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest&
-AutoCompleteRequest::_Internal::change_document(const AutoCompleteRequest* msg) {
-  return *msg->request_.change_document_;
-}
-const ::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsRequest&
-AutoCompleteRequest::_Internal::get_completion_items(const AutoCompleteRequest* msg) {
-  return *msg->request_.get_completion_items_;
-}
-const ::io::deephaven::proto::backplane::script::grpc::CloseDocumentRequest&
-AutoCompleteRequest::_Internal::close_document(const AutoCompleteRequest* msg) {
-  return *msg->request_.close_document_;
-}
-void AutoCompleteRequest::set_allocated_open_document(::io::deephaven::proto::backplane::script::grpc::OpenDocumentRequest* open_document) {
-  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
-  clear_request();
-  if (open_document) {
-    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
-      ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(open_document);
-    if (message_arena != submessage_arena) {
-      open_document = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
-          message_arena, open_document, submessage_arena);
-    }
-    set_has_open_document();
-    request_.open_document_ = open_document;
-  }
-  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest.open_document)
-}
-void AutoCompleteRequest::set_allocated_change_document(::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest* change_document) {
-  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
-  clear_request();
-  if (change_document) {
-    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
-      ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(change_document);
-    if (message_arena != submessage_arena) {
-      change_document = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
-          message_arena, change_document, submessage_arena);
-    }
-    set_has_change_document();
-    request_.change_document_ = change_document;
-  }
-  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest.change_document)
-}
-void AutoCompleteRequest::set_allocated_get_completion_items(::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsRequest* get_completion_items) {
-  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
-  clear_request();
-  if (get_completion_items) {
-    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
-      ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(get_completion_items);
-    if (message_arena != submessage_arena) {
-      get_completion_items = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
-          message_arena, get_completion_items, submessage_arena);
-    }
-    set_has_get_completion_items();
-    request_.get_completion_items_ = get_completion_items;
-  }
-  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest.get_completion_items)
+const ::io::deephaven::proto::backplane::grpc::Ticket&
+CancelAutoCompleteRequest::_Internal::console_id(const CancelAutoCompleteRequest* msg) {
+  return *msg->console_id_;
 }
-void AutoCompleteRequest::set_allocated_close_document(::io::deephaven::proto::backplane::script::grpc::CloseDocumentRequest* close_document) {
-  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
-  clear_request();
-  if (close_document) {
-    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
-      ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(close_document);
-    if (message_arena != submessage_arena) {
-      close_document = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
-          message_arena, close_document, submessage_arena);
-    }
-    set_has_close_document();
-    request_.close_document_ = close_document;
+void CancelAutoCompleteRequest::clear_console_id() {
+  if (GetArenaForAllocation() == nullptr && console_id_ != nullptr) {
+    delete console_id_;
   }
-  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest.close_document)
+  console_id_ = nullptr;
 }
-AutoCompleteRequest::AutoCompleteRequest(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+CancelAutoCompleteRequest::CancelAutoCompleteRequest(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                          bool is_message_owned)
   : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned) {
   SharedCtor();
-  // @@protoc_insertion_point(arena_constructor:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest)
+  // @@protoc_insertion_point(arena_constructor:io.deephaven.proto.backplane.script.grpc.CancelAutoCompleteRequest)
 }
-AutoCompleteRequest::AutoCompleteRequest(const AutoCompleteRequest& from)
+CancelAutoCompleteRequest::CancelAutoCompleteRequest(const CancelAutoCompleteRequest& from)
   : ::PROTOBUF_NAMESPACE_ID::Message() {
   _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
-  clear_has_request();
-  switch (from.request_case()) {
-    case kOpenDocument: {
-      _internal_mutable_open_document()->::io::deephaven::proto::backplane::script::grpc::OpenDocumentRequest::MergeFrom(from._internal_open_document());
-      break;
-    }
-    case kChangeDocument: {
-      _internal_mutable_change_document()->::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest::MergeFrom(from._internal_change_document());
-      break;
-    }
-    case kGetCompletionItems: {
-      _internal_mutable_get_completion_items()->::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsRequest::MergeFrom(from._internal_get_completion_items());
-      break;
-    }
-    case kCloseDocument: {
-      _internal_mutable_close_document()->::io::deephaven::proto::backplane::script::grpc::CloseDocumentRequest::MergeFrom(from._internal_close_document());
-      break;
-    }
-    case REQUEST_NOT_SET: {
-      break;
-    }
+  if (from._internal_has_console_id()) {
+    console_id_ = new ::io::deephaven::proto::backplane::grpc::Ticket(*from.console_id_);
+  } else {
+    console_id_ = nullptr;
   }
-  // @@protoc_insertion_point(copy_constructor:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest)
+  request_id_ = from.request_id_;
+  // @@protoc_insertion_point(copy_constructor:io.deephaven.proto.backplane.script.grpc.CancelAutoCompleteRequest)
 }
 
-inline void AutoCompleteRequest::SharedCtor() {
-clear_has_request();
+inline void CancelAutoCompleteRequest::SharedCtor() {
+::memset(reinterpret_cast<char*>(this) + static_cast<size_t>(
+    reinterpret_cast<char*>(&console_id_) - reinterpret_cast<char*>(this)),
+    0, static_cast<size_t>(reinterpret_cast<char*>(&request_id_) -
+    reinterpret_cast<char*>(&console_id_)) + sizeof(request_id_));
 }
 
-AutoCompleteRequest::~AutoCompleteRequest() {
-  // @@protoc_insertion_point(destructor:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest)
+CancelAutoCompleteRequest::~CancelAutoCompleteRequest() {
+  // @@protoc_insertion_point(destructor:io.deephaven.proto.backplane.script.grpc.CancelAutoCompleteRequest)
   if (auto *arena = _internal_metadata_.DeleteReturnArena<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>()) {
   (void)arena;
     return;
@@ -4538,96 +5016,47 @@ AutoCompleteRequest::~AutoCompleteRequest() {
   SharedDtor();
 }
 
-inline void AutoCompleteRequest::SharedDtor() {
+inline void CancelAutoCompleteRequest::SharedDtor() {
   GOOGLE_DCHECK(GetArenaForAllocation() == nullptr);
-  if (has_request()) {
-    clear_request();
-  }
+  if (this != internal_default_instance()) delete console_id_;
 }
 
-void AutoCompleteRequest::SetCachedSize(int size) const {
+void CancelAutoCompleteRequest::SetCachedSize(int size) const {
   _cached_size_.Set(size);
 }
 
-void AutoCompleteRequest::clear_request() {
-// @@protoc_insertion_point(one_of_clear_start:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest)
-  switch (request_case()) {
-    case kOpenDocument: {
-      if (GetArenaForAllocation() == nullptr) {
-        delete request_.open_document_;
-      }
-      break;
-    }
-    case kChangeDocument: {
-      if (GetArenaForAllocation() == nullptr) {
-        delete request_.change_document_;
-      }
-      break;
-    }
-    case kGetCompletionItems: {
-      if (GetArenaForAllocation() == nullptr) {
-        delete request_.get_completion_items_;
-      }
-      break;
-    }
-    case kCloseDocument: {
-      if (GetArenaForAllocation() == nullptr) {
-        delete request_.close_document_;
-      }
-      break;
-    }
-    case REQUEST_NOT_SET: {
-      break;
-    }
-  }
-  _oneof_case_[0] = REQUEST_NOT_SET;
-}
-
-
-void AutoCompleteRequest::Clear() {
-// @@protoc_insertion_point(message_clear_start:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest)
+void CancelAutoCompleteRequest::Clear() {
+// @@protoc_insertion_point(message_clear_start:io.deephaven.proto.backplane.script.grpc.CancelAutoCompleteRequest)
   uint32_t cached_has_bits = 0;
   // Prevent compiler warnings about cached_has_bits being unused
   (void) cached_has_bits;
 
-  clear_request();
+  if (GetArenaForAllocation() == nullptr && console_id_ != nullptr) {
+    delete console_id_;
+  }
+  console_id_ = nullptr;
+  request_id_ = 0;
   _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
 }
 
-const char* AutoCompleteRequest::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) {
+const char* CancelAutoCompleteRequest::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) {
 #define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
   while (!ctx->Done(&ptr)) {
     uint32_t tag;
     ptr = ::_pbi::ReadTag(ptr, &tag);
     switch (tag >> 3) {
-      // .io.deephaven.proto.backplane.script.grpc.OpenDocumentRequest open_document = 1;
+      // .io.deephaven.proto.backplane.grpc.Ticket console_id = 1;
       case 1:
         if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 10)) {
-          ptr = ctx->ParseMessage(_internal_mutable_open_document(), ptr);
+          ptr = ctx->ParseMessage(_internal_mutable_console_id(), ptr);
           CHK_(ptr);
         } else
           goto handle_unusual;
         continue;
-      // .io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest change_document = 2;
+      // int32 request_id = 2;
       case 2:
-        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 18)) {
-          ptr = ctx->ParseMessage(_internal_mutable_change_document(), ptr);
-          CHK_(ptr);
-        } else
-          goto handle_unusual;
-        continue;
-      // .io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest get_completion_items = 3;
-      case 3:
-        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 26)) {
-          ptr = ctx->ParseMessage(_internal_mutable_get_completion_items(), ptr);
-          CHK_(ptr);
-        } else
-          goto handle_unusual;
-        continue;
-      // .io.deephaven.proto.backplane.script.grpc.CloseDocumentRequest close_document = 4;
-      case 4:
-        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 34)) {
-          ptr = ctx->ParseMessage(_internal_mutable_close_document(), ptr);
+        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 16)) {
+          request_id_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
           CHK_(ptr);
         } else
           goto handle_unusual;
@@ -4655,154 +5084,107 @@ const char* AutoCompleteRequest::_InternalParse(const char* ptr, ::_pbi::ParseCo
 #undef CHK_
 }
 
-uint8_t* AutoCompleteRequest::_InternalSerialize(
+uint8_t* CancelAutoCompleteRequest::_InternalSerialize(
     uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const {
-  // @@protoc_insertion_point(serialize_to_array_start:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest)
+  // @@protoc_insertion_point(serialize_to_array_start:io.deephaven.proto.backplane.script.grpc.CancelAutoCompleteRequest)
   uint32_t cached_has_bits = 0;
   (void) cached_has_bits;
 
-  // .io.deephaven.proto.backplane.script.grpc.OpenDocumentRequest open_document = 1;
-  if (_internal_has_open_document()) {
-    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
-      InternalWriteMessage(1, _Internal::open_document(this),
-        _Internal::open_document(this).GetCachedSize(), target, stream);
-  }
-
-  // .io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest change_document = 2;
-  if (_internal_has_change_document()) {
-    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
-      InternalWriteMessage(2, _Internal::change_document(this),
-        _Internal::change_document(this).GetCachedSize(), target, stream);
-  }
-
-  // .io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest get_completion_items = 3;
-  if (_internal_has_get_completion_items()) {
+  // .io.deephaven.proto.backplane.grpc.Ticket console_id = 1;
+  if (this->_internal_has_console_id()) {
     target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
-      InternalWriteMessage(3, _Internal::get_completion_items(this),
-        _Internal::get_completion_items(this).GetCachedSize(), target, stream);
+      InternalWriteMessage(1, _Internal::console_id(this),
+        _Internal::console_id(this).GetCachedSize(), target, stream);
   }
 
-  // .io.deephaven.proto.backplane.script.grpc.CloseDocumentRequest close_document = 4;
-  if (_internal_has_close_document()) {
-    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
-      InternalWriteMessage(4, _Internal::close_document(this),
-        _Internal::close_document(this).GetCachedSize(), target, stream);
+  // int32 request_id = 2;
+  if (this->_internal_request_id() != 0) {
+    target = stream->EnsureSpace(target);
+    target = ::_pbi::WireFormatLite::WriteInt32ToArray(2, this->_internal_request_id(), target);
   }
 
   if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
     target = ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray(
         _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream);
   }
-  // @@protoc_insertion_point(serialize_to_array_end:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest)
+  // @@protoc_insertion_point(serialize_to_array_end:io.deephaven.proto.backplane.script.grpc.CancelAutoCompleteRequest)
   return target;
 }
 
-size_t AutoCompleteRequest::ByteSizeLong() const {
-// @@protoc_insertion_point(message_byte_size_start:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest)
+size_t CancelAutoCompleteRequest::ByteSizeLong() const {
+// @@protoc_insertion_point(message_byte_size_start:io.deephaven.proto.backplane.script.grpc.CancelAutoCompleteRequest)
   size_t total_size = 0;
 
   uint32_t cached_has_bits = 0;
   // Prevent compiler warnings about cached_has_bits being unused
   (void) cached_has_bits;
 
-  switch (request_case()) {
-    // .io.deephaven.proto.backplane.script.grpc.OpenDocumentRequest open_document = 1;
-    case kOpenDocument: {
-      total_size += 1 +
-        ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
-          *request_.open_document_);
-      break;
-    }
-    // .io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest change_document = 2;
-    case kChangeDocument: {
-      total_size += 1 +
-        ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
-          *request_.change_document_);
-      break;
-    }
-    // .io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest get_completion_items = 3;
-    case kGetCompletionItems: {
-      total_size += 1 +
-        ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
-          *request_.get_completion_items_);
-      break;
-    }
-    // .io.deephaven.proto.backplane.script.grpc.CloseDocumentRequest close_document = 4;
-    case kCloseDocument: {
-      total_size += 1 +
-        ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
-          *request_.close_document_);
-      break;
-    }
-    case REQUEST_NOT_SET: {
-      break;
-    }
+  // .io.deephaven.proto.backplane.grpc.Ticket console_id = 1;
+  if (this->_internal_has_console_id()) {
+    total_size += 1 +
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
+        *console_id_);
+  }
+
+  // int32 request_id = 2;
+  if (this->_internal_request_id() != 0) {
+    total_size += ::_pbi::WireFormatLite::Int32SizePlusOne(this->_internal_request_id());
   }
+
   return MaybeComputeUnknownFieldsSize(total_size, &_cached_size_);
 }
 
-const ::PROTOBUF_NAMESPACE_ID::Message::ClassData AutoCompleteRequest::_class_data_ = {
+const ::PROTOBUF_NAMESPACE_ID::Message::ClassData CancelAutoCompleteRequest::_class_data_ = {
     ::PROTOBUF_NAMESPACE_ID::Message::CopyWithSizeCheck,
-    AutoCompleteRequest::MergeImpl
+    CancelAutoCompleteRequest::MergeImpl
 };
-const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*AutoCompleteRequest::GetClassData() const { return &_class_data_; }
+const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*CancelAutoCompleteRequest::GetClassData() const { return &_class_data_; }
 
-void AutoCompleteRequest::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to,
+void CancelAutoCompleteRequest::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to,
                       const ::PROTOBUF_NAMESPACE_ID::Message& from) {
-  static_cast<AutoCompleteRequest *>(to)->MergeFrom(
-      static_cast<const AutoCompleteRequest &>(from));
+  static_cast<CancelAutoCompleteRequest *>(to)->MergeFrom(
+      static_cast<const CancelAutoCompleteRequest &>(from));
 }
 
 
-void AutoCompleteRequest::MergeFrom(const AutoCompleteRequest& from) {
-// @@protoc_insertion_point(class_specific_merge_from_start:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest)
+void CancelAutoCompleteRequest::MergeFrom(const CancelAutoCompleteRequest& from) {
+// @@protoc_insertion_point(class_specific_merge_from_start:io.deephaven.proto.backplane.script.grpc.CancelAutoCompleteRequest)
   GOOGLE_DCHECK_NE(&from, this);
   uint32_t cached_has_bits = 0;
   (void) cached_has_bits;
 
-  switch (from.request_case()) {
-    case kOpenDocument: {
-      _internal_mutable_open_document()->::io::deephaven::proto::backplane::script::grpc::OpenDocumentRequest::MergeFrom(from._internal_open_document());
-      break;
-    }
-    case kChangeDocument: {
-      _internal_mutable_change_document()->::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest::MergeFrom(from._internal_change_document());
-      break;
-    }
-    case kGetCompletionItems: {
-      _internal_mutable_get_completion_items()->::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsRequest::MergeFrom(from._internal_get_completion_items());
-      break;
-    }
-    case kCloseDocument: {
-      _internal_mutable_close_document()->::io::deephaven::proto::backplane::script::grpc::CloseDocumentRequest::MergeFrom(from._internal_close_document());
-      break;
-    }
-    case REQUEST_NOT_SET: {
-      break;
-    }
+  if (from._internal_has_console_id()) {
+    _internal_mutable_console_id()->::io::deephaven::proto::backplane::grpc::Ticket::MergeFrom(from._internal_console_id());
+  }
+  if (from._internal_request_id() != 0) {
+    _internal_set_request_id(from._internal_request_id());
   }
   _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
 }
 
-void AutoCompleteRequest::CopyFrom(const AutoCompleteRequest& from) {
-// @@protoc_insertion_point(class_specific_copy_from_start:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest)
+void CancelAutoCompleteRequest::CopyFrom(const CancelAutoCompleteRequest& from) {
+// @@protoc_insertion_point(class_specific_copy_from_start:io.deephaven.proto.backplane.script.grpc.CancelAutoCompleteRequest)
   if (&from == this) return;
   Clear();
   MergeFrom(from);
 }
 
-bool AutoCompleteRequest::IsInitialized() const {
+bool CancelAutoCompleteRequest::IsInitialized() const {
   return true;
 }
 
-void AutoCompleteRequest::InternalSwap(AutoCompleteRequest* other) {
+void CancelAutoCompleteRequest::InternalSwap(CancelAutoCompleteRequest* other) {
   using std::swap;
   _internal_metadata_.InternalSwap(&other->_internal_metadata_);
-  swap(request_, other->request_);
-  swap(_oneof_case_[0], other->_oneof_case_[0]);
+  ::PROTOBUF_NAMESPACE_ID::internal::memswap<
+      PROTOBUF_FIELD_OFFSET(CancelAutoCompleteRequest, request_id_)
+      + sizeof(CancelAutoCompleteRequest::request_id_)
+      - PROTOBUF_FIELD_OFFSET(CancelAutoCompleteRequest, console_id_)>(
+          reinterpret_cast<char*>(&console_id_),
+          reinterpret_cast<char*>(&other->console_id_));
 }
 
-::PROTOBUF_NAMESPACE_ID::Metadata AutoCompleteRequest::GetMetadata() const {
+::PROTOBUF_NAMESPACE_ID::Metadata CancelAutoCompleteRequest::GetMetadata() const {
   return ::_pbi::AssignDescriptors(
       &descriptor_table_deephaven_2fproto_2fconsole_2eproto_getter, &descriptor_table_deephaven_2fproto_2fconsole_2eproto_once,
       file_level_metadata_deephaven_2fproto_2fconsole_2eproto[14]);
@@ -4810,331 +5192,4096 @@ ::PROTOBUF_NAMESPACE_ID::Metadata AutoCompleteRequest::GetMetadata() const {
 
 // ===================================================================
 
-class AutoCompleteResponse::_Internal {
+class CancelAutoCompleteResponse::_Internal {
  public:
-  static const ::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsResponse& completion_items(const AutoCompleteResponse* msg);
 };
 
-const ::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsResponse&
-AutoCompleteResponse::_Internal::completion_items(const AutoCompleteResponse* msg) {
-  return *msg->response_.completion_items_;
-}
-void AutoCompleteResponse::set_allocated_completion_items(::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsResponse* completion_items) {
-  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
-  clear_response();
-  if (completion_items) {
-    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
-      ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(completion_items);
-    if (message_arena != submessage_arena) {
-      completion_items = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
-          message_arena, completion_items, submessage_arena);
-    }
-    set_has_completion_items();
-    response_.completion_items_ = completion_items;
-  }
-  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.AutoCompleteResponse.completion_items)
-}
-AutoCompleteResponse::AutoCompleteResponse(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+CancelAutoCompleteResponse::CancelAutoCompleteResponse(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                          bool is_message_owned)
-  : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned) {
-  SharedCtor();
-  // @@protoc_insertion_point(arena_constructor:io.deephaven.proto.backplane.script.grpc.AutoCompleteResponse)
+  : ::PROTOBUF_NAMESPACE_ID::internal::ZeroFieldsBase(arena, is_message_owned) {
+  // @@protoc_insertion_point(arena_constructor:io.deephaven.proto.backplane.script.grpc.CancelAutoCompleteResponse)
 }
-AutoCompleteResponse::AutoCompleteResponse(const AutoCompleteResponse& from)
-  : ::PROTOBUF_NAMESPACE_ID::Message() {
+CancelAutoCompleteResponse::CancelAutoCompleteResponse(const CancelAutoCompleteResponse& from)
+  : ::PROTOBUF_NAMESPACE_ID::internal::ZeroFieldsBase() {
   _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
-  clear_has_response();
-  switch (from.response_case()) {
-    case kCompletionItems: {
-      _internal_mutable_completion_items()->::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsResponse::MergeFrom(from._internal_completion_items());
-      break;
-    }
-    case RESPONSE_NOT_SET: {
-      break;
-    }
-  }
-  // @@protoc_insertion_point(copy_constructor:io.deephaven.proto.backplane.script.grpc.AutoCompleteResponse)
+  // @@protoc_insertion_point(copy_constructor:io.deephaven.proto.backplane.script.grpc.CancelAutoCompleteResponse)
 }
 
-inline void AutoCompleteResponse::SharedCtor() {
-clear_has_response();
-}
 
-AutoCompleteResponse::~AutoCompleteResponse() {
-  // @@protoc_insertion_point(destructor:io.deephaven.proto.backplane.script.grpc.AutoCompleteResponse)
-  if (auto *arena = _internal_metadata_.DeleteReturnArena<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>()) {
-  (void)arena;
-    return;
-  }
-  SharedDtor();
-}
 
-inline void AutoCompleteResponse::SharedDtor() {
-  GOOGLE_DCHECK(GetArenaForAllocation() == nullptr);
-  if (has_response()) {
-    clear_response();
-  }
-}
 
-void AutoCompleteResponse::SetCachedSize(int size) const {
-  _cached_size_.Set(size);
-}
 
-void AutoCompleteResponse::clear_response() {
-// @@protoc_insertion_point(one_of_clear_start:io.deephaven.proto.backplane.script.grpc.AutoCompleteResponse)
-  switch (response_case()) {
-    case kCompletionItems: {
-      if (GetArenaForAllocation() == nullptr) {
-        delete response_.completion_items_;
-      }
-      break;
-    }
-    case RESPONSE_NOT_SET: {
-      break;
-    }
-  }
-  _oneof_case_[0] = RESPONSE_NOT_SET;
-}
+const ::PROTOBUF_NAMESPACE_ID::Message::ClassData CancelAutoCompleteResponse::_class_data_ = {
+    ::PROTOBUF_NAMESPACE_ID::internal::ZeroFieldsBase::CopyImpl,
+    ::PROTOBUF_NAMESPACE_ID::internal::ZeroFieldsBase::MergeImpl,
+};
+const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*CancelAutoCompleteResponse::GetClassData() const { return &_class_data_; }
 
 
-void AutoCompleteResponse::Clear() {
-// @@protoc_insertion_point(message_clear_start:io.deephaven.proto.backplane.script.grpc.AutoCompleteResponse)
-  uint32_t cached_has_bits = 0;
-  // Prevent compiler warnings about cached_has_bits being unused
-  (void) cached_has_bits;
 
-  clear_response();
-  _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
-}
 
-const char* AutoCompleteResponse::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) {
-#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
-  while (!ctx->Done(&ptr)) {
-    uint32_t tag;
-    ptr = ::_pbi::ReadTag(ptr, &tag);
-    switch (tag >> 3) {
-      // .io.deephaven.proto.backplane.script.grpc.GetCompletionItemsResponse completion_items = 1;
-      case 1:
-        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 10)) {
-          ptr = ctx->ParseMessage(_internal_mutable_completion_items(), ptr);
-          CHK_(ptr);
-        } else
-          goto handle_unusual;
-        continue;
-      default:
-        goto handle_unusual;
-    }  // switch
-  handle_unusual:
-    if ((tag == 0) || ((tag & 7) == 4)) {
-      CHK_(ptr);
-      ctx->SetLastTag(tag);
-      goto message_done;
-    }
-    ptr = UnknownFieldParse(
-        tag,
-        _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(),
-        ptr, ctx);
-    CHK_(ptr != nullptr);
-  }  // while
-message_done:
-  return ptr;
-failure:
-  ptr = nullptr;
-  goto message_done;
-#undef CHK_
-}
 
-uint8_t* AutoCompleteResponse::_InternalSerialize(
-    uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const {
-  // @@protoc_insertion_point(serialize_to_array_start:io.deephaven.proto.backplane.script.grpc.AutoCompleteResponse)
-  uint32_t cached_has_bits = 0;
-  (void) cached_has_bits;
 
-  // .io.deephaven.proto.backplane.script.grpc.GetCompletionItemsResponse completion_items = 1;
-  if (_internal_has_completion_items()) {
-    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
-      InternalWriteMessage(1, _Internal::completion_items(this),
-        _Internal::completion_items(this).GetCachedSize(), target, stream);
-  }
 
-  if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
-    target = ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray(
-        _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream);
-  }
-  // @@protoc_insertion_point(serialize_to_array_end:io.deephaven.proto.backplane.script.grpc.AutoCompleteResponse)
-  return target;
+::PROTOBUF_NAMESPACE_ID::Metadata CancelAutoCompleteResponse::GetMetadata() const {
+  return ::_pbi::AssignDescriptors(
+      &descriptor_table_deephaven_2fproto_2fconsole_2eproto_getter, &descriptor_table_deephaven_2fproto_2fconsole_2eproto_once,
+      file_level_metadata_deephaven_2fproto_2fconsole_2eproto[15]);
 }
 
-size_t AutoCompleteResponse::ByteSizeLong() const {
-// @@protoc_insertion_point(message_byte_size_start:io.deephaven.proto.backplane.script.grpc.AutoCompleteResponse)
-  size_t total_size = 0;
-
-  uint32_t cached_has_bits = 0;
-  // Prevent compiler warnings about cached_has_bits being unused
-  (void) cached_has_bits;
-
-  switch (response_case()) {
-    // .io.deephaven.proto.backplane.script.grpc.GetCompletionItemsResponse completion_items = 1;
-    case kCompletionItems: {
-      total_size += 1 +
-        ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
-          *response_.completion_items_);
-      break;
-    }
-    case RESPONSE_NOT_SET: {
-      break;
-    }
-  }
-  return MaybeComputeUnknownFieldsSize(total_size, &_cached_size_);
-}
+// ===================================================================
 
-const ::PROTOBUF_NAMESPACE_ID::Message::ClassData AutoCompleteResponse::_class_data_ = {
-    ::PROTOBUF_NAMESPACE_ID::Message::CopyWithSizeCheck,
-    AutoCompleteResponse::MergeImpl
+class AutoCompleteRequest::_Internal {
+ public:
+  static const ::io::deephaven::proto::backplane::grpc::Ticket& console_id(const AutoCompleteRequest* msg);
+  static const ::io::deephaven::proto::backplane::script::grpc::OpenDocumentRequest& open_document(const AutoCompleteRequest* msg);
+  static const ::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest& change_document(const AutoCompleteRequest* msg);
+  static const ::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsRequest& get_completion_items(const AutoCompleteRequest* msg);
+  static const ::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpRequest& get_signature_help(const AutoCompleteRequest* msg);
+  static const ::io::deephaven::proto::backplane::script::grpc::GetHoverRequest& get_hover(const AutoCompleteRequest* msg);
+  static const ::io::deephaven::proto::backplane::script::grpc::GetDiagnosticRequest& get_diagnostic(const AutoCompleteRequest* msg);
+  static const ::io::deephaven::proto::backplane::script::grpc::CloseDocumentRequest& close_document(const AutoCompleteRequest* msg);
 };
-const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*AutoCompleteResponse::GetClassData() const { return &_class_data_; }
 
-void AutoCompleteResponse::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to,
-                      const ::PROTOBUF_NAMESPACE_ID::Message& from) {
-  static_cast<AutoCompleteResponse *>(to)->MergeFrom(
-      static_cast<const AutoCompleteResponse &>(from));
+const ::io::deephaven::proto::backplane::grpc::Ticket&
+AutoCompleteRequest::_Internal::console_id(const AutoCompleteRequest* msg) {
+  return *msg->console_id_;
 }
-
-
-void AutoCompleteResponse::MergeFrom(const AutoCompleteResponse& from) {
-// @@protoc_insertion_point(class_specific_merge_from_start:io.deephaven.proto.backplane.script.grpc.AutoCompleteResponse)
-  GOOGLE_DCHECK_NE(&from, this);
-  uint32_t cached_has_bits = 0;
-  (void) cached_has_bits;
-
-  switch (from.response_case()) {
-    case kCompletionItems: {
-      _internal_mutable_completion_items()->::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsResponse::MergeFrom(from._internal_completion_items());
-      break;
-    }
-    case RESPONSE_NOT_SET: {
-      break;
-    }
-  }
-  _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
+const ::io::deephaven::proto::backplane::script::grpc::OpenDocumentRequest&
+AutoCompleteRequest::_Internal::open_document(const AutoCompleteRequest* msg) {
+  return *msg->request_.open_document_;
+}
+const ::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest&
+AutoCompleteRequest::_Internal::change_document(const AutoCompleteRequest* msg) {
+  return *msg->request_.change_document_;
+}
+const ::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsRequest&
+AutoCompleteRequest::_Internal::get_completion_items(const AutoCompleteRequest* msg) {
+  return *msg->request_.get_completion_items_;
+}
+const ::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpRequest&
+AutoCompleteRequest::_Internal::get_signature_help(const AutoCompleteRequest* msg) {
+  return *msg->request_.get_signature_help_;
+}
+const ::io::deephaven::proto::backplane::script::grpc::GetHoverRequest&
+AutoCompleteRequest::_Internal::get_hover(const AutoCompleteRequest* msg) {
+  return *msg->request_.get_hover_;
+}
+const ::io::deephaven::proto::backplane::script::grpc::GetDiagnosticRequest&
+AutoCompleteRequest::_Internal::get_diagnostic(const AutoCompleteRequest* msg) {
+  return *msg->request_.get_diagnostic_;
+}
+const ::io::deephaven::proto::backplane::script::grpc::CloseDocumentRequest&
+AutoCompleteRequest::_Internal::close_document(const AutoCompleteRequest* msg) {
+  return *msg->request_.close_document_;
+}
+void AutoCompleteRequest::clear_console_id() {
+  if (GetArenaForAllocation() == nullptr && console_id_ != nullptr) {
+    delete console_id_;
+  }
+  console_id_ = nullptr;
+}
+void AutoCompleteRequest::set_allocated_open_document(::io::deephaven::proto::backplane::script::grpc::OpenDocumentRequest* open_document) {
+  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
+  clear_request();
+  if (open_document) {
+    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
+      ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(open_document);
+    if (message_arena != submessage_arena) {
+      open_document = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
+          message_arena, open_document, submessage_arena);
+    }
+    set_has_open_document();
+    request_.open_document_ = open_document;
+  }
+  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest.open_document)
+}
+void AutoCompleteRequest::set_allocated_change_document(::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest* change_document) {
+  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
+  clear_request();
+  if (change_document) {
+    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
+      ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(change_document);
+    if (message_arena != submessage_arena) {
+      change_document = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
+          message_arena, change_document, submessage_arena);
+    }
+    set_has_change_document();
+    request_.change_document_ = change_document;
+  }
+  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest.change_document)
+}
+void AutoCompleteRequest::set_allocated_get_completion_items(::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsRequest* get_completion_items) {
+  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
+  clear_request();
+  if (get_completion_items) {
+    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
+      ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(get_completion_items);
+    if (message_arena != submessage_arena) {
+      get_completion_items = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
+          message_arena, get_completion_items, submessage_arena);
+    }
+    set_has_get_completion_items();
+    request_.get_completion_items_ = get_completion_items;
+  }
+  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest.get_completion_items)
+}
+void AutoCompleteRequest::set_allocated_get_signature_help(::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpRequest* get_signature_help) {
+  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
+  clear_request();
+  if (get_signature_help) {
+    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
+      ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(get_signature_help);
+    if (message_arena != submessage_arena) {
+      get_signature_help = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
+          message_arena, get_signature_help, submessage_arena);
+    }
+    set_has_get_signature_help();
+    request_.get_signature_help_ = get_signature_help;
+  }
+  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest.get_signature_help)
+}
+void AutoCompleteRequest::set_allocated_get_hover(::io::deephaven::proto::backplane::script::grpc::GetHoverRequest* get_hover) {
+  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
+  clear_request();
+  if (get_hover) {
+    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
+      ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(get_hover);
+    if (message_arena != submessage_arena) {
+      get_hover = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
+          message_arena, get_hover, submessage_arena);
+    }
+    set_has_get_hover();
+    request_.get_hover_ = get_hover;
+  }
+  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest.get_hover)
+}
+void AutoCompleteRequest::set_allocated_get_diagnostic(::io::deephaven::proto::backplane::script::grpc::GetDiagnosticRequest* get_diagnostic) {
+  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
+  clear_request();
+  if (get_diagnostic) {
+    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
+      ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(get_diagnostic);
+    if (message_arena != submessage_arena) {
+      get_diagnostic = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
+          message_arena, get_diagnostic, submessage_arena);
+    }
+    set_has_get_diagnostic();
+    request_.get_diagnostic_ = get_diagnostic;
+  }
+  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest.get_diagnostic)
+}
+void AutoCompleteRequest::set_allocated_close_document(::io::deephaven::proto::backplane::script::grpc::CloseDocumentRequest* close_document) {
+  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
+  clear_request();
+  if (close_document) {
+    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
+      ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(close_document);
+    if (message_arena != submessage_arena) {
+      close_document = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
+          message_arena, close_document, submessage_arena);
+    }
+    set_has_close_document();
+    request_.close_document_ = close_document;
+  }
+  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest.close_document)
+}
+AutoCompleteRequest::AutoCompleteRequest(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+                         bool is_message_owned)
+  : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned) {
+  SharedCtor();
+  // @@protoc_insertion_point(arena_constructor:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest)
+}
+AutoCompleteRequest::AutoCompleteRequest(const AutoCompleteRequest& from)
+  : ::PROTOBUF_NAMESPACE_ID::Message() {
+  _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
+  if (from._internal_has_console_id()) {
+    console_id_ = new ::io::deephaven::proto::backplane::grpc::Ticket(*from.console_id_);
+  } else {
+    console_id_ = nullptr;
+  }
+  request_id_ = from.request_id_;
+  clear_has_request();
+  switch (from.request_case()) {
+    case kOpenDocument: {
+      _internal_mutable_open_document()->::io::deephaven::proto::backplane::script::grpc::OpenDocumentRequest::MergeFrom(from._internal_open_document());
+      break;
+    }
+    case kChangeDocument: {
+      _internal_mutable_change_document()->::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest::MergeFrom(from._internal_change_document());
+      break;
+    }
+    case kGetCompletionItems: {
+      _internal_mutable_get_completion_items()->::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsRequest::MergeFrom(from._internal_get_completion_items());
+      break;
+    }
+    case kGetSignatureHelp: {
+      _internal_mutable_get_signature_help()->::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpRequest::MergeFrom(from._internal_get_signature_help());
+      break;
+    }
+    case kGetHover: {
+      _internal_mutable_get_hover()->::io::deephaven::proto::backplane::script::grpc::GetHoverRequest::MergeFrom(from._internal_get_hover());
+      break;
+    }
+    case kGetDiagnostic: {
+      _internal_mutable_get_diagnostic()->::io::deephaven::proto::backplane::script::grpc::GetDiagnosticRequest::MergeFrom(from._internal_get_diagnostic());
+      break;
+    }
+    case kCloseDocument: {
+      _internal_mutable_close_document()->::io::deephaven::proto::backplane::script::grpc::CloseDocumentRequest::MergeFrom(from._internal_close_document());
+      break;
+    }
+    case REQUEST_NOT_SET: {
+      break;
+    }
+  }
+  // @@protoc_insertion_point(copy_constructor:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest)
+}
+
+inline void AutoCompleteRequest::SharedCtor() {
+::memset(reinterpret_cast<char*>(this) + static_cast<size_t>(
+    reinterpret_cast<char*>(&console_id_) - reinterpret_cast<char*>(this)),
+    0, static_cast<size_t>(reinterpret_cast<char*>(&request_id_) -
+    reinterpret_cast<char*>(&console_id_)) + sizeof(request_id_));
+clear_has_request();
+}
+
+AutoCompleteRequest::~AutoCompleteRequest() {
+  // @@protoc_insertion_point(destructor:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest)
+  if (auto *arena = _internal_metadata_.DeleteReturnArena<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>()) {
+  (void)arena;
+    return;
+  }
+  SharedDtor();
+}
+
+inline void AutoCompleteRequest::SharedDtor() {
+  GOOGLE_DCHECK(GetArenaForAllocation() == nullptr);
+  if (this != internal_default_instance()) delete console_id_;
+  if (has_request()) {
+    clear_request();
+  }
+}
+
+void AutoCompleteRequest::SetCachedSize(int size) const {
+  _cached_size_.Set(size);
+}
+
+void AutoCompleteRequest::clear_request() {
+// @@protoc_insertion_point(one_of_clear_start:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest)
+  switch (request_case()) {
+    case kOpenDocument: {
+      if (GetArenaForAllocation() == nullptr) {
+        delete request_.open_document_;
+      }
+      break;
+    }
+    case kChangeDocument: {
+      if (GetArenaForAllocation() == nullptr) {
+        delete request_.change_document_;
+      }
+      break;
+    }
+    case kGetCompletionItems: {
+      if (GetArenaForAllocation() == nullptr) {
+        delete request_.get_completion_items_;
+      }
+      break;
+    }
+    case kGetSignatureHelp: {
+      if (GetArenaForAllocation() == nullptr) {
+        delete request_.get_signature_help_;
+      }
+      break;
+    }
+    case kGetHover: {
+      if (GetArenaForAllocation() == nullptr) {
+        delete request_.get_hover_;
+      }
+      break;
+    }
+    case kGetDiagnostic: {
+      if (GetArenaForAllocation() == nullptr) {
+        delete request_.get_diagnostic_;
+      }
+      break;
+    }
+    case kCloseDocument: {
+      if (GetArenaForAllocation() == nullptr) {
+        delete request_.close_document_;
+      }
+      break;
+    }
+    case REQUEST_NOT_SET: {
+      break;
+    }
+  }
+  _oneof_case_[0] = REQUEST_NOT_SET;
+}
+
+
+void AutoCompleteRequest::Clear() {
+// @@protoc_insertion_point(message_clear_start:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest)
+  uint32_t cached_has_bits = 0;
+  // Prevent compiler warnings about cached_has_bits being unused
+  (void) cached_has_bits;
+
+  if (GetArenaForAllocation() == nullptr && console_id_ != nullptr) {
+    delete console_id_;
+  }
+  console_id_ = nullptr;
+  request_id_ = 0;
+  clear_request();
+  _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
+}
+
+const char* AutoCompleteRequest::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) {
+#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
+  while (!ctx->Done(&ptr)) {
+    uint32_t tag;
+    ptr = ::_pbi::ReadTag(ptr, &tag);
+    switch (tag >> 3) {
+      // .io.deephaven.proto.backplane.script.grpc.OpenDocumentRequest open_document = 1;
+      case 1:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 10)) {
+          ptr = ctx->ParseMessage(_internal_mutable_open_document(), ptr);
+          CHK_(ptr);
+        } else
+          goto handle_unusual;
+        continue;
+      // .io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest change_document = 2;
+      case 2:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 18)) {
+          ptr = ctx->ParseMessage(_internal_mutable_change_document(), ptr);
+          CHK_(ptr);
+        } else
+          goto handle_unusual;
+        continue;
+      // .io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest get_completion_items = 3;
+      case 3:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 26)) {
+          ptr = ctx->ParseMessage(_internal_mutable_get_completion_items(), ptr);
+          CHK_(ptr);
+        } else
+          goto handle_unusual;
+        continue;
+      // .io.deephaven.proto.backplane.script.grpc.CloseDocumentRequest close_document = 4;
+      case 4:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 34)) {
+          ptr = ctx->ParseMessage(_internal_mutable_close_document(), ptr);
+          CHK_(ptr);
+        } else
+          goto handle_unusual;
+        continue;
+      // .io.deephaven.proto.backplane.grpc.Ticket console_id = 5;
+      case 5:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 42)) {
+          ptr = ctx->ParseMessage(_internal_mutable_console_id(), ptr);
+          CHK_(ptr);
+        } else
+          goto handle_unusual;
+        continue;
+      // int32 request_id = 6;
+      case 6:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 48)) {
+          request_id_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
+          CHK_(ptr);
+        } else
+          goto handle_unusual;
+        continue;
+      // .io.deephaven.proto.backplane.script.grpc.GetSignatureHelpRequest get_signature_help = 7;
+      case 7:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 58)) {
+          ptr = ctx->ParseMessage(_internal_mutable_get_signature_help(), ptr);
+          CHK_(ptr);
+        } else
+          goto handle_unusual;
+        continue;
+      // .io.deephaven.proto.backplane.script.grpc.GetHoverRequest get_hover = 8;
+      case 8:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 66)) {
+          ptr = ctx->ParseMessage(_internal_mutable_get_hover(), ptr);
+          CHK_(ptr);
+        } else
+          goto handle_unusual;
+        continue;
+      // .io.deephaven.proto.backplane.script.grpc.GetDiagnosticRequest get_diagnostic = 9;
+      case 9:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 74)) {
+          ptr = ctx->ParseMessage(_internal_mutable_get_diagnostic(), ptr);
+          CHK_(ptr);
+        } else
+          goto handle_unusual;
+        continue;
+      default:
+        goto handle_unusual;
+    }  // switch
+  handle_unusual:
+    if ((tag == 0) || ((tag & 7) == 4)) {
+      CHK_(ptr);
+      ctx->SetLastTag(tag);
+      goto message_done;
+    }
+    ptr = UnknownFieldParse(
+        tag,
+        _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(),
+        ptr, ctx);
+    CHK_(ptr != nullptr);
+  }  // while
+message_done:
+  return ptr;
+failure:
+  ptr = nullptr;
+  goto message_done;
+#undef CHK_
+}
+
+uint8_t* AutoCompleteRequest::_InternalSerialize(
+    uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const {
+  // @@protoc_insertion_point(serialize_to_array_start:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest)
+  uint32_t cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  // .io.deephaven.proto.backplane.script.grpc.OpenDocumentRequest open_document = 1;
+  if (_internal_has_open_document()) {
+    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
+      InternalWriteMessage(1, _Internal::open_document(this),
+        _Internal::open_document(this).GetCachedSize(), target, stream);
+  }
+
+  // .io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest change_document = 2;
+  if (_internal_has_change_document()) {
+    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
+      InternalWriteMessage(2, _Internal::change_document(this),
+        _Internal::change_document(this).GetCachedSize(), target, stream);
+  }
+
+  // .io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest get_completion_items = 3;
+  if (_internal_has_get_completion_items()) {
+    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
+      InternalWriteMessage(3, _Internal::get_completion_items(this),
+        _Internal::get_completion_items(this).GetCachedSize(), target, stream);
+  }
+
+  // .io.deephaven.proto.backplane.script.grpc.CloseDocumentRequest close_document = 4;
+  if (_internal_has_close_document()) {
+    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
+      InternalWriteMessage(4, _Internal::close_document(this),
+        _Internal::close_document(this).GetCachedSize(), target, stream);
+  }
+
+  // .io.deephaven.proto.backplane.grpc.Ticket console_id = 5;
+  if (this->_internal_has_console_id()) {
+    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
+      InternalWriteMessage(5, _Internal::console_id(this),
+        _Internal::console_id(this).GetCachedSize(), target, stream);
+  }
+
+  // int32 request_id = 6;
+  if (this->_internal_request_id() != 0) {
+    target = stream->EnsureSpace(target);
+    target = ::_pbi::WireFormatLite::WriteInt32ToArray(6, this->_internal_request_id(), target);
+  }
+
+  // .io.deephaven.proto.backplane.script.grpc.GetSignatureHelpRequest get_signature_help = 7;
+  if (_internal_has_get_signature_help()) {
+    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
+      InternalWriteMessage(7, _Internal::get_signature_help(this),
+        _Internal::get_signature_help(this).GetCachedSize(), target, stream);
+  }
+
+  // .io.deephaven.proto.backplane.script.grpc.GetHoverRequest get_hover = 8;
+  if (_internal_has_get_hover()) {
+    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
+      InternalWriteMessage(8, _Internal::get_hover(this),
+        _Internal::get_hover(this).GetCachedSize(), target, stream);
+  }
+
+  // .io.deephaven.proto.backplane.script.grpc.GetDiagnosticRequest get_diagnostic = 9;
+  if (_internal_has_get_diagnostic()) {
+    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
+      InternalWriteMessage(9, _Internal::get_diagnostic(this),
+        _Internal::get_diagnostic(this).GetCachedSize(), target, stream);
+  }
+
+  if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
+    target = ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray(
+        _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream);
+  }
+  // @@protoc_insertion_point(serialize_to_array_end:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest)
+  return target;
+}
+
+size_t AutoCompleteRequest::ByteSizeLong() const {
+// @@protoc_insertion_point(message_byte_size_start:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest)
+  size_t total_size = 0;
+
+  uint32_t cached_has_bits = 0;
+  // Prevent compiler warnings about cached_has_bits being unused
+  (void) cached_has_bits;
+
+  // .io.deephaven.proto.backplane.grpc.Ticket console_id = 5;
+  if (this->_internal_has_console_id()) {
+    total_size += 1 +
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
+        *console_id_);
+  }
+
+  // int32 request_id = 6;
+  if (this->_internal_request_id() != 0) {
+    total_size += ::_pbi::WireFormatLite::Int32SizePlusOne(this->_internal_request_id());
+  }
+
+  switch (request_case()) {
+    // .io.deephaven.proto.backplane.script.grpc.OpenDocumentRequest open_document = 1;
+    case kOpenDocument: {
+      total_size += 1 +
+        ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
+          *request_.open_document_);
+      break;
+    }
+    // .io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest change_document = 2;
+    case kChangeDocument: {
+      total_size += 1 +
+        ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
+          *request_.change_document_);
+      break;
+    }
+    // .io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest get_completion_items = 3;
+    case kGetCompletionItems: {
+      total_size += 1 +
+        ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
+          *request_.get_completion_items_);
+      break;
+    }
+    // .io.deephaven.proto.backplane.script.grpc.GetSignatureHelpRequest get_signature_help = 7;
+    case kGetSignatureHelp: {
+      total_size += 1 +
+        ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
+          *request_.get_signature_help_);
+      break;
+    }
+    // .io.deephaven.proto.backplane.script.grpc.GetHoverRequest get_hover = 8;
+    case kGetHover: {
+      total_size += 1 +
+        ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
+          *request_.get_hover_);
+      break;
+    }
+    // .io.deephaven.proto.backplane.script.grpc.GetDiagnosticRequest get_diagnostic = 9;
+    case kGetDiagnostic: {
+      total_size += 1 +
+        ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
+          *request_.get_diagnostic_);
+      break;
+    }
+    // .io.deephaven.proto.backplane.script.grpc.CloseDocumentRequest close_document = 4;
+    case kCloseDocument: {
+      total_size += 1 +
+        ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
+          *request_.close_document_);
+      break;
+    }
+    case REQUEST_NOT_SET: {
+      break;
+    }
+  }
+  return MaybeComputeUnknownFieldsSize(total_size, &_cached_size_);
+}
+
+const ::PROTOBUF_NAMESPACE_ID::Message::ClassData AutoCompleteRequest::_class_data_ = {
+    ::PROTOBUF_NAMESPACE_ID::Message::CopyWithSizeCheck,
+    AutoCompleteRequest::MergeImpl
+};
+const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*AutoCompleteRequest::GetClassData() const { return &_class_data_; }
+
+void AutoCompleteRequest::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to,
+                      const ::PROTOBUF_NAMESPACE_ID::Message& from) {
+  static_cast<AutoCompleteRequest *>(to)->MergeFrom(
+      static_cast<const AutoCompleteRequest &>(from));
+}
+
+
+void AutoCompleteRequest::MergeFrom(const AutoCompleteRequest& from) {
+// @@protoc_insertion_point(class_specific_merge_from_start:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest)
+  GOOGLE_DCHECK_NE(&from, this);
+  uint32_t cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  if (from._internal_has_console_id()) {
+    _internal_mutable_console_id()->::io::deephaven::proto::backplane::grpc::Ticket::MergeFrom(from._internal_console_id());
+  }
+  if (from._internal_request_id() != 0) {
+    _internal_set_request_id(from._internal_request_id());
+  }
+  switch (from.request_case()) {
+    case kOpenDocument: {
+      _internal_mutable_open_document()->::io::deephaven::proto::backplane::script::grpc::OpenDocumentRequest::MergeFrom(from._internal_open_document());
+      break;
+    }
+    case kChangeDocument: {
+      _internal_mutable_change_document()->::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest::MergeFrom(from._internal_change_document());
+      break;
+    }
+    case kGetCompletionItems: {
+      _internal_mutable_get_completion_items()->::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsRequest::MergeFrom(from._internal_get_completion_items());
+      break;
+    }
+    case kGetSignatureHelp: {
+      _internal_mutable_get_signature_help()->::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpRequest::MergeFrom(from._internal_get_signature_help());
+      break;
+    }
+    case kGetHover: {
+      _internal_mutable_get_hover()->::io::deephaven::proto::backplane::script::grpc::GetHoverRequest::MergeFrom(from._internal_get_hover());
+      break;
+    }
+    case kGetDiagnostic: {
+      _internal_mutable_get_diagnostic()->::io::deephaven::proto::backplane::script::grpc::GetDiagnosticRequest::MergeFrom(from._internal_get_diagnostic());
+      break;
+    }
+    case kCloseDocument: {
+      _internal_mutable_close_document()->::io::deephaven::proto::backplane::script::grpc::CloseDocumentRequest::MergeFrom(from._internal_close_document());
+      break;
+    }
+    case REQUEST_NOT_SET: {
+      break;
+    }
+  }
+  _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
+}
+
+void AutoCompleteRequest::CopyFrom(const AutoCompleteRequest& from) {
+// @@protoc_insertion_point(class_specific_copy_from_start:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest)
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+bool AutoCompleteRequest::IsInitialized() const {
+  return true;
+}
+
+void AutoCompleteRequest::InternalSwap(AutoCompleteRequest* other) {
+  using std::swap;
+  _internal_metadata_.InternalSwap(&other->_internal_metadata_);
+  ::PROTOBUF_NAMESPACE_ID::internal::memswap<
+      PROTOBUF_FIELD_OFFSET(AutoCompleteRequest, request_id_)
+      + sizeof(AutoCompleteRequest::request_id_)
+      - PROTOBUF_FIELD_OFFSET(AutoCompleteRequest, console_id_)>(
+          reinterpret_cast<char*>(&console_id_),
+          reinterpret_cast<char*>(&other->console_id_));
+  swap(request_, other->request_);
+  swap(_oneof_case_[0], other->_oneof_case_[0]);
+}
+
+::PROTOBUF_NAMESPACE_ID::Metadata AutoCompleteRequest::GetMetadata() const {
+  return ::_pbi::AssignDescriptors(
+      &descriptor_table_deephaven_2fproto_2fconsole_2eproto_getter, &descriptor_table_deephaven_2fproto_2fconsole_2eproto_once,
+      file_level_metadata_deephaven_2fproto_2fconsole_2eproto[16]);
+}
+
+// ===================================================================
+
+class AutoCompleteResponse::_Internal {
+ public:
+  static const ::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsResponse& completion_items(const AutoCompleteResponse* msg);
+  static const ::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpResponse& signatures(const AutoCompleteResponse* msg);
+  static const ::io::deephaven::proto::backplane::script::grpc::GetHoverResponse& hover(const AutoCompleteResponse* msg);
+  static const ::io::deephaven::proto::backplane::script::grpc::GetPullDiagnosticResponse& diagnostic(const AutoCompleteResponse* msg);
+  static const ::io::deephaven::proto::backplane::script::grpc::GetPublishDiagnosticResponse& diagnostic_publish(const AutoCompleteResponse* msg);
+};
+
+const ::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsResponse&
+AutoCompleteResponse::_Internal::completion_items(const AutoCompleteResponse* msg) {
+  return *msg->response_.completion_items_;
+}
+const ::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpResponse&
+AutoCompleteResponse::_Internal::signatures(const AutoCompleteResponse* msg) {
+  return *msg->response_.signatures_;
+}
+const ::io::deephaven::proto::backplane::script::grpc::GetHoverResponse&
+AutoCompleteResponse::_Internal::hover(const AutoCompleteResponse* msg) {
+  return *msg->response_.hover_;
+}
+const ::io::deephaven::proto::backplane::script::grpc::GetPullDiagnosticResponse&
+AutoCompleteResponse::_Internal::diagnostic(const AutoCompleteResponse* msg) {
+  return *msg->response_.diagnostic_;
+}
+const ::io::deephaven::proto::backplane::script::grpc::GetPublishDiagnosticResponse&
+AutoCompleteResponse::_Internal::diagnostic_publish(const AutoCompleteResponse* msg) {
+  return *msg->response_.diagnostic_publish_;
+}
+void AutoCompleteResponse::set_allocated_completion_items(::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsResponse* completion_items) {
+  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
+  clear_response();
+  if (completion_items) {
+    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
+      ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(completion_items);
+    if (message_arena != submessage_arena) {
+      completion_items = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
+          message_arena, completion_items, submessage_arena);
+    }
+    set_has_completion_items();
+    response_.completion_items_ = completion_items;
+  }
+  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.AutoCompleteResponse.completion_items)
+}
+void AutoCompleteResponse::set_allocated_signatures(::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpResponse* signatures) {
+  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
+  clear_response();
+  if (signatures) {
+    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
+      ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(signatures);
+    if (message_arena != submessage_arena) {
+      signatures = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
+          message_arena, signatures, submessage_arena);
+    }
+    set_has_signatures();
+    response_.signatures_ = signatures;
+  }
+  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.AutoCompleteResponse.signatures)
+}
+void AutoCompleteResponse::set_allocated_hover(::io::deephaven::proto::backplane::script::grpc::GetHoverResponse* hover) {
+  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
+  clear_response();
+  if (hover) {
+    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
+      ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(hover);
+    if (message_arena != submessage_arena) {
+      hover = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
+          message_arena, hover, submessage_arena);
+    }
+    set_has_hover();
+    response_.hover_ = hover;
+  }
+  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.AutoCompleteResponse.hover)
+}
+void AutoCompleteResponse::set_allocated_diagnostic(::io::deephaven::proto::backplane::script::grpc::GetPullDiagnosticResponse* diagnostic) {
+  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
+  clear_response();
+  if (diagnostic) {
+    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
+      ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(diagnostic);
+    if (message_arena != submessage_arena) {
+      diagnostic = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
+          message_arena, diagnostic, submessage_arena);
+    }
+    set_has_diagnostic();
+    response_.diagnostic_ = diagnostic;
+  }
+  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.AutoCompleteResponse.diagnostic)
+}
+void AutoCompleteResponse::set_allocated_diagnostic_publish(::io::deephaven::proto::backplane::script::grpc::GetPublishDiagnosticResponse* diagnostic_publish) {
+  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
+  clear_response();
+  if (diagnostic_publish) {
+    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
+      ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(diagnostic_publish);
+    if (message_arena != submessage_arena) {
+      diagnostic_publish = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
+          message_arena, diagnostic_publish, submessage_arena);
+    }
+    set_has_diagnostic_publish();
+    response_.diagnostic_publish_ = diagnostic_publish;
+  }
+  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.AutoCompleteResponse.diagnostic_publish)
+}
+AutoCompleteResponse::AutoCompleteResponse(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+                         bool is_message_owned)
+  : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned) {
+  SharedCtor();
+  // @@protoc_insertion_point(arena_constructor:io.deephaven.proto.backplane.script.grpc.AutoCompleteResponse)
+}
+AutoCompleteResponse::AutoCompleteResponse(const AutoCompleteResponse& from)
+  : ::PROTOBUF_NAMESPACE_ID::Message() {
+  _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
+  ::memcpy(&request_id_, &from.request_id_,
+    static_cast<size_t>(reinterpret_cast<char*>(&success_) -
+    reinterpret_cast<char*>(&request_id_)) + sizeof(success_));
+  clear_has_response();
+  switch (from.response_case()) {
+    case kCompletionItems: {
+      _internal_mutable_completion_items()->::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsResponse::MergeFrom(from._internal_completion_items());
+      break;
+    }
+    case kSignatures: {
+      _internal_mutable_signatures()->::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpResponse::MergeFrom(from._internal_signatures());
+      break;
+    }
+    case kHover: {
+      _internal_mutable_hover()->::io::deephaven::proto::backplane::script::grpc::GetHoverResponse::MergeFrom(from._internal_hover());
+      break;
+    }
+    case kDiagnostic: {
+      _internal_mutable_diagnostic()->::io::deephaven::proto::backplane::script::grpc::GetPullDiagnosticResponse::MergeFrom(from._internal_diagnostic());
+      break;
+    }
+    case kDiagnosticPublish: {
+      _internal_mutable_diagnostic_publish()->::io::deephaven::proto::backplane::script::grpc::GetPublishDiagnosticResponse::MergeFrom(from._internal_diagnostic_publish());
+      break;
+    }
+    case RESPONSE_NOT_SET: {
+      break;
+    }
+  }
+  // @@protoc_insertion_point(copy_constructor:io.deephaven.proto.backplane.script.grpc.AutoCompleteResponse)
+}
+
+inline void AutoCompleteResponse::SharedCtor() {
+::memset(reinterpret_cast<char*>(this) + static_cast<size_t>(
+    reinterpret_cast<char*>(&request_id_) - reinterpret_cast<char*>(this)),
+    0, static_cast<size_t>(reinterpret_cast<char*>(&success_) -
+    reinterpret_cast<char*>(&request_id_)) + sizeof(success_));
+clear_has_response();
+}
+
+AutoCompleteResponse::~AutoCompleteResponse() {
+  // @@protoc_insertion_point(destructor:io.deephaven.proto.backplane.script.grpc.AutoCompleteResponse)
+  if (auto *arena = _internal_metadata_.DeleteReturnArena<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>()) {
+  (void)arena;
+    return;
+  }
+  SharedDtor();
+}
+
+inline void AutoCompleteResponse::SharedDtor() {
+  GOOGLE_DCHECK(GetArenaForAllocation() == nullptr);
+  if (has_response()) {
+    clear_response();
+  }
+}
+
+void AutoCompleteResponse::SetCachedSize(int size) const {
+  _cached_size_.Set(size);
+}
+
+void AutoCompleteResponse::clear_response() {
+// @@protoc_insertion_point(one_of_clear_start:io.deephaven.proto.backplane.script.grpc.AutoCompleteResponse)
+  switch (response_case()) {
+    case kCompletionItems: {
+      if (GetArenaForAllocation() == nullptr) {
+        delete response_.completion_items_;
+      }
+      break;
+    }
+    case kSignatures: {
+      if (GetArenaForAllocation() == nullptr) {
+        delete response_.signatures_;
+      }
+      break;
+    }
+    case kHover: {
+      if (GetArenaForAllocation() == nullptr) {
+        delete response_.hover_;
+      }
+      break;
+    }
+    case kDiagnostic: {
+      if (GetArenaForAllocation() == nullptr) {
+        delete response_.diagnostic_;
+      }
+      break;
+    }
+    case kDiagnosticPublish: {
+      if (GetArenaForAllocation() == nullptr) {
+        delete response_.diagnostic_publish_;
+      }
+      break;
+    }
+    case RESPONSE_NOT_SET: {
+      break;
+    }
+  }
+  _oneof_case_[0] = RESPONSE_NOT_SET;
+}
+
+
+void AutoCompleteResponse::Clear() {
+// @@protoc_insertion_point(message_clear_start:io.deephaven.proto.backplane.script.grpc.AutoCompleteResponse)
+  uint32_t cached_has_bits = 0;
+  // Prevent compiler warnings about cached_has_bits being unused
+  (void) cached_has_bits;
+
+  ::memset(&request_id_, 0, static_cast<size_t>(
+      reinterpret_cast<char*>(&success_) -
+      reinterpret_cast<char*>(&request_id_)) + sizeof(success_));
+  clear_response();
+  _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
+}
+
+const char* AutoCompleteResponse::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) {
+#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
+  while (!ctx->Done(&ptr)) {
+    uint32_t tag;
+    ptr = ::_pbi::ReadTag(ptr, &tag);
+    switch (tag >> 3) {
+      // .io.deephaven.proto.backplane.script.grpc.GetCompletionItemsResponse completion_items = 1;
+      case 1:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 10)) {
+          ptr = ctx->ParseMessage(_internal_mutable_completion_items(), ptr);
+          CHK_(ptr);
+        } else
+          goto handle_unusual;
+        continue;
+      // int32 request_id = 2;
+      case 2:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 16)) {
+          request_id_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
+          CHK_(ptr);
+        } else
+          goto handle_unusual;
+        continue;
+      // bool success = 3;
+      case 3:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 24)) {
+          success_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint64(&ptr);
+          CHK_(ptr);
+        } else
+          goto handle_unusual;
+        continue;
+      // .io.deephaven.proto.backplane.script.grpc.GetSignatureHelpResponse signatures = 4;
+      case 4:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 34)) {
+          ptr = ctx->ParseMessage(_internal_mutable_signatures(), ptr);
+          CHK_(ptr);
+        } else
+          goto handle_unusual;
+        continue;
+      // .io.deephaven.proto.backplane.script.grpc.GetHoverResponse hover = 5;
+      case 5:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 42)) {
+          ptr = ctx->ParseMessage(_internal_mutable_hover(), ptr);
+          CHK_(ptr);
+        } else
+          goto handle_unusual;
+        continue;
+      // .io.deephaven.proto.backplane.script.grpc.GetPullDiagnosticResponse diagnostic = 6;
+      case 6:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 50)) {
+          ptr = ctx->ParseMessage(_internal_mutable_diagnostic(), ptr);
+          CHK_(ptr);
+        } else
+          goto handle_unusual;
+        continue;
+      // .io.deephaven.proto.backplane.script.grpc.GetPublishDiagnosticResponse diagnostic_publish = 7;
+      case 7:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 58)) {
+          ptr = ctx->ParseMessage(_internal_mutable_diagnostic_publish(), ptr);
+          CHK_(ptr);
+        } else
+          goto handle_unusual;
+        continue;
+      default:
+        goto handle_unusual;
+    }  // switch
+  handle_unusual:
+    if ((tag == 0) || ((tag & 7) == 4)) {
+      CHK_(ptr);
+      ctx->SetLastTag(tag);
+      goto message_done;
+    }
+    ptr = UnknownFieldParse(
+        tag,
+        _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(),
+        ptr, ctx);
+    CHK_(ptr != nullptr);
+  }  // while
+message_done:
+  return ptr;
+failure:
+  ptr = nullptr;
+  goto message_done;
+#undef CHK_
+}
+
+uint8_t* AutoCompleteResponse::_InternalSerialize(
+    uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const {
+  // @@protoc_insertion_point(serialize_to_array_start:io.deephaven.proto.backplane.script.grpc.AutoCompleteResponse)
+  uint32_t cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  // .io.deephaven.proto.backplane.script.grpc.GetCompletionItemsResponse completion_items = 1;
+  if (_internal_has_completion_items()) {
+    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
+      InternalWriteMessage(1, _Internal::completion_items(this),
+        _Internal::completion_items(this).GetCachedSize(), target, stream);
+  }
+
+  // int32 request_id = 2;
+  if (this->_internal_request_id() != 0) {
+    target = stream->EnsureSpace(target);
+    target = ::_pbi::WireFormatLite::WriteInt32ToArray(2, this->_internal_request_id(), target);
+  }
+
+  // bool success = 3;
+  if (this->_internal_success() != 0) {
+    target = stream->EnsureSpace(target);
+    target = ::_pbi::WireFormatLite::WriteBoolToArray(3, this->_internal_success(), target);
+  }
+
+  // .io.deephaven.proto.backplane.script.grpc.GetSignatureHelpResponse signatures = 4;
+  if (_internal_has_signatures()) {
+    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
+      InternalWriteMessage(4, _Internal::signatures(this),
+        _Internal::signatures(this).GetCachedSize(), target, stream);
+  }
+
+  // .io.deephaven.proto.backplane.script.grpc.GetHoverResponse hover = 5;
+  if (_internal_has_hover()) {
+    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
+      InternalWriteMessage(5, _Internal::hover(this),
+        _Internal::hover(this).GetCachedSize(), target, stream);
+  }
+
+  // .io.deephaven.proto.backplane.script.grpc.GetPullDiagnosticResponse diagnostic = 6;
+  if (_internal_has_diagnostic()) {
+    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
+      InternalWriteMessage(6, _Internal::diagnostic(this),
+        _Internal::diagnostic(this).GetCachedSize(), target, stream);
+  }
+
+  // .io.deephaven.proto.backplane.script.grpc.GetPublishDiagnosticResponse diagnostic_publish = 7;
+  if (_internal_has_diagnostic_publish()) {
+    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
+      InternalWriteMessage(7, _Internal::diagnostic_publish(this),
+        _Internal::diagnostic_publish(this).GetCachedSize(), target, stream);
+  }
+
+  if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
+    target = ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray(
+        _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream);
+  }
+  // @@protoc_insertion_point(serialize_to_array_end:io.deephaven.proto.backplane.script.grpc.AutoCompleteResponse)
+  return target;
+}
+
+size_t AutoCompleteResponse::ByteSizeLong() const {
+// @@protoc_insertion_point(message_byte_size_start:io.deephaven.proto.backplane.script.grpc.AutoCompleteResponse)
+  size_t total_size = 0;
+
+  uint32_t cached_has_bits = 0;
+  // Prevent compiler warnings about cached_has_bits being unused
+  (void) cached_has_bits;
+
+  // int32 request_id = 2;
+  if (this->_internal_request_id() != 0) {
+    total_size += ::_pbi::WireFormatLite::Int32SizePlusOne(this->_internal_request_id());
+  }
+
+  // bool success = 3;
+  if (this->_internal_success() != 0) {
+    total_size += 1 + 1;
+  }
+
+  switch (response_case()) {
+    // .io.deephaven.proto.backplane.script.grpc.GetCompletionItemsResponse completion_items = 1;
+    case kCompletionItems: {
+      total_size += 1 +
+        ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
+          *response_.completion_items_);
+      break;
+    }
+    // .io.deephaven.proto.backplane.script.grpc.GetSignatureHelpResponse signatures = 4;
+    case kSignatures: {
+      total_size += 1 +
+        ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
+          *response_.signatures_);
+      break;
+    }
+    // .io.deephaven.proto.backplane.script.grpc.GetHoverResponse hover = 5;
+    case kHover: {
+      total_size += 1 +
+        ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
+          *response_.hover_);
+      break;
+    }
+    // .io.deephaven.proto.backplane.script.grpc.GetPullDiagnosticResponse diagnostic = 6;
+    case kDiagnostic: {
+      total_size += 1 +
+        ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
+          *response_.diagnostic_);
+      break;
+    }
+    // .io.deephaven.proto.backplane.script.grpc.GetPublishDiagnosticResponse diagnostic_publish = 7;
+    case kDiagnosticPublish: {
+      total_size += 1 +
+        ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
+          *response_.diagnostic_publish_);
+      break;
+    }
+    case RESPONSE_NOT_SET: {
+      break;
+    }
+  }
+  return MaybeComputeUnknownFieldsSize(total_size, &_cached_size_);
+}
+
+const ::PROTOBUF_NAMESPACE_ID::Message::ClassData AutoCompleteResponse::_class_data_ = {
+    ::PROTOBUF_NAMESPACE_ID::Message::CopyWithSizeCheck,
+    AutoCompleteResponse::MergeImpl
+};
+const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*AutoCompleteResponse::GetClassData() const { return &_class_data_; }
+
+void AutoCompleteResponse::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to,
+                      const ::PROTOBUF_NAMESPACE_ID::Message& from) {
+  static_cast<AutoCompleteResponse *>(to)->MergeFrom(
+      static_cast<const AutoCompleteResponse &>(from));
+}
+
+
+void AutoCompleteResponse::MergeFrom(const AutoCompleteResponse& from) {
+// @@protoc_insertion_point(class_specific_merge_from_start:io.deephaven.proto.backplane.script.grpc.AutoCompleteResponse)
+  GOOGLE_DCHECK_NE(&from, this);
+  uint32_t cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  if (from._internal_request_id() != 0) {
+    _internal_set_request_id(from._internal_request_id());
+  }
+  if (from._internal_success() != 0) {
+    _internal_set_success(from._internal_success());
+  }
+  switch (from.response_case()) {
+    case kCompletionItems: {
+      _internal_mutable_completion_items()->::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsResponse::MergeFrom(from._internal_completion_items());
+      break;
+    }
+    case kSignatures: {
+      _internal_mutable_signatures()->::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpResponse::MergeFrom(from._internal_signatures());
+      break;
+    }
+    case kHover: {
+      _internal_mutable_hover()->::io::deephaven::proto::backplane::script::grpc::GetHoverResponse::MergeFrom(from._internal_hover());
+      break;
+    }
+    case kDiagnostic: {
+      _internal_mutable_diagnostic()->::io::deephaven::proto::backplane::script::grpc::GetPullDiagnosticResponse::MergeFrom(from._internal_diagnostic());
+      break;
+    }
+    case kDiagnosticPublish: {
+      _internal_mutable_diagnostic_publish()->::io::deephaven::proto::backplane::script::grpc::GetPublishDiagnosticResponse::MergeFrom(from._internal_diagnostic_publish());
+      break;
+    }
+    case RESPONSE_NOT_SET: {
+      break;
+    }
+  }
+  _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
+}
+
+void AutoCompleteResponse::CopyFrom(const AutoCompleteResponse& from) {
+// @@protoc_insertion_point(class_specific_copy_from_start:io.deephaven.proto.backplane.script.grpc.AutoCompleteResponse)
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+bool AutoCompleteResponse::IsInitialized() const {
+  return true;
+}
+
+void AutoCompleteResponse::InternalSwap(AutoCompleteResponse* other) {
+  using std::swap;
+  _internal_metadata_.InternalSwap(&other->_internal_metadata_);
+  ::PROTOBUF_NAMESPACE_ID::internal::memswap<
+      PROTOBUF_FIELD_OFFSET(AutoCompleteResponse, success_)
+      + sizeof(AutoCompleteResponse::success_)
+      - PROTOBUF_FIELD_OFFSET(AutoCompleteResponse, request_id_)>(
+          reinterpret_cast<char*>(&request_id_),
+          reinterpret_cast<char*>(&other->request_id_));
+  swap(response_, other->response_);
+  swap(_oneof_case_[0], other->_oneof_case_[0]);
+}
+
+::PROTOBUF_NAMESPACE_ID::Metadata AutoCompleteResponse::GetMetadata() const {
+  return ::_pbi::AssignDescriptors(
+      &descriptor_table_deephaven_2fproto_2fconsole_2eproto_getter, &descriptor_table_deephaven_2fproto_2fconsole_2eproto_once,
+      file_level_metadata_deephaven_2fproto_2fconsole_2eproto[17]);
+}
+
+// ===================================================================
+
+class BrowserNextResponse::_Internal {
+ public:
+};
+
+BrowserNextResponse::BrowserNextResponse(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+                         bool is_message_owned)
+  : ::PROTOBUF_NAMESPACE_ID::internal::ZeroFieldsBase(arena, is_message_owned) {
+  // @@protoc_insertion_point(arena_constructor:io.deephaven.proto.backplane.script.grpc.BrowserNextResponse)
+}
+BrowserNextResponse::BrowserNextResponse(const BrowserNextResponse& from)
+  : ::PROTOBUF_NAMESPACE_ID::internal::ZeroFieldsBase() {
+  _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
+  // @@protoc_insertion_point(copy_constructor:io.deephaven.proto.backplane.script.grpc.BrowserNextResponse)
+}
+
+
+
+
+
+const ::PROTOBUF_NAMESPACE_ID::Message::ClassData BrowserNextResponse::_class_data_ = {
+    ::PROTOBUF_NAMESPACE_ID::internal::ZeroFieldsBase::CopyImpl,
+    ::PROTOBUF_NAMESPACE_ID::internal::ZeroFieldsBase::MergeImpl,
+};
+const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*BrowserNextResponse::GetClassData() const { return &_class_data_; }
+
+
+
+
+
+
+
+::PROTOBUF_NAMESPACE_ID::Metadata BrowserNextResponse::GetMetadata() const {
+  return ::_pbi::AssignDescriptors(
+      &descriptor_table_deephaven_2fproto_2fconsole_2eproto_getter, &descriptor_table_deephaven_2fproto_2fconsole_2eproto_once,
+      file_level_metadata_deephaven_2fproto_2fconsole_2eproto[18]);
+}
+
+// ===================================================================
+
+class OpenDocumentRequest::_Internal {
+ public:
+  static const ::io::deephaven::proto::backplane::grpc::Ticket& console_id(const OpenDocumentRequest* msg);
+  static const ::io::deephaven::proto::backplane::script::grpc::TextDocumentItem& text_document(const OpenDocumentRequest* msg);
+};
+
+const ::io::deephaven::proto::backplane::grpc::Ticket&
+OpenDocumentRequest::_Internal::console_id(const OpenDocumentRequest* msg) {
+  return *msg->console_id_;
+}
+const ::io::deephaven::proto::backplane::script::grpc::TextDocumentItem&
+OpenDocumentRequest::_Internal::text_document(const OpenDocumentRequest* msg) {
+  return *msg->text_document_;
+}
+void OpenDocumentRequest::clear_console_id() {
+  if (GetArenaForAllocation() == nullptr && console_id_ != nullptr) {
+    delete console_id_;
+  }
+  console_id_ = nullptr;
+}
+OpenDocumentRequest::OpenDocumentRequest(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+                         bool is_message_owned)
+  : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned) {
+  SharedCtor();
+  // @@protoc_insertion_point(arena_constructor:io.deephaven.proto.backplane.script.grpc.OpenDocumentRequest)
+}
+OpenDocumentRequest::OpenDocumentRequest(const OpenDocumentRequest& from)
+  : ::PROTOBUF_NAMESPACE_ID::Message() {
+  _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
+  if (from._internal_has_console_id()) {
+    console_id_ = new ::io::deephaven::proto::backplane::grpc::Ticket(*from.console_id_);
+  } else {
+    console_id_ = nullptr;
+  }
+  if (from._internal_has_text_document()) {
+    text_document_ = new ::io::deephaven::proto::backplane::script::grpc::TextDocumentItem(*from.text_document_);
+  } else {
+    text_document_ = nullptr;
+  }
+  // @@protoc_insertion_point(copy_constructor:io.deephaven.proto.backplane.script.grpc.OpenDocumentRequest)
+}
+
+inline void OpenDocumentRequest::SharedCtor() {
+::memset(reinterpret_cast<char*>(this) + static_cast<size_t>(
+    reinterpret_cast<char*>(&console_id_) - reinterpret_cast<char*>(this)),
+    0, static_cast<size_t>(reinterpret_cast<char*>(&text_document_) -
+    reinterpret_cast<char*>(&console_id_)) + sizeof(text_document_));
+}
+
+OpenDocumentRequest::~OpenDocumentRequest() {
+  // @@protoc_insertion_point(destructor:io.deephaven.proto.backplane.script.grpc.OpenDocumentRequest)
+  if (auto *arena = _internal_metadata_.DeleteReturnArena<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>()) {
+  (void)arena;
+    return;
+  }
+  SharedDtor();
+}
+
+inline void OpenDocumentRequest::SharedDtor() {
+  GOOGLE_DCHECK(GetArenaForAllocation() == nullptr);
+  if (this != internal_default_instance()) delete console_id_;
+  if (this != internal_default_instance()) delete text_document_;
+}
+
+void OpenDocumentRequest::SetCachedSize(int size) const {
+  _cached_size_.Set(size);
+}
+
+void OpenDocumentRequest::Clear() {
+// @@protoc_insertion_point(message_clear_start:io.deephaven.proto.backplane.script.grpc.OpenDocumentRequest)
+  uint32_t cached_has_bits = 0;
+  // Prevent compiler warnings about cached_has_bits being unused
+  (void) cached_has_bits;
+
+  if (GetArenaForAllocation() == nullptr && console_id_ != nullptr) {
+    delete console_id_;
+  }
+  console_id_ = nullptr;
+  if (GetArenaForAllocation() == nullptr && text_document_ != nullptr) {
+    delete text_document_;
+  }
+  text_document_ = nullptr;
+  _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
+}
+
+const char* OpenDocumentRequest::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) {
+#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
+  while (!ctx->Done(&ptr)) {
+    uint32_t tag;
+    ptr = ::_pbi::ReadTag(ptr, &tag);
+    switch (tag >> 3) {
+      // .io.deephaven.proto.backplane.grpc.Ticket console_id = 1 [deprecated = true];
+      case 1:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 10)) {
+          ptr = ctx->ParseMessage(_internal_mutable_console_id(), ptr);
+          CHK_(ptr);
+        } else
+          goto handle_unusual;
+        continue;
+      // .io.deephaven.proto.backplane.script.grpc.TextDocumentItem text_document = 2;
+      case 2:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 18)) {
+          ptr = ctx->ParseMessage(_internal_mutable_text_document(), ptr);
+          CHK_(ptr);
+        } else
+          goto handle_unusual;
+        continue;
+      default:
+        goto handle_unusual;
+    }  // switch
+  handle_unusual:
+    if ((tag == 0) || ((tag & 7) == 4)) {
+      CHK_(ptr);
+      ctx->SetLastTag(tag);
+      goto message_done;
+    }
+    ptr = UnknownFieldParse(
+        tag,
+        _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(),
+        ptr, ctx);
+    CHK_(ptr != nullptr);
+  }  // while
+message_done:
+  return ptr;
+failure:
+  ptr = nullptr;
+  goto message_done;
+#undef CHK_
+}
+
+uint8_t* OpenDocumentRequest::_InternalSerialize(
+    uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const {
+  // @@protoc_insertion_point(serialize_to_array_start:io.deephaven.proto.backplane.script.grpc.OpenDocumentRequest)
+  uint32_t cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  // .io.deephaven.proto.backplane.grpc.Ticket console_id = 1 [deprecated = true];
+  if (this->_internal_has_console_id()) {
+    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
+      InternalWriteMessage(1, _Internal::console_id(this),
+        _Internal::console_id(this).GetCachedSize(), target, stream);
+  }
+
+  // .io.deephaven.proto.backplane.script.grpc.TextDocumentItem text_document = 2;
+  if (this->_internal_has_text_document()) {
+    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
+      InternalWriteMessage(2, _Internal::text_document(this),
+        _Internal::text_document(this).GetCachedSize(), target, stream);
+  }
+
+  if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
+    target = ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray(
+        _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream);
+  }
+  // @@protoc_insertion_point(serialize_to_array_end:io.deephaven.proto.backplane.script.grpc.OpenDocumentRequest)
+  return target;
+}
+
+size_t OpenDocumentRequest::ByteSizeLong() const {
+// @@protoc_insertion_point(message_byte_size_start:io.deephaven.proto.backplane.script.grpc.OpenDocumentRequest)
+  size_t total_size = 0;
+
+  uint32_t cached_has_bits = 0;
+  // Prevent compiler warnings about cached_has_bits being unused
+  (void) cached_has_bits;
+
+  // .io.deephaven.proto.backplane.grpc.Ticket console_id = 1 [deprecated = true];
+  if (this->_internal_has_console_id()) {
+    total_size += 1 +
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
+        *console_id_);
+  }
+
+  // .io.deephaven.proto.backplane.script.grpc.TextDocumentItem text_document = 2;
+  if (this->_internal_has_text_document()) {
+    total_size += 1 +
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
+        *text_document_);
+  }
+
+  return MaybeComputeUnknownFieldsSize(total_size, &_cached_size_);
+}
+
+const ::PROTOBUF_NAMESPACE_ID::Message::ClassData OpenDocumentRequest::_class_data_ = {
+    ::PROTOBUF_NAMESPACE_ID::Message::CopyWithSizeCheck,
+    OpenDocumentRequest::MergeImpl
+};
+const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*OpenDocumentRequest::GetClassData() const { return &_class_data_; }
+
+void OpenDocumentRequest::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to,
+                      const ::PROTOBUF_NAMESPACE_ID::Message& from) {
+  static_cast<OpenDocumentRequest *>(to)->MergeFrom(
+      static_cast<const OpenDocumentRequest &>(from));
+}
+
+
+void OpenDocumentRequest::MergeFrom(const OpenDocumentRequest& from) {
+// @@protoc_insertion_point(class_specific_merge_from_start:io.deephaven.proto.backplane.script.grpc.OpenDocumentRequest)
+  GOOGLE_DCHECK_NE(&from, this);
+  uint32_t cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  if (from._internal_has_console_id()) {
+    _internal_mutable_console_id()->::io::deephaven::proto::backplane::grpc::Ticket::MergeFrom(from._internal_console_id());
+  }
+  if (from._internal_has_text_document()) {
+    _internal_mutable_text_document()->::io::deephaven::proto::backplane::script::grpc::TextDocumentItem::MergeFrom(from._internal_text_document());
+  }
+  _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
+}
+
+void OpenDocumentRequest::CopyFrom(const OpenDocumentRequest& from) {
+// @@protoc_insertion_point(class_specific_copy_from_start:io.deephaven.proto.backplane.script.grpc.OpenDocumentRequest)
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+bool OpenDocumentRequest::IsInitialized() const {
+  return true;
+}
+
+void OpenDocumentRequest::InternalSwap(OpenDocumentRequest* other) {
+  using std::swap;
+  _internal_metadata_.InternalSwap(&other->_internal_metadata_);
+  ::PROTOBUF_NAMESPACE_ID::internal::memswap<
+      PROTOBUF_FIELD_OFFSET(OpenDocumentRequest, text_document_)
+      + sizeof(OpenDocumentRequest::text_document_)
+      - PROTOBUF_FIELD_OFFSET(OpenDocumentRequest, console_id_)>(
+          reinterpret_cast<char*>(&console_id_),
+          reinterpret_cast<char*>(&other->console_id_));
+}
+
+::PROTOBUF_NAMESPACE_ID::Metadata OpenDocumentRequest::GetMetadata() const {
+  return ::_pbi::AssignDescriptors(
+      &descriptor_table_deephaven_2fproto_2fconsole_2eproto_getter, &descriptor_table_deephaven_2fproto_2fconsole_2eproto_once,
+      file_level_metadata_deephaven_2fproto_2fconsole_2eproto[19]);
+}
+
+// ===================================================================
+
+class TextDocumentItem::_Internal {
+ public:
+};
+
+TextDocumentItem::TextDocumentItem(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+                         bool is_message_owned)
+  : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned) {
+  SharedCtor();
+  // @@protoc_insertion_point(arena_constructor:io.deephaven.proto.backplane.script.grpc.TextDocumentItem)
+}
+TextDocumentItem::TextDocumentItem(const TextDocumentItem& from)
+  : ::PROTOBUF_NAMESPACE_ID::Message() {
+  _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
+  uri_.InitDefault();
+  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+    uri_.Set("", GetArenaForAllocation());
+  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  if (!from._internal_uri().empty()) {
+    uri_.Set(from._internal_uri(), 
+      GetArenaForAllocation());
+  }
+  language_id_.InitDefault();
+  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+    language_id_.Set("", GetArenaForAllocation());
+  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  if (!from._internal_language_id().empty()) {
+    language_id_.Set(from._internal_language_id(), 
+      GetArenaForAllocation());
+  }
+  text_.InitDefault();
+  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+    text_.Set("", GetArenaForAllocation());
+  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  if (!from._internal_text().empty()) {
+    text_.Set(from._internal_text(), 
+      GetArenaForAllocation());
+  }
+  version_ = from.version_;
+  // @@protoc_insertion_point(copy_constructor:io.deephaven.proto.backplane.script.grpc.TextDocumentItem)
+}
+
+inline void TextDocumentItem::SharedCtor() {
+uri_.InitDefault();
+#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  uri_.Set("", GetArenaForAllocation());
+#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+language_id_.InitDefault();
+#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  language_id_.Set("", GetArenaForAllocation());
+#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+text_.InitDefault();
+#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  text_.Set("", GetArenaForAllocation());
+#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+version_ = 0;
+}
+
+TextDocumentItem::~TextDocumentItem() {
+  // @@protoc_insertion_point(destructor:io.deephaven.proto.backplane.script.grpc.TextDocumentItem)
+  if (auto *arena = _internal_metadata_.DeleteReturnArena<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>()) {
+  (void)arena;
+    return;
+  }
+  SharedDtor();
+}
+
+inline void TextDocumentItem::SharedDtor() {
+  GOOGLE_DCHECK(GetArenaForAllocation() == nullptr);
+  uri_.Destroy();
+  language_id_.Destroy();
+  text_.Destroy();
+}
+
+void TextDocumentItem::SetCachedSize(int size) const {
+  _cached_size_.Set(size);
+}
+
+void TextDocumentItem::Clear() {
+// @@protoc_insertion_point(message_clear_start:io.deephaven.proto.backplane.script.grpc.TextDocumentItem)
+  uint32_t cached_has_bits = 0;
+  // Prevent compiler warnings about cached_has_bits being unused
+  (void) cached_has_bits;
+
+  uri_.ClearToEmpty();
+  language_id_.ClearToEmpty();
+  text_.ClearToEmpty();
+  version_ = 0;
+  _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
+}
+
+const char* TextDocumentItem::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) {
+#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
+  while (!ctx->Done(&ptr)) {
+    uint32_t tag;
+    ptr = ::_pbi::ReadTag(ptr, &tag);
+    switch (tag >> 3) {
+      // string uri = 1;
+      case 1:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 10)) {
+          auto str = _internal_mutable_uri();
+          ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
+          CHK_(ptr);
+          CHK_(::_pbi::VerifyUTF8(str, "io.deephaven.proto.backplane.script.grpc.TextDocumentItem.uri"));
+        } else
+          goto handle_unusual;
+        continue;
+      // string language_id = 2;
+      case 2:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 18)) {
+          auto str = _internal_mutable_language_id();
+          ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
+          CHK_(ptr);
+          CHK_(::_pbi::VerifyUTF8(str, "io.deephaven.proto.backplane.script.grpc.TextDocumentItem.language_id"));
+        } else
+          goto handle_unusual;
+        continue;
+      // int32 version = 3;
+      case 3:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 24)) {
+          version_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
+          CHK_(ptr);
+        } else
+          goto handle_unusual;
+        continue;
+      // string text = 4;
+      case 4:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 34)) {
+          auto str = _internal_mutable_text();
+          ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
+          CHK_(ptr);
+          CHK_(::_pbi::VerifyUTF8(str, "io.deephaven.proto.backplane.script.grpc.TextDocumentItem.text"));
+        } else
+          goto handle_unusual;
+        continue;
+      default:
+        goto handle_unusual;
+    }  // switch
+  handle_unusual:
+    if ((tag == 0) || ((tag & 7) == 4)) {
+      CHK_(ptr);
+      ctx->SetLastTag(tag);
+      goto message_done;
+    }
+    ptr = UnknownFieldParse(
+        tag,
+        _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(),
+        ptr, ctx);
+    CHK_(ptr != nullptr);
+  }  // while
+message_done:
+  return ptr;
+failure:
+  ptr = nullptr;
+  goto message_done;
+#undef CHK_
+}
+
+uint8_t* TextDocumentItem::_InternalSerialize(
+    uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const {
+  // @@protoc_insertion_point(serialize_to_array_start:io.deephaven.proto.backplane.script.grpc.TextDocumentItem)
+  uint32_t cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  // string uri = 1;
+  if (!this->_internal_uri().empty()) {
+    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
+      this->_internal_uri().data(), static_cast<int>(this->_internal_uri().length()),
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
+      "io.deephaven.proto.backplane.script.grpc.TextDocumentItem.uri");
+    target = stream->WriteStringMaybeAliased(
+        1, this->_internal_uri(), target);
+  }
+
+  // string language_id = 2;
+  if (!this->_internal_language_id().empty()) {
+    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
+      this->_internal_language_id().data(), static_cast<int>(this->_internal_language_id().length()),
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
+      "io.deephaven.proto.backplane.script.grpc.TextDocumentItem.language_id");
+    target = stream->WriteStringMaybeAliased(
+        2, this->_internal_language_id(), target);
+  }
+
+  // int32 version = 3;
+  if (this->_internal_version() != 0) {
+    target = stream->EnsureSpace(target);
+    target = ::_pbi::WireFormatLite::WriteInt32ToArray(3, this->_internal_version(), target);
+  }
+
+  // string text = 4;
+  if (!this->_internal_text().empty()) {
+    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
+      this->_internal_text().data(), static_cast<int>(this->_internal_text().length()),
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
+      "io.deephaven.proto.backplane.script.grpc.TextDocumentItem.text");
+    target = stream->WriteStringMaybeAliased(
+        4, this->_internal_text(), target);
+  }
+
+  if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
+    target = ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray(
+        _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream);
+  }
+  // @@protoc_insertion_point(serialize_to_array_end:io.deephaven.proto.backplane.script.grpc.TextDocumentItem)
+  return target;
+}
+
+size_t TextDocumentItem::ByteSizeLong() const {
+// @@protoc_insertion_point(message_byte_size_start:io.deephaven.proto.backplane.script.grpc.TextDocumentItem)
+  size_t total_size = 0;
+
+  uint32_t cached_has_bits = 0;
+  // Prevent compiler warnings about cached_has_bits being unused
+  (void) cached_has_bits;
+
+  // string uri = 1;
+  if (!this->_internal_uri().empty()) {
+    total_size += 1 +
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
+        this->_internal_uri());
+  }
+
+  // string language_id = 2;
+  if (!this->_internal_language_id().empty()) {
+    total_size += 1 +
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
+        this->_internal_language_id());
+  }
+
+  // string text = 4;
+  if (!this->_internal_text().empty()) {
+    total_size += 1 +
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
+        this->_internal_text());
+  }
+
+  // int32 version = 3;
+  if (this->_internal_version() != 0) {
+    total_size += ::_pbi::WireFormatLite::Int32SizePlusOne(this->_internal_version());
+  }
+
+  return MaybeComputeUnknownFieldsSize(total_size, &_cached_size_);
+}
+
+const ::PROTOBUF_NAMESPACE_ID::Message::ClassData TextDocumentItem::_class_data_ = {
+    ::PROTOBUF_NAMESPACE_ID::Message::CopyWithSizeCheck,
+    TextDocumentItem::MergeImpl
+};
+const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*TextDocumentItem::GetClassData() const { return &_class_data_; }
+
+void TextDocumentItem::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to,
+                      const ::PROTOBUF_NAMESPACE_ID::Message& from) {
+  static_cast<TextDocumentItem *>(to)->MergeFrom(
+      static_cast<const TextDocumentItem &>(from));
+}
+
+
+void TextDocumentItem::MergeFrom(const TextDocumentItem& from) {
+// @@protoc_insertion_point(class_specific_merge_from_start:io.deephaven.proto.backplane.script.grpc.TextDocumentItem)
+  GOOGLE_DCHECK_NE(&from, this);
+  uint32_t cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  if (!from._internal_uri().empty()) {
+    _internal_set_uri(from._internal_uri());
+  }
+  if (!from._internal_language_id().empty()) {
+    _internal_set_language_id(from._internal_language_id());
+  }
+  if (!from._internal_text().empty()) {
+    _internal_set_text(from._internal_text());
+  }
+  if (from._internal_version() != 0) {
+    _internal_set_version(from._internal_version());
+  }
+  _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
+}
+
+void TextDocumentItem::CopyFrom(const TextDocumentItem& from) {
+// @@protoc_insertion_point(class_specific_copy_from_start:io.deephaven.proto.backplane.script.grpc.TextDocumentItem)
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+bool TextDocumentItem::IsInitialized() const {
+  return true;
+}
+
+void TextDocumentItem::InternalSwap(TextDocumentItem* other) {
+  using std::swap;
+  auto* lhs_arena = GetArenaForAllocation();
+  auto* rhs_arena = other->GetArenaForAllocation();
+  _internal_metadata_.InternalSwap(&other->_internal_metadata_);
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
+      &uri_, lhs_arena,
+      &other->uri_, rhs_arena
+  );
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
+      &language_id_, lhs_arena,
+      &other->language_id_, rhs_arena
+  );
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
+      &text_, lhs_arena,
+      &other->text_, rhs_arena
+  );
+  swap(version_, other->version_);
+}
+
+::PROTOBUF_NAMESPACE_ID::Metadata TextDocumentItem::GetMetadata() const {
+  return ::_pbi::AssignDescriptors(
+      &descriptor_table_deephaven_2fproto_2fconsole_2eproto_getter, &descriptor_table_deephaven_2fproto_2fconsole_2eproto_once,
+      file_level_metadata_deephaven_2fproto_2fconsole_2eproto[20]);
+}
+
+// ===================================================================
+
+class CloseDocumentRequest::_Internal {
+ public:
+  static const ::io::deephaven::proto::backplane::grpc::Ticket& console_id(const CloseDocumentRequest* msg);
+  static const ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier& text_document(const CloseDocumentRequest* msg);
+};
+
+const ::io::deephaven::proto::backplane::grpc::Ticket&
+CloseDocumentRequest::_Internal::console_id(const CloseDocumentRequest* msg) {
+  return *msg->console_id_;
+}
+const ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier&
+CloseDocumentRequest::_Internal::text_document(const CloseDocumentRequest* msg) {
+  return *msg->text_document_;
+}
+void CloseDocumentRequest::clear_console_id() {
+  if (GetArenaForAllocation() == nullptr && console_id_ != nullptr) {
+    delete console_id_;
+  }
+  console_id_ = nullptr;
+}
+CloseDocumentRequest::CloseDocumentRequest(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+                         bool is_message_owned)
+  : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned) {
+  SharedCtor();
+  // @@protoc_insertion_point(arena_constructor:io.deephaven.proto.backplane.script.grpc.CloseDocumentRequest)
+}
+CloseDocumentRequest::CloseDocumentRequest(const CloseDocumentRequest& from)
+  : ::PROTOBUF_NAMESPACE_ID::Message() {
+  _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
+  if (from._internal_has_console_id()) {
+    console_id_ = new ::io::deephaven::proto::backplane::grpc::Ticket(*from.console_id_);
+  } else {
+    console_id_ = nullptr;
+  }
+  if (from._internal_has_text_document()) {
+    text_document_ = new ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier(*from.text_document_);
+  } else {
+    text_document_ = nullptr;
+  }
+  // @@protoc_insertion_point(copy_constructor:io.deephaven.proto.backplane.script.grpc.CloseDocumentRequest)
+}
+
+inline void CloseDocumentRequest::SharedCtor() {
+::memset(reinterpret_cast<char*>(this) + static_cast<size_t>(
+    reinterpret_cast<char*>(&console_id_) - reinterpret_cast<char*>(this)),
+    0, static_cast<size_t>(reinterpret_cast<char*>(&text_document_) -
+    reinterpret_cast<char*>(&console_id_)) + sizeof(text_document_));
+}
+
+CloseDocumentRequest::~CloseDocumentRequest() {
+  // @@protoc_insertion_point(destructor:io.deephaven.proto.backplane.script.grpc.CloseDocumentRequest)
+  if (auto *arena = _internal_metadata_.DeleteReturnArena<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>()) {
+  (void)arena;
+    return;
+  }
+  SharedDtor();
+}
+
+inline void CloseDocumentRequest::SharedDtor() {
+  GOOGLE_DCHECK(GetArenaForAllocation() == nullptr);
+  if (this != internal_default_instance()) delete console_id_;
+  if (this != internal_default_instance()) delete text_document_;
+}
+
+void CloseDocumentRequest::SetCachedSize(int size) const {
+  _cached_size_.Set(size);
+}
+
+void CloseDocumentRequest::Clear() {
+// @@protoc_insertion_point(message_clear_start:io.deephaven.proto.backplane.script.grpc.CloseDocumentRequest)
+  uint32_t cached_has_bits = 0;
+  // Prevent compiler warnings about cached_has_bits being unused
+  (void) cached_has_bits;
+
+  if (GetArenaForAllocation() == nullptr && console_id_ != nullptr) {
+    delete console_id_;
+  }
+  console_id_ = nullptr;
+  if (GetArenaForAllocation() == nullptr && text_document_ != nullptr) {
+    delete text_document_;
+  }
+  text_document_ = nullptr;
+  _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
+}
+
+const char* CloseDocumentRequest::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) {
+#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
+  while (!ctx->Done(&ptr)) {
+    uint32_t tag;
+    ptr = ::_pbi::ReadTag(ptr, &tag);
+    switch (tag >> 3) {
+      // .io.deephaven.proto.backplane.grpc.Ticket console_id = 1 [deprecated = true];
+      case 1:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 10)) {
+          ptr = ctx->ParseMessage(_internal_mutable_console_id(), ptr);
+          CHK_(ptr);
+        } else
+          goto handle_unusual;
+        continue;
+      // .io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier text_document = 2;
+      case 2:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 18)) {
+          ptr = ctx->ParseMessage(_internal_mutable_text_document(), ptr);
+          CHK_(ptr);
+        } else
+          goto handle_unusual;
+        continue;
+      default:
+        goto handle_unusual;
+    }  // switch
+  handle_unusual:
+    if ((tag == 0) || ((tag & 7) == 4)) {
+      CHK_(ptr);
+      ctx->SetLastTag(tag);
+      goto message_done;
+    }
+    ptr = UnknownFieldParse(
+        tag,
+        _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(),
+        ptr, ctx);
+    CHK_(ptr != nullptr);
+  }  // while
+message_done:
+  return ptr;
+failure:
+  ptr = nullptr;
+  goto message_done;
+#undef CHK_
+}
+
+uint8_t* CloseDocumentRequest::_InternalSerialize(
+    uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const {
+  // @@protoc_insertion_point(serialize_to_array_start:io.deephaven.proto.backplane.script.grpc.CloseDocumentRequest)
+  uint32_t cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  // .io.deephaven.proto.backplane.grpc.Ticket console_id = 1 [deprecated = true];
+  if (this->_internal_has_console_id()) {
+    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
+      InternalWriteMessage(1, _Internal::console_id(this),
+        _Internal::console_id(this).GetCachedSize(), target, stream);
+  }
+
+  // .io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier text_document = 2;
+  if (this->_internal_has_text_document()) {
+    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
+      InternalWriteMessage(2, _Internal::text_document(this),
+        _Internal::text_document(this).GetCachedSize(), target, stream);
+  }
+
+  if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
+    target = ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray(
+        _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream);
+  }
+  // @@protoc_insertion_point(serialize_to_array_end:io.deephaven.proto.backplane.script.grpc.CloseDocumentRequest)
+  return target;
+}
+
+size_t CloseDocumentRequest::ByteSizeLong() const {
+// @@protoc_insertion_point(message_byte_size_start:io.deephaven.proto.backplane.script.grpc.CloseDocumentRequest)
+  size_t total_size = 0;
+
+  uint32_t cached_has_bits = 0;
+  // Prevent compiler warnings about cached_has_bits being unused
+  (void) cached_has_bits;
+
+  // .io.deephaven.proto.backplane.grpc.Ticket console_id = 1 [deprecated = true];
+  if (this->_internal_has_console_id()) {
+    total_size += 1 +
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
+        *console_id_);
+  }
+
+  // .io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier text_document = 2;
+  if (this->_internal_has_text_document()) {
+    total_size += 1 +
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
+        *text_document_);
+  }
+
+  return MaybeComputeUnknownFieldsSize(total_size, &_cached_size_);
+}
+
+const ::PROTOBUF_NAMESPACE_ID::Message::ClassData CloseDocumentRequest::_class_data_ = {
+    ::PROTOBUF_NAMESPACE_ID::Message::CopyWithSizeCheck,
+    CloseDocumentRequest::MergeImpl
+};
+const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*CloseDocumentRequest::GetClassData() const { return &_class_data_; }
+
+void CloseDocumentRequest::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to,
+                      const ::PROTOBUF_NAMESPACE_ID::Message& from) {
+  static_cast<CloseDocumentRequest *>(to)->MergeFrom(
+      static_cast<const CloseDocumentRequest &>(from));
+}
+
+
+void CloseDocumentRequest::MergeFrom(const CloseDocumentRequest& from) {
+// @@protoc_insertion_point(class_specific_merge_from_start:io.deephaven.proto.backplane.script.grpc.CloseDocumentRequest)
+  GOOGLE_DCHECK_NE(&from, this);
+  uint32_t cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  if (from._internal_has_console_id()) {
+    _internal_mutable_console_id()->::io::deephaven::proto::backplane::grpc::Ticket::MergeFrom(from._internal_console_id());
+  }
+  if (from._internal_has_text_document()) {
+    _internal_mutable_text_document()->::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier::MergeFrom(from._internal_text_document());
+  }
+  _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
+}
+
+void CloseDocumentRequest::CopyFrom(const CloseDocumentRequest& from) {
+// @@protoc_insertion_point(class_specific_copy_from_start:io.deephaven.proto.backplane.script.grpc.CloseDocumentRequest)
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+bool CloseDocumentRequest::IsInitialized() const {
+  return true;
+}
+
+void CloseDocumentRequest::InternalSwap(CloseDocumentRequest* other) {
+  using std::swap;
+  _internal_metadata_.InternalSwap(&other->_internal_metadata_);
+  ::PROTOBUF_NAMESPACE_ID::internal::memswap<
+      PROTOBUF_FIELD_OFFSET(CloseDocumentRequest, text_document_)
+      + sizeof(CloseDocumentRequest::text_document_)
+      - PROTOBUF_FIELD_OFFSET(CloseDocumentRequest, console_id_)>(
+          reinterpret_cast<char*>(&console_id_),
+          reinterpret_cast<char*>(&other->console_id_));
+}
+
+::PROTOBUF_NAMESPACE_ID::Metadata CloseDocumentRequest::GetMetadata() const {
+  return ::_pbi::AssignDescriptors(
+      &descriptor_table_deephaven_2fproto_2fconsole_2eproto_getter, &descriptor_table_deephaven_2fproto_2fconsole_2eproto_once,
+      file_level_metadata_deephaven_2fproto_2fconsole_2eproto[21]);
+}
+
+// ===================================================================
+
+class ChangeDocumentRequest_TextDocumentContentChangeEvent::_Internal {
+ public:
+  static const ::io::deephaven::proto::backplane::script::grpc::DocumentRange& range(const ChangeDocumentRequest_TextDocumentContentChangeEvent* msg);
+};
+
+const ::io::deephaven::proto::backplane::script::grpc::DocumentRange&
+ChangeDocumentRequest_TextDocumentContentChangeEvent::_Internal::range(const ChangeDocumentRequest_TextDocumentContentChangeEvent* msg) {
+  return *msg->range_;
+}
+ChangeDocumentRequest_TextDocumentContentChangeEvent::ChangeDocumentRequest_TextDocumentContentChangeEvent(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+                         bool is_message_owned)
+  : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned) {
+  SharedCtor();
+  // @@protoc_insertion_point(arena_constructor:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.TextDocumentContentChangeEvent)
+}
+ChangeDocumentRequest_TextDocumentContentChangeEvent::ChangeDocumentRequest_TextDocumentContentChangeEvent(const ChangeDocumentRequest_TextDocumentContentChangeEvent& from)
+  : ::PROTOBUF_NAMESPACE_ID::Message() {
+  _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
+  text_.InitDefault();
+  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+    text_.Set("", GetArenaForAllocation());
+  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  if (!from._internal_text().empty()) {
+    text_.Set(from._internal_text(), 
+      GetArenaForAllocation());
+  }
+  if (from._internal_has_range()) {
+    range_ = new ::io::deephaven::proto::backplane::script::grpc::DocumentRange(*from.range_);
+  } else {
+    range_ = nullptr;
+  }
+  range_length_ = from.range_length_;
+  // @@protoc_insertion_point(copy_constructor:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.TextDocumentContentChangeEvent)
+}
+
+inline void ChangeDocumentRequest_TextDocumentContentChangeEvent::SharedCtor() {
+text_.InitDefault();
+#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  text_.Set("", GetArenaForAllocation());
+#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+::memset(reinterpret_cast<char*>(this) + static_cast<size_t>(
+    reinterpret_cast<char*>(&range_) - reinterpret_cast<char*>(this)),
+    0, static_cast<size_t>(reinterpret_cast<char*>(&range_length_) -
+    reinterpret_cast<char*>(&range_)) + sizeof(range_length_));
+}
+
+ChangeDocumentRequest_TextDocumentContentChangeEvent::~ChangeDocumentRequest_TextDocumentContentChangeEvent() {
+  // @@protoc_insertion_point(destructor:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.TextDocumentContentChangeEvent)
+  if (auto *arena = _internal_metadata_.DeleteReturnArena<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>()) {
+  (void)arena;
+    return;
+  }
+  SharedDtor();
+}
+
+inline void ChangeDocumentRequest_TextDocumentContentChangeEvent::SharedDtor() {
+  GOOGLE_DCHECK(GetArenaForAllocation() == nullptr);
+  text_.Destroy();
+  if (this != internal_default_instance()) delete range_;
+}
+
+void ChangeDocumentRequest_TextDocumentContentChangeEvent::SetCachedSize(int size) const {
+  _cached_size_.Set(size);
+}
+
+void ChangeDocumentRequest_TextDocumentContentChangeEvent::Clear() {
+// @@protoc_insertion_point(message_clear_start:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.TextDocumentContentChangeEvent)
+  uint32_t cached_has_bits = 0;
+  // Prevent compiler warnings about cached_has_bits being unused
+  (void) cached_has_bits;
+
+  text_.ClearToEmpty();
+  if (GetArenaForAllocation() == nullptr && range_ != nullptr) {
+    delete range_;
+  }
+  range_ = nullptr;
+  range_length_ = 0;
+  _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
+}
+
+const char* ChangeDocumentRequest_TextDocumentContentChangeEvent::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) {
+#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
+  while (!ctx->Done(&ptr)) {
+    uint32_t tag;
+    ptr = ::_pbi::ReadTag(ptr, &tag);
+    switch (tag >> 3) {
+      // .io.deephaven.proto.backplane.script.grpc.DocumentRange range = 1;
+      case 1:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 10)) {
+          ptr = ctx->ParseMessage(_internal_mutable_range(), ptr);
+          CHK_(ptr);
+        } else
+          goto handle_unusual;
+        continue;
+      // int32 range_length = 2;
+      case 2:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 16)) {
+          range_length_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
+          CHK_(ptr);
+        } else
+          goto handle_unusual;
+        continue;
+      // string text = 3;
+      case 3:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 26)) {
+          auto str = _internal_mutable_text();
+          ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
+          CHK_(ptr);
+          CHK_(::_pbi::VerifyUTF8(str, "io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.TextDocumentContentChangeEvent.text"));
+        } else
+          goto handle_unusual;
+        continue;
+      default:
+        goto handle_unusual;
+    }  // switch
+  handle_unusual:
+    if ((tag == 0) || ((tag & 7) == 4)) {
+      CHK_(ptr);
+      ctx->SetLastTag(tag);
+      goto message_done;
+    }
+    ptr = UnknownFieldParse(
+        tag,
+        _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(),
+        ptr, ctx);
+    CHK_(ptr != nullptr);
+  }  // while
+message_done:
+  return ptr;
+failure:
+  ptr = nullptr;
+  goto message_done;
+#undef CHK_
+}
+
+uint8_t* ChangeDocumentRequest_TextDocumentContentChangeEvent::_InternalSerialize(
+    uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const {
+  // @@protoc_insertion_point(serialize_to_array_start:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.TextDocumentContentChangeEvent)
+  uint32_t cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  // .io.deephaven.proto.backplane.script.grpc.DocumentRange range = 1;
+  if (this->_internal_has_range()) {
+    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
+      InternalWriteMessage(1, _Internal::range(this),
+        _Internal::range(this).GetCachedSize(), target, stream);
+  }
+
+  // int32 range_length = 2;
+  if (this->_internal_range_length() != 0) {
+    target = stream->EnsureSpace(target);
+    target = ::_pbi::WireFormatLite::WriteInt32ToArray(2, this->_internal_range_length(), target);
+  }
+
+  // string text = 3;
+  if (!this->_internal_text().empty()) {
+    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
+      this->_internal_text().data(), static_cast<int>(this->_internal_text().length()),
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
+      "io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.TextDocumentContentChangeEvent.text");
+    target = stream->WriteStringMaybeAliased(
+        3, this->_internal_text(), target);
+  }
+
+  if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
+    target = ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray(
+        _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream);
+  }
+  // @@protoc_insertion_point(serialize_to_array_end:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.TextDocumentContentChangeEvent)
+  return target;
+}
+
+size_t ChangeDocumentRequest_TextDocumentContentChangeEvent::ByteSizeLong() const {
+// @@protoc_insertion_point(message_byte_size_start:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.TextDocumentContentChangeEvent)
+  size_t total_size = 0;
+
+  uint32_t cached_has_bits = 0;
+  // Prevent compiler warnings about cached_has_bits being unused
+  (void) cached_has_bits;
+
+  // string text = 3;
+  if (!this->_internal_text().empty()) {
+    total_size += 1 +
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
+        this->_internal_text());
+  }
+
+  // .io.deephaven.proto.backplane.script.grpc.DocumentRange range = 1;
+  if (this->_internal_has_range()) {
+    total_size += 1 +
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
+        *range_);
+  }
+
+  // int32 range_length = 2;
+  if (this->_internal_range_length() != 0) {
+    total_size += ::_pbi::WireFormatLite::Int32SizePlusOne(this->_internal_range_length());
+  }
+
+  return MaybeComputeUnknownFieldsSize(total_size, &_cached_size_);
+}
+
+const ::PROTOBUF_NAMESPACE_ID::Message::ClassData ChangeDocumentRequest_TextDocumentContentChangeEvent::_class_data_ = {
+    ::PROTOBUF_NAMESPACE_ID::Message::CopyWithSizeCheck,
+    ChangeDocumentRequest_TextDocumentContentChangeEvent::MergeImpl
+};
+const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*ChangeDocumentRequest_TextDocumentContentChangeEvent::GetClassData() const { return &_class_data_; }
+
+void ChangeDocumentRequest_TextDocumentContentChangeEvent::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to,
+                      const ::PROTOBUF_NAMESPACE_ID::Message& from) {
+  static_cast<ChangeDocumentRequest_TextDocumentContentChangeEvent *>(to)->MergeFrom(
+      static_cast<const ChangeDocumentRequest_TextDocumentContentChangeEvent &>(from));
+}
+
+
+void ChangeDocumentRequest_TextDocumentContentChangeEvent::MergeFrom(const ChangeDocumentRequest_TextDocumentContentChangeEvent& from) {
+// @@protoc_insertion_point(class_specific_merge_from_start:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.TextDocumentContentChangeEvent)
+  GOOGLE_DCHECK_NE(&from, this);
+  uint32_t cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  if (!from._internal_text().empty()) {
+    _internal_set_text(from._internal_text());
+  }
+  if (from._internal_has_range()) {
+    _internal_mutable_range()->::io::deephaven::proto::backplane::script::grpc::DocumentRange::MergeFrom(from._internal_range());
+  }
+  if (from._internal_range_length() != 0) {
+    _internal_set_range_length(from._internal_range_length());
+  }
+  _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
+}
+
+void ChangeDocumentRequest_TextDocumentContentChangeEvent::CopyFrom(const ChangeDocumentRequest_TextDocumentContentChangeEvent& from) {
+// @@protoc_insertion_point(class_specific_copy_from_start:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.TextDocumentContentChangeEvent)
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+bool ChangeDocumentRequest_TextDocumentContentChangeEvent::IsInitialized() const {
+  return true;
+}
+
+void ChangeDocumentRequest_TextDocumentContentChangeEvent::InternalSwap(ChangeDocumentRequest_TextDocumentContentChangeEvent* other) {
+  using std::swap;
+  auto* lhs_arena = GetArenaForAllocation();
+  auto* rhs_arena = other->GetArenaForAllocation();
+  _internal_metadata_.InternalSwap(&other->_internal_metadata_);
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
+      &text_, lhs_arena,
+      &other->text_, rhs_arena
+  );
+  ::PROTOBUF_NAMESPACE_ID::internal::memswap<
+      PROTOBUF_FIELD_OFFSET(ChangeDocumentRequest_TextDocumentContentChangeEvent, range_length_)
+      + sizeof(ChangeDocumentRequest_TextDocumentContentChangeEvent::range_length_)
+      - PROTOBUF_FIELD_OFFSET(ChangeDocumentRequest_TextDocumentContentChangeEvent, range_)>(
+          reinterpret_cast<char*>(&range_),
+          reinterpret_cast<char*>(&other->range_));
+}
+
+::PROTOBUF_NAMESPACE_ID::Metadata ChangeDocumentRequest_TextDocumentContentChangeEvent::GetMetadata() const {
+  return ::_pbi::AssignDescriptors(
+      &descriptor_table_deephaven_2fproto_2fconsole_2eproto_getter, &descriptor_table_deephaven_2fproto_2fconsole_2eproto_once,
+      file_level_metadata_deephaven_2fproto_2fconsole_2eproto[22]);
+}
+
+// ===================================================================
+
+class ChangeDocumentRequest::_Internal {
+ public:
+  static const ::io::deephaven::proto::backplane::grpc::Ticket& console_id(const ChangeDocumentRequest* msg);
+  static const ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier& text_document(const ChangeDocumentRequest* msg);
+};
+
+const ::io::deephaven::proto::backplane::grpc::Ticket&
+ChangeDocumentRequest::_Internal::console_id(const ChangeDocumentRequest* msg) {
+  return *msg->console_id_;
+}
+const ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier&
+ChangeDocumentRequest::_Internal::text_document(const ChangeDocumentRequest* msg) {
+  return *msg->text_document_;
+}
+void ChangeDocumentRequest::clear_console_id() {
+  if (GetArenaForAllocation() == nullptr && console_id_ != nullptr) {
+    delete console_id_;
+  }
+  console_id_ = nullptr;
+}
+ChangeDocumentRequest::ChangeDocumentRequest(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+                         bool is_message_owned)
+  : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned),
+  content_changes_(arena) {
+  SharedCtor();
+  // @@protoc_insertion_point(arena_constructor:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest)
+}
+ChangeDocumentRequest::ChangeDocumentRequest(const ChangeDocumentRequest& from)
+  : ::PROTOBUF_NAMESPACE_ID::Message(),
+      content_changes_(from.content_changes_) {
+  _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
+  if (from._internal_has_console_id()) {
+    console_id_ = new ::io::deephaven::proto::backplane::grpc::Ticket(*from.console_id_);
+  } else {
+    console_id_ = nullptr;
+  }
+  if (from._internal_has_text_document()) {
+    text_document_ = new ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier(*from.text_document_);
+  } else {
+    text_document_ = nullptr;
+  }
+  // @@protoc_insertion_point(copy_constructor:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest)
+}
+
+inline void ChangeDocumentRequest::SharedCtor() {
+::memset(reinterpret_cast<char*>(this) + static_cast<size_t>(
+    reinterpret_cast<char*>(&console_id_) - reinterpret_cast<char*>(this)),
+    0, static_cast<size_t>(reinterpret_cast<char*>(&text_document_) -
+    reinterpret_cast<char*>(&console_id_)) + sizeof(text_document_));
+}
+
+ChangeDocumentRequest::~ChangeDocumentRequest() {
+  // @@protoc_insertion_point(destructor:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest)
+  if (auto *arena = _internal_metadata_.DeleteReturnArena<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>()) {
+  (void)arena;
+    return;
+  }
+  SharedDtor();
+}
+
+inline void ChangeDocumentRequest::SharedDtor() {
+  GOOGLE_DCHECK(GetArenaForAllocation() == nullptr);
+  if (this != internal_default_instance()) delete console_id_;
+  if (this != internal_default_instance()) delete text_document_;
+}
+
+void ChangeDocumentRequest::SetCachedSize(int size) const {
+  _cached_size_.Set(size);
+}
+
+void ChangeDocumentRequest::Clear() {
+// @@protoc_insertion_point(message_clear_start:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest)
+  uint32_t cached_has_bits = 0;
+  // Prevent compiler warnings about cached_has_bits being unused
+  (void) cached_has_bits;
+
+  content_changes_.Clear();
+  if (GetArenaForAllocation() == nullptr && console_id_ != nullptr) {
+    delete console_id_;
+  }
+  console_id_ = nullptr;
+  if (GetArenaForAllocation() == nullptr && text_document_ != nullptr) {
+    delete text_document_;
+  }
+  text_document_ = nullptr;
+  _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
+}
+
+const char* ChangeDocumentRequest::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) {
+#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
+  while (!ctx->Done(&ptr)) {
+    uint32_t tag;
+    ptr = ::_pbi::ReadTag(ptr, &tag);
+    switch (tag >> 3) {
+      // .io.deephaven.proto.backplane.grpc.Ticket console_id = 1 [deprecated = true];
+      case 1:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 10)) {
+          ptr = ctx->ParseMessage(_internal_mutable_console_id(), ptr);
+          CHK_(ptr);
+        } else
+          goto handle_unusual;
+        continue;
+      // .io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier text_document = 2;
+      case 2:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 18)) {
+          ptr = ctx->ParseMessage(_internal_mutable_text_document(), ptr);
+          CHK_(ptr);
+        } else
+          goto handle_unusual;
+        continue;
+      // repeated .io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.TextDocumentContentChangeEvent content_changes = 3;
+      case 3:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 26)) {
+          ptr -= 1;
+          do {
+            ptr += 1;
+            ptr = ctx->ParseMessage(_internal_add_content_changes(), ptr);
+            CHK_(ptr);
+            if (!ctx->DataAvailable(ptr)) break;
+          } while (::PROTOBUF_NAMESPACE_ID::internal::ExpectTag<26>(ptr));
+        } else
+          goto handle_unusual;
+        continue;
+      default:
+        goto handle_unusual;
+    }  // switch
+  handle_unusual:
+    if ((tag == 0) || ((tag & 7) == 4)) {
+      CHK_(ptr);
+      ctx->SetLastTag(tag);
+      goto message_done;
+    }
+    ptr = UnknownFieldParse(
+        tag,
+        _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(),
+        ptr, ctx);
+    CHK_(ptr != nullptr);
+  }  // while
+message_done:
+  return ptr;
+failure:
+  ptr = nullptr;
+  goto message_done;
+#undef CHK_
+}
+
+uint8_t* ChangeDocumentRequest::_InternalSerialize(
+    uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const {
+  // @@protoc_insertion_point(serialize_to_array_start:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest)
+  uint32_t cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  // .io.deephaven.proto.backplane.grpc.Ticket console_id = 1 [deprecated = true];
+  if (this->_internal_has_console_id()) {
+    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
+      InternalWriteMessage(1, _Internal::console_id(this),
+        _Internal::console_id(this).GetCachedSize(), target, stream);
+  }
+
+  // .io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier text_document = 2;
+  if (this->_internal_has_text_document()) {
+    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
+      InternalWriteMessage(2, _Internal::text_document(this),
+        _Internal::text_document(this).GetCachedSize(), target, stream);
+  }
+
+  // repeated .io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.TextDocumentContentChangeEvent content_changes = 3;
+  for (unsigned i = 0,
+      n = static_cast<unsigned>(this->_internal_content_changes_size()); i < n; i++) {
+    const auto& repfield = this->_internal_content_changes(i);
+    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
+        InternalWriteMessage(3, repfield, repfield.GetCachedSize(), target, stream);
+  }
+
+  if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
+    target = ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray(
+        _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream);
+  }
+  // @@protoc_insertion_point(serialize_to_array_end:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest)
+  return target;
+}
+
+size_t ChangeDocumentRequest::ByteSizeLong() const {
+// @@protoc_insertion_point(message_byte_size_start:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest)
+  size_t total_size = 0;
+
+  uint32_t cached_has_bits = 0;
+  // Prevent compiler warnings about cached_has_bits being unused
+  (void) cached_has_bits;
+
+  // repeated .io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.TextDocumentContentChangeEvent content_changes = 3;
+  total_size += 1UL * this->_internal_content_changes_size();
+  for (const auto& msg : this->content_changes_) {
+    total_size +=
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(msg);
+  }
+
+  // .io.deephaven.proto.backplane.grpc.Ticket console_id = 1 [deprecated = true];
+  if (this->_internal_has_console_id()) {
+    total_size += 1 +
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
+        *console_id_);
+  }
+
+  // .io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier text_document = 2;
+  if (this->_internal_has_text_document()) {
+    total_size += 1 +
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
+        *text_document_);
+  }
+
+  return MaybeComputeUnknownFieldsSize(total_size, &_cached_size_);
+}
+
+const ::PROTOBUF_NAMESPACE_ID::Message::ClassData ChangeDocumentRequest::_class_data_ = {
+    ::PROTOBUF_NAMESPACE_ID::Message::CopyWithSizeCheck,
+    ChangeDocumentRequest::MergeImpl
+};
+const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*ChangeDocumentRequest::GetClassData() const { return &_class_data_; }
+
+void ChangeDocumentRequest::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to,
+                      const ::PROTOBUF_NAMESPACE_ID::Message& from) {
+  static_cast<ChangeDocumentRequest *>(to)->MergeFrom(
+      static_cast<const ChangeDocumentRequest &>(from));
+}
+
+
+void ChangeDocumentRequest::MergeFrom(const ChangeDocumentRequest& from) {
+// @@protoc_insertion_point(class_specific_merge_from_start:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest)
+  GOOGLE_DCHECK_NE(&from, this);
+  uint32_t cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  content_changes_.MergeFrom(from.content_changes_);
+  if (from._internal_has_console_id()) {
+    _internal_mutable_console_id()->::io::deephaven::proto::backplane::grpc::Ticket::MergeFrom(from._internal_console_id());
+  }
+  if (from._internal_has_text_document()) {
+    _internal_mutable_text_document()->::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier::MergeFrom(from._internal_text_document());
+  }
+  _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
+}
+
+void ChangeDocumentRequest::CopyFrom(const ChangeDocumentRequest& from) {
+// @@protoc_insertion_point(class_specific_copy_from_start:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest)
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+bool ChangeDocumentRequest::IsInitialized() const {
+  return true;
+}
+
+void ChangeDocumentRequest::InternalSwap(ChangeDocumentRequest* other) {
+  using std::swap;
+  _internal_metadata_.InternalSwap(&other->_internal_metadata_);
+  content_changes_.InternalSwap(&other->content_changes_);
+  ::PROTOBUF_NAMESPACE_ID::internal::memswap<
+      PROTOBUF_FIELD_OFFSET(ChangeDocumentRequest, text_document_)
+      + sizeof(ChangeDocumentRequest::text_document_)
+      - PROTOBUF_FIELD_OFFSET(ChangeDocumentRequest, console_id_)>(
+          reinterpret_cast<char*>(&console_id_),
+          reinterpret_cast<char*>(&other->console_id_));
+}
+
+::PROTOBUF_NAMESPACE_ID::Metadata ChangeDocumentRequest::GetMetadata() const {
+  return ::_pbi::AssignDescriptors(
+      &descriptor_table_deephaven_2fproto_2fconsole_2eproto_getter, &descriptor_table_deephaven_2fproto_2fconsole_2eproto_once,
+      file_level_metadata_deephaven_2fproto_2fconsole_2eproto[23]);
+}
+
+// ===================================================================
+
+class DocumentRange::_Internal {
+ public:
+  static const ::io::deephaven::proto::backplane::script::grpc::Position& start(const DocumentRange* msg);
+  static const ::io::deephaven::proto::backplane::script::grpc::Position& end(const DocumentRange* msg);
+};
+
+const ::io::deephaven::proto::backplane::script::grpc::Position&
+DocumentRange::_Internal::start(const DocumentRange* msg) {
+  return *msg->start_;
+}
+const ::io::deephaven::proto::backplane::script::grpc::Position&
+DocumentRange::_Internal::end(const DocumentRange* msg) {
+  return *msg->end_;
+}
+DocumentRange::DocumentRange(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+                         bool is_message_owned)
+  : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned) {
+  SharedCtor();
+  // @@protoc_insertion_point(arena_constructor:io.deephaven.proto.backplane.script.grpc.DocumentRange)
+}
+DocumentRange::DocumentRange(const DocumentRange& from)
+  : ::PROTOBUF_NAMESPACE_ID::Message() {
+  _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
+  if (from._internal_has_start()) {
+    start_ = new ::io::deephaven::proto::backplane::script::grpc::Position(*from.start_);
+  } else {
+    start_ = nullptr;
+  }
+  if (from._internal_has_end()) {
+    end_ = new ::io::deephaven::proto::backplane::script::grpc::Position(*from.end_);
+  } else {
+    end_ = nullptr;
+  }
+  // @@protoc_insertion_point(copy_constructor:io.deephaven.proto.backplane.script.grpc.DocumentRange)
+}
+
+inline void DocumentRange::SharedCtor() {
+::memset(reinterpret_cast<char*>(this) + static_cast<size_t>(
+    reinterpret_cast<char*>(&start_) - reinterpret_cast<char*>(this)),
+    0, static_cast<size_t>(reinterpret_cast<char*>(&end_) -
+    reinterpret_cast<char*>(&start_)) + sizeof(end_));
+}
+
+DocumentRange::~DocumentRange() {
+  // @@protoc_insertion_point(destructor:io.deephaven.proto.backplane.script.grpc.DocumentRange)
+  if (auto *arena = _internal_metadata_.DeleteReturnArena<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>()) {
+  (void)arena;
+    return;
+  }
+  SharedDtor();
+}
+
+inline void DocumentRange::SharedDtor() {
+  GOOGLE_DCHECK(GetArenaForAllocation() == nullptr);
+  if (this != internal_default_instance()) delete start_;
+  if (this != internal_default_instance()) delete end_;
+}
+
+void DocumentRange::SetCachedSize(int size) const {
+  _cached_size_.Set(size);
+}
+
+void DocumentRange::Clear() {
+// @@protoc_insertion_point(message_clear_start:io.deephaven.proto.backplane.script.grpc.DocumentRange)
+  uint32_t cached_has_bits = 0;
+  // Prevent compiler warnings about cached_has_bits being unused
+  (void) cached_has_bits;
+
+  if (GetArenaForAllocation() == nullptr && start_ != nullptr) {
+    delete start_;
+  }
+  start_ = nullptr;
+  if (GetArenaForAllocation() == nullptr && end_ != nullptr) {
+    delete end_;
+  }
+  end_ = nullptr;
+  _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
+}
+
+const char* DocumentRange::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) {
+#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
+  while (!ctx->Done(&ptr)) {
+    uint32_t tag;
+    ptr = ::_pbi::ReadTag(ptr, &tag);
+    switch (tag >> 3) {
+      // .io.deephaven.proto.backplane.script.grpc.Position start = 1;
+      case 1:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 10)) {
+          ptr = ctx->ParseMessage(_internal_mutable_start(), ptr);
+          CHK_(ptr);
+        } else
+          goto handle_unusual;
+        continue;
+      // .io.deephaven.proto.backplane.script.grpc.Position end = 2;
+      case 2:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 18)) {
+          ptr = ctx->ParseMessage(_internal_mutable_end(), ptr);
+          CHK_(ptr);
+        } else
+          goto handle_unusual;
+        continue;
+      default:
+        goto handle_unusual;
+    }  // switch
+  handle_unusual:
+    if ((tag == 0) || ((tag & 7) == 4)) {
+      CHK_(ptr);
+      ctx->SetLastTag(tag);
+      goto message_done;
+    }
+    ptr = UnknownFieldParse(
+        tag,
+        _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(),
+        ptr, ctx);
+    CHK_(ptr != nullptr);
+  }  // while
+message_done:
+  return ptr;
+failure:
+  ptr = nullptr;
+  goto message_done;
+#undef CHK_
+}
+
+uint8_t* DocumentRange::_InternalSerialize(
+    uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const {
+  // @@protoc_insertion_point(serialize_to_array_start:io.deephaven.proto.backplane.script.grpc.DocumentRange)
+  uint32_t cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  // .io.deephaven.proto.backplane.script.grpc.Position start = 1;
+  if (this->_internal_has_start()) {
+    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
+      InternalWriteMessage(1, _Internal::start(this),
+        _Internal::start(this).GetCachedSize(), target, stream);
+  }
+
+  // .io.deephaven.proto.backplane.script.grpc.Position end = 2;
+  if (this->_internal_has_end()) {
+    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
+      InternalWriteMessage(2, _Internal::end(this),
+        _Internal::end(this).GetCachedSize(), target, stream);
+  }
+
+  if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
+    target = ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray(
+        _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream);
+  }
+  // @@protoc_insertion_point(serialize_to_array_end:io.deephaven.proto.backplane.script.grpc.DocumentRange)
+  return target;
+}
+
+size_t DocumentRange::ByteSizeLong() const {
+// @@protoc_insertion_point(message_byte_size_start:io.deephaven.proto.backplane.script.grpc.DocumentRange)
+  size_t total_size = 0;
+
+  uint32_t cached_has_bits = 0;
+  // Prevent compiler warnings about cached_has_bits being unused
+  (void) cached_has_bits;
+
+  // .io.deephaven.proto.backplane.script.grpc.Position start = 1;
+  if (this->_internal_has_start()) {
+    total_size += 1 +
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
+        *start_);
+  }
+
+  // .io.deephaven.proto.backplane.script.grpc.Position end = 2;
+  if (this->_internal_has_end()) {
+    total_size += 1 +
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
+        *end_);
+  }
+
+  return MaybeComputeUnknownFieldsSize(total_size, &_cached_size_);
+}
+
+const ::PROTOBUF_NAMESPACE_ID::Message::ClassData DocumentRange::_class_data_ = {
+    ::PROTOBUF_NAMESPACE_ID::Message::CopyWithSizeCheck,
+    DocumentRange::MergeImpl
+};
+const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*DocumentRange::GetClassData() const { return &_class_data_; }
+
+void DocumentRange::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to,
+                      const ::PROTOBUF_NAMESPACE_ID::Message& from) {
+  static_cast<DocumentRange *>(to)->MergeFrom(
+      static_cast<const DocumentRange &>(from));
+}
+
+
+void DocumentRange::MergeFrom(const DocumentRange& from) {
+// @@protoc_insertion_point(class_specific_merge_from_start:io.deephaven.proto.backplane.script.grpc.DocumentRange)
+  GOOGLE_DCHECK_NE(&from, this);
+  uint32_t cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  if (from._internal_has_start()) {
+    _internal_mutable_start()->::io::deephaven::proto::backplane::script::grpc::Position::MergeFrom(from._internal_start());
+  }
+  if (from._internal_has_end()) {
+    _internal_mutable_end()->::io::deephaven::proto::backplane::script::grpc::Position::MergeFrom(from._internal_end());
+  }
+  _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
+}
+
+void DocumentRange::CopyFrom(const DocumentRange& from) {
+// @@protoc_insertion_point(class_specific_copy_from_start:io.deephaven.proto.backplane.script.grpc.DocumentRange)
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+bool DocumentRange::IsInitialized() const {
+  return true;
+}
+
+void DocumentRange::InternalSwap(DocumentRange* other) {
+  using std::swap;
+  _internal_metadata_.InternalSwap(&other->_internal_metadata_);
+  ::PROTOBUF_NAMESPACE_ID::internal::memswap<
+      PROTOBUF_FIELD_OFFSET(DocumentRange, end_)
+      + sizeof(DocumentRange::end_)
+      - PROTOBUF_FIELD_OFFSET(DocumentRange, start_)>(
+          reinterpret_cast<char*>(&start_),
+          reinterpret_cast<char*>(&other->start_));
+}
+
+::PROTOBUF_NAMESPACE_ID::Metadata DocumentRange::GetMetadata() const {
+  return ::_pbi::AssignDescriptors(
+      &descriptor_table_deephaven_2fproto_2fconsole_2eproto_getter, &descriptor_table_deephaven_2fproto_2fconsole_2eproto_once,
+      file_level_metadata_deephaven_2fproto_2fconsole_2eproto[24]);
+}
+
+// ===================================================================
+
+class VersionedTextDocumentIdentifier::_Internal {
+ public:
+};
+
+VersionedTextDocumentIdentifier::VersionedTextDocumentIdentifier(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+                         bool is_message_owned)
+  : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned) {
+  SharedCtor();
+  // @@protoc_insertion_point(arena_constructor:io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier)
+}
+VersionedTextDocumentIdentifier::VersionedTextDocumentIdentifier(const VersionedTextDocumentIdentifier& from)
+  : ::PROTOBUF_NAMESPACE_ID::Message() {
+  _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
+  uri_.InitDefault();
+  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+    uri_.Set("", GetArenaForAllocation());
+  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  if (!from._internal_uri().empty()) {
+    uri_.Set(from._internal_uri(), 
+      GetArenaForAllocation());
+  }
+  version_ = from.version_;
+  // @@protoc_insertion_point(copy_constructor:io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier)
+}
+
+inline void VersionedTextDocumentIdentifier::SharedCtor() {
+uri_.InitDefault();
+#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  uri_.Set("", GetArenaForAllocation());
+#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+version_ = 0;
+}
+
+VersionedTextDocumentIdentifier::~VersionedTextDocumentIdentifier() {
+  // @@protoc_insertion_point(destructor:io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier)
+  if (auto *arena = _internal_metadata_.DeleteReturnArena<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>()) {
+  (void)arena;
+    return;
+  }
+  SharedDtor();
+}
+
+inline void VersionedTextDocumentIdentifier::SharedDtor() {
+  GOOGLE_DCHECK(GetArenaForAllocation() == nullptr);
+  uri_.Destroy();
+}
+
+void VersionedTextDocumentIdentifier::SetCachedSize(int size) const {
+  _cached_size_.Set(size);
+}
+
+void VersionedTextDocumentIdentifier::Clear() {
+// @@protoc_insertion_point(message_clear_start:io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier)
+  uint32_t cached_has_bits = 0;
+  // Prevent compiler warnings about cached_has_bits being unused
+  (void) cached_has_bits;
+
+  uri_.ClearToEmpty();
+  version_ = 0;
+  _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
+}
+
+const char* VersionedTextDocumentIdentifier::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) {
+#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
+  while (!ctx->Done(&ptr)) {
+    uint32_t tag;
+    ptr = ::_pbi::ReadTag(ptr, &tag);
+    switch (tag >> 3) {
+      // string uri = 1;
+      case 1:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 10)) {
+          auto str = _internal_mutable_uri();
+          ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
+          CHK_(ptr);
+          CHK_(::_pbi::VerifyUTF8(str, "io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier.uri"));
+        } else
+          goto handle_unusual;
+        continue;
+      // int32 version = 2;
+      case 2:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 16)) {
+          version_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
+          CHK_(ptr);
+        } else
+          goto handle_unusual;
+        continue;
+      default:
+        goto handle_unusual;
+    }  // switch
+  handle_unusual:
+    if ((tag == 0) || ((tag & 7) == 4)) {
+      CHK_(ptr);
+      ctx->SetLastTag(tag);
+      goto message_done;
+    }
+    ptr = UnknownFieldParse(
+        tag,
+        _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(),
+        ptr, ctx);
+    CHK_(ptr != nullptr);
+  }  // while
+message_done:
+  return ptr;
+failure:
+  ptr = nullptr;
+  goto message_done;
+#undef CHK_
+}
+
+uint8_t* VersionedTextDocumentIdentifier::_InternalSerialize(
+    uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const {
+  // @@protoc_insertion_point(serialize_to_array_start:io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier)
+  uint32_t cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  // string uri = 1;
+  if (!this->_internal_uri().empty()) {
+    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
+      this->_internal_uri().data(), static_cast<int>(this->_internal_uri().length()),
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
+      "io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier.uri");
+    target = stream->WriteStringMaybeAliased(
+        1, this->_internal_uri(), target);
+  }
+
+  // int32 version = 2;
+  if (this->_internal_version() != 0) {
+    target = stream->EnsureSpace(target);
+    target = ::_pbi::WireFormatLite::WriteInt32ToArray(2, this->_internal_version(), target);
+  }
+
+  if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
+    target = ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray(
+        _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream);
+  }
+  // @@protoc_insertion_point(serialize_to_array_end:io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier)
+  return target;
+}
+
+size_t VersionedTextDocumentIdentifier::ByteSizeLong() const {
+// @@protoc_insertion_point(message_byte_size_start:io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier)
+  size_t total_size = 0;
+
+  uint32_t cached_has_bits = 0;
+  // Prevent compiler warnings about cached_has_bits being unused
+  (void) cached_has_bits;
+
+  // string uri = 1;
+  if (!this->_internal_uri().empty()) {
+    total_size += 1 +
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
+        this->_internal_uri());
+  }
+
+  // int32 version = 2;
+  if (this->_internal_version() != 0) {
+    total_size += ::_pbi::WireFormatLite::Int32SizePlusOne(this->_internal_version());
+  }
+
+  return MaybeComputeUnknownFieldsSize(total_size, &_cached_size_);
+}
+
+const ::PROTOBUF_NAMESPACE_ID::Message::ClassData VersionedTextDocumentIdentifier::_class_data_ = {
+    ::PROTOBUF_NAMESPACE_ID::Message::CopyWithSizeCheck,
+    VersionedTextDocumentIdentifier::MergeImpl
+};
+const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*VersionedTextDocumentIdentifier::GetClassData() const { return &_class_data_; }
+
+void VersionedTextDocumentIdentifier::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to,
+                      const ::PROTOBUF_NAMESPACE_ID::Message& from) {
+  static_cast<VersionedTextDocumentIdentifier *>(to)->MergeFrom(
+      static_cast<const VersionedTextDocumentIdentifier &>(from));
+}
+
+
+void VersionedTextDocumentIdentifier::MergeFrom(const VersionedTextDocumentIdentifier& from) {
+// @@protoc_insertion_point(class_specific_merge_from_start:io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier)
+  GOOGLE_DCHECK_NE(&from, this);
+  uint32_t cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  if (!from._internal_uri().empty()) {
+    _internal_set_uri(from._internal_uri());
+  }
+  if (from._internal_version() != 0) {
+    _internal_set_version(from._internal_version());
+  }
+  _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
+}
+
+void VersionedTextDocumentIdentifier::CopyFrom(const VersionedTextDocumentIdentifier& from) {
+// @@protoc_insertion_point(class_specific_copy_from_start:io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier)
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+bool VersionedTextDocumentIdentifier::IsInitialized() const {
+  return true;
+}
+
+void VersionedTextDocumentIdentifier::InternalSwap(VersionedTextDocumentIdentifier* other) {
+  using std::swap;
+  auto* lhs_arena = GetArenaForAllocation();
+  auto* rhs_arena = other->GetArenaForAllocation();
+  _internal_metadata_.InternalSwap(&other->_internal_metadata_);
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
+      &uri_, lhs_arena,
+      &other->uri_, rhs_arena
+  );
+  swap(version_, other->version_);
+}
+
+::PROTOBUF_NAMESPACE_ID::Metadata VersionedTextDocumentIdentifier::GetMetadata() const {
+  return ::_pbi::AssignDescriptors(
+      &descriptor_table_deephaven_2fproto_2fconsole_2eproto_getter, &descriptor_table_deephaven_2fproto_2fconsole_2eproto_once,
+      file_level_metadata_deephaven_2fproto_2fconsole_2eproto[25]);
+}
+
+// ===================================================================
+
+class Position::_Internal {
+ public:
+};
+
+Position::Position(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+                         bool is_message_owned)
+  : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned) {
+  SharedCtor();
+  // @@protoc_insertion_point(arena_constructor:io.deephaven.proto.backplane.script.grpc.Position)
+}
+Position::Position(const Position& from)
+  : ::PROTOBUF_NAMESPACE_ID::Message() {
+  _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
+  ::memcpy(&line_, &from.line_,
+    static_cast<size_t>(reinterpret_cast<char*>(&character_) -
+    reinterpret_cast<char*>(&line_)) + sizeof(character_));
+  // @@protoc_insertion_point(copy_constructor:io.deephaven.proto.backplane.script.grpc.Position)
+}
+
+inline void Position::SharedCtor() {
+::memset(reinterpret_cast<char*>(this) + static_cast<size_t>(
+    reinterpret_cast<char*>(&line_) - reinterpret_cast<char*>(this)),
+    0, static_cast<size_t>(reinterpret_cast<char*>(&character_) -
+    reinterpret_cast<char*>(&line_)) + sizeof(character_));
+}
+
+Position::~Position() {
+  // @@protoc_insertion_point(destructor:io.deephaven.proto.backplane.script.grpc.Position)
+  if (auto *arena = _internal_metadata_.DeleteReturnArena<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>()) {
+  (void)arena;
+    return;
+  }
+  SharedDtor();
+}
+
+inline void Position::SharedDtor() {
+  GOOGLE_DCHECK(GetArenaForAllocation() == nullptr);
+}
+
+void Position::SetCachedSize(int size) const {
+  _cached_size_.Set(size);
+}
+
+void Position::Clear() {
+// @@protoc_insertion_point(message_clear_start:io.deephaven.proto.backplane.script.grpc.Position)
+  uint32_t cached_has_bits = 0;
+  // Prevent compiler warnings about cached_has_bits being unused
+  (void) cached_has_bits;
+
+  ::memset(&line_, 0, static_cast<size_t>(
+      reinterpret_cast<char*>(&character_) -
+      reinterpret_cast<char*>(&line_)) + sizeof(character_));
+  _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
+}
+
+const char* Position::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) {
+#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
+  while (!ctx->Done(&ptr)) {
+    uint32_t tag;
+    ptr = ::_pbi::ReadTag(ptr, &tag);
+    switch (tag >> 3) {
+      // int32 line = 1;
+      case 1:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 8)) {
+          line_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
+          CHK_(ptr);
+        } else
+          goto handle_unusual;
+        continue;
+      // int32 character = 2;
+      case 2:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 16)) {
+          character_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
+          CHK_(ptr);
+        } else
+          goto handle_unusual;
+        continue;
+      default:
+        goto handle_unusual;
+    }  // switch
+  handle_unusual:
+    if ((tag == 0) || ((tag & 7) == 4)) {
+      CHK_(ptr);
+      ctx->SetLastTag(tag);
+      goto message_done;
+    }
+    ptr = UnknownFieldParse(
+        tag,
+        _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(),
+        ptr, ctx);
+    CHK_(ptr != nullptr);
+  }  // while
+message_done:
+  return ptr;
+failure:
+  ptr = nullptr;
+  goto message_done;
+#undef CHK_
+}
+
+uint8_t* Position::_InternalSerialize(
+    uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const {
+  // @@protoc_insertion_point(serialize_to_array_start:io.deephaven.proto.backplane.script.grpc.Position)
+  uint32_t cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  // int32 line = 1;
+  if (this->_internal_line() != 0) {
+    target = stream->EnsureSpace(target);
+    target = ::_pbi::WireFormatLite::WriteInt32ToArray(1, this->_internal_line(), target);
+  }
+
+  // int32 character = 2;
+  if (this->_internal_character() != 0) {
+    target = stream->EnsureSpace(target);
+    target = ::_pbi::WireFormatLite::WriteInt32ToArray(2, this->_internal_character(), target);
+  }
+
+  if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
+    target = ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray(
+        _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream);
+  }
+  // @@protoc_insertion_point(serialize_to_array_end:io.deephaven.proto.backplane.script.grpc.Position)
+  return target;
+}
+
+size_t Position::ByteSizeLong() const {
+// @@protoc_insertion_point(message_byte_size_start:io.deephaven.proto.backplane.script.grpc.Position)
+  size_t total_size = 0;
+
+  uint32_t cached_has_bits = 0;
+  // Prevent compiler warnings about cached_has_bits being unused
+  (void) cached_has_bits;
+
+  // int32 line = 1;
+  if (this->_internal_line() != 0) {
+    total_size += ::_pbi::WireFormatLite::Int32SizePlusOne(this->_internal_line());
+  }
+
+  // int32 character = 2;
+  if (this->_internal_character() != 0) {
+    total_size += ::_pbi::WireFormatLite::Int32SizePlusOne(this->_internal_character());
+  }
+
+  return MaybeComputeUnknownFieldsSize(total_size, &_cached_size_);
+}
+
+const ::PROTOBUF_NAMESPACE_ID::Message::ClassData Position::_class_data_ = {
+    ::PROTOBUF_NAMESPACE_ID::Message::CopyWithSizeCheck,
+    Position::MergeImpl
+};
+const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*Position::GetClassData() const { return &_class_data_; }
+
+void Position::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to,
+                      const ::PROTOBUF_NAMESPACE_ID::Message& from) {
+  static_cast<Position *>(to)->MergeFrom(
+      static_cast<const Position &>(from));
+}
+
+
+void Position::MergeFrom(const Position& from) {
+// @@protoc_insertion_point(class_specific_merge_from_start:io.deephaven.proto.backplane.script.grpc.Position)
+  GOOGLE_DCHECK_NE(&from, this);
+  uint32_t cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  if (from._internal_line() != 0) {
+    _internal_set_line(from._internal_line());
+  }
+  if (from._internal_character() != 0) {
+    _internal_set_character(from._internal_character());
+  }
+  _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
+}
+
+void Position::CopyFrom(const Position& from) {
+// @@protoc_insertion_point(class_specific_copy_from_start:io.deephaven.proto.backplane.script.grpc.Position)
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+bool Position::IsInitialized() const {
+  return true;
+}
+
+void Position::InternalSwap(Position* other) {
+  using std::swap;
+  _internal_metadata_.InternalSwap(&other->_internal_metadata_);
+  ::PROTOBUF_NAMESPACE_ID::internal::memswap<
+      PROTOBUF_FIELD_OFFSET(Position, character_)
+      + sizeof(Position::character_)
+      - PROTOBUF_FIELD_OFFSET(Position, line_)>(
+          reinterpret_cast<char*>(&line_),
+          reinterpret_cast<char*>(&other->line_));
+}
+
+::PROTOBUF_NAMESPACE_ID::Metadata Position::GetMetadata() const {
+  return ::_pbi::AssignDescriptors(
+      &descriptor_table_deephaven_2fproto_2fconsole_2eproto_getter, &descriptor_table_deephaven_2fproto_2fconsole_2eproto_once,
+      file_level_metadata_deephaven_2fproto_2fconsole_2eproto[26]);
+}
+
+// ===================================================================
+
+class MarkupContent::_Internal {
+ public:
+};
+
+MarkupContent::MarkupContent(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+                         bool is_message_owned)
+  : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned) {
+  SharedCtor();
+  // @@protoc_insertion_point(arena_constructor:io.deephaven.proto.backplane.script.grpc.MarkupContent)
+}
+MarkupContent::MarkupContent(const MarkupContent& from)
+  : ::PROTOBUF_NAMESPACE_ID::Message() {
+  _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
+  kind_.InitDefault();
+  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+    kind_.Set("", GetArenaForAllocation());
+  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  if (!from._internal_kind().empty()) {
+    kind_.Set(from._internal_kind(), 
+      GetArenaForAllocation());
+  }
+  value_.InitDefault();
+  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+    value_.Set("", GetArenaForAllocation());
+  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  if (!from._internal_value().empty()) {
+    value_.Set(from._internal_value(), 
+      GetArenaForAllocation());
+  }
+  // @@protoc_insertion_point(copy_constructor:io.deephaven.proto.backplane.script.grpc.MarkupContent)
+}
+
+inline void MarkupContent::SharedCtor() {
+kind_.InitDefault();
+#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  kind_.Set("", GetArenaForAllocation());
+#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+value_.InitDefault();
+#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  value_.Set("", GetArenaForAllocation());
+#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+}
+
+MarkupContent::~MarkupContent() {
+  // @@protoc_insertion_point(destructor:io.deephaven.proto.backplane.script.grpc.MarkupContent)
+  if (auto *arena = _internal_metadata_.DeleteReturnArena<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>()) {
+  (void)arena;
+    return;
+  }
+  SharedDtor();
+}
+
+inline void MarkupContent::SharedDtor() {
+  GOOGLE_DCHECK(GetArenaForAllocation() == nullptr);
+  kind_.Destroy();
+  value_.Destroy();
+}
+
+void MarkupContent::SetCachedSize(int size) const {
+  _cached_size_.Set(size);
+}
+
+void MarkupContent::Clear() {
+// @@protoc_insertion_point(message_clear_start:io.deephaven.proto.backplane.script.grpc.MarkupContent)
+  uint32_t cached_has_bits = 0;
+  // Prevent compiler warnings about cached_has_bits being unused
+  (void) cached_has_bits;
+
+  kind_.ClearToEmpty();
+  value_.ClearToEmpty();
+  _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
+}
+
+const char* MarkupContent::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) {
+#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
+  while (!ctx->Done(&ptr)) {
+    uint32_t tag;
+    ptr = ::_pbi::ReadTag(ptr, &tag);
+    switch (tag >> 3) {
+      // string kind = 1;
+      case 1:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 10)) {
+          auto str = _internal_mutable_kind();
+          ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
+          CHK_(ptr);
+          CHK_(::_pbi::VerifyUTF8(str, "io.deephaven.proto.backplane.script.grpc.MarkupContent.kind"));
+        } else
+          goto handle_unusual;
+        continue;
+      // string value = 2;
+      case 2:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 18)) {
+          auto str = _internal_mutable_value();
+          ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
+          CHK_(ptr);
+          CHK_(::_pbi::VerifyUTF8(str, "io.deephaven.proto.backplane.script.grpc.MarkupContent.value"));
+        } else
+          goto handle_unusual;
+        continue;
+      default:
+        goto handle_unusual;
+    }  // switch
+  handle_unusual:
+    if ((tag == 0) || ((tag & 7) == 4)) {
+      CHK_(ptr);
+      ctx->SetLastTag(tag);
+      goto message_done;
+    }
+    ptr = UnknownFieldParse(
+        tag,
+        _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(),
+        ptr, ctx);
+    CHK_(ptr != nullptr);
+  }  // while
+message_done:
+  return ptr;
+failure:
+  ptr = nullptr;
+  goto message_done;
+#undef CHK_
+}
+
+uint8_t* MarkupContent::_InternalSerialize(
+    uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const {
+  // @@protoc_insertion_point(serialize_to_array_start:io.deephaven.proto.backplane.script.grpc.MarkupContent)
+  uint32_t cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  // string kind = 1;
+  if (!this->_internal_kind().empty()) {
+    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
+      this->_internal_kind().data(), static_cast<int>(this->_internal_kind().length()),
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
+      "io.deephaven.proto.backplane.script.grpc.MarkupContent.kind");
+    target = stream->WriteStringMaybeAliased(
+        1, this->_internal_kind(), target);
+  }
+
+  // string value = 2;
+  if (!this->_internal_value().empty()) {
+    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
+      this->_internal_value().data(), static_cast<int>(this->_internal_value().length()),
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
+      "io.deephaven.proto.backplane.script.grpc.MarkupContent.value");
+    target = stream->WriteStringMaybeAliased(
+        2, this->_internal_value(), target);
+  }
+
+  if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
+    target = ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray(
+        _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream);
+  }
+  // @@protoc_insertion_point(serialize_to_array_end:io.deephaven.proto.backplane.script.grpc.MarkupContent)
+  return target;
+}
+
+size_t MarkupContent::ByteSizeLong() const {
+// @@protoc_insertion_point(message_byte_size_start:io.deephaven.proto.backplane.script.grpc.MarkupContent)
+  size_t total_size = 0;
+
+  uint32_t cached_has_bits = 0;
+  // Prevent compiler warnings about cached_has_bits being unused
+  (void) cached_has_bits;
+
+  // string kind = 1;
+  if (!this->_internal_kind().empty()) {
+    total_size += 1 +
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
+        this->_internal_kind());
+  }
+
+  // string value = 2;
+  if (!this->_internal_value().empty()) {
+    total_size += 1 +
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
+        this->_internal_value());
+  }
+
+  return MaybeComputeUnknownFieldsSize(total_size, &_cached_size_);
+}
+
+const ::PROTOBUF_NAMESPACE_ID::Message::ClassData MarkupContent::_class_data_ = {
+    ::PROTOBUF_NAMESPACE_ID::Message::CopyWithSizeCheck,
+    MarkupContent::MergeImpl
+};
+const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*MarkupContent::GetClassData() const { return &_class_data_; }
+
+void MarkupContent::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to,
+                      const ::PROTOBUF_NAMESPACE_ID::Message& from) {
+  static_cast<MarkupContent *>(to)->MergeFrom(
+      static_cast<const MarkupContent &>(from));
+}
+
+
+void MarkupContent::MergeFrom(const MarkupContent& from) {
+// @@protoc_insertion_point(class_specific_merge_from_start:io.deephaven.proto.backplane.script.grpc.MarkupContent)
+  GOOGLE_DCHECK_NE(&from, this);
+  uint32_t cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  if (!from._internal_kind().empty()) {
+    _internal_set_kind(from._internal_kind());
+  }
+  if (!from._internal_value().empty()) {
+    _internal_set_value(from._internal_value());
+  }
+  _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
+}
+
+void MarkupContent::CopyFrom(const MarkupContent& from) {
+// @@protoc_insertion_point(class_specific_copy_from_start:io.deephaven.proto.backplane.script.grpc.MarkupContent)
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+bool MarkupContent::IsInitialized() const {
+  return true;
+}
+
+void MarkupContent::InternalSwap(MarkupContent* other) {
+  using std::swap;
+  auto* lhs_arena = GetArenaForAllocation();
+  auto* rhs_arena = other->GetArenaForAllocation();
+  _internal_metadata_.InternalSwap(&other->_internal_metadata_);
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
+      &kind_, lhs_arena,
+      &other->kind_, rhs_arena
+  );
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
+      &value_, lhs_arena,
+      &other->value_, rhs_arena
+  );
+}
+
+::PROTOBUF_NAMESPACE_ID::Metadata MarkupContent::GetMetadata() const {
+  return ::_pbi::AssignDescriptors(
+      &descriptor_table_deephaven_2fproto_2fconsole_2eproto_getter, &descriptor_table_deephaven_2fproto_2fconsole_2eproto_once,
+      file_level_metadata_deephaven_2fproto_2fconsole_2eproto[27]);
+}
+
+// ===================================================================
+
+class GetCompletionItemsRequest::_Internal {
+ public:
+  static const ::io::deephaven::proto::backplane::grpc::Ticket& console_id(const GetCompletionItemsRequest* msg);
+  static const ::io::deephaven::proto::backplane::script::grpc::CompletionContext& context(const GetCompletionItemsRequest* msg);
+  static const ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier& text_document(const GetCompletionItemsRequest* msg);
+  static const ::io::deephaven::proto::backplane::script::grpc::Position& position(const GetCompletionItemsRequest* msg);
+};
+
+const ::io::deephaven::proto::backplane::grpc::Ticket&
+GetCompletionItemsRequest::_Internal::console_id(const GetCompletionItemsRequest* msg) {
+  return *msg->console_id_;
+}
+const ::io::deephaven::proto::backplane::script::grpc::CompletionContext&
+GetCompletionItemsRequest::_Internal::context(const GetCompletionItemsRequest* msg) {
+  return *msg->context_;
+}
+const ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier&
+GetCompletionItemsRequest::_Internal::text_document(const GetCompletionItemsRequest* msg) {
+  return *msg->text_document_;
+}
+const ::io::deephaven::proto::backplane::script::grpc::Position&
+GetCompletionItemsRequest::_Internal::position(const GetCompletionItemsRequest* msg) {
+  return *msg->position_;
+}
+void GetCompletionItemsRequest::clear_console_id() {
+  if (GetArenaForAllocation() == nullptr && console_id_ != nullptr) {
+    delete console_id_;
+  }
+  console_id_ = nullptr;
+}
+GetCompletionItemsRequest::GetCompletionItemsRequest(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+                         bool is_message_owned)
+  : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned) {
+  SharedCtor();
+  // @@protoc_insertion_point(arena_constructor:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest)
+}
+GetCompletionItemsRequest::GetCompletionItemsRequest(const GetCompletionItemsRequest& from)
+  : ::PROTOBUF_NAMESPACE_ID::Message() {
+  _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
+  if (from._internal_has_console_id()) {
+    console_id_ = new ::io::deephaven::proto::backplane::grpc::Ticket(*from.console_id_);
+  } else {
+    console_id_ = nullptr;
+  }
+  if (from._internal_has_context()) {
+    context_ = new ::io::deephaven::proto::backplane::script::grpc::CompletionContext(*from.context_);
+  } else {
+    context_ = nullptr;
+  }
+  if (from._internal_has_text_document()) {
+    text_document_ = new ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier(*from.text_document_);
+  } else {
+    text_document_ = nullptr;
+  }
+  if (from._internal_has_position()) {
+    position_ = new ::io::deephaven::proto::backplane::script::grpc::Position(*from.position_);
+  } else {
+    position_ = nullptr;
+  }
+  request_id_ = from.request_id_;
+  // @@protoc_insertion_point(copy_constructor:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest)
+}
+
+inline void GetCompletionItemsRequest::SharedCtor() {
+::memset(reinterpret_cast<char*>(this) + static_cast<size_t>(
+    reinterpret_cast<char*>(&console_id_) - reinterpret_cast<char*>(this)),
+    0, static_cast<size_t>(reinterpret_cast<char*>(&request_id_) -
+    reinterpret_cast<char*>(&console_id_)) + sizeof(request_id_));
+}
+
+GetCompletionItemsRequest::~GetCompletionItemsRequest() {
+  // @@protoc_insertion_point(destructor:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest)
+  if (auto *arena = _internal_metadata_.DeleteReturnArena<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>()) {
+  (void)arena;
+    return;
+  }
+  SharedDtor();
+}
+
+inline void GetCompletionItemsRequest::SharedDtor() {
+  GOOGLE_DCHECK(GetArenaForAllocation() == nullptr);
+  if (this != internal_default_instance()) delete console_id_;
+  if (this != internal_default_instance()) delete context_;
+  if (this != internal_default_instance()) delete text_document_;
+  if (this != internal_default_instance()) delete position_;
+}
+
+void GetCompletionItemsRequest::SetCachedSize(int size) const {
+  _cached_size_.Set(size);
+}
+
+void GetCompletionItemsRequest::Clear() {
+// @@protoc_insertion_point(message_clear_start:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest)
+  uint32_t cached_has_bits = 0;
+  // Prevent compiler warnings about cached_has_bits being unused
+  (void) cached_has_bits;
+
+  if (GetArenaForAllocation() == nullptr && console_id_ != nullptr) {
+    delete console_id_;
+  }
+  console_id_ = nullptr;
+  if (GetArenaForAllocation() == nullptr && context_ != nullptr) {
+    delete context_;
+  }
+  context_ = nullptr;
+  if (GetArenaForAllocation() == nullptr && text_document_ != nullptr) {
+    delete text_document_;
+  }
+  text_document_ = nullptr;
+  if (GetArenaForAllocation() == nullptr && position_ != nullptr) {
+    delete position_;
+  }
+  position_ = nullptr;
+  request_id_ = 0;
+  _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
+}
+
+const char* GetCompletionItemsRequest::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) {
+#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
+  while (!ctx->Done(&ptr)) {
+    uint32_t tag;
+    ptr = ::_pbi::ReadTag(ptr, &tag);
+    switch (tag >> 3) {
+      // .io.deephaven.proto.backplane.grpc.Ticket console_id = 1 [deprecated = true];
+      case 1:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 10)) {
+          ptr = ctx->ParseMessage(_internal_mutable_console_id(), ptr);
+          CHK_(ptr);
+        } else
+          goto handle_unusual;
+        continue;
+      // .io.deephaven.proto.backplane.script.grpc.CompletionContext context = 2;
+      case 2:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 18)) {
+          ptr = ctx->ParseMessage(_internal_mutable_context(), ptr);
+          CHK_(ptr);
+        } else
+          goto handle_unusual;
+        continue;
+      // .io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier text_document = 3;
+      case 3:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 26)) {
+          ptr = ctx->ParseMessage(_internal_mutable_text_document(), ptr);
+          CHK_(ptr);
+        } else
+          goto handle_unusual;
+        continue;
+      // .io.deephaven.proto.backplane.script.grpc.Position position = 4;
+      case 4:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 34)) {
+          ptr = ctx->ParseMessage(_internal_mutable_position(), ptr);
+          CHK_(ptr);
+        } else
+          goto handle_unusual;
+        continue;
+      // int32 request_id = 5 [deprecated = true];
+      case 5:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 40)) {
+          request_id_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
+          CHK_(ptr);
+        } else
+          goto handle_unusual;
+        continue;
+      default:
+        goto handle_unusual;
+    }  // switch
+  handle_unusual:
+    if ((tag == 0) || ((tag & 7) == 4)) {
+      CHK_(ptr);
+      ctx->SetLastTag(tag);
+      goto message_done;
+    }
+    ptr = UnknownFieldParse(
+        tag,
+        _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(),
+        ptr, ctx);
+    CHK_(ptr != nullptr);
+  }  // while
+message_done:
+  return ptr;
+failure:
+  ptr = nullptr;
+  goto message_done;
+#undef CHK_
+}
+
+uint8_t* GetCompletionItemsRequest::_InternalSerialize(
+    uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const {
+  // @@protoc_insertion_point(serialize_to_array_start:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest)
+  uint32_t cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  // .io.deephaven.proto.backplane.grpc.Ticket console_id = 1 [deprecated = true];
+  if (this->_internal_has_console_id()) {
+    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
+      InternalWriteMessage(1, _Internal::console_id(this),
+        _Internal::console_id(this).GetCachedSize(), target, stream);
+  }
+
+  // .io.deephaven.proto.backplane.script.grpc.CompletionContext context = 2;
+  if (this->_internal_has_context()) {
+    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
+      InternalWriteMessage(2, _Internal::context(this),
+        _Internal::context(this).GetCachedSize(), target, stream);
+  }
+
+  // .io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier text_document = 3;
+  if (this->_internal_has_text_document()) {
+    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
+      InternalWriteMessage(3, _Internal::text_document(this),
+        _Internal::text_document(this).GetCachedSize(), target, stream);
+  }
+
+  // .io.deephaven.proto.backplane.script.grpc.Position position = 4;
+  if (this->_internal_has_position()) {
+    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
+      InternalWriteMessage(4, _Internal::position(this),
+        _Internal::position(this).GetCachedSize(), target, stream);
+  }
+
+  // int32 request_id = 5 [deprecated = true];
+  if (this->_internal_request_id() != 0) {
+    target = stream->EnsureSpace(target);
+    target = ::_pbi::WireFormatLite::WriteInt32ToArray(5, this->_internal_request_id(), target);
+  }
+
+  if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
+    target = ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray(
+        _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream);
+  }
+  // @@protoc_insertion_point(serialize_to_array_end:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest)
+  return target;
 }
 
-void AutoCompleteResponse::CopyFrom(const AutoCompleteResponse& from) {
-// @@protoc_insertion_point(class_specific_copy_from_start:io.deephaven.proto.backplane.script.grpc.AutoCompleteResponse)
+size_t GetCompletionItemsRequest::ByteSizeLong() const {
+// @@protoc_insertion_point(message_byte_size_start:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest)
+  size_t total_size = 0;
+
+  uint32_t cached_has_bits = 0;
+  // Prevent compiler warnings about cached_has_bits being unused
+  (void) cached_has_bits;
+
+  // .io.deephaven.proto.backplane.grpc.Ticket console_id = 1 [deprecated = true];
+  if (this->_internal_has_console_id()) {
+    total_size += 1 +
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
+        *console_id_);
+  }
+
+  // .io.deephaven.proto.backplane.script.grpc.CompletionContext context = 2;
+  if (this->_internal_has_context()) {
+    total_size += 1 +
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
+        *context_);
+  }
+
+  // .io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier text_document = 3;
+  if (this->_internal_has_text_document()) {
+    total_size += 1 +
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
+        *text_document_);
+  }
+
+  // .io.deephaven.proto.backplane.script.grpc.Position position = 4;
+  if (this->_internal_has_position()) {
+    total_size += 1 +
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
+        *position_);
+  }
+
+  // int32 request_id = 5 [deprecated = true];
+  if (this->_internal_request_id() != 0) {
+    total_size += ::_pbi::WireFormatLite::Int32SizePlusOne(this->_internal_request_id());
+  }
+
+  return MaybeComputeUnknownFieldsSize(total_size, &_cached_size_);
+}
+
+const ::PROTOBUF_NAMESPACE_ID::Message::ClassData GetCompletionItemsRequest::_class_data_ = {
+    ::PROTOBUF_NAMESPACE_ID::Message::CopyWithSizeCheck,
+    GetCompletionItemsRequest::MergeImpl
+};
+const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetCompletionItemsRequest::GetClassData() const { return &_class_data_; }
+
+void GetCompletionItemsRequest::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to,
+                      const ::PROTOBUF_NAMESPACE_ID::Message& from) {
+  static_cast<GetCompletionItemsRequest *>(to)->MergeFrom(
+      static_cast<const GetCompletionItemsRequest &>(from));
+}
+
+
+void GetCompletionItemsRequest::MergeFrom(const GetCompletionItemsRequest& from) {
+// @@protoc_insertion_point(class_specific_merge_from_start:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest)
+  GOOGLE_DCHECK_NE(&from, this);
+  uint32_t cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  if (from._internal_has_console_id()) {
+    _internal_mutable_console_id()->::io::deephaven::proto::backplane::grpc::Ticket::MergeFrom(from._internal_console_id());
+  }
+  if (from._internal_has_context()) {
+    _internal_mutable_context()->::io::deephaven::proto::backplane::script::grpc::CompletionContext::MergeFrom(from._internal_context());
+  }
+  if (from._internal_has_text_document()) {
+    _internal_mutable_text_document()->::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier::MergeFrom(from._internal_text_document());
+  }
+  if (from._internal_has_position()) {
+    _internal_mutable_position()->::io::deephaven::proto::backplane::script::grpc::Position::MergeFrom(from._internal_position());
+  }
+  if (from._internal_request_id() != 0) {
+    _internal_set_request_id(from._internal_request_id());
+  }
+  _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
+}
+
+void GetCompletionItemsRequest::CopyFrom(const GetCompletionItemsRequest& from) {
+// @@protoc_insertion_point(class_specific_copy_from_start:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest)
   if (&from == this) return;
   Clear();
   MergeFrom(from);
 }
 
-bool AutoCompleteResponse::IsInitialized() const {
+bool GetCompletionItemsRequest::IsInitialized() const {
   return true;
 }
 
-void AutoCompleteResponse::InternalSwap(AutoCompleteResponse* other) {
+void GetCompletionItemsRequest::InternalSwap(GetCompletionItemsRequest* other) {
   using std::swap;
   _internal_metadata_.InternalSwap(&other->_internal_metadata_);
-  swap(response_, other->response_);
-  swap(_oneof_case_[0], other->_oneof_case_[0]);
+  ::PROTOBUF_NAMESPACE_ID::internal::memswap<
+      PROTOBUF_FIELD_OFFSET(GetCompletionItemsRequest, request_id_)
+      + sizeof(GetCompletionItemsRequest::request_id_)
+      - PROTOBUF_FIELD_OFFSET(GetCompletionItemsRequest, console_id_)>(
+          reinterpret_cast<char*>(&console_id_),
+          reinterpret_cast<char*>(&other->console_id_));
 }
 
-::PROTOBUF_NAMESPACE_ID::Metadata AutoCompleteResponse::GetMetadata() const {
+::PROTOBUF_NAMESPACE_ID::Metadata GetCompletionItemsRequest::GetMetadata() const {
   return ::_pbi::AssignDescriptors(
       &descriptor_table_deephaven_2fproto_2fconsole_2eproto_getter, &descriptor_table_deephaven_2fproto_2fconsole_2eproto_once,
-      file_level_metadata_deephaven_2fproto_2fconsole_2eproto[15]);
+      file_level_metadata_deephaven_2fproto_2fconsole_2eproto[28]);
 }
 
 // ===================================================================
 
-class BrowserNextResponse::_Internal {
+class CompletionContext::_Internal {
  public:
 };
 
-BrowserNextResponse::BrowserNextResponse(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+CompletionContext::CompletionContext(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                          bool is_message_owned)
-  : ::PROTOBUF_NAMESPACE_ID::internal::ZeroFieldsBase(arena, is_message_owned) {
-  // @@protoc_insertion_point(arena_constructor:io.deephaven.proto.backplane.script.grpc.BrowserNextResponse)
+  : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned) {
+  SharedCtor();
+  // @@protoc_insertion_point(arena_constructor:io.deephaven.proto.backplane.script.grpc.CompletionContext)
 }
-BrowserNextResponse::BrowserNextResponse(const BrowserNextResponse& from)
-  : ::PROTOBUF_NAMESPACE_ID::internal::ZeroFieldsBase() {
+CompletionContext::CompletionContext(const CompletionContext& from)
+  : ::PROTOBUF_NAMESPACE_ID::Message() {
   _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
-  // @@protoc_insertion_point(copy_constructor:io.deephaven.proto.backplane.script.grpc.BrowserNextResponse)
+  trigger_character_.InitDefault();
+  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+    trigger_character_.Set("", GetArenaForAllocation());
+  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  if (!from._internal_trigger_character().empty()) {
+    trigger_character_.Set(from._internal_trigger_character(), 
+      GetArenaForAllocation());
+  }
+  trigger_kind_ = from.trigger_kind_;
+  // @@protoc_insertion_point(copy_constructor:io.deephaven.proto.backplane.script.grpc.CompletionContext)
+}
+
+inline void CompletionContext::SharedCtor() {
+trigger_character_.InitDefault();
+#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  trigger_character_.Set("", GetArenaForAllocation());
+#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+trigger_kind_ = 0;
+}
+
+CompletionContext::~CompletionContext() {
+  // @@protoc_insertion_point(destructor:io.deephaven.proto.backplane.script.grpc.CompletionContext)
+  if (auto *arena = _internal_metadata_.DeleteReturnArena<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>()) {
+  (void)arena;
+    return;
+  }
+  SharedDtor();
+}
+
+inline void CompletionContext::SharedDtor() {
+  GOOGLE_DCHECK(GetArenaForAllocation() == nullptr);
+  trigger_character_.Destroy();
+}
+
+void CompletionContext::SetCachedSize(int size) const {
+  _cached_size_.Set(size);
+}
+
+void CompletionContext::Clear() {
+// @@protoc_insertion_point(message_clear_start:io.deephaven.proto.backplane.script.grpc.CompletionContext)
+  uint32_t cached_has_bits = 0;
+  // Prevent compiler warnings about cached_has_bits being unused
+  (void) cached_has_bits;
+
+  trigger_character_.ClearToEmpty();
+  trigger_kind_ = 0;
+  _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
+}
+
+const char* CompletionContext::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) {
+#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
+  while (!ctx->Done(&ptr)) {
+    uint32_t tag;
+    ptr = ::_pbi::ReadTag(ptr, &tag);
+    switch (tag >> 3) {
+      // int32 trigger_kind = 1;
+      case 1:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 8)) {
+          trigger_kind_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
+          CHK_(ptr);
+        } else
+          goto handle_unusual;
+        continue;
+      // string trigger_character = 2;
+      case 2:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 18)) {
+          auto str = _internal_mutable_trigger_character();
+          ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
+          CHK_(ptr);
+          CHK_(::_pbi::VerifyUTF8(str, "io.deephaven.proto.backplane.script.grpc.CompletionContext.trigger_character"));
+        } else
+          goto handle_unusual;
+        continue;
+      default:
+        goto handle_unusual;
+    }  // switch
+  handle_unusual:
+    if ((tag == 0) || ((tag & 7) == 4)) {
+      CHK_(ptr);
+      ctx->SetLastTag(tag);
+      goto message_done;
+    }
+    ptr = UnknownFieldParse(
+        tag,
+        _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(),
+        ptr, ctx);
+    CHK_(ptr != nullptr);
+  }  // while
+message_done:
+  return ptr;
+failure:
+  ptr = nullptr;
+  goto message_done;
+#undef CHK_
+}
+
+uint8_t* CompletionContext::_InternalSerialize(
+    uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const {
+  // @@protoc_insertion_point(serialize_to_array_start:io.deephaven.proto.backplane.script.grpc.CompletionContext)
+  uint32_t cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  // int32 trigger_kind = 1;
+  if (this->_internal_trigger_kind() != 0) {
+    target = stream->EnsureSpace(target);
+    target = ::_pbi::WireFormatLite::WriteInt32ToArray(1, this->_internal_trigger_kind(), target);
+  }
+
+  // string trigger_character = 2;
+  if (!this->_internal_trigger_character().empty()) {
+    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
+      this->_internal_trigger_character().data(), static_cast<int>(this->_internal_trigger_character().length()),
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
+      "io.deephaven.proto.backplane.script.grpc.CompletionContext.trigger_character");
+    target = stream->WriteStringMaybeAliased(
+        2, this->_internal_trigger_character(), target);
+  }
+
+  if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
+    target = ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray(
+        _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream);
+  }
+  // @@protoc_insertion_point(serialize_to_array_end:io.deephaven.proto.backplane.script.grpc.CompletionContext)
+  return target;
 }
 
+size_t CompletionContext::ByteSizeLong() const {
+// @@protoc_insertion_point(message_byte_size_start:io.deephaven.proto.backplane.script.grpc.CompletionContext)
+  size_t total_size = 0;
+
+  uint32_t cached_has_bits = 0;
+  // Prevent compiler warnings about cached_has_bits being unused
+  (void) cached_has_bits;
 
+  // string trigger_character = 2;
+  if (!this->_internal_trigger_character().empty()) {
+    total_size += 1 +
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
+        this->_internal_trigger_character());
+  }
 
+  // int32 trigger_kind = 1;
+  if (this->_internal_trigger_kind() != 0) {
+    total_size += ::_pbi::WireFormatLite::Int32SizePlusOne(this->_internal_trigger_kind());
+  }
 
+  return MaybeComputeUnknownFieldsSize(total_size, &_cached_size_);
+}
 
-const ::PROTOBUF_NAMESPACE_ID::Message::ClassData BrowserNextResponse::_class_data_ = {
-    ::PROTOBUF_NAMESPACE_ID::internal::ZeroFieldsBase::CopyImpl,
-    ::PROTOBUF_NAMESPACE_ID::internal::ZeroFieldsBase::MergeImpl,
+const ::PROTOBUF_NAMESPACE_ID::Message::ClassData CompletionContext::_class_data_ = {
+    ::PROTOBUF_NAMESPACE_ID::Message::CopyWithSizeCheck,
+    CompletionContext::MergeImpl
 };
-const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*BrowserNextResponse::GetClassData() const { return &_class_data_; }
+const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*CompletionContext::GetClassData() const { return &_class_data_; }
+
+void CompletionContext::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to,
+                      const ::PROTOBUF_NAMESPACE_ID::Message& from) {
+  static_cast<CompletionContext *>(to)->MergeFrom(
+      static_cast<const CompletionContext &>(from));
+}
 
 
+void CompletionContext::MergeFrom(const CompletionContext& from) {
+// @@protoc_insertion_point(class_specific_merge_from_start:io.deephaven.proto.backplane.script.grpc.CompletionContext)
+  GOOGLE_DCHECK_NE(&from, this);
+  uint32_t cached_has_bits = 0;
+  (void) cached_has_bits;
 
+  if (!from._internal_trigger_character().empty()) {
+    _internal_set_trigger_character(from._internal_trigger_character());
+  }
+  if (from._internal_trigger_kind() != 0) {
+    _internal_set_trigger_kind(from._internal_trigger_kind());
+  }
+  _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
+}
 
+void CompletionContext::CopyFrom(const CompletionContext& from) {
+// @@protoc_insertion_point(class_specific_copy_from_start:io.deephaven.proto.backplane.script.grpc.CompletionContext)
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
 
+bool CompletionContext::IsInitialized() const {
+  return true;
+}
 
+void CompletionContext::InternalSwap(CompletionContext* other) {
+  using std::swap;
+  auto* lhs_arena = GetArenaForAllocation();
+  auto* rhs_arena = other->GetArenaForAllocation();
+  _internal_metadata_.InternalSwap(&other->_internal_metadata_);
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
+      &trigger_character_, lhs_arena,
+      &other->trigger_character_, rhs_arena
+  );
+  swap(trigger_kind_, other->trigger_kind_);
+}
 
-::PROTOBUF_NAMESPACE_ID::Metadata BrowserNextResponse::GetMetadata() const {
+::PROTOBUF_NAMESPACE_ID::Metadata CompletionContext::GetMetadata() const {
   return ::_pbi::AssignDescriptors(
       &descriptor_table_deephaven_2fproto_2fconsole_2eproto_getter, &descriptor_table_deephaven_2fproto_2fconsole_2eproto_once,
-      file_level_metadata_deephaven_2fproto_2fconsole_2eproto[16]);
+      file_level_metadata_deephaven_2fproto_2fconsole_2eproto[29]);
 }
 
 // ===================================================================
 
-class OpenDocumentRequest::_Internal {
+class GetCompletionItemsResponse::_Internal {
  public:
-  static const ::io::deephaven::proto::backplane::grpc::Ticket& console_id(const OpenDocumentRequest* msg);
-  static const ::io::deephaven::proto::backplane::script::grpc::TextDocumentItem& text_document(const OpenDocumentRequest* msg);
 };
 
-const ::io::deephaven::proto::backplane::grpc::Ticket&
-OpenDocumentRequest::_Internal::console_id(const OpenDocumentRequest* msg) {
-  return *msg->console_id_;
-}
-const ::io::deephaven::proto::backplane::script::grpc::TextDocumentItem&
-OpenDocumentRequest::_Internal::text_document(const OpenDocumentRequest* msg) {
-  return *msg->text_document_;
-}
-void OpenDocumentRequest::clear_console_id() {
-  if (GetArenaForAllocation() == nullptr && console_id_ != nullptr) {
-    delete console_id_;
-  }
-  console_id_ = nullptr;
-}
-OpenDocumentRequest::OpenDocumentRequest(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+GetCompletionItemsResponse::GetCompletionItemsResponse(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                          bool is_message_owned)
-  : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned) {
+  : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned),
+  items_(arena) {
   SharedCtor();
-  // @@protoc_insertion_point(arena_constructor:io.deephaven.proto.backplane.script.grpc.OpenDocumentRequest)
+  // @@protoc_insertion_point(arena_constructor:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsResponse)
 }
-OpenDocumentRequest::OpenDocumentRequest(const OpenDocumentRequest& from)
-  : ::PROTOBUF_NAMESPACE_ID::Message() {
+GetCompletionItemsResponse::GetCompletionItemsResponse(const GetCompletionItemsResponse& from)
+  : ::PROTOBUF_NAMESPACE_ID::Message(),
+      items_(from.items_) {
   _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
-  if (from._internal_has_console_id()) {
-    console_id_ = new ::io::deephaven::proto::backplane::grpc::Ticket(*from.console_id_);
-  } else {
-    console_id_ = nullptr;
-  }
-  if (from._internal_has_text_document()) {
-    text_document_ = new ::io::deephaven::proto::backplane::script::grpc::TextDocumentItem(*from.text_document_);
-  } else {
-    text_document_ = nullptr;
-  }
-  // @@protoc_insertion_point(copy_constructor:io.deephaven.proto.backplane.script.grpc.OpenDocumentRequest)
+  ::memcpy(&request_id_, &from.request_id_,
+    static_cast<size_t>(reinterpret_cast<char*>(&success_) -
+    reinterpret_cast<char*>(&request_id_)) + sizeof(success_));
+  // @@protoc_insertion_point(copy_constructor:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsResponse)
 }
 
-inline void OpenDocumentRequest::SharedCtor() {
+inline void GetCompletionItemsResponse::SharedCtor() {
 ::memset(reinterpret_cast<char*>(this) + static_cast<size_t>(
-    reinterpret_cast<char*>(&console_id_) - reinterpret_cast<char*>(this)),
-    0, static_cast<size_t>(reinterpret_cast<char*>(&text_document_) -
-    reinterpret_cast<char*>(&console_id_)) + sizeof(text_document_));
+    reinterpret_cast<char*>(&request_id_) - reinterpret_cast<char*>(this)),
+    0, static_cast<size_t>(reinterpret_cast<char*>(&success_) -
+    reinterpret_cast<char*>(&request_id_)) + sizeof(success_));
 }
 
-OpenDocumentRequest::~OpenDocumentRequest() {
-  // @@protoc_insertion_point(destructor:io.deephaven.proto.backplane.script.grpc.OpenDocumentRequest)
+GetCompletionItemsResponse::~GetCompletionItemsResponse() {
+  // @@protoc_insertion_point(destructor:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsResponse)
   if (auto *arena = _internal_metadata_.DeleteReturnArena<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>()) {
   (void)arena;
     return;
@@ -5142,51 +9289,58 @@ OpenDocumentRequest::~OpenDocumentRequest() {
   SharedDtor();
 }
 
-inline void OpenDocumentRequest::SharedDtor() {
+inline void GetCompletionItemsResponse::SharedDtor() {
   GOOGLE_DCHECK(GetArenaForAllocation() == nullptr);
-  if (this != internal_default_instance()) delete console_id_;
-  if (this != internal_default_instance()) delete text_document_;
 }
 
-void OpenDocumentRequest::SetCachedSize(int size) const {
+void GetCompletionItemsResponse::SetCachedSize(int size) const {
   _cached_size_.Set(size);
 }
 
-void OpenDocumentRequest::Clear() {
-// @@protoc_insertion_point(message_clear_start:io.deephaven.proto.backplane.script.grpc.OpenDocumentRequest)
+void GetCompletionItemsResponse::Clear() {
+// @@protoc_insertion_point(message_clear_start:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsResponse)
   uint32_t cached_has_bits = 0;
   // Prevent compiler warnings about cached_has_bits being unused
   (void) cached_has_bits;
 
-  if (GetArenaForAllocation() == nullptr && console_id_ != nullptr) {
-    delete console_id_;
-  }
-  console_id_ = nullptr;
-  if (GetArenaForAllocation() == nullptr && text_document_ != nullptr) {
-    delete text_document_;
-  }
-  text_document_ = nullptr;
+  items_.Clear();
+  ::memset(&request_id_, 0, static_cast<size_t>(
+      reinterpret_cast<char*>(&success_) -
+      reinterpret_cast<char*>(&request_id_)) + sizeof(success_));
   _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
 }
 
-const char* OpenDocumentRequest::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) {
+const char* GetCompletionItemsResponse::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) {
 #define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
   while (!ctx->Done(&ptr)) {
     uint32_t tag;
     ptr = ::_pbi::ReadTag(ptr, &tag);
     switch (tag >> 3) {
-      // .io.deephaven.proto.backplane.grpc.Ticket console_id = 1;
+      // repeated .io.deephaven.proto.backplane.script.grpc.CompletionItem items = 1;
       case 1:
         if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 10)) {
-          ptr = ctx->ParseMessage(_internal_mutable_console_id(), ptr);
-          CHK_(ptr);
+          ptr -= 1;
+          do {
+            ptr += 1;
+            ptr = ctx->ParseMessage(_internal_add_items(), ptr);
+            CHK_(ptr);
+            if (!ctx->DataAvailable(ptr)) break;
+          } while (::PROTOBUF_NAMESPACE_ID::internal::ExpectTag<10>(ptr));
         } else
           goto handle_unusual;
         continue;
-      // .io.deephaven.proto.backplane.script.grpc.TextDocumentItem text_document = 2;
+      // int32 request_id = 2 [deprecated = true];
       case 2:
-        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 18)) {
-          ptr = ctx->ParseMessage(_internal_mutable_text_document(), ptr);
+        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 16)) {
+          request_id_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
+          CHK_(ptr);
+        } else
+          goto handle_unusual;
+        continue;
+      // bool success = 3 [deprecated = true];
+      case 3:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 24)) {
+          success_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint64(&ptr);
           CHK_(ptr);
         } else
           goto handle_unusual;
@@ -5214,176 +9368,228 @@ const char* OpenDocumentRequest::_InternalParse(const char* ptr, ::_pbi::ParseCo
 #undef CHK_
 }
 
-uint8_t* OpenDocumentRequest::_InternalSerialize(
+uint8_t* GetCompletionItemsResponse::_InternalSerialize(
     uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const {
-  // @@protoc_insertion_point(serialize_to_array_start:io.deephaven.proto.backplane.script.grpc.OpenDocumentRequest)
+  // @@protoc_insertion_point(serialize_to_array_start:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsResponse)
   uint32_t cached_has_bits = 0;
   (void) cached_has_bits;
 
-  // .io.deephaven.proto.backplane.grpc.Ticket console_id = 1;
-  if (this->_internal_has_console_id()) {
+  // repeated .io.deephaven.proto.backplane.script.grpc.CompletionItem items = 1;
+  for (unsigned i = 0,
+      n = static_cast<unsigned>(this->_internal_items_size()); i < n; i++) {
+    const auto& repfield = this->_internal_items(i);
     target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
-      InternalWriteMessage(1, _Internal::console_id(this),
-        _Internal::console_id(this).GetCachedSize(), target, stream);
+        InternalWriteMessage(1, repfield, repfield.GetCachedSize(), target, stream);
   }
 
-  // .io.deephaven.proto.backplane.script.grpc.TextDocumentItem text_document = 2;
-  if (this->_internal_has_text_document()) {
-    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
-      InternalWriteMessage(2, _Internal::text_document(this),
-        _Internal::text_document(this).GetCachedSize(), target, stream);
+  // int32 request_id = 2 [deprecated = true];
+  if (this->_internal_request_id() != 0) {
+    target = stream->EnsureSpace(target);
+    target = ::_pbi::WireFormatLite::WriteInt32ToArray(2, this->_internal_request_id(), target);
+  }
+
+  // bool success = 3 [deprecated = true];
+  if (this->_internal_success() != 0) {
+    target = stream->EnsureSpace(target);
+    target = ::_pbi::WireFormatLite::WriteBoolToArray(3, this->_internal_success(), target);
   }
 
   if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
     target = ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray(
         _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream);
   }
-  // @@protoc_insertion_point(serialize_to_array_end:io.deephaven.proto.backplane.script.grpc.OpenDocumentRequest)
+  // @@protoc_insertion_point(serialize_to_array_end:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsResponse)
   return target;
 }
 
-size_t OpenDocumentRequest::ByteSizeLong() const {
-// @@protoc_insertion_point(message_byte_size_start:io.deephaven.proto.backplane.script.grpc.OpenDocumentRequest)
+size_t GetCompletionItemsResponse::ByteSizeLong() const {
+// @@protoc_insertion_point(message_byte_size_start:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsResponse)
   size_t total_size = 0;
 
   uint32_t cached_has_bits = 0;
   // Prevent compiler warnings about cached_has_bits being unused
   (void) cached_has_bits;
 
-  // .io.deephaven.proto.backplane.grpc.Ticket console_id = 1;
-  if (this->_internal_has_console_id()) {
-    total_size += 1 +
-      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
-        *console_id_);
+  // repeated .io.deephaven.proto.backplane.script.grpc.CompletionItem items = 1;
+  total_size += 1UL * this->_internal_items_size();
+  for (const auto& msg : this->items_) {
+    total_size +=
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(msg);
   }
 
-  // .io.deephaven.proto.backplane.script.grpc.TextDocumentItem text_document = 2;
-  if (this->_internal_has_text_document()) {
-    total_size += 1 +
-      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
-        *text_document_);
+  // int32 request_id = 2 [deprecated = true];
+  if (this->_internal_request_id() != 0) {
+    total_size += ::_pbi::WireFormatLite::Int32SizePlusOne(this->_internal_request_id());
+  }
+
+  // bool success = 3 [deprecated = true];
+  if (this->_internal_success() != 0) {
+    total_size += 1 + 1;
   }
 
   return MaybeComputeUnknownFieldsSize(total_size, &_cached_size_);
 }
 
-const ::PROTOBUF_NAMESPACE_ID::Message::ClassData OpenDocumentRequest::_class_data_ = {
+const ::PROTOBUF_NAMESPACE_ID::Message::ClassData GetCompletionItemsResponse::_class_data_ = {
     ::PROTOBUF_NAMESPACE_ID::Message::CopyWithSizeCheck,
-    OpenDocumentRequest::MergeImpl
+    GetCompletionItemsResponse::MergeImpl
 };
-const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*OpenDocumentRequest::GetClassData() const { return &_class_data_; }
+const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetCompletionItemsResponse::GetClassData() const { return &_class_data_; }
 
-void OpenDocumentRequest::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to,
+void GetCompletionItemsResponse::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to,
                       const ::PROTOBUF_NAMESPACE_ID::Message& from) {
-  static_cast<OpenDocumentRequest *>(to)->MergeFrom(
-      static_cast<const OpenDocumentRequest &>(from));
+  static_cast<GetCompletionItemsResponse *>(to)->MergeFrom(
+      static_cast<const GetCompletionItemsResponse &>(from));
 }
 
 
-void OpenDocumentRequest::MergeFrom(const OpenDocumentRequest& from) {
-// @@protoc_insertion_point(class_specific_merge_from_start:io.deephaven.proto.backplane.script.grpc.OpenDocumentRequest)
+void GetCompletionItemsResponse::MergeFrom(const GetCompletionItemsResponse& from) {
+// @@protoc_insertion_point(class_specific_merge_from_start:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsResponse)
   GOOGLE_DCHECK_NE(&from, this);
   uint32_t cached_has_bits = 0;
   (void) cached_has_bits;
 
-  if (from._internal_has_console_id()) {
-    _internal_mutable_console_id()->::io::deephaven::proto::backplane::grpc::Ticket::MergeFrom(from._internal_console_id());
+  items_.MergeFrom(from.items_);
+  if (from._internal_request_id() != 0) {
+    _internal_set_request_id(from._internal_request_id());
   }
-  if (from._internal_has_text_document()) {
-    _internal_mutable_text_document()->::io::deephaven::proto::backplane::script::grpc::TextDocumentItem::MergeFrom(from._internal_text_document());
+  if (from._internal_success() != 0) {
+    _internal_set_success(from._internal_success());
   }
   _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
 }
 
-void OpenDocumentRequest::CopyFrom(const OpenDocumentRequest& from) {
-// @@protoc_insertion_point(class_specific_copy_from_start:io.deephaven.proto.backplane.script.grpc.OpenDocumentRequest)
+void GetCompletionItemsResponse::CopyFrom(const GetCompletionItemsResponse& from) {
+// @@protoc_insertion_point(class_specific_copy_from_start:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsResponse)
   if (&from == this) return;
   Clear();
   MergeFrom(from);
 }
 
-bool OpenDocumentRequest::IsInitialized() const {
+bool GetCompletionItemsResponse::IsInitialized() const {
   return true;
 }
 
-void OpenDocumentRequest::InternalSwap(OpenDocumentRequest* other) {
+void GetCompletionItemsResponse::InternalSwap(GetCompletionItemsResponse* other) {
   using std::swap;
   _internal_metadata_.InternalSwap(&other->_internal_metadata_);
+  items_.InternalSwap(&other->items_);
   ::PROTOBUF_NAMESPACE_ID::internal::memswap<
-      PROTOBUF_FIELD_OFFSET(OpenDocumentRequest, text_document_)
-      + sizeof(OpenDocumentRequest::text_document_)
-      - PROTOBUF_FIELD_OFFSET(OpenDocumentRequest, console_id_)>(
-          reinterpret_cast<char*>(&console_id_),
-          reinterpret_cast<char*>(&other->console_id_));
+      PROTOBUF_FIELD_OFFSET(GetCompletionItemsResponse, success_)
+      + sizeof(GetCompletionItemsResponse::success_)
+      - PROTOBUF_FIELD_OFFSET(GetCompletionItemsResponse, request_id_)>(
+          reinterpret_cast<char*>(&request_id_),
+          reinterpret_cast<char*>(&other->request_id_));
 }
 
-::PROTOBUF_NAMESPACE_ID::Metadata OpenDocumentRequest::GetMetadata() const {
+::PROTOBUF_NAMESPACE_ID::Metadata GetCompletionItemsResponse::GetMetadata() const {
   return ::_pbi::AssignDescriptors(
       &descriptor_table_deephaven_2fproto_2fconsole_2eproto_getter, &descriptor_table_deephaven_2fproto_2fconsole_2eproto_once,
-      file_level_metadata_deephaven_2fproto_2fconsole_2eproto[17]);
+      file_level_metadata_deephaven_2fproto_2fconsole_2eproto[30]);
 }
 
 // ===================================================================
 
-class TextDocumentItem::_Internal {
+class CompletionItem::_Internal {
  public:
+  static const ::io::deephaven::proto::backplane::script::grpc::TextEdit& text_edit(const CompletionItem* msg);
+  static const ::io::deephaven::proto::backplane::script::grpc::MarkupContent& documentation(const CompletionItem* msg);
 };
 
-TextDocumentItem::TextDocumentItem(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+const ::io::deephaven::proto::backplane::script::grpc::TextEdit&
+CompletionItem::_Internal::text_edit(const CompletionItem* msg) {
+  return *msg->text_edit_;
+}
+const ::io::deephaven::proto::backplane::script::grpc::MarkupContent&
+CompletionItem::_Internal::documentation(const CompletionItem* msg) {
+  return *msg->documentation_;
+}
+CompletionItem::CompletionItem(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                          bool is_message_owned)
-  : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned) {
+  : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned),
+  additional_text_edits_(arena),
+  commit_characters_(arena) {
   SharedCtor();
-  // @@protoc_insertion_point(arena_constructor:io.deephaven.proto.backplane.script.grpc.TextDocumentItem)
+  // @@protoc_insertion_point(arena_constructor:io.deephaven.proto.backplane.script.grpc.CompletionItem)
 }
-TextDocumentItem::TextDocumentItem(const TextDocumentItem& from)
-  : ::PROTOBUF_NAMESPACE_ID::Message() {
+CompletionItem::CompletionItem(const CompletionItem& from)
+  : ::PROTOBUF_NAMESPACE_ID::Message(),
+      additional_text_edits_(from.additional_text_edits_),
+      commit_characters_(from.commit_characters_) {
   _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
-  uri_.InitDefault();
+  label_.InitDefault();
   #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
-    uri_.Set("", GetArenaForAllocation());
+    label_.Set("", GetArenaForAllocation());
   #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
-  if (!from._internal_uri().empty()) {
-    uri_.Set(from._internal_uri(), 
+  if (!from._internal_label().empty()) {
+    label_.Set(from._internal_label(), 
       GetArenaForAllocation());
   }
-  language_id_.InitDefault();
+  detail_.InitDefault();
   #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
-    language_id_.Set("", GetArenaForAllocation());
+    detail_.Set("", GetArenaForAllocation());
   #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
-  if (!from._internal_language_id().empty()) {
-    language_id_.Set(from._internal_language_id(), 
+  if (!from._internal_detail().empty()) {
+    detail_.Set(from._internal_detail(), 
       GetArenaForAllocation());
   }
-  text_.InitDefault();
+  sort_text_.InitDefault();
   #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
-    text_.Set("", GetArenaForAllocation());
+    sort_text_.Set("", GetArenaForAllocation());
   #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
-  if (!from._internal_text().empty()) {
-    text_.Set(from._internal_text(), 
+  if (!from._internal_sort_text().empty()) {
+    sort_text_.Set(from._internal_sort_text(), 
       GetArenaForAllocation());
   }
-  version_ = from.version_;
-  // @@protoc_insertion_point(copy_constructor:io.deephaven.proto.backplane.script.grpc.TextDocumentItem)
+  filter_text_.InitDefault();
+  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+    filter_text_.Set("", GetArenaForAllocation());
+  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  if (!from._internal_filter_text().empty()) {
+    filter_text_.Set(from._internal_filter_text(), 
+      GetArenaForAllocation());
+  }
+  if (from._internal_has_text_edit()) {
+    text_edit_ = new ::io::deephaven::proto::backplane::script::grpc::TextEdit(*from.text_edit_);
+  } else {
+    text_edit_ = nullptr;
+  }
+  if (from._internal_has_documentation()) {
+    documentation_ = new ::io::deephaven::proto::backplane::script::grpc::MarkupContent(*from.documentation_);
+  } else {
+    documentation_ = nullptr;
+  }
+  ::memcpy(&start_, &from.start_,
+    static_cast<size_t>(reinterpret_cast<char*>(&insert_text_format_) -
+    reinterpret_cast<char*>(&start_)) + sizeof(insert_text_format_));
+  // @@protoc_insertion_point(copy_constructor:io.deephaven.proto.backplane.script.grpc.CompletionItem)
 }
 
-inline void TextDocumentItem::SharedCtor() {
-uri_.InitDefault();
+inline void CompletionItem::SharedCtor() {
+label_.InitDefault();
 #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
-  uri_.Set("", GetArenaForAllocation());
+  label_.Set("", GetArenaForAllocation());
 #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
-language_id_.InitDefault();
+detail_.InitDefault();
 #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
-  language_id_.Set("", GetArenaForAllocation());
+  detail_.Set("", GetArenaForAllocation());
 #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
-text_.InitDefault();
+sort_text_.InitDefault();
 #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
-  text_.Set("", GetArenaForAllocation());
+  sort_text_.Set("", GetArenaForAllocation());
 #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
-version_ = 0;
+filter_text_.InitDefault();
+#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  filter_text_.Set("", GetArenaForAllocation());
+#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+::memset(reinterpret_cast<char*>(this) + static_cast<size_t>(
+    reinterpret_cast<char*>(&text_edit_) - reinterpret_cast<char*>(this)),
+    0, static_cast<size_t>(reinterpret_cast<char*>(&insert_text_format_) -
+    reinterpret_cast<char*>(&text_edit_)) + sizeof(insert_text_format_));
 }
 
-TextDocumentItem::~TextDocumentItem() {
-  // @@protoc_insertion_point(destructor:io.deephaven.proto.backplane.script.grpc.TextDocumentItem)
+CompletionItem::~CompletionItem() {
+  // @@protoc_insertion_point(destructor:io.deephaven.proto.backplane.script.grpc.CompletionItem)
   if (auto *arena = _internal_metadata_.DeleteReturnArena<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>()) {
   (void)arena;
     return;
@@ -5391,71 +9597,181 @@ TextDocumentItem::~TextDocumentItem() {
   SharedDtor();
 }
 
-inline void TextDocumentItem::SharedDtor() {
+inline void CompletionItem::SharedDtor() {
   GOOGLE_DCHECK(GetArenaForAllocation() == nullptr);
-  uri_.Destroy();
-  language_id_.Destroy();
-  text_.Destroy();
+  label_.Destroy();
+  detail_.Destroy();
+  sort_text_.Destroy();
+  filter_text_.Destroy();
+  if (this != internal_default_instance()) delete text_edit_;
+  if (this != internal_default_instance()) delete documentation_;
 }
 
-void TextDocumentItem::SetCachedSize(int size) const {
+void CompletionItem::SetCachedSize(int size) const {
   _cached_size_.Set(size);
 }
 
-void TextDocumentItem::Clear() {
-// @@protoc_insertion_point(message_clear_start:io.deephaven.proto.backplane.script.grpc.TextDocumentItem)
+void CompletionItem::Clear() {
+// @@protoc_insertion_point(message_clear_start:io.deephaven.proto.backplane.script.grpc.CompletionItem)
   uint32_t cached_has_bits = 0;
   // Prevent compiler warnings about cached_has_bits being unused
   (void) cached_has_bits;
 
-  uri_.ClearToEmpty();
-  language_id_.ClearToEmpty();
-  text_.ClearToEmpty();
-  version_ = 0;
+  additional_text_edits_.Clear();
+  commit_characters_.Clear();
+  label_.ClearToEmpty();
+  detail_.ClearToEmpty();
+  sort_text_.ClearToEmpty();
+  filter_text_.ClearToEmpty();
+  if (GetArenaForAllocation() == nullptr && text_edit_ != nullptr) {
+    delete text_edit_;
+  }
+  text_edit_ = nullptr;
+  if (GetArenaForAllocation() == nullptr && documentation_ != nullptr) {
+    delete documentation_;
+  }
+  documentation_ = nullptr;
+  ::memset(&start_, 0, static_cast<size_t>(
+      reinterpret_cast<char*>(&insert_text_format_) -
+      reinterpret_cast<char*>(&start_)) + sizeof(insert_text_format_));
   _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
 }
 
-const char* TextDocumentItem::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) {
+const char* CompletionItem::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) {
 #define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
   while (!ctx->Done(&ptr)) {
     uint32_t tag;
     ptr = ::_pbi::ReadTag(ptr, &tag);
     switch (tag >> 3) {
-      // string uri = 1;
+      // int32 start = 1;
       case 1:
-        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 10)) {
-          auto str = _internal_mutable_uri();
-          ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
+        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 8)) {
+          start_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
           CHK_(ptr);
-          CHK_(::_pbi::VerifyUTF8(str, "io.deephaven.proto.backplane.script.grpc.TextDocumentItem.uri"));
         } else
           goto handle_unusual;
         continue;
-      // string language_id = 2;
+      // int32 length = 2;
       case 2:
-        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 18)) {
-          auto str = _internal_mutable_language_id();
-          ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
+        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 16)) {
+          length_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
           CHK_(ptr);
-          CHK_(::_pbi::VerifyUTF8(str, "io.deephaven.proto.backplane.script.grpc.TextDocumentItem.language_id"));
         } else
           goto handle_unusual;
         continue;
-      // int32 version = 3;
+      // string label = 3;
       case 3:
-        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 24)) {
-          version_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
+        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 26)) {
+          auto str = _internal_mutable_label();
+          ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
+          CHK_(ptr);
+          CHK_(::_pbi::VerifyUTF8(str, "io.deephaven.proto.backplane.script.grpc.CompletionItem.label"));
+        } else
+          goto handle_unusual;
+        continue;
+      // int32 kind = 4;
+      case 4:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 32)) {
+          kind_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
+          CHK_(ptr);
+        } else
+          goto handle_unusual;
+        continue;
+      // string detail = 5;
+      case 5:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 42)) {
+          auto str = _internal_mutable_detail();
+          ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
+          CHK_(ptr);
+          CHK_(::_pbi::VerifyUTF8(str, "io.deephaven.proto.backplane.script.grpc.CompletionItem.detail"));
+        } else
+          goto handle_unusual;
+        continue;
+      // bool deprecated = 7;
+      case 7:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 56)) {
+          deprecated_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint64(&ptr);
+          CHK_(ptr);
+        } else
+          goto handle_unusual;
+        continue;
+      // bool preselect = 8;
+      case 8:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 64)) {
+          preselect_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint64(&ptr);
           CHK_(ptr);
         } else
           goto handle_unusual;
         continue;
-      // string text = 4;
-      case 4:
-        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 34)) {
-          auto str = _internal_mutable_text();
-          ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
+      // .io.deephaven.proto.backplane.script.grpc.TextEdit text_edit = 9;
+      case 9:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 74)) {
+          ptr = ctx->ParseMessage(_internal_mutable_text_edit(), ptr);
+          CHK_(ptr);
+        } else
+          goto handle_unusual;
+        continue;
+      // string sort_text = 10;
+      case 10:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 82)) {
+          auto str = _internal_mutable_sort_text();
+          ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
+          CHK_(ptr);
+          CHK_(::_pbi::VerifyUTF8(str, "io.deephaven.proto.backplane.script.grpc.CompletionItem.sort_text"));
+        } else
+          goto handle_unusual;
+        continue;
+      // string filter_text = 11;
+      case 11:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 90)) {
+          auto str = _internal_mutable_filter_text();
+          ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
+          CHK_(ptr);
+          CHK_(::_pbi::VerifyUTF8(str, "io.deephaven.proto.backplane.script.grpc.CompletionItem.filter_text"));
+        } else
+          goto handle_unusual;
+        continue;
+      // int32 insert_text_format = 12;
+      case 12:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 96)) {
+          insert_text_format_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
+          CHK_(ptr);
+        } else
+          goto handle_unusual;
+        continue;
+      // repeated .io.deephaven.proto.backplane.script.grpc.TextEdit additional_text_edits = 13;
+      case 13:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 106)) {
+          ptr -= 1;
+          do {
+            ptr += 1;
+            ptr = ctx->ParseMessage(_internal_add_additional_text_edits(), ptr);
+            CHK_(ptr);
+            if (!ctx->DataAvailable(ptr)) break;
+          } while (::PROTOBUF_NAMESPACE_ID::internal::ExpectTag<106>(ptr));
+        } else
+          goto handle_unusual;
+        continue;
+      // repeated string commit_characters = 14;
+      case 14:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 114)) {
+          ptr -= 1;
+          do {
+            ptr += 1;
+            auto str = _internal_add_commit_characters();
+            ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
+            CHK_(ptr);
+            CHK_(::_pbi::VerifyUTF8(str, "io.deephaven.proto.backplane.script.grpc.CompletionItem.commit_characters"));
+            if (!ctx->DataAvailable(ptr)) break;
+          } while (::PROTOBUF_NAMESPACE_ID::internal::ExpectTag<114>(ptr));
+        } else
+          goto handle_unusual;
+        continue;
+      // .io.deephaven.proto.backplane.script.grpc.MarkupContent documentation = 15;
+      case 15:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 122)) {
+          ptr = ctx->ParseMessage(_internal_mutable_documentation(), ptr);
           CHK_(ptr);
-          CHK_(::_pbi::VerifyUTF8(str, "io.deephaven.proto.backplane.script.grpc.TextDocumentItem.text"));
         } else
           goto handle_unusual;
         continue;
@@ -5482,217 +9798,380 @@ const char* TextDocumentItem::_InternalParse(const char* ptr, ::_pbi::ParseConte
 #undef CHK_
 }
 
-uint8_t* TextDocumentItem::_InternalSerialize(
+uint8_t* CompletionItem::_InternalSerialize(
     uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const {
-  // @@protoc_insertion_point(serialize_to_array_start:io.deephaven.proto.backplane.script.grpc.TextDocumentItem)
+  // @@protoc_insertion_point(serialize_to_array_start:io.deephaven.proto.backplane.script.grpc.CompletionItem)
   uint32_t cached_has_bits = 0;
   (void) cached_has_bits;
 
-  // string uri = 1;
-  if (!this->_internal_uri().empty()) {
+  // int32 start = 1;
+  if (this->_internal_start() != 0) {
+    target = stream->EnsureSpace(target);
+    target = ::_pbi::WireFormatLite::WriteInt32ToArray(1, this->_internal_start(), target);
+  }
+
+  // int32 length = 2;
+  if (this->_internal_length() != 0) {
+    target = stream->EnsureSpace(target);
+    target = ::_pbi::WireFormatLite::WriteInt32ToArray(2, this->_internal_length(), target);
+  }
+
+  // string label = 3;
+  if (!this->_internal_label().empty()) {
     ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
-      this->_internal_uri().data(), static_cast<int>(this->_internal_uri().length()),
+      this->_internal_label().data(), static_cast<int>(this->_internal_label().length()),
       ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
-      "io.deephaven.proto.backplane.script.grpc.TextDocumentItem.uri");
+      "io.deephaven.proto.backplane.script.grpc.CompletionItem.label");
     target = stream->WriteStringMaybeAliased(
-        1, this->_internal_uri(), target);
+        3, this->_internal_label(), target);
   }
 
-  // string language_id = 2;
-  if (!this->_internal_language_id().empty()) {
+  // int32 kind = 4;
+  if (this->_internal_kind() != 0) {
+    target = stream->EnsureSpace(target);
+    target = ::_pbi::WireFormatLite::WriteInt32ToArray(4, this->_internal_kind(), target);
+  }
+
+  // string detail = 5;
+  if (!this->_internal_detail().empty()) {
     ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
-      this->_internal_language_id().data(), static_cast<int>(this->_internal_language_id().length()),
+      this->_internal_detail().data(), static_cast<int>(this->_internal_detail().length()),
       ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
-      "io.deephaven.proto.backplane.script.grpc.TextDocumentItem.language_id");
+      "io.deephaven.proto.backplane.script.grpc.CompletionItem.detail");
     target = stream->WriteStringMaybeAliased(
-        2, this->_internal_language_id(), target);
+        5, this->_internal_detail(), target);
   }
 
-  // int32 version = 3;
-  if (this->_internal_version() != 0) {
+  // bool deprecated = 7;
+  if (this->_internal_deprecated() != 0) {
     target = stream->EnsureSpace(target);
-    target = ::_pbi::WireFormatLite::WriteInt32ToArray(3, this->_internal_version(), target);
+    target = ::_pbi::WireFormatLite::WriteBoolToArray(7, this->_internal_deprecated(), target);
   }
 
-  // string text = 4;
-  if (!this->_internal_text().empty()) {
+  // bool preselect = 8;
+  if (this->_internal_preselect() != 0) {
+    target = stream->EnsureSpace(target);
+    target = ::_pbi::WireFormatLite::WriteBoolToArray(8, this->_internal_preselect(), target);
+  }
+
+  // .io.deephaven.proto.backplane.script.grpc.TextEdit text_edit = 9;
+  if (this->_internal_has_text_edit()) {
+    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
+      InternalWriteMessage(9, _Internal::text_edit(this),
+        _Internal::text_edit(this).GetCachedSize(), target, stream);
+  }
+
+  // string sort_text = 10;
+  if (!this->_internal_sort_text().empty()) {
     ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
-      this->_internal_text().data(), static_cast<int>(this->_internal_text().length()),
+      this->_internal_sort_text().data(), static_cast<int>(this->_internal_sort_text().length()),
       ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
-      "io.deephaven.proto.backplane.script.grpc.TextDocumentItem.text");
+      "io.deephaven.proto.backplane.script.grpc.CompletionItem.sort_text");
     target = stream->WriteStringMaybeAliased(
-        4, this->_internal_text(), target);
+        10, this->_internal_sort_text(), target);
+  }
+
+  // string filter_text = 11;
+  if (!this->_internal_filter_text().empty()) {
+    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
+      this->_internal_filter_text().data(), static_cast<int>(this->_internal_filter_text().length()),
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
+      "io.deephaven.proto.backplane.script.grpc.CompletionItem.filter_text");
+    target = stream->WriteStringMaybeAliased(
+        11, this->_internal_filter_text(), target);
+  }
+
+  // int32 insert_text_format = 12;
+  if (this->_internal_insert_text_format() != 0) {
+    target = stream->EnsureSpace(target);
+    target = ::_pbi::WireFormatLite::WriteInt32ToArray(12, this->_internal_insert_text_format(), target);
+  }
+
+  // repeated .io.deephaven.proto.backplane.script.grpc.TextEdit additional_text_edits = 13;
+  for (unsigned i = 0,
+      n = static_cast<unsigned>(this->_internal_additional_text_edits_size()); i < n; i++) {
+    const auto& repfield = this->_internal_additional_text_edits(i);
+    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
+        InternalWriteMessage(13, repfield, repfield.GetCachedSize(), target, stream);
+  }
+
+  // repeated string commit_characters = 14;
+  for (int i = 0, n = this->_internal_commit_characters_size(); i < n; i++) {
+    const auto& s = this->_internal_commit_characters(i);
+    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
+      s.data(), static_cast<int>(s.length()),
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
+      "io.deephaven.proto.backplane.script.grpc.CompletionItem.commit_characters");
+    target = stream->WriteString(14, s, target);
+  }
+
+  // .io.deephaven.proto.backplane.script.grpc.MarkupContent documentation = 15;
+  if (this->_internal_has_documentation()) {
+    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
+      InternalWriteMessage(15, _Internal::documentation(this),
+        _Internal::documentation(this).GetCachedSize(), target, stream);
   }
 
   if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
     target = ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray(
         _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream);
   }
-  // @@protoc_insertion_point(serialize_to_array_end:io.deephaven.proto.backplane.script.grpc.TextDocumentItem)
+  // @@protoc_insertion_point(serialize_to_array_end:io.deephaven.proto.backplane.script.grpc.CompletionItem)
   return target;
 }
 
-size_t TextDocumentItem::ByteSizeLong() const {
-// @@protoc_insertion_point(message_byte_size_start:io.deephaven.proto.backplane.script.grpc.TextDocumentItem)
+size_t CompletionItem::ByteSizeLong() const {
+// @@protoc_insertion_point(message_byte_size_start:io.deephaven.proto.backplane.script.grpc.CompletionItem)
   size_t total_size = 0;
 
   uint32_t cached_has_bits = 0;
   // Prevent compiler warnings about cached_has_bits being unused
   (void) cached_has_bits;
 
-  // string uri = 1;
-  if (!this->_internal_uri().empty()) {
+  // repeated .io.deephaven.proto.backplane.script.grpc.TextEdit additional_text_edits = 13;
+  total_size += 1UL * this->_internal_additional_text_edits_size();
+  for (const auto& msg : this->additional_text_edits_) {
+    total_size +=
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(msg);
+  }
+
+  // repeated string commit_characters = 14;
+  total_size += 1 *
+      ::PROTOBUF_NAMESPACE_ID::internal::FromIntSize(commit_characters_.size());
+  for (int i = 0, n = commit_characters_.size(); i < n; i++) {
+    total_size += ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
+      commit_characters_.Get(i));
+  }
+
+  // string label = 3;
+  if (!this->_internal_label().empty()) {
     total_size += 1 +
       ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
-        this->_internal_uri());
+        this->_internal_label());
   }
 
-  // string language_id = 2;
-  if (!this->_internal_language_id().empty()) {
+  // string detail = 5;
+  if (!this->_internal_detail().empty()) {
     total_size += 1 +
       ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
-        this->_internal_language_id());
+        this->_internal_detail());
   }
 
-  // string text = 4;
-  if (!this->_internal_text().empty()) {
+  // string sort_text = 10;
+  if (!this->_internal_sort_text().empty()) {
     total_size += 1 +
       ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
-        this->_internal_text());
+        this->_internal_sort_text());
   }
 
-  // int32 version = 3;
-  if (this->_internal_version() != 0) {
-    total_size += ::_pbi::WireFormatLite::Int32SizePlusOne(this->_internal_version());
+  // string filter_text = 11;
+  if (!this->_internal_filter_text().empty()) {
+    total_size += 1 +
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
+        this->_internal_filter_text());
+  }
+
+  // .io.deephaven.proto.backplane.script.grpc.TextEdit text_edit = 9;
+  if (this->_internal_has_text_edit()) {
+    total_size += 1 +
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
+        *text_edit_);
+  }
+
+  // .io.deephaven.proto.backplane.script.grpc.MarkupContent documentation = 15;
+  if (this->_internal_has_documentation()) {
+    total_size += 1 +
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
+        *documentation_);
+  }
+
+  // int32 start = 1;
+  if (this->_internal_start() != 0) {
+    total_size += ::_pbi::WireFormatLite::Int32SizePlusOne(this->_internal_start());
+  }
+
+  // int32 length = 2;
+  if (this->_internal_length() != 0) {
+    total_size += ::_pbi::WireFormatLite::Int32SizePlusOne(this->_internal_length());
+  }
+
+  // int32 kind = 4;
+  if (this->_internal_kind() != 0) {
+    total_size += ::_pbi::WireFormatLite::Int32SizePlusOne(this->_internal_kind());
+  }
+
+  // bool deprecated = 7;
+  if (this->_internal_deprecated() != 0) {
+    total_size += 1 + 1;
+  }
+
+  // bool preselect = 8;
+  if (this->_internal_preselect() != 0) {
+    total_size += 1 + 1;
+  }
+
+  // int32 insert_text_format = 12;
+  if (this->_internal_insert_text_format() != 0) {
+    total_size += ::_pbi::WireFormatLite::Int32SizePlusOne(this->_internal_insert_text_format());
   }
 
   return MaybeComputeUnknownFieldsSize(total_size, &_cached_size_);
 }
 
-const ::PROTOBUF_NAMESPACE_ID::Message::ClassData TextDocumentItem::_class_data_ = {
+const ::PROTOBUF_NAMESPACE_ID::Message::ClassData CompletionItem::_class_data_ = {
     ::PROTOBUF_NAMESPACE_ID::Message::CopyWithSizeCheck,
-    TextDocumentItem::MergeImpl
+    CompletionItem::MergeImpl
 };
-const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*TextDocumentItem::GetClassData() const { return &_class_data_; }
+const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*CompletionItem::GetClassData() const { return &_class_data_; }
 
-void TextDocumentItem::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to,
+void CompletionItem::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to,
                       const ::PROTOBUF_NAMESPACE_ID::Message& from) {
-  static_cast<TextDocumentItem *>(to)->MergeFrom(
-      static_cast<const TextDocumentItem &>(from));
+  static_cast<CompletionItem *>(to)->MergeFrom(
+      static_cast<const CompletionItem &>(from));
 }
 
 
-void TextDocumentItem::MergeFrom(const TextDocumentItem& from) {
-// @@protoc_insertion_point(class_specific_merge_from_start:io.deephaven.proto.backplane.script.grpc.TextDocumentItem)
+void CompletionItem::MergeFrom(const CompletionItem& from) {
+// @@protoc_insertion_point(class_specific_merge_from_start:io.deephaven.proto.backplane.script.grpc.CompletionItem)
   GOOGLE_DCHECK_NE(&from, this);
   uint32_t cached_has_bits = 0;
   (void) cached_has_bits;
 
-  if (!from._internal_uri().empty()) {
-    _internal_set_uri(from._internal_uri());
+  additional_text_edits_.MergeFrom(from.additional_text_edits_);
+  commit_characters_.MergeFrom(from.commit_characters_);
+  if (!from._internal_label().empty()) {
+    _internal_set_label(from._internal_label());
   }
-  if (!from._internal_language_id().empty()) {
-    _internal_set_language_id(from._internal_language_id());
+  if (!from._internal_detail().empty()) {
+    _internal_set_detail(from._internal_detail());
   }
-  if (!from._internal_text().empty()) {
-    _internal_set_text(from._internal_text());
+  if (!from._internal_sort_text().empty()) {
+    _internal_set_sort_text(from._internal_sort_text());
+  }
+  if (!from._internal_filter_text().empty()) {
+    _internal_set_filter_text(from._internal_filter_text());
+  }
+  if (from._internal_has_text_edit()) {
+    _internal_mutable_text_edit()->::io::deephaven::proto::backplane::script::grpc::TextEdit::MergeFrom(from._internal_text_edit());
+  }
+  if (from._internal_has_documentation()) {
+    _internal_mutable_documentation()->::io::deephaven::proto::backplane::script::grpc::MarkupContent::MergeFrom(from._internal_documentation());
+  }
+  if (from._internal_start() != 0) {
+    _internal_set_start(from._internal_start());
+  }
+  if (from._internal_length() != 0) {
+    _internal_set_length(from._internal_length());
+  }
+  if (from._internal_kind() != 0) {
+    _internal_set_kind(from._internal_kind());
+  }
+  if (from._internal_deprecated() != 0) {
+    _internal_set_deprecated(from._internal_deprecated());
+  }
+  if (from._internal_preselect() != 0) {
+    _internal_set_preselect(from._internal_preselect());
   }
-  if (from._internal_version() != 0) {
-    _internal_set_version(from._internal_version());
+  if (from._internal_insert_text_format() != 0) {
+    _internal_set_insert_text_format(from._internal_insert_text_format());
   }
   _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
 }
 
-void TextDocumentItem::CopyFrom(const TextDocumentItem& from) {
-// @@protoc_insertion_point(class_specific_copy_from_start:io.deephaven.proto.backplane.script.grpc.TextDocumentItem)
+void CompletionItem::CopyFrom(const CompletionItem& from) {
+// @@protoc_insertion_point(class_specific_copy_from_start:io.deephaven.proto.backplane.script.grpc.CompletionItem)
   if (&from == this) return;
   Clear();
   MergeFrom(from);
 }
 
-bool TextDocumentItem::IsInitialized() const {
+bool CompletionItem::IsInitialized() const {
   return true;
 }
 
-void TextDocumentItem::InternalSwap(TextDocumentItem* other) {
+void CompletionItem::InternalSwap(CompletionItem* other) {
   using std::swap;
   auto* lhs_arena = GetArenaForAllocation();
   auto* rhs_arena = other->GetArenaForAllocation();
   _internal_metadata_.InternalSwap(&other->_internal_metadata_);
+  additional_text_edits_.InternalSwap(&other->additional_text_edits_);
+  commit_characters_.InternalSwap(&other->commit_characters_);
   ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
-      &uri_, lhs_arena,
-      &other->uri_, rhs_arena
+      &label_, lhs_arena,
+      &other->label_, rhs_arena
   );
   ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
-      &language_id_, lhs_arena,
-      &other->language_id_, rhs_arena
+      &detail_, lhs_arena,
+      &other->detail_, rhs_arena
   );
   ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
-      &text_, lhs_arena,
-      &other->text_, rhs_arena
+      &sort_text_, lhs_arena,
+      &other->sort_text_, rhs_arena
   );
-  swap(version_, other->version_);
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
+      &filter_text_, lhs_arena,
+      &other->filter_text_, rhs_arena
+  );
+  ::PROTOBUF_NAMESPACE_ID::internal::memswap<
+      PROTOBUF_FIELD_OFFSET(CompletionItem, insert_text_format_)
+      + sizeof(CompletionItem::insert_text_format_)
+      - PROTOBUF_FIELD_OFFSET(CompletionItem, text_edit_)>(
+          reinterpret_cast<char*>(&text_edit_),
+          reinterpret_cast<char*>(&other->text_edit_));
 }
 
-::PROTOBUF_NAMESPACE_ID::Metadata TextDocumentItem::GetMetadata() const {
+::PROTOBUF_NAMESPACE_ID::Metadata CompletionItem::GetMetadata() const {
   return ::_pbi::AssignDescriptors(
       &descriptor_table_deephaven_2fproto_2fconsole_2eproto_getter, &descriptor_table_deephaven_2fproto_2fconsole_2eproto_once,
-      file_level_metadata_deephaven_2fproto_2fconsole_2eproto[18]);
+      file_level_metadata_deephaven_2fproto_2fconsole_2eproto[31]);
 }
 
 // ===================================================================
 
-class CloseDocumentRequest::_Internal {
+class TextEdit::_Internal {
  public:
-  static const ::io::deephaven::proto::backplane::grpc::Ticket& console_id(const CloseDocumentRequest* msg);
-  static const ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier& text_document(const CloseDocumentRequest* msg);
+  static const ::io::deephaven::proto::backplane::script::grpc::DocumentRange& range(const TextEdit* msg);
 };
 
-const ::io::deephaven::proto::backplane::grpc::Ticket&
-CloseDocumentRequest::_Internal::console_id(const CloseDocumentRequest* msg) {
-  return *msg->console_id_;
-}
-const ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier&
-CloseDocumentRequest::_Internal::text_document(const CloseDocumentRequest* msg) {
-  return *msg->text_document_;
-}
-void CloseDocumentRequest::clear_console_id() {
-  if (GetArenaForAllocation() == nullptr && console_id_ != nullptr) {
-    delete console_id_;
-  }
-  console_id_ = nullptr;
+const ::io::deephaven::proto::backplane::script::grpc::DocumentRange&
+TextEdit::_Internal::range(const TextEdit* msg) {
+  return *msg->range_;
 }
-CloseDocumentRequest::CloseDocumentRequest(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+TextEdit::TextEdit(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                          bool is_message_owned)
   : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned) {
   SharedCtor();
-  // @@protoc_insertion_point(arena_constructor:io.deephaven.proto.backplane.script.grpc.CloseDocumentRequest)
+  // @@protoc_insertion_point(arena_constructor:io.deephaven.proto.backplane.script.grpc.TextEdit)
 }
-CloseDocumentRequest::CloseDocumentRequest(const CloseDocumentRequest& from)
+TextEdit::TextEdit(const TextEdit& from)
   : ::PROTOBUF_NAMESPACE_ID::Message() {
   _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
-  if (from._internal_has_console_id()) {
-    console_id_ = new ::io::deephaven::proto::backplane::grpc::Ticket(*from.console_id_);
-  } else {
-    console_id_ = nullptr;
+  text_.InitDefault();
+  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+    text_.Set("", GetArenaForAllocation());
+  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  if (!from._internal_text().empty()) {
+    text_.Set(from._internal_text(), 
+      GetArenaForAllocation());
   }
-  if (from._internal_has_text_document()) {
-    text_document_ = new ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier(*from.text_document_);
+  if (from._internal_has_range()) {
+    range_ = new ::io::deephaven::proto::backplane::script::grpc::DocumentRange(*from.range_);
   } else {
-    text_document_ = nullptr;
+    range_ = nullptr;
   }
-  // @@protoc_insertion_point(copy_constructor:io.deephaven.proto.backplane.script.grpc.CloseDocumentRequest)
+  // @@protoc_insertion_point(copy_constructor:io.deephaven.proto.backplane.script.grpc.TextEdit)
 }
 
-inline void CloseDocumentRequest::SharedCtor() {
-::memset(reinterpret_cast<char*>(this) + static_cast<size_t>(
-    reinterpret_cast<char*>(&console_id_) - reinterpret_cast<char*>(this)),
-    0, static_cast<size_t>(reinterpret_cast<char*>(&text_document_) -
-    reinterpret_cast<char*>(&console_id_)) + sizeof(text_document_));
+inline void TextEdit::SharedCtor() {
+text_.InitDefault();
+#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  text_.Set("", GetArenaForAllocation());
+#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+range_ = nullptr;
 }
 
-CloseDocumentRequest::~CloseDocumentRequest() {
-  // @@protoc_insertion_point(destructor:io.deephaven.proto.backplane.script.grpc.CloseDocumentRequest)
+TextEdit::~TextEdit() {
+  // @@protoc_insertion_point(destructor:io.deephaven.proto.backplane.script.grpc.TextEdit)
   if (auto *arena = _internal_metadata_.DeleteReturnArena<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>()) {
   (void)arena;
     return;
@@ -5700,52 +10179,51 @@ CloseDocumentRequest::~CloseDocumentRequest() {
   SharedDtor();
 }
 
-inline void CloseDocumentRequest::SharedDtor() {
+inline void TextEdit::SharedDtor() {
   GOOGLE_DCHECK(GetArenaForAllocation() == nullptr);
-  if (this != internal_default_instance()) delete console_id_;
-  if (this != internal_default_instance()) delete text_document_;
+  text_.Destroy();
+  if (this != internal_default_instance()) delete range_;
 }
 
-void CloseDocumentRequest::SetCachedSize(int size) const {
+void TextEdit::SetCachedSize(int size) const {
   _cached_size_.Set(size);
 }
 
-void CloseDocumentRequest::Clear() {
-// @@protoc_insertion_point(message_clear_start:io.deephaven.proto.backplane.script.grpc.CloseDocumentRequest)
+void TextEdit::Clear() {
+// @@protoc_insertion_point(message_clear_start:io.deephaven.proto.backplane.script.grpc.TextEdit)
   uint32_t cached_has_bits = 0;
   // Prevent compiler warnings about cached_has_bits being unused
   (void) cached_has_bits;
 
-  if (GetArenaForAllocation() == nullptr && console_id_ != nullptr) {
-    delete console_id_;
-  }
-  console_id_ = nullptr;
-  if (GetArenaForAllocation() == nullptr && text_document_ != nullptr) {
-    delete text_document_;
+  text_.ClearToEmpty();
+  if (GetArenaForAllocation() == nullptr && range_ != nullptr) {
+    delete range_;
   }
-  text_document_ = nullptr;
+  range_ = nullptr;
   _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
 }
 
-const char* CloseDocumentRequest::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) {
+const char* TextEdit::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) {
 #define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
   while (!ctx->Done(&ptr)) {
     uint32_t tag;
     ptr = ::_pbi::ReadTag(ptr, &tag);
     switch (tag >> 3) {
-      // .io.deephaven.proto.backplane.grpc.Ticket console_id = 1;
+      // .io.deephaven.proto.backplane.script.grpc.DocumentRange range = 1;
       case 1:
         if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 10)) {
-          ptr = ctx->ParseMessage(_internal_mutable_console_id(), ptr);
+          ptr = ctx->ParseMessage(_internal_mutable_range(), ptr);
           CHK_(ptr);
         } else
           goto handle_unusual;
         continue;
-      // .io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier text_document = 2;
+      // string text = 2;
       case 2:
         if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 18)) {
-          ptr = ctx->ParseMessage(_internal_mutable_text_document(), ptr);
+          auto str = _internal_mutable_text();
+          ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
           CHK_(ptr);
+          CHK_(::_pbi::VerifyUTF8(str, "io.deephaven.proto.backplane.script.grpc.TextEdit.text"));
         } else
           goto handle_unusual;
         continue;
@@ -5772,165 +10250,176 @@ const char* CloseDocumentRequest::_InternalParse(const char* ptr, ::_pbi::ParseC
 #undef CHK_
 }
 
-uint8_t* CloseDocumentRequest::_InternalSerialize(
+uint8_t* TextEdit::_InternalSerialize(
     uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const {
-  // @@protoc_insertion_point(serialize_to_array_start:io.deephaven.proto.backplane.script.grpc.CloseDocumentRequest)
+  // @@protoc_insertion_point(serialize_to_array_start:io.deephaven.proto.backplane.script.grpc.TextEdit)
   uint32_t cached_has_bits = 0;
   (void) cached_has_bits;
 
-  // .io.deephaven.proto.backplane.grpc.Ticket console_id = 1;
-  if (this->_internal_has_console_id()) {
+  // .io.deephaven.proto.backplane.script.grpc.DocumentRange range = 1;
+  if (this->_internal_has_range()) {
     target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
-      InternalWriteMessage(1, _Internal::console_id(this),
-        _Internal::console_id(this).GetCachedSize(), target, stream);
+      InternalWriteMessage(1, _Internal::range(this),
+        _Internal::range(this).GetCachedSize(), target, stream);
   }
 
-  // .io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier text_document = 2;
-  if (this->_internal_has_text_document()) {
-    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
-      InternalWriteMessage(2, _Internal::text_document(this),
-        _Internal::text_document(this).GetCachedSize(), target, stream);
+  // string text = 2;
+  if (!this->_internal_text().empty()) {
+    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
+      this->_internal_text().data(), static_cast<int>(this->_internal_text().length()),
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
+      "io.deephaven.proto.backplane.script.grpc.TextEdit.text");
+    target = stream->WriteStringMaybeAliased(
+        2, this->_internal_text(), target);
   }
 
   if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
     target = ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray(
         _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream);
   }
-  // @@protoc_insertion_point(serialize_to_array_end:io.deephaven.proto.backplane.script.grpc.CloseDocumentRequest)
+  // @@protoc_insertion_point(serialize_to_array_end:io.deephaven.proto.backplane.script.grpc.TextEdit)
   return target;
 }
 
-size_t CloseDocumentRequest::ByteSizeLong() const {
-// @@protoc_insertion_point(message_byte_size_start:io.deephaven.proto.backplane.script.grpc.CloseDocumentRequest)
+size_t TextEdit::ByteSizeLong() const {
+// @@protoc_insertion_point(message_byte_size_start:io.deephaven.proto.backplane.script.grpc.TextEdit)
   size_t total_size = 0;
 
   uint32_t cached_has_bits = 0;
   // Prevent compiler warnings about cached_has_bits being unused
   (void) cached_has_bits;
 
-  // .io.deephaven.proto.backplane.grpc.Ticket console_id = 1;
-  if (this->_internal_has_console_id()) {
+  // string text = 2;
+  if (!this->_internal_text().empty()) {
     total_size += 1 +
-      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
-        *console_id_);
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
+        this->_internal_text());
   }
 
-  // .io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier text_document = 2;
-  if (this->_internal_has_text_document()) {
+  // .io.deephaven.proto.backplane.script.grpc.DocumentRange range = 1;
+  if (this->_internal_has_range()) {
     total_size += 1 +
       ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
-        *text_document_);
+        *range_);
   }
 
   return MaybeComputeUnknownFieldsSize(total_size, &_cached_size_);
 }
 
-const ::PROTOBUF_NAMESPACE_ID::Message::ClassData CloseDocumentRequest::_class_data_ = {
+const ::PROTOBUF_NAMESPACE_ID::Message::ClassData TextEdit::_class_data_ = {
     ::PROTOBUF_NAMESPACE_ID::Message::CopyWithSizeCheck,
-    CloseDocumentRequest::MergeImpl
+    TextEdit::MergeImpl
 };
-const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*CloseDocumentRequest::GetClassData() const { return &_class_data_; }
+const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*TextEdit::GetClassData() const { return &_class_data_; }
 
-void CloseDocumentRequest::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to,
+void TextEdit::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to,
                       const ::PROTOBUF_NAMESPACE_ID::Message& from) {
-  static_cast<CloseDocumentRequest *>(to)->MergeFrom(
-      static_cast<const CloseDocumentRequest &>(from));
+  static_cast<TextEdit *>(to)->MergeFrom(
+      static_cast<const TextEdit &>(from));
 }
 
 
-void CloseDocumentRequest::MergeFrom(const CloseDocumentRequest& from) {
-// @@protoc_insertion_point(class_specific_merge_from_start:io.deephaven.proto.backplane.script.grpc.CloseDocumentRequest)
+void TextEdit::MergeFrom(const TextEdit& from) {
+// @@protoc_insertion_point(class_specific_merge_from_start:io.deephaven.proto.backplane.script.grpc.TextEdit)
   GOOGLE_DCHECK_NE(&from, this);
   uint32_t cached_has_bits = 0;
   (void) cached_has_bits;
 
-  if (from._internal_has_console_id()) {
-    _internal_mutable_console_id()->::io::deephaven::proto::backplane::grpc::Ticket::MergeFrom(from._internal_console_id());
+  if (!from._internal_text().empty()) {
+    _internal_set_text(from._internal_text());
   }
-  if (from._internal_has_text_document()) {
-    _internal_mutable_text_document()->::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier::MergeFrom(from._internal_text_document());
+  if (from._internal_has_range()) {
+    _internal_mutable_range()->::io::deephaven::proto::backplane::script::grpc::DocumentRange::MergeFrom(from._internal_range());
   }
   _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
 }
 
-void CloseDocumentRequest::CopyFrom(const CloseDocumentRequest& from) {
-// @@protoc_insertion_point(class_specific_copy_from_start:io.deephaven.proto.backplane.script.grpc.CloseDocumentRequest)
+void TextEdit::CopyFrom(const TextEdit& from) {
+// @@protoc_insertion_point(class_specific_copy_from_start:io.deephaven.proto.backplane.script.grpc.TextEdit)
   if (&from == this) return;
   Clear();
   MergeFrom(from);
 }
 
-bool CloseDocumentRequest::IsInitialized() const {
+bool TextEdit::IsInitialized() const {
   return true;
 }
 
-void CloseDocumentRequest::InternalSwap(CloseDocumentRequest* other) {
+void TextEdit::InternalSwap(TextEdit* other) {
   using std::swap;
+  auto* lhs_arena = GetArenaForAllocation();
+  auto* rhs_arena = other->GetArenaForAllocation();
   _internal_metadata_.InternalSwap(&other->_internal_metadata_);
-  ::PROTOBUF_NAMESPACE_ID::internal::memswap<
-      PROTOBUF_FIELD_OFFSET(CloseDocumentRequest, text_document_)
-      + sizeof(CloseDocumentRequest::text_document_)
-      - PROTOBUF_FIELD_OFFSET(CloseDocumentRequest, console_id_)>(
-          reinterpret_cast<char*>(&console_id_),
-          reinterpret_cast<char*>(&other->console_id_));
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
+      &text_, lhs_arena,
+      &other->text_, rhs_arena
+  );
+  swap(range_, other->range_);
 }
 
-::PROTOBUF_NAMESPACE_ID::Metadata CloseDocumentRequest::GetMetadata() const {
+::PROTOBUF_NAMESPACE_ID::Metadata TextEdit::GetMetadata() const {
   return ::_pbi::AssignDescriptors(
       &descriptor_table_deephaven_2fproto_2fconsole_2eproto_getter, &descriptor_table_deephaven_2fproto_2fconsole_2eproto_once,
-      file_level_metadata_deephaven_2fproto_2fconsole_2eproto[19]);
+      file_level_metadata_deephaven_2fproto_2fconsole_2eproto[32]);
 }
 
 // ===================================================================
 
-class ChangeDocumentRequest_TextDocumentContentChangeEvent::_Internal {
+class GetSignatureHelpRequest::_Internal {
  public:
-  static const ::io::deephaven::proto::backplane::script::grpc::DocumentRange& range(const ChangeDocumentRequest_TextDocumentContentChangeEvent* msg);
+  static const ::io::deephaven::proto::backplane::script::grpc::SignatureHelpContext& context(const GetSignatureHelpRequest* msg);
+  static const ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier& text_document(const GetSignatureHelpRequest* msg);
+  static const ::io::deephaven::proto::backplane::script::grpc::Position& position(const GetSignatureHelpRequest* msg);
 };
 
-const ::io::deephaven::proto::backplane::script::grpc::DocumentRange&
-ChangeDocumentRequest_TextDocumentContentChangeEvent::_Internal::range(const ChangeDocumentRequest_TextDocumentContentChangeEvent* msg) {
-  return *msg->range_;
+const ::io::deephaven::proto::backplane::script::grpc::SignatureHelpContext&
+GetSignatureHelpRequest::_Internal::context(const GetSignatureHelpRequest* msg) {
+  return *msg->context_;
 }
-ChangeDocumentRequest_TextDocumentContentChangeEvent::ChangeDocumentRequest_TextDocumentContentChangeEvent(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+const ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier&
+GetSignatureHelpRequest::_Internal::text_document(const GetSignatureHelpRequest* msg) {
+  return *msg->text_document_;
+}
+const ::io::deephaven::proto::backplane::script::grpc::Position&
+GetSignatureHelpRequest::_Internal::position(const GetSignatureHelpRequest* msg) {
+  return *msg->position_;
+}
+GetSignatureHelpRequest::GetSignatureHelpRequest(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                          bool is_message_owned)
   : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned) {
   SharedCtor();
-  // @@protoc_insertion_point(arena_constructor:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.TextDocumentContentChangeEvent)
+  // @@protoc_insertion_point(arena_constructor:io.deephaven.proto.backplane.script.grpc.GetSignatureHelpRequest)
 }
-ChangeDocumentRequest_TextDocumentContentChangeEvent::ChangeDocumentRequest_TextDocumentContentChangeEvent(const ChangeDocumentRequest_TextDocumentContentChangeEvent& from)
+GetSignatureHelpRequest::GetSignatureHelpRequest(const GetSignatureHelpRequest& from)
   : ::PROTOBUF_NAMESPACE_ID::Message() {
   _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
-  text_.InitDefault();
-  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
-    text_.Set("", GetArenaForAllocation());
-  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
-  if (!from._internal_text().empty()) {
-    text_.Set(from._internal_text(), 
-      GetArenaForAllocation());
+  if (from._internal_has_context()) {
+    context_ = new ::io::deephaven::proto::backplane::script::grpc::SignatureHelpContext(*from.context_);
+  } else {
+    context_ = nullptr;
   }
-  if (from._internal_has_range()) {
-    range_ = new ::io::deephaven::proto::backplane::script::grpc::DocumentRange(*from.range_);
+  if (from._internal_has_text_document()) {
+    text_document_ = new ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier(*from.text_document_);
   } else {
-    range_ = nullptr;
+    text_document_ = nullptr;
   }
-  range_length_ = from.range_length_;
-  // @@protoc_insertion_point(copy_constructor:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.TextDocumentContentChangeEvent)
+  if (from._internal_has_position()) {
+    position_ = new ::io::deephaven::proto::backplane::script::grpc::Position(*from.position_);
+  } else {
+    position_ = nullptr;
+  }
+  // @@protoc_insertion_point(copy_constructor:io.deephaven.proto.backplane.script.grpc.GetSignatureHelpRequest)
 }
 
-inline void ChangeDocumentRequest_TextDocumentContentChangeEvent::SharedCtor() {
-text_.InitDefault();
-#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
-  text_.Set("", GetArenaForAllocation());
-#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+inline void GetSignatureHelpRequest::SharedCtor() {
 ::memset(reinterpret_cast<char*>(this) + static_cast<size_t>(
-    reinterpret_cast<char*>(&range_) - reinterpret_cast<char*>(this)),
-    0, static_cast<size_t>(reinterpret_cast<char*>(&range_length_) -
-    reinterpret_cast<char*>(&range_)) + sizeof(range_length_));
+    reinterpret_cast<char*>(&context_) - reinterpret_cast<char*>(this)),
+    0, static_cast<size_t>(reinterpret_cast<char*>(&position_) -
+    reinterpret_cast<char*>(&context_)) + sizeof(position_));
 }
 
-ChangeDocumentRequest_TextDocumentContentChangeEvent::~ChangeDocumentRequest_TextDocumentContentChangeEvent() {
-  // @@protoc_insertion_point(destructor:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.TextDocumentContentChangeEvent)
+GetSignatureHelpRequest::~GetSignatureHelpRequest() {
+  // @@protoc_insertion_point(destructor:io.deephaven.proto.backplane.script.grpc.GetSignatureHelpRequest)
   if (auto *arena = _internal_metadata_.DeleteReturnArena<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>()) {
   (void)arena;
     return;
@@ -5938,60 +10427,65 @@ ChangeDocumentRequest_TextDocumentContentChangeEvent::~ChangeDocumentRequest_Tex
   SharedDtor();
 }
 
-inline void ChangeDocumentRequest_TextDocumentContentChangeEvent::SharedDtor() {
+inline void GetSignatureHelpRequest::SharedDtor() {
   GOOGLE_DCHECK(GetArenaForAllocation() == nullptr);
-  text_.Destroy();
-  if (this != internal_default_instance()) delete range_;
+  if (this != internal_default_instance()) delete context_;
+  if (this != internal_default_instance()) delete text_document_;
+  if (this != internal_default_instance()) delete position_;
 }
 
-void ChangeDocumentRequest_TextDocumentContentChangeEvent::SetCachedSize(int size) const {
+void GetSignatureHelpRequest::SetCachedSize(int size) const {
   _cached_size_.Set(size);
 }
 
-void ChangeDocumentRequest_TextDocumentContentChangeEvent::Clear() {
-// @@protoc_insertion_point(message_clear_start:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.TextDocumentContentChangeEvent)
+void GetSignatureHelpRequest::Clear() {
+// @@protoc_insertion_point(message_clear_start:io.deephaven.proto.backplane.script.grpc.GetSignatureHelpRequest)
   uint32_t cached_has_bits = 0;
   // Prevent compiler warnings about cached_has_bits being unused
   (void) cached_has_bits;
 
-  text_.ClearToEmpty();
-  if (GetArenaForAllocation() == nullptr && range_ != nullptr) {
-    delete range_;
+  if (GetArenaForAllocation() == nullptr && context_ != nullptr) {
+    delete context_;
   }
-  range_ = nullptr;
-  range_length_ = 0;
+  context_ = nullptr;
+  if (GetArenaForAllocation() == nullptr && text_document_ != nullptr) {
+    delete text_document_;
+  }
+  text_document_ = nullptr;
+  if (GetArenaForAllocation() == nullptr && position_ != nullptr) {
+    delete position_;
+  }
+  position_ = nullptr;
   _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
 }
 
-const char* ChangeDocumentRequest_TextDocumentContentChangeEvent::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) {
+const char* GetSignatureHelpRequest::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) {
 #define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
   while (!ctx->Done(&ptr)) {
     uint32_t tag;
     ptr = ::_pbi::ReadTag(ptr, &tag);
     switch (tag >> 3) {
-      // .io.deephaven.proto.backplane.script.grpc.DocumentRange range = 1;
+      // .io.deephaven.proto.backplane.script.grpc.SignatureHelpContext context = 1;
       case 1:
         if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 10)) {
-          ptr = ctx->ParseMessage(_internal_mutable_range(), ptr);
+          ptr = ctx->ParseMessage(_internal_mutable_context(), ptr);
           CHK_(ptr);
         } else
           goto handle_unusual;
         continue;
-      // int32 range_length = 2;
+      // .io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier text_document = 2;
       case 2:
-        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 16)) {
-          range_length_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
+        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 18)) {
+          ptr = ctx->ParseMessage(_internal_mutable_text_document(), ptr);
           CHK_(ptr);
         } else
           goto handle_unusual;
         continue;
-      // string text = 3;
+      // .io.deephaven.proto.backplane.script.grpc.Position position = 3;
       case 3:
         if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 26)) {
-          auto str = _internal_mutable_text();
-          ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
+          ptr = ctx->ParseMessage(_internal_mutable_position(), ptr);
           CHK_(ptr);
-          CHK_(::_pbi::VerifyUTF8(str, "io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.TextDocumentContentChangeEvent.text"));
         } else
           goto handle_unusual;
         continue;
@@ -6018,193 +10512,189 @@ const char* ChangeDocumentRequest_TextDocumentContentChangeEvent::_InternalParse
 #undef CHK_
 }
 
-uint8_t* ChangeDocumentRequest_TextDocumentContentChangeEvent::_InternalSerialize(
+uint8_t* GetSignatureHelpRequest::_InternalSerialize(
     uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const {
-  // @@protoc_insertion_point(serialize_to_array_start:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.TextDocumentContentChangeEvent)
+  // @@protoc_insertion_point(serialize_to_array_start:io.deephaven.proto.backplane.script.grpc.GetSignatureHelpRequest)
   uint32_t cached_has_bits = 0;
   (void) cached_has_bits;
 
-  // .io.deephaven.proto.backplane.script.grpc.DocumentRange range = 1;
-  if (this->_internal_has_range()) {
+  // .io.deephaven.proto.backplane.script.grpc.SignatureHelpContext context = 1;
+  if (this->_internal_has_context()) {
     target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
-      InternalWriteMessage(1, _Internal::range(this),
-        _Internal::range(this).GetCachedSize(), target, stream);
+      InternalWriteMessage(1, _Internal::context(this),
+        _Internal::context(this).GetCachedSize(), target, stream);
   }
 
-  // int32 range_length = 2;
-  if (this->_internal_range_length() != 0) {
-    target = stream->EnsureSpace(target);
-    target = ::_pbi::WireFormatLite::WriteInt32ToArray(2, this->_internal_range_length(), target);
+  // .io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier text_document = 2;
+  if (this->_internal_has_text_document()) {
+    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
+      InternalWriteMessage(2, _Internal::text_document(this),
+        _Internal::text_document(this).GetCachedSize(), target, stream);
   }
 
-  // string text = 3;
-  if (!this->_internal_text().empty()) {
-    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
-      this->_internal_text().data(), static_cast<int>(this->_internal_text().length()),
-      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
-      "io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.TextDocumentContentChangeEvent.text");
-    target = stream->WriteStringMaybeAliased(
-        3, this->_internal_text(), target);
+  // .io.deephaven.proto.backplane.script.grpc.Position position = 3;
+  if (this->_internal_has_position()) {
+    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
+      InternalWriteMessage(3, _Internal::position(this),
+        _Internal::position(this).GetCachedSize(), target, stream);
   }
 
   if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
     target = ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray(
         _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream);
   }
-  // @@protoc_insertion_point(serialize_to_array_end:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.TextDocumentContentChangeEvent)
+  // @@protoc_insertion_point(serialize_to_array_end:io.deephaven.proto.backplane.script.grpc.GetSignatureHelpRequest)
   return target;
 }
 
-size_t ChangeDocumentRequest_TextDocumentContentChangeEvent::ByteSizeLong() const {
-// @@protoc_insertion_point(message_byte_size_start:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.TextDocumentContentChangeEvent)
+size_t GetSignatureHelpRequest::ByteSizeLong() const {
+// @@protoc_insertion_point(message_byte_size_start:io.deephaven.proto.backplane.script.grpc.GetSignatureHelpRequest)
   size_t total_size = 0;
 
   uint32_t cached_has_bits = 0;
   // Prevent compiler warnings about cached_has_bits being unused
   (void) cached_has_bits;
 
-  // string text = 3;
-  if (!this->_internal_text().empty()) {
+  // .io.deephaven.proto.backplane.script.grpc.SignatureHelpContext context = 1;
+  if (this->_internal_has_context()) {
     total_size += 1 +
-      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
-        this->_internal_text());
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
+        *context_);
   }
 
-  // .io.deephaven.proto.backplane.script.grpc.DocumentRange range = 1;
-  if (this->_internal_has_range()) {
+  // .io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier text_document = 2;
+  if (this->_internal_has_text_document()) {
     total_size += 1 +
       ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
-        *range_);
+        *text_document_);
   }
 
-  // int32 range_length = 2;
-  if (this->_internal_range_length() != 0) {
-    total_size += ::_pbi::WireFormatLite::Int32SizePlusOne(this->_internal_range_length());
+  // .io.deephaven.proto.backplane.script.grpc.Position position = 3;
+  if (this->_internal_has_position()) {
+    total_size += 1 +
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
+        *position_);
   }
 
   return MaybeComputeUnknownFieldsSize(total_size, &_cached_size_);
 }
 
-const ::PROTOBUF_NAMESPACE_ID::Message::ClassData ChangeDocumentRequest_TextDocumentContentChangeEvent::_class_data_ = {
+const ::PROTOBUF_NAMESPACE_ID::Message::ClassData GetSignatureHelpRequest::_class_data_ = {
     ::PROTOBUF_NAMESPACE_ID::Message::CopyWithSizeCheck,
-    ChangeDocumentRequest_TextDocumentContentChangeEvent::MergeImpl
+    GetSignatureHelpRequest::MergeImpl
 };
-const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*ChangeDocumentRequest_TextDocumentContentChangeEvent::GetClassData() const { return &_class_data_; }
+const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetSignatureHelpRequest::GetClassData() const { return &_class_data_; }
 
-void ChangeDocumentRequest_TextDocumentContentChangeEvent::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to,
+void GetSignatureHelpRequest::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to,
                       const ::PROTOBUF_NAMESPACE_ID::Message& from) {
-  static_cast<ChangeDocumentRequest_TextDocumentContentChangeEvent *>(to)->MergeFrom(
-      static_cast<const ChangeDocumentRequest_TextDocumentContentChangeEvent &>(from));
+  static_cast<GetSignatureHelpRequest *>(to)->MergeFrom(
+      static_cast<const GetSignatureHelpRequest &>(from));
 }
 
 
-void ChangeDocumentRequest_TextDocumentContentChangeEvent::MergeFrom(const ChangeDocumentRequest_TextDocumentContentChangeEvent& from) {
-// @@protoc_insertion_point(class_specific_merge_from_start:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.TextDocumentContentChangeEvent)
+void GetSignatureHelpRequest::MergeFrom(const GetSignatureHelpRequest& from) {
+// @@protoc_insertion_point(class_specific_merge_from_start:io.deephaven.proto.backplane.script.grpc.GetSignatureHelpRequest)
   GOOGLE_DCHECK_NE(&from, this);
   uint32_t cached_has_bits = 0;
   (void) cached_has_bits;
 
-  if (!from._internal_text().empty()) {
-    _internal_set_text(from._internal_text());
+  if (from._internal_has_context()) {
+    _internal_mutable_context()->::io::deephaven::proto::backplane::script::grpc::SignatureHelpContext::MergeFrom(from._internal_context());
   }
-  if (from._internal_has_range()) {
-    _internal_mutable_range()->::io::deephaven::proto::backplane::script::grpc::DocumentRange::MergeFrom(from._internal_range());
+  if (from._internal_has_text_document()) {
+    _internal_mutable_text_document()->::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier::MergeFrom(from._internal_text_document());
   }
-  if (from._internal_range_length() != 0) {
-    _internal_set_range_length(from._internal_range_length());
+  if (from._internal_has_position()) {
+    _internal_mutable_position()->::io::deephaven::proto::backplane::script::grpc::Position::MergeFrom(from._internal_position());
   }
   _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
 }
 
-void ChangeDocumentRequest_TextDocumentContentChangeEvent::CopyFrom(const ChangeDocumentRequest_TextDocumentContentChangeEvent& from) {
-// @@protoc_insertion_point(class_specific_copy_from_start:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.TextDocumentContentChangeEvent)
+void GetSignatureHelpRequest::CopyFrom(const GetSignatureHelpRequest& from) {
+// @@protoc_insertion_point(class_specific_copy_from_start:io.deephaven.proto.backplane.script.grpc.GetSignatureHelpRequest)
   if (&from == this) return;
   Clear();
   MergeFrom(from);
 }
 
-bool ChangeDocumentRequest_TextDocumentContentChangeEvent::IsInitialized() const {
+bool GetSignatureHelpRequest::IsInitialized() const {
   return true;
 }
 
-void ChangeDocumentRequest_TextDocumentContentChangeEvent::InternalSwap(ChangeDocumentRequest_TextDocumentContentChangeEvent* other) {
+void GetSignatureHelpRequest::InternalSwap(GetSignatureHelpRequest* other) {
   using std::swap;
-  auto* lhs_arena = GetArenaForAllocation();
-  auto* rhs_arena = other->GetArenaForAllocation();
   _internal_metadata_.InternalSwap(&other->_internal_metadata_);
-  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
-      &text_, lhs_arena,
-      &other->text_, rhs_arena
-  );
   ::PROTOBUF_NAMESPACE_ID::internal::memswap<
-      PROTOBUF_FIELD_OFFSET(ChangeDocumentRequest_TextDocumentContentChangeEvent, range_length_)
-      + sizeof(ChangeDocumentRequest_TextDocumentContentChangeEvent::range_length_)
-      - PROTOBUF_FIELD_OFFSET(ChangeDocumentRequest_TextDocumentContentChangeEvent, range_)>(
-          reinterpret_cast<char*>(&range_),
-          reinterpret_cast<char*>(&other->range_));
+      PROTOBUF_FIELD_OFFSET(GetSignatureHelpRequest, position_)
+      + sizeof(GetSignatureHelpRequest::position_)
+      - PROTOBUF_FIELD_OFFSET(GetSignatureHelpRequest, context_)>(
+          reinterpret_cast<char*>(&context_),
+          reinterpret_cast<char*>(&other->context_));
 }
 
-::PROTOBUF_NAMESPACE_ID::Metadata ChangeDocumentRequest_TextDocumentContentChangeEvent::GetMetadata() const {
+::PROTOBUF_NAMESPACE_ID::Metadata GetSignatureHelpRequest::GetMetadata() const {
   return ::_pbi::AssignDescriptors(
       &descriptor_table_deephaven_2fproto_2fconsole_2eproto_getter, &descriptor_table_deephaven_2fproto_2fconsole_2eproto_once,
-      file_level_metadata_deephaven_2fproto_2fconsole_2eproto[20]);
+      file_level_metadata_deephaven_2fproto_2fconsole_2eproto[33]);
 }
 
 // ===================================================================
 
-class ChangeDocumentRequest::_Internal {
+class SignatureHelpContext::_Internal {
  public:
-  static const ::io::deephaven::proto::backplane::grpc::Ticket& console_id(const ChangeDocumentRequest* msg);
-  static const ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier& text_document(const ChangeDocumentRequest* msg);
+  using HasBits = decltype(std::declval<SignatureHelpContext>()._has_bits_);
+  static void set_has_trigger_character(HasBits* has_bits) {
+    (*has_bits)[0] |= 1u;
+  }
+  static const ::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpResponse& active_signature_help(const SignatureHelpContext* msg);
 };
 
-const ::io::deephaven::proto::backplane::grpc::Ticket&
-ChangeDocumentRequest::_Internal::console_id(const ChangeDocumentRequest* msg) {
-  return *msg->console_id_;
-}
-const ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier&
-ChangeDocumentRequest::_Internal::text_document(const ChangeDocumentRequest* msg) {
-  return *msg->text_document_;
-}
-void ChangeDocumentRequest::clear_console_id() {
-  if (GetArenaForAllocation() == nullptr && console_id_ != nullptr) {
-    delete console_id_;
-  }
-  console_id_ = nullptr;
+const ::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpResponse&
+SignatureHelpContext::_Internal::active_signature_help(const SignatureHelpContext* msg) {
+  return *msg->active_signature_help_;
 }
-ChangeDocumentRequest::ChangeDocumentRequest(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+SignatureHelpContext::SignatureHelpContext(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                          bool is_message_owned)
-  : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned),
-  content_changes_(arena) {
+  : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned) {
   SharedCtor();
-  // @@protoc_insertion_point(arena_constructor:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest)
+  // @@protoc_insertion_point(arena_constructor:io.deephaven.proto.backplane.script.grpc.SignatureHelpContext)
 }
-ChangeDocumentRequest::ChangeDocumentRequest(const ChangeDocumentRequest& from)
+SignatureHelpContext::SignatureHelpContext(const SignatureHelpContext& from)
   : ::PROTOBUF_NAMESPACE_ID::Message(),
-      content_changes_(from.content_changes_) {
+      _has_bits_(from._has_bits_) {
   _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
-  if (from._internal_has_console_id()) {
-    console_id_ = new ::io::deephaven::proto::backplane::grpc::Ticket(*from.console_id_);
-  } else {
-    console_id_ = nullptr;
+  trigger_character_.InitDefault();
+  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+    trigger_character_.Set("", GetArenaForAllocation());
+  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  if (from._internal_has_trigger_character()) {
+    trigger_character_.Set(from._internal_trigger_character(), 
+      GetArenaForAllocation());
   }
-  if (from._internal_has_text_document()) {
-    text_document_ = new ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier(*from.text_document_);
+  if (from._internal_has_active_signature_help()) {
+    active_signature_help_ = new ::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpResponse(*from.active_signature_help_);
   } else {
-    text_document_ = nullptr;
+    active_signature_help_ = nullptr;
   }
-  // @@protoc_insertion_point(copy_constructor:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest)
+  ::memcpy(&trigger_kind_, &from.trigger_kind_,
+    static_cast<size_t>(reinterpret_cast<char*>(&is_retrigger_) -
+    reinterpret_cast<char*>(&trigger_kind_)) + sizeof(is_retrigger_));
+  // @@protoc_insertion_point(copy_constructor:io.deephaven.proto.backplane.script.grpc.SignatureHelpContext)
 }
 
-inline void ChangeDocumentRequest::SharedCtor() {
+inline void SignatureHelpContext::SharedCtor() {
+trigger_character_.InitDefault();
+#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  trigger_character_.Set("", GetArenaForAllocation());
+#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
 ::memset(reinterpret_cast<char*>(this) + static_cast<size_t>(
-    reinterpret_cast<char*>(&console_id_) - reinterpret_cast<char*>(this)),
-    0, static_cast<size_t>(reinterpret_cast<char*>(&text_document_) -
-    reinterpret_cast<char*>(&console_id_)) + sizeof(text_document_));
+    reinterpret_cast<char*>(&active_signature_help_) - reinterpret_cast<char*>(this)),
+    0, static_cast<size_t>(reinterpret_cast<char*>(&is_retrigger_) -
+    reinterpret_cast<char*>(&active_signature_help_)) + sizeof(is_retrigger_));
 }
 
-ChangeDocumentRequest::~ChangeDocumentRequest() {
-  // @@protoc_insertion_point(destructor:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest)
+SignatureHelpContext::~SignatureHelpContext() {
+  // @@protoc_insertion_point(destructor:io.deephaven.proto.backplane.script.grpc.SignatureHelpContext)
   if (auto *arena = _internal_metadata_.DeleteReturnArena<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>()) {
   (void)arena;
     return;
@@ -6212,66 +10702,75 @@ ChangeDocumentRequest::~ChangeDocumentRequest() {
   SharedDtor();
 }
 
-inline void ChangeDocumentRequest::SharedDtor() {
+inline void SignatureHelpContext::SharedDtor() {
   GOOGLE_DCHECK(GetArenaForAllocation() == nullptr);
-  if (this != internal_default_instance()) delete console_id_;
-  if (this != internal_default_instance()) delete text_document_;
+  trigger_character_.Destroy();
+  if (this != internal_default_instance()) delete active_signature_help_;
 }
 
-void ChangeDocumentRequest::SetCachedSize(int size) const {
+void SignatureHelpContext::SetCachedSize(int size) const {
   _cached_size_.Set(size);
 }
 
-void ChangeDocumentRequest::Clear() {
-// @@protoc_insertion_point(message_clear_start:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest)
+void SignatureHelpContext::Clear() {
+// @@protoc_insertion_point(message_clear_start:io.deephaven.proto.backplane.script.grpc.SignatureHelpContext)
   uint32_t cached_has_bits = 0;
   // Prevent compiler warnings about cached_has_bits being unused
   (void) cached_has_bits;
 
-  content_changes_.Clear();
-  if (GetArenaForAllocation() == nullptr && console_id_ != nullptr) {
-    delete console_id_;
+  cached_has_bits = _has_bits_[0];
+  if (cached_has_bits & 0x00000001u) {
+    trigger_character_.ClearNonDefaultToEmpty();
   }
-  console_id_ = nullptr;
-  if (GetArenaForAllocation() == nullptr && text_document_ != nullptr) {
-    delete text_document_;
+  if (GetArenaForAllocation() == nullptr && active_signature_help_ != nullptr) {
+    delete active_signature_help_;
   }
-  text_document_ = nullptr;
+  active_signature_help_ = nullptr;
+  ::memset(&trigger_kind_, 0, static_cast<size_t>(
+      reinterpret_cast<char*>(&is_retrigger_) -
+      reinterpret_cast<char*>(&trigger_kind_)) + sizeof(is_retrigger_));
+  _has_bits_.Clear();
   _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
 }
 
-const char* ChangeDocumentRequest::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) {
+const char* SignatureHelpContext::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) {
 #define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
+  _Internal::HasBits has_bits{};
   while (!ctx->Done(&ptr)) {
     uint32_t tag;
     ptr = ::_pbi::ReadTag(ptr, &tag);
     switch (tag >> 3) {
-      // .io.deephaven.proto.backplane.grpc.Ticket console_id = 1;
+      // int32 trigger_kind = 1;
       case 1:
-        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 10)) {
-          ptr = ctx->ParseMessage(_internal_mutable_console_id(), ptr);
+        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 8)) {
+          trigger_kind_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
           CHK_(ptr);
         } else
           goto handle_unusual;
         continue;
-      // .io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier text_document = 2;
+      // optional string trigger_character = 2;
       case 2:
         if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 18)) {
-          ptr = ctx->ParseMessage(_internal_mutable_text_document(), ptr);
+          auto str = _internal_mutable_trigger_character();
+          ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
           CHK_(ptr);
+          CHK_(::_pbi::VerifyUTF8(str, "io.deephaven.proto.backplane.script.grpc.SignatureHelpContext.trigger_character"));
         } else
           goto handle_unusual;
         continue;
-      // repeated .io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.TextDocumentContentChangeEvent content_changes = 3;
+      // bool is_retrigger = 3;
       case 3:
-        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 26)) {
-          ptr -= 1;
-          do {
-            ptr += 1;
-            ptr = ctx->ParseMessage(_internal_add_content_changes(), ptr);
-            CHK_(ptr);
-            if (!ctx->DataAvailable(ptr)) break;
-          } while (::PROTOBUF_NAMESPACE_ID::internal::ExpectTag<26>(ptr));
+        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 24)) {
+          is_retrigger_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint64(&ptr);
+          CHK_(ptr);
+        } else
+          goto handle_unusual;
+        continue;
+      // .io.deephaven.proto.backplane.script.grpc.GetSignatureHelpResponse active_signature_help = 4;
+      case 4:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 34)) {
+          ptr = ctx->ParseMessage(_internal_mutable_active_signature_help(), ptr);
+          CHK_(ptr);
         } else
           goto handle_unusual;
         continue;
@@ -6291,6 +10790,7 @@ const char* ChangeDocumentRequest::_InternalParse(const char* ptr, ::_pbi::Parse
     CHK_(ptr != nullptr);
   }  // while
 message_done:
+  _has_bits_.Or(has_bits);
   return ptr;
 failure:
   ptr = nullptr;
@@ -6298,179 +10798,194 @@ const char* ChangeDocumentRequest::_InternalParse(const char* ptr, ::_pbi::Parse
 #undef CHK_
 }
 
-uint8_t* ChangeDocumentRequest::_InternalSerialize(
+uint8_t* SignatureHelpContext::_InternalSerialize(
     uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const {
-  // @@protoc_insertion_point(serialize_to_array_start:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest)
+  // @@protoc_insertion_point(serialize_to_array_start:io.deephaven.proto.backplane.script.grpc.SignatureHelpContext)
   uint32_t cached_has_bits = 0;
   (void) cached_has_bits;
 
-  // .io.deephaven.proto.backplane.grpc.Ticket console_id = 1;
-  if (this->_internal_has_console_id()) {
-    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
-      InternalWriteMessage(1, _Internal::console_id(this),
-        _Internal::console_id(this).GetCachedSize(), target, stream);
+  // int32 trigger_kind = 1;
+  if (this->_internal_trigger_kind() != 0) {
+    target = stream->EnsureSpace(target);
+    target = ::_pbi::WireFormatLite::WriteInt32ToArray(1, this->_internal_trigger_kind(), target);
   }
 
-  // .io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier text_document = 2;
-  if (this->_internal_has_text_document()) {
-    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
-      InternalWriteMessage(2, _Internal::text_document(this),
-        _Internal::text_document(this).GetCachedSize(), target, stream);
+  // optional string trigger_character = 2;
+  if (_internal_has_trigger_character()) {
+    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
+      this->_internal_trigger_character().data(), static_cast<int>(this->_internal_trigger_character().length()),
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
+      "io.deephaven.proto.backplane.script.grpc.SignatureHelpContext.trigger_character");
+    target = stream->WriteStringMaybeAliased(
+        2, this->_internal_trigger_character(), target);
   }
 
-  // repeated .io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.TextDocumentContentChangeEvent content_changes = 3;
-  for (unsigned i = 0,
-      n = static_cast<unsigned>(this->_internal_content_changes_size()); i < n; i++) {
-    const auto& repfield = this->_internal_content_changes(i);
+  // bool is_retrigger = 3;
+  if (this->_internal_is_retrigger() != 0) {
+    target = stream->EnsureSpace(target);
+    target = ::_pbi::WireFormatLite::WriteBoolToArray(3, this->_internal_is_retrigger(), target);
+  }
+
+  // .io.deephaven.proto.backplane.script.grpc.GetSignatureHelpResponse active_signature_help = 4;
+  if (this->_internal_has_active_signature_help()) {
     target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
-        InternalWriteMessage(3, repfield, repfield.GetCachedSize(), target, stream);
+      InternalWriteMessage(4, _Internal::active_signature_help(this),
+        _Internal::active_signature_help(this).GetCachedSize(), target, stream);
   }
 
   if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
     target = ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray(
         _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream);
   }
-  // @@protoc_insertion_point(serialize_to_array_end:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest)
+  // @@protoc_insertion_point(serialize_to_array_end:io.deephaven.proto.backplane.script.grpc.SignatureHelpContext)
   return target;
 }
 
-size_t ChangeDocumentRequest::ByteSizeLong() const {
-// @@protoc_insertion_point(message_byte_size_start:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest)
+size_t SignatureHelpContext::ByteSizeLong() const {
+// @@protoc_insertion_point(message_byte_size_start:io.deephaven.proto.backplane.script.grpc.SignatureHelpContext)
   size_t total_size = 0;
 
   uint32_t cached_has_bits = 0;
   // Prevent compiler warnings about cached_has_bits being unused
   (void) cached_has_bits;
 
-  // repeated .io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.TextDocumentContentChangeEvent content_changes = 3;
-  total_size += 1UL * this->_internal_content_changes_size();
-  for (const auto& msg : this->content_changes_) {
-    total_size +=
-      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(msg);
+  // optional string trigger_character = 2;
+  cached_has_bits = _has_bits_[0];
+  if (cached_has_bits & 0x00000001u) {
+    total_size += 1 +
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
+        this->_internal_trigger_character());
   }
 
-  // .io.deephaven.proto.backplane.grpc.Ticket console_id = 1;
-  if (this->_internal_has_console_id()) {
+  // .io.deephaven.proto.backplane.script.grpc.GetSignatureHelpResponse active_signature_help = 4;
+  if (this->_internal_has_active_signature_help()) {
     total_size += 1 +
       ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
-        *console_id_);
+        *active_signature_help_);
   }
 
-  // .io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier text_document = 2;
-  if (this->_internal_has_text_document()) {
-    total_size += 1 +
-      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
-        *text_document_);
+  // int32 trigger_kind = 1;
+  if (this->_internal_trigger_kind() != 0) {
+    total_size += ::_pbi::WireFormatLite::Int32SizePlusOne(this->_internal_trigger_kind());
+  }
+
+  // bool is_retrigger = 3;
+  if (this->_internal_is_retrigger() != 0) {
+    total_size += 1 + 1;
   }
 
   return MaybeComputeUnknownFieldsSize(total_size, &_cached_size_);
 }
 
-const ::PROTOBUF_NAMESPACE_ID::Message::ClassData ChangeDocumentRequest::_class_data_ = {
+const ::PROTOBUF_NAMESPACE_ID::Message::ClassData SignatureHelpContext::_class_data_ = {
     ::PROTOBUF_NAMESPACE_ID::Message::CopyWithSizeCheck,
-    ChangeDocumentRequest::MergeImpl
+    SignatureHelpContext::MergeImpl
 };
-const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*ChangeDocumentRequest::GetClassData() const { return &_class_data_; }
+const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*SignatureHelpContext::GetClassData() const { return &_class_data_; }
 
-void ChangeDocumentRequest::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to,
+void SignatureHelpContext::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to,
                       const ::PROTOBUF_NAMESPACE_ID::Message& from) {
-  static_cast<ChangeDocumentRequest *>(to)->MergeFrom(
-      static_cast<const ChangeDocumentRequest &>(from));
+  static_cast<SignatureHelpContext *>(to)->MergeFrom(
+      static_cast<const SignatureHelpContext &>(from));
 }
 
 
-void ChangeDocumentRequest::MergeFrom(const ChangeDocumentRequest& from) {
-// @@protoc_insertion_point(class_specific_merge_from_start:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest)
+void SignatureHelpContext::MergeFrom(const SignatureHelpContext& from) {
+// @@protoc_insertion_point(class_specific_merge_from_start:io.deephaven.proto.backplane.script.grpc.SignatureHelpContext)
   GOOGLE_DCHECK_NE(&from, this);
   uint32_t cached_has_bits = 0;
   (void) cached_has_bits;
 
-  content_changes_.MergeFrom(from.content_changes_);
-  if (from._internal_has_console_id()) {
-    _internal_mutable_console_id()->::io::deephaven::proto::backplane::grpc::Ticket::MergeFrom(from._internal_console_id());
+  if (from._internal_has_trigger_character()) {
+    _internal_set_trigger_character(from._internal_trigger_character());
   }
-  if (from._internal_has_text_document()) {
-    _internal_mutable_text_document()->::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier::MergeFrom(from._internal_text_document());
+  if (from._internal_has_active_signature_help()) {
+    _internal_mutable_active_signature_help()->::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpResponse::MergeFrom(from._internal_active_signature_help());
+  }
+  if (from._internal_trigger_kind() != 0) {
+    _internal_set_trigger_kind(from._internal_trigger_kind());
+  }
+  if (from._internal_is_retrigger() != 0) {
+    _internal_set_is_retrigger(from._internal_is_retrigger());
   }
   _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
 }
 
-void ChangeDocumentRequest::CopyFrom(const ChangeDocumentRequest& from) {
-// @@protoc_insertion_point(class_specific_copy_from_start:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest)
+void SignatureHelpContext::CopyFrom(const SignatureHelpContext& from) {
+// @@protoc_insertion_point(class_specific_copy_from_start:io.deephaven.proto.backplane.script.grpc.SignatureHelpContext)
   if (&from == this) return;
   Clear();
   MergeFrom(from);
 }
 
-bool ChangeDocumentRequest::IsInitialized() const {
+bool SignatureHelpContext::IsInitialized() const {
   return true;
 }
 
-void ChangeDocumentRequest::InternalSwap(ChangeDocumentRequest* other) {
+void SignatureHelpContext::InternalSwap(SignatureHelpContext* other) {
   using std::swap;
+  auto* lhs_arena = GetArenaForAllocation();
+  auto* rhs_arena = other->GetArenaForAllocation();
   _internal_metadata_.InternalSwap(&other->_internal_metadata_);
-  content_changes_.InternalSwap(&other->content_changes_);
+  swap(_has_bits_[0], other->_has_bits_[0]);
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
+      &trigger_character_, lhs_arena,
+      &other->trigger_character_, rhs_arena
+  );
   ::PROTOBUF_NAMESPACE_ID::internal::memswap<
-      PROTOBUF_FIELD_OFFSET(ChangeDocumentRequest, text_document_)
-      + sizeof(ChangeDocumentRequest::text_document_)
-      - PROTOBUF_FIELD_OFFSET(ChangeDocumentRequest, console_id_)>(
-          reinterpret_cast<char*>(&console_id_),
-          reinterpret_cast<char*>(&other->console_id_));
+      PROTOBUF_FIELD_OFFSET(SignatureHelpContext, is_retrigger_)
+      + sizeof(SignatureHelpContext::is_retrigger_)
+      - PROTOBUF_FIELD_OFFSET(SignatureHelpContext, active_signature_help_)>(
+          reinterpret_cast<char*>(&active_signature_help_),
+          reinterpret_cast<char*>(&other->active_signature_help_));
 }
 
-::PROTOBUF_NAMESPACE_ID::Metadata ChangeDocumentRequest::GetMetadata() const {
+::PROTOBUF_NAMESPACE_ID::Metadata SignatureHelpContext::GetMetadata() const {
   return ::_pbi::AssignDescriptors(
       &descriptor_table_deephaven_2fproto_2fconsole_2eproto_getter, &descriptor_table_deephaven_2fproto_2fconsole_2eproto_once,
-      file_level_metadata_deephaven_2fproto_2fconsole_2eproto[21]);
+      file_level_metadata_deephaven_2fproto_2fconsole_2eproto[34]);
 }
 
 // ===================================================================
 
-class DocumentRange::_Internal {
+class GetSignatureHelpResponse::_Internal {
  public:
-  static const ::io::deephaven::proto::backplane::script::grpc::Position& start(const DocumentRange* msg);
-  static const ::io::deephaven::proto::backplane::script::grpc::Position& end(const DocumentRange* msg);
+  using HasBits = decltype(std::declval<GetSignatureHelpResponse>()._has_bits_);
+  static void set_has_active_signature(HasBits* has_bits) {
+    (*has_bits)[0] |= 1u;
+  }
+  static void set_has_active_parameter(HasBits* has_bits) {
+    (*has_bits)[0] |= 2u;
+  }
 };
 
-const ::io::deephaven::proto::backplane::script::grpc::Position&
-DocumentRange::_Internal::start(const DocumentRange* msg) {
-  return *msg->start_;
-}
-const ::io::deephaven::proto::backplane::script::grpc::Position&
-DocumentRange::_Internal::end(const DocumentRange* msg) {
-  return *msg->end_;
-}
-DocumentRange::DocumentRange(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+GetSignatureHelpResponse::GetSignatureHelpResponse(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                          bool is_message_owned)
-  : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned) {
+  : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned),
+  signatures_(arena) {
   SharedCtor();
-  // @@protoc_insertion_point(arena_constructor:io.deephaven.proto.backplane.script.grpc.DocumentRange)
+  // @@protoc_insertion_point(arena_constructor:io.deephaven.proto.backplane.script.grpc.GetSignatureHelpResponse)
 }
-DocumentRange::DocumentRange(const DocumentRange& from)
-  : ::PROTOBUF_NAMESPACE_ID::Message() {
+GetSignatureHelpResponse::GetSignatureHelpResponse(const GetSignatureHelpResponse& from)
+  : ::PROTOBUF_NAMESPACE_ID::Message(),
+      _has_bits_(from._has_bits_),
+      signatures_(from.signatures_) {
   _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
-  if (from._internal_has_start()) {
-    start_ = new ::io::deephaven::proto::backplane::script::grpc::Position(*from.start_);
-  } else {
-    start_ = nullptr;
-  }
-  if (from._internal_has_end()) {
-    end_ = new ::io::deephaven::proto::backplane::script::grpc::Position(*from.end_);
-  } else {
-    end_ = nullptr;
-  }
-  // @@protoc_insertion_point(copy_constructor:io.deephaven.proto.backplane.script.grpc.DocumentRange)
+  ::memcpy(&active_signature_, &from.active_signature_,
+    static_cast<size_t>(reinterpret_cast<char*>(&active_parameter_) -
+    reinterpret_cast<char*>(&active_signature_)) + sizeof(active_parameter_));
+  // @@protoc_insertion_point(copy_constructor:io.deephaven.proto.backplane.script.grpc.GetSignatureHelpResponse)
 }
 
-inline void DocumentRange::SharedCtor() {
+inline void GetSignatureHelpResponse::SharedCtor() {
 ::memset(reinterpret_cast<char*>(this) + static_cast<size_t>(
-    reinterpret_cast<char*>(&start_) - reinterpret_cast<char*>(this)),
-    0, static_cast<size_t>(reinterpret_cast<char*>(&end_) -
-    reinterpret_cast<char*>(&start_)) + sizeof(end_));
+    reinterpret_cast<char*>(&active_signature_) - reinterpret_cast<char*>(this)),
+    0, static_cast<size_t>(reinterpret_cast<char*>(&active_parameter_) -
+    reinterpret_cast<char*>(&active_signature_)) + sizeof(active_parameter_));
 }
 
-DocumentRange::~DocumentRange() {
-  // @@protoc_insertion_point(destructor:io.deephaven.proto.backplane.script.grpc.DocumentRange)
+GetSignatureHelpResponse::~GetSignatureHelpResponse() {
+  // @@protoc_insertion_point(destructor:io.deephaven.proto.backplane.script.grpc.GetSignatureHelpResponse)
   if (auto *arena = _internal_metadata_.DeleteReturnArena<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>()) {
   (void)arena;
     return;
@@ -6478,51 +10993,65 @@ DocumentRange::~DocumentRange() {
   SharedDtor();
 }
 
-inline void DocumentRange::SharedDtor() {
+inline void GetSignatureHelpResponse::SharedDtor() {
   GOOGLE_DCHECK(GetArenaForAllocation() == nullptr);
-  if (this != internal_default_instance()) delete start_;
-  if (this != internal_default_instance()) delete end_;
 }
 
-void DocumentRange::SetCachedSize(int size) const {
+void GetSignatureHelpResponse::SetCachedSize(int size) const {
   _cached_size_.Set(size);
 }
 
-void DocumentRange::Clear() {
-// @@protoc_insertion_point(message_clear_start:io.deephaven.proto.backplane.script.grpc.DocumentRange)
+void GetSignatureHelpResponse::Clear() {
+// @@protoc_insertion_point(message_clear_start:io.deephaven.proto.backplane.script.grpc.GetSignatureHelpResponse)
   uint32_t cached_has_bits = 0;
   // Prevent compiler warnings about cached_has_bits being unused
   (void) cached_has_bits;
 
-  if (GetArenaForAllocation() == nullptr && start_ != nullptr) {
-    delete start_;
-  }
-  start_ = nullptr;
-  if (GetArenaForAllocation() == nullptr && end_ != nullptr) {
-    delete end_;
+  signatures_.Clear();
+  cached_has_bits = _has_bits_[0];
+  if (cached_has_bits & 0x00000003u) {
+    ::memset(&active_signature_, 0, static_cast<size_t>(
+        reinterpret_cast<char*>(&active_parameter_) -
+        reinterpret_cast<char*>(&active_signature_)) + sizeof(active_parameter_));
   }
-  end_ = nullptr;
+  _has_bits_.Clear();
   _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
 }
 
-const char* DocumentRange::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) {
+const char* GetSignatureHelpResponse::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) {
 #define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
+  _Internal::HasBits has_bits{};
   while (!ctx->Done(&ptr)) {
     uint32_t tag;
     ptr = ::_pbi::ReadTag(ptr, &tag);
     switch (tag >> 3) {
-      // .io.deephaven.proto.backplane.script.grpc.Position start = 1;
+      // repeated .io.deephaven.proto.backplane.script.grpc.SignatureInformation signatures = 1;
       case 1:
         if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 10)) {
-          ptr = ctx->ParseMessage(_internal_mutable_start(), ptr);
-          CHK_(ptr);
+          ptr -= 1;
+          do {
+            ptr += 1;
+            ptr = ctx->ParseMessage(_internal_add_signatures(), ptr);
+            CHK_(ptr);
+            if (!ctx->DataAvailable(ptr)) break;
+          } while (::PROTOBUF_NAMESPACE_ID::internal::ExpectTag<10>(ptr));
         } else
           goto handle_unusual;
         continue;
-      // .io.deephaven.proto.backplane.script.grpc.Position end = 2;
+      // optional int32 active_signature = 2;
       case 2:
-        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 18)) {
-          ptr = ctx->ParseMessage(_internal_mutable_end(), ptr);
+        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 16)) {
+          _Internal::set_has_active_signature(&has_bits);
+          active_signature_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
+          CHK_(ptr);
+        } else
+          goto handle_unusual;
+        continue;
+      // optional int32 active_parameter = 3;
+      case 3:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 24)) {
+          _Internal::set_has_active_parameter(&has_bits);
+          active_parameter_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
           CHK_(ptr);
         } else
           goto handle_unusual;
@@ -6543,6 +11072,7 @@ const char* DocumentRange::_InternalParse(const char* ptr, ::_pbi::ParseContext*
     CHK_(ptr != nullptr);
   }  // while
 message_done:
+  _has_bits_.Or(has_bits);
   return ptr;
 failure:
   ptr = nullptr;
@@ -6550,152 +11080,191 @@ const char* DocumentRange::_InternalParse(const char* ptr, ::_pbi::ParseContext*
 #undef CHK_
 }
 
-uint8_t* DocumentRange::_InternalSerialize(
+uint8_t* GetSignatureHelpResponse::_InternalSerialize(
     uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const {
-  // @@protoc_insertion_point(serialize_to_array_start:io.deephaven.proto.backplane.script.grpc.DocumentRange)
+  // @@protoc_insertion_point(serialize_to_array_start:io.deephaven.proto.backplane.script.grpc.GetSignatureHelpResponse)
   uint32_t cached_has_bits = 0;
   (void) cached_has_bits;
 
-  // .io.deephaven.proto.backplane.script.grpc.Position start = 1;
-  if (this->_internal_has_start()) {
+  // repeated .io.deephaven.proto.backplane.script.grpc.SignatureInformation signatures = 1;
+  for (unsigned i = 0,
+      n = static_cast<unsigned>(this->_internal_signatures_size()); i < n; i++) {
+    const auto& repfield = this->_internal_signatures(i);
     target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
-      InternalWriteMessage(1, _Internal::start(this),
-        _Internal::start(this).GetCachedSize(), target, stream);
+        InternalWriteMessage(1, repfield, repfield.GetCachedSize(), target, stream);
   }
 
-  // .io.deephaven.proto.backplane.script.grpc.Position end = 2;
-  if (this->_internal_has_end()) {
-    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
-      InternalWriteMessage(2, _Internal::end(this),
-        _Internal::end(this).GetCachedSize(), target, stream);
+  // optional int32 active_signature = 2;
+  if (_internal_has_active_signature()) {
+    target = stream->EnsureSpace(target);
+    target = ::_pbi::WireFormatLite::WriteInt32ToArray(2, this->_internal_active_signature(), target);
+  }
+
+  // optional int32 active_parameter = 3;
+  if (_internal_has_active_parameter()) {
+    target = stream->EnsureSpace(target);
+    target = ::_pbi::WireFormatLite::WriteInt32ToArray(3, this->_internal_active_parameter(), target);
   }
 
   if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
     target = ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray(
         _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream);
   }
-  // @@protoc_insertion_point(serialize_to_array_end:io.deephaven.proto.backplane.script.grpc.DocumentRange)
+  // @@protoc_insertion_point(serialize_to_array_end:io.deephaven.proto.backplane.script.grpc.GetSignatureHelpResponse)
   return target;
 }
 
-size_t DocumentRange::ByteSizeLong() const {
-// @@protoc_insertion_point(message_byte_size_start:io.deephaven.proto.backplane.script.grpc.DocumentRange)
+size_t GetSignatureHelpResponse::ByteSizeLong() const {
+// @@protoc_insertion_point(message_byte_size_start:io.deephaven.proto.backplane.script.grpc.GetSignatureHelpResponse)
   size_t total_size = 0;
 
   uint32_t cached_has_bits = 0;
   // Prevent compiler warnings about cached_has_bits being unused
   (void) cached_has_bits;
 
-  // .io.deephaven.proto.backplane.script.grpc.Position start = 1;
-  if (this->_internal_has_start()) {
-    total_size += 1 +
-      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
-        *start_);
+  // repeated .io.deephaven.proto.backplane.script.grpc.SignatureInformation signatures = 1;
+  total_size += 1UL * this->_internal_signatures_size();
+  for (const auto& msg : this->signatures_) {
+    total_size +=
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(msg);
   }
 
-  // .io.deephaven.proto.backplane.script.grpc.Position end = 2;
-  if (this->_internal_has_end()) {
-    total_size += 1 +
-      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
-        *end_);
-  }
+  cached_has_bits = _has_bits_[0];
+  if (cached_has_bits & 0x00000003u) {
+    // optional int32 active_signature = 2;
+    if (cached_has_bits & 0x00000001u) {
+      total_size += ::_pbi::WireFormatLite::Int32SizePlusOne(this->_internal_active_signature());
+    }
+
+    // optional int32 active_parameter = 3;
+    if (cached_has_bits & 0x00000002u) {
+      total_size += ::_pbi::WireFormatLite::Int32SizePlusOne(this->_internal_active_parameter());
+    }
 
+  }
   return MaybeComputeUnknownFieldsSize(total_size, &_cached_size_);
 }
 
-const ::PROTOBUF_NAMESPACE_ID::Message::ClassData DocumentRange::_class_data_ = {
+const ::PROTOBUF_NAMESPACE_ID::Message::ClassData GetSignatureHelpResponse::_class_data_ = {
     ::PROTOBUF_NAMESPACE_ID::Message::CopyWithSizeCheck,
-    DocumentRange::MergeImpl
+    GetSignatureHelpResponse::MergeImpl
 };
-const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*DocumentRange::GetClassData() const { return &_class_data_; }
+const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetSignatureHelpResponse::GetClassData() const { return &_class_data_; }
 
-void DocumentRange::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to,
+void GetSignatureHelpResponse::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to,
                       const ::PROTOBUF_NAMESPACE_ID::Message& from) {
-  static_cast<DocumentRange *>(to)->MergeFrom(
-      static_cast<const DocumentRange &>(from));
+  static_cast<GetSignatureHelpResponse *>(to)->MergeFrom(
+      static_cast<const GetSignatureHelpResponse &>(from));
 }
 
 
-void DocumentRange::MergeFrom(const DocumentRange& from) {
-// @@protoc_insertion_point(class_specific_merge_from_start:io.deephaven.proto.backplane.script.grpc.DocumentRange)
+void GetSignatureHelpResponse::MergeFrom(const GetSignatureHelpResponse& from) {
+// @@protoc_insertion_point(class_specific_merge_from_start:io.deephaven.proto.backplane.script.grpc.GetSignatureHelpResponse)
   GOOGLE_DCHECK_NE(&from, this);
   uint32_t cached_has_bits = 0;
   (void) cached_has_bits;
 
-  if (from._internal_has_start()) {
-    _internal_mutable_start()->::io::deephaven::proto::backplane::script::grpc::Position::MergeFrom(from._internal_start());
-  }
-  if (from._internal_has_end()) {
-    _internal_mutable_end()->::io::deephaven::proto::backplane::script::grpc::Position::MergeFrom(from._internal_end());
+  signatures_.MergeFrom(from.signatures_);
+  cached_has_bits = from._has_bits_[0];
+  if (cached_has_bits & 0x00000003u) {
+    if (cached_has_bits & 0x00000001u) {
+      active_signature_ = from.active_signature_;
+    }
+    if (cached_has_bits & 0x00000002u) {
+      active_parameter_ = from.active_parameter_;
+    }
+    _has_bits_[0] |= cached_has_bits;
   }
   _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
 }
 
-void DocumentRange::CopyFrom(const DocumentRange& from) {
-// @@protoc_insertion_point(class_specific_copy_from_start:io.deephaven.proto.backplane.script.grpc.DocumentRange)
+void GetSignatureHelpResponse::CopyFrom(const GetSignatureHelpResponse& from) {
+// @@protoc_insertion_point(class_specific_copy_from_start:io.deephaven.proto.backplane.script.grpc.GetSignatureHelpResponse)
   if (&from == this) return;
   Clear();
   MergeFrom(from);
 }
 
-bool DocumentRange::IsInitialized() const {
+bool GetSignatureHelpResponse::IsInitialized() const {
   return true;
 }
 
-void DocumentRange::InternalSwap(DocumentRange* other) {
+void GetSignatureHelpResponse::InternalSwap(GetSignatureHelpResponse* other) {
   using std::swap;
   _internal_metadata_.InternalSwap(&other->_internal_metadata_);
+  swap(_has_bits_[0], other->_has_bits_[0]);
+  signatures_.InternalSwap(&other->signatures_);
   ::PROTOBUF_NAMESPACE_ID::internal::memswap<
-      PROTOBUF_FIELD_OFFSET(DocumentRange, end_)
-      + sizeof(DocumentRange::end_)
-      - PROTOBUF_FIELD_OFFSET(DocumentRange, start_)>(
-          reinterpret_cast<char*>(&start_),
-          reinterpret_cast<char*>(&other->start_));
+      PROTOBUF_FIELD_OFFSET(GetSignatureHelpResponse, active_parameter_)
+      + sizeof(GetSignatureHelpResponse::active_parameter_)
+      - PROTOBUF_FIELD_OFFSET(GetSignatureHelpResponse, active_signature_)>(
+          reinterpret_cast<char*>(&active_signature_),
+          reinterpret_cast<char*>(&other->active_signature_));
 }
 
-::PROTOBUF_NAMESPACE_ID::Metadata DocumentRange::GetMetadata() const {
+::PROTOBUF_NAMESPACE_ID::Metadata GetSignatureHelpResponse::GetMetadata() const {
   return ::_pbi::AssignDescriptors(
       &descriptor_table_deephaven_2fproto_2fconsole_2eproto_getter, &descriptor_table_deephaven_2fproto_2fconsole_2eproto_once,
-      file_level_metadata_deephaven_2fproto_2fconsole_2eproto[22]);
+      file_level_metadata_deephaven_2fproto_2fconsole_2eproto[35]);
 }
 
 // ===================================================================
 
-class VersionedTextDocumentIdentifier::_Internal {
+class SignatureInformation::_Internal {
  public:
+  using HasBits = decltype(std::declval<SignatureInformation>()._has_bits_);
+  static const ::io::deephaven::proto::backplane::script::grpc::MarkupContent& documentation(const SignatureInformation* msg);
+  static void set_has_active_parameter(HasBits* has_bits) {
+    (*has_bits)[0] |= 1u;
+  }
 };
 
-VersionedTextDocumentIdentifier::VersionedTextDocumentIdentifier(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+const ::io::deephaven::proto::backplane::script::grpc::MarkupContent&
+SignatureInformation::_Internal::documentation(const SignatureInformation* msg) {
+  return *msg->documentation_;
+}
+SignatureInformation::SignatureInformation(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                          bool is_message_owned)
-  : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned) {
+  : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned),
+  parameters_(arena) {
   SharedCtor();
-  // @@protoc_insertion_point(arena_constructor:io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier)
+  // @@protoc_insertion_point(arena_constructor:io.deephaven.proto.backplane.script.grpc.SignatureInformation)
 }
-VersionedTextDocumentIdentifier::VersionedTextDocumentIdentifier(const VersionedTextDocumentIdentifier& from)
-  : ::PROTOBUF_NAMESPACE_ID::Message() {
+SignatureInformation::SignatureInformation(const SignatureInformation& from)
+  : ::PROTOBUF_NAMESPACE_ID::Message(),
+      _has_bits_(from._has_bits_),
+      parameters_(from.parameters_) {
   _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
-  uri_.InitDefault();
+  label_.InitDefault();
   #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
-    uri_.Set("", GetArenaForAllocation());
+    label_.Set("", GetArenaForAllocation());
   #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
-  if (!from._internal_uri().empty()) {
-    uri_.Set(from._internal_uri(), 
+  if (!from._internal_label().empty()) {
+    label_.Set(from._internal_label(), 
       GetArenaForAllocation());
   }
-  version_ = from.version_;
-  // @@protoc_insertion_point(copy_constructor:io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier)
+  if (from._internal_has_documentation()) {
+    documentation_ = new ::io::deephaven::proto::backplane::script::grpc::MarkupContent(*from.documentation_);
+  } else {
+    documentation_ = nullptr;
+  }
+  active_parameter_ = from.active_parameter_;
+  // @@protoc_insertion_point(copy_constructor:io.deephaven.proto.backplane.script.grpc.SignatureInformation)
 }
 
-inline void VersionedTextDocumentIdentifier::SharedCtor() {
-uri_.InitDefault();
+inline void SignatureInformation::SharedCtor() {
+label_.InitDefault();
 #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
-  uri_.Set("", GetArenaForAllocation());
+  label_.Set("", GetArenaForAllocation());
 #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
-version_ = 0;
+::memset(reinterpret_cast<char*>(this) + static_cast<size_t>(
+    reinterpret_cast<char*>(&documentation_) - reinterpret_cast<char*>(this)),
+    0, static_cast<size_t>(reinterpret_cast<char*>(&active_parameter_) -
+    reinterpret_cast<char*>(&documentation_)) + sizeof(active_parameter_));
 }
 
-VersionedTextDocumentIdentifier::~VersionedTextDocumentIdentifier() {
-  // @@protoc_insertion_point(destructor:io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier)
+SignatureInformation::~SignatureInformation() {
+  // @@protoc_insertion_point(destructor:io.deephaven.proto.backplane.script.grpc.SignatureInformation)
   if (auto *arena = _internal_metadata_.DeleteReturnArena<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>()) {
   (void)arena;
     return;
@@ -6703,46 +11272,76 @@ VersionedTextDocumentIdentifier::~VersionedTextDocumentIdentifier() {
   SharedDtor();
 }
 
-inline void VersionedTextDocumentIdentifier::SharedDtor() {
+inline void SignatureInformation::SharedDtor() {
   GOOGLE_DCHECK(GetArenaForAllocation() == nullptr);
-  uri_.Destroy();
+  label_.Destroy();
+  if (this != internal_default_instance()) delete documentation_;
 }
 
-void VersionedTextDocumentIdentifier::SetCachedSize(int size) const {
+void SignatureInformation::SetCachedSize(int size) const {
   _cached_size_.Set(size);
 }
 
-void VersionedTextDocumentIdentifier::Clear() {
-// @@protoc_insertion_point(message_clear_start:io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier)
+void SignatureInformation::Clear() {
+// @@protoc_insertion_point(message_clear_start:io.deephaven.proto.backplane.script.grpc.SignatureInformation)
   uint32_t cached_has_bits = 0;
   // Prevent compiler warnings about cached_has_bits being unused
   (void) cached_has_bits;
 
-  uri_.ClearToEmpty();
-  version_ = 0;
+  parameters_.Clear();
+  label_.ClearToEmpty();
+  if (GetArenaForAllocation() == nullptr && documentation_ != nullptr) {
+    delete documentation_;
+  }
+  documentation_ = nullptr;
+  active_parameter_ = 0;
+  _has_bits_.Clear();
   _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
 }
 
-const char* VersionedTextDocumentIdentifier::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) {
+const char* SignatureInformation::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) {
 #define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
+  _Internal::HasBits has_bits{};
   while (!ctx->Done(&ptr)) {
     uint32_t tag;
     ptr = ::_pbi::ReadTag(ptr, &tag);
     switch (tag >> 3) {
-      // string uri = 1;
+      // string label = 1;
       case 1:
         if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 10)) {
-          auto str = _internal_mutable_uri();
+          auto str = _internal_mutable_label();
           ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
           CHK_(ptr);
-          CHK_(::_pbi::VerifyUTF8(str, "io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier.uri"));
+          CHK_(::_pbi::VerifyUTF8(str, "io.deephaven.proto.backplane.script.grpc.SignatureInformation.label"));
         } else
           goto handle_unusual;
         continue;
-      // int32 version = 2;
+      // .io.deephaven.proto.backplane.script.grpc.MarkupContent documentation = 2;
       case 2:
-        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 16)) {
-          version_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
+        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 18)) {
+          ptr = ctx->ParseMessage(_internal_mutable_documentation(), ptr);
+          CHK_(ptr);
+        } else
+          goto handle_unusual;
+        continue;
+      // repeated .io.deephaven.proto.backplane.script.grpc.ParameterInformation parameters = 3;
+      case 3:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 26)) {
+          ptr -= 1;
+          do {
+            ptr += 1;
+            ptr = ctx->ParseMessage(_internal_add_parameters(), ptr);
+            CHK_(ptr);
+            if (!ctx->DataAvailable(ptr)) break;
+          } while (::PROTOBUF_NAMESPACE_ID::internal::ExpectTag<26>(ptr));
+        } else
+          goto handle_unusual;
+        continue;
+      // optional int32 active_parameter = 4;
+      case 4:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 32)) {
+          _Internal::set_has_active_parameter(&has_bits);
+          active_parameter_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
           CHK_(ptr);
         } else
           goto handle_unusual;
@@ -6763,6 +11362,7 @@ const char* VersionedTextDocumentIdentifier::_InternalParse(const char* ptr, ::_
     CHK_(ptr != nullptr);
   }  // while
 message_done:
+  _has_bits_.Or(has_bits);
   return ptr;
 failure:
   ptr = nullptr;
@@ -6770,146 +11370,203 @@ const char* VersionedTextDocumentIdentifier::_InternalParse(const char* ptr, ::_
 #undef CHK_
 }
 
-uint8_t* VersionedTextDocumentIdentifier::_InternalSerialize(
+uint8_t* SignatureInformation::_InternalSerialize(
     uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const {
-  // @@protoc_insertion_point(serialize_to_array_start:io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier)
+  // @@protoc_insertion_point(serialize_to_array_start:io.deephaven.proto.backplane.script.grpc.SignatureInformation)
   uint32_t cached_has_bits = 0;
   (void) cached_has_bits;
 
-  // string uri = 1;
-  if (!this->_internal_uri().empty()) {
+  // string label = 1;
+  if (!this->_internal_label().empty()) {
     ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
-      this->_internal_uri().data(), static_cast<int>(this->_internal_uri().length()),
+      this->_internal_label().data(), static_cast<int>(this->_internal_label().length()),
       ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
-      "io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier.uri");
+      "io.deephaven.proto.backplane.script.grpc.SignatureInformation.label");
     target = stream->WriteStringMaybeAliased(
-        1, this->_internal_uri(), target);
+        1, this->_internal_label(), target);
   }
 
-  // int32 version = 2;
-  if (this->_internal_version() != 0) {
+  // .io.deephaven.proto.backplane.script.grpc.MarkupContent documentation = 2;
+  if (this->_internal_has_documentation()) {
+    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
+      InternalWriteMessage(2, _Internal::documentation(this),
+        _Internal::documentation(this).GetCachedSize(), target, stream);
+  }
+
+  // repeated .io.deephaven.proto.backplane.script.grpc.ParameterInformation parameters = 3;
+  for (unsigned i = 0,
+      n = static_cast<unsigned>(this->_internal_parameters_size()); i < n; i++) {
+    const auto& repfield = this->_internal_parameters(i);
+    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
+        InternalWriteMessage(3, repfield, repfield.GetCachedSize(), target, stream);
+  }
+
+  // optional int32 active_parameter = 4;
+  if (_internal_has_active_parameter()) {
     target = stream->EnsureSpace(target);
-    target = ::_pbi::WireFormatLite::WriteInt32ToArray(2, this->_internal_version(), target);
+    target = ::_pbi::WireFormatLite::WriteInt32ToArray(4, this->_internal_active_parameter(), target);
   }
 
   if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
     target = ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray(
         _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream);
   }
-  // @@protoc_insertion_point(serialize_to_array_end:io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier)
+  // @@protoc_insertion_point(serialize_to_array_end:io.deephaven.proto.backplane.script.grpc.SignatureInformation)
   return target;
 }
 
-size_t VersionedTextDocumentIdentifier::ByteSizeLong() const {
-// @@protoc_insertion_point(message_byte_size_start:io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier)
+size_t SignatureInformation::ByteSizeLong() const {
+// @@protoc_insertion_point(message_byte_size_start:io.deephaven.proto.backplane.script.grpc.SignatureInformation)
   size_t total_size = 0;
 
   uint32_t cached_has_bits = 0;
   // Prevent compiler warnings about cached_has_bits being unused
   (void) cached_has_bits;
 
-  // string uri = 1;
-  if (!this->_internal_uri().empty()) {
+  // repeated .io.deephaven.proto.backplane.script.grpc.ParameterInformation parameters = 3;
+  total_size += 1UL * this->_internal_parameters_size();
+  for (const auto& msg : this->parameters_) {
+    total_size +=
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(msg);
+  }
+
+  // string label = 1;
+  if (!this->_internal_label().empty()) {
     total_size += 1 +
       ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
-        this->_internal_uri());
+        this->_internal_label());
   }
 
-  // int32 version = 2;
-  if (this->_internal_version() != 0) {
-    total_size += ::_pbi::WireFormatLite::Int32SizePlusOne(this->_internal_version());
+  // .io.deephaven.proto.backplane.script.grpc.MarkupContent documentation = 2;
+  if (this->_internal_has_documentation()) {
+    total_size += 1 +
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
+        *documentation_);
+  }
+
+  // optional int32 active_parameter = 4;
+  cached_has_bits = _has_bits_[0];
+  if (cached_has_bits & 0x00000001u) {
+    total_size += ::_pbi::WireFormatLite::Int32SizePlusOne(this->_internal_active_parameter());
   }
 
   return MaybeComputeUnknownFieldsSize(total_size, &_cached_size_);
 }
 
-const ::PROTOBUF_NAMESPACE_ID::Message::ClassData VersionedTextDocumentIdentifier::_class_data_ = {
+const ::PROTOBUF_NAMESPACE_ID::Message::ClassData SignatureInformation::_class_data_ = {
     ::PROTOBUF_NAMESPACE_ID::Message::CopyWithSizeCheck,
-    VersionedTextDocumentIdentifier::MergeImpl
+    SignatureInformation::MergeImpl
 };
-const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*VersionedTextDocumentIdentifier::GetClassData() const { return &_class_data_; }
+const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*SignatureInformation::GetClassData() const { return &_class_data_; }
 
-void VersionedTextDocumentIdentifier::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to,
+void SignatureInformation::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to,
                       const ::PROTOBUF_NAMESPACE_ID::Message& from) {
-  static_cast<VersionedTextDocumentIdentifier *>(to)->MergeFrom(
-      static_cast<const VersionedTextDocumentIdentifier &>(from));
+  static_cast<SignatureInformation *>(to)->MergeFrom(
+      static_cast<const SignatureInformation &>(from));
 }
 
 
-void VersionedTextDocumentIdentifier::MergeFrom(const VersionedTextDocumentIdentifier& from) {
-// @@protoc_insertion_point(class_specific_merge_from_start:io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier)
+void SignatureInformation::MergeFrom(const SignatureInformation& from) {
+// @@protoc_insertion_point(class_specific_merge_from_start:io.deephaven.proto.backplane.script.grpc.SignatureInformation)
   GOOGLE_DCHECK_NE(&from, this);
   uint32_t cached_has_bits = 0;
   (void) cached_has_bits;
 
-  if (!from._internal_uri().empty()) {
-    _internal_set_uri(from._internal_uri());
+  parameters_.MergeFrom(from.parameters_);
+  if (!from._internal_label().empty()) {
+    _internal_set_label(from._internal_label());
   }
-  if (from._internal_version() != 0) {
-    _internal_set_version(from._internal_version());
+  if (from._internal_has_documentation()) {
+    _internal_mutable_documentation()->::io::deephaven::proto::backplane::script::grpc::MarkupContent::MergeFrom(from._internal_documentation());
+  }
+  if (from._internal_has_active_parameter()) {
+    _internal_set_active_parameter(from._internal_active_parameter());
   }
   _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
 }
 
-void VersionedTextDocumentIdentifier::CopyFrom(const VersionedTextDocumentIdentifier& from) {
-// @@protoc_insertion_point(class_specific_copy_from_start:io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier)
+void SignatureInformation::CopyFrom(const SignatureInformation& from) {
+// @@protoc_insertion_point(class_specific_copy_from_start:io.deephaven.proto.backplane.script.grpc.SignatureInformation)
   if (&from == this) return;
   Clear();
   MergeFrom(from);
 }
 
-bool VersionedTextDocumentIdentifier::IsInitialized() const {
+bool SignatureInformation::IsInitialized() const {
   return true;
 }
 
-void VersionedTextDocumentIdentifier::InternalSwap(VersionedTextDocumentIdentifier* other) {
+void SignatureInformation::InternalSwap(SignatureInformation* other) {
   using std::swap;
   auto* lhs_arena = GetArenaForAllocation();
   auto* rhs_arena = other->GetArenaForAllocation();
   _internal_metadata_.InternalSwap(&other->_internal_metadata_);
+  swap(_has_bits_[0], other->_has_bits_[0]);
+  parameters_.InternalSwap(&other->parameters_);
   ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
-      &uri_, lhs_arena,
-      &other->uri_, rhs_arena
+      &label_, lhs_arena,
+      &other->label_, rhs_arena
   );
-  swap(version_, other->version_);
+  ::PROTOBUF_NAMESPACE_ID::internal::memswap<
+      PROTOBUF_FIELD_OFFSET(SignatureInformation, active_parameter_)
+      + sizeof(SignatureInformation::active_parameter_)
+      - PROTOBUF_FIELD_OFFSET(SignatureInformation, documentation_)>(
+          reinterpret_cast<char*>(&documentation_),
+          reinterpret_cast<char*>(&other->documentation_));
 }
 
-::PROTOBUF_NAMESPACE_ID::Metadata VersionedTextDocumentIdentifier::GetMetadata() const {
+::PROTOBUF_NAMESPACE_ID::Metadata SignatureInformation::GetMetadata() const {
   return ::_pbi::AssignDescriptors(
       &descriptor_table_deephaven_2fproto_2fconsole_2eproto_getter, &descriptor_table_deephaven_2fproto_2fconsole_2eproto_once,
-      file_level_metadata_deephaven_2fproto_2fconsole_2eproto[23]);
+      file_level_metadata_deephaven_2fproto_2fconsole_2eproto[36]);
 }
 
 // ===================================================================
 
-class Position::_Internal {
+class ParameterInformation::_Internal {
  public:
+  static const ::io::deephaven::proto::backplane::script::grpc::MarkupContent& documentation(const ParameterInformation* msg);
 };
 
-Position::Position(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+const ::io::deephaven::proto::backplane::script::grpc::MarkupContent&
+ParameterInformation::_Internal::documentation(const ParameterInformation* msg) {
+  return *msg->documentation_;
+}
+ParameterInformation::ParameterInformation(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                          bool is_message_owned)
   : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned) {
   SharedCtor();
-  // @@protoc_insertion_point(arena_constructor:io.deephaven.proto.backplane.script.grpc.Position)
+  // @@protoc_insertion_point(arena_constructor:io.deephaven.proto.backplane.script.grpc.ParameterInformation)
 }
-Position::Position(const Position& from)
+ParameterInformation::ParameterInformation(const ParameterInformation& from)
   : ::PROTOBUF_NAMESPACE_ID::Message() {
   _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
-  ::memcpy(&line_, &from.line_,
-    static_cast<size_t>(reinterpret_cast<char*>(&character_) -
-    reinterpret_cast<char*>(&line_)) + sizeof(character_));
-  // @@protoc_insertion_point(copy_constructor:io.deephaven.proto.backplane.script.grpc.Position)
+  label_.InitDefault();
+  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+    label_.Set("", GetArenaForAllocation());
+  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  if (!from._internal_label().empty()) {
+    label_.Set(from._internal_label(), 
+      GetArenaForAllocation());
+  }
+  if (from._internal_has_documentation()) {
+    documentation_ = new ::io::deephaven::proto::backplane::script::grpc::MarkupContent(*from.documentation_);
+  } else {
+    documentation_ = nullptr;
+  }
+  // @@protoc_insertion_point(copy_constructor:io.deephaven.proto.backplane.script.grpc.ParameterInformation)
 }
 
-inline void Position::SharedCtor() {
-::memset(reinterpret_cast<char*>(this) + static_cast<size_t>(
-    reinterpret_cast<char*>(&line_) - reinterpret_cast<char*>(this)),
-    0, static_cast<size_t>(reinterpret_cast<char*>(&character_) -
-    reinterpret_cast<char*>(&line_)) + sizeof(character_));
+inline void ParameterInformation::SharedCtor() {
+label_.InitDefault();
+#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  label_.Set("", GetArenaForAllocation());
+#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+documentation_ = nullptr;
 }
 
-Position::~Position() {
-  // @@protoc_insertion_point(destructor:io.deephaven.proto.backplane.script.grpc.Position)
+ParameterInformation::~ParameterInformation() {
+  // @@protoc_insertion_point(destructor:io.deephaven.proto.backplane.script.grpc.ParameterInformation)
   if (auto *arena = _internal_metadata_.DeleteReturnArena<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>()) {
   (void)arena;
     return;
@@ -6917,44 +11574,50 @@ Position::~Position() {
   SharedDtor();
 }
 
-inline void Position::SharedDtor() {
+inline void ParameterInformation::SharedDtor() {
   GOOGLE_DCHECK(GetArenaForAllocation() == nullptr);
+  label_.Destroy();
+  if (this != internal_default_instance()) delete documentation_;
 }
 
-void Position::SetCachedSize(int size) const {
+void ParameterInformation::SetCachedSize(int size) const {
   _cached_size_.Set(size);
 }
 
-void Position::Clear() {
-// @@protoc_insertion_point(message_clear_start:io.deephaven.proto.backplane.script.grpc.Position)
+void ParameterInformation::Clear() {
+// @@protoc_insertion_point(message_clear_start:io.deephaven.proto.backplane.script.grpc.ParameterInformation)
   uint32_t cached_has_bits = 0;
   // Prevent compiler warnings about cached_has_bits being unused
   (void) cached_has_bits;
 
-  ::memset(&line_, 0, static_cast<size_t>(
-      reinterpret_cast<char*>(&character_) -
-      reinterpret_cast<char*>(&line_)) + sizeof(character_));
+  label_.ClearToEmpty();
+  if (GetArenaForAllocation() == nullptr && documentation_ != nullptr) {
+    delete documentation_;
+  }
+  documentation_ = nullptr;
   _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
 }
 
-const char* Position::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) {
+const char* ParameterInformation::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) {
 #define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
   while (!ctx->Done(&ptr)) {
     uint32_t tag;
     ptr = ::_pbi::ReadTag(ptr, &tag);
     switch (tag >> 3) {
-      // int32 line = 1;
+      // string label = 1;
       case 1:
-        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 8)) {
-          line_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
+        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 10)) {
+          auto str = _internal_mutable_label();
+          ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
           CHK_(ptr);
+          CHK_(::_pbi::VerifyUTF8(str, "io.deephaven.proto.backplane.script.grpc.ParameterInformation.label"));
         } else
           goto handle_unusual;
         continue;
-      // int32 character = 2;
+      // .io.deephaven.proto.backplane.script.grpc.MarkupContent documentation = 2;
       case 2:
-        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 16)) {
-          character_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
+        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 18)) {
+          ptr = ctx->ParseMessage(_internal_mutable_documentation(), ptr);
           CHK_(ptr);
         } else
           goto handle_unusual;
@@ -6982,160 +11645,144 @@ const char* Position::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx)
 #undef CHK_
 }
 
-uint8_t* Position::_InternalSerialize(
+uint8_t* ParameterInformation::_InternalSerialize(
     uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const {
-  // @@protoc_insertion_point(serialize_to_array_start:io.deephaven.proto.backplane.script.grpc.Position)
+  // @@protoc_insertion_point(serialize_to_array_start:io.deephaven.proto.backplane.script.grpc.ParameterInformation)
   uint32_t cached_has_bits = 0;
   (void) cached_has_bits;
 
-  // int32 line = 1;
-  if (this->_internal_line() != 0) {
-    target = stream->EnsureSpace(target);
-    target = ::_pbi::WireFormatLite::WriteInt32ToArray(1, this->_internal_line(), target);
+  // string label = 1;
+  if (!this->_internal_label().empty()) {
+    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
+      this->_internal_label().data(), static_cast<int>(this->_internal_label().length()),
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
+      "io.deephaven.proto.backplane.script.grpc.ParameterInformation.label");
+    target = stream->WriteStringMaybeAliased(
+        1, this->_internal_label(), target);
   }
 
-  // int32 character = 2;
-  if (this->_internal_character() != 0) {
-    target = stream->EnsureSpace(target);
-    target = ::_pbi::WireFormatLite::WriteInt32ToArray(2, this->_internal_character(), target);
+  // .io.deephaven.proto.backplane.script.grpc.MarkupContent documentation = 2;
+  if (this->_internal_has_documentation()) {
+    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
+      InternalWriteMessage(2, _Internal::documentation(this),
+        _Internal::documentation(this).GetCachedSize(), target, stream);
   }
 
   if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
     target = ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray(
         _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream);
   }
-  // @@protoc_insertion_point(serialize_to_array_end:io.deephaven.proto.backplane.script.grpc.Position)
+  // @@protoc_insertion_point(serialize_to_array_end:io.deephaven.proto.backplane.script.grpc.ParameterInformation)
   return target;
 }
 
-size_t Position::ByteSizeLong() const {
-// @@protoc_insertion_point(message_byte_size_start:io.deephaven.proto.backplane.script.grpc.Position)
+size_t ParameterInformation::ByteSizeLong() const {
+// @@protoc_insertion_point(message_byte_size_start:io.deephaven.proto.backplane.script.grpc.ParameterInformation)
   size_t total_size = 0;
 
   uint32_t cached_has_bits = 0;
   // Prevent compiler warnings about cached_has_bits being unused
   (void) cached_has_bits;
 
-  // int32 line = 1;
-  if (this->_internal_line() != 0) {
-    total_size += ::_pbi::WireFormatLite::Int32SizePlusOne(this->_internal_line());
+  // string label = 1;
+  if (!this->_internal_label().empty()) {
+    total_size += 1 +
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
+        this->_internal_label());
   }
 
-  // int32 character = 2;
-  if (this->_internal_character() != 0) {
-    total_size += ::_pbi::WireFormatLite::Int32SizePlusOne(this->_internal_character());
+  // .io.deephaven.proto.backplane.script.grpc.MarkupContent documentation = 2;
+  if (this->_internal_has_documentation()) {
+    total_size += 1 +
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
+        *documentation_);
   }
 
   return MaybeComputeUnknownFieldsSize(total_size, &_cached_size_);
 }
 
-const ::PROTOBUF_NAMESPACE_ID::Message::ClassData Position::_class_data_ = {
+const ::PROTOBUF_NAMESPACE_ID::Message::ClassData ParameterInformation::_class_data_ = {
     ::PROTOBUF_NAMESPACE_ID::Message::CopyWithSizeCheck,
-    Position::MergeImpl
+    ParameterInformation::MergeImpl
 };
-const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*Position::GetClassData() const { return &_class_data_; }
+const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*ParameterInformation::GetClassData() const { return &_class_data_; }
 
-void Position::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to,
+void ParameterInformation::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to,
                       const ::PROTOBUF_NAMESPACE_ID::Message& from) {
-  static_cast<Position *>(to)->MergeFrom(
-      static_cast<const Position &>(from));
+  static_cast<ParameterInformation *>(to)->MergeFrom(
+      static_cast<const ParameterInformation &>(from));
 }
 
 
-void Position::MergeFrom(const Position& from) {
-// @@protoc_insertion_point(class_specific_merge_from_start:io.deephaven.proto.backplane.script.grpc.Position)
+void ParameterInformation::MergeFrom(const ParameterInformation& from) {
+// @@protoc_insertion_point(class_specific_merge_from_start:io.deephaven.proto.backplane.script.grpc.ParameterInformation)
   GOOGLE_DCHECK_NE(&from, this);
   uint32_t cached_has_bits = 0;
   (void) cached_has_bits;
 
-  if (from._internal_line() != 0) {
-    _internal_set_line(from._internal_line());
+  if (!from._internal_label().empty()) {
+    _internal_set_label(from._internal_label());
   }
-  if (from._internal_character() != 0) {
-    _internal_set_character(from._internal_character());
+  if (from._internal_has_documentation()) {
+    _internal_mutable_documentation()->::io::deephaven::proto::backplane::script::grpc::MarkupContent::MergeFrom(from._internal_documentation());
   }
   _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
 }
 
-void Position::CopyFrom(const Position& from) {
-// @@protoc_insertion_point(class_specific_copy_from_start:io.deephaven.proto.backplane.script.grpc.Position)
+void ParameterInformation::CopyFrom(const ParameterInformation& from) {
+// @@protoc_insertion_point(class_specific_copy_from_start:io.deephaven.proto.backplane.script.grpc.ParameterInformation)
   if (&from == this) return;
   Clear();
   MergeFrom(from);
 }
 
-bool Position::IsInitialized() const {
+bool ParameterInformation::IsInitialized() const {
   return true;
 }
 
-void Position::InternalSwap(Position* other) {
+void ParameterInformation::InternalSwap(ParameterInformation* other) {
   using std::swap;
+  auto* lhs_arena = GetArenaForAllocation();
+  auto* rhs_arena = other->GetArenaForAllocation();
   _internal_metadata_.InternalSwap(&other->_internal_metadata_);
-  ::PROTOBUF_NAMESPACE_ID::internal::memswap<
-      PROTOBUF_FIELD_OFFSET(Position, character_)
-      + sizeof(Position::character_)
-      - PROTOBUF_FIELD_OFFSET(Position, line_)>(
-          reinterpret_cast<char*>(&line_),
-          reinterpret_cast<char*>(&other->line_));
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
+      &label_, lhs_arena,
+      &other->label_, rhs_arena
+  );
+  swap(documentation_, other->documentation_);
 }
 
-::PROTOBUF_NAMESPACE_ID::Metadata Position::GetMetadata() const {
+::PROTOBUF_NAMESPACE_ID::Metadata ParameterInformation::GetMetadata() const {
   return ::_pbi::AssignDescriptors(
       &descriptor_table_deephaven_2fproto_2fconsole_2eproto_getter, &descriptor_table_deephaven_2fproto_2fconsole_2eproto_once,
-      file_level_metadata_deephaven_2fproto_2fconsole_2eproto[24]);
+      file_level_metadata_deephaven_2fproto_2fconsole_2eproto[37]);
 }
 
 // ===================================================================
 
-class GetCompletionItemsRequest::_Internal {
+class GetHoverRequest::_Internal {
  public:
-  static const ::io::deephaven::proto::backplane::grpc::Ticket& console_id(const GetCompletionItemsRequest* msg);
-  static const ::io::deephaven::proto::backplane::script::grpc::CompletionContext& context(const GetCompletionItemsRequest* msg);
-  static const ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier& text_document(const GetCompletionItemsRequest* msg);
-  static const ::io::deephaven::proto::backplane::script::grpc::Position& position(const GetCompletionItemsRequest* msg);
+  static const ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier& text_document(const GetHoverRequest* msg);
+  static const ::io::deephaven::proto::backplane::script::grpc::Position& position(const GetHoverRequest* msg);
 };
 
-const ::io::deephaven::proto::backplane::grpc::Ticket&
-GetCompletionItemsRequest::_Internal::console_id(const GetCompletionItemsRequest* msg) {
-  return *msg->console_id_;
-}
-const ::io::deephaven::proto::backplane::script::grpc::CompletionContext&
-GetCompletionItemsRequest::_Internal::context(const GetCompletionItemsRequest* msg) {
-  return *msg->context_;
-}
 const ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier&
-GetCompletionItemsRequest::_Internal::text_document(const GetCompletionItemsRequest* msg) {
+GetHoverRequest::_Internal::text_document(const GetHoverRequest* msg) {
   return *msg->text_document_;
 }
 const ::io::deephaven::proto::backplane::script::grpc::Position&
-GetCompletionItemsRequest::_Internal::position(const GetCompletionItemsRequest* msg) {
+GetHoverRequest::_Internal::position(const GetHoverRequest* msg) {
   return *msg->position_;
 }
-void GetCompletionItemsRequest::clear_console_id() {
-  if (GetArenaForAllocation() == nullptr && console_id_ != nullptr) {
-    delete console_id_;
-  }
-  console_id_ = nullptr;
-}
-GetCompletionItemsRequest::GetCompletionItemsRequest(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+GetHoverRequest::GetHoverRequest(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                          bool is_message_owned)
   : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned) {
   SharedCtor();
-  // @@protoc_insertion_point(arena_constructor:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest)
+  // @@protoc_insertion_point(arena_constructor:io.deephaven.proto.backplane.script.grpc.GetHoverRequest)
 }
-GetCompletionItemsRequest::GetCompletionItemsRequest(const GetCompletionItemsRequest& from)
+GetHoverRequest::GetHoverRequest(const GetHoverRequest& from)
   : ::PROTOBUF_NAMESPACE_ID::Message() {
   _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
-  if (from._internal_has_console_id()) {
-    console_id_ = new ::io::deephaven::proto::backplane::grpc::Ticket(*from.console_id_);
-  } else {
-    console_id_ = nullptr;
-  }
-  if (from._internal_has_context()) {
-    context_ = new ::io::deephaven::proto::backplane::script::grpc::CompletionContext(*from.context_);
-  } else {
-    context_ = nullptr;
-  }
   if (from._internal_has_text_document()) {
     text_document_ = new ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier(*from.text_document_);
   } else {
@@ -7146,19 +11793,18 @@ GetCompletionItemsRequest::GetCompletionItemsRequest(const GetCompletionItemsReq
   } else {
     position_ = nullptr;
   }
-  request_id_ = from.request_id_;
-  // @@protoc_insertion_point(copy_constructor:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest)
+  // @@protoc_insertion_point(copy_constructor:io.deephaven.proto.backplane.script.grpc.GetHoverRequest)
 }
 
-inline void GetCompletionItemsRequest::SharedCtor() {
+inline void GetHoverRequest::SharedCtor() {
 ::memset(reinterpret_cast<char*>(this) + static_cast<size_t>(
-    reinterpret_cast<char*>(&console_id_) - reinterpret_cast<char*>(this)),
-    0, static_cast<size_t>(reinterpret_cast<char*>(&request_id_) -
-    reinterpret_cast<char*>(&console_id_)) + sizeof(request_id_));
+    reinterpret_cast<char*>(&text_document_) - reinterpret_cast<char*>(this)),
+    0, static_cast<size_t>(reinterpret_cast<char*>(&position_) -
+    reinterpret_cast<char*>(&text_document_)) + sizeof(position_));
 }
 
-GetCompletionItemsRequest::~GetCompletionItemsRequest() {
-  // @@protoc_insertion_point(destructor:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest)
+GetHoverRequest::~GetHoverRequest() {
+  // @@protoc_insertion_point(destructor:io.deephaven.proto.backplane.script.grpc.GetHoverRequest)
   if (auto *arena = _internal_metadata_.DeleteReturnArena<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>()) {
   (void)arena;
     return;
@@ -7166,32 +11812,22 @@ GetCompletionItemsRequest::~GetCompletionItemsRequest() {
   SharedDtor();
 }
 
-inline void GetCompletionItemsRequest::SharedDtor() {
+inline void GetHoverRequest::SharedDtor() {
   GOOGLE_DCHECK(GetArenaForAllocation() == nullptr);
-  if (this != internal_default_instance()) delete console_id_;
-  if (this != internal_default_instance()) delete context_;
   if (this != internal_default_instance()) delete text_document_;
   if (this != internal_default_instance()) delete position_;
 }
 
-void GetCompletionItemsRequest::SetCachedSize(int size) const {
+void GetHoverRequest::SetCachedSize(int size) const {
   _cached_size_.Set(size);
 }
 
-void GetCompletionItemsRequest::Clear() {
-// @@protoc_insertion_point(message_clear_start:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest)
+void GetHoverRequest::Clear() {
+// @@protoc_insertion_point(message_clear_start:io.deephaven.proto.backplane.script.grpc.GetHoverRequest)
   uint32_t cached_has_bits = 0;
   // Prevent compiler warnings about cached_has_bits being unused
   (void) cached_has_bits;
 
-  if (GetArenaForAllocation() == nullptr && console_id_ != nullptr) {
-    delete console_id_;
-  }
-  console_id_ = nullptr;
-  if (GetArenaForAllocation() == nullptr && context_ != nullptr) {
-    delete context_;
-  }
-  context_ = nullptr;
   if (GetArenaForAllocation() == nullptr && text_document_ != nullptr) {
     delete text_document_;
   }
@@ -7200,56 +11836,31 @@ void GetCompletionItemsRequest::Clear() {
     delete position_;
   }
   position_ = nullptr;
-  request_id_ = 0;
   _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
 }
 
-const char* GetCompletionItemsRequest::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) {
+const char* GetHoverRequest::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) {
 #define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
   while (!ctx->Done(&ptr)) {
     uint32_t tag;
     ptr = ::_pbi::ReadTag(ptr, &tag);
     switch (tag >> 3) {
-      // .io.deephaven.proto.backplane.grpc.Ticket console_id = 1;
+      // .io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier text_document = 1;
       case 1:
         if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 10)) {
-          ptr = ctx->ParseMessage(_internal_mutable_console_id(), ptr);
+          ptr = ctx->ParseMessage(_internal_mutable_text_document(), ptr);
           CHK_(ptr);
         } else
           goto handle_unusual;
         continue;
-      // .io.deephaven.proto.backplane.script.grpc.CompletionContext context = 2;
+      // .io.deephaven.proto.backplane.script.grpc.Position position = 2;
       case 2:
         if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 18)) {
-          ptr = ctx->ParseMessage(_internal_mutable_context(), ptr);
-          CHK_(ptr);
-        } else
-          goto handle_unusual;
-        continue;
-      // .io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier text_document = 3;
-      case 3:
-        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 26)) {
-          ptr = ctx->ParseMessage(_internal_mutable_text_document(), ptr);
-          CHK_(ptr);
-        } else
-          goto handle_unusual;
-        continue;
-      // .io.deephaven.proto.backplane.script.grpc.Position position = 4;
-      case 4:
-        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 34)) {
           ptr = ctx->ParseMessage(_internal_mutable_position(), ptr);
           CHK_(ptr);
         } else
           goto handle_unusual;
         continue;
-      // int32 request_id = 5;
-      case 5:
-        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 40)) {
-          request_id_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
-          CHK_(ptr);
-        } else
-          goto handle_unusual;
-        continue;
       default:
         goto handle_unusual;
     }  // switch
@@ -7273,200 +11884,162 @@ const char* GetCompletionItemsRequest::_InternalParse(const char* ptr, ::_pbi::P
 #undef CHK_
 }
 
-uint8_t* GetCompletionItemsRequest::_InternalSerialize(
+uint8_t* GetHoverRequest::_InternalSerialize(
     uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const {
-  // @@protoc_insertion_point(serialize_to_array_start:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest)
+  // @@protoc_insertion_point(serialize_to_array_start:io.deephaven.proto.backplane.script.grpc.GetHoverRequest)
   uint32_t cached_has_bits = 0;
   (void) cached_has_bits;
 
-  // .io.deephaven.proto.backplane.grpc.Ticket console_id = 1;
-  if (this->_internal_has_console_id()) {
-    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
-      InternalWriteMessage(1, _Internal::console_id(this),
-        _Internal::console_id(this).GetCachedSize(), target, stream);
-  }
-
-  // .io.deephaven.proto.backplane.script.grpc.CompletionContext context = 2;
-  if (this->_internal_has_context()) {
-    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
-      InternalWriteMessage(2, _Internal::context(this),
-        _Internal::context(this).GetCachedSize(), target, stream);
-  }
-
-  // .io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier text_document = 3;
+  // .io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier text_document = 1;
   if (this->_internal_has_text_document()) {
     target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
-      InternalWriteMessage(3, _Internal::text_document(this),
+      InternalWriteMessage(1, _Internal::text_document(this),
         _Internal::text_document(this).GetCachedSize(), target, stream);
   }
 
-  // .io.deephaven.proto.backplane.script.grpc.Position position = 4;
+  // .io.deephaven.proto.backplane.script.grpc.Position position = 2;
   if (this->_internal_has_position()) {
     target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
-      InternalWriteMessage(4, _Internal::position(this),
+      InternalWriteMessage(2, _Internal::position(this),
         _Internal::position(this).GetCachedSize(), target, stream);
   }
 
-  // int32 request_id = 5;
-  if (this->_internal_request_id() != 0) {
-    target = stream->EnsureSpace(target);
-    target = ::_pbi::WireFormatLite::WriteInt32ToArray(5, this->_internal_request_id(), target);
-  }
-
   if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
     target = ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray(
         _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream);
   }
-  // @@protoc_insertion_point(serialize_to_array_end:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest)
+  // @@protoc_insertion_point(serialize_to_array_end:io.deephaven.proto.backplane.script.grpc.GetHoverRequest)
   return target;
 }
 
-size_t GetCompletionItemsRequest::ByteSizeLong() const {
-// @@protoc_insertion_point(message_byte_size_start:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest)
+size_t GetHoverRequest::ByteSizeLong() const {
+// @@protoc_insertion_point(message_byte_size_start:io.deephaven.proto.backplane.script.grpc.GetHoverRequest)
   size_t total_size = 0;
 
   uint32_t cached_has_bits = 0;
   // Prevent compiler warnings about cached_has_bits being unused
   (void) cached_has_bits;
 
-  // .io.deephaven.proto.backplane.grpc.Ticket console_id = 1;
-  if (this->_internal_has_console_id()) {
-    total_size += 1 +
-      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
-        *console_id_);
-  }
-
-  // .io.deephaven.proto.backplane.script.grpc.CompletionContext context = 2;
-  if (this->_internal_has_context()) {
-    total_size += 1 +
-      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
-        *context_);
-  }
-
-  // .io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier text_document = 3;
+  // .io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier text_document = 1;
   if (this->_internal_has_text_document()) {
     total_size += 1 +
       ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
         *text_document_);
   }
 
-  // .io.deephaven.proto.backplane.script.grpc.Position position = 4;
+  // .io.deephaven.proto.backplane.script.grpc.Position position = 2;
   if (this->_internal_has_position()) {
     total_size += 1 +
       ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
         *position_);
   }
 
-  // int32 request_id = 5;
-  if (this->_internal_request_id() != 0) {
-    total_size += ::_pbi::WireFormatLite::Int32SizePlusOne(this->_internal_request_id());
-  }
-
   return MaybeComputeUnknownFieldsSize(total_size, &_cached_size_);
 }
 
-const ::PROTOBUF_NAMESPACE_ID::Message::ClassData GetCompletionItemsRequest::_class_data_ = {
+const ::PROTOBUF_NAMESPACE_ID::Message::ClassData GetHoverRequest::_class_data_ = {
     ::PROTOBUF_NAMESPACE_ID::Message::CopyWithSizeCheck,
-    GetCompletionItemsRequest::MergeImpl
+    GetHoverRequest::MergeImpl
 };
-const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetCompletionItemsRequest::GetClassData() const { return &_class_data_; }
+const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetHoverRequest::GetClassData() const { return &_class_data_; }
 
-void GetCompletionItemsRequest::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to,
+void GetHoverRequest::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to,
                       const ::PROTOBUF_NAMESPACE_ID::Message& from) {
-  static_cast<GetCompletionItemsRequest *>(to)->MergeFrom(
-      static_cast<const GetCompletionItemsRequest &>(from));
+  static_cast<GetHoverRequest *>(to)->MergeFrom(
+      static_cast<const GetHoverRequest &>(from));
 }
 
 
-void GetCompletionItemsRequest::MergeFrom(const GetCompletionItemsRequest& from) {
-// @@protoc_insertion_point(class_specific_merge_from_start:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest)
+void GetHoverRequest::MergeFrom(const GetHoverRequest& from) {
+// @@protoc_insertion_point(class_specific_merge_from_start:io.deephaven.proto.backplane.script.grpc.GetHoverRequest)
   GOOGLE_DCHECK_NE(&from, this);
   uint32_t cached_has_bits = 0;
   (void) cached_has_bits;
 
-  if (from._internal_has_console_id()) {
-    _internal_mutable_console_id()->::io::deephaven::proto::backplane::grpc::Ticket::MergeFrom(from._internal_console_id());
-  }
-  if (from._internal_has_context()) {
-    _internal_mutable_context()->::io::deephaven::proto::backplane::script::grpc::CompletionContext::MergeFrom(from._internal_context());
-  }
   if (from._internal_has_text_document()) {
     _internal_mutable_text_document()->::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier::MergeFrom(from._internal_text_document());
   }
   if (from._internal_has_position()) {
     _internal_mutable_position()->::io::deephaven::proto::backplane::script::grpc::Position::MergeFrom(from._internal_position());
   }
-  if (from._internal_request_id() != 0) {
-    _internal_set_request_id(from._internal_request_id());
-  }
   _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
 }
 
-void GetCompletionItemsRequest::CopyFrom(const GetCompletionItemsRequest& from) {
-// @@protoc_insertion_point(class_specific_copy_from_start:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest)
+void GetHoverRequest::CopyFrom(const GetHoverRequest& from) {
+// @@protoc_insertion_point(class_specific_copy_from_start:io.deephaven.proto.backplane.script.grpc.GetHoverRequest)
   if (&from == this) return;
   Clear();
   MergeFrom(from);
 }
 
-bool GetCompletionItemsRequest::IsInitialized() const {
+bool GetHoverRequest::IsInitialized() const {
   return true;
 }
 
-void GetCompletionItemsRequest::InternalSwap(GetCompletionItemsRequest* other) {
+void GetHoverRequest::InternalSwap(GetHoverRequest* other) {
   using std::swap;
   _internal_metadata_.InternalSwap(&other->_internal_metadata_);
   ::PROTOBUF_NAMESPACE_ID::internal::memswap<
-      PROTOBUF_FIELD_OFFSET(GetCompletionItemsRequest, request_id_)
-      + sizeof(GetCompletionItemsRequest::request_id_)
-      - PROTOBUF_FIELD_OFFSET(GetCompletionItemsRequest, console_id_)>(
-          reinterpret_cast<char*>(&console_id_),
-          reinterpret_cast<char*>(&other->console_id_));
+      PROTOBUF_FIELD_OFFSET(GetHoverRequest, position_)
+      + sizeof(GetHoverRequest::position_)
+      - PROTOBUF_FIELD_OFFSET(GetHoverRequest, text_document_)>(
+          reinterpret_cast<char*>(&text_document_),
+          reinterpret_cast<char*>(&other->text_document_));
 }
 
-::PROTOBUF_NAMESPACE_ID::Metadata GetCompletionItemsRequest::GetMetadata() const {
+::PROTOBUF_NAMESPACE_ID::Metadata GetHoverRequest::GetMetadata() const {
   return ::_pbi::AssignDescriptors(
       &descriptor_table_deephaven_2fproto_2fconsole_2eproto_getter, &descriptor_table_deephaven_2fproto_2fconsole_2eproto_once,
-      file_level_metadata_deephaven_2fproto_2fconsole_2eproto[25]);
+      file_level_metadata_deephaven_2fproto_2fconsole_2eproto[38]);
 }
 
 // ===================================================================
 
-class CompletionContext::_Internal {
+class GetHoverResponse::_Internal {
  public:
+  static const ::io::deephaven::proto::backplane::script::grpc::MarkupContent& contents(const GetHoverResponse* msg);
+  static const ::io::deephaven::proto::backplane::script::grpc::DocumentRange& range(const GetHoverResponse* msg);
 };
 
-CompletionContext::CompletionContext(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+const ::io::deephaven::proto::backplane::script::grpc::MarkupContent&
+GetHoverResponse::_Internal::contents(const GetHoverResponse* msg) {
+  return *msg->contents_;
+}
+const ::io::deephaven::proto::backplane::script::grpc::DocumentRange&
+GetHoverResponse::_Internal::range(const GetHoverResponse* msg) {
+  return *msg->range_;
+}
+GetHoverResponse::GetHoverResponse(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                          bool is_message_owned)
   : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned) {
   SharedCtor();
-  // @@protoc_insertion_point(arena_constructor:io.deephaven.proto.backplane.script.grpc.CompletionContext)
+  // @@protoc_insertion_point(arena_constructor:io.deephaven.proto.backplane.script.grpc.GetHoverResponse)
 }
-CompletionContext::CompletionContext(const CompletionContext& from)
+GetHoverResponse::GetHoverResponse(const GetHoverResponse& from)
   : ::PROTOBUF_NAMESPACE_ID::Message() {
   _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
-  trigger_character_.InitDefault();
-  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
-    trigger_character_.Set("", GetArenaForAllocation());
-  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
-  if (!from._internal_trigger_character().empty()) {
-    trigger_character_.Set(from._internal_trigger_character(), 
-      GetArenaForAllocation());
+  if (from._internal_has_contents()) {
+    contents_ = new ::io::deephaven::proto::backplane::script::grpc::MarkupContent(*from.contents_);
+  } else {
+    contents_ = nullptr;
   }
-  trigger_kind_ = from.trigger_kind_;
-  // @@protoc_insertion_point(copy_constructor:io.deephaven.proto.backplane.script.grpc.CompletionContext)
+  if (from._internal_has_range()) {
+    range_ = new ::io::deephaven::proto::backplane::script::grpc::DocumentRange(*from.range_);
+  } else {
+    range_ = nullptr;
+  }
+  // @@protoc_insertion_point(copy_constructor:io.deephaven.proto.backplane.script.grpc.GetHoverResponse)
 }
 
-inline void CompletionContext::SharedCtor() {
-trigger_character_.InitDefault();
-#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
-  trigger_character_.Set("", GetArenaForAllocation());
-#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
-trigger_kind_ = 0;
+inline void GetHoverResponse::SharedCtor() {
+::memset(reinterpret_cast<char*>(this) + static_cast<size_t>(
+    reinterpret_cast<char*>(&contents_) - reinterpret_cast<char*>(this)),
+    0, static_cast<size_t>(reinterpret_cast<char*>(&range_) -
+    reinterpret_cast<char*>(&contents_)) + sizeof(range_));
 }
 
-CompletionContext::~CompletionContext() {
-  // @@protoc_insertion_point(destructor:io.deephaven.proto.backplane.script.grpc.CompletionContext)
+GetHoverResponse::~GetHoverResponse() {
+  // @@protoc_insertion_point(destructor:io.deephaven.proto.backplane.script.grpc.GetHoverResponse)
   if (auto *arena = _internal_metadata_.DeleteReturnArena<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>()) {
   (void)arena;
     return;
@@ -7474,47 +12047,52 @@ CompletionContext::~CompletionContext() {
   SharedDtor();
 }
 
-inline void CompletionContext::SharedDtor() {
+inline void GetHoverResponse::SharedDtor() {
   GOOGLE_DCHECK(GetArenaForAllocation() == nullptr);
-  trigger_character_.Destroy();
+  if (this != internal_default_instance()) delete contents_;
+  if (this != internal_default_instance()) delete range_;
 }
 
-void CompletionContext::SetCachedSize(int size) const {
+void GetHoverResponse::SetCachedSize(int size) const {
   _cached_size_.Set(size);
 }
 
-void CompletionContext::Clear() {
-// @@protoc_insertion_point(message_clear_start:io.deephaven.proto.backplane.script.grpc.CompletionContext)
+void GetHoverResponse::Clear() {
+// @@protoc_insertion_point(message_clear_start:io.deephaven.proto.backplane.script.grpc.GetHoverResponse)
   uint32_t cached_has_bits = 0;
   // Prevent compiler warnings about cached_has_bits being unused
   (void) cached_has_bits;
 
-  trigger_character_.ClearToEmpty();
-  trigger_kind_ = 0;
+  if (GetArenaForAllocation() == nullptr && contents_ != nullptr) {
+    delete contents_;
+  }
+  contents_ = nullptr;
+  if (GetArenaForAllocation() == nullptr && range_ != nullptr) {
+    delete range_;
+  }
+  range_ = nullptr;
   _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
 }
 
-const char* CompletionContext::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) {
+const char* GetHoverResponse::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) {
 #define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
   while (!ctx->Done(&ptr)) {
     uint32_t tag;
     ptr = ::_pbi::ReadTag(ptr, &tag);
     switch (tag >> 3) {
-      // int32 trigger_kind = 1;
+      // .io.deephaven.proto.backplane.script.grpc.MarkupContent contents = 1;
       case 1:
-        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 8)) {
-          trigger_kind_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
+        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 10)) {
+          ptr = ctx->ParseMessage(_internal_mutable_contents(), ptr);
           CHK_(ptr);
         } else
           goto handle_unusual;
         continue;
-      // string trigger_character = 2;
+      // .io.deephaven.proto.backplane.script.grpc.DocumentRange range = 2;
       case 2:
         if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 18)) {
-          auto str = _internal_mutable_trigger_character();
-          ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
+          ptr = ctx->ParseMessage(_internal_mutable_range(), ptr);
           CHK_(ptr);
-          CHK_(::_pbi::VerifyUTF8(str, "io.deephaven.proto.backplane.script.grpc.CompletionContext.trigger_character"));
         } else
           goto handle_unusual;
         continue;
@@ -7541,148 +12119,181 @@ const char* CompletionContext::_InternalParse(const char* ptr, ::_pbi::ParseCont
 #undef CHK_
 }
 
-uint8_t* CompletionContext::_InternalSerialize(
+uint8_t* GetHoverResponse::_InternalSerialize(
     uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const {
-  // @@protoc_insertion_point(serialize_to_array_start:io.deephaven.proto.backplane.script.grpc.CompletionContext)
+  // @@protoc_insertion_point(serialize_to_array_start:io.deephaven.proto.backplane.script.grpc.GetHoverResponse)
   uint32_t cached_has_bits = 0;
   (void) cached_has_bits;
 
-  // int32 trigger_kind = 1;
-  if (this->_internal_trigger_kind() != 0) {
-    target = stream->EnsureSpace(target);
-    target = ::_pbi::WireFormatLite::WriteInt32ToArray(1, this->_internal_trigger_kind(), target);
+  // .io.deephaven.proto.backplane.script.grpc.MarkupContent contents = 1;
+  if (this->_internal_has_contents()) {
+    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
+      InternalWriteMessage(1, _Internal::contents(this),
+        _Internal::contents(this).GetCachedSize(), target, stream);
   }
 
-  // string trigger_character = 2;
-  if (!this->_internal_trigger_character().empty()) {
-    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
-      this->_internal_trigger_character().data(), static_cast<int>(this->_internal_trigger_character().length()),
-      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
-      "io.deephaven.proto.backplane.script.grpc.CompletionContext.trigger_character");
-    target = stream->WriteStringMaybeAliased(
-        2, this->_internal_trigger_character(), target);
+  // .io.deephaven.proto.backplane.script.grpc.DocumentRange range = 2;
+  if (this->_internal_has_range()) {
+    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
+      InternalWriteMessage(2, _Internal::range(this),
+        _Internal::range(this).GetCachedSize(), target, stream);
   }
 
   if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
     target = ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray(
         _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream);
   }
-  // @@protoc_insertion_point(serialize_to_array_end:io.deephaven.proto.backplane.script.grpc.CompletionContext)
+  // @@protoc_insertion_point(serialize_to_array_end:io.deephaven.proto.backplane.script.grpc.GetHoverResponse)
   return target;
 }
 
-size_t CompletionContext::ByteSizeLong() const {
-// @@protoc_insertion_point(message_byte_size_start:io.deephaven.proto.backplane.script.grpc.CompletionContext)
+size_t GetHoverResponse::ByteSizeLong() const {
+// @@protoc_insertion_point(message_byte_size_start:io.deephaven.proto.backplane.script.grpc.GetHoverResponse)
   size_t total_size = 0;
 
   uint32_t cached_has_bits = 0;
   // Prevent compiler warnings about cached_has_bits being unused
   (void) cached_has_bits;
 
-  // string trigger_character = 2;
-  if (!this->_internal_trigger_character().empty()) {
+  // .io.deephaven.proto.backplane.script.grpc.MarkupContent contents = 1;
+  if (this->_internal_has_contents()) {
     total_size += 1 +
-      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
-        this->_internal_trigger_character());
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
+        *contents_);
   }
 
-  // int32 trigger_kind = 1;
-  if (this->_internal_trigger_kind() != 0) {
-    total_size += ::_pbi::WireFormatLite::Int32SizePlusOne(this->_internal_trigger_kind());
+  // .io.deephaven.proto.backplane.script.grpc.DocumentRange range = 2;
+  if (this->_internal_has_range()) {
+    total_size += 1 +
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
+        *range_);
   }
 
   return MaybeComputeUnknownFieldsSize(total_size, &_cached_size_);
 }
 
-const ::PROTOBUF_NAMESPACE_ID::Message::ClassData CompletionContext::_class_data_ = {
+const ::PROTOBUF_NAMESPACE_ID::Message::ClassData GetHoverResponse::_class_data_ = {
     ::PROTOBUF_NAMESPACE_ID::Message::CopyWithSizeCheck,
-    CompletionContext::MergeImpl
+    GetHoverResponse::MergeImpl
 };
-const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*CompletionContext::GetClassData() const { return &_class_data_; }
+const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetHoverResponse::GetClassData() const { return &_class_data_; }
 
-void CompletionContext::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to,
+void GetHoverResponse::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to,
                       const ::PROTOBUF_NAMESPACE_ID::Message& from) {
-  static_cast<CompletionContext *>(to)->MergeFrom(
-      static_cast<const CompletionContext &>(from));
+  static_cast<GetHoverResponse *>(to)->MergeFrom(
+      static_cast<const GetHoverResponse &>(from));
 }
 
 
-void CompletionContext::MergeFrom(const CompletionContext& from) {
-// @@protoc_insertion_point(class_specific_merge_from_start:io.deephaven.proto.backplane.script.grpc.CompletionContext)
+void GetHoverResponse::MergeFrom(const GetHoverResponse& from) {
+// @@protoc_insertion_point(class_specific_merge_from_start:io.deephaven.proto.backplane.script.grpc.GetHoverResponse)
   GOOGLE_DCHECK_NE(&from, this);
   uint32_t cached_has_bits = 0;
   (void) cached_has_bits;
 
-  if (!from._internal_trigger_character().empty()) {
-    _internal_set_trigger_character(from._internal_trigger_character());
+  if (from._internal_has_contents()) {
+    _internal_mutable_contents()->::io::deephaven::proto::backplane::script::grpc::MarkupContent::MergeFrom(from._internal_contents());
   }
-  if (from._internal_trigger_kind() != 0) {
-    _internal_set_trigger_kind(from._internal_trigger_kind());
+  if (from._internal_has_range()) {
+    _internal_mutable_range()->::io::deephaven::proto::backplane::script::grpc::DocumentRange::MergeFrom(from._internal_range());
   }
   _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
 }
 
-void CompletionContext::CopyFrom(const CompletionContext& from) {
-// @@protoc_insertion_point(class_specific_copy_from_start:io.deephaven.proto.backplane.script.grpc.CompletionContext)
+void GetHoverResponse::CopyFrom(const GetHoverResponse& from) {
+// @@protoc_insertion_point(class_specific_copy_from_start:io.deephaven.proto.backplane.script.grpc.GetHoverResponse)
   if (&from == this) return;
   Clear();
   MergeFrom(from);
 }
 
-bool CompletionContext::IsInitialized() const {
+bool GetHoverResponse::IsInitialized() const {
   return true;
 }
 
-void CompletionContext::InternalSwap(CompletionContext* other) {
+void GetHoverResponse::InternalSwap(GetHoverResponse* other) {
   using std::swap;
-  auto* lhs_arena = GetArenaForAllocation();
-  auto* rhs_arena = other->GetArenaForAllocation();
   _internal_metadata_.InternalSwap(&other->_internal_metadata_);
-  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
-      &trigger_character_, lhs_arena,
-      &other->trigger_character_, rhs_arena
-  );
-  swap(trigger_kind_, other->trigger_kind_);
+  ::PROTOBUF_NAMESPACE_ID::internal::memswap<
+      PROTOBUF_FIELD_OFFSET(GetHoverResponse, range_)
+      + sizeof(GetHoverResponse::range_)
+      - PROTOBUF_FIELD_OFFSET(GetHoverResponse, contents_)>(
+          reinterpret_cast<char*>(&contents_),
+          reinterpret_cast<char*>(&other->contents_));
 }
 
-::PROTOBUF_NAMESPACE_ID::Metadata CompletionContext::GetMetadata() const {
+::PROTOBUF_NAMESPACE_ID::Metadata GetHoverResponse::GetMetadata() const {
   return ::_pbi::AssignDescriptors(
       &descriptor_table_deephaven_2fproto_2fconsole_2eproto_getter, &descriptor_table_deephaven_2fproto_2fconsole_2eproto_once,
-      file_level_metadata_deephaven_2fproto_2fconsole_2eproto[26]);
+      file_level_metadata_deephaven_2fproto_2fconsole_2eproto[39]);
 }
 
 // ===================================================================
 
-class GetCompletionItemsResponse::_Internal {
+class GetDiagnosticRequest::_Internal {
  public:
+  using HasBits = decltype(std::declval<GetDiagnosticRequest>()._has_bits_);
+  static const ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier& text_document(const GetDiagnosticRequest* msg);
+  static void set_has_identifier(HasBits* has_bits) {
+    (*has_bits)[0] |= 1u;
+  }
+  static void set_has_previous_result_id(HasBits* has_bits) {
+    (*has_bits)[0] |= 2u;
+  }
 };
 
-GetCompletionItemsResponse::GetCompletionItemsResponse(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+const ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier&
+GetDiagnosticRequest::_Internal::text_document(const GetDiagnosticRequest* msg) {
+  return *msg->text_document_;
+}
+GetDiagnosticRequest::GetDiagnosticRequest(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                          bool is_message_owned)
-  : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned),
-  items_(arena) {
+  : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned) {
   SharedCtor();
-  // @@protoc_insertion_point(arena_constructor:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsResponse)
+  // @@protoc_insertion_point(arena_constructor:io.deephaven.proto.backplane.script.grpc.GetDiagnosticRequest)
 }
-GetCompletionItemsResponse::GetCompletionItemsResponse(const GetCompletionItemsResponse& from)
+GetDiagnosticRequest::GetDiagnosticRequest(const GetDiagnosticRequest& from)
   : ::PROTOBUF_NAMESPACE_ID::Message(),
-      items_(from.items_) {
+      _has_bits_(from._has_bits_) {
   _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
-  ::memcpy(&request_id_, &from.request_id_,
-    static_cast<size_t>(reinterpret_cast<char*>(&success_) -
-    reinterpret_cast<char*>(&request_id_)) + sizeof(success_));
-  // @@protoc_insertion_point(copy_constructor:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsResponse)
+  identifier_.InitDefault();
+  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+    identifier_.Set("", GetArenaForAllocation());
+  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  if (from._internal_has_identifier()) {
+    identifier_.Set(from._internal_identifier(), 
+      GetArenaForAllocation());
+  }
+  previous_result_id_.InitDefault();
+  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+    previous_result_id_.Set("", GetArenaForAllocation());
+  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  if (from._internal_has_previous_result_id()) {
+    previous_result_id_.Set(from._internal_previous_result_id(), 
+      GetArenaForAllocation());
+  }
+  if (from._internal_has_text_document()) {
+    text_document_ = new ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier(*from.text_document_);
+  } else {
+    text_document_ = nullptr;
+  }
+  // @@protoc_insertion_point(copy_constructor:io.deephaven.proto.backplane.script.grpc.GetDiagnosticRequest)
 }
 
-inline void GetCompletionItemsResponse::SharedCtor() {
-::memset(reinterpret_cast<char*>(this) + static_cast<size_t>(
-    reinterpret_cast<char*>(&request_id_) - reinterpret_cast<char*>(this)),
-    0, static_cast<size_t>(reinterpret_cast<char*>(&success_) -
-    reinterpret_cast<char*>(&request_id_)) + sizeof(success_));
+inline void GetDiagnosticRequest::SharedCtor() {
+identifier_.InitDefault();
+#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  identifier_.Set("", GetArenaForAllocation());
+#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+previous_result_id_.InitDefault();
+#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  previous_result_id_.Set("", GetArenaForAllocation());
+#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+text_document_ = nullptr;
 }
 
-GetCompletionItemsResponse::~GetCompletionItemsResponse() {
-  // @@protoc_insertion_point(destructor:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsResponse)
+GetDiagnosticRequest::~GetDiagnosticRequest() {
+  // @@protoc_insertion_point(destructor:io.deephaven.proto.backplane.script.grpc.GetDiagnosticRequest)
   if (auto *arena = _internal_metadata_.DeleteReturnArena<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>()) {
   (void)arena;
     return;
@@ -7690,59 +12301,72 @@ GetCompletionItemsResponse::~GetCompletionItemsResponse() {
   SharedDtor();
 }
 
-inline void GetCompletionItemsResponse::SharedDtor() {
+inline void GetDiagnosticRequest::SharedDtor() {
   GOOGLE_DCHECK(GetArenaForAllocation() == nullptr);
+  identifier_.Destroy();
+  previous_result_id_.Destroy();
+  if (this != internal_default_instance()) delete text_document_;
 }
 
-void GetCompletionItemsResponse::SetCachedSize(int size) const {
+void GetDiagnosticRequest::SetCachedSize(int size) const {
   _cached_size_.Set(size);
 }
 
-void GetCompletionItemsResponse::Clear() {
-// @@protoc_insertion_point(message_clear_start:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsResponse)
+void GetDiagnosticRequest::Clear() {
+// @@protoc_insertion_point(message_clear_start:io.deephaven.proto.backplane.script.grpc.GetDiagnosticRequest)
   uint32_t cached_has_bits = 0;
   // Prevent compiler warnings about cached_has_bits being unused
   (void) cached_has_bits;
 
-  items_.Clear();
-  ::memset(&request_id_, 0, static_cast<size_t>(
-      reinterpret_cast<char*>(&success_) -
-      reinterpret_cast<char*>(&request_id_)) + sizeof(success_));
+  cached_has_bits = _has_bits_[0];
+  if (cached_has_bits & 0x00000003u) {
+    if (cached_has_bits & 0x00000001u) {
+      identifier_.ClearNonDefaultToEmpty();
+    }
+    if (cached_has_bits & 0x00000002u) {
+      previous_result_id_.ClearNonDefaultToEmpty();
+    }
+  }
+  if (GetArenaForAllocation() == nullptr && text_document_ != nullptr) {
+    delete text_document_;
+  }
+  text_document_ = nullptr;
+  _has_bits_.Clear();
   _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
 }
 
-const char* GetCompletionItemsResponse::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) {
+const char* GetDiagnosticRequest::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) {
 #define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
+  _Internal::HasBits has_bits{};
   while (!ctx->Done(&ptr)) {
     uint32_t tag;
     ptr = ::_pbi::ReadTag(ptr, &tag);
     switch (tag >> 3) {
-      // repeated .io.deephaven.proto.backplane.script.grpc.CompletionItem items = 1;
+      // .io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier text_document = 1;
       case 1:
         if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 10)) {
-          ptr -= 1;
-          do {
-            ptr += 1;
-            ptr = ctx->ParseMessage(_internal_add_items(), ptr);
-            CHK_(ptr);
-            if (!ctx->DataAvailable(ptr)) break;
-          } while (::PROTOBUF_NAMESPACE_ID::internal::ExpectTag<10>(ptr));
+          ptr = ctx->ParseMessage(_internal_mutable_text_document(), ptr);
+          CHK_(ptr);
         } else
           goto handle_unusual;
         continue;
-      // int32 request_id = 2;
+      // optional string identifier = 2;
       case 2:
-        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 16)) {
-          request_id_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
+        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 18)) {
+          auto str = _internal_mutable_identifier();
+          ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
           CHK_(ptr);
+          CHK_(::_pbi::VerifyUTF8(str, "io.deephaven.proto.backplane.script.grpc.GetDiagnosticRequest.identifier"));
         } else
           goto handle_unusual;
         continue;
-      // bool success = 3;
+      // optional string previous_result_id = 3;
       case 3:
-        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 24)) {
-          success_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint64(&ptr);
+        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 26)) {
+          auto str = _internal_mutable_previous_result_id();
+          ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
           CHK_(ptr);
+          CHK_(::_pbi::VerifyUTF8(str, "io.deephaven.proto.backplane.script.grpc.GetDiagnosticRequest.previous_result_id"));
         } else
           goto handle_unusual;
         continue;
@@ -7762,6 +12386,7 @@ const char* GetCompletionItemsResponse::_InternalParse(const char* ptr, ::_pbi::
     CHK_(ptr != nullptr);
   }  // while
 message_done:
+  _has_bits_.Or(has_bits);
   return ptr;
 failure:
   ptr = nullptr;
@@ -7769,230 +12394,204 @@ const char* GetCompletionItemsResponse::_InternalParse(const char* ptr, ::_pbi::
 #undef CHK_
 }
 
-uint8_t* GetCompletionItemsResponse::_InternalSerialize(
+uint8_t* GetDiagnosticRequest::_InternalSerialize(
     uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const {
-  // @@protoc_insertion_point(serialize_to_array_start:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsResponse)
+  // @@protoc_insertion_point(serialize_to_array_start:io.deephaven.proto.backplane.script.grpc.GetDiagnosticRequest)
   uint32_t cached_has_bits = 0;
   (void) cached_has_bits;
 
-  // repeated .io.deephaven.proto.backplane.script.grpc.CompletionItem items = 1;
-  for (unsigned i = 0,
-      n = static_cast<unsigned>(this->_internal_items_size()); i < n; i++) {
-    const auto& repfield = this->_internal_items(i);
+  // .io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier text_document = 1;
+  if (this->_internal_has_text_document()) {
     target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
-        InternalWriteMessage(1, repfield, repfield.GetCachedSize(), target, stream);
+      InternalWriteMessage(1, _Internal::text_document(this),
+        _Internal::text_document(this).GetCachedSize(), target, stream);
   }
 
-  // int32 request_id = 2;
-  if (this->_internal_request_id() != 0) {
-    target = stream->EnsureSpace(target);
-    target = ::_pbi::WireFormatLite::WriteInt32ToArray(2, this->_internal_request_id(), target);
+  // optional string identifier = 2;
+  if (_internal_has_identifier()) {
+    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
+      this->_internal_identifier().data(), static_cast<int>(this->_internal_identifier().length()),
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
+      "io.deephaven.proto.backplane.script.grpc.GetDiagnosticRequest.identifier");
+    target = stream->WriteStringMaybeAliased(
+        2, this->_internal_identifier(), target);
   }
 
-  // bool success = 3;
-  if (this->_internal_success() != 0) {
-    target = stream->EnsureSpace(target);
-    target = ::_pbi::WireFormatLite::WriteBoolToArray(3, this->_internal_success(), target);
+  // optional string previous_result_id = 3;
+  if (_internal_has_previous_result_id()) {
+    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
+      this->_internal_previous_result_id().data(), static_cast<int>(this->_internal_previous_result_id().length()),
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
+      "io.deephaven.proto.backplane.script.grpc.GetDiagnosticRequest.previous_result_id");
+    target = stream->WriteStringMaybeAliased(
+        3, this->_internal_previous_result_id(), target);
   }
 
   if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
     target = ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray(
         _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream);
   }
-  // @@protoc_insertion_point(serialize_to_array_end:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsResponse)
+  // @@protoc_insertion_point(serialize_to_array_end:io.deephaven.proto.backplane.script.grpc.GetDiagnosticRequest)
   return target;
 }
 
-size_t GetCompletionItemsResponse::ByteSizeLong() const {
-// @@protoc_insertion_point(message_byte_size_start:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsResponse)
+size_t GetDiagnosticRequest::ByteSizeLong() const {
+// @@protoc_insertion_point(message_byte_size_start:io.deephaven.proto.backplane.script.grpc.GetDiagnosticRequest)
   size_t total_size = 0;
 
   uint32_t cached_has_bits = 0;
   // Prevent compiler warnings about cached_has_bits being unused
   (void) cached_has_bits;
 
-  // repeated .io.deephaven.proto.backplane.script.grpc.CompletionItem items = 1;
-  total_size += 1UL * this->_internal_items_size();
-  for (const auto& msg : this->items_) {
-    total_size +=
-      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(msg);
-  }
+  cached_has_bits = _has_bits_[0];
+  if (cached_has_bits & 0x00000003u) {
+    // optional string identifier = 2;
+    if (cached_has_bits & 0x00000001u) {
+      total_size += 1 +
+        ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
+          this->_internal_identifier());
+    }
 
-  // int32 request_id = 2;
-  if (this->_internal_request_id() != 0) {
-    total_size += ::_pbi::WireFormatLite::Int32SizePlusOne(this->_internal_request_id());
-  }
+    // optional string previous_result_id = 3;
+    if (cached_has_bits & 0x00000002u) {
+      total_size += 1 +
+        ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
+          this->_internal_previous_result_id());
+    }
 
-  // bool success = 3;
-  if (this->_internal_success() != 0) {
-    total_size += 1 + 1;
+  }
+  // .io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier text_document = 1;
+  if (this->_internal_has_text_document()) {
+    total_size += 1 +
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
+        *text_document_);
   }
 
   return MaybeComputeUnknownFieldsSize(total_size, &_cached_size_);
 }
 
-const ::PROTOBUF_NAMESPACE_ID::Message::ClassData GetCompletionItemsResponse::_class_data_ = {
+const ::PROTOBUF_NAMESPACE_ID::Message::ClassData GetDiagnosticRequest::_class_data_ = {
     ::PROTOBUF_NAMESPACE_ID::Message::CopyWithSizeCheck,
-    GetCompletionItemsResponse::MergeImpl
+    GetDiagnosticRequest::MergeImpl
 };
-const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetCompletionItemsResponse::GetClassData() const { return &_class_data_; }
+const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetDiagnosticRequest::GetClassData() const { return &_class_data_; }
 
-void GetCompletionItemsResponse::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to,
+void GetDiagnosticRequest::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to,
                       const ::PROTOBUF_NAMESPACE_ID::Message& from) {
-  static_cast<GetCompletionItemsResponse *>(to)->MergeFrom(
-      static_cast<const GetCompletionItemsResponse &>(from));
+  static_cast<GetDiagnosticRequest *>(to)->MergeFrom(
+      static_cast<const GetDiagnosticRequest &>(from));
 }
 
 
-void GetCompletionItemsResponse::MergeFrom(const GetCompletionItemsResponse& from) {
-// @@protoc_insertion_point(class_specific_merge_from_start:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsResponse)
+void GetDiagnosticRequest::MergeFrom(const GetDiagnosticRequest& from) {
+// @@protoc_insertion_point(class_specific_merge_from_start:io.deephaven.proto.backplane.script.grpc.GetDiagnosticRequest)
   GOOGLE_DCHECK_NE(&from, this);
   uint32_t cached_has_bits = 0;
   (void) cached_has_bits;
 
-  items_.MergeFrom(from.items_);
-  if (from._internal_request_id() != 0) {
-    _internal_set_request_id(from._internal_request_id());
+  cached_has_bits = from._has_bits_[0];
+  if (cached_has_bits & 0x00000003u) {
+    if (cached_has_bits & 0x00000001u) {
+      _internal_set_identifier(from._internal_identifier());
+    }
+    if (cached_has_bits & 0x00000002u) {
+      _internal_set_previous_result_id(from._internal_previous_result_id());
+    }
   }
-  if (from._internal_success() != 0) {
-    _internal_set_success(from._internal_success());
+  if (from._internal_has_text_document()) {
+    _internal_mutable_text_document()->::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier::MergeFrom(from._internal_text_document());
   }
   _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
 }
 
-void GetCompletionItemsResponse::CopyFrom(const GetCompletionItemsResponse& from) {
-// @@protoc_insertion_point(class_specific_copy_from_start:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsResponse)
+void GetDiagnosticRequest::CopyFrom(const GetDiagnosticRequest& from) {
+// @@protoc_insertion_point(class_specific_copy_from_start:io.deephaven.proto.backplane.script.grpc.GetDiagnosticRequest)
   if (&from == this) return;
   Clear();
   MergeFrom(from);
 }
 
-bool GetCompletionItemsResponse::IsInitialized() const {
+bool GetDiagnosticRequest::IsInitialized() const {
   return true;
 }
 
-void GetCompletionItemsResponse::InternalSwap(GetCompletionItemsResponse* other) {
+void GetDiagnosticRequest::InternalSwap(GetDiagnosticRequest* other) {
   using std::swap;
+  auto* lhs_arena = GetArenaForAllocation();
+  auto* rhs_arena = other->GetArenaForAllocation();
   _internal_metadata_.InternalSwap(&other->_internal_metadata_);
-  items_.InternalSwap(&other->items_);
-  ::PROTOBUF_NAMESPACE_ID::internal::memswap<
-      PROTOBUF_FIELD_OFFSET(GetCompletionItemsResponse, success_)
-      + sizeof(GetCompletionItemsResponse::success_)
-      - PROTOBUF_FIELD_OFFSET(GetCompletionItemsResponse, request_id_)>(
-          reinterpret_cast<char*>(&request_id_),
-          reinterpret_cast<char*>(&other->request_id_));
+  swap(_has_bits_[0], other->_has_bits_[0]);
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
+      &identifier_, lhs_arena,
+      &other->identifier_, rhs_arena
+  );
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
+      &previous_result_id_, lhs_arena,
+      &other->previous_result_id_, rhs_arena
+  );
+  swap(text_document_, other->text_document_);
 }
 
-::PROTOBUF_NAMESPACE_ID::Metadata GetCompletionItemsResponse::GetMetadata() const {
+::PROTOBUF_NAMESPACE_ID::Metadata GetDiagnosticRequest::GetMetadata() const {
   return ::_pbi::AssignDescriptors(
       &descriptor_table_deephaven_2fproto_2fconsole_2eproto_getter, &descriptor_table_deephaven_2fproto_2fconsole_2eproto_once,
-      file_level_metadata_deephaven_2fproto_2fconsole_2eproto[27]);
+      file_level_metadata_deephaven_2fproto_2fconsole_2eproto[40]);
 }
 
 // ===================================================================
 
-class CompletionItem::_Internal {
+class GetPullDiagnosticResponse::_Internal {
  public:
-  static const ::io::deephaven::proto::backplane::script::grpc::TextEdit& text_edit(const CompletionItem* msg);
+  using HasBits = decltype(std::declval<GetPullDiagnosticResponse>()._has_bits_);
+  static void set_has_result_id(HasBits* has_bits) {
+    (*has_bits)[0] |= 1u;
+  }
 };
 
-const ::io::deephaven::proto::backplane::script::grpc::TextEdit&
-CompletionItem::_Internal::text_edit(const CompletionItem* msg) {
-  return *msg->text_edit_;
-}
-CompletionItem::CompletionItem(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+GetPullDiagnosticResponse::GetPullDiagnosticResponse(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                          bool is_message_owned)
   : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned),
-  additional_text_edits_(arena),
-  commit_characters_(arena) {
+  items_(arena) {
   SharedCtor();
-  // @@protoc_insertion_point(arena_constructor:io.deephaven.proto.backplane.script.grpc.CompletionItem)
+  // @@protoc_insertion_point(arena_constructor:io.deephaven.proto.backplane.script.grpc.GetPullDiagnosticResponse)
 }
-CompletionItem::CompletionItem(const CompletionItem& from)
+GetPullDiagnosticResponse::GetPullDiagnosticResponse(const GetPullDiagnosticResponse& from)
   : ::PROTOBUF_NAMESPACE_ID::Message(),
-      additional_text_edits_(from.additional_text_edits_),
-      commit_characters_(from.commit_characters_) {
+      _has_bits_(from._has_bits_),
+      items_(from.items_) {
   _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
-  label_.InitDefault();
-  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
-    label_.Set("", GetArenaForAllocation());
-  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
-  if (!from._internal_label().empty()) {
-    label_.Set(from._internal_label(), 
-      GetArenaForAllocation());
-  }
-  detail_.InitDefault();
-  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
-    detail_.Set("", GetArenaForAllocation());
-  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
-  if (!from._internal_detail().empty()) {
-    detail_.Set(from._internal_detail(), 
-      GetArenaForAllocation());
-  }
-  documentation_.InitDefault();
-  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
-    documentation_.Set("", GetArenaForAllocation());
-  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
-  if (!from._internal_documentation().empty()) {
-    documentation_.Set(from._internal_documentation(), 
-      GetArenaForAllocation());
-  }
-  sort_text_.InitDefault();
-  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
-    sort_text_.Set("", GetArenaForAllocation());
-  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
-  if (!from._internal_sort_text().empty()) {
-    sort_text_.Set(from._internal_sort_text(), 
-      GetArenaForAllocation());
-  }
-  filter_text_.InitDefault();
+  kind_.InitDefault();
   #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
-    filter_text_.Set("", GetArenaForAllocation());
+    kind_.Set("", GetArenaForAllocation());
   #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
-  if (!from._internal_filter_text().empty()) {
-    filter_text_.Set(from._internal_filter_text(), 
+  if (!from._internal_kind().empty()) {
+    kind_.Set(from._internal_kind(), 
       GetArenaForAllocation());
-  }
-  if (from._internal_has_text_edit()) {
-    text_edit_ = new ::io::deephaven::proto::backplane::script::grpc::TextEdit(*from.text_edit_);
-  } else {
-    text_edit_ = nullptr;
-  }
-  ::memcpy(&start_, &from.start_,
-    static_cast<size_t>(reinterpret_cast<char*>(&insert_text_format_) -
-    reinterpret_cast<char*>(&start_)) + sizeof(insert_text_format_));
-  // @@protoc_insertion_point(copy_constructor:io.deephaven.proto.backplane.script.grpc.CompletionItem)
-}
-
-inline void CompletionItem::SharedCtor() {
-label_.InitDefault();
-#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
-  label_.Set("", GetArenaForAllocation());
-#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
-detail_.InitDefault();
-#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
-  detail_.Set("", GetArenaForAllocation());
-#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
-documentation_.InitDefault();
-#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
-  documentation_.Set("", GetArenaForAllocation());
-#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
-sort_text_.InitDefault();
+  }
+  result_id_.InitDefault();
+  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+    result_id_.Set("", GetArenaForAllocation());
+  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  if (from._internal_has_result_id()) {
+    result_id_.Set(from._internal_result_id(), 
+      GetArenaForAllocation());
+  }
+  // @@protoc_insertion_point(copy_constructor:io.deephaven.proto.backplane.script.grpc.GetPullDiagnosticResponse)
+}
+
+inline void GetPullDiagnosticResponse::SharedCtor() {
+kind_.InitDefault();
 #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
-  sort_text_.Set("", GetArenaForAllocation());
+  kind_.Set("", GetArenaForAllocation());
 #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
-filter_text_.InitDefault();
+result_id_.InitDefault();
 #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
-  filter_text_.Set("", GetArenaForAllocation());
+  result_id_.Set("", GetArenaForAllocation());
 #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
-::memset(reinterpret_cast<char*>(this) + static_cast<size_t>(
-    reinterpret_cast<char*>(&text_edit_) - reinterpret_cast<char*>(this)),
-    0, static_cast<size_t>(reinterpret_cast<char*>(&insert_text_format_) -
-    reinterpret_cast<char*>(&text_edit_)) + sizeof(insert_text_format_));
 }
 
-CompletionItem::~CompletionItem() {
-  // @@protoc_insertion_point(destructor:io.deephaven.proto.backplane.script.grpc.CompletionItem)
+GetPullDiagnosticResponse::~GetPullDiagnosticResponse() {
+  // @@protoc_insertion_point(destructor:io.deephaven.proto.backplane.script.grpc.GetPullDiagnosticResponse)
   if (auto *arena = _internal_metadata_.DeleteReturnArena<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>()) {
   (void)arena;
     return;
@@ -8000,180 +12599,343 @@ CompletionItem::~CompletionItem() {
   SharedDtor();
 }
 
-inline void CompletionItem::SharedDtor() {
+inline void GetPullDiagnosticResponse::SharedDtor() {
   GOOGLE_DCHECK(GetArenaForAllocation() == nullptr);
-  label_.Destroy();
-  detail_.Destroy();
-  documentation_.Destroy();
-  sort_text_.Destroy();
-  filter_text_.Destroy();
-  if (this != internal_default_instance()) delete text_edit_;
+  kind_.Destroy();
+  result_id_.Destroy();
 }
 
-void CompletionItem::SetCachedSize(int size) const {
+void GetPullDiagnosticResponse::SetCachedSize(int size) const {
   _cached_size_.Set(size);
 }
 
-void CompletionItem::Clear() {
-// @@protoc_insertion_point(message_clear_start:io.deephaven.proto.backplane.script.grpc.CompletionItem)
+void GetPullDiagnosticResponse::Clear() {
+// @@protoc_insertion_point(message_clear_start:io.deephaven.proto.backplane.script.grpc.GetPullDiagnosticResponse)
   uint32_t cached_has_bits = 0;
   // Prevent compiler warnings about cached_has_bits being unused
   (void) cached_has_bits;
 
-  additional_text_edits_.Clear();
-  commit_characters_.Clear();
-  label_.ClearToEmpty();
-  detail_.ClearToEmpty();
-  documentation_.ClearToEmpty();
-  sort_text_.ClearToEmpty();
-  filter_text_.ClearToEmpty();
-  if (GetArenaForAllocation() == nullptr && text_edit_ != nullptr) {
-    delete text_edit_;
+  items_.Clear();
+  kind_.ClearToEmpty();
+  cached_has_bits = _has_bits_[0];
+  if (cached_has_bits & 0x00000001u) {
+    result_id_.ClearNonDefaultToEmpty();
   }
-  text_edit_ = nullptr;
-  ::memset(&start_, 0, static_cast<size_t>(
-      reinterpret_cast<char*>(&insert_text_format_) -
-      reinterpret_cast<char*>(&start_)) + sizeof(insert_text_format_));
+  _has_bits_.Clear();
   _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
 }
 
-const char* CompletionItem::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) {
+const char* GetPullDiagnosticResponse::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) {
 #define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
+  _Internal::HasBits has_bits{};
   while (!ctx->Done(&ptr)) {
     uint32_t tag;
     ptr = ::_pbi::ReadTag(ptr, &tag);
     switch (tag >> 3) {
-      // int32 start = 1;
+      // string kind = 1;
       case 1:
-        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 8)) {
-          start_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
+        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 10)) {
+          auto str = _internal_mutable_kind();
+          ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
           CHK_(ptr);
+          CHK_(::_pbi::VerifyUTF8(str, "io.deephaven.proto.backplane.script.grpc.GetPullDiagnosticResponse.kind"));
         } else
           goto handle_unusual;
         continue;
-      // int32 length = 2;
+      // optional string result_id = 2;
       case 2:
-        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 16)) {
-          length_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
+        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 18)) {
+          auto str = _internal_mutable_result_id();
+          ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
           CHK_(ptr);
+          CHK_(::_pbi::VerifyUTF8(str, "io.deephaven.proto.backplane.script.grpc.GetPullDiagnosticResponse.result_id"));
         } else
           goto handle_unusual;
         continue;
-      // string label = 3;
+      // repeated .io.deephaven.proto.backplane.script.grpc.Diagnostic items = 3;
       case 3:
         if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 26)) {
-          auto str = _internal_mutable_label();
-          ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
-          CHK_(ptr);
-          CHK_(::_pbi::VerifyUTF8(str, "io.deephaven.proto.backplane.script.grpc.CompletionItem.label"));
-        } else
-          goto handle_unusual;
-        continue;
-      // int32 kind = 4;
-      case 4:
-        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 32)) {
-          kind_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
-          CHK_(ptr);
-        } else
-          goto handle_unusual;
-        continue;
-      // string detail = 5;
-      case 5:
-        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 42)) {
-          auto str = _internal_mutable_detail();
-          ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
-          CHK_(ptr);
-          CHK_(::_pbi::VerifyUTF8(str, "io.deephaven.proto.backplane.script.grpc.CompletionItem.detail"));
-        } else
-          goto handle_unusual;
-        continue;
-      // string documentation = 6;
-      case 6:
-        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 50)) {
-          auto str = _internal_mutable_documentation();
-          ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
-          CHK_(ptr);
-          CHK_(::_pbi::VerifyUTF8(str, "io.deephaven.proto.backplane.script.grpc.CompletionItem.documentation"));
-        } else
-          goto handle_unusual;
-        continue;
-      // bool deprecated = 7;
-      case 7:
-        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 56)) {
-          deprecated_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint64(&ptr);
-          CHK_(ptr);
-        } else
-          goto handle_unusual;
-        continue;
-      // bool preselect = 8;
-      case 8:
-        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 64)) {
-          preselect_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint64(&ptr);
-          CHK_(ptr);
-        } else
-          goto handle_unusual;
-        continue;
-      // .io.deephaven.proto.backplane.script.grpc.TextEdit text_edit = 9;
-      case 9:
-        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 74)) {
-          ptr = ctx->ParseMessage(_internal_mutable_text_edit(), ptr);
-          CHK_(ptr);
-        } else
-          goto handle_unusual;
-        continue;
-      // string sort_text = 10;
-      case 10:
-        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 82)) {
-          auto str = _internal_mutable_sort_text();
-          ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
-          CHK_(ptr);
-          CHK_(::_pbi::VerifyUTF8(str, "io.deephaven.proto.backplane.script.grpc.CompletionItem.sort_text"));
+          ptr -= 1;
+          do {
+            ptr += 1;
+            ptr = ctx->ParseMessage(_internal_add_items(), ptr);
+            CHK_(ptr);
+            if (!ctx->DataAvailable(ptr)) break;
+          } while (::PROTOBUF_NAMESPACE_ID::internal::ExpectTag<26>(ptr));
         } else
           goto handle_unusual;
         continue;
-      // string filter_text = 11;
-      case 11:
-        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 90)) {
-          auto str = _internal_mutable_filter_text();
+      default:
+        goto handle_unusual;
+    }  // switch
+  handle_unusual:
+    if ((tag == 0) || ((tag & 7) == 4)) {
+      CHK_(ptr);
+      ctx->SetLastTag(tag);
+      goto message_done;
+    }
+    ptr = UnknownFieldParse(
+        tag,
+        _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(),
+        ptr, ctx);
+    CHK_(ptr != nullptr);
+  }  // while
+message_done:
+  _has_bits_.Or(has_bits);
+  return ptr;
+failure:
+  ptr = nullptr;
+  goto message_done;
+#undef CHK_
+}
+
+uint8_t* GetPullDiagnosticResponse::_InternalSerialize(
+    uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const {
+  // @@protoc_insertion_point(serialize_to_array_start:io.deephaven.proto.backplane.script.grpc.GetPullDiagnosticResponse)
+  uint32_t cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  // string kind = 1;
+  if (!this->_internal_kind().empty()) {
+    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
+      this->_internal_kind().data(), static_cast<int>(this->_internal_kind().length()),
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
+      "io.deephaven.proto.backplane.script.grpc.GetPullDiagnosticResponse.kind");
+    target = stream->WriteStringMaybeAliased(
+        1, this->_internal_kind(), target);
+  }
+
+  // optional string result_id = 2;
+  if (_internal_has_result_id()) {
+    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
+      this->_internal_result_id().data(), static_cast<int>(this->_internal_result_id().length()),
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
+      "io.deephaven.proto.backplane.script.grpc.GetPullDiagnosticResponse.result_id");
+    target = stream->WriteStringMaybeAliased(
+        2, this->_internal_result_id(), target);
+  }
+
+  // repeated .io.deephaven.proto.backplane.script.grpc.Diagnostic items = 3;
+  for (unsigned i = 0,
+      n = static_cast<unsigned>(this->_internal_items_size()); i < n; i++) {
+    const auto& repfield = this->_internal_items(i);
+    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
+        InternalWriteMessage(3, repfield, repfield.GetCachedSize(), target, stream);
+  }
+
+  if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
+    target = ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray(
+        _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream);
+  }
+  // @@protoc_insertion_point(serialize_to_array_end:io.deephaven.proto.backplane.script.grpc.GetPullDiagnosticResponse)
+  return target;
+}
+
+size_t GetPullDiagnosticResponse::ByteSizeLong() const {
+// @@protoc_insertion_point(message_byte_size_start:io.deephaven.proto.backplane.script.grpc.GetPullDiagnosticResponse)
+  size_t total_size = 0;
+
+  uint32_t cached_has_bits = 0;
+  // Prevent compiler warnings about cached_has_bits being unused
+  (void) cached_has_bits;
+
+  // repeated .io.deephaven.proto.backplane.script.grpc.Diagnostic items = 3;
+  total_size += 1UL * this->_internal_items_size();
+  for (const auto& msg : this->items_) {
+    total_size +=
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(msg);
+  }
+
+  // string kind = 1;
+  if (!this->_internal_kind().empty()) {
+    total_size += 1 +
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
+        this->_internal_kind());
+  }
+
+  // optional string result_id = 2;
+  cached_has_bits = _has_bits_[0];
+  if (cached_has_bits & 0x00000001u) {
+    total_size += 1 +
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
+        this->_internal_result_id());
+  }
+
+  return MaybeComputeUnknownFieldsSize(total_size, &_cached_size_);
+}
+
+const ::PROTOBUF_NAMESPACE_ID::Message::ClassData GetPullDiagnosticResponse::_class_data_ = {
+    ::PROTOBUF_NAMESPACE_ID::Message::CopyWithSizeCheck,
+    GetPullDiagnosticResponse::MergeImpl
+};
+const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetPullDiagnosticResponse::GetClassData() const { return &_class_data_; }
+
+void GetPullDiagnosticResponse::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to,
+                      const ::PROTOBUF_NAMESPACE_ID::Message& from) {
+  static_cast<GetPullDiagnosticResponse *>(to)->MergeFrom(
+      static_cast<const GetPullDiagnosticResponse &>(from));
+}
+
+
+void GetPullDiagnosticResponse::MergeFrom(const GetPullDiagnosticResponse& from) {
+// @@protoc_insertion_point(class_specific_merge_from_start:io.deephaven.proto.backplane.script.grpc.GetPullDiagnosticResponse)
+  GOOGLE_DCHECK_NE(&from, this);
+  uint32_t cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  items_.MergeFrom(from.items_);
+  if (!from._internal_kind().empty()) {
+    _internal_set_kind(from._internal_kind());
+  }
+  if (from._internal_has_result_id()) {
+    _internal_set_result_id(from._internal_result_id());
+  }
+  _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
+}
+
+void GetPullDiagnosticResponse::CopyFrom(const GetPullDiagnosticResponse& from) {
+// @@protoc_insertion_point(class_specific_copy_from_start:io.deephaven.proto.backplane.script.grpc.GetPullDiagnosticResponse)
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+bool GetPullDiagnosticResponse::IsInitialized() const {
+  return true;
+}
+
+void GetPullDiagnosticResponse::InternalSwap(GetPullDiagnosticResponse* other) {
+  using std::swap;
+  auto* lhs_arena = GetArenaForAllocation();
+  auto* rhs_arena = other->GetArenaForAllocation();
+  _internal_metadata_.InternalSwap(&other->_internal_metadata_);
+  swap(_has_bits_[0], other->_has_bits_[0]);
+  items_.InternalSwap(&other->items_);
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
+      &kind_, lhs_arena,
+      &other->kind_, rhs_arena
+  );
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
+      &result_id_, lhs_arena,
+      &other->result_id_, rhs_arena
+  );
+}
+
+::PROTOBUF_NAMESPACE_ID::Metadata GetPullDiagnosticResponse::GetMetadata() const {
+  return ::_pbi::AssignDescriptors(
+      &descriptor_table_deephaven_2fproto_2fconsole_2eproto_getter, &descriptor_table_deephaven_2fproto_2fconsole_2eproto_once,
+      file_level_metadata_deephaven_2fproto_2fconsole_2eproto[41]);
+}
+
+// ===================================================================
+
+class GetPublishDiagnosticResponse::_Internal {
+ public:
+  using HasBits = decltype(std::declval<GetPublishDiagnosticResponse>()._has_bits_);
+  static void set_has_version(HasBits* has_bits) {
+    (*has_bits)[0] |= 1u;
+  }
+};
+
+GetPublishDiagnosticResponse::GetPublishDiagnosticResponse(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+                         bool is_message_owned)
+  : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned),
+  diagnostics_(arena) {
+  SharedCtor();
+  // @@protoc_insertion_point(arena_constructor:io.deephaven.proto.backplane.script.grpc.GetPublishDiagnosticResponse)
+}
+GetPublishDiagnosticResponse::GetPublishDiagnosticResponse(const GetPublishDiagnosticResponse& from)
+  : ::PROTOBUF_NAMESPACE_ID::Message(),
+      _has_bits_(from._has_bits_),
+      diagnostics_(from.diagnostics_) {
+  _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
+  uri_.InitDefault();
+  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+    uri_.Set("", GetArenaForAllocation());
+  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  if (!from._internal_uri().empty()) {
+    uri_.Set(from._internal_uri(), 
+      GetArenaForAllocation());
+  }
+  version_ = from.version_;
+  // @@protoc_insertion_point(copy_constructor:io.deephaven.proto.backplane.script.grpc.GetPublishDiagnosticResponse)
+}
+
+inline void GetPublishDiagnosticResponse::SharedCtor() {
+uri_.InitDefault();
+#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  uri_.Set("", GetArenaForAllocation());
+#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+version_ = 0;
+}
+
+GetPublishDiagnosticResponse::~GetPublishDiagnosticResponse() {
+  // @@protoc_insertion_point(destructor:io.deephaven.proto.backplane.script.grpc.GetPublishDiagnosticResponse)
+  if (auto *arena = _internal_metadata_.DeleteReturnArena<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>()) {
+  (void)arena;
+    return;
+  }
+  SharedDtor();
+}
+
+inline void GetPublishDiagnosticResponse::SharedDtor() {
+  GOOGLE_DCHECK(GetArenaForAllocation() == nullptr);
+  uri_.Destroy();
+}
+
+void GetPublishDiagnosticResponse::SetCachedSize(int size) const {
+  _cached_size_.Set(size);
+}
+
+void GetPublishDiagnosticResponse::Clear() {
+// @@protoc_insertion_point(message_clear_start:io.deephaven.proto.backplane.script.grpc.GetPublishDiagnosticResponse)
+  uint32_t cached_has_bits = 0;
+  // Prevent compiler warnings about cached_has_bits being unused
+  (void) cached_has_bits;
+
+  diagnostics_.Clear();
+  uri_.ClearToEmpty();
+  version_ = 0;
+  _has_bits_.Clear();
+  _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
+}
+
+const char* GetPublishDiagnosticResponse::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) {
+#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
+  _Internal::HasBits has_bits{};
+  while (!ctx->Done(&ptr)) {
+    uint32_t tag;
+    ptr = ::_pbi::ReadTag(ptr, &tag);
+    switch (tag >> 3) {
+      // string uri = 1;
+      case 1:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 10)) {
+          auto str = _internal_mutable_uri();
           ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
           CHK_(ptr);
-          CHK_(::_pbi::VerifyUTF8(str, "io.deephaven.proto.backplane.script.grpc.CompletionItem.filter_text"));
+          CHK_(::_pbi::VerifyUTF8(str, "io.deephaven.proto.backplane.script.grpc.GetPublishDiagnosticResponse.uri"));
         } else
           goto handle_unusual;
         continue;
-      // int32 insert_text_format = 12;
-      case 12:
-        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 96)) {
-          insert_text_format_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
+      // optional int32 version = 2;
+      case 2:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 16)) {
+          _Internal::set_has_version(&has_bits);
+          version_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
           CHK_(ptr);
         } else
           goto handle_unusual;
         continue;
-      // repeated .io.deephaven.proto.backplane.script.grpc.TextEdit additional_text_edits = 13;
-      case 13:
-        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 106)) {
-          ptr -= 1;
-          do {
-            ptr += 1;
-            ptr = ctx->ParseMessage(_internal_add_additional_text_edits(), ptr);
-            CHK_(ptr);
-            if (!ctx->DataAvailable(ptr)) break;
-          } while (::PROTOBUF_NAMESPACE_ID::internal::ExpectTag<106>(ptr));
-        } else
-          goto handle_unusual;
-        continue;
-      // repeated string commit_characters = 14;
-      case 14:
-        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 114)) {
+      // repeated .io.deephaven.proto.backplane.script.grpc.Diagnostic diagnostics = 3;
+      case 3:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 26)) {
           ptr -= 1;
           do {
             ptr += 1;
-            auto str = _internal_add_commit_characters();
-            ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
+            ptr = ctx->ParseMessage(_internal_add_diagnostics(), ptr);
             CHK_(ptr);
-            CHK_(::_pbi::VerifyUTF8(str, "io.deephaven.proto.backplane.script.grpc.CompletionItem.commit_characters"));
             if (!ctx->DataAvailable(ptr)) break;
-          } while (::PROTOBUF_NAMESPACE_ID::internal::ExpectTag<114>(ptr));
+          } while (::PROTOBUF_NAMESPACE_ID::internal::ExpectTag<26>(ptr));
         } else
           goto handle_unusual;
         continue;
@@ -8193,6 +12955,7 @@ const char* CompletionItem::_InternalParse(const char* ptr, ::_pbi::ParseContext
     CHK_(ptr != nullptr);
   }  // while
 message_done:
+  _has_bits_.Or(has_bits);
   return ptr;
 failure:
   ptr = nullptr;
@@ -8200,367 +12963,401 @@ const char* CompletionItem::_InternalParse(const char* ptr, ::_pbi::ParseContext
 #undef CHK_
 }
 
-uint8_t* CompletionItem::_InternalSerialize(
+uint8_t* GetPublishDiagnosticResponse::_InternalSerialize(
     uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const {
-  // @@protoc_insertion_point(serialize_to_array_start:io.deephaven.proto.backplane.script.grpc.CompletionItem)
+  // @@protoc_insertion_point(serialize_to_array_start:io.deephaven.proto.backplane.script.grpc.GetPublishDiagnosticResponse)
   uint32_t cached_has_bits = 0;
   (void) cached_has_bits;
 
-  // int32 start = 1;
-  if (this->_internal_start() != 0) {
-    target = stream->EnsureSpace(target);
-    target = ::_pbi::WireFormatLite::WriteInt32ToArray(1, this->_internal_start(), target);
+  // string uri = 1;
+  if (!this->_internal_uri().empty()) {
+    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
+      this->_internal_uri().data(), static_cast<int>(this->_internal_uri().length()),
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
+      "io.deephaven.proto.backplane.script.grpc.GetPublishDiagnosticResponse.uri");
+    target = stream->WriteStringMaybeAliased(
+        1, this->_internal_uri(), target);
   }
 
-  // int32 length = 2;
-  if (this->_internal_length() != 0) {
+  // optional int32 version = 2;
+  if (_internal_has_version()) {
     target = stream->EnsureSpace(target);
-    target = ::_pbi::WireFormatLite::WriteInt32ToArray(2, this->_internal_length(), target);
+    target = ::_pbi::WireFormatLite::WriteInt32ToArray(2, this->_internal_version(), target);
   }
 
-  // string label = 3;
-  if (!this->_internal_label().empty()) {
-    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
-      this->_internal_label().data(), static_cast<int>(this->_internal_label().length()),
-      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
-      "io.deephaven.proto.backplane.script.grpc.CompletionItem.label");
-    target = stream->WriteStringMaybeAliased(
-        3, this->_internal_label(), target);
+  // repeated .io.deephaven.proto.backplane.script.grpc.Diagnostic diagnostics = 3;
+  for (unsigned i = 0,
+      n = static_cast<unsigned>(this->_internal_diagnostics_size()); i < n; i++) {
+    const auto& repfield = this->_internal_diagnostics(i);
+    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
+        InternalWriteMessage(3, repfield, repfield.GetCachedSize(), target, stream);
   }
 
-  // int32 kind = 4;
-  if (this->_internal_kind() != 0) {
-    target = stream->EnsureSpace(target);
-    target = ::_pbi::WireFormatLite::WriteInt32ToArray(4, this->_internal_kind(), target);
+  if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
+    target = ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray(
+        _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream);
   }
+  // @@protoc_insertion_point(serialize_to_array_end:io.deephaven.proto.backplane.script.grpc.GetPublishDiagnosticResponse)
+  return target;
+}
 
-  // string detail = 5;
-  if (!this->_internal_detail().empty()) {
-    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
-      this->_internal_detail().data(), static_cast<int>(this->_internal_detail().length()),
-      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
-      "io.deephaven.proto.backplane.script.grpc.CompletionItem.detail");
-    target = stream->WriteStringMaybeAliased(
-        5, this->_internal_detail(), target);
+size_t GetPublishDiagnosticResponse::ByteSizeLong() const {
+// @@protoc_insertion_point(message_byte_size_start:io.deephaven.proto.backplane.script.grpc.GetPublishDiagnosticResponse)
+  size_t total_size = 0;
+
+  uint32_t cached_has_bits = 0;
+  // Prevent compiler warnings about cached_has_bits being unused
+  (void) cached_has_bits;
+
+  // repeated .io.deephaven.proto.backplane.script.grpc.Diagnostic diagnostics = 3;
+  total_size += 1UL * this->_internal_diagnostics_size();
+  for (const auto& msg : this->diagnostics_) {
+    total_size +=
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(msg);
   }
 
-  // string documentation = 6;
-  if (!this->_internal_documentation().empty()) {
-    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
-      this->_internal_documentation().data(), static_cast<int>(this->_internal_documentation().length()),
-      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
-      "io.deephaven.proto.backplane.script.grpc.CompletionItem.documentation");
-    target = stream->WriteStringMaybeAliased(
-        6, this->_internal_documentation(), target);
+  // string uri = 1;
+  if (!this->_internal_uri().empty()) {
+    total_size += 1 +
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
+        this->_internal_uri());
   }
 
-  // bool deprecated = 7;
-  if (this->_internal_deprecated() != 0) {
-    target = stream->EnsureSpace(target);
-    target = ::_pbi::WireFormatLite::WriteBoolToArray(7, this->_internal_deprecated(), target);
+  // optional int32 version = 2;
+  cached_has_bits = _has_bits_[0];
+  if (cached_has_bits & 0x00000001u) {
+    total_size += ::_pbi::WireFormatLite::Int32SizePlusOne(this->_internal_version());
   }
 
-  // bool preselect = 8;
-  if (this->_internal_preselect() != 0) {
-    target = stream->EnsureSpace(target);
-    target = ::_pbi::WireFormatLite::WriteBoolToArray(8, this->_internal_preselect(), target);
+  return MaybeComputeUnknownFieldsSize(total_size, &_cached_size_);
+}
+
+const ::PROTOBUF_NAMESPACE_ID::Message::ClassData GetPublishDiagnosticResponse::_class_data_ = {
+    ::PROTOBUF_NAMESPACE_ID::Message::CopyWithSizeCheck,
+    GetPublishDiagnosticResponse::MergeImpl
+};
+const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetPublishDiagnosticResponse::GetClassData() const { return &_class_data_; }
+
+void GetPublishDiagnosticResponse::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to,
+                      const ::PROTOBUF_NAMESPACE_ID::Message& from) {
+  static_cast<GetPublishDiagnosticResponse *>(to)->MergeFrom(
+      static_cast<const GetPublishDiagnosticResponse &>(from));
+}
+
+
+void GetPublishDiagnosticResponse::MergeFrom(const GetPublishDiagnosticResponse& from) {
+// @@protoc_insertion_point(class_specific_merge_from_start:io.deephaven.proto.backplane.script.grpc.GetPublishDiagnosticResponse)
+  GOOGLE_DCHECK_NE(&from, this);
+  uint32_t cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  diagnostics_.MergeFrom(from.diagnostics_);
+  if (!from._internal_uri().empty()) {
+    _internal_set_uri(from._internal_uri());
   }
+  if (from._internal_has_version()) {
+    _internal_set_version(from._internal_version());
+  }
+  _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
+}
 
-  // .io.deephaven.proto.backplane.script.grpc.TextEdit text_edit = 9;
-  if (this->_internal_has_text_edit()) {
-    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
-      InternalWriteMessage(9, _Internal::text_edit(this),
-        _Internal::text_edit(this).GetCachedSize(), target, stream);
+void GetPublishDiagnosticResponse::CopyFrom(const GetPublishDiagnosticResponse& from) {
+// @@protoc_insertion_point(class_specific_copy_from_start:io.deephaven.proto.backplane.script.grpc.GetPublishDiagnosticResponse)
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+bool GetPublishDiagnosticResponse::IsInitialized() const {
+  return true;
+}
+
+void GetPublishDiagnosticResponse::InternalSwap(GetPublishDiagnosticResponse* other) {
+  using std::swap;
+  auto* lhs_arena = GetArenaForAllocation();
+  auto* rhs_arena = other->GetArenaForAllocation();
+  _internal_metadata_.InternalSwap(&other->_internal_metadata_);
+  swap(_has_bits_[0], other->_has_bits_[0]);
+  diagnostics_.InternalSwap(&other->diagnostics_);
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
+      &uri_, lhs_arena,
+      &other->uri_, rhs_arena
+  );
+  swap(version_, other->version_);
+}
+
+::PROTOBUF_NAMESPACE_ID::Metadata GetPublishDiagnosticResponse::GetMetadata() const {
+  return ::_pbi::AssignDescriptors(
+      &descriptor_table_deephaven_2fproto_2fconsole_2eproto_getter, &descriptor_table_deephaven_2fproto_2fconsole_2eproto_once,
+      file_level_metadata_deephaven_2fproto_2fconsole_2eproto[42]);
+}
+
+// ===================================================================
+
+class Diagnostic_CodeDescription::_Internal {
+ public:
+};
+
+Diagnostic_CodeDescription::Diagnostic_CodeDescription(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+                         bool is_message_owned)
+  : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned) {
+  SharedCtor();
+  // @@protoc_insertion_point(arena_constructor:io.deephaven.proto.backplane.script.grpc.Diagnostic.CodeDescription)
+}
+Diagnostic_CodeDescription::Diagnostic_CodeDescription(const Diagnostic_CodeDescription& from)
+  : ::PROTOBUF_NAMESPACE_ID::Message() {
+  _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
+  href_.InitDefault();
+  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+    href_.Set("", GetArenaForAllocation());
+  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  if (!from._internal_href().empty()) {
+    href_.Set(from._internal_href(), 
+      GetArenaForAllocation());
   }
+  // @@protoc_insertion_point(copy_constructor:io.deephaven.proto.backplane.script.grpc.Diagnostic.CodeDescription)
+}
 
-  // string sort_text = 10;
-  if (!this->_internal_sort_text().empty()) {
-    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
-      this->_internal_sort_text().data(), static_cast<int>(this->_internal_sort_text().length()),
-      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
-      "io.deephaven.proto.backplane.script.grpc.CompletionItem.sort_text");
-    target = stream->WriteStringMaybeAliased(
-        10, this->_internal_sort_text(), target);
+inline void Diagnostic_CodeDescription::SharedCtor() {
+href_.InitDefault();
+#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  href_.Set("", GetArenaForAllocation());
+#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+}
+
+Diagnostic_CodeDescription::~Diagnostic_CodeDescription() {
+  // @@protoc_insertion_point(destructor:io.deephaven.proto.backplane.script.grpc.Diagnostic.CodeDescription)
+  if (auto *arena = _internal_metadata_.DeleteReturnArena<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>()) {
+  (void)arena;
+    return;
   }
+  SharedDtor();
+}
+
+inline void Diagnostic_CodeDescription::SharedDtor() {
+  GOOGLE_DCHECK(GetArenaForAllocation() == nullptr);
+  href_.Destroy();
+}
+
+void Diagnostic_CodeDescription::SetCachedSize(int size) const {
+  _cached_size_.Set(size);
+}
+
+void Diagnostic_CodeDescription::Clear() {
+// @@protoc_insertion_point(message_clear_start:io.deephaven.proto.backplane.script.grpc.Diagnostic.CodeDescription)
+  uint32_t cached_has_bits = 0;
+  // Prevent compiler warnings about cached_has_bits being unused
+  (void) cached_has_bits;
 
-  // string filter_text = 11;
-  if (!this->_internal_filter_text().empty()) {
-    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
-      this->_internal_filter_text().data(), static_cast<int>(this->_internal_filter_text().length()),
-      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
-      "io.deephaven.proto.backplane.script.grpc.CompletionItem.filter_text");
-    target = stream->WriteStringMaybeAliased(
-        11, this->_internal_filter_text(), target);
-  }
+  href_.ClearToEmpty();
+  _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
+}
 
-  // int32 insert_text_format = 12;
-  if (this->_internal_insert_text_format() != 0) {
-    target = stream->EnsureSpace(target);
-    target = ::_pbi::WireFormatLite::WriteInt32ToArray(12, this->_internal_insert_text_format(), target);
-  }
+const char* Diagnostic_CodeDescription::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) {
+#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
+  while (!ctx->Done(&ptr)) {
+    uint32_t tag;
+    ptr = ::_pbi::ReadTag(ptr, &tag);
+    switch (tag >> 3) {
+      // string href = 1;
+      case 1:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 10)) {
+          auto str = _internal_mutable_href();
+          ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
+          CHK_(ptr);
+          CHK_(::_pbi::VerifyUTF8(str, "io.deephaven.proto.backplane.script.grpc.Diagnostic.CodeDescription.href"));
+        } else
+          goto handle_unusual;
+        continue;
+      default:
+        goto handle_unusual;
+    }  // switch
+  handle_unusual:
+    if ((tag == 0) || ((tag & 7) == 4)) {
+      CHK_(ptr);
+      ctx->SetLastTag(tag);
+      goto message_done;
+    }
+    ptr = UnknownFieldParse(
+        tag,
+        _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(),
+        ptr, ctx);
+    CHK_(ptr != nullptr);
+  }  // while
+message_done:
+  return ptr;
+failure:
+  ptr = nullptr;
+  goto message_done;
+#undef CHK_
+}
 
-  // repeated .io.deephaven.proto.backplane.script.grpc.TextEdit additional_text_edits = 13;
-  for (unsigned i = 0,
-      n = static_cast<unsigned>(this->_internal_additional_text_edits_size()); i < n; i++) {
-    const auto& repfield = this->_internal_additional_text_edits(i);
-    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
-        InternalWriteMessage(13, repfield, repfield.GetCachedSize(), target, stream);
-  }
+uint8_t* Diagnostic_CodeDescription::_InternalSerialize(
+    uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const {
+  // @@protoc_insertion_point(serialize_to_array_start:io.deephaven.proto.backplane.script.grpc.Diagnostic.CodeDescription)
+  uint32_t cached_has_bits = 0;
+  (void) cached_has_bits;
 
-  // repeated string commit_characters = 14;
-  for (int i = 0, n = this->_internal_commit_characters_size(); i < n; i++) {
-    const auto& s = this->_internal_commit_characters(i);
+  // string href = 1;
+  if (!this->_internal_href().empty()) {
     ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
-      s.data(), static_cast<int>(s.length()),
+      this->_internal_href().data(), static_cast<int>(this->_internal_href().length()),
       ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
-      "io.deephaven.proto.backplane.script.grpc.CompletionItem.commit_characters");
-    target = stream->WriteString(14, s, target);
+      "io.deephaven.proto.backplane.script.grpc.Diagnostic.CodeDescription.href");
+    target = stream->WriteStringMaybeAliased(
+        1, this->_internal_href(), target);
   }
 
   if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
     target = ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray(
         _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream);
   }
-  // @@protoc_insertion_point(serialize_to_array_end:io.deephaven.proto.backplane.script.grpc.CompletionItem)
+  // @@protoc_insertion_point(serialize_to_array_end:io.deephaven.proto.backplane.script.grpc.Diagnostic.CodeDescription)
   return target;
 }
 
-size_t CompletionItem::ByteSizeLong() const {
-// @@protoc_insertion_point(message_byte_size_start:io.deephaven.proto.backplane.script.grpc.CompletionItem)
+size_t Diagnostic_CodeDescription::ByteSizeLong() const {
+// @@protoc_insertion_point(message_byte_size_start:io.deephaven.proto.backplane.script.grpc.Diagnostic.CodeDescription)
   size_t total_size = 0;
 
   uint32_t cached_has_bits = 0;
   // Prevent compiler warnings about cached_has_bits being unused
   (void) cached_has_bits;
 
-  // repeated .io.deephaven.proto.backplane.script.grpc.TextEdit additional_text_edits = 13;
-  total_size += 1UL * this->_internal_additional_text_edits_size();
-  for (const auto& msg : this->additional_text_edits_) {
-    total_size +=
-      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(msg);
-  }
-
-  // repeated string commit_characters = 14;
-  total_size += 1 *
-      ::PROTOBUF_NAMESPACE_ID::internal::FromIntSize(commit_characters_.size());
-  for (int i = 0, n = commit_characters_.size(); i < n; i++) {
-    total_size += ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
-      commit_characters_.Get(i));
-  }
-
-  // string label = 3;
-  if (!this->_internal_label().empty()) {
-    total_size += 1 +
-      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
-        this->_internal_label());
-  }
-
-  // string detail = 5;
-  if (!this->_internal_detail().empty()) {
-    total_size += 1 +
-      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
-        this->_internal_detail());
-  }
-
-  // string documentation = 6;
-  if (!this->_internal_documentation().empty()) {
-    total_size += 1 +
-      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
-        this->_internal_documentation());
-  }
-
-  // string sort_text = 10;
-  if (!this->_internal_sort_text().empty()) {
-    total_size += 1 +
-      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
-        this->_internal_sort_text());
-  }
-
-  // string filter_text = 11;
-  if (!this->_internal_filter_text().empty()) {
+  // string href = 1;
+  if (!this->_internal_href().empty()) {
     total_size += 1 +
       ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
-        this->_internal_filter_text());
-  }
-
-  // .io.deephaven.proto.backplane.script.grpc.TextEdit text_edit = 9;
-  if (this->_internal_has_text_edit()) {
-    total_size += 1 +
-      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
-        *text_edit_);
-  }
-
-  // int32 start = 1;
-  if (this->_internal_start() != 0) {
-    total_size += ::_pbi::WireFormatLite::Int32SizePlusOne(this->_internal_start());
-  }
-
-  // int32 length = 2;
-  if (this->_internal_length() != 0) {
-    total_size += ::_pbi::WireFormatLite::Int32SizePlusOne(this->_internal_length());
-  }
-
-  // int32 kind = 4;
-  if (this->_internal_kind() != 0) {
-    total_size += ::_pbi::WireFormatLite::Int32SizePlusOne(this->_internal_kind());
-  }
-
-  // bool deprecated = 7;
-  if (this->_internal_deprecated() != 0) {
-    total_size += 1 + 1;
-  }
-
-  // bool preselect = 8;
-  if (this->_internal_preselect() != 0) {
-    total_size += 1 + 1;
-  }
-
-  // int32 insert_text_format = 12;
-  if (this->_internal_insert_text_format() != 0) {
-    total_size += ::_pbi::WireFormatLite::Int32SizePlusOne(this->_internal_insert_text_format());
+        this->_internal_href());
   }
 
   return MaybeComputeUnknownFieldsSize(total_size, &_cached_size_);
 }
 
-const ::PROTOBUF_NAMESPACE_ID::Message::ClassData CompletionItem::_class_data_ = {
+const ::PROTOBUF_NAMESPACE_ID::Message::ClassData Diagnostic_CodeDescription::_class_data_ = {
     ::PROTOBUF_NAMESPACE_ID::Message::CopyWithSizeCheck,
-    CompletionItem::MergeImpl
+    Diagnostic_CodeDescription::MergeImpl
 };
-const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*CompletionItem::GetClassData() const { return &_class_data_; }
+const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*Diagnostic_CodeDescription::GetClassData() const { return &_class_data_; }
 
-void CompletionItem::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to,
+void Diagnostic_CodeDescription::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to,
                       const ::PROTOBUF_NAMESPACE_ID::Message& from) {
-  static_cast<CompletionItem *>(to)->MergeFrom(
-      static_cast<const CompletionItem &>(from));
+  static_cast<Diagnostic_CodeDescription *>(to)->MergeFrom(
+      static_cast<const Diagnostic_CodeDescription &>(from));
 }
 
 
-void CompletionItem::MergeFrom(const CompletionItem& from) {
-// @@protoc_insertion_point(class_specific_merge_from_start:io.deephaven.proto.backplane.script.grpc.CompletionItem)
+void Diagnostic_CodeDescription::MergeFrom(const Diagnostic_CodeDescription& from) {
+// @@protoc_insertion_point(class_specific_merge_from_start:io.deephaven.proto.backplane.script.grpc.Diagnostic.CodeDescription)
   GOOGLE_DCHECK_NE(&from, this);
   uint32_t cached_has_bits = 0;
   (void) cached_has_bits;
 
-  additional_text_edits_.MergeFrom(from.additional_text_edits_);
-  commit_characters_.MergeFrom(from.commit_characters_);
-  if (!from._internal_label().empty()) {
-    _internal_set_label(from._internal_label());
-  }
-  if (!from._internal_detail().empty()) {
-    _internal_set_detail(from._internal_detail());
-  }
-  if (!from._internal_documentation().empty()) {
-    _internal_set_documentation(from._internal_documentation());
-  }
-  if (!from._internal_sort_text().empty()) {
-    _internal_set_sort_text(from._internal_sort_text());
-  }
-  if (!from._internal_filter_text().empty()) {
-    _internal_set_filter_text(from._internal_filter_text());
-  }
-  if (from._internal_has_text_edit()) {
-    _internal_mutable_text_edit()->::io::deephaven::proto::backplane::script::grpc::TextEdit::MergeFrom(from._internal_text_edit());
-  }
-  if (from._internal_start() != 0) {
-    _internal_set_start(from._internal_start());
-  }
-  if (from._internal_length() != 0) {
-    _internal_set_length(from._internal_length());
-  }
-  if (from._internal_kind() != 0) {
-    _internal_set_kind(from._internal_kind());
-  }
-  if (from._internal_deprecated() != 0) {
-    _internal_set_deprecated(from._internal_deprecated());
-  }
-  if (from._internal_preselect() != 0) {
-    _internal_set_preselect(from._internal_preselect());
-  }
-  if (from._internal_insert_text_format() != 0) {
-    _internal_set_insert_text_format(from._internal_insert_text_format());
+  if (!from._internal_href().empty()) {
+    _internal_set_href(from._internal_href());
   }
   _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
 }
 
-void CompletionItem::CopyFrom(const CompletionItem& from) {
-// @@protoc_insertion_point(class_specific_copy_from_start:io.deephaven.proto.backplane.script.grpc.CompletionItem)
+void Diagnostic_CodeDescription::CopyFrom(const Diagnostic_CodeDescription& from) {
+// @@protoc_insertion_point(class_specific_copy_from_start:io.deephaven.proto.backplane.script.grpc.Diagnostic.CodeDescription)
   if (&from == this) return;
   Clear();
   MergeFrom(from);
 }
 
-bool CompletionItem::IsInitialized() const {
+bool Diagnostic_CodeDescription::IsInitialized() const {
   return true;
 }
 
-void CompletionItem::InternalSwap(CompletionItem* other) {
+void Diagnostic_CodeDescription::InternalSwap(Diagnostic_CodeDescription* other) {
   using std::swap;
   auto* lhs_arena = GetArenaForAllocation();
   auto* rhs_arena = other->GetArenaForAllocation();
   _internal_metadata_.InternalSwap(&other->_internal_metadata_);
-  additional_text_edits_.InternalSwap(&other->additional_text_edits_);
-  commit_characters_.InternalSwap(&other->commit_characters_);
-  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
-      &label_, lhs_arena,
-      &other->label_, rhs_arena
-  );
-  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
-      &detail_, lhs_arena,
-      &other->detail_, rhs_arena
-  );
-  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
-      &documentation_, lhs_arena,
-      &other->documentation_, rhs_arena
-  );
-  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
-      &sort_text_, lhs_arena,
-      &other->sort_text_, rhs_arena
-  );
   ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
-      &filter_text_, lhs_arena,
-      &other->filter_text_, rhs_arena
+      &href_, lhs_arena,
+      &other->href_, rhs_arena
   );
-  ::PROTOBUF_NAMESPACE_ID::internal::memswap<
-      PROTOBUF_FIELD_OFFSET(CompletionItem, insert_text_format_)
-      + sizeof(CompletionItem::insert_text_format_)
-      - PROTOBUF_FIELD_OFFSET(CompletionItem, text_edit_)>(
-          reinterpret_cast<char*>(&text_edit_),
-          reinterpret_cast<char*>(&other->text_edit_));
 }
 
-::PROTOBUF_NAMESPACE_ID::Metadata CompletionItem::GetMetadata() const {
+::PROTOBUF_NAMESPACE_ID::Metadata Diagnostic_CodeDescription::GetMetadata() const {
   return ::_pbi::AssignDescriptors(
       &descriptor_table_deephaven_2fproto_2fconsole_2eproto_getter, &descriptor_table_deephaven_2fproto_2fconsole_2eproto_once,
-      file_level_metadata_deephaven_2fproto_2fconsole_2eproto[28]);
+      file_level_metadata_deephaven_2fproto_2fconsole_2eproto[43]);
 }
 
 // ===================================================================
 
-class TextEdit::_Internal {
+class Diagnostic::_Internal {
  public:
-  static const ::io::deephaven::proto::backplane::script::grpc::DocumentRange& range(const TextEdit* msg);
+  using HasBits = decltype(std::declval<Diagnostic>()._has_bits_);
+  static const ::io::deephaven::proto::backplane::script::grpc::DocumentRange& range(const Diagnostic* msg);
+  static void set_has_code(HasBits* has_bits) {
+    (*has_bits)[0] |= 1u;
+  }
+  static const ::io::deephaven::proto::backplane::script::grpc::Diagnostic_CodeDescription& code_description(const Diagnostic* msg);
+  static void set_has_code_description(HasBits* has_bits) {
+    (*has_bits)[0] |= 8u;
+  }
+  static void set_has_source(HasBits* has_bits) {
+    (*has_bits)[0] |= 2u;
+  }
+  static void set_has_data(HasBits* has_bits) {
+    (*has_bits)[0] |= 4u;
+  }
 };
 
 const ::io::deephaven::proto::backplane::script::grpc::DocumentRange&
-TextEdit::_Internal::range(const TextEdit* msg) {
+Diagnostic::_Internal::range(const Diagnostic* msg) {
   return *msg->range_;
 }
-TextEdit::TextEdit(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+const ::io::deephaven::proto::backplane::script::grpc::Diagnostic_CodeDescription&
+Diagnostic::_Internal::code_description(const Diagnostic* msg) {
+  return *msg->code_description_;
+}
+Diagnostic::Diagnostic(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                          bool is_message_owned)
-  : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned) {
+  : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned),
+  tags_(arena) {
   SharedCtor();
-  // @@protoc_insertion_point(arena_constructor:io.deephaven.proto.backplane.script.grpc.TextEdit)
+  // @@protoc_insertion_point(arena_constructor:io.deephaven.proto.backplane.script.grpc.Diagnostic)
 }
-TextEdit::TextEdit(const TextEdit& from)
-  : ::PROTOBUF_NAMESPACE_ID::Message() {
+Diagnostic::Diagnostic(const Diagnostic& from)
+  : ::PROTOBUF_NAMESPACE_ID::Message(),
+      _has_bits_(from._has_bits_),
+      tags_(from.tags_) {
   _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
-  text_.InitDefault();
+  code_.InitDefault();
+  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+    code_.Set("", GetArenaForAllocation());
+  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  if (from._internal_has_code()) {
+    code_.Set(from._internal_code(), 
+      GetArenaForAllocation());
+  }
+  source_.InitDefault();
+  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+    source_.Set("", GetArenaForAllocation());
+  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  if (from._internal_has_source()) {
+    source_.Set(from._internal_source(), 
+      GetArenaForAllocation());
+  }
+  message_.InitDefault();
   #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
-    text_.Set("", GetArenaForAllocation());
+    message_.Set("", GetArenaForAllocation());
   #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
-  if (!from._internal_text().empty()) {
-    text_.Set(from._internal_text(), 
+  if (!from._internal_message().empty()) {
+    message_.Set(from._internal_message(), 
+      GetArenaForAllocation());
+  }
+  data_.InitDefault();
+  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+    data_.Set("", GetArenaForAllocation());
+  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  if (from._internal_has_data()) {
+    data_.Set(from._internal_data(), 
       GetArenaForAllocation());
   }
   if (from._internal_has_range()) {
@@ -8568,19 +13365,40 @@ TextEdit::TextEdit(const TextEdit& from)
   } else {
     range_ = nullptr;
   }
-  // @@protoc_insertion_point(copy_constructor:io.deephaven.proto.backplane.script.grpc.TextEdit)
+  if (from._internal_has_code_description()) {
+    code_description_ = new ::io::deephaven::proto::backplane::script::grpc::Diagnostic_CodeDescription(*from.code_description_);
+  } else {
+    code_description_ = nullptr;
+  }
+  severity_ = from.severity_;
+  // @@protoc_insertion_point(copy_constructor:io.deephaven.proto.backplane.script.grpc.Diagnostic)
 }
 
-inline void TextEdit::SharedCtor() {
-text_.InitDefault();
+inline void Diagnostic::SharedCtor() {
+code_.InitDefault();
 #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
-  text_.Set("", GetArenaForAllocation());
+  code_.Set("", GetArenaForAllocation());
 #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
-range_ = nullptr;
+source_.InitDefault();
+#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  source_.Set("", GetArenaForAllocation());
+#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+message_.InitDefault();
+#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  message_.Set("", GetArenaForAllocation());
+#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+data_.InitDefault();
+#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  data_.Set("", GetArenaForAllocation());
+#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+::memset(reinterpret_cast<char*>(this) + static_cast<size_t>(
+    reinterpret_cast<char*>(&range_) - reinterpret_cast<char*>(this)),
+    0, static_cast<size_t>(reinterpret_cast<char*>(&severity_) -
+    reinterpret_cast<char*>(&range_)) + sizeof(severity_));
 }
 
-TextEdit::~TextEdit() {
-  // @@protoc_insertion_point(destructor:io.deephaven.proto.backplane.script.grpc.TextEdit)
+Diagnostic::~Diagnostic() {
+  // @@protoc_insertion_point(destructor:io.deephaven.proto.backplane.script.grpc.Diagnostic)
   if (auto *arena = _internal_metadata_.DeleteReturnArena<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>()) {
   (void)arena;
     return;
@@ -8588,32 +13406,56 @@ TextEdit::~TextEdit() {
   SharedDtor();
 }
 
-inline void TextEdit::SharedDtor() {
+inline void Diagnostic::SharedDtor() {
   GOOGLE_DCHECK(GetArenaForAllocation() == nullptr);
-  text_.Destroy();
+  code_.Destroy();
+  source_.Destroy();
+  message_.Destroy();
+  data_.Destroy();
   if (this != internal_default_instance()) delete range_;
+  if (this != internal_default_instance()) delete code_description_;
 }
 
-void TextEdit::SetCachedSize(int size) const {
+void Diagnostic::SetCachedSize(int size) const {
   _cached_size_.Set(size);
 }
 
-void TextEdit::Clear() {
-// @@protoc_insertion_point(message_clear_start:io.deephaven.proto.backplane.script.grpc.TextEdit)
+void Diagnostic::Clear() {
+// @@protoc_insertion_point(message_clear_start:io.deephaven.proto.backplane.script.grpc.Diagnostic)
   uint32_t cached_has_bits = 0;
   // Prevent compiler warnings about cached_has_bits being unused
   (void) cached_has_bits;
 
-  text_.ClearToEmpty();
+  tags_.Clear();
+  cached_has_bits = _has_bits_[0];
+  if (cached_has_bits & 0x00000003u) {
+    if (cached_has_bits & 0x00000001u) {
+      code_.ClearNonDefaultToEmpty();
+    }
+    if (cached_has_bits & 0x00000002u) {
+      source_.ClearNonDefaultToEmpty();
+    }
+  }
+  message_.ClearToEmpty();
+  if (cached_has_bits & 0x00000004u) {
+    data_.ClearNonDefaultToEmpty();
+  }
   if (GetArenaForAllocation() == nullptr && range_ != nullptr) {
     delete range_;
   }
   range_ = nullptr;
+  if (cached_has_bits & 0x00000008u) {
+    GOOGLE_DCHECK(code_description_ != nullptr);
+    code_description_->Clear();
+  }
+  severity_ = 0;
+  _has_bits_.Clear();
   _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
 }
 
-const char* TextEdit::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) {
+const char* Diagnostic::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) {
 #define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
+  _Internal::HasBits has_bits{};
   while (!ctx->Done(&ptr)) {
     uint32_t tag;
     ptr = ::_pbi::ReadTag(ptr, &tag);
@@ -8626,13 +13468,71 @@ const char* TextEdit::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx)
         } else
           goto handle_unusual;
         continue;
-      // string text = 2;
+      // .io.deephaven.proto.backplane.script.grpc.Diagnostic.DiagnosticSeverity severity = 2;
       case 2:
-        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 18)) {
-          auto str = _internal_mutable_text();
+        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 16)) {
+          uint64_t val = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint64(&ptr);
+          CHK_(ptr);
+          _internal_set_severity(static_cast<::io::deephaven::proto::backplane::script::grpc::Diagnostic_DiagnosticSeverity>(val));
+        } else
+          goto handle_unusual;
+        continue;
+      // optional string code = 3;
+      case 3:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 26)) {
+          auto str = _internal_mutable_code();
+          ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
+          CHK_(ptr);
+          CHK_(::_pbi::VerifyUTF8(str, "io.deephaven.proto.backplane.script.grpc.Diagnostic.code"));
+        } else
+          goto handle_unusual;
+        continue;
+      // optional .io.deephaven.proto.backplane.script.grpc.Diagnostic.CodeDescription code_description = 4;
+      case 4:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 34)) {
+          ptr = ctx->ParseMessage(_internal_mutable_code_description(), ptr);
+          CHK_(ptr);
+        } else
+          goto handle_unusual;
+        continue;
+      // optional string source = 5;
+      case 5:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 42)) {
+          auto str = _internal_mutable_source();
+          ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
+          CHK_(ptr);
+          CHK_(::_pbi::VerifyUTF8(str, "io.deephaven.proto.backplane.script.grpc.Diagnostic.source"));
+        } else
+          goto handle_unusual;
+        continue;
+      // string message = 6;
+      case 6:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 50)) {
+          auto str = _internal_mutable_message();
+          ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
+          CHK_(ptr);
+          CHK_(::_pbi::VerifyUTF8(str, "io.deephaven.proto.backplane.script.grpc.Diagnostic.message"));
+        } else
+          goto handle_unusual;
+        continue;
+      // repeated .io.deephaven.proto.backplane.script.grpc.Diagnostic.DiagnosticTag tags = 7;
+      case 7:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 58)) {
+          ptr = ::PROTOBUF_NAMESPACE_ID::internal::PackedEnumParser(_internal_mutable_tags(), ptr, ctx);
+          CHK_(ptr);
+        } else if (static_cast<uint8_t>(tag) == 56) {
+          uint64_t val = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint64(&ptr);
+          CHK_(ptr);
+          _internal_add_tags(static_cast<::io::deephaven::proto::backplane::script::grpc::Diagnostic_DiagnosticTag>(val));
+        } else
+          goto handle_unusual;
+        continue;
+      // optional bytes data = 9;
+      case 9:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 74)) {
+          auto str = _internal_mutable_data();
           ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
           CHK_(ptr);
-          CHK_(::_pbi::VerifyUTF8(str, "io.deephaven.proto.backplane.script.grpc.TextEdit.text"));
         } else
           goto handle_unusual;
         continue;
@@ -8652,6 +13552,7 @@ const char* TextEdit::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx)
     CHK_(ptr != nullptr);
   }  // while
 message_done:
+  _has_bits_.Or(has_bits);
   return ptr;
 failure:
   ptr = nullptr;
@@ -8659,9 +13560,9 @@ const char* TextEdit::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx)
 #undef CHK_
 }
 
-uint8_t* TextEdit::_InternalSerialize(
+uint8_t* Diagnostic::_InternalSerialize(
     uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const {
-  // @@protoc_insertion_point(serialize_to_array_start:io.deephaven.proto.backplane.script.grpc.TextEdit)
+  // @@protoc_insertion_point(serialize_to_array_start:io.deephaven.proto.backplane.script.grpc.Diagnostic)
   uint32_t cached_has_bits = 0;
   (void) cached_has_bits;
 
@@ -8672,37 +13573,127 @@ uint8_t* TextEdit::_InternalSerialize(
         _Internal::range(this).GetCachedSize(), target, stream);
   }
 
-  // string text = 2;
-  if (!this->_internal_text().empty()) {
+  // .io.deephaven.proto.backplane.script.grpc.Diagnostic.DiagnosticSeverity severity = 2;
+  if (this->_internal_severity() != 0) {
+    target = stream->EnsureSpace(target);
+    target = ::_pbi::WireFormatLite::WriteEnumToArray(
+      2, this->_internal_severity(), target);
+  }
+
+  // optional string code = 3;
+  if (_internal_has_code()) {
     ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
-      this->_internal_text().data(), static_cast<int>(this->_internal_text().length()),
+      this->_internal_code().data(), static_cast<int>(this->_internal_code().length()),
       ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
-      "io.deephaven.proto.backplane.script.grpc.TextEdit.text");
+      "io.deephaven.proto.backplane.script.grpc.Diagnostic.code");
     target = stream->WriteStringMaybeAliased(
-        2, this->_internal_text(), target);
+        3, this->_internal_code(), target);
+  }
+
+  // optional .io.deephaven.proto.backplane.script.grpc.Diagnostic.CodeDescription code_description = 4;
+  if (_internal_has_code_description()) {
+    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
+      InternalWriteMessage(4, _Internal::code_description(this),
+        _Internal::code_description(this).GetCachedSize(), target, stream);
+  }
+
+  // optional string source = 5;
+  if (_internal_has_source()) {
+    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
+      this->_internal_source().data(), static_cast<int>(this->_internal_source().length()),
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
+      "io.deephaven.proto.backplane.script.grpc.Diagnostic.source");
+    target = stream->WriteStringMaybeAliased(
+        5, this->_internal_source(), target);
+  }
+
+  // string message = 6;
+  if (!this->_internal_message().empty()) {
+    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
+      this->_internal_message().data(), static_cast<int>(this->_internal_message().length()),
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
+      "io.deephaven.proto.backplane.script.grpc.Diagnostic.message");
+    target = stream->WriteStringMaybeAliased(
+        6, this->_internal_message(), target);
+  }
+
+  // repeated .io.deephaven.proto.backplane.script.grpc.Diagnostic.DiagnosticTag tags = 7;
+  {
+    int byte_size = _tags_cached_byte_size_.load(std::memory_order_relaxed);
+    if (byte_size > 0) {
+      target = stream->WriteEnumPacked(
+          7, tags_, byte_size, target);
+    }
+  }
+
+  // optional bytes data = 9;
+  if (_internal_has_data()) {
+    target = stream->WriteBytesMaybeAliased(
+        9, this->_internal_data(), target);
   }
 
   if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
     target = ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray(
         _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream);
   }
-  // @@protoc_insertion_point(serialize_to_array_end:io.deephaven.proto.backplane.script.grpc.TextEdit)
+  // @@protoc_insertion_point(serialize_to_array_end:io.deephaven.proto.backplane.script.grpc.Diagnostic)
   return target;
 }
 
-size_t TextEdit::ByteSizeLong() const {
-// @@protoc_insertion_point(message_byte_size_start:io.deephaven.proto.backplane.script.grpc.TextEdit)
+size_t Diagnostic::ByteSizeLong() const {
+// @@protoc_insertion_point(message_byte_size_start:io.deephaven.proto.backplane.script.grpc.Diagnostic)
   size_t total_size = 0;
 
   uint32_t cached_has_bits = 0;
   // Prevent compiler warnings about cached_has_bits being unused
   (void) cached_has_bits;
 
-  // string text = 2;
-  if (!this->_internal_text().empty()) {
+  // repeated .io.deephaven.proto.backplane.script.grpc.Diagnostic.DiagnosticTag tags = 7;
+  {
+    size_t data_size = 0;
+    unsigned int count = static_cast<unsigned int>(this->_internal_tags_size());for (unsigned int i = 0; i < count; i++) {
+      data_size += ::_pbi::WireFormatLite::EnumSize(
+        this->_internal_tags(static_cast<int>(i)));
+    }
+    if (data_size > 0) {
+      total_size += 1 +
+        ::_pbi::WireFormatLite::Int32Size(static_cast<int32_t>(data_size));
+    }
+    int cached_size = ::_pbi::ToCachedSize(data_size);
+    _tags_cached_byte_size_.store(cached_size,
+                                    std::memory_order_relaxed);
+    total_size += data_size;
+  }
+
+  cached_has_bits = _has_bits_[0];
+  if (cached_has_bits & 0x00000003u) {
+    // optional string code = 3;
+    if (cached_has_bits & 0x00000001u) {
+      total_size += 1 +
+        ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
+          this->_internal_code());
+    }
+
+    // optional string source = 5;
+    if (cached_has_bits & 0x00000002u) {
+      total_size += 1 +
+        ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
+          this->_internal_source());
+    }
+
+  }
+  // string message = 6;
+  if (!this->_internal_message().empty()) {
     total_size += 1 +
       ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
-        this->_internal_text());
+        this->_internal_message());
+  }
+
+  // optional bytes data = 9;
+  if (cached_has_bits & 0x00000004u) {
+    total_size += 1 +
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::BytesSize(
+        this->_internal_data());
   }
 
   // .io.deephaven.proto.backplane.script.grpc.DocumentRange range = 1;
@@ -8712,64 +13703,115 @@ size_t TextEdit::ByteSizeLong() const {
         *range_);
   }
 
+  // optional .io.deephaven.proto.backplane.script.grpc.Diagnostic.CodeDescription code_description = 4;
+  if (cached_has_bits & 0x00000008u) {
+    total_size += 1 +
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
+        *code_description_);
+  }
+
+  // .io.deephaven.proto.backplane.script.grpc.Diagnostic.DiagnosticSeverity severity = 2;
+  if (this->_internal_severity() != 0) {
+    total_size += 1 +
+      ::_pbi::WireFormatLite::EnumSize(this->_internal_severity());
+  }
+
   return MaybeComputeUnknownFieldsSize(total_size, &_cached_size_);
 }
 
-const ::PROTOBUF_NAMESPACE_ID::Message::ClassData TextEdit::_class_data_ = {
+const ::PROTOBUF_NAMESPACE_ID::Message::ClassData Diagnostic::_class_data_ = {
     ::PROTOBUF_NAMESPACE_ID::Message::CopyWithSizeCheck,
-    TextEdit::MergeImpl
+    Diagnostic::MergeImpl
 };
-const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*TextEdit::GetClassData() const { return &_class_data_; }
+const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*Diagnostic::GetClassData() const { return &_class_data_; }
 
-void TextEdit::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to,
+void Diagnostic::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to,
                       const ::PROTOBUF_NAMESPACE_ID::Message& from) {
-  static_cast<TextEdit *>(to)->MergeFrom(
-      static_cast<const TextEdit &>(from));
+  static_cast<Diagnostic *>(to)->MergeFrom(
+      static_cast<const Diagnostic &>(from));
 }
 
 
-void TextEdit::MergeFrom(const TextEdit& from) {
-// @@protoc_insertion_point(class_specific_merge_from_start:io.deephaven.proto.backplane.script.grpc.TextEdit)
+void Diagnostic::MergeFrom(const Diagnostic& from) {
+// @@protoc_insertion_point(class_specific_merge_from_start:io.deephaven.proto.backplane.script.grpc.Diagnostic)
   GOOGLE_DCHECK_NE(&from, this);
   uint32_t cached_has_bits = 0;
   (void) cached_has_bits;
 
-  if (!from._internal_text().empty()) {
-    _internal_set_text(from._internal_text());
+  tags_.MergeFrom(from.tags_);
+  cached_has_bits = from._has_bits_[0];
+  if (cached_has_bits & 0x00000003u) {
+    if (cached_has_bits & 0x00000001u) {
+      _internal_set_code(from._internal_code());
+    }
+    if (cached_has_bits & 0x00000002u) {
+      _internal_set_source(from._internal_source());
+    }
+  }
+  if (!from._internal_message().empty()) {
+    _internal_set_message(from._internal_message());
+  }
+  if (cached_has_bits & 0x00000004u) {
+    _internal_set_data(from._internal_data());
   }
   if (from._internal_has_range()) {
     _internal_mutable_range()->::io::deephaven::proto::backplane::script::grpc::DocumentRange::MergeFrom(from._internal_range());
   }
+  if (cached_has_bits & 0x00000008u) {
+    _internal_mutable_code_description()->::io::deephaven::proto::backplane::script::grpc::Diagnostic_CodeDescription::MergeFrom(from._internal_code_description());
+  }
+  if (from._internal_severity() != 0) {
+    _internal_set_severity(from._internal_severity());
+  }
   _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
 }
 
-void TextEdit::CopyFrom(const TextEdit& from) {
-// @@protoc_insertion_point(class_specific_copy_from_start:io.deephaven.proto.backplane.script.grpc.TextEdit)
+void Diagnostic::CopyFrom(const Diagnostic& from) {
+// @@protoc_insertion_point(class_specific_copy_from_start:io.deephaven.proto.backplane.script.grpc.Diagnostic)
   if (&from == this) return;
   Clear();
   MergeFrom(from);
 }
 
-bool TextEdit::IsInitialized() const {
+bool Diagnostic::IsInitialized() const {
   return true;
 }
 
-void TextEdit::InternalSwap(TextEdit* other) {
+void Diagnostic::InternalSwap(Diagnostic* other) {
   using std::swap;
   auto* lhs_arena = GetArenaForAllocation();
   auto* rhs_arena = other->GetArenaForAllocation();
   _internal_metadata_.InternalSwap(&other->_internal_metadata_);
+  swap(_has_bits_[0], other->_has_bits_[0]);
+  tags_.InternalSwap(&other->tags_);
   ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
-      &text_, lhs_arena,
-      &other->text_, rhs_arena
+      &code_, lhs_arena,
+      &other->code_, rhs_arena
   );
-  swap(range_, other->range_);
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
+      &source_, lhs_arena,
+      &other->source_, rhs_arena
+  );
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
+      &message_, lhs_arena,
+      &other->message_, rhs_arena
+  );
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
+      &data_, lhs_arena,
+      &other->data_, rhs_arena
+  );
+  ::PROTOBUF_NAMESPACE_ID::internal::memswap<
+      PROTOBUF_FIELD_OFFSET(Diagnostic, severity_)
+      + sizeof(Diagnostic::severity_)
+      - PROTOBUF_FIELD_OFFSET(Diagnostic, range_)>(
+          reinterpret_cast<char*>(&range_),
+          reinterpret_cast<char*>(&other->range_));
 }
 
-::PROTOBUF_NAMESPACE_ID::Metadata TextEdit::GetMetadata() const {
+::PROTOBUF_NAMESPACE_ID::Metadata Diagnostic::GetMetadata() const {
   return ::_pbi::AssignDescriptors(
       &descriptor_table_deephaven_2fproto_2fconsole_2eproto_getter, &descriptor_table_deephaven_2fproto_2fconsole_2eproto_once,
-      file_level_metadata_deephaven_2fproto_2fconsole_2eproto[29]);
+      file_level_metadata_deephaven_2fproto_2fconsole_2eproto[44]);
 }
 
 // ===================================================================
@@ -9441,7 +14483,7 @@ void FigureDescriptor_ChartDescriptor::InternalSwap(FigureDescriptor_ChartDescri
 ::PROTOBUF_NAMESPACE_ID::Metadata FigureDescriptor_ChartDescriptor::GetMetadata() const {
   return ::_pbi::AssignDescriptors(
       &descriptor_table_deephaven_2fproto_2fconsole_2eproto_getter, &descriptor_table_deephaven_2fproto_2fconsole_2eproto_once,
-      file_level_metadata_deephaven_2fproto_2fconsole_2eproto[30]);
+      file_level_metadata_deephaven_2fproto_2fconsole_2eproto[45]);
 }
 
 // ===================================================================
@@ -10186,7 +15228,7 @@ void FigureDescriptor_SeriesDescriptor::InternalSwap(FigureDescriptor_SeriesDesc
 ::PROTOBUF_NAMESPACE_ID::Metadata FigureDescriptor_SeriesDescriptor::GetMetadata() const {
   return ::_pbi::AssignDescriptors(
       &descriptor_table_deephaven_2fproto_2fconsole_2eproto_getter, &descriptor_table_deephaven_2fproto_2fconsole_2eproto_once,
-      file_level_metadata_deephaven_2fproto_2fconsole_2eproto[31]);
+      file_level_metadata_deephaven_2fproto_2fconsole_2eproto[46]);
 }
 
 // ===================================================================
@@ -10891,7 +15933,7 @@ void FigureDescriptor_MultiSeriesDescriptor::InternalSwap(FigureDescriptor_Multi
 ::PROTOBUF_NAMESPACE_ID::Metadata FigureDescriptor_MultiSeriesDescriptor::GetMetadata() const {
   return ::_pbi::AssignDescriptors(
       &descriptor_table_deephaven_2fproto_2fconsole_2eproto_getter, &descriptor_table_deephaven_2fproto_2fconsole_2eproto_once,
-      file_level_metadata_deephaven_2fproto_2fconsole_2eproto[32]);
+      file_level_metadata_deephaven_2fproto_2fconsole_2eproto[47]);
 }
 
 // ===================================================================
@@ -11175,7 +16217,7 @@ void FigureDescriptor_StringMapWithDefault::InternalSwap(FigureDescriptor_String
 ::PROTOBUF_NAMESPACE_ID::Metadata FigureDescriptor_StringMapWithDefault::GetMetadata() const {
   return ::_pbi::AssignDescriptors(
       &descriptor_table_deephaven_2fproto_2fconsole_2eproto_getter, &descriptor_table_deephaven_2fproto_2fconsole_2eproto_once,
-      file_level_metadata_deephaven_2fproto_2fconsole_2eproto[33]);
+      file_level_metadata_deephaven_2fproto_2fconsole_2eproto[48]);
 }
 
 // ===================================================================
@@ -11427,7 +16469,7 @@ void FigureDescriptor_DoubleMapWithDefault::InternalSwap(FigureDescriptor_Double
 ::PROTOBUF_NAMESPACE_ID::Metadata FigureDescriptor_DoubleMapWithDefault::GetMetadata() const {
   return ::_pbi::AssignDescriptors(
       &descriptor_table_deephaven_2fproto_2fconsole_2eproto_getter, &descriptor_table_deephaven_2fproto_2fconsole_2eproto_once,
-      file_level_metadata_deephaven_2fproto_2fconsole_2eproto[34]);
+      file_level_metadata_deephaven_2fproto_2fconsole_2eproto[49]);
 }
 
 // ===================================================================
@@ -11679,7 +16721,7 @@ void FigureDescriptor_BoolMapWithDefault::InternalSwap(FigureDescriptor_BoolMapW
 ::PROTOBUF_NAMESPACE_ID::Metadata FigureDescriptor_BoolMapWithDefault::GetMetadata() const {
   return ::_pbi::AssignDescriptors(
       &descriptor_table_deephaven_2fproto_2fconsole_2eproto_getter, &descriptor_table_deephaven_2fproto_2fconsole_2eproto_once,
-      file_level_metadata_deephaven_2fproto_2fconsole_2eproto[35]);
+      file_level_metadata_deephaven_2fproto_2fconsole_2eproto[50]);
 }
 
 // ===================================================================
@@ -12554,7 +17596,7 @@ void FigureDescriptor_AxisDescriptor::InternalSwap(FigureDescriptor_AxisDescript
 ::PROTOBUF_NAMESPACE_ID::Metadata FigureDescriptor_AxisDescriptor::GetMetadata() const {
   return ::_pbi::AssignDescriptors(
       &descriptor_table_deephaven_2fproto_2fconsole_2eproto_getter, &descriptor_table_deephaven_2fproto_2fconsole_2eproto_once,
-      file_level_metadata_deephaven_2fproto_2fconsole_2eproto[36]);
+      file_level_metadata_deephaven_2fproto_2fconsole_2eproto[51]);
 }
 
 // ===================================================================
@@ -12797,7 +17839,7 @@ void FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod::InternalSwap(Fi
 ::PROTOBUF_NAMESPACE_ID::Metadata FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod::GetMetadata() const {
   return ::_pbi::AssignDescriptors(
       &descriptor_table_deephaven_2fproto_2fconsole_2eproto_getter, &descriptor_table_deephaven_2fproto_2fconsole_2eproto_once,
-      file_level_metadata_deephaven_2fproto_2fconsole_2eproto[37]);
+      file_level_metadata_deephaven_2fproto_2fconsole_2eproto[52]);
 }
 
 // ===================================================================
@@ -13017,7 +18059,7 @@ void FigureDescriptor_BusinessCalendarDescriptor_Holiday::InternalSwap(FigureDes
 ::PROTOBUF_NAMESPACE_ID::Metadata FigureDescriptor_BusinessCalendarDescriptor_Holiday::GetMetadata() const {
   return ::_pbi::AssignDescriptors(
       &descriptor_table_deephaven_2fproto_2fconsole_2eproto_getter, &descriptor_table_deephaven_2fproto_2fconsole_2eproto_once,
-      file_level_metadata_deephaven_2fproto_2fconsole_2eproto[38]);
+      file_level_metadata_deephaven_2fproto_2fconsole_2eproto[53]);
 }
 
 // ===================================================================
@@ -13244,7 +18286,7 @@ void FigureDescriptor_BusinessCalendarDescriptor_LocalDate::InternalSwap(FigureD
 ::PROTOBUF_NAMESPACE_ID::Metadata FigureDescriptor_BusinessCalendarDescriptor_LocalDate::GetMetadata() const {
   return ::_pbi::AssignDescriptors(
       &descriptor_table_deephaven_2fproto_2fconsole_2eproto_getter, &descriptor_table_deephaven_2fproto_2fconsole_2eproto_once,
-      file_level_metadata_deephaven_2fproto_2fconsole_2eproto[39]);
+      file_level_metadata_deephaven_2fproto_2fconsole_2eproto[54]);
 }
 
 // ===================================================================
@@ -13596,7 +18638,7 @@ void FigureDescriptor_BusinessCalendarDescriptor::InternalSwap(FigureDescriptor_
 ::PROTOBUF_NAMESPACE_ID::Metadata FigureDescriptor_BusinessCalendarDescriptor::GetMetadata() const {
   return ::_pbi::AssignDescriptors(
       &descriptor_table_deephaven_2fproto_2fconsole_2eproto_getter, &descriptor_table_deephaven_2fproto_2fconsole_2eproto_once,
-      file_level_metadata_deephaven_2fproto_2fconsole_2eproto[40]);
+      file_level_metadata_deephaven_2fproto_2fconsole_2eproto[55]);
 }
 
 // ===================================================================
@@ -13902,7 +18944,7 @@ void FigureDescriptor_MultiSeriesSourceDescriptor::InternalSwap(FigureDescriptor
 ::PROTOBUF_NAMESPACE_ID::Metadata FigureDescriptor_MultiSeriesSourceDescriptor::GetMetadata() const {
   return ::_pbi::AssignDescriptors(
       &descriptor_table_deephaven_2fproto_2fconsole_2eproto_getter, &descriptor_table_deephaven_2fproto_2fconsole_2eproto_once,
-      file_level_metadata_deephaven_2fproto_2fconsole_2eproto[41]);
+      file_level_metadata_deephaven_2fproto_2fconsole_2eproto[56]);
 }
 
 // ===================================================================
@@ -14318,7 +19360,7 @@ void FigureDescriptor_SourceDescriptor::InternalSwap(FigureDescriptor_SourceDesc
 ::PROTOBUF_NAMESPACE_ID::Metadata FigureDescriptor_SourceDescriptor::GetMetadata() const {
   return ::_pbi::AssignDescriptors(
       &descriptor_table_deephaven_2fproto_2fconsole_2eproto_getter, &descriptor_table_deephaven_2fproto_2fconsole_2eproto_once,
-      file_level_metadata_deephaven_2fproto_2fconsole_2eproto[42]);
+      file_level_metadata_deephaven_2fproto_2fconsole_2eproto[57]);
 }
 
 // ===================================================================
@@ -14565,7 +19607,7 @@ void FigureDescriptor_OneClickDescriptor::InternalSwap(FigureDescriptor_OneClick
 ::PROTOBUF_NAMESPACE_ID::Metadata FigureDescriptor_OneClickDescriptor::GetMetadata() const {
   return ::_pbi::AssignDescriptors(
       &descriptor_table_deephaven_2fproto_2fconsole_2eproto_getter, &descriptor_table_deephaven_2fproto_2fconsole_2eproto_once,
-      file_level_metadata_deephaven_2fproto_2fconsole_2eproto[43]);
+      file_level_metadata_deephaven_2fproto_2fconsole_2eproto[58]);
 }
 
 // ===================================================================
@@ -15022,7 +20064,7 @@ void FigureDescriptor::InternalSwap(FigureDescriptor* other) {
 ::PROTOBUF_NAMESPACE_ID::Metadata FigureDescriptor::GetMetadata() const {
   return ::_pbi::AssignDescriptors(
       &descriptor_table_deephaven_2fproto_2fconsole_2eproto_getter, &descriptor_table_deephaven_2fproto_2fconsole_2eproto_once,
-      file_level_metadata_deephaven_2fproto_2fconsole_2eproto[44]);
+      file_level_metadata_deephaven_2fproto_2fconsole_2eproto[59]);
 }
 
 // @@protoc_insertion_point(namespace_scope)
@@ -15089,6 +20131,14 @@ template<> PROTOBUF_NOINLINE ::io::deephaven::proto::backplane::script::grpc::Ca
 Arena::CreateMaybeMessage< ::io::deephaven::proto::backplane::script::grpc::CancelCommandResponse >(Arena* arena) {
   return Arena::CreateMessageInternal< ::io::deephaven::proto::backplane::script::grpc::CancelCommandResponse >(arena);
 }
+template<> PROTOBUF_NOINLINE ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteRequest*
+Arena::CreateMaybeMessage< ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteRequest >(Arena* arena) {
+  return Arena::CreateMessageInternal< ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteRequest >(arena);
+}
+template<> PROTOBUF_NOINLINE ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteResponse*
+Arena::CreateMaybeMessage< ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteResponse >(Arena* arena) {
+  return Arena::CreateMessageInternal< ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteResponse >(arena);
+}
 template<> PROTOBUF_NOINLINE ::io::deephaven::proto::backplane::script::grpc::AutoCompleteRequest*
 Arena::CreateMaybeMessage< ::io::deephaven::proto::backplane::script::grpc::AutoCompleteRequest >(Arena* arena) {
   return Arena::CreateMessageInternal< ::io::deephaven::proto::backplane::script::grpc::AutoCompleteRequest >(arena);
@@ -15133,6 +20183,10 @@ template<> PROTOBUF_NOINLINE ::io::deephaven::proto::backplane::script::grpc::Po
 Arena::CreateMaybeMessage< ::io::deephaven::proto::backplane::script::grpc::Position >(Arena* arena) {
   return Arena::CreateMessageInternal< ::io::deephaven::proto::backplane::script::grpc::Position >(arena);
 }
+template<> PROTOBUF_NOINLINE ::io::deephaven::proto::backplane::script::grpc::MarkupContent*
+Arena::CreateMaybeMessage< ::io::deephaven::proto::backplane::script::grpc::MarkupContent >(Arena* arena) {
+  return Arena::CreateMessageInternal< ::io::deephaven::proto::backplane::script::grpc::MarkupContent >(arena);
+}
 template<> PROTOBUF_NOINLINE ::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsRequest*
 Arena::CreateMaybeMessage< ::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsRequest >(Arena* arena) {
   return Arena::CreateMessageInternal< ::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsRequest >(arena);
@@ -15153,6 +20207,54 @@ template<> PROTOBUF_NOINLINE ::io::deephaven::proto::backplane::script::grpc::Te
 Arena::CreateMaybeMessage< ::io::deephaven::proto::backplane::script::grpc::TextEdit >(Arena* arena) {
   return Arena::CreateMessageInternal< ::io::deephaven::proto::backplane::script::grpc::TextEdit >(arena);
 }
+template<> PROTOBUF_NOINLINE ::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpRequest*
+Arena::CreateMaybeMessage< ::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpRequest >(Arena* arena) {
+  return Arena::CreateMessageInternal< ::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpRequest >(arena);
+}
+template<> PROTOBUF_NOINLINE ::io::deephaven::proto::backplane::script::grpc::SignatureHelpContext*
+Arena::CreateMaybeMessage< ::io::deephaven::proto::backplane::script::grpc::SignatureHelpContext >(Arena* arena) {
+  return Arena::CreateMessageInternal< ::io::deephaven::proto::backplane::script::grpc::SignatureHelpContext >(arena);
+}
+template<> PROTOBUF_NOINLINE ::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpResponse*
+Arena::CreateMaybeMessage< ::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpResponse >(Arena* arena) {
+  return Arena::CreateMessageInternal< ::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpResponse >(arena);
+}
+template<> PROTOBUF_NOINLINE ::io::deephaven::proto::backplane::script::grpc::SignatureInformation*
+Arena::CreateMaybeMessage< ::io::deephaven::proto::backplane::script::grpc::SignatureInformation >(Arena* arena) {
+  return Arena::CreateMessageInternal< ::io::deephaven::proto::backplane::script::grpc::SignatureInformation >(arena);
+}
+template<> PROTOBUF_NOINLINE ::io::deephaven::proto::backplane::script::grpc::ParameterInformation*
+Arena::CreateMaybeMessage< ::io::deephaven::proto::backplane::script::grpc::ParameterInformation >(Arena* arena) {
+  return Arena::CreateMessageInternal< ::io::deephaven::proto::backplane::script::grpc::ParameterInformation >(arena);
+}
+template<> PROTOBUF_NOINLINE ::io::deephaven::proto::backplane::script::grpc::GetHoverRequest*
+Arena::CreateMaybeMessage< ::io::deephaven::proto::backplane::script::grpc::GetHoverRequest >(Arena* arena) {
+  return Arena::CreateMessageInternal< ::io::deephaven::proto::backplane::script::grpc::GetHoverRequest >(arena);
+}
+template<> PROTOBUF_NOINLINE ::io::deephaven::proto::backplane::script::grpc::GetHoverResponse*
+Arena::CreateMaybeMessage< ::io::deephaven::proto::backplane::script::grpc::GetHoverResponse >(Arena* arena) {
+  return Arena::CreateMessageInternal< ::io::deephaven::proto::backplane::script::grpc::GetHoverResponse >(arena);
+}
+template<> PROTOBUF_NOINLINE ::io::deephaven::proto::backplane::script::grpc::GetDiagnosticRequest*
+Arena::CreateMaybeMessage< ::io::deephaven::proto::backplane::script::grpc::GetDiagnosticRequest >(Arena* arena) {
+  return Arena::CreateMessageInternal< ::io::deephaven::proto::backplane::script::grpc::GetDiagnosticRequest >(arena);
+}
+template<> PROTOBUF_NOINLINE ::io::deephaven::proto::backplane::script::grpc::GetPullDiagnosticResponse*
+Arena::CreateMaybeMessage< ::io::deephaven::proto::backplane::script::grpc::GetPullDiagnosticResponse >(Arena* arena) {
+  return Arena::CreateMessageInternal< ::io::deephaven::proto::backplane::script::grpc::GetPullDiagnosticResponse >(arena);
+}
+template<> PROTOBUF_NOINLINE ::io::deephaven::proto::backplane::script::grpc::GetPublishDiagnosticResponse*
+Arena::CreateMaybeMessage< ::io::deephaven::proto::backplane::script::grpc::GetPublishDiagnosticResponse >(Arena* arena) {
+  return Arena::CreateMessageInternal< ::io::deephaven::proto::backplane::script::grpc::GetPublishDiagnosticResponse >(arena);
+}
+template<> PROTOBUF_NOINLINE ::io::deephaven::proto::backplane::script::grpc::Diagnostic_CodeDescription*
+Arena::CreateMaybeMessage< ::io::deephaven::proto::backplane::script::grpc::Diagnostic_CodeDescription >(Arena* arena) {
+  return Arena::CreateMessageInternal< ::io::deephaven::proto::backplane::script::grpc::Diagnostic_CodeDescription >(arena);
+}
+template<> PROTOBUF_NOINLINE ::io::deephaven::proto::backplane::script::grpc::Diagnostic*
+Arena::CreateMaybeMessage< ::io::deephaven::proto::backplane::script::grpc::Diagnostic >(Arena* arena) {
+  return Arena::CreateMessageInternal< ::io::deephaven::proto::backplane::script::grpc::Diagnostic >(arena);
+}
 template<> PROTOBUF_NOINLINE ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_ChartDescriptor*
 Arena::CreateMaybeMessage< ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_ChartDescriptor >(Arena* arena) {
   return Arena::CreateMessageInternal< ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_ChartDescriptor >(arena);
diff --git a/cpp-client/deephaven/client/proto/deephaven/proto/console.pb.h b/cpp-client/deephaven/client/proto/deephaven/proto/console.pb.h
index 904c06d7a05..e6adefac760 100644
--- a/cpp-client/deephaven/client/proto/deephaven/proto/console.pb.h
+++ b/cpp-client/deephaven/client/proto/deephaven/proto/console.pb.h
@@ -69,6 +69,12 @@ extern BindTableToVariableResponseDefaultTypeInternal _BindTableToVariableRespon
 class BrowserNextResponse;
 struct BrowserNextResponseDefaultTypeInternal;
 extern BrowserNextResponseDefaultTypeInternal _BrowserNextResponse_default_instance_;
+class CancelAutoCompleteRequest;
+struct CancelAutoCompleteRequestDefaultTypeInternal;
+extern CancelAutoCompleteRequestDefaultTypeInternal _CancelAutoCompleteRequest_default_instance_;
+class CancelAutoCompleteResponse;
+struct CancelAutoCompleteResponseDefaultTypeInternal;
+extern CancelAutoCompleteResponseDefaultTypeInternal _CancelAutoCompleteResponse_default_instance_;
 class CancelCommandRequest;
 struct CancelCommandRequestDefaultTypeInternal;
 extern CancelCommandRequestDefaultTypeInternal _CancelCommandRequest_default_instance_;
@@ -90,6 +96,12 @@ extern CompletionContextDefaultTypeInternal _CompletionContext_default_instance_
 class CompletionItem;
 struct CompletionItemDefaultTypeInternal;
 extern CompletionItemDefaultTypeInternal _CompletionItem_default_instance_;
+class Diagnostic;
+struct DiagnosticDefaultTypeInternal;
+extern DiagnosticDefaultTypeInternal _Diagnostic_default_instance_;
+class Diagnostic_CodeDescription;
+struct Diagnostic_CodeDescriptionDefaultTypeInternal;
+extern Diagnostic_CodeDescriptionDefaultTypeInternal _Diagnostic_CodeDescription_default_instance_;
 class DocumentRange;
 struct DocumentRangeDefaultTypeInternal;
 extern DocumentRangeDefaultTypeInternal _DocumentRange_default_instance_;
@@ -156,24 +168,57 @@ extern GetConsoleTypesRequestDefaultTypeInternal _GetConsoleTypesRequest_default
 class GetConsoleTypesResponse;
 struct GetConsoleTypesResponseDefaultTypeInternal;
 extern GetConsoleTypesResponseDefaultTypeInternal _GetConsoleTypesResponse_default_instance_;
+class GetDiagnosticRequest;
+struct GetDiagnosticRequestDefaultTypeInternal;
+extern GetDiagnosticRequestDefaultTypeInternal _GetDiagnosticRequest_default_instance_;
 class GetHeapInfoRequest;
 struct GetHeapInfoRequestDefaultTypeInternal;
 extern GetHeapInfoRequestDefaultTypeInternal _GetHeapInfoRequest_default_instance_;
 class GetHeapInfoResponse;
 struct GetHeapInfoResponseDefaultTypeInternal;
 extern GetHeapInfoResponseDefaultTypeInternal _GetHeapInfoResponse_default_instance_;
+class GetHoverRequest;
+struct GetHoverRequestDefaultTypeInternal;
+extern GetHoverRequestDefaultTypeInternal _GetHoverRequest_default_instance_;
+class GetHoverResponse;
+struct GetHoverResponseDefaultTypeInternal;
+extern GetHoverResponseDefaultTypeInternal _GetHoverResponse_default_instance_;
+class GetPublishDiagnosticResponse;
+struct GetPublishDiagnosticResponseDefaultTypeInternal;
+extern GetPublishDiagnosticResponseDefaultTypeInternal _GetPublishDiagnosticResponse_default_instance_;
+class GetPullDiagnosticResponse;
+struct GetPullDiagnosticResponseDefaultTypeInternal;
+extern GetPullDiagnosticResponseDefaultTypeInternal _GetPullDiagnosticResponse_default_instance_;
+class GetSignatureHelpRequest;
+struct GetSignatureHelpRequestDefaultTypeInternal;
+extern GetSignatureHelpRequestDefaultTypeInternal _GetSignatureHelpRequest_default_instance_;
+class GetSignatureHelpResponse;
+struct GetSignatureHelpResponseDefaultTypeInternal;
+extern GetSignatureHelpResponseDefaultTypeInternal _GetSignatureHelpResponse_default_instance_;
 class LogSubscriptionData;
 struct LogSubscriptionDataDefaultTypeInternal;
 extern LogSubscriptionDataDefaultTypeInternal _LogSubscriptionData_default_instance_;
 class LogSubscriptionRequest;
 struct LogSubscriptionRequestDefaultTypeInternal;
 extern LogSubscriptionRequestDefaultTypeInternal _LogSubscriptionRequest_default_instance_;
+class MarkupContent;
+struct MarkupContentDefaultTypeInternal;
+extern MarkupContentDefaultTypeInternal _MarkupContent_default_instance_;
 class OpenDocumentRequest;
 struct OpenDocumentRequestDefaultTypeInternal;
 extern OpenDocumentRequestDefaultTypeInternal _OpenDocumentRequest_default_instance_;
+class ParameterInformation;
+struct ParameterInformationDefaultTypeInternal;
+extern ParameterInformationDefaultTypeInternal _ParameterInformation_default_instance_;
 class Position;
 struct PositionDefaultTypeInternal;
 extern PositionDefaultTypeInternal _Position_default_instance_;
+class SignatureHelpContext;
+struct SignatureHelpContextDefaultTypeInternal;
+extern SignatureHelpContextDefaultTypeInternal _SignatureHelpContext_default_instance_;
+class SignatureInformation;
+struct SignatureInformationDefaultTypeInternal;
+extern SignatureInformationDefaultTypeInternal _SignatureInformation_default_instance_;
 class StartConsoleRequest;
 struct StartConsoleRequestDefaultTypeInternal;
 extern StartConsoleRequestDefaultTypeInternal _StartConsoleRequest_default_instance_;
@@ -201,6 +246,8 @@ template<> ::io::deephaven::proto::backplane::script::grpc::AutoCompleteResponse
 template<> ::io::deephaven::proto::backplane::script::grpc::BindTableToVariableRequest* Arena::CreateMaybeMessage<::io::deephaven::proto::backplane::script::grpc::BindTableToVariableRequest>(Arena*);
 template<> ::io::deephaven::proto::backplane::script::grpc::BindTableToVariableResponse* Arena::CreateMaybeMessage<::io::deephaven::proto::backplane::script::grpc::BindTableToVariableResponse>(Arena*);
 template<> ::io::deephaven::proto::backplane::script::grpc::BrowserNextResponse* Arena::CreateMaybeMessage<::io::deephaven::proto::backplane::script::grpc::BrowserNextResponse>(Arena*);
+template<> ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteRequest* Arena::CreateMaybeMessage<::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteRequest>(Arena*);
+template<> ::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteResponse* Arena::CreateMaybeMessage<::io::deephaven::proto::backplane::script::grpc::CancelAutoCompleteResponse>(Arena*);
 template<> ::io::deephaven::proto::backplane::script::grpc::CancelCommandRequest* Arena::CreateMaybeMessage<::io::deephaven::proto::backplane::script::grpc::CancelCommandRequest>(Arena*);
 template<> ::io::deephaven::proto::backplane::script::grpc::CancelCommandResponse* Arena::CreateMaybeMessage<::io::deephaven::proto::backplane::script::grpc::CancelCommandResponse>(Arena*);
 template<> ::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest* Arena::CreateMaybeMessage<::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest>(Arena*);
@@ -208,6 +255,8 @@ template<> ::io::deephaven::proto::backplane::script::grpc::ChangeDocumentReques
 template<> ::io::deephaven::proto::backplane::script::grpc::CloseDocumentRequest* Arena::CreateMaybeMessage<::io::deephaven::proto::backplane::script::grpc::CloseDocumentRequest>(Arena*);
 template<> ::io::deephaven::proto::backplane::script::grpc::CompletionContext* Arena::CreateMaybeMessage<::io::deephaven::proto::backplane::script::grpc::CompletionContext>(Arena*);
 template<> ::io::deephaven::proto::backplane::script::grpc::CompletionItem* Arena::CreateMaybeMessage<::io::deephaven::proto::backplane::script::grpc::CompletionItem>(Arena*);
+template<> ::io::deephaven::proto::backplane::script::grpc::Diagnostic* Arena::CreateMaybeMessage<::io::deephaven::proto::backplane::script::grpc::Diagnostic>(Arena*);
+template<> ::io::deephaven::proto::backplane::script::grpc::Diagnostic_CodeDescription* Arena::CreateMaybeMessage<::io::deephaven::proto::backplane::script::grpc::Diagnostic_CodeDescription>(Arena*);
 template<> ::io::deephaven::proto::backplane::script::grpc::DocumentRange* Arena::CreateMaybeMessage<::io::deephaven::proto::backplane::script::grpc::DocumentRange>(Arena*);
 template<> ::io::deephaven::proto::backplane::script::grpc::ExecuteCommandRequest* Arena::CreateMaybeMessage<::io::deephaven::proto::backplane::script::grpc::ExecuteCommandRequest>(Arena*);
 template<> ::io::deephaven::proto::backplane::script::grpc::ExecuteCommandResponse* Arena::CreateMaybeMessage<::io::deephaven::proto::backplane::script::grpc::ExecuteCommandResponse>(Arena*);
@@ -230,12 +279,23 @@ template<> ::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsRe
 template<> ::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsResponse* Arena::CreateMaybeMessage<::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsResponse>(Arena*);
 template<> ::io::deephaven::proto::backplane::script::grpc::GetConsoleTypesRequest* Arena::CreateMaybeMessage<::io::deephaven::proto::backplane::script::grpc::GetConsoleTypesRequest>(Arena*);
 template<> ::io::deephaven::proto::backplane::script::grpc::GetConsoleTypesResponse* Arena::CreateMaybeMessage<::io::deephaven::proto::backplane::script::grpc::GetConsoleTypesResponse>(Arena*);
+template<> ::io::deephaven::proto::backplane::script::grpc::GetDiagnosticRequest* Arena::CreateMaybeMessage<::io::deephaven::proto::backplane::script::grpc::GetDiagnosticRequest>(Arena*);
 template<> ::io::deephaven::proto::backplane::script::grpc::GetHeapInfoRequest* Arena::CreateMaybeMessage<::io::deephaven::proto::backplane::script::grpc::GetHeapInfoRequest>(Arena*);
 template<> ::io::deephaven::proto::backplane::script::grpc::GetHeapInfoResponse* Arena::CreateMaybeMessage<::io::deephaven::proto::backplane::script::grpc::GetHeapInfoResponse>(Arena*);
+template<> ::io::deephaven::proto::backplane::script::grpc::GetHoverRequest* Arena::CreateMaybeMessage<::io::deephaven::proto::backplane::script::grpc::GetHoverRequest>(Arena*);
+template<> ::io::deephaven::proto::backplane::script::grpc::GetHoverResponse* Arena::CreateMaybeMessage<::io::deephaven::proto::backplane::script::grpc::GetHoverResponse>(Arena*);
+template<> ::io::deephaven::proto::backplane::script::grpc::GetPublishDiagnosticResponse* Arena::CreateMaybeMessage<::io::deephaven::proto::backplane::script::grpc::GetPublishDiagnosticResponse>(Arena*);
+template<> ::io::deephaven::proto::backplane::script::grpc::GetPullDiagnosticResponse* Arena::CreateMaybeMessage<::io::deephaven::proto::backplane::script::grpc::GetPullDiagnosticResponse>(Arena*);
+template<> ::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpRequest* Arena::CreateMaybeMessage<::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpRequest>(Arena*);
+template<> ::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpResponse* Arena::CreateMaybeMessage<::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpResponse>(Arena*);
 template<> ::io::deephaven::proto::backplane::script::grpc::LogSubscriptionData* Arena::CreateMaybeMessage<::io::deephaven::proto::backplane::script::grpc::LogSubscriptionData>(Arena*);
 template<> ::io::deephaven::proto::backplane::script::grpc::LogSubscriptionRequest* Arena::CreateMaybeMessage<::io::deephaven::proto::backplane::script::grpc::LogSubscriptionRequest>(Arena*);
+template<> ::io::deephaven::proto::backplane::script::grpc::MarkupContent* Arena::CreateMaybeMessage<::io::deephaven::proto::backplane::script::grpc::MarkupContent>(Arena*);
 template<> ::io::deephaven::proto::backplane::script::grpc::OpenDocumentRequest* Arena::CreateMaybeMessage<::io::deephaven::proto::backplane::script::grpc::OpenDocumentRequest>(Arena*);
+template<> ::io::deephaven::proto::backplane::script::grpc::ParameterInformation* Arena::CreateMaybeMessage<::io::deephaven::proto::backplane::script::grpc::ParameterInformation>(Arena*);
 template<> ::io::deephaven::proto::backplane::script::grpc::Position* Arena::CreateMaybeMessage<::io::deephaven::proto::backplane::script::grpc::Position>(Arena*);
+template<> ::io::deephaven::proto::backplane::script::grpc::SignatureHelpContext* Arena::CreateMaybeMessage<::io::deephaven::proto::backplane::script::grpc::SignatureHelpContext>(Arena*);
+template<> ::io::deephaven::proto::backplane::script::grpc::SignatureInformation* Arena::CreateMaybeMessage<::io::deephaven::proto::backplane::script::grpc::SignatureInformation>(Arena*);
 template<> ::io::deephaven::proto::backplane::script::grpc::StartConsoleRequest* Arena::CreateMaybeMessage<::io::deephaven::proto::backplane::script::grpc::StartConsoleRequest>(Arena*);
 template<> ::io::deephaven::proto::backplane::script::grpc::StartConsoleResponse* Arena::CreateMaybeMessage<::io::deephaven::proto::backplane::script::grpc::StartConsoleResponse>(Arena*);
 template<> ::io::deephaven::proto::backplane::script::grpc::TextDocumentItem* Arena::CreateMaybeMessage<::io::deephaven::proto::backplane::script::grpc::TextDocumentItem>(Arena*);
@@ -249,6 +309,60 @@ namespace backplane {
 namespace script {
 namespace grpc {
 
+enum Diagnostic_DiagnosticSeverity : int {
+  Diagnostic_DiagnosticSeverity_NOT_SET_SEVERITY = 0,
+  Diagnostic_DiagnosticSeverity_ERROR = 1,
+  Diagnostic_DiagnosticSeverity_WARNING = 2,
+  Diagnostic_DiagnosticSeverity_INFORMATION = 3,
+  Diagnostic_DiagnosticSeverity_HINT = 4,
+  Diagnostic_DiagnosticSeverity_Diagnostic_DiagnosticSeverity_INT_MIN_SENTINEL_DO_NOT_USE_ = std::numeric_limits<int32_t>::min(),
+  Diagnostic_DiagnosticSeverity_Diagnostic_DiagnosticSeverity_INT_MAX_SENTINEL_DO_NOT_USE_ = std::numeric_limits<int32_t>::max()
+};
+bool Diagnostic_DiagnosticSeverity_IsValid(int value);
+constexpr Diagnostic_DiagnosticSeverity Diagnostic_DiagnosticSeverity_DiagnosticSeverity_MIN = Diagnostic_DiagnosticSeverity_NOT_SET_SEVERITY;
+constexpr Diagnostic_DiagnosticSeverity Diagnostic_DiagnosticSeverity_DiagnosticSeverity_MAX = Diagnostic_DiagnosticSeverity_HINT;
+constexpr int Diagnostic_DiagnosticSeverity_DiagnosticSeverity_ARRAYSIZE = Diagnostic_DiagnosticSeverity_DiagnosticSeverity_MAX + 1;
+
+const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* Diagnostic_DiagnosticSeverity_descriptor();
+template<typename T>
+inline const std::string& Diagnostic_DiagnosticSeverity_Name(T enum_t_value) {
+  static_assert(::std::is_same<T, Diagnostic_DiagnosticSeverity>::value ||
+    ::std::is_integral<T>::value,
+    "Incorrect type passed to function Diagnostic_DiagnosticSeverity_Name.");
+  return ::PROTOBUF_NAMESPACE_ID::internal::NameOfEnum(
+    Diagnostic_DiagnosticSeverity_descriptor(), enum_t_value);
+}
+inline bool Diagnostic_DiagnosticSeverity_Parse(
+    ::PROTOBUF_NAMESPACE_ID::ConstStringParam name, Diagnostic_DiagnosticSeverity* value) {
+  return ::PROTOBUF_NAMESPACE_ID::internal::ParseNamedEnum<Diagnostic_DiagnosticSeverity>(
+    Diagnostic_DiagnosticSeverity_descriptor(), name, value);
+}
+enum Diagnostic_DiagnosticTag : int {
+  Diagnostic_DiagnosticTag_NOT_SET_TAG = 0,
+  Diagnostic_DiagnosticTag_UNNECESSARY = 1,
+  Diagnostic_DiagnosticTag_DEPRECATED = 2,
+  Diagnostic_DiagnosticTag_Diagnostic_DiagnosticTag_INT_MIN_SENTINEL_DO_NOT_USE_ = std::numeric_limits<int32_t>::min(),
+  Diagnostic_DiagnosticTag_Diagnostic_DiagnosticTag_INT_MAX_SENTINEL_DO_NOT_USE_ = std::numeric_limits<int32_t>::max()
+};
+bool Diagnostic_DiagnosticTag_IsValid(int value);
+constexpr Diagnostic_DiagnosticTag Diagnostic_DiagnosticTag_DiagnosticTag_MIN = Diagnostic_DiagnosticTag_NOT_SET_TAG;
+constexpr Diagnostic_DiagnosticTag Diagnostic_DiagnosticTag_DiagnosticTag_MAX = Diagnostic_DiagnosticTag_DEPRECATED;
+constexpr int Diagnostic_DiagnosticTag_DiagnosticTag_ARRAYSIZE = Diagnostic_DiagnosticTag_DiagnosticTag_MAX + 1;
+
+const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* Diagnostic_DiagnosticTag_descriptor();
+template<typename T>
+inline const std::string& Diagnostic_DiagnosticTag_Name(T enum_t_value) {
+  static_assert(::std::is_same<T, Diagnostic_DiagnosticTag>::value ||
+    ::std::is_integral<T>::value,
+    "Incorrect type passed to function Diagnostic_DiagnosticTag_Name.");
+  return ::PROTOBUF_NAMESPACE_ID::internal::NameOfEnum(
+    Diagnostic_DiagnosticTag_descriptor(), enum_t_value);
+}
+inline bool Diagnostic_DiagnosticTag_Parse(
+    ::PROTOBUF_NAMESPACE_ID::ConstStringParam name, Diagnostic_DiagnosticTag* value) {
+  return ::PROTOBUF_NAMESPACE_ID::internal::ParseNamedEnum<Diagnostic_DiagnosticTag>(
+    Diagnostic_DiagnosticTag_descriptor(), name, value);
+}
 enum FigureDescriptor_ChartDescriptor_ChartType : int {
   FigureDescriptor_ChartDescriptor_ChartType_XY = 0,
   FigureDescriptor_ChartDescriptor_ChartType_PIE = 1,
@@ -2617,24 +2731,24 @@ class CancelCommandResponse final :
 };
 // -------------------------------------------------------------------
 
-class AutoCompleteRequest final :
-    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest) */ {
+class CancelAutoCompleteRequest final :
+    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:io.deephaven.proto.backplane.script.grpc.CancelAutoCompleteRequest) */ {
  public:
-  inline AutoCompleteRequest() : AutoCompleteRequest(nullptr) {}
-  ~AutoCompleteRequest() override;
-  explicit PROTOBUF_CONSTEXPR AutoCompleteRequest(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
+  inline CancelAutoCompleteRequest() : CancelAutoCompleteRequest(nullptr) {}
+  ~CancelAutoCompleteRequest() override;
+  explicit PROTOBUF_CONSTEXPR CancelAutoCompleteRequest(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
 
-  AutoCompleteRequest(const AutoCompleteRequest& from);
-  AutoCompleteRequest(AutoCompleteRequest&& from) noexcept
-    : AutoCompleteRequest() {
+  CancelAutoCompleteRequest(const CancelAutoCompleteRequest& from);
+  CancelAutoCompleteRequest(CancelAutoCompleteRequest&& from) noexcept
+    : CancelAutoCompleteRequest() {
     *this = ::std::move(from);
   }
 
-  inline AutoCompleteRequest& operator=(const AutoCompleteRequest& from) {
+  inline CancelAutoCompleteRequest& operator=(const CancelAutoCompleteRequest& from) {
     CopyFrom(from);
     return *this;
   }
-  inline AutoCompleteRequest& operator=(AutoCompleteRequest&& from) noexcept {
+  inline CancelAutoCompleteRequest& operator=(CancelAutoCompleteRequest&& from) noexcept {
     if (this == &from) return *this;
     if (GetOwningArena() == from.GetOwningArena()
   #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
@@ -2657,28 +2771,20 @@ class AutoCompleteRequest final :
   static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
     return default_instance().GetMetadata().reflection;
   }
-  static const AutoCompleteRequest& default_instance() {
+  static const CancelAutoCompleteRequest& default_instance() {
     return *internal_default_instance();
   }
-  enum RequestCase {
-    kOpenDocument = 1,
-    kChangeDocument = 2,
-    kGetCompletionItems = 3,
-    kCloseDocument = 4,
-    REQUEST_NOT_SET = 0,
-  };
-
-  static inline const AutoCompleteRequest* internal_default_instance() {
-    return reinterpret_cast<const AutoCompleteRequest*>(
-               &_AutoCompleteRequest_default_instance_);
+  static inline const CancelAutoCompleteRequest* internal_default_instance() {
+    return reinterpret_cast<const CancelAutoCompleteRequest*>(
+               &_CancelAutoCompleteRequest_default_instance_);
   }
   static constexpr int kIndexInFileMessages =
     14;
 
-  friend void swap(AutoCompleteRequest& a, AutoCompleteRequest& b) {
+  friend void swap(CancelAutoCompleteRequest& a, CancelAutoCompleteRequest& b) {
     a.Swap(&b);
   }
-  inline void Swap(AutoCompleteRequest* other) {
+  inline void Swap(CancelAutoCompleteRequest* other) {
     if (other == this) return;
   #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
     if (GetOwningArena() != nullptr &&
@@ -2691,7 +2797,7 @@ class AutoCompleteRequest final :
       ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
     }
   }
-  void UnsafeArenaSwap(AutoCompleteRequest* other) {
+  void UnsafeArenaSwap(CancelAutoCompleteRequest* other) {
     if (other == this) return;
     GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
     InternalSwap(other);
@@ -2699,13 +2805,13 @@ class AutoCompleteRequest final :
 
   // implements Message ----------------------------------------------
 
-  AutoCompleteRequest* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
-    return CreateMaybeMessage<AutoCompleteRequest>(arena);
+  CancelAutoCompleteRequest* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
+    return CreateMaybeMessage<CancelAutoCompleteRequest>(arena);
   }
   using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
-  void CopyFrom(const AutoCompleteRequest& from);
+  void CopyFrom(const CancelAutoCompleteRequest& from);
   using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
-  void MergeFrom(const AutoCompleteRequest& from);
+  void MergeFrom(const CancelAutoCompleteRequest& from);
   private:
   static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
   public:
@@ -2722,15 +2828,15 @@ class AutoCompleteRequest final :
   void SharedCtor();
   void SharedDtor();
   void SetCachedSize(int size) const final;
-  void InternalSwap(AutoCompleteRequest* other);
+  void InternalSwap(CancelAutoCompleteRequest* other);
 
   private:
   friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
   static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
-    return "io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest";
+    return "io.deephaven.proto.backplane.script.grpc.CancelAutoCompleteRequest";
   }
   protected:
-  explicit AutoCompleteRequest(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+  explicit CancelAutoCompleteRequest(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                        bool is_message_owned = false);
   public:
 
@@ -2744,132 +2850,67 @@ class AutoCompleteRequest final :
   // accessors -------------------------------------------------------
 
   enum : int {
-    kOpenDocumentFieldNumber = 1,
-    kChangeDocumentFieldNumber = 2,
-    kGetCompletionItemsFieldNumber = 3,
-    kCloseDocumentFieldNumber = 4,
+    kConsoleIdFieldNumber = 1,
+    kRequestIdFieldNumber = 2,
   };
-  // .io.deephaven.proto.backplane.script.grpc.OpenDocumentRequest open_document = 1;
-  bool has_open_document() const;
-  private:
-  bool _internal_has_open_document() const;
-  public:
-  void clear_open_document();
-  const ::io::deephaven::proto::backplane::script::grpc::OpenDocumentRequest& open_document() const;
-  PROTOBUF_NODISCARD ::io::deephaven::proto::backplane::script::grpc::OpenDocumentRequest* release_open_document();
-  ::io::deephaven::proto::backplane::script::grpc::OpenDocumentRequest* mutable_open_document();
-  void set_allocated_open_document(::io::deephaven::proto::backplane::script::grpc::OpenDocumentRequest* open_document);
-  private:
-  const ::io::deephaven::proto::backplane::script::grpc::OpenDocumentRequest& _internal_open_document() const;
-  ::io::deephaven::proto::backplane::script::grpc::OpenDocumentRequest* _internal_mutable_open_document();
-  public:
-  void unsafe_arena_set_allocated_open_document(
-      ::io::deephaven::proto::backplane::script::grpc::OpenDocumentRequest* open_document);
-  ::io::deephaven::proto::backplane::script::grpc::OpenDocumentRequest* unsafe_arena_release_open_document();
-
-  // .io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest change_document = 2;
-  bool has_change_document() const;
-  private:
-  bool _internal_has_change_document() const;
-  public:
-  void clear_change_document();
-  const ::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest& change_document() const;
-  PROTOBUF_NODISCARD ::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest* release_change_document();
-  ::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest* mutable_change_document();
-  void set_allocated_change_document(::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest* change_document);
-  private:
-  const ::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest& _internal_change_document() const;
-  ::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest* _internal_mutable_change_document();
-  public:
-  void unsafe_arena_set_allocated_change_document(
-      ::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest* change_document);
-  ::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest* unsafe_arena_release_change_document();
-
-  // .io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest get_completion_items = 3;
-  bool has_get_completion_items() const;
+  // .io.deephaven.proto.backplane.grpc.Ticket console_id = 1;
+  bool has_console_id() const;
   private:
-  bool _internal_has_get_completion_items() const;
+  bool _internal_has_console_id() const;
   public:
-  void clear_get_completion_items();
-  const ::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsRequest& get_completion_items() const;
-  PROTOBUF_NODISCARD ::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsRequest* release_get_completion_items();
-  ::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsRequest* mutable_get_completion_items();
-  void set_allocated_get_completion_items(::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsRequest* get_completion_items);
+  void clear_console_id();
+  const ::io::deephaven::proto::backplane::grpc::Ticket& console_id() const;
+  PROTOBUF_NODISCARD ::io::deephaven::proto::backplane::grpc::Ticket* release_console_id();
+  ::io::deephaven::proto::backplane::grpc::Ticket* mutable_console_id();
+  void set_allocated_console_id(::io::deephaven::proto::backplane::grpc::Ticket* console_id);
   private:
-  const ::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsRequest& _internal_get_completion_items() const;
-  ::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsRequest* _internal_mutable_get_completion_items();
+  const ::io::deephaven::proto::backplane::grpc::Ticket& _internal_console_id() const;
+  ::io::deephaven::proto::backplane::grpc::Ticket* _internal_mutable_console_id();
   public:
-  void unsafe_arena_set_allocated_get_completion_items(
-      ::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsRequest* get_completion_items);
-  ::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsRequest* unsafe_arena_release_get_completion_items();
+  void unsafe_arena_set_allocated_console_id(
+      ::io::deephaven::proto::backplane::grpc::Ticket* console_id);
+  ::io::deephaven::proto::backplane::grpc::Ticket* unsafe_arena_release_console_id();
 
-  // .io.deephaven.proto.backplane.script.grpc.CloseDocumentRequest close_document = 4;
-  bool has_close_document() const;
-  private:
-  bool _internal_has_close_document() const;
-  public:
-  void clear_close_document();
-  const ::io::deephaven::proto::backplane::script::grpc::CloseDocumentRequest& close_document() const;
-  PROTOBUF_NODISCARD ::io::deephaven::proto::backplane::script::grpc::CloseDocumentRequest* release_close_document();
-  ::io::deephaven::proto::backplane::script::grpc::CloseDocumentRequest* mutable_close_document();
-  void set_allocated_close_document(::io::deephaven::proto::backplane::script::grpc::CloseDocumentRequest* close_document);
+  // int32 request_id = 2;
+  void clear_request_id();
+  int32_t request_id() const;
+  void set_request_id(int32_t value);
   private:
-  const ::io::deephaven::proto::backplane::script::grpc::CloseDocumentRequest& _internal_close_document() const;
-  ::io::deephaven::proto::backplane::script::grpc::CloseDocumentRequest* _internal_mutable_close_document();
+  int32_t _internal_request_id() const;
+  void _internal_set_request_id(int32_t value);
   public:
-  void unsafe_arena_set_allocated_close_document(
-      ::io::deephaven::proto::backplane::script::grpc::CloseDocumentRequest* close_document);
-  ::io::deephaven::proto::backplane::script::grpc::CloseDocumentRequest* unsafe_arena_release_close_document();
 
-  void clear_request();
-  RequestCase request_case() const;
-  // @@protoc_insertion_point(class_scope:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest)
+  // @@protoc_insertion_point(class_scope:io.deephaven.proto.backplane.script.grpc.CancelAutoCompleteRequest)
  private:
   class _Internal;
-  void set_has_open_document();
-  void set_has_change_document();
-  void set_has_get_completion_items();
-  void set_has_close_document();
-
-  inline bool has_request() const;
-  inline void clear_has_request();
 
   template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
   typedef void InternalArenaConstructable_;
   typedef void DestructorSkippable_;
-  union RequestUnion {
-    constexpr RequestUnion() : _constinit_{} {}
-      ::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized _constinit_;
-    ::io::deephaven::proto::backplane::script::grpc::OpenDocumentRequest* open_document_;
-    ::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest* change_document_;
-    ::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsRequest* get_completion_items_;
-    ::io::deephaven::proto::backplane::script::grpc::CloseDocumentRequest* close_document_;
-  } request_;
+  ::io::deephaven::proto::backplane::grpc::Ticket* console_id_;
+  int32_t request_id_;
   mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
-  uint32_t _oneof_case_[1];
-
   friend struct ::TableStruct_deephaven_2fproto_2fconsole_2eproto;
 };
 // -------------------------------------------------------------------
 
-class AutoCompleteResponse final :
-    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:io.deephaven.proto.backplane.script.grpc.AutoCompleteResponse) */ {
+class CancelAutoCompleteResponse final :
+    public ::PROTOBUF_NAMESPACE_ID::internal::ZeroFieldsBase /* @@protoc_insertion_point(class_definition:io.deephaven.proto.backplane.script.grpc.CancelAutoCompleteResponse) */ {
  public:
-  inline AutoCompleteResponse() : AutoCompleteResponse(nullptr) {}
-  ~AutoCompleteResponse() override;
-  explicit PROTOBUF_CONSTEXPR AutoCompleteResponse(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
+  inline CancelAutoCompleteResponse() : CancelAutoCompleteResponse(nullptr) {}
+  explicit PROTOBUF_CONSTEXPR CancelAutoCompleteResponse(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
 
-  AutoCompleteResponse(const AutoCompleteResponse& from);
-  AutoCompleteResponse(AutoCompleteResponse&& from) noexcept
-    : AutoCompleteResponse() {
+  CancelAutoCompleteResponse(const CancelAutoCompleteResponse& from);
+  CancelAutoCompleteResponse(CancelAutoCompleteResponse&& from) noexcept
+    : CancelAutoCompleteResponse() {
     *this = ::std::move(from);
   }
 
-  inline AutoCompleteResponse& operator=(const AutoCompleteResponse& from) {
+  inline CancelAutoCompleteResponse& operator=(const CancelAutoCompleteResponse& from) {
     CopyFrom(from);
     return *this;
   }
-  inline AutoCompleteResponse& operator=(AutoCompleteResponse&& from) noexcept {
+  inline CancelAutoCompleteResponse& operator=(CancelAutoCompleteResponse&& from) noexcept {
     if (this == &from) return *this;
     if (GetOwningArena() == from.GetOwningArena()
   #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
@@ -2892,25 +2933,20 @@ class AutoCompleteResponse final :
   static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
     return default_instance().GetMetadata().reflection;
   }
-  static const AutoCompleteResponse& default_instance() {
+  static const CancelAutoCompleteResponse& default_instance() {
     return *internal_default_instance();
   }
-  enum ResponseCase {
-    kCompletionItems = 1,
-    RESPONSE_NOT_SET = 0,
-  };
-
-  static inline const AutoCompleteResponse* internal_default_instance() {
-    return reinterpret_cast<const AutoCompleteResponse*>(
-               &_AutoCompleteResponse_default_instance_);
+  static inline const CancelAutoCompleteResponse* internal_default_instance() {
+    return reinterpret_cast<const CancelAutoCompleteResponse*>(
+               &_CancelAutoCompleteResponse_default_instance_);
   }
   static constexpr int kIndexInFileMessages =
     15;
 
-  friend void swap(AutoCompleteResponse& a, AutoCompleteResponse& b) {
+  friend void swap(CancelAutoCompleteResponse& a, CancelAutoCompleteResponse& b) {
     a.Swap(&b);
   }
-  inline void Swap(AutoCompleteResponse* other) {
+  inline void Swap(CancelAutoCompleteResponse* other) {
     if (other == this) return;
   #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
     if (GetOwningArena() != nullptr &&
@@ -2923,7 +2959,7 @@ class AutoCompleteResponse final :
       ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
     }
   }
-  void UnsafeArenaSwap(AutoCompleteResponse* other) {
+  void UnsafeArenaSwap(CancelAutoCompleteResponse* other) {
     if (other == this) return;
     GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
     InternalSwap(other);
@@ -2931,38 +2967,26 @@ class AutoCompleteResponse final :
 
   // implements Message ----------------------------------------------
 
-  AutoCompleteResponse* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
-    return CreateMaybeMessage<AutoCompleteResponse>(arena);
+  CancelAutoCompleteResponse* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
+    return CreateMaybeMessage<CancelAutoCompleteResponse>(arena);
+  }
+  using ::PROTOBUF_NAMESPACE_ID::internal::ZeroFieldsBase::CopyFrom;
+  inline void CopyFrom(const CancelAutoCompleteResponse& from) {
+    ::PROTOBUF_NAMESPACE_ID::internal::ZeroFieldsBase::CopyImpl(this, from);
+  }
+  using ::PROTOBUF_NAMESPACE_ID::internal::ZeroFieldsBase::MergeFrom;
+  void MergeFrom(const CancelAutoCompleteResponse& from) {
+    ::PROTOBUF_NAMESPACE_ID::internal::ZeroFieldsBase::MergeImpl(this, from);
   }
-  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
-  void CopyFrom(const AutoCompleteResponse& from);
-  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
-  void MergeFrom(const AutoCompleteResponse& from);
-  private:
-  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
   public:
-  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
-  bool IsInitialized() const final;
-
-  size_t ByteSizeLong() const final;
-  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
-  uint8_t* _InternalSerialize(
-      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
-  int GetCachedSize() const final { return _cached_size_.Get(); }
-
-  private:
-  void SharedCtor();
-  void SharedDtor();
-  void SetCachedSize(int size) const final;
-  void InternalSwap(AutoCompleteResponse* other);
 
   private:
   friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
   static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
-    return "io.deephaven.proto.backplane.script.grpc.AutoCompleteResponse";
+    return "io.deephaven.proto.backplane.script.grpc.CancelAutoCompleteResponse";
   }
   protected:
-  explicit AutoCompleteResponse(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+  explicit CancelAutoCompleteResponse(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                        bool is_message_owned = false);
   public:
 
@@ -2975,69 +2999,35 @@ class AutoCompleteResponse final :
 
   // accessors -------------------------------------------------------
 
-  enum : int {
-    kCompletionItemsFieldNumber = 1,
-  };
-  // .io.deephaven.proto.backplane.script.grpc.GetCompletionItemsResponse completion_items = 1;
-  bool has_completion_items() const;
-  private:
-  bool _internal_has_completion_items() const;
-  public:
-  void clear_completion_items();
-  const ::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsResponse& completion_items() const;
-  PROTOBUF_NODISCARD ::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsResponse* release_completion_items();
-  ::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsResponse* mutable_completion_items();
-  void set_allocated_completion_items(::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsResponse* completion_items);
-  private:
-  const ::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsResponse& _internal_completion_items() const;
-  ::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsResponse* _internal_mutable_completion_items();
-  public:
-  void unsafe_arena_set_allocated_completion_items(
-      ::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsResponse* completion_items);
-  ::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsResponse* unsafe_arena_release_completion_items();
-
-  void clear_response();
-  ResponseCase response_case() const;
-  // @@protoc_insertion_point(class_scope:io.deephaven.proto.backplane.script.grpc.AutoCompleteResponse)
+  // @@protoc_insertion_point(class_scope:io.deephaven.proto.backplane.script.grpc.CancelAutoCompleteResponse)
  private:
   class _Internal;
-  void set_has_completion_items();
-
-  inline bool has_response() const;
-  inline void clear_has_response();
 
   template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
   typedef void InternalArenaConstructable_;
   typedef void DestructorSkippable_;
-  union ResponseUnion {
-    constexpr ResponseUnion() : _constinit_{} {}
-      ::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized _constinit_;
-    ::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsResponse* completion_items_;
-  } response_;
-  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
-  uint32_t _oneof_case_[1];
-
   friend struct ::TableStruct_deephaven_2fproto_2fconsole_2eproto;
 };
 // -------------------------------------------------------------------
 
-class BrowserNextResponse final :
-    public ::PROTOBUF_NAMESPACE_ID::internal::ZeroFieldsBase /* @@protoc_insertion_point(class_definition:io.deephaven.proto.backplane.script.grpc.BrowserNextResponse) */ {
+class AutoCompleteRequest final :
+    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest) */ {
  public:
-  inline BrowserNextResponse() : BrowserNextResponse(nullptr) {}
-  explicit PROTOBUF_CONSTEXPR BrowserNextResponse(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
+  inline AutoCompleteRequest() : AutoCompleteRequest(nullptr) {}
+  ~AutoCompleteRequest() override;
+  explicit PROTOBUF_CONSTEXPR AutoCompleteRequest(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
 
-  BrowserNextResponse(const BrowserNextResponse& from);
-  BrowserNextResponse(BrowserNextResponse&& from) noexcept
-    : BrowserNextResponse() {
-    *this = ::std::move(from);
+  AutoCompleteRequest(const AutoCompleteRequest& from);
+  AutoCompleteRequest(AutoCompleteRequest&& from) noexcept
+    : AutoCompleteRequest() {
+    *this = ::std::move(from);
   }
 
-  inline BrowserNextResponse& operator=(const BrowserNextResponse& from) {
+  inline AutoCompleteRequest& operator=(const AutoCompleteRequest& from) {
     CopyFrom(from);
     return *this;
   }
-  inline BrowserNextResponse& operator=(BrowserNextResponse&& from) noexcept {
+  inline AutoCompleteRequest& operator=(AutoCompleteRequest&& from) noexcept {
     if (this == &from) return *this;
     if (GetOwningArena() == from.GetOwningArena()
   #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
@@ -3060,20 +3050,31 @@ class BrowserNextResponse final :
   static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
     return default_instance().GetMetadata().reflection;
   }
-  static const BrowserNextResponse& default_instance() {
+  static const AutoCompleteRequest& default_instance() {
     return *internal_default_instance();
   }
-  static inline const BrowserNextResponse* internal_default_instance() {
-    return reinterpret_cast<const BrowserNextResponse*>(
-               &_BrowserNextResponse_default_instance_);
+  enum RequestCase {
+    kOpenDocument = 1,
+    kChangeDocument = 2,
+    kGetCompletionItems = 3,
+    kGetSignatureHelp = 7,
+    kGetHover = 8,
+    kGetDiagnostic = 9,
+    kCloseDocument = 4,
+    REQUEST_NOT_SET = 0,
+  };
+
+  static inline const AutoCompleteRequest* internal_default_instance() {
+    return reinterpret_cast<const AutoCompleteRequest*>(
+               &_AutoCompleteRequest_default_instance_);
   }
   static constexpr int kIndexInFileMessages =
     16;
 
-  friend void swap(BrowserNextResponse& a, BrowserNextResponse& b) {
+  friend void swap(AutoCompleteRequest& a, AutoCompleteRequest& b) {
     a.Swap(&b);
   }
-  inline void Swap(BrowserNextResponse* other) {
+  inline void Swap(AutoCompleteRequest* other) {
     if (other == this) return;
   #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
     if (GetOwningArena() != nullptr &&
@@ -3086,7 +3087,7 @@ class BrowserNextResponse final :
       ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
     }
   }
-  void UnsafeArenaSwap(BrowserNextResponse* other) {
+  void UnsafeArenaSwap(AutoCompleteRequest* other) {
     if (other == this) return;
     GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
     InternalSwap(other);
@@ -3094,26 +3095,38 @@ class BrowserNextResponse final :
 
   // implements Message ----------------------------------------------
 
-  BrowserNextResponse* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
-    return CreateMaybeMessage<BrowserNextResponse>(arena);
-  }
-  using ::PROTOBUF_NAMESPACE_ID::internal::ZeroFieldsBase::CopyFrom;
-  inline void CopyFrom(const BrowserNextResponse& from) {
-    ::PROTOBUF_NAMESPACE_ID::internal::ZeroFieldsBase::CopyImpl(this, from);
-  }
-  using ::PROTOBUF_NAMESPACE_ID::internal::ZeroFieldsBase::MergeFrom;
-  void MergeFrom(const BrowserNextResponse& from) {
-    ::PROTOBUF_NAMESPACE_ID::internal::ZeroFieldsBase::MergeImpl(this, from);
+  AutoCompleteRequest* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
+    return CreateMaybeMessage<AutoCompleteRequest>(arena);
   }
+  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
+  void CopyFrom(const AutoCompleteRequest& from);
+  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
+  void MergeFrom(const AutoCompleteRequest& from);
+  private:
+  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
   public:
+  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
+  bool IsInitialized() const final;
+
+  size_t ByteSizeLong() const final;
+  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
+  uint8_t* _InternalSerialize(
+      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
+  int GetCachedSize() const final { return _cached_size_.Get(); }
+
+  private:
+  void SharedCtor();
+  void SharedDtor();
+  void SetCachedSize(int size) const final;
+  void InternalSwap(AutoCompleteRequest* other);
 
   private:
   friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
   static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
-    return "io.deephaven.proto.backplane.script.grpc.BrowserNextResponse";
+    return "io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest";
   }
   protected:
-  explicit BrowserNextResponse(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+  explicit AutoCompleteRequest(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                        bool is_message_owned = false);
   public:
 
@@ -3126,35 +3139,227 @@ class BrowserNextResponse final :
 
   // accessors -------------------------------------------------------
 
-  // @@protoc_insertion_point(class_scope:io.deephaven.proto.backplane.script.grpc.BrowserNextResponse)
+  enum : int {
+    kConsoleIdFieldNumber = 5,
+    kRequestIdFieldNumber = 6,
+    kOpenDocumentFieldNumber = 1,
+    kChangeDocumentFieldNumber = 2,
+    kGetCompletionItemsFieldNumber = 3,
+    kGetSignatureHelpFieldNumber = 7,
+    kGetHoverFieldNumber = 8,
+    kGetDiagnosticFieldNumber = 9,
+    kCloseDocumentFieldNumber = 4,
+  };
+  // .io.deephaven.proto.backplane.grpc.Ticket console_id = 5;
+  bool has_console_id() const;
+  private:
+  bool _internal_has_console_id() const;
+  public:
+  void clear_console_id();
+  const ::io::deephaven::proto::backplane::grpc::Ticket& console_id() const;
+  PROTOBUF_NODISCARD ::io::deephaven::proto::backplane::grpc::Ticket* release_console_id();
+  ::io::deephaven::proto::backplane::grpc::Ticket* mutable_console_id();
+  void set_allocated_console_id(::io::deephaven::proto::backplane::grpc::Ticket* console_id);
+  private:
+  const ::io::deephaven::proto::backplane::grpc::Ticket& _internal_console_id() const;
+  ::io::deephaven::proto::backplane::grpc::Ticket* _internal_mutable_console_id();
+  public:
+  void unsafe_arena_set_allocated_console_id(
+      ::io::deephaven::proto::backplane::grpc::Ticket* console_id);
+  ::io::deephaven::proto::backplane::grpc::Ticket* unsafe_arena_release_console_id();
+
+  // int32 request_id = 6;
+  void clear_request_id();
+  int32_t request_id() const;
+  void set_request_id(int32_t value);
+  private:
+  int32_t _internal_request_id() const;
+  void _internal_set_request_id(int32_t value);
+  public:
+
+  // .io.deephaven.proto.backplane.script.grpc.OpenDocumentRequest open_document = 1;
+  bool has_open_document() const;
+  private:
+  bool _internal_has_open_document() const;
+  public:
+  void clear_open_document();
+  const ::io::deephaven::proto::backplane::script::grpc::OpenDocumentRequest& open_document() const;
+  PROTOBUF_NODISCARD ::io::deephaven::proto::backplane::script::grpc::OpenDocumentRequest* release_open_document();
+  ::io::deephaven::proto::backplane::script::grpc::OpenDocumentRequest* mutable_open_document();
+  void set_allocated_open_document(::io::deephaven::proto::backplane::script::grpc::OpenDocumentRequest* open_document);
+  private:
+  const ::io::deephaven::proto::backplane::script::grpc::OpenDocumentRequest& _internal_open_document() const;
+  ::io::deephaven::proto::backplane::script::grpc::OpenDocumentRequest* _internal_mutable_open_document();
+  public:
+  void unsafe_arena_set_allocated_open_document(
+      ::io::deephaven::proto::backplane::script::grpc::OpenDocumentRequest* open_document);
+  ::io::deephaven::proto::backplane::script::grpc::OpenDocumentRequest* unsafe_arena_release_open_document();
+
+  // .io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest change_document = 2;
+  bool has_change_document() const;
+  private:
+  bool _internal_has_change_document() const;
+  public:
+  void clear_change_document();
+  const ::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest& change_document() const;
+  PROTOBUF_NODISCARD ::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest* release_change_document();
+  ::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest* mutable_change_document();
+  void set_allocated_change_document(::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest* change_document);
+  private:
+  const ::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest& _internal_change_document() const;
+  ::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest* _internal_mutable_change_document();
+  public:
+  void unsafe_arena_set_allocated_change_document(
+      ::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest* change_document);
+  ::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest* unsafe_arena_release_change_document();
+
+  // .io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest get_completion_items = 3;
+  bool has_get_completion_items() const;
+  private:
+  bool _internal_has_get_completion_items() const;
+  public:
+  void clear_get_completion_items();
+  const ::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsRequest& get_completion_items() const;
+  PROTOBUF_NODISCARD ::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsRequest* release_get_completion_items();
+  ::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsRequest* mutable_get_completion_items();
+  void set_allocated_get_completion_items(::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsRequest* get_completion_items);
+  private:
+  const ::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsRequest& _internal_get_completion_items() const;
+  ::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsRequest* _internal_mutable_get_completion_items();
+  public:
+  void unsafe_arena_set_allocated_get_completion_items(
+      ::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsRequest* get_completion_items);
+  ::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsRequest* unsafe_arena_release_get_completion_items();
+
+  // .io.deephaven.proto.backplane.script.grpc.GetSignatureHelpRequest get_signature_help = 7;
+  bool has_get_signature_help() const;
+  private:
+  bool _internal_has_get_signature_help() const;
+  public:
+  void clear_get_signature_help();
+  const ::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpRequest& get_signature_help() const;
+  PROTOBUF_NODISCARD ::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpRequest* release_get_signature_help();
+  ::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpRequest* mutable_get_signature_help();
+  void set_allocated_get_signature_help(::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpRequest* get_signature_help);
+  private:
+  const ::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpRequest& _internal_get_signature_help() const;
+  ::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpRequest* _internal_mutable_get_signature_help();
+  public:
+  void unsafe_arena_set_allocated_get_signature_help(
+      ::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpRequest* get_signature_help);
+  ::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpRequest* unsafe_arena_release_get_signature_help();
+
+  // .io.deephaven.proto.backplane.script.grpc.GetHoverRequest get_hover = 8;
+  bool has_get_hover() const;
+  private:
+  bool _internal_has_get_hover() const;
+  public:
+  void clear_get_hover();
+  const ::io::deephaven::proto::backplane::script::grpc::GetHoverRequest& get_hover() const;
+  PROTOBUF_NODISCARD ::io::deephaven::proto::backplane::script::grpc::GetHoverRequest* release_get_hover();
+  ::io::deephaven::proto::backplane::script::grpc::GetHoverRequest* mutable_get_hover();
+  void set_allocated_get_hover(::io::deephaven::proto::backplane::script::grpc::GetHoverRequest* get_hover);
+  private:
+  const ::io::deephaven::proto::backplane::script::grpc::GetHoverRequest& _internal_get_hover() const;
+  ::io::deephaven::proto::backplane::script::grpc::GetHoverRequest* _internal_mutable_get_hover();
+  public:
+  void unsafe_arena_set_allocated_get_hover(
+      ::io::deephaven::proto::backplane::script::grpc::GetHoverRequest* get_hover);
+  ::io::deephaven::proto::backplane::script::grpc::GetHoverRequest* unsafe_arena_release_get_hover();
+
+  // .io.deephaven.proto.backplane.script.grpc.GetDiagnosticRequest get_diagnostic = 9;
+  bool has_get_diagnostic() const;
+  private:
+  bool _internal_has_get_diagnostic() const;
+  public:
+  void clear_get_diagnostic();
+  const ::io::deephaven::proto::backplane::script::grpc::GetDiagnosticRequest& get_diagnostic() const;
+  PROTOBUF_NODISCARD ::io::deephaven::proto::backplane::script::grpc::GetDiagnosticRequest* release_get_diagnostic();
+  ::io::deephaven::proto::backplane::script::grpc::GetDiagnosticRequest* mutable_get_diagnostic();
+  void set_allocated_get_diagnostic(::io::deephaven::proto::backplane::script::grpc::GetDiagnosticRequest* get_diagnostic);
+  private:
+  const ::io::deephaven::proto::backplane::script::grpc::GetDiagnosticRequest& _internal_get_diagnostic() const;
+  ::io::deephaven::proto::backplane::script::grpc::GetDiagnosticRequest* _internal_mutable_get_diagnostic();
+  public:
+  void unsafe_arena_set_allocated_get_diagnostic(
+      ::io::deephaven::proto::backplane::script::grpc::GetDiagnosticRequest* get_diagnostic);
+  ::io::deephaven::proto::backplane::script::grpc::GetDiagnosticRequest* unsafe_arena_release_get_diagnostic();
+
+  // .io.deephaven.proto.backplane.script.grpc.CloseDocumentRequest close_document = 4;
+  bool has_close_document() const;
+  private:
+  bool _internal_has_close_document() const;
+  public:
+  void clear_close_document();
+  const ::io::deephaven::proto::backplane::script::grpc::CloseDocumentRequest& close_document() const;
+  PROTOBUF_NODISCARD ::io::deephaven::proto::backplane::script::grpc::CloseDocumentRequest* release_close_document();
+  ::io::deephaven::proto::backplane::script::grpc::CloseDocumentRequest* mutable_close_document();
+  void set_allocated_close_document(::io::deephaven::proto::backplane::script::grpc::CloseDocumentRequest* close_document);
+  private:
+  const ::io::deephaven::proto::backplane::script::grpc::CloseDocumentRequest& _internal_close_document() const;
+  ::io::deephaven::proto::backplane::script::grpc::CloseDocumentRequest* _internal_mutable_close_document();
+  public:
+  void unsafe_arena_set_allocated_close_document(
+      ::io::deephaven::proto::backplane::script::grpc::CloseDocumentRequest* close_document);
+  ::io::deephaven::proto::backplane::script::grpc::CloseDocumentRequest* unsafe_arena_release_close_document();
+
+  void clear_request();
+  RequestCase request_case() const;
+  // @@protoc_insertion_point(class_scope:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest)
  private:
   class _Internal;
+  void set_has_open_document();
+  void set_has_change_document();
+  void set_has_get_completion_items();
+  void set_has_get_signature_help();
+  void set_has_get_hover();
+  void set_has_get_diagnostic();
+  void set_has_close_document();
+
+  inline bool has_request() const;
+  inline void clear_has_request();
 
   template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
   typedef void InternalArenaConstructable_;
   typedef void DestructorSkippable_;
+  ::io::deephaven::proto::backplane::grpc::Ticket* console_id_;
+  int32_t request_id_;
+  union RequestUnion {
+    constexpr RequestUnion() : _constinit_{} {}
+      ::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized _constinit_;
+    ::io::deephaven::proto::backplane::script::grpc::OpenDocumentRequest* open_document_;
+    ::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest* change_document_;
+    ::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsRequest* get_completion_items_;
+    ::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpRequest* get_signature_help_;
+    ::io::deephaven::proto::backplane::script::grpc::GetHoverRequest* get_hover_;
+    ::io::deephaven::proto::backplane::script::grpc::GetDiagnosticRequest* get_diagnostic_;
+    ::io::deephaven::proto::backplane::script::grpc::CloseDocumentRequest* close_document_;
+  } request_;
+  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
+  uint32_t _oneof_case_[1];
+
   friend struct ::TableStruct_deephaven_2fproto_2fconsole_2eproto;
 };
 // -------------------------------------------------------------------
 
-class OpenDocumentRequest final :
-    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:io.deephaven.proto.backplane.script.grpc.OpenDocumentRequest) */ {
+class AutoCompleteResponse final :
+    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:io.deephaven.proto.backplane.script.grpc.AutoCompleteResponse) */ {
  public:
-  inline OpenDocumentRequest() : OpenDocumentRequest(nullptr) {}
-  ~OpenDocumentRequest() override;
-  explicit PROTOBUF_CONSTEXPR OpenDocumentRequest(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
+  inline AutoCompleteResponse() : AutoCompleteResponse(nullptr) {}
+  ~AutoCompleteResponse() override;
+  explicit PROTOBUF_CONSTEXPR AutoCompleteResponse(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
 
-  OpenDocumentRequest(const OpenDocumentRequest& from);
-  OpenDocumentRequest(OpenDocumentRequest&& from) noexcept
-    : OpenDocumentRequest() {
+  AutoCompleteResponse(const AutoCompleteResponse& from);
+  AutoCompleteResponse(AutoCompleteResponse&& from) noexcept
+    : AutoCompleteResponse() {
     *this = ::std::move(from);
   }
 
-  inline OpenDocumentRequest& operator=(const OpenDocumentRequest& from) {
+  inline AutoCompleteResponse& operator=(const AutoCompleteResponse& from) {
     CopyFrom(from);
     return *this;
   }
-  inline OpenDocumentRequest& operator=(OpenDocumentRequest&& from) noexcept {
+  inline AutoCompleteResponse& operator=(AutoCompleteResponse&& from) noexcept {
     if (this == &from) return *this;
     if (GetOwningArena() == from.GetOwningArena()
   #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
@@ -3177,20 +3382,29 @@ class OpenDocumentRequest final :
   static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
     return default_instance().GetMetadata().reflection;
   }
-  static const OpenDocumentRequest& default_instance() {
+  static const AutoCompleteResponse& default_instance() {
     return *internal_default_instance();
   }
-  static inline const OpenDocumentRequest* internal_default_instance() {
-    return reinterpret_cast<const OpenDocumentRequest*>(
-               &_OpenDocumentRequest_default_instance_);
+  enum ResponseCase {
+    kCompletionItems = 1,
+    kSignatures = 4,
+    kHover = 5,
+    kDiagnostic = 6,
+    kDiagnosticPublish = 7,
+    RESPONSE_NOT_SET = 0,
+  };
+
+  static inline const AutoCompleteResponse* internal_default_instance() {
+    return reinterpret_cast<const AutoCompleteResponse*>(
+               &_AutoCompleteResponse_default_instance_);
   }
   static constexpr int kIndexInFileMessages =
     17;
 
-  friend void swap(OpenDocumentRequest& a, OpenDocumentRequest& b) {
+  friend void swap(AutoCompleteResponse& a, AutoCompleteResponse& b) {
     a.Swap(&b);
   }
-  inline void Swap(OpenDocumentRequest* other) {
+  inline void Swap(AutoCompleteResponse* other) {
     if (other == this) return;
   #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
     if (GetOwningArena() != nullptr &&
@@ -3203,7 +3417,7 @@ class OpenDocumentRequest final :
       ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
     }
   }
-  void UnsafeArenaSwap(OpenDocumentRequest* other) {
+  void UnsafeArenaSwap(AutoCompleteResponse* other) {
     if (other == this) return;
     GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
     InternalSwap(other);
@@ -3211,13 +3425,13 @@ class OpenDocumentRequest final :
 
   // implements Message ----------------------------------------------
 
-  OpenDocumentRequest* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
-    return CreateMaybeMessage<OpenDocumentRequest>(arena);
+  AutoCompleteResponse* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
+    return CreateMaybeMessage<AutoCompleteResponse>(arena);
   }
   using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
-  void CopyFrom(const OpenDocumentRequest& from);
+  void CopyFrom(const AutoCompleteResponse& from);
   using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
-  void MergeFrom(const OpenDocumentRequest& from);
+  void MergeFrom(const AutoCompleteResponse& from);
   private:
   static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
   public:
@@ -3234,15 +3448,15 @@ class OpenDocumentRequest final :
   void SharedCtor();
   void SharedDtor();
   void SetCachedSize(int size) const final;
-  void InternalSwap(OpenDocumentRequest* other);
+  void InternalSwap(AutoCompleteResponse* other);
 
   private:
   friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
   static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
-    return "io.deephaven.proto.backplane.script.grpc.OpenDocumentRequest";
+    return "io.deephaven.proto.backplane.script.grpc.AutoCompleteResponse";
   }
   protected:
-  explicit OpenDocumentRequest(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+  explicit AutoCompleteResponse(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                        bool is_message_owned = false);
   public:
 
@@ -3256,77 +3470,174 @@ class OpenDocumentRequest final :
   // accessors -------------------------------------------------------
 
   enum : int {
-    kConsoleIdFieldNumber = 1,
-    kTextDocumentFieldNumber = 2,
+    kRequestIdFieldNumber = 2,
+    kSuccessFieldNumber = 3,
+    kCompletionItemsFieldNumber = 1,
+    kSignaturesFieldNumber = 4,
+    kHoverFieldNumber = 5,
+    kDiagnosticFieldNumber = 6,
+    kDiagnosticPublishFieldNumber = 7,
   };
-  // .io.deephaven.proto.backplane.grpc.Ticket console_id = 1;
-  bool has_console_id() const;
+  // int32 request_id = 2;
+  void clear_request_id();
+  int32_t request_id() const;
+  void set_request_id(int32_t value);
   private:
-  bool _internal_has_console_id() const;
+  int32_t _internal_request_id() const;
+  void _internal_set_request_id(int32_t value);
   public:
-  void clear_console_id();
-  const ::io::deephaven::proto::backplane::grpc::Ticket& console_id() const;
-  PROTOBUF_NODISCARD ::io::deephaven::proto::backplane::grpc::Ticket* release_console_id();
-  ::io::deephaven::proto::backplane::grpc::Ticket* mutable_console_id();
-  void set_allocated_console_id(::io::deephaven::proto::backplane::grpc::Ticket* console_id);
+
+  // bool success = 3;
+  void clear_success();
+  bool success() const;
+  void set_success(bool value);
   private:
-  const ::io::deephaven::proto::backplane::grpc::Ticket& _internal_console_id() const;
-  ::io::deephaven::proto::backplane::grpc::Ticket* _internal_mutable_console_id();
+  bool _internal_success() const;
+  void _internal_set_success(bool value);
   public:
-  void unsafe_arena_set_allocated_console_id(
-      ::io::deephaven::proto::backplane::grpc::Ticket* console_id);
-  ::io::deephaven::proto::backplane::grpc::Ticket* unsafe_arena_release_console_id();
 
-  // .io.deephaven.proto.backplane.script.grpc.TextDocumentItem text_document = 2;
-  bool has_text_document() const;
+  // .io.deephaven.proto.backplane.script.grpc.GetCompletionItemsResponse completion_items = 1;
+  bool has_completion_items() const;
   private:
-  bool _internal_has_text_document() const;
+  bool _internal_has_completion_items() const;
   public:
-  void clear_text_document();
-  const ::io::deephaven::proto::backplane::script::grpc::TextDocumentItem& text_document() const;
-  PROTOBUF_NODISCARD ::io::deephaven::proto::backplane::script::grpc::TextDocumentItem* release_text_document();
-  ::io::deephaven::proto::backplane::script::grpc::TextDocumentItem* mutable_text_document();
-  void set_allocated_text_document(::io::deephaven::proto::backplane::script::grpc::TextDocumentItem* text_document);
+  void clear_completion_items();
+  const ::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsResponse& completion_items() const;
+  PROTOBUF_NODISCARD ::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsResponse* release_completion_items();
+  ::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsResponse* mutable_completion_items();
+  void set_allocated_completion_items(::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsResponse* completion_items);
   private:
-  const ::io::deephaven::proto::backplane::script::grpc::TextDocumentItem& _internal_text_document() const;
-  ::io::deephaven::proto::backplane::script::grpc::TextDocumentItem* _internal_mutable_text_document();
+  const ::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsResponse& _internal_completion_items() const;
+  ::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsResponse* _internal_mutable_completion_items();
   public:
-  void unsafe_arena_set_allocated_text_document(
-      ::io::deephaven::proto::backplane::script::grpc::TextDocumentItem* text_document);
-  ::io::deephaven::proto::backplane::script::grpc::TextDocumentItem* unsafe_arena_release_text_document();
+  void unsafe_arena_set_allocated_completion_items(
+      ::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsResponse* completion_items);
+  ::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsResponse* unsafe_arena_release_completion_items();
 
-  // @@protoc_insertion_point(class_scope:io.deephaven.proto.backplane.script.grpc.OpenDocumentRequest)
+  // .io.deephaven.proto.backplane.script.grpc.GetSignatureHelpResponse signatures = 4;
+  bool has_signatures() const;
+  private:
+  bool _internal_has_signatures() const;
+  public:
+  void clear_signatures();
+  const ::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpResponse& signatures() const;
+  PROTOBUF_NODISCARD ::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpResponse* release_signatures();
+  ::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpResponse* mutable_signatures();
+  void set_allocated_signatures(::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpResponse* signatures);
+  private:
+  const ::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpResponse& _internal_signatures() const;
+  ::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpResponse* _internal_mutable_signatures();
+  public:
+  void unsafe_arena_set_allocated_signatures(
+      ::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpResponse* signatures);
+  ::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpResponse* unsafe_arena_release_signatures();
+
+  // .io.deephaven.proto.backplane.script.grpc.GetHoverResponse hover = 5;
+  bool has_hover() const;
+  private:
+  bool _internal_has_hover() const;
+  public:
+  void clear_hover();
+  const ::io::deephaven::proto::backplane::script::grpc::GetHoverResponse& hover() const;
+  PROTOBUF_NODISCARD ::io::deephaven::proto::backplane::script::grpc::GetHoverResponse* release_hover();
+  ::io::deephaven::proto::backplane::script::grpc::GetHoverResponse* mutable_hover();
+  void set_allocated_hover(::io::deephaven::proto::backplane::script::grpc::GetHoverResponse* hover);
+  private:
+  const ::io::deephaven::proto::backplane::script::grpc::GetHoverResponse& _internal_hover() const;
+  ::io::deephaven::proto::backplane::script::grpc::GetHoverResponse* _internal_mutable_hover();
+  public:
+  void unsafe_arena_set_allocated_hover(
+      ::io::deephaven::proto::backplane::script::grpc::GetHoverResponse* hover);
+  ::io::deephaven::proto::backplane::script::grpc::GetHoverResponse* unsafe_arena_release_hover();
+
+  // .io.deephaven.proto.backplane.script.grpc.GetPullDiagnosticResponse diagnostic = 6;
+  bool has_diagnostic() const;
+  private:
+  bool _internal_has_diagnostic() const;
+  public:
+  void clear_diagnostic();
+  const ::io::deephaven::proto::backplane::script::grpc::GetPullDiagnosticResponse& diagnostic() const;
+  PROTOBUF_NODISCARD ::io::deephaven::proto::backplane::script::grpc::GetPullDiagnosticResponse* release_diagnostic();
+  ::io::deephaven::proto::backplane::script::grpc::GetPullDiagnosticResponse* mutable_diagnostic();
+  void set_allocated_diagnostic(::io::deephaven::proto::backplane::script::grpc::GetPullDiagnosticResponse* diagnostic);
+  private:
+  const ::io::deephaven::proto::backplane::script::grpc::GetPullDiagnosticResponse& _internal_diagnostic() const;
+  ::io::deephaven::proto::backplane::script::grpc::GetPullDiagnosticResponse* _internal_mutable_diagnostic();
+  public:
+  void unsafe_arena_set_allocated_diagnostic(
+      ::io::deephaven::proto::backplane::script::grpc::GetPullDiagnosticResponse* diagnostic);
+  ::io::deephaven::proto::backplane::script::grpc::GetPullDiagnosticResponse* unsafe_arena_release_diagnostic();
+
+  // .io.deephaven.proto.backplane.script.grpc.GetPublishDiagnosticResponse diagnostic_publish = 7;
+  bool has_diagnostic_publish() const;
+  private:
+  bool _internal_has_diagnostic_publish() const;
+  public:
+  void clear_diagnostic_publish();
+  const ::io::deephaven::proto::backplane::script::grpc::GetPublishDiagnosticResponse& diagnostic_publish() const;
+  PROTOBUF_NODISCARD ::io::deephaven::proto::backplane::script::grpc::GetPublishDiagnosticResponse* release_diagnostic_publish();
+  ::io::deephaven::proto::backplane::script::grpc::GetPublishDiagnosticResponse* mutable_diagnostic_publish();
+  void set_allocated_diagnostic_publish(::io::deephaven::proto::backplane::script::grpc::GetPublishDiagnosticResponse* diagnostic_publish);
+  private:
+  const ::io::deephaven::proto::backplane::script::grpc::GetPublishDiagnosticResponse& _internal_diagnostic_publish() const;
+  ::io::deephaven::proto::backplane::script::grpc::GetPublishDiagnosticResponse* _internal_mutable_diagnostic_publish();
+  public:
+  void unsafe_arena_set_allocated_diagnostic_publish(
+      ::io::deephaven::proto::backplane::script::grpc::GetPublishDiagnosticResponse* diagnostic_publish);
+  ::io::deephaven::proto::backplane::script::grpc::GetPublishDiagnosticResponse* unsafe_arena_release_diagnostic_publish();
+
+  void clear_response();
+  ResponseCase response_case() const;
+  // @@protoc_insertion_point(class_scope:io.deephaven.proto.backplane.script.grpc.AutoCompleteResponse)
  private:
   class _Internal;
+  void set_has_completion_items();
+  void set_has_signatures();
+  void set_has_hover();
+  void set_has_diagnostic();
+  void set_has_diagnostic_publish();
+
+  inline bool has_response() const;
+  inline void clear_has_response();
 
   template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
   typedef void InternalArenaConstructable_;
   typedef void DestructorSkippable_;
-  ::io::deephaven::proto::backplane::grpc::Ticket* console_id_;
-  ::io::deephaven::proto::backplane::script::grpc::TextDocumentItem* text_document_;
+  int32_t request_id_;
+  bool success_;
+  union ResponseUnion {
+    constexpr ResponseUnion() : _constinit_{} {}
+      ::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized _constinit_;
+    ::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsResponse* completion_items_;
+    ::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpResponse* signatures_;
+    ::io::deephaven::proto::backplane::script::grpc::GetHoverResponse* hover_;
+    ::io::deephaven::proto::backplane::script::grpc::GetPullDiagnosticResponse* diagnostic_;
+    ::io::deephaven::proto::backplane::script::grpc::GetPublishDiagnosticResponse* diagnostic_publish_;
+  } response_;
   mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
+  uint32_t _oneof_case_[1];
+
   friend struct ::TableStruct_deephaven_2fproto_2fconsole_2eproto;
 };
 // -------------------------------------------------------------------
 
-class TextDocumentItem final :
-    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:io.deephaven.proto.backplane.script.grpc.TextDocumentItem) */ {
+class BrowserNextResponse final :
+    public ::PROTOBUF_NAMESPACE_ID::internal::ZeroFieldsBase /* @@protoc_insertion_point(class_definition:io.deephaven.proto.backplane.script.grpc.BrowserNextResponse) */ {
  public:
-  inline TextDocumentItem() : TextDocumentItem(nullptr) {}
-  ~TextDocumentItem() override;
-  explicit PROTOBUF_CONSTEXPR TextDocumentItem(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
+  inline BrowserNextResponse() : BrowserNextResponse(nullptr) {}
+  explicit PROTOBUF_CONSTEXPR BrowserNextResponse(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
 
-  TextDocumentItem(const TextDocumentItem& from);
-  TextDocumentItem(TextDocumentItem&& from) noexcept
-    : TextDocumentItem() {
+  BrowserNextResponse(const BrowserNextResponse& from);
+  BrowserNextResponse(BrowserNextResponse&& from) noexcept
+    : BrowserNextResponse() {
     *this = ::std::move(from);
   }
 
-  inline TextDocumentItem& operator=(const TextDocumentItem& from) {
+  inline BrowserNextResponse& operator=(const BrowserNextResponse& from) {
     CopyFrom(from);
     return *this;
   }
-  inline TextDocumentItem& operator=(TextDocumentItem&& from) noexcept {
+  inline BrowserNextResponse& operator=(BrowserNextResponse&& from) noexcept {
     if (this == &from) return *this;
     if (GetOwningArena() == from.GetOwningArena()
   #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
@@ -3349,20 +3660,20 @@ class TextDocumentItem final :
   static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
     return default_instance().GetMetadata().reflection;
   }
-  static const TextDocumentItem& default_instance() {
+  static const BrowserNextResponse& default_instance() {
     return *internal_default_instance();
   }
-  static inline const TextDocumentItem* internal_default_instance() {
-    return reinterpret_cast<const TextDocumentItem*>(
-               &_TextDocumentItem_default_instance_);
+  static inline const BrowserNextResponse* internal_default_instance() {
+    return reinterpret_cast<const BrowserNextResponse*>(
+               &_BrowserNextResponse_default_instance_);
   }
   static constexpr int kIndexInFileMessages =
     18;
 
-  friend void swap(TextDocumentItem& a, TextDocumentItem& b) {
+  friend void swap(BrowserNextResponse& a, BrowserNextResponse& b) {
     a.Swap(&b);
   }
-  inline void Swap(TextDocumentItem* other) {
+  inline void Swap(BrowserNextResponse* other) {
     if (other == this) return;
   #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
     if (GetOwningArena() != nullptr &&
@@ -3375,7 +3686,7 @@ class TextDocumentItem final :
       ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
     }
   }
-  void UnsafeArenaSwap(TextDocumentItem* other) {
+  void UnsafeArenaSwap(BrowserNextResponse* other) {
     if (other == this) return;
     GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
     InternalSwap(other);
@@ -3383,38 +3694,26 @@ class TextDocumentItem final :
 
   // implements Message ----------------------------------------------
 
-  TextDocumentItem* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
-    return CreateMaybeMessage<TextDocumentItem>(arena);
+  BrowserNextResponse* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
+    return CreateMaybeMessage<BrowserNextResponse>(arena);
+  }
+  using ::PROTOBUF_NAMESPACE_ID::internal::ZeroFieldsBase::CopyFrom;
+  inline void CopyFrom(const BrowserNextResponse& from) {
+    ::PROTOBUF_NAMESPACE_ID::internal::ZeroFieldsBase::CopyImpl(this, from);
+  }
+  using ::PROTOBUF_NAMESPACE_ID::internal::ZeroFieldsBase::MergeFrom;
+  void MergeFrom(const BrowserNextResponse& from) {
+    ::PROTOBUF_NAMESPACE_ID::internal::ZeroFieldsBase::MergeImpl(this, from);
   }
-  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
-  void CopyFrom(const TextDocumentItem& from);
-  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
-  void MergeFrom(const TextDocumentItem& from);
-  private:
-  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
   public:
-  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
-  bool IsInitialized() const final;
-
-  size_t ByteSizeLong() const final;
-  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
-  uint8_t* _InternalSerialize(
-      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
-  int GetCachedSize() const final { return _cached_size_.Get(); }
-
-  private:
-  void SharedCtor();
-  void SharedDtor();
-  void SetCachedSize(int size) const final;
-  void InternalSwap(TextDocumentItem* other);
 
   private:
   friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
   static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
-    return "io.deephaven.proto.backplane.script.grpc.TextDocumentItem";
+    return "io.deephaven.proto.backplane.script.grpc.BrowserNextResponse";
   }
   protected:
-  explicit TextDocumentItem(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+  explicit BrowserNextResponse(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                        bool is_message_owned = false);
   public:
 
@@ -3427,97 +3726,35 @@ class TextDocumentItem final :
 
   // accessors -------------------------------------------------------
 
-  enum : int {
-    kUriFieldNumber = 1,
-    kLanguageIdFieldNumber = 2,
-    kTextFieldNumber = 4,
-    kVersionFieldNumber = 3,
-  };
-  // string uri = 1;
-  void clear_uri();
-  const std::string& uri() const;
-  template <typename ArgT0 = const std::string&, typename... ArgT>
-  void set_uri(ArgT0&& arg0, ArgT... args);
-  std::string* mutable_uri();
-  PROTOBUF_NODISCARD std::string* release_uri();
-  void set_allocated_uri(std::string* uri);
-  private:
-  const std::string& _internal_uri() const;
-  inline PROTOBUF_ALWAYS_INLINE void _internal_set_uri(const std::string& value);
-  std::string* _internal_mutable_uri();
-  public:
-
-  // string language_id = 2;
-  void clear_language_id();
-  const std::string& language_id() const;
-  template <typename ArgT0 = const std::string&, typename... ArgT>
-  void set_language_id(ArgT0&& arg0, ArgT... args);
-  std::string* mutable_language_id();
-  PROTOBUF_NODISCARD std::string* release_language_id();
-  void set_allocated_language_id(std::string* language_id);
-  private:
-  const std::string& _internal_language_id() const;
-  inline PROTOBUF_ALWAYS_INLINE void _internal_set_language_id(const std::string& value);
-  std::string* _internal_mutable_language_id();
-  public:
-
-  // string text = 4;
-  void clear_text();
-  const std::string& text() const;
-  template <typename ArgT0 = const std::string&, typename... ArgT>
-  void set_text(ArgT0&& arg0, ArgT... args);
-  std::string* mutable_text();
-  PROTOBUF_NODISCARD std::string* release_text();
-  void set_allocated_text(std::string* text);
-  private:
-  const std::string& _internal_text() const;
-  inline PROTOBUF_ALWAYS_INLINE void _internal_set_text(const std::string& value);
-  std::string* _internal_mutable_text();
-  public:
-
-  // int32 version = 3;
-  void clear_version();
-  int32_t version() const;
-  void set_version(int32_t value);
-  private:
-  int32_t _internal_version() const;
-  void _internal_set_version(int32_t value);
-  public:
-
-  // @@protoc_insertion_point(class_scope:io.deephaven.proto.backplane.script.grpc.TextDocumentItem)
+  // @@protoc_insertion_point(class_scope:io.deephaven.proto.backplane.script.grpc.BrowserNextResponse)
  private:
   class _Internal;
 
   template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
   typedef void InternalArenaConstructable_;
   typedef void DestructorSkippable_;
-  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr uri_;
-  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr language_id_;
-  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr text_;
-  int32_t version_;
-  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
   friend struct ::TableStruct_deephaven_2fproto_2fconsole_2eproto;
 };
 // -------------------------------------------------------------------
 
-class CloseDocumentRequest final :
-    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:io.deephaven.proto.backplane.script.grpc.CloseDocumentRequest) */ {
+class OpenDocumentRequest final :
+    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:io.deephaven.proto.backplane.script.grpc.OpenDocumentRequest) */ {
  public:
-  inline CloseDocumentRequest() : CloseDocumentRequest(nullptr) {}
-  ~CloseDocumentRequest() override;
-  explicit PROTOBUF_CONSTEXPR CloseDocumentRequest(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
+  inline OpenDocumentRequest() : OpenDocumentRequest(nullptr) {}
+  ~OpenDocumentRequest() override;
+  explicit PROTOBUF_CONSTEXPR OpenDocumentRequest(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
 
-  CloseDocumentRequest(const CloseDocumentRequest& from);
-  CloseDocumentRequest(CloseDocumentRequest&& from) noexcept
-    : CloseDocumentRequest() {
+  OpenDocumentRequest(const OpenDocumentRequest& from);
+  OpenDocumentRequest(OpenDocumentRequest&& from) noexcept
+    : OpenDocumentRequest() {
     *this = ::std::move(from);
   }
 
-  inline CloseDocumentRequest& operator=(const CloseDocumentRequest& from) {
+  inline OpenDocumentRequest& operator=(const OpenDocumentRequest& from) {
     CopyFrom(from);
     return *this;
   }
-  inline CloseDocumentRequest& operator=(CloseDocumentRequest&& from) noexcept {
+  inline OpenDocumentRequest& operator=(OpenDocumentRequest&& from) noexcept {
     if (this == &from) return *this;
     if (GetOwningArena() == from.GetOwningArena()
   #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
@@ -3540,20 +3777,20 @@ class CloseDocumentRequest final :
   static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
     return default_instance().GetMetadata().reflection;
   }
-  static const CloseDocumentRequest& default_instance() {
+  static const OpenDocumentRequest& default_instance() {
     return *internal_default_instance();
   }
-  static inline const CloseDocumentRequest* internal_default_instance() {
-    return reinterpret_cast<const CloseDocumentRequest*>(
-               &_CloseDocumentRequest_default_instance_);
+  static inline const OpenDocumentRequest* internal_default_instance() {
+    return reinterpret_cast<const OpenDocumentRequest*>(
+               &_OpenDocumentRequest_default_instance_);
   }
   static constexpr int kIndexInFileMessages =
     19;
 
-  friend void swap(CloseDocumentRequest& a, CloseDocumentRequest& b) {
+  friend void swap(OpenDocumentRequest& a, OpenDocumentRequest& b) {
     a.Swap(&b);
   }
-  inline void Swap(CloseDocumentRequest* other) {
+  inline void Swap(OpenDocumentRequest* other) {
     if (other == this) return;
   #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
     if (GetOwningArena() != nullptr &&
@@ -3566,7 +3803,7 @@ class CloseDocumentRequest final :
       ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
     }
   }
-  void UnsafeArenaSwap(CloseDocumentRequest* other) {
+  void UnsafeArenaSwap(OpenDocumentRequest* other) {
     if (other == this) return;
     GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
     InternalSwap(other);
@@ -3574,13 +3811,13 @@ class CloseDocumentRequest final :
 
   // implements Message ----------------------------------------------
 
-  CloseDocumentRequest* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
-    return CreateMaybeMessage<CloseDocumentRequest>(arena);
+  OpenDocumentRequest* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
+    return CreateMaybeMessage<OpenDocumentRequest>(arena);
   }
   using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
-  void CopyFrom(const CloseDocumentRequest& from);
+  void CopyFrom(const OpenDocumentRequest& from);
   using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
-  void MergeFrom(const CloseDocumentRequest& from);
+  void MergeFrom(const OpenDocumentRequest& from);
   private:
   static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
   public:
@@ -3597,15 +3834,15 @@ class CloseDocumentRequest final :
   void SharedCtor();
   void SharedDtor();
   void SetCachedSize(int size) const final;
-  void InternalSwap(CloseDocumentRequest* other);
+  void InternalSwap(OpenDocumentRequest* other);
 
   private:
   friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
   static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
-    return "io.deephaven.proto.backplane.script.grpc.CloseDocumentRequest";
+    return "io.deephaven.proto.backplane.script.grpc.OpenDocumentRequest";
   }
   protected:
-  explicit CloseDocumentRequest(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+  explicit OpenDocumentRequest(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                        bool is_message_owned = false);
   public:
 
@@ -3622,43 +3859,43 @@ class CloseDocumentRequest final :
     kConsoleIdFieldNumber = 1,
     kTextDocumentFieldNumber = 2,
   };
-  // .io.deephaven.proto.backplane.grpc.Ticket console_id = 1;
-  bool has_console_id() const;
+  // .io.deephaven.proto.backplane.grpc.Ticket console_id = 1 [deprecated = true];
+  PROTOBUF_DEPRECATED bool has_console_id() const;
   private:
   bool _internal_has_console_id() const;
   public:
-  void clear_console_id();
-  const ::io::deephaven::proto::backplane::grpc::Ticket& console_id() const;
-  PROTOBUF_NODISCARD ::io::deephaven::proto::backplane::grpc::Ticket* release_console_id();
-  ::io::deephaven::proto::backplane::grpc::Ticket* mutable_console_id();
-  void set_allocated_console_id(::io::deephaven::proto::backplane::grpc::Ticket* console_id);
+  PROTOBUF_DEPRECATED void clear_console_id();
+  PROTOBUF_DEPRECATED const ::io::deephaven::proto::backplane::grpc::Ticket& console_id() const;
+  PROTOBUF_NODISCARD PROTOBUF_DEPRECATED ::io::deephaven::proto::backplane::grpc::Ticket* release_console_id();
+  PROTOBUF_DEPRECATED ::io::deephaven::proto::backplane::grpc::Ticket* mutable_console_id();
+  PROTOBUF_DEPRECATED void set_allocated_console_id(::io::deephaven::proto::backplane::grpc::Ticket* console_id);
   private:
   const ::io::deephaven::proto::backplane::grpc::Ticket& _internal_console_id() const;
   ::io::deephaven::proto::backplane::grpc::Ticket* _internal_mutable_console_id();
   public:
-  void unsafe_arena_set_allocated_console_id(
+  PROTOBUF_DEPRECATED void unsafe_arena_set_allocated_console_id(
       ::io::deephaven::proto::backplane::grpc::Ticket* console_id);
-  ::io::deephaven::proto::backplane::grpc::Ticket* unsafe_arena_release_console_id();
+  PROTOBUF_DEPRECATED ::io::deephaven::proto::backplane::grpc::Ticket* unsafe_arena_release_console_id();
 
-  // .io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier text_document = 2;
+  // .io.deephaven.proto.backplane.script.grpc.TextDocumentItem text_document = 2;
   bool has_text_document() const;
   private:
   bool _internal_has_text_document() const;
   public:
   void clear_text_document();
-  const ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier& text_document() const;
-  PROTOBUF_NODISCARD ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* release_text_document();
-  ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* mutable_text_document();
-  void set_allocated_text_document(::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* text_document);
+  const ::io::deephaven::proto::backplane::script::grpc::TextDocumentItem& text_document() const;
+  PROTOBUF_NODISCARD ::io::deephaven::proto::backplane::script::grpc::TextDocumentItem* release_text_document();
+  ::io::deephaven::proto::backplane::script::grpc::TextDocumentItem* mutable_text_document();
+  void set_allocated_text_document(::io::deephaven::proto::backplane::script::grpc::TextDocumentItem* text_document);
   private:
-  const ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier& _internal_text_document() const;
-  ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* _internal_mutable_text_document();
+  const ::io::deephaven::proto::backplane::script::grpc::TextDocumentItem& _internal_text_document() const;
+  ::io::deephaven::proto::backplane::script::grpc::TextDocumentItem* _internal_mutable_text_document();
   public:
   void unsafe_arena_set_allocated_text_document(
-      ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* text_document);
-  ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* unsafe_arena_release_text_document();
+      ::io::deephaven::proto::backplane::script::grpc::TextDocumentItem* text_document);
+  ::io::deephaven::proto::backplane::script::grpc::TextDocumentItem* unsafe_arena_release_text_document();
 
-  // @@protoc_insertion_point(class_scope:io.deephaven.proto.backplane.script.grpc.CloseDocumentRequest)
+  // @@protoc_insertion_point(class_scope:io.deephaven.proto.backplane.script.grpc.OpenDocumentRequest)
  private:
   class _Internal;
 
@@ -3666,30 +3903,30 @@ class CloseDocumentRequest final :
   typedef void InternalArenaConstructable_;
   typedef void DestructorSkippable_;
   ::io::deephaven::proto::backplane::grpc::Ticket* console_id_;
-  ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* text_document_;
+  ::io::deephaven::proto::backplane::script::grpc::TextDocumentItem* text_document_;
   mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
   friend struct ::TableStruct_deephaven_2fproto_2fconsole_2eproto;
 };
 // -------------------------------------------------------------------
 
-class ChangeDocumentRequest_TextDocumentContentChangeEvent final :
-    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.TextDocumentContentChangeEvent) */ {
+class TextDocumentItem final :
+    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:io.deephaven.proto.backplane.script.grpc.TextDocumentItem) */ {
  public:
-  inline ChangeDocumentRequest_TextDocumentContentChangeEvent() : ChangeDocumentRequest_TextDocumentContentChangeEvent(nullptr) {}
-  ~ChangeDocumentRequest_TextDocumentContentChangeEvent() override;
-  explicit PROTOBUF_CONSTEXPR ChangeDocumentRequest_TextDocumentContentChangeEvent(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
+  inline TextDocumentItem() : TextDocumentItem(nullptr) {}
+  ~TextDocumentItem() override;
+  explicit PROTOBUF_CONSTEXPR TextDocumentItem(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
 
-  ChangeDocumentRequest_TextDocumentContentChangeEvent(const ChangeDocumentRequest_TextDocumentContentChangeEvent& from);
-  ChangeDocumentRequest_TextDocumentContentChangeEvent(ChangeDocumentRequest_TextDocumentContentChangeEvent&& from) noexcept
-    : ChangeDocumentRequest_TextDocumentContentChangeEvent() {
+  TextDocumentItem(const TextDocumentItem& from);
+  TextDocumentItem(TextDocumentItem&& from) noexcept
+    : TextDocumentItem() {
     *this = ::std::move(from);
   }
 
-  inline ChangeDocumentRequest_TextDocumentContentChangeEvent& operator=(const ChangeDocumentRequest_TextDocumentContentChangeEvent& from) {
+  inline TextDocumentItem& operator=(const TextDocumentItem& from) {
     CopyFrom(from);
     return *this;
   }
-  inline ChangeDocumentRequest_TextDocumentContentChangeEvent& operator=(ChangeDocumentRequest_TextDocumentContentChangeEvent&& from) noexcept {
+  inline TextDocumentItem& operator=(TextDocumentItem&& from) noexcept {
     if (this == &from) return *this;
     if (GetOwningArena() == from.GetOwningArena()
   #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
@@ -3712,20 +3949,20 @@ class ChangeDocumentRequest_TextDocumentContentChangeEvent final :
   static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
     return default_instance().GetMetadata().reflection;
   }
-  static const ChangeDocumentRequest_TextDocumentContentChangeEvent& default_instance() {
+  static const TextDocumentItem& default_instance() {
     return *internal_default_instance();
   }
-  static inline const ChangeDocumentRequest_TextDocumentContentChangeEvent* internal_default_instance() {
-    return reinterpret_cast<const ChangeDocumentRequest_TextDocumentContentChangeEvent*>(
-               &_ChangeDocumentRequest_TextDocumentContentChangeEvent_default_instance_);
+  static inline const TextDocumentItem* internal_default_instance() {
+    return reinterpret_cast<const TextDocumentItem*>(
+               &_TextDocumentItem_default_instance_);
   }
   static constexpr int kIndexInFileMessages =
     20;
 
-  friend void swap(ChangeDocumentRequest_TextDocumentContentChangeEvent& a, ChangeDocumentRequest_TextDocumentContentChangeEvent& b) {
+  friend void swap(TextDocumentItem& a, TextDocumentItem& b) {
     a.Swap(&b);
   }
-  inline void Swap(ChangeDocumentRequest_TextDocumentContentChangeEvent* other) {
+  inline void Swap(TextDocumentItem* other) {
     if (other == this) return;
   #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
     if (GetOwningArena() != nullptr &&
@@ -3738,7 +3975,7 @@ class ChangeDocumentRequest_TextDocumentContentChangeEvent final :
       ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
     }
   }
-  void UnsafeArenaSwap(ChangeDocumentRequest_TextDocumentContentChangeEvent* other) {
+  void UnsafeArenaSwap(TextDocumentItem* other) {
     if (other == this) return;
     GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
     InternalSwap(other);
@@ -3746,13 +3983,13 @@ class ChangeDocumentRequest_TextDocumentContentChangeEvent final :
 
   // implements Message ----------------------------------------------
 
-  ChangeDocumentRequest_TextDocumentContentChangeEvent* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
-    return CreateMaybeMessage<ChangeDocumentRequest_TextDocumentContentChangeEvent>(arena);
+  TextDocumentItem* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
+    return CreateMaybeMessage<TextDocumentItem>(arena);
   }
   using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
-  void CopyFrom(const ChangeDocumentRequest_TextDocumentContentChangeEvent& from);
+  void CopyFrom(const TextDocumentItem& from);
   using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
-  void MergeFrom(const ChangeDocumentRequest_TextDocumentContentChangeEvent& from);
+  void MergeFrom(const TextDocumentItem& from);
   private:
   static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
   public:
@@ -3769,15 +4006,15 @@ class ChangeDocumentRequest_TextDocumentContentChangeEvent final :
   void SharedCtor();
   void SharedDtor();
   void SetCachedSize(int size) const final;
-  void InternalSwap(ChangeDocumentRequest_TextDocumentContentChangeEvent* other);
+  void InternalSwap(TextDocumentItem* other);
 
   private:
   friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
   static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
-    return "io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.TextDocumentContentChangeEvent";
+    return "io.deephaven.proto.backplane.script.grpc.TextDocumentItem";
   }
   protected:
-  explicit ChangeDocumentRequest_TextDocumentContentChangeEvent(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+  explicit TextDocumentItem(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                        bool is_message_owned = false);
   public:
 
@@ -3791,11 +4028,40 @@ class ChangeDocumentRequest_TextDocumentContentChangeEvent final :
   // accessors -------------------------------------------------------
 
   enum : int {
-    kTextFieldNumber = 3,
-    kRangeFieldNumber = 1,
-    kRangeLengthFieldNumber = 2,
+    kUriFieldNumber = 1,
+    kLanguageIdFieldNumber = 2,
+    kTextFieldNumber = 4,
+    kVersionFieldNumber = 3,
   };
-  // string text = 3;
+  // string uri = 1;
+  void clear_uri();
+  const std::string& uri() const;
+  template <typename ArgT0 = const std::string&, typename... ArgT>
+  void set_uri(ArgT0&& arg0, ArgT... args);
+  std::string* mutable_uri();
+  PROTOBUF_NODISCARD std::string* release_uri();
+  void set_allocated_uri(std::string* uri);
+  private:
+  const std::string& _internal_uri() const;
+  inline PROTOBUF_ALWAYS_INLINE void _internal_set_uri(const std::string& value);
+  std::string* _internal_mutable_uri();
+  public:
+
+  // string language_id = 2;
+  void clear_language_id();
+  const std::string& language_id() const;
+  template <typename ArgT0 = const std::string&, typename... ArgT>
+  void set_language_id(ArgT0&& arg0, ArgT... args);
+  std::string* mutable_language_id();
+  PROTOBUF_NODISCARD std::string* release_language_id();
+  void set_allocated_language_id(std::string* language_id);
+  private:
+  const std::string& _internal_language_id() const;
+  inline PROTOBUF_ALWAYS_INLINE void _internal_set_language_id(const std::string& value);
+  std::string* _internal_mutable_language_id();
+  public:
+
+  // string text = 4;
   void clear_text();
   const std::string& text() const;
   template <typename ArgT0 = const std::string&, typename... ArgT>
@@ -3809,66 +4075,49 @@ class ChangeDocumentRequest_TextDocumentContentChangeEvent final :
   std::string* _internal_mutable_text();
   public:
 
-  // .io.deephaven.proto.backplane.script.grpc.DocumentRange range = 1;
-  bool has_range() const;
-  private:
-  bool _internal_has_range() const;
-  public:
-  void clear_range();
-  const ::io::deephaven::proto::backplane::script::grpc::DocumentRange& range() const;
-  PROTOBUF_NODISCARD ::io::deephaven::proto::backplane::script::grpc::DocumentRange* release_range();
-  ::io::deephaven::proto::backplane::script::grpc::DocumentRange* mutable_range();
-  void set_allocated_range(::io::deephaven::proto::backplane::script::grpc::DocumentRange* range);
-  private:
-  const ::io::deephaven::proto::backplane::script::grpc::DocumentRange& _internal_range() const;
-  ::io::deephaven::proto::backplane::script::grpc::DocumentRange* _internal_mutable_range();
-  public:
-  void unsafe_arena_set_allocated_range(
-      ::io::deephaven::proto::backplane::script::grpc::DocumentRange* range);
-  ::io::deephaven::proto::backplane::script::grpc::DocumentRange* unsafe_arena_release_range();
-
-  // int32 range_length = 2;
-  void clear_range_length();
-  int32_t range_length() const;
-  void set_range_length(int32_t value);
+  // int32 version = 3;
+  void clear_version();
+  int32_t version() const;
+  void set_version(int32_t value);
   private:
-  int32_t _internal_range_length() const;
-  void _internal_set_range_length(int32_t value);
+  int32_t _internal_version() const;
+  void _internal_set_version(int32_t value);
   public:
 
-  // @@protoc_insertion_point(class_scope:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.TextDocumentContentChangeEvent)
+  // @@protoc_insertion_point(class_scope:io.deephaven.proto.backplane.script.grpc.TextDocumentItem)
  private:
   class _Internal;
 
   template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
   typedef void InternalArenaConstructable_;
   typedef void DestructorSkippable_;
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr uri_;
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr language_id_;
   ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr text_;
-  ::io::deephaven::proto::backplane::script::grpc::DocumentRange* range_;
-  int32_t range_length_;
+  int32_t version_;
   mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
   friend struct ::TableStruct_deephaven_2fproto_2fconsole_2eproto;
 };
 // -------------------------------------------------------------------
 
-class ChangeDocumentRequest final :
-    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest) */ {
+class CloseDocumentRequest final :
+    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:io.deephaven.proto.backplane.script.grpc.CloseDocumentRequest) */ {
  public:
-  inline ChangeDocumentRequest() : ChangeDocumentRequest(nullptr) {}
-  ~ChangeDocumentRequest() override;
-  explicit PROTOBUF_CONSTEXPR ChangeDocumentRequest(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
+  inline CloseDocumentRequest() : CloseDocumentRequest(nullptr) {}
+  ~CloseDocumentRequest() override;
+  explicit PROTOBUF_CONSTEXPR CloseDocumentRequest(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
 
-  ChangeDocumentRequest(const ChangeDocumentRequest& from);
-  ChangeDocumentRequest(ChangeDocumentRequest&& from) noexcept
-    : ChangeDocumentRequest() {
+  CloseDocumentRequest(const CloseDocumentRequest& from);
+  CloseDocumentRequest(CloseDocumentRequest&& from) noexcept
+    : CloseDocumentRequest() {
     *this = ::std::move(from);
   }
 
-  inline ChangeDocumentRequest& operator=(const ChangeDocumentRequest& from) {
+  inline CloseDocumentRequest& operator=(const CloseDocumentRequest& from) {
     CopyFrom(from);
     return *this;
   }
-  inline ChangeDocumentRequest& operator=(ChangeDocumentRequest&& from) noexcept {
+  inline CloseDocumentRequest& operator=(CloseDocumentRequest&& from) noexcept {
     if (this == &from) return *this;
     if (GetOwningArena() == from.GetOwningArena()
   #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
@@ -3891,20 +4140,20 @@ class ChangeDocumentRequest final :
   static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
     return default_instance().GetMetadata().reflection;
   }
-  static const ChangeDocumentRequest& default_instance() {
+  static const CloseDocumentRequest& default_instance() {
     return *internal_default_instance();
   }
-  static inline const ChangeDocumentRequest* internal_default_instance() {
-    return reinterpret_cast<const ChangeDocumentRequest*>(
-               &_ChangeDocumentRequest_default_instance_);
+  static inline const CloseDocumentRequest* internal_default_instance() {
+    return reinterpret_cast<const CloseDocumentRequest*>(
+               &_CloseDocumentRequest_default_instance_);
   }
   static constexpr int kIndexInFileMessages =
     21;
 
-  friend void swap(ChangeDocumentRequest& a, ChangeDocumentRequest& b) {
+  friend void swap(CloseDocumentRequest& a, CloseDocumentRequest& b) {
     a.Swap(&b);
   }
-  inline void Swap(ChangeDocumentRequest* other) {
+  inline void Swap(CloseDocumentRequest* other) {
     if (other == this) return;
   #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
     if (GetOwningArena() != nullptr &&
@@ -3917,7 +4166,7 @@ class ChangeDocumentRequest final :
       ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
     }
   }
-  void UnsafeArenaSwap(ChangeDocumentRequest* other) {
+  void UnsafeArenaSwap(CloseDocumentRequest* other) {
     if (other == this) return;
     GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
     InternalSwap(other);
@@ -3925,13 +4174,13 @@ class ChangeDocumentRequest final :
 
   // implements Message ----------------------------------------------
 
-  ChangeDocumentRequest* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
-    return CreateMaybeMessage<ChangeDocumentRequest>(arena);
+  CloseDocumentRequest* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
+    return CreateMaybeMessage<CloseDocumentRequest>(arena);
   }
   using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
-  void CopyFrom(const ChangeDocumentRequest& from);
+  void CopyFrom(const CloseDocumentRequest& from);
   using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
-  void MergeFrom(const ChangeDocumentRequest& from);
+  void MergeFrom(const CloseDocumentRequest& from);
   private:
   static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
   public:
@@ -3948,15 +4197,15 @@ class ChangeDocumentRequest final :
   void SharedCtor();
   void SharedDtor();
   void SetCachedSize(int size) const final;
-  void InternalSwap(ChangeDocumentRequest* other);
+  void InternalSwap(CloseDocumentRequest* other);
 
   private:
   friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
   static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
-    return "io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest";
+    return "io.deephaven.proto.backplane.script.grpc.CloseDocumentRequest";
   }
   protected:
-  explicit ChangeDocumentRequest(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+  explicit CloseDocumentRequest(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                        bool is_message_owned = false);
   public:
 
@@ -3967,50 +4216,29 @@ class ChangeDocumentRequest final :
 
   // nested types ----------------------------------------------------
 
-  typedef ChangeDocumentRequest_TextDocumentContentChangeEvent TextDocumentContentChangeEvent;
-
   // accessors -------------------------------------------------------
 
   enum : int {
-    kContentChangesFieldNumber = 3,
     kConsoleIdFieldNumber = 1,
     kTextDocumentFieldNumber = 2,
   };
-  // repeated .io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.TextDocumentContentChangeEvent content_changes = 3;
-  int content_changes_size() const;
-  private:
-  int _internal_content_changes_size() const;
-  public:
-  void clear_content_changes();
-  ::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest_TextDocumentContentChangeEvent* mutable_content_changes(int index);
-  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest_TextDocumentContentChangeEvent >*
-      mutable_content_changes();
-  private:
-  const ::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest_TextDocumentContentChangeEvent& _internal_content_changes(int index) const;
-  ::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest_TextDocumentContentChangeEvent* _internal_add_content_changes();
-  public:
-  const ::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest_TextDocumentContentChangeEvent& content_changes(int index) const;
-  ::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest_TextDocumentContentChangeEvent* add_content_changes();
-  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest_TextDocumentContentChangeEvent >&
-      content_changes() const;
-
-  // .io.deephaven.proto.backplane.grpc.Ticket console_id = 1;
-  bool has_console_id() const;
+  // .io.deephaven.proto.backplane.grpc.Ticket console_id = 1 [deprecated = true];
+  PROTOBUF_DEPRECATED bool has_console_id() const;
   private:
   bool _internal_has_console_id() const;
   public:
-  void clear_console_id();
-  const ::io::deephaven::proto::backplane::grpc::Ticket& console_id() const;
-  PROTOBUF_NODISCARD ::io::deephaven::proto::backplane::grpc::Ticket* release_console_id();
-  ::io::deephaven::proto::backplane::grpc::Ticket* mutable_console_id();
-  void set_allocated_console_id(::io::deephaven::proto::backplane::grpc::Ticket* console_id);
+  PROTOBUF_DEPRECATED void clear_console_id();
+  PROTOBUF_DEPRECATED const ::io::deephaven::proto::backplane::grpc::Ticket& console_id() const;
+  PROTOBUF_NODISCARD PROTOBUF_DEPRECATED ::io::deephaven::proto::backplane::grpc::Ticket* release_console_id();
+  PROTOBUF_DEPRECATED ::io::deephaven::proto::backplane::grpc::Ticket* mutable_console_id();
+  PROTOBUF_DEPRECATED void set_allocated_console_id(::io::deephaven::proto::backplane::grpc::Ticket* console_id);
   private:
   const ::io::deephaven::proto::backplane::grpc::Ticket& _internal_console_id() const;
   ::io::deephaven::proto::backplane::grpc::Ticket* _internal_mutable_console_id();
   public:
-  void unsafe_arena_set_allocated_console_id(
+  PROTOBUF_DEPRECATED void unsafe_arena_set_allocated_console_id(
       ::io::deephaven::proto::backplane::grpc::Ticket* console_id);
-  ::io::deephaven::proto::backplane::grpc::Ticket* unsafe_arena_release_console_id();
+  PROTOBUF_DEPRECATED ::io::deephaven::proto::backplane::grpc::Ticket* unsafe_arena_release_console_id();
 
   // .io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier text_document = 2;
   bool has_text_document() const;
@@ -4030,14 +4258,13 @@ class ChangeDocumentRequest final :
       ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* text_document);
   ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* unsafe_arena_release_text_document();
 
-  // @@protoc_insertion_point(class_scope:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest)
+  // @@protoc_insertion_point(class_scope:io.deephaven.proto.backplane.script.grpc.CloseDocumentRequest)
  private:
   class _Internal;
 
   template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
   typedef void InternalArenaConstructable_;
   typedef void DestructorSkippable_;
-  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest_TextDocumentContentChangeEvent > content_changes_;
   ::io::deephaven::proto::backplane::grpc::Ticket* console_id_;
   ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* text_document_;
   mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
@@ -4045,24 +4272,24 @@ class ChangeDocumentRequest final :
 };
 // -------------------------------------------------------------------
 
-class DocumentRange final :
-    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:io.deephaven.proto.backplane.script.grpc.DocumentRange) */ {
+class ChangeDocumentRequest_TextDocumentContentChangeEvent final :
+    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.TextDocumentContentChangeEvent) */ {
  public:
-  inline DocumentRange() : DocumentRange(nullptr) {}
-  ~DocumentRange() override;
-  explicit PROTOBUF_CONSTEXPR DocumentRange(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
+  inline ChangeDocumentRequest_TextDocumentContentChangeEvent() : ChangeDocumentRequest_TextDocumentContentChangeEvent(nullptr) {}
+  ~ChangeDocumentRequest_TextDocumentContentChangeEvent() override;
+  explicit PROTOBUF_CONSTEXPR ChangeDocumentRequest_TextDocumentContentChangeEvent(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
 
-  DocumentRange(const DocumentRange& from);
-  DocumentRange(DocumentRange&& from) noexcept
-    : DocumentRange() {
+  ChangeDocumentRequest_TextDocumentContentChangeEvent(const ChangeDocumentRequest_TextDocumentContentChangeEvent& from);
+  ChangeDocumentRequest_TextDocumentContentChangeEvent(ChangeDocumentRequest_TextDocumentContentChangeEvent&& from) noexcept
+    : ChangeDocumentRequest_TextDocumentContentChangeEvent() {
     *this = ::std::move(from);
   }
 
-  inline DocumentRange& operator=(const DocumentRange& from) {
+  inline ChangeDocumentRequest_TextDocumentContentChangeEvent& operator=(const ChangeDocumentRequest_TextDocumentContentChangeEvent& from) {
     CopyFrom(from);
     return *this;
   }
-  inline DocumentRange& operator=(DocumentRange&& from) noexcept {
+  inline ChangeDocumentRequest_TextDocumentContentChangeEvent& operator=(ChangeDocumentRequest_TextDocumentContentChangeEvent&& from) noexcept {
     if (this == &from) return *this;
     if (GetOwningArena() == from.GetOwningArena()
   #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
@@ -4085,20 +4312,20 @@ class DocumentRange final :
   static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
     return default_instance().GetMetadata().reflection;
   }
-  static const DocumentRange& default_instance() {
+  static const ChangeDocumentRequest_TextDocumentContentChangeEvent& default_instance() {
     return *internal_default_instance();
   }
-  static inline const DocumentRange* internal_default_instance() {
-    return reinterpret_cast<const DocumentRange*>(
-               &_DocumentRange_default_instance_);
+  static inline const ChangeDocumentRequest_TextDocumentContentChangeEvent* internal_default_instance() {
+    return reinterpret_cast<const ChangeDocumentRequest_TextDocumentContentChangeEvent*>(
+               &_ChangeDocumentRequest_TextDocumentContentChangeEvent_default_instance_);
   }
   static constexpr int kIndexInFileMessages =
     22;
 
-  friend void swap(DocumentRange& a, DocumentRange& b) {
+  friend void swap(ChangeDocumentRequest_TextDocumentContentChangeEvent& a, ChangeDocumentRequest_TextDocumentContentChangeEvent& b) {
     a.Swap(&b);
   }
-  inline void Swap(DocumentRange* other) {
+  inline void Swap(ChangeDocumentRequest_TextDocumentContentChangeEvent* other) {
     if (other == this) return;
   #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
     if (GetOwningArena() != nullptr &&
@@ -4111,7 +4338,7 @@ class DocumentRange final :
       ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
     }
   }
-  void UnsafeArenaSwap(DocumentRange* other) {
+  void UnsafeArenaSwap(ChangeDocumentRequest_TextDocumentContentChangeEvent* other) {
     if (other == this) return;
     GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
     InternalSwap(other);
@@ -4119,13 +4346,13 @@ class DocumentRange final :
 
   // implements Message ----------------------------------------------
 
-  DocumentRange* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
-    return CreateMaybeMessage<DocumentRange>(arena);
+  ChangeDocumentRequest_TextDocumentContentChangeEvent* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
+    return CreateMaybeMessage<ChangeDocumentRequest_TextDocumentContentChangeEvent>(arena);
   }
   using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
-  void CopyFrom(const DocumentRange& from);
+  void CopyFrom(const ChangeDocumentRequest_TextDocumentContentChangeEvent& from);
   using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
-  void MergeFrom(const DocumentRange& from);
+  void MergeFrom(const ChangeDocumentRequest_TextDocumentContentChangeEvent& from);
   private:
   static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
   public:
@@ -4142,15 +4369,15 @@ class DocumentRange final :
   void SharedCtor();
   void SharedDtor();
   void SetCachedSize(int size) const final;
-  void InternalSwap(DocumentRange* other);
+  void InternalSwap(ChangeDocumentRequest_TextDocumentContentChangeEvent* other);
 
   private:
   friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
   static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
-    return "io.deephaven.proto.backplane.script.grpc.DocumentRange";
+    return "io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.TextDocumentContentChangeEvent";
   }
   protected:
-  explicit DocumentRange(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+  explicit ChangeDocumentRequest_TextDocumentContentChangeEvent(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                        bool is_message_owned = false);
   public:
 
@@ -4164,77 +4391,84 @@ class DocumentRange final :
   // accessors -------------------------------------------------------
 
   enum : int {
-    kStartFieldNumber = 1,
-    kEndFieldNumber = 2,
+    kTextFieldNumber = 3,
+    kRangeFieldNumber = 1,
+    kRangeLengthFieldNumber = 2,
   };
-  // .io.deephaven.proto.backplane.script.grpc.Position start = 1;
-  bool has_start() const;
+  // string text = 3;
+  void clear_text();
+  const std::string& text() const;
+  template <typename ArgT0 = const std::string&, typename... ArgT>
+  void set_text(ArgT0&& arg0, ArgT... args);
+  std::string* mutable_text();
+  PROTOBUF_NODISCARD std::string* release_text();
+  void set_allocated_text(std::string* text);
   private:
-  bool _internal_has_start() const;
+  const std::string& _internal_text() const;
+  inline PROTOBUF_ALWAYS_INLINE void _internal_set_text(const std::string& value);
+  std::string* _internal_mutable_text();
   public:
-  void clear_start();
-  const ::io::deephaven::proto::backplane::script::grpc::Position& start() const;
-  PROTOBUF_NODISCARD ::io::deephaven::proto::backplane::script::grpc::Position* release_start();
-  ::io::deephaven::proto::backplane::script::grpc::Position* mutable_start();
-  void set_allocated_start(::io::deephaven::proto::backplane::script::grpc::Position* start);
+
+  // .io.deephaven.proto.backplane.script.grpc.DocumentRange range = 1;
+  bool has_range() const;
   private:
-  const ::io::deephaven::proto::backplane::script::grpc::Position& _internal_start() const;
-  ::io::deephaven::proto::backplane::script::grpc::Position* _internal_mutable_start();
+  bool _internal_has_range() const;
   public:
-  void unsafe_arena_set_allocated_start(
-      ::io::deephaven::proto::backplane::script::grpc::Position* start);
-  ::io::deephaven::proto::backplane::script::grpc::Position* unsafe_arena_release_start();
-
-  // .io.deephaven.proto.backplane.script.grpc.Position end = 2;
-  bool has_end() const;
+  void clear_range();
+  const ::io::deephaven::proto::backplane::script::grpc::DocumentRange& range() const;
+  PROTOBUF_NODISCARD ::io::deephaven::proto::backplane::script::grpc::DocumentRange* release_range();
+  ::io::deephaven::proto::backplane::script::grpc::DocumentRange* mutable_range();
+  void set_allocated_range(::io::deephaven::proto::backplane::script::grpc::DocumentRange* range);
   private:
-  bool _internal_has_end() const;
+  const ::io::deephaven::proto::backplane::script::grpc::DocumentRange& _internal_range() const;
+  ::io::deephaven::proto::backplane::script::grpc::DocumentRange* _internal_mutable_range();
   public:
-  void clear_end();
-  const ::io::deephaven::proto::backplane::script::grpc::Position& end() const;
-  PROTOBUF_NODISCARD ::io::deephaven::proto::backplane::script::grpc::Position* release_end();
-  ::io::deephaven::proto::backplane::script::grpc::Position* mutable_end();
-  void set_allocated_end(::io::deephaven::proto::backplane::script::grpc::Position* end);
+  void unsafe_arena_set_allocated_range(
+      ::io::deephaven::proto::backplane::script::grpc::DocumentRange* range);
+  ::io::deephaven::proto::backplane::script::grpc::DocumentRange* unsafe_arena_release_range();
+
+  // int32 range_length = 2;
+  void clear_range_length();
+  int32_t range_length() const;
+  void set_range_length(int32_t value);
   private:
-  const ::io::deephaven::proto::backplane::script::grpc::Position& _internal_end() const;
-  ::io::deephaven::proto::backplane::script::grpc::Position* _internal_mutable_end();
+  int32_t _internal_range_length() const;
+  void _internal_set_range_length(int32_t value);
   public:
-  void unsafe_arena_set_allocated_end(
-      ::io::deephaven::proto::backplane::script::grpc::Position* end);
-  ::io::deephaven::proto::backplane::script::grpc::Position* unsafe_arena_release_end();
 
-  // @@protoc_insertion_point(class_scope:io.deephaven.proto.backplane.script.grpc.DocumentRange)
+  // @@protoc_insertion_point(class_scope:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.TextDocumentContentChangeEvent)
  private:
   class _Internal;
 
   template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
   typedef void InternalArenaConstructable_;
   typedef void DestructorSkippable_;
-  ::io::deephaven::proto::backplane::script::grpc::Position* start_;
-  ::io::deephaven::proto::backplane::script::grpc::Position* end_;
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr text_;
+  ::io::deephaven::proto::backplane::script::grpc::DocumentRange* range_;
+  int32_t range_length_;
   mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
   friend struct ::TableStruct_deephaven_2fproto_2fconsole_2eproto;
 };
 // -------------------------------------------------------------------
 
-class VersionedTextDocumentIdentifier final :
-    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier) */ {
+class ChangeDocumentRequest final :
+    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest) */ {
  public:
-  inline VersionedTextDocumentIdentifier() : VersionedTextDocumentIdentifier(nullptr) {}
-  ~VersionedTextDocumentIdentifier() override;
-  explicit PROTOBUF_CONSTEXPR VersionedTextDocumentIdentifier(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
+  inline ChangeDocumentRequest() : ChangeDocumentRequest(nullptr) {}
+  ~ChangeDocumentRequest() override;
+  explicit PROTOBUF_CONSTEXPR ChangeDocumentRequest(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
 
-  VersionedTextDocumentIdentifier(const VersionedTextDocumentIdentifier& from);
-  VersionedTextDocumentIdentifier(VersionedTextDocumentIdentifier&& from) noexcept
-    : VersionedTextDocumentIdentifier() {
+  ChangeDocumentRequest(const ChangeDocumentRequest& from);
+  ChangeDocumentRequest(ChangeDocumentRequest&& from) noexcept
+    : ChangeDocumentRequest() {
     *this = ::std::move(from);
   }
 
-  inline VersionedTextDocumentIdentifier& operator=(const VersionedTextDocumentIdentifier& from) {
+  inline ChangeDocumentRequest& operator=(const ChangeDocumentRequest& from) {
     CopyFrom(from);
     return *this;
   }
-  inline VersionedTextDocumentIdentifier& operator=(VersionedTextDocumentIdentifier&& from) noexcept {
+  inline ChangeDocumentRequest& operator=(ChangeDocumentRequest&& from) noexcept {
     if (this == &from) return *this;
     if (GetOwningArena() == from.GetOwningArena()
   #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
@@ -4257,20 +4491,20 @@ class VersionedTextDocumentIdentifier final :
   static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
     return default_instance().GetMetadata().reflection;
   }
-  static const VersionedTextDocumentIdentifier& default_instance() {
+  static const ChangeDocumentRequest& default_instance() {
     return *internal_default_instance();
   }
-  static inline const VersionedTextDocumentIdentifier* internal_default_instance() {
-    return reinterpret_cast<const VersionedTextDocumentIdentifier*>(
-               &_VersionedTextDocumentIdentifier_default_instance_);
+  static inline const ChangeDocumentRequest* internal_default_instance() {
+    return reinterpret_cast<const ChangeDocumentRequest*>(
+               &_ChangeDocumentRequest_default_instance_);
   }
   static constexpr int kIndexInFileMessages =
     23;
 
-  friend void swap(VersionedTextDocumentIdentifier& a, VersionedTextDocumentIdentifier& b) {
+  friend void swap(ChangeDocumentRequest& a, ChangeDocumentRequest& b) {
     a.Swap(&b);
   }
-  inline void Swap(VersionedTextDocumentIdentifier* other) {
+  inline void Swap(ChangeDocumentRequest* other) {
     if (other == this) return;
   #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
     if (GetOwningArena() != nullptr &&
@@ -4283,7 +4517,7 @@ class VersionedTextDocumentIdentifier final :
       ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
     }
   }
-  void UnsafeArenaSwap(VersionedTextDocumentIdentifier* other) {
+  void UnsafeArenaSwap(ChangeDocumentRequest* other) {
     if (other == this) return;
     GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
     InternalSwap(other);
@@ -4291,13 +4525,13 @@ class VersionedTextDocumentIdentifier final :
 
   // implements Message ----------------------------------------------
 
-  VersionedTextDocumentIdentifier* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
-    return CreateMaybeMessage<VersionedTextDocumentIdentifier>(arena);
+  ChangeDocumentRequest* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
+    return CreateMaybeMessage<ChangeDocumentRequest>(arena);
   }
   using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
-  void CopyFrom(const VersionedTextDocumentIdentifier& from);
+  void CopyFrom(const ChangeDocumentRequest& from);
   using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
-  void MergeFrom(const VersionedTextDocumentIdentifier& from);
+  void MergeFrom(const ChangeDocumentRequest& from);
   private:
   static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
   public:
@@ -4314,15 +4548,15 @@ class VersionedTextDocumentIdentifier final :
   void SharedCtor();
   void SharedDtor();
   void SetCachedSize(int size) const final;
-  void InternalSwap(VersionedTextDocumentIdentifier* other);
+  void InternalSwap(ChangeDocumentRequest* other);
 
   private:
   friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
   static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
-    return "io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier";
+    return "io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest";
   }
   protected:
-  explicit VersionedTextDocumentIdentifier(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+  explicit ChangeDocumentRequest(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                        bool is_message_owned = false);
   public:
 
@@ -4333,67 +4567,102 @@ class VersionedTextDocumentIdentifier final :
 
   // nested types ----------------------------------------------------
 
+  typedef ChangeDocumentRequest_TextDocumentContentChangeEvent TextDocumentContentChangeEvent;
+
   // accessors -------------------------------------------------------
 
   enum : int {
-    kUriFieldNumber = 1,
-    kVersionFieldNumber = 2,
+    kContentChangesFieldNumber = 3,
+    kConsoleIdFieldNumber = 1,
+    kTextDocumentFieldNumber = 2,
   };
-  // string uri = 1;
-  void clear_uri();
-  const std::string& uri() const;
-  template <typename ArgT0 = const std::string&, typename... ArgT>
-  void set_uri(ArgT0&& arg0, ArgT... args);
-  std::string* mutable_uri();
-  PROTOBUF_NODISCARD std::string* release_uri();
-  void set_allocated_uri(std::string* uri);
+  // repeated .io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.TextDocumentContentChangeEvent content_changes = 3;
+  int content_changes_size() const;
   private:
-  const std::string& _internal_uri() const;
-  inline PROTOBUF_ALWAYS_INLINE void _internal_set_uri(const std::string& value);
-  std::string* _internal_mutable_uri();
+  int _internal_content_changes_size() const;
   public:
+  void clear_content_changes();
+  ::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest_TextDocumentContentChangeEvent* mutable_content_changes(int index);
+  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest_TextDocumentContentChangeEvent >*
+      mutable_content_changes();
+  private:
+  const ::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest_TextDocumentContentChangeEvent& _internal_content_changes(int index) const;
+  ::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest_TextDocumentContentChangeEvent* _internal_add_content_changes();
+  public:
+  const ::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest_TextDocumentContentChangeEvent& content_changes(int index) const;
+  ::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest_TextDocumentContentChangeEvent* add_content_changes();
+  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest_TextDocumentContentChangeEvent >&
+      content_changes() const;
 
-  // int32 version = 2;
-  void clear_version();
-  int32_t version() const;
-  void set_version(int32_t value);
+  // .io.deephaven.proto.backplane.grpc.Ticket console_id = 1 [deprecated = true];
+  PROTOBUF_DEPRECATED bool has_console_id() const;
   private:
-  int32_t _internal_version() const;
-  void _internal_set_version(int32_t value);
+  bool _internal_has_console_id() const;
+  public:
+  PROTOBUF_DEPRECATED void clear_console_id();
+  PROTOBUF_DEPRECATED const ::io::deephaven::proto::backplane::grpc::Ticket& console_id() const;
+  PROTOBUF_NODISCARD PROTOBUF_DEPRECATED ::io::deephaven::proto::backplane::grpc::Ticket* release_console_id();
+  PROTOBUF_DEPRECATED ::io::deephaven::proto::backplane::grpc::Ticket* mutable_console_id();
+  PROTOBUF_DEPRECATED void set_allocated_console_id(::io::deephaven::proto::backplane::grpc::Ticket* console_id);
+  private:
+  const ::io::deephaven::proto::backplane::grpc::Ticket& _internal_console_id() const;
+  ::io::deephaven::proto::backplane::grpc::Ticket* _internal_mutable_console_id();
   public:
+  PROTOBUF_DEPRECATED void unsafe_arena_set_allocated_console_id(
+      ::io::deephaven::proto::backplane::grpc::Ticket* console_id);
+  PROTOBUF_DEPRECATED ::io::deephaven::proto::backplane::grpc::Ticket* unsafe_arena_release_console_id();
 
-  // @@protoc_insertion_point(class_scope:io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier)
+  // .io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier text_document = 2;
+  bool has_text_document() const;
+  private:
+  bool _internal_has_text_document() const;
+  public:
+  void clear_text_document();
+  const ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier& text_document() const;
+  PROTOBUF_NODISCARD ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* release_text_document();
+  ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* mutable_text_document();
+  void set_allocated_text_document(::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* text_document);
+  private:
+  const ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier& _internal_text_document() const;
+  ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* _internal_mutable_text_document();
+  public:
+  void unsafe_arena_set_allocated_text_document(
+      ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* text_document);
+  ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* unsafe_arena_release_text_document();
+
+  // @@protoc_insertion_point(class_scope:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest)
  private:
   class _Internal;
 
   template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
   typedef void InternalArenaConstructable_;
   typedef void DestructorSkippable_;
-  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr uri_;
-  int32_t version_;
+  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest_TextDocumentContentChangeEvent > content_changes_;
+  ::io::deephaven::proto::backplane::grpc::Ticket* console_id_;
+  ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* text_document_;
   mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
   friend struct ::TableStruct_deephaven_2fproto_2fconsole_2eproto;
 };
 // -------------------------------------------------------------------
 
-class Position final :
-    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:io.deephaven.proto.backplane.script.grpc.Position) */ {
+class DocumentRange final :
+    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:io.deephaven.proto.backplane.script.grpc.DocumentRange) */ {
  public:
-  inline Position() : Position(nullptr) {}
-  ~Position() override;
-  explicit PROTOBUF_CONSTEXPR Position(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
+  inline DocumentRange() : DocumentRange(nullptr) {}
+  ~DocumentRange() override;
+  explicit PROTOBUF_CONSTEXPR DocumentRange(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
 
-  Position(const Position& from);
-  Position(Position&& from) noexcept
-    : Position() {
-    *this = ::std::move(from);
-  }
+  DocumentRange(const DocumentRange& from);
+  DocumentRange(DocumentRange&& from) noexcept
+    : DocumentRange() {
+    *this = ::std::move(from);
+  }
 
-  inline Position& operator=(const Position& from) {
+  inline DocumentRange& operator=(const DocumentRange& from) {
     CopyFrom(from);
     return *this;
   }
-  inline Position& operator=(Position&& from) noexcept {
+  inline DocumentRange& operator=(DocumentRange&& from) noexcept {
     if (this == &from) return *this;
     if (GetOwningArena() == from.GetOwningArena()
   #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
@@ -4416,20 +4685,20 @@ class Position final :
   static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
     return default_instance().GetMetadata().reflection;
   }
-  static const Position& default_instance() {
+  static const DocumentRange& default_instance() {
     return *internal_default_instance();
   }
-  static inline const Position* internal_default_instance() {
-    return reinterpret_cast<const Position*>(
-               &_Position_default_instance_);
+  static inline const DocumentRange* internal_default_instance() {
+    return reinterpret_cast<const DocumentRange*>(
+               &_DocumentRange_default_instance_);
   }
   static constexpr int kIndexInFileMessages =
     24;
 
-  friend void swap(Position& a, Position& b) {
+  friend void swap(DocumentRange& a, DocumentRange& b) {
     a.Swap(&b);
   }
-  inline void Swap(Position* other) {
+  inline void Swap(DocumentRange* other) {
     if (other == this) return;
   #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
     if (GetOwningArena() != nullptr &&
@@ -4442,7 +4711,7 @@ class Position final :
       ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
     }
   }
-  void UnsafeArenaSwap(Position* other) {
+  void UnsafeArenaSwap(DocumentRange* other) {
     if (other == this) return;
     GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
     InternalSwap(other);
@@ -4450,13 +4719,13 @@ class Position final :
 
   // implements Message ----------------------------------------------
 
-  Position* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
-    return CreateMaybeMessage<Position>(arena);
+  DocumentRange* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
+    return CreateMaybeMessage<DocumentRange>(arena);
   }
   using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
-  void CopyFrom(const Position& from);
+  void CopyFrom(const DocumentRange& from);
   using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
-  void MergeFrom(const Position& from);
+  void MergeFrom(const DocumentRange& from);
   private:
   static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
   public:
@@ -4473,15 +4742,15 @@ class Position final :
   void SharedCtor();
   void SharedDtor();
   void SetCachedSize(int size) const final;
-  void InternalSwap(Position* other);
+  void InternalSwap(DocumentRange* other);
 
   private:
   friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
   static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
-    return "io.deephaven.proto.backplane.script.grpc.Position";
+    return "io.deephaven.proto.backplane.script.grpc.DocumentRange";
   }
   protected:
-  explicit Position(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+  explicit DocumentRange(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                        bool is_message_owned = false);
   public:
 
@@ -4495,59 +4764,77 @@ class Position final :
   // accessors -------------------------------------------------------
 
   enum : int {
-    kLineFieldNumber = 1,
-    kCharacterFieldNumber = 2,
+    kStartFieldNumber = 1,
+    kEndFieldNumber = 2,
   };
-  // int32 line = 1;
-  void clear_line();
-  int32_t line() const;
-  void set_line(int32_t value);
+  // .io.deephaven.proto.backplane.script.grpc.Position start = 1;
+  bool has_start() const;
   private:
-  int32_t _internal_line() const;
-  void _internal_set_line(int32_t value);
+  bool _internal_has_start() const;
+  public:
+  void clear_start();
+  const ::io::deephaven::proto::backplane::script::grpc::Position& start() const;
+  PROTOBUF_NODISCARD ::io::deephaven::proto::backplane::script::grpc::Position* release_start();
+  ::io::deephaven::proto::backplane::script::grpc::Position* mutable_start();
+  void set_allocated_start(::io::deephaven::proto::backplane::script::grpc::Position* start);
+  private:
+  const ::io::deephaven::proto::backplane::script::grpc::Position& _internal_start() const;
+  ::io::deephaven::proto::backplane::script::grpc::Position* _internal_mutable_start();
   public:
+  void unsafe_arena_set_allocated_start(
+      ::io::deephaven::proto::backplane::script::grpc::Position* start);
+  ::io::deephaven::proto::backplane::script::grpc::Position* unsafe_arena_release_start();
 
-  // int32 character = 2;
-  void clear_character();
-  int32_t character() const;
-  void set_character(int32_t value);
+  // .io.deephaven.proto.backplane.script.grpc.Position end = 2;
+  bool has_end() const;
   private:
-  int32_t _internal_character() const;
-  void _internal_set_character(int32_t value);
+  bool _internal_has_end() const;
+  public:
+  void clear_end();
+  const ::io::deephaven::proto::backplane::script::grpc::Position& end() const;
+  PROTOBUF_NODISCARD ::io::deephaven::proto::backplane::script::grpc::Position* release_end();
+  ::io::deephaven::proto::backplane::script::grpc::Position* mutable_end();
+  void set_allocated_end(::io::deephaven::proto::backplane::script::grpc::Position* end);
+  private:
+  const ::io::deephaven::proto::backplane::script::grpc::Position& _internal_end() const;
+  ::io::deephaven::proto::backplane::script::grpc::Position* _internal_mutable_end();
   public:
+  void unsafe_arena_set_allocated_end(
+      ::io::deephaven::proto::backplane::script::grpc::Position* end);
+  ::io::deephaven::proto::backplane::script::grpc::Position* unsafe_arena_release_end();
 
-  // @@protoc_insertion_point(class_scope:io.deephaven.proto.backplane.script.grpc.Position)
+  // @@protoc_insertion_point(class_scope:io.deephaven.proto.backplane.script.grpc.DocumentRange)
  private:
   class _Internal;
 
   template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
   typedef void InternalArenaConstructable_;
   typedef void DestructorSkippable_;
-  int32_t line_;
-  int32_t character_;
+  ::io::deephaven::proto::backplane::script::grpc::Position* start_;
+  ::io::deephaven::proto::backplane::script::grpc::Position* end_;
   mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
   friend struct ::TableStruct_deephaven_2fproto_2fconsole_2eproto;
 };
 // -------------------------------------------------------------------
 
-class GetCompletionItemsRequest final :
-    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest) */ {
+class VersionedTextDocumentIdentifier final :
+    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier) */ {
  public:
-  inline GetCompletionItemsRequest() : GetCompletionItemsRequest(nullptr) {}
-  ~GetCompletionItemsRequest() override;
-  explicit PROTOBUF_CONSTEXPR GetCompletionItemsRequest(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
+  inline VersionedTextDocumentIdentifier() : VersionedTextDocumentIdentifier(nullptr) {}
+  ~VersionedTextDocumentIdentifier() override;
+  explicit PROTOBUF_CONSTEXPR VersionedTextDocumentIdentifier(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
 
-  GetCompletionItemsRequest(const GetCompletionItemsRequest& from);
-  GetCompletionItemsRequest(GetCompletionItemsRequest&& from) noexcept
-    : GetCompletionItemsRequest() {
+  VersionedTextDocumentIdentifier(const VersionedTextDocumentIdentifier& from);
+  VersionedTextDocumentIdentifier(VersionedTextDocumentIdentifier&& from) noexcept
+    : VersionedTextDocumentIdentifier() {
     *this = ::std::move(from);
   }
 
-  inline GetCompletionItemsRequest& operator=(const GetCompletionItemsRequest& from) {
+  inline VersionedTextDocumentIdentifier& operator=(const VersionedTextDocumentIdentifier& from) {
     CopyFrom(from);
     return *this;
   }
-  inline GetCompletionItemsRequest& operator=(GetCompletionItemsRequest&& from) noexcept {
+  inline VersionedTextDocumentIdentifier& operator=(VersionedTextDocumentIdentifier&& from) noexcept {
     if (this == &from) return *this;
     if (GetOwningArena() == from.GetOwningArena()
   #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
@@ -4570,20 +4857,20 @@ class GetCompletionItemsRequest final :
   static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
     return default_instance().GetMetadata().reflection;
   }
-  static const GetCompletionItemsRequest& default_instance() {
+  static const VersionedTextDocumentIdentifier& default_instance() {
     return *internal_default_instance();
   }
-  static inline const GetCompletionItemsRequest* internal_default_instance() {
-    return reinterpret_cast<const GetCompletionItemsRequest*>(
-               &_GetCompletionItemsRequest_default_instance_);
+  static inline const VersionedTextDocumentIdentifier* internal_default_instance() {
+    return reinterpret_cast<const VersionedTextDocumentIdentifier*>(
+               &_VersionedTextDocumentIdentifier_default_instance_);
   }
   static constexpr int kIndexInFileMessages =
     25;
 
-  friend void swap(GetCompletionItemsRequest& a, GetCompletionItemsRequest& b) {
+  friend void swap(VersionedTextDocumentIdentifier& a, VersionedTextDocumentIdentifier& b) {
     a.Swap(&b);
   }
-  inline void Swap(GetCompletionItemsRequest* other) {
+  inline void Swap(VersionedTextDocumentIdentifier* other) {
     if (other == this) return;
   #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
     if (GetOwningArena() != nullptr &&
@@ -4596,7 +4883,7 @@ class GetCompletionItemsRequest final :
       ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
     }
   }
-  void UnsafeArenaSwap(GetCompletionItemsRequest* other) {
+  void UnsafeArenaSwap(VersionedTextDocumentIdentifier* other) {
     if (other == this) return;
     GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
     InternalSwap(other);
@@ -4604,13 +4891,13 @@ class GetCompletionItemsRequest final :
 
   // implements Message ----------------------------------------------
 
-  GetCompletionItemsRequest* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
-    return CreateMaybeMessage<GetCompletionItemsRequest>(arena);
+  VersionedTextDocumentIdentifier* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
+    return CreateMaybeMessage<VersionedTextDocumentIdentifier>(arena);
   }
   using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
-  void CopyFrom(const GetCompletionItemsRequest& from);
+  void CopyFrom(const VersionedTextDocumentIdentifier& from);
   using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
-  void MergeFrom(const GetCompletionItemsRequest& from);
+  void MergeFrom(const VersionedTextDocumentIdentifier& from);
   private:
   static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
   public:
@@ -4627,15 +4914,15 @@ class GetCompletionItemsRequest final :
   void SharedCtor();
   void SharedDtor();
   void SetCachedSize(int size) const final;
-  void InternalSwap(GetCompletionItemsRequest* other);
+  void InternalSwap(VersionedTextDocumentIdentifier* other);
 
   private:
   friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
   static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
-    return "io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest";
+    return "io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier";
   }
   protected:
-  explicit GetCompletionItemsRequest(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+  explicit VersionedTextDocumentIdentifier(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                        bool is_message_owned = false);
   public:
 
@@ -4649,128 +4936,64 @@ class GetCompletionItemsRequest final :
   // accessors -------------------------------------------------------
 
   enum : int {
-    kConsoleIdFieldNumber = 1,
-    kContextFieldNumber = 2,
-    kTextDocumentFieldNumber = 3,
-    kPositionFieldNumber = 4,
-    kRequestIdFieldNumber = 5,
+    kUriFieldNumber = 1,
+    kVersionFieldNumber = 2,
   };
-  // .io.deephaven.proto.backplane.grpc.Ticket console_id = 1;
-  bool has_console_id() const;
-  private:
-  bool _internal_has_console_id() const;
-  public:
-  void clear_console_id();
-  const ::io::deephaven::proto::backplane::grpc::Ticket& console_id() const;
-  PROTOBUF_NODISCARD ::io::deephaven::proto::backplane::grpc::Ticket* release_console_id();
-  ::io::deephaven::proto::backplane::grpc::Ticket* mutable_console_id();
-  void set_allocated_console_id(::io::deephaven::proto::backplane::grpc::Ticket* console_id);
-  private:
-  const ::io::deephaven::proto::backplane::grpc::Ticket& _internal_console_id() const;
-  ::io::deephaven::proto::backplane::grpc::Ticket* _internal_mutable_console_id();
-  public:
-  void unsafe_arena_set_allocated_console_id(
-      ::io::deephaven::proto::backplane::grpc::Ticket* console_id);
-  ::io::deephaven::proto::backplane::grpc::Ticket* unsafe_arena_release_console_id();
-
-  // .io.deephaven.proto.backplane.script.grpc.CompletionContext context = 2;
-  bool has_context() const;
-  private:
-  bool _internal_has_context() const;
-  public:
-  void clear_context();
-  const ::io::deephaven::proto::backplane::script::grpc::CompletionContext& context() const;
-  PROTOBUF_NODISCARD ::io::deephaven::proto::backplane::script::grpc::CompletionContext* release_context();
-  ::io::deephaven::proto::backplane::script::grpc::CompletionContext* mutable_context();
-  void set_allocated_context(::io::deephaven::proto::backplane::script::grpc::CompletionContext* context);
-  private:
-  const ::io::deephaven::proto::backplane::script::grpc::CompletionContext& _internal_context() const;
-  ::io::deephaven::proto::backplane::script::grpc::CompletionContext* _internal_mutable_context();
-  public:
-  void unsafe_arena_set_allocated_context(
-      ::io::deephaven::proto::backplane::script::grpc::CompletionContext* context);
-  ::io::deephaven::proto::backplane::script::grpc::CompletionContext* unsafe_arena_release_context();
-
-  // .io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier text_document = 3;
-  bool has_text_document() const;
-  private:
-  bool _internal_has_text_document() const;
-  public:
-  void clear_text_document();
-  const ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier& text_document() const;
-  PROTOBUF_NODISCARD ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* release_text_document();
-  ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* mutable_text_document();
-  void set_allocated_text_document(::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* text_document);
-  private:
-  const ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier& _internal_text_document() const;
-  ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* _internal_mutable_text_document();
-  public:
-  void unsafe_arena_set_allocated_text_document(
-      ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* text_document);
-  ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* unsafe_arena_release_text_document();
-
-  // .io.deephaven.proto.backplane.script.grpc.Position position = 4;
-  bool has_position() const;
-  private:
-  bool _internal_has_position() const;
-  public:
-  void clear_position();
-  const ::io::deephaven::proto::backplane::script::grpc::Position& position() const;
-  PROTOBUF_NODISCARD ::io::deephaven::proto::backplane::script::grpc::Position* release_position();
-  ::io::deephaven::proto::backplane::script::grpc::Position* mutable_position();
-  void set_allocated_position(::io::deephaven::proto::backplane::script::grpc::Position* position);
+  // string uri = 1;
+  void clear_uri();
+  const std::string& uri() const;
+  template <typename ArgT0 = const std::string&, typename... ArgT>
+  void set_uri(ArgT0&& arg0, ArgT... args);
+  std::string* mutable_uri();
+  PROTOBUF_NODISCARD std::string* release_uri();
+  void set_allocated_uri(std::string* uri);
   private:
-  const ::io::deephaven::proto::backplane::script::grpc::Position& _internal_position() const;
-  ::io::deephaven::proto::backplane::script::grpc::Position* _internal_mutable_position();
+  const std::string& _internal_uri() const;
+  inline PROTOBUF_ALWAYS_INLINE void _internal_set_uri(const std::string& value);
+  std::string* _internal_mutable_uri();
   public:
-  void unsafe_arena_set_allocated_position(
-      ::io::deephaven::proto::backplane::script::grpc::Position* position);
-  ::io::deephaven::proto::backplane::script::grpc::Position* unsafe_arena_release_position();
 
-  // int32 request_id = 5;
-  void clear_request_id();
-  int32_t request_id() const;
-  void set_request_id(int32_t value);
+  // int32 version = 2;
+  void clear_version();
+  int32_t version() const;
+  void set_version(int32_t value);
   private:
-  int32_t _internal_request_id() const;
-  void _internal_set_request_id(int32_t value);
+  int32_t _internal_version() const;
+  void _internal_set_version(int32_t value);
   public:
 
-  // @@protoc_insertion_point(class_scope:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest)
+  // @@protoc_insertion_point(class_scope:io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier)
  private:
   class _Internal;
 
   template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
   typedef void InternalArenaConstructable_;
   typedef void DestructorSkippable_;
-  ::io::deephaven::proto::backplane::grpc::Ticket* console_id_;
-  ::io::deephaven::proto::backplane::script::grpc::CompletionContext* context_;
-  ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* text_document_;
-  ::io::deephaven::proto::backplane::script::grpc::Position* position_;
-  int32_t request_id_;
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr uri_;
+  int32_t version_;
   mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
   friend struct ::TableStruct_deephaven_2fproto_2fconsole_2eproto;
 };
 // -------------------------------------------------------------------
 
-class CompletionContext final :
-    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:io.deephaven.proto.backplane.script.grpc.CompletionContext) */ {
+class Position final :
+    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:io.deephaven.proto.backplane.script.grpc.Position) */ {
  public:
-  inline CompletionContext() : CompletionContext(nullptr) {}
-  ~CompletionContext() override;
-  explicit PROTOBUF_CONSTEXPR CompletionContext(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
+  inline Position() : Position(nullptr) {}
+  ~Position() override;
+  explicit PROTOBUF_CONSTEXPR Position(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
 
-  CompletionContext(const CompletionContext& from);
-  CompletionContext(CompletionContext&& from) noexcept
-    : CompletionContext() {
+  Position(const Position& from);
+  Position(Position&& from) noexcept
+    : Position() {
     *this = ::std::move(from);
   }
 
-  inline CompletionContext& operator=(const CompletionContext& from) {
+  inline Position& operator=(const Position& from) {
     CopyFrom(from);
     return *this;
   }
-  inline CompletionContext& operator=(CompletionContext&& from) noexcept {
+  inline Position& operator=(Position&& from) noexcept {
     if (this == &from) return *this;
     if (GetOwningArena() == from.GetOwningArena()
   #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
@@ -4793,20 +5016,20 @@ class CompletionContext final :
   static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
     return default_instance().GetMetadata().reflection;
   }
-  static const CompletionContext& default_instance() {
+  static const Position& default_instance() {
     return *internal_default_instance();
   }
-  static inline const CompletionContext* internal_default_instance() {
-    return reinterpret_cast<const CompletionContext*>(
-               &_CompletionContext_default_instance_);
+  static inline const Position* internal_default_instance() {
+    return reinterpret_cast<const Position*>(
+               &_Position_default_instance_);
   }
   static constexpr int kIndexInFileMessages =
     26;
 
-  friend void swap(CompletionContext& a, CompletionContext& b) {
+  friend void swap(Position& a, Position& b) {
     a.Swap(&b);
   }
-  inline void Swap(CompletionContext* other) {
+  inline void Swap(Position* other) {
     if (other == this) return;
   #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
     if (GetOwningArena() != nullptr &&
@@ -4819,7 +5042,7 @@ class CompletionContext final :
       ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
     }
   }
-  void UnsafeArenaSwap(CompletionContext* other) {
+  void UnsafeArenaSwap(Position* other) {
     if (other == this) return;
     GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
     InternalSwap(other);
@@ -4827,13 +5050,13 @@ class CompletionContext final :
 
   // implements Message ----------------------------------------------
 
-  CompletionContext* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
-    return CreateMaybeMessage<CompletionContext>(arena);
+  Position* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
+    return CreateMaybeMessage<Position>(arena);
   }
   using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
-  void CopyFrom(const CompletionContext& from);
+  void CopyFrom(const Position& from);
   using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
-  void MergeFrom(const CompletionContext& from);
+  void MergeFrom(const Position& from);
   private:
   static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
   public:
@@ -4850,15 +5073,15 @@ class CompletionContext final :
   void SharedCtor();
   void SharedDtor();
   void SetCachedSize(int size) const final;
-  void InternalSwap(CompletionContext* other);
+  void InternalSwap(Position* other);
 
   private:
   friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
   static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
-    return "io.deephaven.proto.backplane.script.grpc.CompletionContext";
+    return "io.deephaven.proto.backplane.script.grpc.Position";
   }
   protected:
-  explicit CompletionContext(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+  explicit Position(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                        bool is_message_owned = false);
   public:
 
@@ -4872,64 +5095,59 @@ class CompletionContext final :
   // accessors -------------------------------------------------------
 
   enum : int {
-    kTriggerCharacterFieldNumber = 2,
-    kTriggerKindFieldNumber = 1,
+    kLineFieldNumber = 1,
+    kCharacterFieldNumber = 2,
   };
-  // string trigger_character = 2;
-  void clear_trigger_character();
-  const std::string& trigger_character() const;
-  template <typename ArgT0 = const std::string&, typename... ArgT>
-  void set_trigger_character(ArgT0&& arg0, ArgT... args);
-  std::string* mutable_trigger_character();
-  PROTOBUF_NODISCARD std::string* release_trigger_character();
-  void set_allocated_trigger_character(std::string* trigger_character);
+  // int32 line = 1;
+  void clear_line();
+  int32_t line() const;
+  void set_line(int32_t value);
   private:
-  const std::string& _internal_trigger_character() const;
-  inline PROTOBUF_ALWAYS_INLINE void _internal_set_trigger_character(const std::string& value);
-  std::string* _internal_mutable_trigger_character();
+  int32_t _internal_line() const;
+  void _internal_set_line(int32_t value);
   public:
 
-  // int32 trigger_kind = 1;
-  void clear_trigger_kind();
-  int32_t trigger_kind() const;
-  void set_trigger_kind(int32_t value);
+  // int32 character = 2;
+  void clear_character();
+  int32_t character() const;
+  void set_character(int32_t value);
   private:
-  int32_t _internal_trigger_kind() const;
-  void _internal_set_trigger_kind(int32_t value);
+  int32_t _internal_character() const;
+  void _internal_set_character(int32_t value);
   public:
 
-  // @@protoc_insertion_point(class_scope:io.deephaven.proto.backplane.script.grpc.CompletionContext)
+  // @@protoc_insertion_point(class_scope:io.deephaven.proto.backplane.script.grpc.Position)
  private:
   class _Internal;
 
   template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
   typedef void InternalArenaConstructable_;
   typedef void DestructorSkippable_;
-  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr trigger_character_;
-  int32_t trigger_kind_;
+  int32_t line_;
+  int32_t character_;
   mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
   friend struct ::TableStruct_deephaven_2fproto_2fconsole_2eproto;
 };
 // -------------------------------------------------------------------
 
-class GetCompletionItemsResponse final :
-    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsResponse) */ {
+class MarkupContent final :
+    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:io.deephaven.proto.backplane.script.grpc.MarkupContent) */ {
  public:
-  inline GetCompletionItemsResponse() : GetCompletionItemsResponse(nullptr) {}
-  ~GetCompletionItemsResponse() override;
-  explicit PROTOBUF_CONSTEXPR GetCompletionItemsResponse(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
+  inline MarkupContent() : MarkupContent(nullptr) {}
+  ~MarkupContent() override;
+  explicit PROTOBUF_CONSTEXPR MarkupContent(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
 
-  GetCompletionItemsResponse(const GetCompletionItemsResponse& from);
-  GetCompletionItemsResponse(GetCompletionItemsResponse&& from) noexcept
-    : GetCompletionItemsResponse() {
+  MarkupContent(const MarkupContent& from);
+  MarkupContent(MarkupContent&& from) noexcept
+    : MarkupContent() {
     *this = ::std::move(from);
   }
 
-  inline GetCompletionItemsResponse& operator=(const GetCompletionItemsResponse& from) {
+  inline MarkupContent& operator=(const MarkupContent& from) {
     CopyFrom(from);
     return *this;
   }
-  inline GetCompletionItemsResponse& operator=(GetCompletionItemsResponse&& from) noexcept {
+  inline MarkupContent& operator=(MarkupContent&& from) noexcept {
     if (this == &from) return *this;
     if (GetOwningArena() == from.GetOwningArena()
   #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
@@ -4952,20 +5170,20 @@ class GetCompletionItemsResponse final :
   static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
     return default_instance().GetMetadata().reflection;
   }
-  static const GetCompletionItemsResponse& default_instance() {
+  static const MarkupContent& default_instance() {
     return *internal_default_instance();
   }
-  static inline const GetCompletionItemsResponse* internal_default_instance() {
-    return reinterpret_cast<const GetCompletionItemsResponse*>(
-               &_GetCompletionItemsResponse_default_instance_);
+  static inline const MarkupContent* internal_default_instance() {
+    return reinterpret_cast<const MarkupContent*>(
+               &_MarkupContent_default_instance_);
   }
   static constexpr int kIndexInFileMessages =
     27;
 
-  friend void swap(GetCompletionItemsResponse& a, GetCompletionItemsResponse& b) {
+  friend void swap(MarkupContent& a, MarkupContent& b) {
     a.Swap(&b);
   }
-  inline void Swap(GetCompletionItemsResponse* other) {
+  inline void Swap(MarkupContent* other) {
     if (other == this) return;
   #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
     if (GetOwningArena() != nullptr &&
@@ -4978,7 +5196,7 @@ class GetCompletionItemsResponse final :
       ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
     }
   }
-  void UnsafeArenaSwap(GetCompletionItemsResponse* other) {
+  void UnsafeArenaSwap(MarkupContent* other) {
     if (other == this) return;
     GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
     InternalSwap(other);
@@ -4986,13 +5204,13 @@ class GetCompletionItemsResponse final :
 
   // implements Message ----------------------------------------------
 
-  GetCompletionItemsResponse* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
-    return CreateMaybeMessage<GetCompletionItemsResponse>(arena);
+  MarkupContent* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
+    return CreateMaybeMessage<MarkupContent>(arena);
   }
   using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
-  void CopyFrom(const GetCompletionItemsResponse& from);
+  void CopyFrom(const MarkupContent& from);
   using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
-  void MergeFrom(const GetCompletionItemsResponse& from);
+  void MergeFrom(const MarkupContent& from);
   private:
   static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
   public:
@@ -5009,15 +5227,15 @@ class GetCompletionItemsResponse final :
   void SharedCtor();
   void SharedDtor();
   void SetCachedSize(int size) const final;
-  void InternalSwap(GetCompletionItemsResponse* other);
+  void InternalSwap(MarkupContent* other);
 
   private:
   friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
   static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
-    return "io.deephaven.proto.backplane.script.grpc.GetCompletionItemsResponse";
+    return "io.deephaven.proto.backplane.script.grpc.MarkupContent";
   }
   protected:
-  explicit GetCompletionItemsResponse(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+  explicit MarkupContent(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                        bool is_message_owned = false);
   public:
 
@@ -5031,79 +5249,69 @@ class GetCompletionItemsResponse final :
   // accessors -------------------------------------------------------
 
   enum : int {
-    kItemsFieldNumber = 1,
-    kRequestIdFieldNumber = 2,
-    kSuccessFieldNumber = 3,
+    kKindFieldNumber = 1,
+    kValueFieldNumber = 2,
   };
-  // repeated .io.deephaven.proto.backplane.script.grpc.CompletionItem items = 1;
-  int items_size() const;
-  private:
-  int _internal_items_size() const;
-  public:
-  void clear_items();
-  ::io::deephaven::proto::backplane::script::grpc::CompletionItem* mutable_items(int index);
-  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::CompletionItem >*
-      mutable_items();
-  private:
-  const ::io::deephaven::proto::backplane::script::grpc::CompletionItem& _internal_items(int index) const;
-  ::io::deephaven::proto::backplane::script::grpc::CompletionItem* _internal_add_items();
-  public:
-  const ::io::deephaven::proto::backplane::script::grpc::CompletionItem& items(int index) const;
-  ::io::deephaven::proto::backplane::script::grpc::CompletionItem* add_items();
-  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::CompletionItem >&
-      items() const;
-
-  // int32 request_id = 2;
-  void clear_request_id();
-  int32_t request_id() const;
-  void set_request_id(int32_t value);
+  // string kind = 1;
+  void clear_kind();
+  const std::string& kind() const;
+  template <typename ArgT0 = const std::string&, typename... ArgT>
+  void set_kind(ArgT0&& arg0, ArgT... args);
+  std::string* mutable_kind();
+  PROTOBUF_NODISCARD std::string* release_kind();
+  void set_allocated_kind(std::string* kind);
   private:
-  int32_t _internal_request_id() const;
-  void _internal_set_request_id(int32_t value);
+  const std::string& _internal_kind() const;
+  inline PROTOBUF_ALWAYS_INLINE void _internal_set_kind(const std::string& value);
+  std::string* _internal_mutable_kind();
   public:
 
-  // bool success = 3;
-  void clear_success();
-  bool success() const;
-  void set_success(bool value);
+  // string value = 2;
+  void clear_value();
+  const std::string& value() const;
+  template <typename ArgT0 = const std::string&, typename... ArgT>
+  void set_value(ArgT0&& arg0, ArgT... args);
+  std::string* mutable_value();
+  PROTOBUF_NODISCARD std::string* release_value();
+  void set_allocated_value(std::string* value);
   private:
-  bool _internal_success() const;
-  void _internal_set_success(bool value);
+  const std::string& _internal_value() const;
+  inline PROTOBUF_ALWAYS_INLINE void _internal_set_value(const std::string& value);
+  std::string* _internal_mutable_value();
   public:
 
-  // @@protoc_insertion_point(class_scope:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsResponse)
+  // @@protoc_insertion_point(class_scope:io.deephaven.proto.backplane.script.grpc.MarkupContent)
  private:
   class _Internal;
 
   template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
   typedef void InternalArenaConstructable_;
   typedef void DestructorSkippable_;
-  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::CompletionItem > items_;
-  int32_t request_id_;
-  bool success_;
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr kind_;
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr value_;
   mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
   friend struct ::TableStruct_deephaven_2fproto_2fconsole_2eproto;
 };
 // -------------------------------------------------------------------
 
-class CompletionItem final :
-    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:io.deephaven.proto.backplane.script.grpc.CompletionItem) */ {
+class GetCompletionItemsRequest final :
+    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest) */ {
  public:
-  inline CompletionItem() : CompletionItem(nullptr) {}
-  ~CompletionItem() override;
-  explicit PROTOBUF_CONSTEXPR CompletionItem(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
+  inline GetCompletionItemsRequest() : GetCompletionItemsRequest(nullptr) {}
+  ~GetCompletionItemsRequest() override;
+  explicit PROTOBUF_CONSTEXPR GetCompletionItemsRequest(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
 
-  CompletionItem(const CompletionItem& from);
-  CompletionItem(CompletionItem&& from) noexcept
-    : CompletionItem() {
+  GetCompletionItemsRequest(const GetCompletionItemsRequest& from);
+  GetCompletionItemsRequest(GetCompletionItemsRequest&& from) noexcept
+    : GetCompletionItemsRequest() {
     *this = ::std::move(from);
   }
 
-  inline CompletionItem& operator=(const CompletionItem& from) {
+  inline GetCompletionItemsRequest& operator=(const GetCompletionItemsRequest& from) {
     CopyFrom(from);
     return *this;
   }
-  inline CompletionItem& operator=(CompletionItem&& from) noexcept {
+  inline GetCompletionItemsRequest& operator=(GetCompletionItemsRequest&& from) noexcept {
     if (this == &from) return *this;
     if (GetOwningArena() == from.GetOwningArena()
   #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
@@ -5126,20 +5334,20 @@ class CompletionItem final :
   static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
     return default_instance().GetMetadata().reflection;
   }
-  static const CompletionItem& default_instance() {
+  static const GetCompletionItemsRequest& default_instance() {
     return *internal_default_instance();
   }
-  static inline const CompletionItem* internal_default_instance() {
-    return reinterpret_cast<const CompletionItem*>(
-               &_CompletionItem_default_instance_);
+  static inline const GetCompletionItemsRequest* internal_default_instance() {
+    return reinterpret_cast<const GetCompletionItemsRequest*>(
+               &_GetCompletionItemsRequest_default_instance_);
   }
   static constexpr int kIndexInFileMessages =
     28;
 
-  friend void swap(CompletionItem& a, CompletionItem& b) {
+  friend void swap(GetCompletionItemsRequest& a, GetCompletionItemsRequest& b) {
     a.Swap(&b);
   }
-  inline void Swap(CompletionItem* other) {
+  inline void Swap(GetCompletionItemsRequest* other) {
     if (other == this) return;
   #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
     if (GetOwningArena() != nullptr &&
@@ -5152,7 +5360,7 @@ class CompletionItem final :
       ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
     }
   }
-  void UnsafeArenaSwap(CompletionItem* other) {
+  void UnsafeArenaSwap(GetCompletionItemsRequest* other) {
     if (other == this) return;
     GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
     InternalSwap(other);
@@ -5160,13 +5368,13 @@ class CompletionItem final :
 
   // implements Message ----------------------------------------------
 
-  CompletionItem* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
-    return CreateMaybeMessage<CompletionItem>(arena);
+  GetCompletionItemsRequest* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
+    return CreateMaybeMessage<GetCompletionItemsRequest>(arena);
   }
   using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
-  void CopyFrom(const CompletionItem& from);
+  void CopyFrom(const GetCompletionItemsRequest& from);
   using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
-  void MergeFrom(const CompletionItem& from);
+  void MergeFrom(const GetCompletionItemsRequest& from);
   private:
   static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
   public:
@@ -5183,15 +5391,15 @@ class CompletionItem final :
   void SharedCtor();
   void SharedDtor();
   void SetCachedSize(int size) const final;
-  void InternalSwap(CompletionItem* other);
+  void InternalSwap(GetCompletionItemsRequest* other);
 
   private:
   friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
   static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
-    return "io.deephaven.proto.backplane.script.grpc.CompletionItem";
+    return "io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest";
   }
   protected:
-  explicit CompletionItem(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+  explicit GetCompletionItemsRequest(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                        bool is_message_owned = false);
   public:
 
@@ -5205,249 +5413,128 @@ class CompletionItem final :
   // accessors -------------------------------------------------------
 
   enum : int {
-    kAdditionalTextEditsFieldNumber = 13,
-    kCommitCharactersFieldNumber = 14,
-    kLabelFieldNumber = 3,
-    kDetailFieldNumber = 5,
-    kDocumentationFieldNumber = 6,
-    kSortTextFieldNumber = 10,
-    kFilterTextFieldNumber = 11,
-    kTextEditFieldNumber = 9,
-    kStartFieldNumber = 1,
-    kLengthFieldNumber = 2,
-    kKindFieldNumber = 4,
-    kDeprecatedFieldNumber = 7,
-    kPreselectFieldNumber = 8,
-    kInsertTextFormatFieldNumber = 12,
+    kConsoleIdFieldNumber = 1,
+    kContextFieldNumber = 2,
+    kTextDocumentFieldNumber = 3,
+    kPositionFieldNumber = 4,
+    kRequestIdFieldNumber = 5,
   };
-  // repeated .io.deephaven.proto.backplane.script.grpc.TextEdit additional_text_edits = 13;
-  int additional_text_edits_size() const;
+  // .io.deephaven.proto.backplane.grpc.Ticket console_id = 1 [deprecated = true];
+  PROTOBUF_DEPRECATED bool has_console_id() const;
   private:
-  int _internal_additional_text_edits_size() const;
+  bool _internal_has_console_id() const;
   public:
-  void clear_additional_text_edits();
-  ::io::deephaven::proto::backplane::script::grpc::TextEdit* mutable_additional_text_edits(int index);
-  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::TextEdit >*
-      mutable_additional_text_edits();
+  PROTOBUF_DEPRECATED void clear_console_id();
+  PROTOBUF_DEPRECATED const ::io::deephaven::proto::backplane::grpc::Ticket& console_id() const;
+  PROTOBUF_NODISCARD PROTOBUF_DEPRECATED ::io::deephaven::proto::backplane::grpc::Ticket* release_console_id();
+  PROTOBUF_DEPRECATED ::io::deephaven::proto::backplane::grpc::Ticket* mutable_console_id();
+  PROTOBUF_DEPRECATED void set_allocated_console_id(::io::deephaven::proto::backplane::grpc::Ticket* console_id);
   private:
-  const ::io::deephaven::proto::backplane::script::grpc::TextEdit& _internal_additional_text_edits(int index) const;
-  ::io::deephaven::proto::backplane::script::grpc::TextEdit* _internal_add_additional_text_edits();
+  const ::io::deephaven::proto::backplane::grpc::Ticket& _internal_console_id() const;
+  ::io::deephaven::proto::backplane::grpc::Ticket* _internal_mutable_console_id();
   public:
-  const ::io::deephaven::proto::backplane::script::grpc::TextEdit& additional_text_edits(int index) const;
-  ::io::deephaven::proto::backplane::script::grpc::TextEdit* add_additional_text_edits();
-  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::TextEdit >&
-      additional_text_edits() const;
+  PROTOBUF_DEPRECATED void unsafe_arena_set_allocated_console_id(
+      ::io::deephaven::proto::backplane::grpc::Ticket* console_id);
+  PROTOBUF_DEPRECATED ::io::deephaven::proto::backplane::grpc::Ticket* unsafe_arena_release_console_id();
 
-  // repeated string commit_characters = 14;
-  int commit_characters_size() const;
+  // .io.deephaven.proto.backplane.script.grpc.CompletionContext context = 2;
+  bool has_context() const;
   private:
-  int _internal_commit_characters_size() const;
+  bool _internal_has_context() const;
   public:
-  void clear_commit_characters();
-  const std::string& commit_characters(int index) const;
-  std::string* mutable_commit_characters(int index);
-  void set_commit_characters(int index, const std::string& value);
-  void set_commit_characters(int index, std::string&& value);
-  void set_commit_characters(int index, const char* value);
-  void set_commit_characters(int index, const char* value, size_t size);
-  std::string* add_commit_characters();
-  void add_commit_characters(const std::string& value);
-  void add_commit_characters(std::string&& value);
-  void add_commit_characters(const char* value);
-  void add_commit_characters(const char* value, size_t size);
-  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>& commit_characters() const;
-  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>* mutable_commit_characters();
+  void clear_context();
+  const ::io::deephaven::proto::backplane::script::grpc::CompletionContext& context() const;
+  PROTOBUF_NODISCARD ::io::deephaven::proto::backplane::script::grpc::CompletionContext* release_context();
+  ::io::deephaven::proto::backplane::script::grpc::CompletionContext* mutable_context();
+  void set_allocated_context(::io::deephaven::proto::backplane::script::grpc::CompletionContext* context);
   private:
-  const std::string& _internal_commit_characters(int index) const;
-  std::string* _internal_add_commit_characters();
+  const ::io::deephaven::proto::backplane::script::grpc::CompletionContext& _internal_context() const;
+  ::io::deephaven::proto::backplane::script::grpc::CompletionContext* _internal_mutable_context();
   public:
+  void unsafe_arena_set_allocated_context(
+      ::io::deephaven::proto::backplane::script::grpc::CompletionContext* context);
+  ::io::deephaven::proto::backplane::script::grpc::CompletionContext* unsafe_arena_release_context();
 
-  // string label = 3;
-  void clear_label();
-  const std::string& label() const;
-  template <typename ArgT0 = const std::string&, typename... ArgT>
-  void set_label(ArgT0&& arg0, ArgT... args);
-  std::string* mutable_label();
-  PROTOBUF_NODISCARD std::string* release_label();
-  void set_allocated_label(std::string* label);
-  private:
-  const std::string& _internal_label() const;
-  inline PROTOBUF_ALWAYS_INLINE void _internal_set_label(const std::string& value);
-  std::string* _internal_mutable_label();
-  public:
-
-  // string detail = 5;
-  void clear_detail();
-  const std::string& detail() const;
-  template <typename ArgT0 = const std::string&, typename... ArgT>
-  void set_detail(ArgT0&& arg0, ArgT... args);
-  std::string* mutable_detail();
-  PROTOBUF_NODISCARD std::string* release_detail();
-  void set_allocated_detail(std::string* detail);
-  private:
-  const std::string& _internal_detail() const;
-  inline PROTOBUF_ALWAYS_INLINE void _internal_set_detail(const std::string& value);
-  std::string* _internal_mutable_detail();
-  public:
-
-  // string documentation = 6;
-  void clear_documentation();
-  const std::string& documentation() const;
-  template <typename ArgT0 = const std::string&, typename... ArgT>
-  void set_documentation(ArgT0&& arg0, ArgT... args);
-  std::string* mutable_documentation();
-  PROTOBUF_NODISCARD std::string* release_documentation();
-  void set_allocated_documentation(std::string* documentation);
-  private:
-  const std::string& _internal_documentation() const;
-  inline PROTOBUF_ALWAYS_INLINE void _internal_set_documentation(const std::string& value);
-  std::string* _internal_mutable_documentation();
-  public:
-
-  // string sort_text = 10;
-  void clear_sort_text();
-  const std::string& sort_text() const;
-  template <typename ArgT0 = const std::string&, typename... ArgT>
-  void set_sort_text(ArgT0&& arg0, ArgT... args);
-  std::string* mutable_sort_text();
-  PROTOBUF_NODISCARD std::string* release_sort_text();
-  void set_allocated_sort_text(std::string* sort_text);
-  private:
-  const std::string& _internal_sort_text() const;
-  inline PROTOBUF_ALWAYS_INLINE void _internal_set_sort_text(const std::string& value);
-  std::string* _internal_mutable_sort_text();
-  public:
-
-  // string filter_text = 11;
-  void clear_filter_text();
-  const std::string& filter_text() const;
-  template <typename ArgT0 = const std::string&, typename... ArgT>
-  void set_filter_text(ArgT0&& arg0, ArgT... args);
-  std::string* mutable_filter_text();
-  PROTOBUF_NODISCARD std::string* release_filter_text();
-  void set_allocated_filter_text(std::string* filter_text);
-  private:
-  const std::string& _internal_filter_text() const;
-  inline PROTOBUF_ALWAYS_INLINE void _internal_set_filter_text(const std::string& value);
-  std::string* _internal_mutable_filter_text();
-  public:
-
-  // .io.deephaven.proto.backplane.script.grpc.TextEdit text_edit = 9;
-  bool has_text_edit() const;
-  private:
-  bool _internal_has_text_edit() const;
-  public:
-  void clear_text_edit();
-  const ::io::deephaven::proto::backplane::script::grpc::TextEdit& text_edit() const;
-  PROTOBUF_NODISCARD ::io::deephaven::proto::backplane::script::grpc::TextEdit* release_text_edit();
-  ::io::deephaven::proto::backplane::script::grpc::TextEdit* mutable_text_edit();
-  void set_allocated_text_edit(::io::deephaven::proto::backplane::script::grpc::TextEdit* text_edit);
-  private:
-  const ::io::deephaven::proto::backplane::script::grpc::TextEdit& _internal_text_edit() const;
-  ::io::deephaven::proto::backplane::script::grpc::TextEdit* _internal_mutable_text_edit();
-  public:
-  void unsafe_arena_set_allocated_text_edit(
-      ::io::deephaven::proto::backplane::script::grpc::TextEdit* text_edit);
-  ::io::deephaven::proto::backplane::script::grpc::TextEdit* unsafe_arena_release_text_edit();
-
-  // int32 start = 1;
-  void clear_start();
-  int32_t start() const;
-  void set_start(int32_t value);
-  private:
-  int32_t _internal_start() const;
-  void _internal_set_start(int32_t value);
-  public:
-
-  // int32 length = 2;
-  void clear_length();
-  int32_t length() const;
-  void set_length(int32_t value);
+  // .io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier text_document = 3;
+  bool has_text_document() const;
   private:
-  int32_t _internal_length() const;
-  void _internal_set_length(int32_t value);
+  bool _internal_has_text_document() const;
   public:
-
-  // int32 kind = 4;
-  void clear_kind();
-  int32_t kind() const;
-  void set_kind(int32_t value);
+  void clear_text_document();
+  const ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier& text_document() const;
+  PROTOBUF_NODISCARD ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* release_text_document();
+  ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* mutable_text_document();
+  void set_allocated_text_document(::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* text_document);
   private:
-  int32_t _internal_kind() const;
-  void _internal_set_kind(int32_t value);
+  const ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier& _internal_text_document() const;
+  ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* _internal_mutable_text_document();
   public:
+  void unsafe_arena_set_allocated_text_document(
+      ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* text_document);
+  ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* unsafe_arena_release_text_document();
 
-  // bool deprecated = 7;
-  void clear_deprecated();
-  bool deprecated() const;
-  void set_deprecated(bool value);
+  // .io.deephaven.proto.backplane.script.grpc.Position position = 4;
+  bool has_position() const;
   private:
-  bool _internal_deprecated() const;
-  void _internal_set_deprecated(bool value);
+  bool _internal_has_position() const;
   public:
-
-  // bool preselect = 8;
-  void clear_preselect();
-  bool preselect() const;
-  void set_preselect(bool value);
+  void clear_position();
+  const ::io::deephaven::proto::backplane::script::grpc::Position& position() const;
+  PROTOBUF_NODISCARD ::io::deephaven::proto::backplane::script::grpc::Position* release_position();
+  ::io::deephaven::proto::backplane::script::grpc::Position* mutable_position();
+  void set_allocated_position(::io::deephaven::proto::backplane::script::grpc::Position* position);
   private:
-  bool _internal_preselect() const;
-  void _internal_set_preselect(bool value);
+  const ::io::deephaven::proto::backplane::script::grpc::Position& _internal_position() const;
+  ::io::deephaven::proto::backplane::script::grpc::Position* _internal_mutable_position();
   public:
+  void unsafe_arena_set_allocated_position(
+      ::io::deephaven::proto::backplane::script::grpc::Position* position);
+  ::io::deephaven::proto::backplane::script::grpc::Position* unsafe_arena_release_position();
 
-  // int32 insert_text_format = 12;
-  void clear_insert_text_format();
-  int32_t insert_text_format() const;
-  void set_insert_text_format(int32_t value);
+  // int32 request_id = 5 [deprecated = true];
+  PROTOBUF_DEPRECATED void clear_request_id();
+  PROTOBUF_DEPRECATED int32_t request_id() const;
+  PROTOBUF_DEPRECATED void set_request_id(int32_t value);
   private:
-  int32_t _internal_insert_text_format() const;
-  void _internal_set_insert_text_format(int32_t value);
+  int32_t _internal_request_id() const;
+  void _internal_set_request_id(int32_t value);
   public:
 
-  // @@protoc_insertion_point(class_scope:io.deephaven.proto.backplane.script.grpc.CompletionItem)
+  // @@protoc_insertion_point(class_scope:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest)
  private:
   class _Internal;
 
   template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
   typedef void InternalArenaConstructable_;
   typedef void DestructorSkippable_;
-  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::TextEdit > additional_text_edits_;
-  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string> commit_characters_;
-  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr label_;
-  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr detail_;
-  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr documentation_;
-  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr sort_text_;
-  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr filter_text_;
-  ::io::deephaven::proto::backplane::script::grpc::TextEdit* text_edit_;
-  int32_t start_;
-  int32_t length_;
-  int32_t kind_;
-  bool deprecated_;
-  bool preselect_;
-  int32_t insert_text_format_;
+  ::io::deephaven::proto::backplane::grpc::Ticket* console_id_;
+  ::io::deephaven::proto::backplane::script::grpc::CompletionContext* context_;
+  ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* text_document_;
+  ::io::deephaven::proto::backplane::script::grpc::Position* position_;
+  int32_t request_id_;
   mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
   friend struct ::TableStruct_deephaven_2fproto_2fconsole_2eproto;
 };
 // -------------------------------------------------------------------
 
-class TextEdit final :
-    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:io.deephaven.proto.backplane.script.grpc.TextEdit) */ {
+class CompletionContext final :
+    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:io.deephaven.proto.backplane.script.grpc.CompletionContext) */ {
  public:
-  inline TextEdit() : TextEdit(nullptr) {}
-  ~TextEdit() override;
-  explicit PROTOBUF_CONSTEXPR TextEdit(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
+  inline CompletionContext() : CompletionContext(nullptr) {}
+  ~CompletionContext() override;
+  explicit PROTOBUF_CONSTEXPR CompletionContext(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
 
-  TextEdit(const TextEdit& from);
-  TextEdit(TextEdit&& from) noexcept
-    : TextEdit() {
+  CompletionContext(const CompletionContext& from);
+  CompletionContext(CompletionContext&& from) noexcept
+    : CompletionContext() {
     *this = ::std::move(from);
   }
 
-  inline TextEdit& operator=(const TextEdit& from) {
+  inline CompletionContext& operator=(const CompletionContext& from) {
     CopyFrom(from);
     return *this;
   }
-  inline TextEdit& operator=(TextEdit&& from) noexcept {
+  inline CompletionContext& operator=(CompletionContext&& from) noexcept {
     if (this == &from) return *this;
     if (GetOwningArena() == from.GetOwningArena()
   #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
@@ -5470,20 +5557,20 @@ class TextEdit final :
   static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
     return default_instance().GetMetadata().reflection;
   }
-  static const TextEdit& default_instance() {
+  static const CompletionContext& default_instance() {
     return *internal_default_instance();
   }
-  static inline const TextEdit* internal_default_instance() {
-    return reinterpret_cast<const TextEdit*>(
-               &_TextEdit_default_instance_);
+  static inline const CompletionContext* internal_default_instance() {
+    return reinterpret_cast<const CompletionContext*>(
+               &_CompletionContext_default_instance_);
   }
   static constexpr int kIndexInFileMessages =
     29;
 
-  friend void swap(TextEdit& a, TextEdit& b) {
+  friend void swap(CompletionContext& a, CompletionContext& b) {
     a.Swap(&b);
   }
-  inline void Swap(TextEdit* other) {
+  inline void Swap(CompletionContext* other) {
     if (other == this) return;
   #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
     if (GetOwningArena() != nullptr &&
@@ -5496,7 +5583,7 @@ class TextEdit final :
       ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
     }
   }
-  void UnsafeArenaSwap(TextEdit* other) {
+  void UnsafeArenaSwap(CompletionContext* other) {
     if (other == this) return;
     GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
     InternalSwap(other);
@@ -5504,13 +5591,13 @@ class TextEdit final :
 
   // implements Message ----------------------------------------------
 
-  TextEdit* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
-    return CreateMaybeMessage<TextEdit>(arena);
+  CompletionContext* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
+    return CreateMaybeMessage<CompletionContext>(arena);
   }
   using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
-  void CopyFrom(const TextEdit& from);
+  void CopyFrom(const CompletionContext& from);
   using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
-  void MergeFrom(const TextEdit& from);
+  void MergeFrom(const CompletionContext& from);
   private:
   static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
   public:
@@ -5527,15 +5614,15 @@ class TextEdit final :
   void SharedCtor();
   void SharedDtor();
   void SetCachedSize(int size) const final;
-  void InternalSwap(TextEdit* other);
+  void InternalSwap(CompletionContext* other);
 
   private:
   friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
   static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
-    return "io.deephaven.proto.backplane.script.grpc.TextEdit";
+    return "io.deephaven.proto.backplane.script.grpc.CompletionContext";
   }
   protected:
-  explicit TextEdit(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+  explicit CompletionContext(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                        bool is_message_owned = false);
   public:
 
@@ -5549,73 +5636,64 @@ class TextEdit final :
   // accessors -------------------------------------------------------
 
   enum : int {
-    kTextFieldNumber = 2,
-    kRangeFieldNumber = 1,
+    kTriggerCharacterFieldNumber = 2,
+    kTriggerKindFieldNumber = 1,
   };
-  // string text = 2;
-  void clear_text();
-  const std::string& text() const;
+  // string trigger_character = 2;
+  void clear_trigger_character();
+  const std::string& trigger_character() const;
   template <typename ArgT0 = const std::string&, typename... ArgT>
-  void set_text(ArgT0&& arg0, ArgT... args);
-  std::string* mutable_text();
-  PROTOBUF_NODISCARD std::string* release_text();
-  void set_allocated_text(std::string* text);
+  void set_trigger_character(ArgT0&& arg0, ArgT... args);
+  std::string* mutable_trigger_character();
+  PROTOBUF_NODISCARD std::string* release_trigger_character();
+  void set_allocated_trigger_character(std::string* trigger_character);
   private:
-  const std::string& _internal_text() const;
-  inline PROTOBUF_ALWAYS_INLINE void _internal_set_text(const std::string& value);
-  std::string* _internal_mutable_text();
+  const std::string& _internal_trigger_character() const;
+  inline PROTOBUF_ALWAYS_INLINE void _internal_set_trigger_character(const std::string& value);
+  std::string* _internal_mutable_trigger_character();
   public:
 
-  // .io.deephaven.proto.backplane.script.grpc.DocumentRange range = 1;
-  bool has_range() const;
-  private:
-  bool _internal_has_range() const;
-  public:
-  void clear_range();
-  const ::io::deephaven::proto::backplane::script::grpc::DocumentRange& range() const;
-  PROTOBUF_NODISCARD ::io::deephaven::proto::backplane::script::grpc::DocumentRange* release_range();
-  ::io::deephaven::proto::backplane::script::grpc::DocumentRange* mutable_range();
-  void set_allocated_range(::io::deephaven::proto::backplane::script::grpc::DocumentRange* range);
+  // int32 trigger_kind = 1;
+  void clear_trigger_kind();
+  int32_t trigger_kind() const;
+  void set_trigger_kind(int32_t value);
   private:
-  const ::io::deephaven::proto::backplane::script::grpc::DocumentRange& _internal_range() const;
-  ::io::deephaven::proto::backplane::script::grpc::DocumentRange* _internal_mutable_range();
+  int32_t _internal_trigger_kind() const;
+  void _internal_set_trigger_kind(int32_t value);
   public:
-  void unsafe_arena_set_allocated_range(
-      ::io::deephaven::proto::backplane::script::grpc::DocumentRange* range);
-  ::io::deephaven::proto::backplane::script::grpc::DocumentRange* unsafe_arena_release_range();
 
-  // @@protoc_insertion_point(class_scope:io.deephaven.proto.backplane.script.grpc.TextEdit)
+  // @@protoc_insertion_point(class_scope:io.deephaven.proto.backplane.script.grpc.CompletionContext)
  private:
   class _Internal;
 
   template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
   typedef void InternalArenaConstructable_;
   typedef void DestructorSkippable_;
-  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr text_;
-  ::io::deephaven::proto::backplane::script::grpc::DocumentRange* range_;
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr trigger_character_;
+  int32_t trigger_kind_;
   mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
   friend struct ::TableStruct_deephaven_2fproto_2fconsole_2eproto;
 };
 // -------------------------------------------------------------------
 
-class FigureDescriptor_ChartDescriptor final :
-    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:io.deephaven.proto.backplane.script.grpc.FigureDescriptor.ChartDescriptor) */ {
+class GetCompletionItemsResponse final :
+    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsResponse) */ {
  public:
-  inline FigureDescriptor_ChartDescriptor() : FigureDescriptor_ChartDescriptor(nullptr) {}
-  ~FigureDescriptor_ChartDescriptor() override;
-  explicit PROTOBUF_CONSTEXPR FigureDescriptor_ChartDescriptor(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
+  inline GetCompletionItemsResponse() : GetCompletionItemsResponse(nullptr) {}
+  ~GetCompletionItemsResponse() override;
+  explicit PROTOBUF_CONSTEXPR GetCompletionItemsResponse(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
 
-  FigureDescriptor_ChartDescriptor(const FigureDescriptor_ChartDescriptor& from);
-  FigureDescriptor_ChartDescriptor(FigureDescriptor_ChartDescriptor&& from) noexcept
-    : FigureDescriptor_ChartDescriptor() {
+  GetCompletionItemsResponse(const GetCompletionItemsResponse& from);
+  GetCompletionItemsResponse(GetCompletionItemsResponse&& from) noexcept
+    : GetCompletionItemsResponse() {
     *this = ::std::move(from);
   }
 
-  inline FigureDescriptor_ChartDescriptor& operator=(const FigureDescriptor_ChartDescriptor& from) {
+  inline GetCompletionItemsResponse& operator=(const GetCompletionItemsResponse& from) {
     CopyFrom(from);
     return *this;
   }
-  inline FigureDescriptor_ChartDescriptor& operator=(FigureDescriptor_ChartDescriptor&& from) noexcept {
+  inline GetCompletionItemsResponse& operator=(GetCompletionItemsResponse&& from) noexcept {
     if (this == &from) return *this;
     if (GetOwningArena() == from.GetOwningArena()
   #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
@@ -5638,20 +5716,20 @@ class FigureDescriptor_ChartDescriptor final :
   static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
     return default_instance().GetMetadata().reflection;
   }
-  static const FigureDescriptor_ChartDescriptor& default_instance() {
+  static const GetCompletionItemsResponse& default_instance() {
     return *internal_default_instance();
   }
-  static inline const FigureDescriptor_ChartDescriptor* internal_default_instance() {
-    return reinterpret_cast<const FigureDescriptor_ChartDescriptor*>(
-               &_FigureDescriptor_ChartDescriptor_default_instance_);
+  static inline const GetCompletionItemsResponse* internal_default_instance() {
+    return reinterpret_cast<const GetCompletionItemsResponse*>(
+               &_GetCompletionItemsResponse_default_instance_);
   }
   static constexpr int kIndexInFileMessages =
     30;
 
-  friend void swap(FigureDescriptor_ChartDescriptor& a, FigureDescriptor_ChartDescriptor& b) {
+  friend void swap(GetCompletionItemsResponse& a, GetCompletionItemsResponse& b) {
     a.Swap(&b);
   }
-  inline void Swap(FigureDescriptor_ChartDescriptor* other) {
+  inline void Swap(GetCompletionItemsResponse* other) {
     if (other == this) return;
   #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
     if (GetOwningArena() != nullptr &&
@@ -5664,7 +5742,7 @@ class FigureDescriptor_ChartDescriptor final :
       ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
     }
   }
-  void UnsafeArenaSwap(FigureDescriptor_ChartDescriptor* other) {
+  void UnsafeArenaSwap(GetCompletionItemsResponse* other) {
     if (other == this) return;
     GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
     InternalSwap(other);
@@ -5672,13 +5750,13 @@ class FigureDescriptor_ChartDescriptor final :
 
   // implements Message ----------------------------------------------
 
-  FigureDescriptor_ChartDescriptor* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
-    return CreateMaybeMessage<FigureDescriptor_ChartDescriptor>(arena);
+  GetCompletionItemsResponse* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
+    return CreateMaybeMessage<GetCompletionItemsResponse>(arena);
   }
   using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
-  void CopyFrom(const FigureDescriptor_ChartDescriptor& from);
+  void CopyFrom(const GetCompletionItemsResponse& from);
   using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
-  void MergeFrom(const FigureDescriptor_ChartDescriptor& from);
+  void MergeFrom(const GetCompletionItemsResponse& from);
   private:
   static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
   public:
@@ -5695,15 +5773,15 @@ class FigureDescriptor_ChartDescriptor final :
   void SharedCtor();
   void SharedDtor();
   void SetCachedSize(int size) const final;
-  void InternalSwap(FigureDescriptor_ChartDescriptor* other);
+  void InternalSwap(GetCompletionItemsResponse* other);
 
   private:
   friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
   static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
-    return "io.deephaven.proto.backplane.script.grpc.FigureDescriptor.ChartDescriptor";
+    return "io.deephaven.proto.backplane.script.grpc.GetCompletionItemsResponse";
   }
   protected:
-  explicit FigureDescriptor_ChartDescriptor(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+  explicit GetCompletionItemsResponse(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                        bool is_message_owned = false);
   public:
 
@@ -5714,302 +5792,82 @@ class FigureDescriptor_ChartDescriptor final :
 
   // nested types ----------------------------------------------------
 
-  typedef FigureDescriptor_ChartDescriptor_ChartType ChartType;
-  static constexpr ChartType XY =
-    FigureDescriptor_ChartDescriptor_ChartType_XY;
-  static constexpr ChartType PIE =
-    FigureDescriptor_ChartDescriptor_ChartType_PIE;
-  PROTOBUF_DEPRECATED_ENUM static constexpr ChartType OHLC =
-    FigureDescriptor_ChartDescriptor_ChartType_OHLC;
-  static constexpr ChartType CATEGORY =
-    FigureDescriptor_ChartDescriptor_ChartType_CATEGORY;
-  static constexpr ChartType XYZ =
-    FigureDescriptor_ChartDescriptor_ChartType_XYZ;
-  static constexpr ChartType CATEGORY_3D =
-    FigureDescriptor_ChartDescriptor_ChartType_CATEGORY_3D;
-  static constexpr ChartType TREEMAP =
-    FigureDescriptor_ChartDescriptor_ChartType_TREEMAP;
-  static inline bool ChartType_IsValid(int value) {
-    return FigureDescriptor_ChartDescriptor_ChartType_IsValid(value);
-  }
-  static constexpr ChartType ChartType_MIN =
-    FigureDescriptor_ChartDescriptor_ChartType_ChartType_MIN;
-  static constexpr ChartType ChartType_MAX =
-    FigureDescriptor_ChartDescriptor_ChartType_ChartType_MAX;
-  static constexpr int ChartType_ARRAYSIZE =
-    FigureDescriptor_ChartDescriptor_ChartType_ChartType_ARRAYSIZE;
-  static inline const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor*
-  ChartType_descriptor() {
-    return FigureDescriptor_ChartDescriptor_ChartType_descriptor();
-  }
-  template<typename T>
-  static inline const std::string& ChartType_Name(T enum_t_value) {
-    static_assert(::std::is_same<T, ChartType>::value ||
-      ::std::is_integral<T>::value,
-      "Incorrect type passed to function ChartType_Name.");
-    return FigureDescriptor_ChartDescriptor_ChartType_Name(enum_t_value);
-  }
-  static inline bool ChartType_Parse(::PROTOBUF_NAMESPACE_ID::ConstStringParam name,
-      ChartType* value) {
-    return FigureDescriptor_ChartDescriptor_ChartType_Parse(name, value);
-  }
-
   // accessors -------------------------------------------------------
 
   enum : int {
-    kSeriesFieldNumber = 3,
-    kMultiSeriesFieldNumber = 4,
-    kAxesFieldNumber = 5,
-    kTitleFieldNumber = 7,
-    kTitleFontFieldNumber = 8,
-    kTitleColorFieldNumber = 9,
-    kLegendFontFieldNumber = 11,
-    kLegendColorFieldNumber = 12,
-    kColspanFieldNumber = 1,
-    kRowspanFieldNumber = 2,
-    kChartTypeFieldNumber = 6,
-    kShowLegendFieldNumber = 10,
-    kIs3DFieldNumber = 13,
-    kColumnFieldNumber = 14,
-    kRowFieldNumber = 15,
+    kItemsFieldNumber = 1,
+    kRequestIdFieldNumber = 2,
+    kSuccessFieldNumber = 3,
   };
-  // repeated .io.deephaven.proto.backplane.script.grpc.FigureDescriptor.SeriesDescriptor series = 3;
-  int series_size() const;
+  // repeated .io.deephaven.proto.backplane.script.grpc.CompletionItem items = 1;
+  int items_size() const;
   private:
-  int _internal_series_size() const;
+  int _internal_items_size() const;
   public:
-  void clear_series();
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_SeriesDescriptor* mutable_series(int index);
-  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_SeriesDescriptor >*
-      mutable_series();
+  void clear_items();
+  ::io::deephaven::proto::backplane::script::grpc::CompletionItem* mutable_items(int index);
+  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::CompletionItem >*
+      mutable_items();
   private:
-  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_SeriesDescriptor& _internal_series(int index) const;
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_SeriesDescriptor* _internal_add_series();
+  const ::io::deephaven::proto::backplane::script::grpc::CompletionItem& _internal_items(int index) const;
+  ::io::deephaven::proto::backplane::script::grpc::CompletionItem* _internal_add_items();
   public:
-  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_SeriesDescriptor& series(int index) const;
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_SeriesDescriptor* add_series();
-  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_SeriesDescriptor >&
-      series() const;
+  const ::io::deephaven::proto::backplane::script::grpc::CompletionItem& items(int index) const;
+  ::io::deephaven::proto::backplane::script::grpc::CompletionItem* add_items();
+  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::CompletionItem >&
+      items() const;
 
-  // repeated .io.deephaven.proto.backplane.script.grpc.FigureDescriptor.MultiSeriesDescriptor multi_series = 4;
-  int multi_series_size() const;
-  private:
-  int _internal_multi_series_size() const;
-  public:
-  void clear_multi_series();
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_MultiSeriesDescriptor* mutable_multi_series(int index);
-  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_MultiSeriesDescriptor >*
-      mutable_multi_series();
+  // int32 request_id = 2 [deprecated = true];
+  PROTOBUF_DEPRECATED void clear_request_id();
+  PROTOBUF_DEPRECATED int32_t request_id() const;
+  PROTOBUF_DEPRECATED void set_request_id(int32_t value);
   private:
-  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_MultiSeriesDescriptor& _internal_multi_series(int index) const;
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_MultiSeriesDescriptor* _internal_add_multi_series();
+  int32_t _internal_request_id() const;
+  void _internal_set_request_id(int32_t value);
   public:
-  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_MultiSeriesDescriptor& multi_series(int index) const;
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_MultiSeriesDescriptor* add_multi_series();
-  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_MultiSeriesDescriptor >&
-      multi_series() const;
 
-  // repeated .io.deephaven.proto.backplane.script.grpc.FigureDescriptor.AxisDescriptor axes = 5;
-  int axes_size() const;
+  // bool success = 3 [deprecated = true];
+  PROTOBUF_DEPRECATED void clear_success();
+  PROTOBUF_DEPRECATED bool success() const;
+  PROTOBUF_DEPRECATED void set_success(bool value);
   private:
-  int _internal_axes_size() const;
-  public:
-  void clear_axes();
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_AxisDescriptor* mutable_axes(int index);
-  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_AxisDescriptor >*
-      mutable_axes();
-  private:
-  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_AxisDescriptor& _internal_axes(int index) const;
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_AxisDescriptor* _internal_add_axes();
+  bool _internal_success() const;
+  void _internal_set_success(bool value);
   public:
-  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_AxisDescriptor& axes(int index) const;
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_AxisDescriptor* add_axes();
-  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_AxisDescriptor >&
-      axes() const;
 
-  // optional string title = 7;
-  bool has_title() const;
-  private:
-  bool _internal_has_title() const;
-  public:
-  void clear_title();
-  const std::string& title() const;
-  template <typename ArgT0 = const std::string&, typename... ArgT>
-  void set_title(ArgT0&& arg0, ArgT... args);
-  std::string* mutable_title();
-  PROTOBUF_NODISCARD std::string* release_title();
-  void set_allocated_title(std::string* title);
-  private:
-  const std::string& _internal_title() const;
-  inline PROTOBUF_ALWAYS_INLINE void _internal_set_title(const std::string& value);
-  std::string* _internal_mutable_title();
-  public:
+  // @@protoc_insertion_point(class_scope:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsResponse)
+ private:
+  class _Internal;
 
-  // string title_font = 8;
-  void clear_title_font();
-  const std::string& title_font() const;
-  template <typename ArgT0 = const std::string&, typename... ArgT>
-  void set_title_font(ArgT0&& arg0, ArgT... args);
-  std::string* mutable_title_font();
-  PROTOBUF_NODISCARD std::string* release_title_font();
-  void set_allocated_title_font(std::string* title_font);
-  private:
-  const std::string& _internal_title_font() const;
-  inline PROTOBUF_ALWAYS_INLINE void _internal_set_title_font(const std::string& value);
-  std::string* _internal_mutable_title_font();
-  public:
+  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
+  typedef void InternalArenaConstructable_;
+  typedef void DestructorSkippable_;
+  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::CompletionItem > items_;
+  int32_t request_id_;
+  bool success_;
+  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
+  friend struct ::TableStruct_deephaven_2fproto_2fconsole_2eproto;
+};
+// -------------------------------------------------------------------
 
-  // string title_color = 9;
-  void clear_title_color();
-  const std::string& title_color() const;
-  template <typename ArgT0 = const std::string&, typename... ArgT>
-  void set_title_color(ArgT0&& arg0, ArgT... args);
-  std::string* mutable_title_color();
-  PROTOBUF_NODISCARD std::string* release_title_color();
-  void set_allocated_title_color(std::string* title_color);
-  private:
-  const std::string& _internal_title_color() const;
-  inline PROTOBUF_ALWAYS_INLINE void _internal_set_title_color(const std::string& value);
-  std::string* _internal_mutable_title_color();
-  public:
+class CompletionItem final :
+    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:io.deephaven.proto.backplane.script.grpc.CompletionItem) */ {
+ public:
+  inline CompletionItem() : CompletionItem(nullptr) {}
+  ~CompletionItem() override;
+  explicit PROTOBUF_CONSTEXPR CompletionItem(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
 
-  // string legend_font = 11;
-  void clear_legend_font();
-  const std::string& legend_font() const;
-  template <typename ArgT0 = const std::string&, typename... ArgT>
-  void set_legend_font(ArgT0&& arg0, ArgT... args);
-  std::string* mutable_legend_font();
-  PROTOBUF_NODISCARD std::string* release_legend_font();
-  void set_allocated_legend_font(std::string* legend_font);
-  private:
-  const std::string& _internal_legend_font() const;
-  inline PROTOBUF_ALWAYS_INLINE void _internal_set_legend_font(const std::string& value);
-  std::string* _internal_mutable_legend_font();
-  public:
+  CompletionItem(const CompletionItem& from);
+  CompletionItem(CompletionItem&& from) noexcept
+    : CompletionItem() {
+    *this = ::std::move(from);
+  }
 
-  // string legend_color = 12;
-  void clear_legend_color();
-  const std::string& legend_color() const;
-  template <typename ArgT0 = const std::string&, typename... ArgT>
-  void set_legend_color(ArgT0&& arg0, ArgT... args);
-  std::string* mutable_legend_color();
-  PROTOBUF_NODISCARD std::string* release_legend_color();
-  void set_allocated_legend_color(std::string* legend_color);
-  private:
-  const std::string& _internal_legend_color() const;
-  inline PROTOBUF_ALWAYS_INLINE void _internal_set_legend_color(const std::string& value);
-  std::string* _internal_mutable_legend_color();
-  public:
-
-  // int32 colspan = 1;
-  void clear_colspan();
-  int32_t colspan() const;
-  void set_colspan(int32_t value);
-  private:
-  int32_t _internal_colspan() const;
-  void _internal_set_colspan(int32_t value);
-  public:
-
-  // int32 rowspan = 2;
-  void clear_rowspan();
-  int32_t rowspan() const;
-  void set_rowspan(int32_t value);
-  private:
-  int32_t _internal_rowspan() const;
-  void _internal_set_rowspan(int32_t value);
-  public:
-
-  // .io.deephaven.proto.backplane.script.grpc.FigureDescriptor.ChartDescriptor.ChartType chart_type = 6;
-  void clear_chart_type();
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_ChartDescriptor_ChartType chart_type() const;
-  void set_chart_type(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_ChartDescriptor_ChartType value);
-  private:
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_ChartDescriptor_ChartType _internal_chart_type() const;
-  void _internal_set_chart_type(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_ChartDescriptor_ChartType value);
-  public:
-
-  // bool show_legend = 10;
-  void clear_show_legend();
-  bool show_legend() const;
-  void set_show_legend(bool value);
-  private:
-  bool _internal_show_legend() const;
-  void _internal_set_show_legend(bool value);
-  public:
-
-  // bool is3d = 13;
-  void clear_is3d();
-  bool is3d() const;
-  void set_is3d(bool value);
-  private:
-  bool _internal_is3d() const;
-  void _internal_set_is3d(bool value);
-  public:
-
-  // int32 column = 14;
-  void clear_column();
-  int32_t column() const;
-  void set_column(int32_t value);
-  private:
-  int32_t _internal_column() const;
-  void _internal_set_column(int32_t value);
-  public:
-
-  // int32 row = 15;
-  void clear_row();
-  int32_t row() const;
-  void set_row(int32_t value);
-  private:
-  int32_t _internal_row() const;
-  void _internal_set_row(int32_t value);
-  public:
-
-  // @@protoc_insertion_point(class_scope:io.deephaven.proto.backplane.script.grpc.FigureDescriptor.ChartDescriptor)
- private:
-  class _Internal;
-
-  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
-  typedef void InternalArenaConstructable_;
-  typedef void DestructorSkippable_;
-  ::PROTOBUF_NAMESPACE_ID::internal::HasBits<1> _has_bits_;
-  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
-  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_SeriesDescriptor > series_;
-  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_MultiSeriesDescriptor > multi_series_;
-  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_AxisDescriptor > axes_;
-  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr title_;
-  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr title_font_;
-  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr title_color_;
-  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr legend_font_;
-  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr legend_color_;
-  int32_t colspan_;
-  int32_t rowspan_;
-  int chart_type_;
-  bool show_legend_;
-  bool is3d_;
-  int32_t column_;
-  int32_t row_;
-  friend struct ::TableStruct_deephaven_2fproto_2fconsole_2eproto;
-};
-// -------------------------------------------------------------------
-
-class FigureDescriptor_SeriesDescriptor final :
-    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:io.deephaven.proto.backplane.script.grpc.FigureDescriptor.SeriesDescriptor) */ {
- public:
-  inline FigureDescriptor_SeriesDescriptor() : FigureDescriptor_SeriesDescriptor(nullptr) {}
-  ~FigureDescriptor_SeriesDescriptor() override;
-  explicit PROTOBUF_CONSTEXPR FigureDescriptor_SeriesDescriptor(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
-
-  FigureDescriptor_SeriesDescriptor(const FigureDescriptor_SeriesDescriptor& from);
-  FigureDescriptor_SeriesDescriptor(FigureDescriptor_SeriesDescriptor&& from) noexcept
-    : FigureDescriptor_SeriesDescriptor() {
-    *this = ::std::move(from);
-  }
-
-  inline FigureDescriptor_SeriesDescriptor& operator=(const FigureDescriptor_SeriesDescriptor& from) {
+  inline CompletionItem& operator=(const CompletionItem& from) {
     CopyFrom(from);
     return *this;
   }
-  inline FigureDescriptor_SeriesDescriptor& operator=(FigureDescriptor_SeriesDescriptor&& from) noexcept {
+  inline CompletionItem& operator=(CompletionItem&& from) noexcept {
     if (this == &from) return *this;
     if (GetOwningArena() == from.GetOwningArena()
   #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
@@ -6032,20 +5890,20 @@ class FigureDescriptor_SeriesDescriptor final :
   static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
     return default_instance().GetMetadata().reflection;
   }
-  static const FigureDescriptor_SeriesDescriptor& default_instance() {
+  static const CompletionItem& default_instance() {
     return *internal_default_instance();
   }
-  static inline const FigureDescriptor_SeriesDescriptor* internal_default_instance() {
-    return reinterpret_cast<const FigureDescriptor_SeriesDescriptor*>(
-               &_FigureDescriptor_SeriesDescriptor_default_instance_);
+  static inline const CompletionItem* internal_default_instance() {
+    return reinterpret_cast<const CompletionItem*>(
+               &_CompletionItem_default_instance_);
   }
   static constexpr int kIndexInFileMessages =
     31;
 
-  friend void swap(FigureDescriptor_SeriesDescriptor& a, FigureDescriptor_SeriesDescriptor& b) {
+  friend void swap(CompletionItem& a, CompletionItem& b) {
     a.Swap(&b);
   }
-  inline void Swap(FigureDescriptor_SeriesDescriptor* other) {
+  inline void Swap(CompletionItem* other) {
     if (other == this) return;
   #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
     if (GetOwningArena() != nullptr &&
@@ -6058,7 +5916,7 @@ class FigureDescriptor_SeriesDescriptor final :
       ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
     }
   }
-  void UnsafeArenaSwap(FigureDescriptor_SeriesDescriptor* other) {
+  void UnsafeArenaSwap(CompletionItem* other) {
     if (other == this) return;
     GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
     InternalSwap(other);
@@ -6066,13 +5924,13 @@ class FigureDescriptor_SeriesDescriptor final :
 
   // implements Message ----------------------------------------------
 
-  FigureDescriptor_SeriesDescriptor* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
-    return CreateMaybeMessage<FigureDescriptor_SeriesDescriptor>(arena);
+  CompletionItem* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
+    return CreateMaybeMessage<CompletionItem>(arena);
   }
   using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
-  void CopyFrom(const FigureDescriptor_SeriesDescriptor& from);
+  void CopyFrom(const CompletionItem& from);
   using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
-  void MergeFrom(const FigureDescriptor_SeriesDescriptor& from);
+  void MergeFrom(const CompletionItem& from);
   private:
   static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
   public:
@@ -6089,15 +5947,15 @@ class FigureDescriptor_SeriesDescriptor final :
   void SharedCtor();
   void SharedDtor();
   void SetCachedSize(int size) const final;
-  void InternalSwap(FigureDescriptor_SeriesDescriptor* other);
+  void InternalSwap(CompletionItem* other);
 
   private:
   friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
   static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
-    return "io.deephaven.proto.backplane.script.grpc.FigureDescriptor.SeriesDescriptor";
+    return "io.deephaven.proto.backplane.script.grpc.CompletionItem";
   }
   protected:
-  explicit FigureDescriptor_SeriesDescriptor(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+  explicit CompletionItem(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                        bool is_message_owned = false);
   public:
 
@@ -6111,265 +5969,253 @@ class FigureDescriptor_SeriesDescriptor final :
   // accessors -------------------------------------------------------
 
   enum : int {
-    kDataSourcesFieldNumber = 15,
-    kNameFieldNumber = 2,
-    kLineColorFieldNumber = 6,
-    kPointLabelFormatFieldNumber = 8,
-    kXToolTipPatternFieldNumber = 9,
-    kYToolTipPatternFieldNumber = 10,
-    kShapeLabelFieldNumber = 11,
-    kShapeColorFieldNumber = 13,
-    kShapeFieldNumber = 14,
-    kPlotStyleFieldNumber = 1,
-    kLinesVisibleFieldNumber = 3,
-    kShapesVisibleFieldNumber = 4,
-    kGradientVisibleFieldNumber = 5,
-    kShapeSizeFieldNumber = 12,
+    kAdditionalTextEditsFieldNumber = 13,
+    kCommitCharactersFieldNumber = 14,
+    kLabelFieldNumber = 3,
+    kDetailFieldNumber = 5,
+    kSortTextFieldNumber = 10,
+    kFilterTextFieldNumber = 11,
+    kTextEditFieldNumber = 9,
+    kDocumentationFieldNumber = 15,
+    kStartFieldNumber = 1,
+    kLengthFieldNumber = 2,
+    kKindFieldNumber = 4,
+    kDeprecatedFieldNumber = 7,
+    kPreselectFieldNumber = 8,
+    kInsertTextFormatFieldNumber = 12,
   };
-  // repeated .io.deephaven.proto.backplane.script.grpc.FigureDescriptor.SourceDescriptor data_sources = 15;
-  int data_sources_size() const;
+  // repeated .io.deephaven.proto.backplane.script.grpc.TextEdit additional_text_edits = 13;
+  int additional_text_edits_size() const;
   private:
-  int _internal_data_sources_size() const;
+  int _internal_additional_text_edits_size() const;
   public:
-  void clear_data_sources();
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_SourceDescriptor* mutable_data_sources(int index);
-  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_SourceDescriptor >*
-      mutable_data_sources();
+  void clear_additional_text_edits();
+  ::io::deephaven::proto::backplane::script::grpc::TextEdit* mutable_additional_text_edits(int index);
+  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::TextEdit >*
+      mutable_additional_text_edits();
   private:
-  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_SourceDescriptor& _internal_data_sources(int index) const;
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_SourceDescriptor* _internal_add_data_sources();
+  const ::io::deephaven::proto::backplane::script::grpc::TextEdit& _internal_additional_text_edits(int index) const;
+  ::io::deephaven::proto::backplane::script::grpc::TextEdit* _internal_add_additional_text_edits();
   public:
-  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_SourceDescriptor& data_sources(int index) const;
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_SourceDescriptor* add_data_sources();
-  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_SourceDescriptor >&
-      data_sources() const;
+  const ::io::deephaven::proto::backplane::script::grpc::TextEdit& additional_text_edits(int index) const;
+  ::io::deephaven::proto::backplane::script::grpc::TextEdit* add_additional_text_edits();
+  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::TextEdit >&
+      additional_text_edits() const;
 
-  // string name = 2;
-  void clear_name();
-  const std::string& name() const;
-  template <typename ArgT0 = const std::string&, typename... ArgT>
-  void set_name(ArgT0&& arg0, ArgT... args);
-  std::string* mutable_name();
-  PROTOBUF_NODISCARD std::string* release_name();
-  void set_allocated_name(std::string* name);
+  // repeated string commit_characters = 14;
+  int commit_characters_size() const;
   private:
-  const std::string& _internal_name() const;
-  inline PROTOBUF_ALWAYS_INLINE void _internal_set_name(const std::string& value);
-  std::string* _internal_mutable_name();
+  int _internal_commit_characters_size() const;
+  public:
+  void clear_commit_characters();
+  const std::string& commit_characters(int index) const;
+  std::string* mutable_commit_characters(int index);
+  void set_commit_characters(int index, const std::string& value);
+  void set_commit_characters(int index, std::string&& value);
+  void set_commit_characters(int index, const char* value);
+  void set_commit_characters(int index, const char* value, size_t size);
+  std::string* add_commit_characters();
+  void add_commit_characters(const std::string& value);
+  void add_commit_characters(std::string&& value);
+  void add_commit_characters(const char* value);
+  void add_commit_characters(const char* value, size_t size);
+  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>& commit_characters() const;
+  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>* mutable_commit_characters();
+  private:
+  const std::string& _internal_commit_characters(int index) const;
+  std::string* _internal_add_commit_characters();
   public:
 
-  // string line_color = 6;
-  void clear_line_color();
-  const std::string& line_color() const;
+  // string label = 3;
+  void clear_label();
+  const std::string& label() const;
   template <typename ArgT0 = const std::string&, typename... ArgT>
-  void set_line_color(ArgT0&& arg0, ArgT... args);
-  std::string* mutable_line_color();
-  PROTOBUF_NODISCARD std::string* release_line_color();
-  void set_allocated_line_color(std::string* line_color);
+  void set_label(ArgT0&& arg0, ArgT... args);
+  std::string* mutable_label();
+  PROTOBUF_NODISCARD std::string* release_label();
+  void set_allocated_label(std::string* label);
   private:
-  const std::string& _internal_line_color() const;
-  inline PROTOBUF_ALWAYS_INLINE void _internal_set_line_color(const std::string& value);
-  std::string* _internal_mutable_line_color();
+  const std::string& _internal_label() const;
+  inline PROTOBUF_ALWAYS_INLINE void _internal_set_label(const std::string& value);
+  std::string* _internal_mutable_label();
   public:
 
-  // optional string point_label_format = 8;
-  bool has_point_label_format() const;
-  private:
-  bool _internal_has_point_label_format() const;
-  public:
-  void clear_point_label_format();
-  const std::string& point_label_format() const;
+  // string detail = 5;
+  void clear_detail();
+  const std::string& detail() const;
   template <typename ArgT0 = const std::string&, typename... ArgT>
-  void set_point_label_format(ArgT0&& arg0, ArgT... args);
-  std::string* mutable_point_label_format();
-  PROTOBUF_NODISCARD std::string* release_point_label_format();
-  void set_allocated_point_label_format(std::string* point_label_format);
+  void set_detail(ArgT0&& arg0, ArgT... args);
+  std::string* mutable_detail();
+  PROTOBUF_NODISCARD std::string* release_detail();
+  void set_allocated_detail(std::string* detail);
   private:
-  const std::string& _internal_point_label_format() const;
-  inline PROTOBUF_ALWAYS_INLINE void _internal_set_point_label_format(const std::string& value);
-  std::string* _internal_mutable_point_label_format();
+  const std::string& _internal_detail() const;
+  inline PROTOBUF_ALWAYS_INLINE void _internal_set_detail(const std::string& value);
+  std::string* _internal_mutable_detail();
   public:
 
-  // optional string x_tool_tip_pattern = 9;
-  bool has_x_tool_tip_pattern() const;
-  private:
-  bool _internal_has_x_tool_tip_pattern() const;
-  public:
-  void clear_x_tool_tip_pattern();
-  const std::string& x_tool_tip_pattern() const;
+  // string sort_text = 10;
+  void clear_sort_text();
+  const std::string& sort_text() const;
   template <typename ArgT0 = const std::string&, typename... ArgT>
-  void set_x_tool_tip_pattern(ArgT0&& arg0, ArgT... args);
-  std::string* mutable_x_tool_tip_pattern();
-  PROTOBUF_NODISCARD std::string* release_x_tool_tip_pattern();
-  void set_allocated_x_tool_tip_pattern(std::string* x_tool_tip_pattern);
+  void set_sort_text(ArgT0&& arg0, ArgT... args);
+  std::string* mutable_sort_text();
+  PROTOBUF_NODISCARD std::string* release_sort_text();
+  void set_allocated_sort_text(std::string* sort_text);
   private:
-  const std::string& _internal_x_tool_tip_pattern() const;
-  inline PROTOBUF_ALWAYS_INLINE void _internal_set_x_tool_tip_pattern(const std::string& value);
-  std::string* _internal_mutable_x_tool_tip_pattern();
+  const std::string& _internal_sort_text() const;
+  inline PROTOBUF_ALWAYS_INLINE void _internal_set_sort_text(const std::string& value);
+  std::string* _internal_mutable_sort_text();
   public:
 
-  // optional string y_tool_tip_pattern = 10;
-  bool has_y_tool_tip_pattern() const;
-  private:
-  bool _internal_has_y_tool_tip_pattern() const;
-  public:
-  void clear_y_tool_tip_pattern();
-  const std::string& y_tool_tip_pattern() const;
+  // string filter_text = 11;
+  void clear_filter_text();
+  const std::string& filter_text() const;
   template <typename ArgT0 = const std::string&, typename... ArgT>
-  void set_y_tool_tip_pattern(ArgT0&& arg0, ArgT... args);
-  std::string* mutable_y_tool_tip_pattern();
-  PROTOBUF_NODISCARD std::string* release_y_tool_tip_pattern();
-  void set_allocated_y_tool_tip_pattern(std::string* y_tool_tip_pattern);
+  void set_filter_text(ArgT0&& arg0, ArgT... args);
+  std::string* mutable_filter_text();
+  PROTOBUF_NODISCARD std::string* release_filter_text();
+  void set_allocated_filter_text(std::string* filter_text);
   private:
-  const std::string& _internal_y_tool_tip_pattern() const;
-  inline PROTOBUF_ALWAYS_INLINE void _internal_set_y_tool_tip_pattern(const std::string& value);
-  std::string* _internal_mutable_y_tool_tip_pattern();
+  const std::string& _internal_filter_text() const;
+  inline PROTOBUF_ALWAYS_INLINE void _internal_set_filter_text(const std::string& value);
+  std::string* _internal_mutable_filter_text();
   public:
 
-  // string shape_label = 11;
-  void clear_shape_label();
-  const std::string& shape_label() const;
-  template <typename ArgT0 = const std::string&, typename... ArgT>
-  void set_shape_label(ArgT0&& arg0, ArgT... args);
-  std::string* mutable_shape_label();
-  PROTOBUF_NODISCARD std::string* release_shape_label();
-  void set_allocated_shape_label(std::string* shape_label);
+  // .io.deephaven.proto.backplane.script.grpc.TextEdit text_edit = 9;
+  bool has_text_edit() const;
   private:
-  const std::string& _internal_shape_label() const;
-  inline PROTOBUF_ALWAYS_INLINE void _internal_set_shape_label(const std::string& value);
-  std::string* _internal_mutable_shape_label();
+  bool _internal_has_text_edit() const;
   public:
-
-  // string shape_color = 13;
-  void clear_shape_color();
-  const std::string& shape_color() const;
-  template <typename ArgT0 = const std::string&, typename... ArgT>
-  void set_shape_color(ArgT0&& arg0, ArgT... args);
-  std::string* mutable_shape_color();
-  PROTOBUF_NODISCARD std::string* release_shape_color();
-  void set_allocated_shape_color(std::string* shape_color);
+  void clear_text_edit();
+  const ::io::deephaven::proto::backplane::script::grpc::TextEdit& text_edit() const;
+  PROTOBUF_NODISCARD ::io::deephaven::proto::backplane::script::grpc::TextEdit* release_text_edit();
+  ::io::deephaven::proto::backplane::script::grpc::TextEdit* mutable_text_edit();
+  void set_allocated_text_edit(::io::deephaven::proto::backplane::script::grpc::TextEdit* text_edit);
   private:
-  const std::string& _internal_shape_color() const;
-  inline PROTOBUF_ALWAYS_INLINE void _internal_set_shape_color(const std::string& value);
-  std::string* _internal_mutable_shape_color();
+  const ::io::deephaven::proto::backplane::script::grpc::TextEdit& _internal_text_edit() const;
+  ::io::deephaven::proto::backplane::script::grpc::TextEdit* _internal_mutable_text_edit();
   public:
+  void unsafe_arena_set_allocated_text_edit(
+      ::io::deephaven::proto::backplane::script::grpc::TextEdit* text_edit);
+  ::io::deephaven::proto::backplane::script::grpc::TextEdit* unsafe_arena_release_text_edit();
 
-  // string shape = 14;
-  void clear_shape();
-  const std::string& shape() const;
-  template <typename ArgT0 = const std::string&, typename... ArgT>
-  void set_shape(ArgT0&& arg0, ArgT... args);
-  std::string* mutable_shape();
-  PROTOBUF_NODISCARD std::string* release_shape();
-  void set_allocated_shape(std::string* shape);
+  // .io.deephaven.proto.backplane.script.grpc.MarkupContent documentation = 15;
+  bool has_documentation() const;
   private:
-  const std::string& _internal_shape() const;
-  inline PROTOBUF_ALWAYS_INLINE void _internal_set_shape(const std::string& value);
-  std::string* _internal_mutable_shape();
+  bool _internal_has_documentation() const;
   public:
-
-  // .io.deephaven.proto.backplane.script.grpc.FigureDescriptor.SeriesPlotStyle plot_style = 1;
-  void clear_plot_style();
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_SeriesPlotStyle plot_style() const;
-  void set_plot_style(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_SeriesPlotStyle value);
+  void clear_documentation();
+  const ::io::deephaven::proto::backplane::script::grpc::MarkupContent& documentation() const;
+  PROTOBUF_NODISCARD ::io::deephaven::proto::backplane::script::grpc::MarkupContent* release_documentation();
+  ::io::deephaven::proto::backplane::script::grpc::MarkupContent* mutable_documentation();
+  void set_allocated_documentation(::io::deephaven::proto::backplane::script::grpc::MarkupContent* documentation);
   private:
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_SeriesPlotStyle _internal_plot_style() const;
-  void _internal_set_plot_style(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_SeriesPlotStyle value);
+  const ::io::deephaven::proto::backplane::script::grpc::MarkupContent& _internal_documentation() const;
+  ::io::deephaven::proto::backplane::script::grpc::MarkupContent* _internal_mutable_documentation();
   public:
+  void unsafe_arena_set_allocated_documentation(
+      ::io::deephaven::proto::backplane::script::grpc::MarkupContent* documentation);
+  ::io::deephaven::proto::backplane::script::grpc::MarkupContent* unsafe_arena_release_documentation();
 
-  // optional bool lines_visible = 3;
-  bool has_lines_visible() const;
-  private:
-  bool _internal_has_lines_visible() const;
-  public:
-  void clear_lines_visible();
-  bool lines_visible() const;
-  void set_lines_visible(bool value);
+  // int32 start = 1;
+  void clear_start();
+  int32_t start() const;
+  void set_start(int32_t value);
   private:
-  bool _internal_lines_visible() const;
-  void _internal_set_lines_visible(bool value);
+  int32_t _internal_start() const;
+  void _internal_set_start(int32_t value);
   public:
 
-  // optional bool shapes_visible = 4;
-  bool has_shapes_visible() const;
+  // int32 length = 2;
+  void clear_length();
+  int32_t length() const;
+  void set_length(int32_t value);
   private:
-  bool _internal_has_shapes_visible() const;
+  int32_t _internal_length() const;
+  void _internal_set_length(int32_t value);
   public:
-  void clear_shapes_visible();
-  bool shapes_visible() const;
-  void set_shapes_visible(bool value);
+
+  // int32 kind = 4;
+  void clear_kind();
+  int32_t kind() const;
+  void set_kind(int32_t value);
   private:
-  bool _internal_shapes_visible() const;
-  void _internal_set_shapes_visible(bool value);
+  int32_t _internal_kind() const;
+  void _internal_set_kind(int32_t value);
   public:
 
-  // bool gradient_visible = 5;
-  void clear_gradient_visible();
-  bool gradient_visible() const;
-  void set_gradient_visible(bool value);
+  // bool deprecated = 7;
+  void clear_deprecated();
+  bool deprecated() const;
+  void set_deprecated(bool value);
   private:
-  bool _internal_gradient_visible() const;
-  void _internal_set_gradient_visible(bool value);
+  bool _internal_deprecated() const;
+  void _internal_set_deprecated(bool value);
   public:
 
-  // optional double shape_size = 12;
-  bool has_shape_size() const;
+  // bool preselect = 8;
+  void clear_preselect();
+  bool preselect() const;
+  void set_preselect(bool value);
   private:
-  bool _internal_has_shape_size() const;
+  bool _internal_preselect() const;
+  void _internal_set_preselect(bool value);
   public:
-  void clear_shape_size();
-  double shape_size() const;
-  void set_shape_size(double value);
+
+  // int32 insert_text_format = 12;
+  void clear_insert_text_format();
+  int32_t insert_text_format() const;
+  void set_insert_text_format(int32_t value);
   private:
-  double _internal_shape_size() const;
-  void _internal_set_shape_size(double value);
+  int32_t _internal_insert_text_format() const;
+  void _internal_set_insert_text_format(int32_t value);
   public:
 
-  // @@protoc_insertion_point(class_scope:io.deephaven.proto.backplane.script.grpc.FigureDescriptor.SeriesDescriptor)
+  // @@protoc_insertion_point(class_scope:io.deephaven.proto.backplane.script.grpc.CompletionItem)
  private:
   class _Internal;
 
   template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
   typedef void InternalArenaConstructable_;
   typedef void DestructorSkippable_;
-  ::PROTOBUF_NAMESPACE_ID::internal::HasBits<1> _has_bits_;
+  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::TextEdit > additional_text_edits_;
+  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string> commit_characters_;
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr label_;
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr detail_;
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr sort_text_;
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr filter_text_;
+  ::io::deephaven::proto::backplane::script::grpc::TextEdit* text_edit_;
+  ::io::deephaven::proto::backplane::script::grpc::MarkupContent* documentation_;
+  int32_t start_;
+  int32_t length_;
+  int32_t kind_;
+  bool deprecated_;
+  bool preselect_;
+  int32_t insert_text_format_;
   mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
-  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_SourceDescriptor > data_sources_;
-  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr name_;
-  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr line_color_;
-  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr point_label_format_;
-  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr x_tool_tip_pattern_;
-  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr y_tool_tip_pattern_;
-  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr shape_label_;
-  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr shape_color_;
-  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr shape_;
-  int plot_style_;
-  bool lines_visible_;
-  bool shapes_visible_;
-  bool gradient_visible_;
-  double shape_size_;
   friend struct ::TableStruct_deephaven_2fproto_2fconsole_2eproto;
 };
 // -------------------------------------------------------------------
 
-class FigureDescriptor_MultiSeriesDescriptor final :
-    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:io.deephaven.proto.backplane.script.grpc.FigureDescriptor.MultiSeriesDescriptor) */ {
+class TextEdit final :
+    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:io.deephaven.proto.backplane.script.grpc.TextEdit) */ {
  public:
-  inline FigureDescriptor_MultiSeriesDescriptor() : FigureDescriptor_MultiSeriesDescriptor(nullptr) {}
-  ~FigureDescriptor_MultiSeriesDescriptor() override;
-  explicit PROTOBUF_CONSTEXPR FigureDescriptor_MultiSeriesDescriptor(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
+  inline TextEdit() : TextEdit(nullptr) {}
+  ~TextEdit() override;
+  explicit PROTOBUF_CONSTEXPR TextEdit(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
 
-  FigureDescriptor_MultiSeriesDescriptor(const FigureDescriptor_MultiSeriesDescriptor& from);
-  FigureDescriptor_MultiSeriesDescriptor(FigureDescriptor_MultiSeriesDescriptor&& from) noexcept
-    : FigureDescriptor_MultiSeriesDescriptor() {
+  TextEdit(const TextEdit& from);
+  TextEdit(TextEdit&& from) noexcept
+    : TextEdit() {
     *this = ::std::move(from);
   }
 
-  inline FigureDescriptor_MultiSeriesDescriptor& operator=(const FigureDescriptor_MultiSeriesDescriptor& from) {
+  inline TextEdit& operator=(const TextEdit& from) {
     CopyFrom(from);
     return *this;
   }
-  inline FigureDescriptor_MultiSeriesDescriptor& operator=(FigureDescriptor_MultiSeriesDescriptor&& from) noexcept {
+  inline TextEdit& operator=(TextEdit&& from) noexcept {
     if (this == &from) return *this;
     if (GetOwningArena() == from.GetOwningArena()
   #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
@@ -6392,20 +6238,20 @@ class FigureDescriptor_MultiSeriesDescriptor final :
   static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
     return default_instance().GetMetadata().reflection;
   }
-  static const FigureDescriptor_MultiSeriesDescriptor& default_instance() {
+  static const TextEdit& default_instance() {
     return *internal_default_instance();
   }
-  static inline const FigureDescriptor_MultiSeriesDescriptor* internal_default_instance() {
-    return reinterpret_cast<const FigureDescriptor_MultiSeriesDescriptor*>(
-               &_FigureDescriptor_MultiSeriesDescriptor_default_instance_);
+  static inline const TextEdit* internal_default_instance() {
+    return reinterpret_cast<const TextEdit*>(
+               &_TextEdit_default_instance_);
   }
   static constexpr int kIndexInFileMessages =
     32;
 
-  friend void swap(FigureDescriptor_MultiSeriesDescriptor& a, FigureDescriptor_MultiSeriesDescriptor& b) {
+  friend void swap(TextEdit& a, TextEdit& b) {
     a.Swap(&b);
   }
-  inline void Swap(FigureDescriptor_MultiSeriesDescriptor* other) {
+  inline void Swap(TextEdit* other) {
     if (other == this) return;
   #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
     if (GetOwningArena() != nullptr &&
@@ -6418,7 +6264,7 @@ class FigureDescriptor_MultiSeriesDescriptor final :
       ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
     }
   }
-  void UnsafeArenaSwap(FigureDescriptor_MultiSeriesDescriptor* other) {
+  void UnsafeArenaSwap(TextEdit* other) {
     if (other == this) return;
     GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
     InternalSwap(other);
@@ -6426,13 +6272,13 @@ class FigureDescriptor_MultiSeriesDescriptor final :
 
   // implements Message ----------------------------------------------
 
-  FigureDescriptor_MultiSeriesDescriptor* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
-    return CreateMaybeMessage<FigureDescriptor_MultiSeriesDescriptor>(arena);
+  TextEdit* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
+    return CreateMaybeMessage<TextEdit>(arena);
   }
   using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
-  void CopyFrom(const FigureDescriptor_MultiSeriesDescriptor& from);
+  void CopyFrom(const TextEdit& from);
   using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
-  void MergeFrom(const FigureDescriptor_MultiSeriesDescriptor& from);
+  void MergeFrom(const TextEdit& from);
   private:
   static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
   public:
@@ -6449,15 +6295,15 @@ class FigureDescriptor_MultiSeriesDescriptor final :
   void SharedCtor();
   void SharedDtor();
   void SetCachedSize(int size) const final;
-  void InternalSwap(FigureDescriptor_MultiSeriesDescriptor* other);
+  void InternalSwap(TextEdit* other);
 
   private:
   friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
   static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
-    return "io.deephaven.proto.backplane.script.grpc.FigureDescriptor.MultiSeriesDescriptor";
+    return "io.deephaven.proto.backplane.script.grpc.TextEdit";
   }
   protected:
-  explicit FigureDescriptor_MultiSeriesDescriptor(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+  explicit TextEdit(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                        bool is_message_owned = false);
   public:
 
@@ -6471,304 +6317,265 @@ class FigureDescriptor_MultiSeriesDescriptor final :
   // accessors -------------------------------------------------------
 
   enum : int {
-    kDataSourcesFieldNumber = 14,
-    kNameFieldNumber = 2,
-    kLineColorFieldNumber = 3,
-    kPointColorFieldNumber = 4,
-    kLinesVisibleFieldNumber = 5,
-    kPointsVisibleFieldNumber = 6,
-    kGradientVisibleFieldNumber = 7,
-    kPointLabelFormatFieldNumber = 8,
-    kXToolTipPatternFieldNumber = 9,
-    kYToolTipPatternFieldNumber = 10,
-    kPointLabelFieldNumber = 11,
-    kPointSizeFieldNumber = 12,
-    kPointShapeFieldNumber = 13,
-    kPlotStyleFieldNumber = 1,
+    kTextFieldNumber = 2,
+    kRangeFieldNumber = 1,
   };
-  // repeated .io.deephaven.proto.backplane.script.grpc.FigureDescriptor.MultiSeriesSourceDescriptor data_sources = 14;
-  int data_sources_size() const;
+  // string text = 2;
+  void clear_text();
+  const std::string& text() const;
+  template <typename ArgT0 = const std::string&, typename... ArgT>
+  void set_text(ArgT0&& arg0, ArgT... args);
+  std::string* mutable_text();
+  PROTOBUF_NODISCARD std::string* release_text();
+  void set_allocated_text(std::string* text);
   private:
-  int _internal_data_sources_size() const;
+  const std::string& _internal_text() const;
+  inline PROTOBUF_ALWAYS_INLINE void _internal_set_text(const std::string& value);
+  std::string* _internal_mutable_text();
   public:
-  void clear_data_sources();
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_MultiSeriesSourceDescriptor* mutable_data_sources(int index);
-  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_MultiSeriesSourceDescriptor >*
-      mutable_data_sources();
+
+  // .io.deephaven.proto.backplane.script.grpc.DocumentRange range = 1;
+  bool has_range() const;
   private:
-  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_MultiSeriesSourceDescriptor& _internal_data_sources(int index) const;
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_MultiSeriesSourceDescriptor* _internal_add_data_sources();
+  bool _internal_has_range() const;
   public:
-  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_MultiSeriesSourceDescriptor& data_sources(int index) const;
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_MultiSeriesSourceDescriptor* add_data_sources();
-  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_MultiSeriesSourceDescriptor >&
-      data_sources() const;
-
-  // string name = 2;
-  void clear_name();
-  const std::string& name() const;
-  template <typename ArgT0 = const std::string&, typename... ArgT>
-  void set_name(ArgT0&& arg0, ArgT... args);
-  std::string* mutable_name();
-  PROTOBUF_NODISCARD std::string* release_name();
-  void set_allocated_name(std::string* name);
+  void clear_range();
+  const ::io::deephaven::proto::backplane::script::grpc::DocumentRange& range() const;
+  PROTOBUF_NODISCARD ::io::deephaven::proto::backplane::script::grpc::DocumentRange* release_range();
+  ::io::deephaven::proto::backplane::script::grpc::DocumentRange* mutable_range();
+  void set_allocated_range(::io::deephaven::proto::backplane::script::grpc::DocumentRange* range);
   private:
-  const std::string& _internal_name() const;
-  inline PROTOBUF_ALWAYS_INLINE void _internal_set_name(const std::string& value);
-  std::string* _internal_mutable_name();
+  const ::io::deephaven::proto::backplane::script::grpc::DocumentRange& _internal_range() const;
+  ::io::deephaven::proto::backplane::script::grpc::DocumentRange* _internal_mutable_range();
   public:
+  void unsafe_arena_set_allocated_range(
+      ::io::deephaven::proto::backplane::script::grpc::DocumentRange* range);
+  ::io::deephaven::proto::backplane::script::grpc::DocumentRange* unsafe_arena_release_range();
 
-  // .io.deephaven.proto.backplane.script.grpc.FigureDescriptor.StringMapWithDefault line_color = 3;
-  bool has_line_color() const;
+  // @@protoc_insertion_point(class_scope:io.deephaven.proto.backplane.script.grpc.TextEdit)
+ private:
+  class _Internal;
+
+  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
+  typedef void InternalArenaConstructable_;
+  typedef void DestructorSkippable_;
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr text_;
+  ::io::deephaven::proto::backplane::script::grpc::DocumentRange* range_;
+  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
+  friend struct ::TableStruct_deephaven_2fproto_2fconsole_2eproto;
+};
+// -------------------------------------------------------------------
+
+class GetSignatureHelpRequest final :
+    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:io.deephaven.proto.backplane.script.grpc.GetSignatureHelpRequest) */ {
+ public:
+  inline GetSignatureHelpRequest() : GetSignatureHelpRequest(nullptr) {}
+  ~GetSignatureHelpRequest() override;
+  explicit PROTOBUF_CONSTEXPR GetSignatureHelpRequest(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
+
+  GetSignatureHelpRequest(const GetSignatureHelpRequest& from);
+  GetSignatureHelpRequest(GetSignatureHelpRequest&& from) noexcept
+    : GetSignatureHelpRequest() {
+    *this = ::std::move(from);
+  }
+
+  inline GetSignatureHelpRequest& operator=(const GetSignatureHelpRequest& from) {
+    CopyFrom(from);
+    return *this;
+  }
+  inline GetSignatureHelpRequest& operator=(GetSignatureHelpRequest&& from) noexcept {
+    if (this == &from) return *this;
+    if (GetOwningArena() == from.GetOwningArena()
+  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+        && GetOwningArena() != nullptr
+  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
+    ) {
+      InternalSwap(&from);
+    } else {
+      CopyFrom(from);
+    }
+    return *this;
+  }
+
+  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
+    return GetDescriptor();
+  }
+  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
+    return default_instance().GetMetadata().descriptor;
+  }
+  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
+    return default_instance().GetMetadata().reflection;
+  }
+  static const GetSignatureHelpRequest& default_instance() {
+    return *internal_default_instance();
+  }
+  static inline const GetSignatureHelpRequest* internal_default_instance() {
+    return reinterpret_cast<const GetSignatureHelpRequest*>(
+               &_GetSignatureHelpRequest_default_instance_);
+  }
+  static constexpr int kIndexInFileMessages =
+    33;
+
+  friend void swap(GetSignatureHelpRequest& a, GetSignatureHelpRequest& b) {
+    a.Swap(&b);
+  }
+  inline void Swap(GetSignatureHelpRequest* other) {
+    if (other == this) return;
+  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
+    if (GetOwningArena() != nullptr &&
+        GetOwningArena() == other->GetOwningArena()) {
+   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
+    if (GetOwningArena() == other->GetOwningArena()) {
+  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
+      InternalSwap(other);
+    } else {
+      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
+    }
+  }
+  void UnsafeArenaSwap(GetSignatureHelpRequest* other) {
+    if (other == this) return;
+    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
+    InternalSwap(other);
+  }
+
+  // implements Message ----------------------------------------------
+
+  GetSignatureHelpRequest* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
+    return CreateMaybeMessage<GetSignatureHelpRequest>(arena);
+  }
+  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
+  void CopyFrom(const GetSignatureHelpRequest& from);
+  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
+  void MergeFrom(const GetSignatureHelpRequest& from);
   private:
-  bool _internal_has_line_color() const;
+  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
   public:
-  void clear_line_color();
-  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault& line_color() const;
-  PROTOBUF_NODISCARD ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* release_line_color();
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* mutable_line_color();
-  void set_allocated_line_color(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* line_color);
+  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
+  bool IsInitialized() const final;
+
+  size_t ByteSizeLong() const final;
+  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
+  uint8_t* _InternalSerialize(
+      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
+  int GetCachedSize() const final { return _cached_size_.Get(); }
+
   private:
-  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault& _internal_line_color() const;
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* _internal_mutable_line_color();
+  void SharedCtor();
+  void SharedDtor();
+  void SetCachedSize(int size) const final;
+  void InternalSwap(GetSignatureHelpRequest* other);
+
+  private:
+  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
+  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
+    return "io.deephaven.proto.backplane.script.grpc.GetSignatureHelpRequest";
+  }
+  protected:
+  explicit GetSignatureHelpRequest(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+                       bool is_message_owned = false);
   public:
-  void unsafe_arena_set_allocated_line_color(
-      ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* line_color);
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* unsafe_arena_release_line_color();
 
-  // .io.deephaven.proto.backplane.script.grpc.FigureDescriptor.StringMapWithDefault point_color = 4;
-  bool has_point_color() const;
+  static const ClassData _class_data_;
+  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;
+
+  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
+
+  // nested types ----------------------------------------------------
+
+  // accessors -------------------------------------------------------
+
+  enum : int {
+    kContextFieldNumber = 1,
+    kTextDocumentFieldNumber = 2,
+    kPositionFieldNumber = 3,
+  };
+  // .io.deephaven.proto.backplane.script.grpc.SignatureHelpContext context = 1;
+  bool has_context() const;
   private:
-  bool _internal_has_point_color() const;
+  bool _internal_has_context() const;
   public:
-  void clear_point_color();
-  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault& point_color() const;
-  PROTOBUF_NODISCARD ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* release_point_color();
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* mutable_point_color();
-  void set_allocated_point_color(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* point_color);
+  void clear_context();
+  const ::io::deephaven::proto::backplane::script::grpc::SignatureHelpContext& context() const;
+  PROTOBUF_NODISCARD ::io::deephaven::proto::backplane::script::grpc::SignatureHelpContext* release_context();
+  ::io::deephaven::proto::backplane::script::grpc::SignatureHelpContext* mutable_context();
+  void set_allocated_context(::io::deephaven::proto::backplane::script::grpc::SignatureHelpContext* context);
   private:
-  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault& _internal_point_color() const;
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* _internal_mutable_point_color();
+  const ::io::deephaven::proto::backplane::script::grpc::SignatureHelpContext& _internal_context() const;
+  ::io::deephaven::proto::backplane::script::grpc::SignatureHelpContext* _internal_mutable_context();
   public:
-  void unsafe_arena_set_allocated_point_color(
-      ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* point_color);
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* unsafe_arena_release_point_color();
+  void unsafe_arena_set_allocated_context(
+      ::io::deephaven::proto::backplane::script::grpc::SignatureHelpContext* context);
+  ::io::deephaven::proto::backplane::script::grpc::SignatureHelpContext* unsafe_arena_release_context();
 
-  // .io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BoolMapWithDefault lines_visible = 5;
-  bool has_lines_visible() const;
+  // .io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier text_document = 2;
+  bool has_text_document() const;
   private:
-  bool _internal_has_lines_visible() const;
+  bool _internal_has_text_document() const;
   public:
-  void clear_lines_visible();
-  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BoolMapWithDefault& lines_visible() const;
-  PROTOBUF_NODISCARD ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BoolMapWithDefault* release_lines_visible();
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BoolMapWithDefault* mutable_lines_visible();
-  void set_allocated_lines_visible(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BoolMapWithDefault* lines_visible);
+  void clear_text_document();
+  const ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier& text_document() const;
+  PROTOBUF_NODISCARD ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* release_text_document();
+  ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* mutable_text_document();
+  void set_allocated_text_document(::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* text_document);
   private:
-  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BoolMapWithDefault& _internal_lines_visible() const;
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BoolMapWithDefault* _internal_mutable_lines_visible();
+  const ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier& _internal_text_document() const;
+  ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* _internal_mutable_text_document();
   public:
-  void unsafe_arena_set_allocated_lines_visible(
-      ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BoolMapWithDefault* lines_visible);
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BoolMapWithDefault* unsafe_arena_release_lines_visible();
+  void unsafe_arena_set_allocated_text_document(
+      ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* text_document);
+  ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* unsafe_arena_release_text_document();
 
-  // .io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BoolMapWithDefault points_visible = 6;
-  bool has_points_visible() const;
+  // .io.deephaven.proto.backplane.script.grpc.Position position = 3;
+  bool has_position() const;
   private:
-  bool _internal_has_points_visible() const;
+  bool _internal_has_position() const;
   public:
-  void clear_points_visible();
-  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BoolMapWithDefault& points_visible() const;
-  PROTOBUF_NODISCARD ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BoolMapWithDefault* release_points_visible();
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BoolMapWithDefault* mutable_points_visible();
-  void set_allocated_points_visible(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BoolMapWithDefault* points_visible);
-  private:
-  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BoolMapWithDefault& _internal_points_visible() const;
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BoolMapWithDefault* _internal_mutable_points_visible();
-  public:
-  void unsafe_arena_set_allocated_points_visible(
-      ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BoolMapWithDefault* points_visible);
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BoolMapWithDefault* unsafe_arena_release_points_visible();
-
-  // .io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BoolMapWithDefault gradient_visible = 7;
-  bool has_gradient_visible() const;
-  private:
-  bool _internal_has_gradient_visible() const;
-  public:
-  void clear_gradient_visible();
-  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BoolMapWithDefault& gradient_visible() const;
-  PROTOBUF_NODISCARD ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BoolMapWithDefault* release_gradient_visible();
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BoolMapWithDefault* mutable_gradient_visible();
-  void set_allocated_gradient_visible(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BoolMapWithDefault* gradient_visible);
-  private:
-  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BoolMapWithDefault& _internal_gradient_visible() const;
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BoolMapWithDefault* _internal_mutable_gradient_visible();
-  public:
-  void unsafe_arena_set_allocated_gradient_visible(
-      ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BoolMapWithDefault* gradient_visible);
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BoolMapWithDefault* unsafe_arena_release_gradient_visible();
-
-  // .io.deephaven.proto.backplane.script.grpc.FigureDescriptor.StringMapWithDefault point_label_format = 8;
-  bool has_point_label_format() const;
-  private:
-  bool _internal_has_point_label_format() const;
-  public:
-  void clear_point_label_format();
-  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault& point_label_format() const;
-  PROTOBUF_NODISCARD ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* release_point_label_format();
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* mutable_point_label_format();
-  void set_allocated_point_label_format(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* point_label_format);
-  private:
-  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault& _internal_point_label_format() const;
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* _internal_mutable_point_label_format();
-  public:
-  void unsafe_arena_set_allocated_point_label_format(
-      ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* point_label_format);
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* unsafe_arena_release_point_label_format();
-
-  // .io.deephaven.proto.backplane.script.grpc.FigureDescriptor.StringMapWithDefault x_tool_tip_pattern = 9;
-  bool has_x_tool_tip_pattern() const;
-  private:
-  bool _internal_has_x_tool_tip_pattern() const;
-  public:
-  void clear_x_tool_tip_pattern();
-  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault& x_tool_tip_pattern() const;
-  PROTOBUF_NODISCARD ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* release_x_tool_tip_pattern();
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* mutable_x_tool_tip_pattern();
-  void set_allocated_x_tool_tip_pattern(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* x_tool_tip_pattern);
-  private:
-  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault& _internal_x_tool_tip_pattern() const;
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* _internal_mutable_x_tool_tip_pattern();
-  public:
-  void unsafe_arena_set_allocated_x_tool_tip_pattern(
-      ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* x_tool_tip_pattern);
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* unsafe_arena_release_x_tool_tip_pattern();
-
-  // .io.deephaven.proto.backplane.script.grpc.FigureDescriptor.StringMapWithDefault y_tool_tip_pattern = 10;
-  bool has_y_tool_tip_pattern() const;
-  private:
-  bool _internal_has_y_tool_tip_pattern() const;
-  public:
-  void clear_y_tool_tip_pattern();
-  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault& y_tool_tip_pattern() const;
-  PROTOBUF_NODISCARD ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* release_y_tool_tip_pattern();
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* mutable_y_tool_tip_pattern();
-  void set_allocated_y_tool_tip_pattern(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* y_tool_tip_pattern);
-  private:
-  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault& _internal_y_tool_tip_pattern() const;
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* _internal_mutable_y_tool_tip_pattern();
-  public:
-  void unsafe_arena_set_allocated_y_tool_tip_pattern(
-      ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* y_tool_tip_pattern);
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* unsafe_arena_release_y_tool_tip_pattern();
-
-  // .io.deephaven.proto.backplane.script.grpc.FigureDescriptor.StringMapWithDefault point_label = 11;
-  bool has_point_label() const;
-  private:
-  bool _internal_has_point_label() const;
-  public:
-  void clear_point_label();
-  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault& point_label() const;
-  PROTOBUF_NODISCARD ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* release_point_label();
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* mutable_point_label();
-  void set_allocated_point_label(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* point_label);
-  private:
-  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault& _internal_point_label() const;
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* _internal_mutable_point_label();
-  public:
-  void unsafe_arena_set_allocated_point_label(
-      ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* point_label);
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* unsafe_arena_release_point_label();
-
-  // .io.deephaven.proto.backplane.script.grpc.FigureDescriptor.DoubleMapWithDefault point_size = 12;
-  bool has_point_size() const;
-  private:
-  bool _internal_has_point_size() const;
-  public:
-  void clear_point_size();
-  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_DoubleMapWithDefault& point_size() const;
-  PROTOBUF_NODISCARD ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_DoubleMapWithDefault* release_point_size();
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_DoubleMapWithDefault* mutable_point_size();
-  void set_allocated_point_size(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_DoubleMapWithDefault* point_size);
-  private:
-  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_DoubleMapWithDefault& _internal_point_size() const;
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_DoubleMapWithDefault* _internal_mutable_point_size();
-  public:
-  void unsafe_arena_set_allocated_point_size(
-      ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_DoubleMapWithDefault* point_size);
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_DoubleMapWithDefault* unsafe_arena_release_point_size();
-
-  // .io.deephaven.proto.backplane.script.grpc.FigureDescriptor.StringMapWithDefault point_shape = 13;
-  bool has_point_shape() const;
-  private:
-  bool _internal_has_point_shape() const;
-  public:
-  void clear_point_shape();
-  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault& point_shape() const;
-  PROTOBUF_NODISCARD ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* release_point_shape();
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* mutable_point_shape();
-  void set_allocated_point_shape(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* point_shape);
-  private:
-  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault& _internal_point_shape() const;
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* _internal_mutable_point_shape();
-  public:
-  void unsafe_arena_set_allocated_point_shape(
-      ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* point_shape);
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* unsafe_arena_release_point_shape();
-
-  // .io.deephaven.proto.backplane.script.grpc.FigureDescriptor.SeriesPlotStyle plot_style = 1;
-  void clear_plot_style();
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_SeriesPlotStyle plot_style() const;
-  void set_plot_style(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_SeriesPlotStyle value);
+  void clear_position();
+  const ::io::deephaven::proto::backplane::script::grpc::Position& position() const;
+  PROTOBUF_NODISCARD ::io::deephaven::proto::backplane::script::grpc::Position* release_position();
+  ::io::deephaven::proto::backplane::script::grpc::Position* mutable_position();
+  void set_allocated_position(::io::deephaven::proto::backplane::script::grpc::Position* position);
   private:
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_SeriesPlotStyle _internal_plot_style() const;
-  void _internal_set_plot_style(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_SeriesPlotStyle value);
+  const ::io::deephaven::proto::backplane::script::grpc::Position& _internal_position() const;
+  ::io::deephaven::proto::backplane::script::grpc::Position* _internal_mutable_position();
   public:
+  void unsafe_arena_set_allocated_position(
+      ::io::deephaven::proto::backplane::script::grpc::Position* position);
+  ::io::deephaven::proto::backplane::script::grpc::Position* unsafe_arena_release_position();
 
-  // @@protoc_insertion_point(class_scope:io.deephaven.proto.backplane.script.grpc.FigureDescriptor.MultiSeriesDescriptor)
+  // @@protoc_insertion_point(class_scope:io.deephaven.proto.backplane.script.grpc.GetSignatureHelpRequest)
  private:
   class _Internal;
 
   template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
   typedef void InternalArenaConstructable_;
   typedef void DestructorSkippable_;
-  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_MultiSeriesSourceDescriptor > data_sources_;
-  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr name_;
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* line_color_;
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* point_color_;
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BoolMapWithDefault* lines_visible_;
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BoolMapWithDefault* points_visible_;
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BoolMapWithDefault* gradient_visible_;
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* point_label_format_;
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* x_tool_tip_pattern_;
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* y_tool_tip_pattern_;
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* point_label_;
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_DoubleMapWithDefault* point_size_;
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* point_shape_;
-  int plot_style_;
+  ::io::deephaven::proto::backplane::script::grpc::SignatureHelpContext* context_;
+  ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* text_document_;
+  ::io::deephaven::proto::backplane::script::grpc::Position* position_;
   mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
   friend struct ::TableStruct_deephaven_2fproto_2fconsole_2eproto;
 };
 // -------------------------------------------------------------------
 
-class FigureDescriptor_StringMapWithDefault final :
-    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:io.deephaven.proto.backplane.script.grpc.FigureDescriptor.StringMapWithDefault) */ {
+class SignatureHelpContext final :
+    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:io.deephaven.proto.backplane.script.grpc.SignatureHelpContext) */ {
  public:
-  inline FigureDescriptor_StringMapWithDefault() : FigureDescriptor_StringMapWithDefault(nullptr) {}
-  ~FigureDescriptor_StringMapWithDefault() override;
-  explicit PROTOBUF_CONSTEXPR FigureDescriptor_StringMapWithDefault(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
+  inline SignatureHelpContext() : SignatureHelpContext(nullptr) {}
+  ~SignatureHelpContext() override;
+  explicit PROTOBUF_CONSTEXPR SignatureHelpContext(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
 
-  FigureDescriptor_StringMapWithDefault(const FigureDescriptor_StringMapWithDefault& from);
-  FigureDescriptor_StringMapWithDefault(FigureDescriptor_StringMapWithDefault&& from) noexcept
-    : FigureDescriptor_StringMapWithDefault() {
+  SignatureHelpContext(const SignatureHelpContext& from);
+  SignatureHelpContext(SignatureHelpContext&& from) noexcept
+    : SignatureHelpContext() {
     *this = ::std::move(from);
   }
 
-  inline FigureDescriptor_StringMapWithDefault& operator=(const FigureDescriptor_StringMapWithDefault& from) {
+  inline SignatureHelpContext& operator=(const SignatureHelpContext& from) {
     CopyFrom(from);
     return *this;
   }
-  inline FigureDescriptor_StringMapWithDefault& operator=(FigureDescriptor_StringMapWithDefault&& from) noexcept {
+  inline SignatureHelpContext& operator=(SignatureHelpContext&& from) noexcept {
     if (this == &from) return *this;
     if (GetOwningArena() == from.GetOwningArena()
   #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
@@ -6791,20 +6598,20 @@ class FigureDescriptor_StringMapWithDefault final :
   static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
     return default_instance().GetMetadata().reflection;
   }
-  static const FigureDescriptor_StringMapWithDefault& default_instance() {
+  static const SignatureHelpContext& default_instance() {
     return *internal_default_instance();
   }
-  static inline const FigureDescriptor_StringMapWithDefault* internal_default_instance() {
-    return reinterpret_cast<const FigureDescriptor_StringMapWithDefault*>(
-               &_FigureDescriptor_StringMapWithDefault_default_instance_);
+  static inline const SignatureHelpContext* internal_default_instance() {
+    return reinterpret_cast<const SignatureHelpContext*>(
+               &_SignatureHelpContext_default_instance_);
   }
   static constexpr int kIndexInFileMessages =
-    33;
+    34;
 
-  friend void swap(FigureDescriptor_StringMapWithDefault& a, FigureDescriptor_StringMapWithDefault& b) {
+  friend void swap(SignatureHelpContext& a, SignatureHelpContext& b) {
     a.Swap(&b);
   }
-  inline void Swap(FigureDescriptor_StringMapWithDefault* other) {
+  inline void Swap(SignatureHelpContext* other) {
     if (other == this) return;
   #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
     if (GetOwningArena() != nullptr &&
@@ -6817,7 +6624,7 @@ class FigureDescriptor_StringMapWithDefault final :
       ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
     }
   }
-  void UnsafeArenaSwap(FigureDescriptor_StringMapWithDefault* other) {
+  void UnsafeArenaSwap(SignatureHelpContext* other) {
     if (other == this) return;
     GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
     InternalSwap(other);
@@ -6825,13 +6632,13 @@ class FigureDescriptor_StringMapWithDefault final :
 
   // implements Message ----------------------------------------------
 
-  FigureDescriptor_StringMapWithDefault* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
-    return CreateMaybeMessage<FigureDescriptor_StringMapWithDefault>(arena);
+  SignatureHelpContext* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
+    return CreateMaybeMessage<SignatureHelpContext>(arena);
   }
   using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
-  void CopyFrom(const FigureDescriptor_StringMapWithDefault& from);
+  void CopyFrom(const SignatureHelpContext& from);
   using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
-  void MergeFrom(const FigureDescriptor_StringMapWithDefault& from);
+  void MergeFrom(const SignatureHelpContext& from);
   private:
   static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
   public:
@@ -6848,15 +6655,15 @@ class FigureDescriptor_StringMapWithDefault final :
   void SharedCtor();
   void SharedDtor();
   void SetCachedSize(int size) const final;
-  void InternalSwap(FigureDescriptor_StringMapWithDefault* other);
+  void InternalSwap(SignatureHelpContext* other);
 
   private:
   friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
   static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
-    return "io.deephaven.proto.backplane.script.grpc.FigureDescriptor.StringMapWithDefault";
+    return "io.deephaven.proto.backplane.script.grpc.SignatureHelpContext";
   }
   protected:
-  explicit FigureDescriptor_StringMapWithDefault(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+  explicit SignatureHelpContext(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                        bool is_message_owned = false);
   public:
 
@@ -6870,77 +6677,66 @@ class FigureDescriptor_StringMapWithDefault final :
   // accessors -------------------------------------------------------
 
   enum : int {
-    kKeysFieldNumber = 2,
-    kValuesFieldNumber = 3,
-    kDefaultStringFieldNumber = 1,
+    kTriggerCharacterFieldNumber = 2,
+    kActiveSignatureHelpFieldNumber = 4,
+    kTriggerKindFieldNumber = 1,
+    kIsRetriggerFieldNumber = 3,
   };
-  // repeated string keys = 2;
-  int keys_size() const;
+  // optional string trigger_character = 2;
+  bool has_trigger_character() const;
   private:
-  int _internal_keys_size() const;
+  bool _internal_has_trigger_character() const;
   public:
-  void clear_keys();
-  const std::string& keys(int index) const;
-  std::string* mutable_keys(int index);
-  void set_keys(int index, const std::string& value);
-  void set_keys(int index, std::string&& value);
-  void set_keys(int index, const char* value);
-  void set_keys(int index, const char* value, size_t size);
-  std::string* add_keys();
-  void add_keys(const std::string& value);
-  void add_keys(std::string&& value);
-  void add_keys(const char* value);
-  void add_keys(const char* value, size_t size);
-  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>& keys() const;
-  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>* mutable_keys();
+  void clear_trigger_character();
+  const std::string& trigger_character() const;
+  template <typename ArgT0 = const std::string&, typename... ArgT>
+  void set_trigger_character(ArgT0&& arg0, ArgT... args);
+  std::string* mutable_trigger_character();
+  PROTOBUF_NODISCARD std::string* release_trigger_character();
+  void set_allocated_trigger_character(std::string* trigger_character);
   private:
-  const std::string& _internal_keys(int index) const;
-  std::string* _internal_add_keys();
+  const std::string& _internal_trigger_character() const;
+  inline PROTOBUF_ALWAYS_INLINE void _internal_set_trigger_character(const std::string& value);
+  std::string* _internal_mutable_trigger_character();
   public:
 
-  // repeated string values = 3;
-  int values_size() const;
+  // .io.deephaven.proto.backplane.script.grpc.GetSignatureHelpResponse active_signature_help = 4;
+  bool has_active_signature_help() const;
   private:
-  int _internal_values_size() const;
+  bool _internal_has_active_signature_help() const;
   public:
-  void clear_values();
-  const std::string& values(int index) const;
-  std::string* mutable_values(int index);
-  void set_values(int index, const std::string& value);
-  void set_values(int index, std::string&& value);
-  void set_values(int index, const char* value);
-  void set_values(int index, const char* value, size_t size);
-  std::string* add_values();
-  void add_values(const std::string& value);
-  void add_values(std::string&& value);
-  void add_values(const char* value);
-  void add_values(const char* value, size_t size);
-  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>& values() const;
-  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>* mutable_values();
+  void clear_active_signature_help();
+  const ::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpResponse& active_signature_help() const;
+  PROTOBUF_NODISCARD ::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpResponse* release_active_signature_help();
+  ::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpResponse* mutable_active_signature_help();
+  void set_allocated_active_signature_help(::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpResponse* active_signature_help);
   private:
-  const std::string& _internal_values(int index) const;
-  std::string* _internal_add_values();
+  const ::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpResponse& _internal_active_signature_help() const;
+  ::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpResponse* _internal_mutable_active_signature_help();
   public:
+  void unsafe_arena_set_allocated_active_signature_help(
+      ::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpResponse* active_signature_help);
+  ::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpResponse* unsafe_arena_release_active_signature_help();
 
-  // optional string default_string = 1;
-  bool has_default_string() const;
+  // int32 trigger_kind = 1;
+  void clear_trigger_kind();
+  int32_t trigger_kind() const;
+  void set_trigger_kind(int32_t value);
   private:
-  bool _internal_has_default_string() const;
+  int32_t _internal_trigger_kind() const;
+  void _internal_set_trigger_kind(int32_t value);
   public:
-  void clear_default_string();
-  const std::string& default_string() const;
-  template <typename ArgT0 = const std::string&, typename... ArgT>
-  void set_default_string(ArgT0&& arg0, ArgT... args);
-  std::string* mutable_default_string();
-  PROTOBUF_NODISCARD std::string* release_default_string();
-  void set_allocated_default_string(std::string* default_string);
+
+  // bool is_retrigger = 3;
+  void clear_is_retrigger();
+  bool is_retrigger() const;
+  void set_is_retrigger(bool value);
   private:
-  const std::string& _internal_default_string() const;
-  inline PROTOBUF_ALWAYS_INLINE void _internal_set_default_string(const std::string& value);
-  std::string* _internal_mutable_default_string();
+  bool _internal_is_retrigger() const;
+  void _internal_set_is_retrigger(bool value);
   public:
 
-  // @@protoc_insertion_point(class_scope:io.deephaven.proto.backplane.script.grpc.FigureDescriptor.StringMapWithDefault)
+  // @@protoc_insertion_point(class_scope:io.deephaven.proto.backplane.script.grpc.SignatureHelpContext)
  private:
   class _Internal;
 
@@ -6949,31 +6745,32 @@ class FigureDescriptor_StringMapWithDefault final :
   typedef void DestructorSkippable_;
   ::PROTOBUF_NAMESPACE_ID::internal::HasBits<1> _has_bits_;
   mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
-  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string> keys_;
-  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string> values_;
-  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr default_string_;
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr trigger_character_;
+  ::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpResponse* active_signature_help_;
+  int32_t trigger_kind_;
+  bool is_retrigger_;
   friend struct ::TableStruct_deephaven_2fproto_2fconsole_2eproto;
 };
 // -------------------------------------------------------------------
 
-class FigureDescriptor_DoubleMapWithDefault final :
-    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:io.deephaven.proto.backplane.script.grpc.FigureDescriptor.DoubleMapWithDefault) */ {
+class GetSignatureHelpResponse final :
+    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:io.deephaven.proto.backplane.script.grpc.GetSignatureHelpResponse) */ {
  public:
-  inline FigureDescriptor_DoubleMapWithDefault() : FigureDescriptor_DoubleMapWithDefault(nullptr) {}
-  ~FigureDescriptor_DoubleMapWithDefault() override;
-  explicit PROTOBUF_CONSTEXPR FigureDescriptor_DoubleMapWithDefault(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
+  inline GetSignatureHelpResponse() : GetSignatureHelpResponse(nullptr) {}
+  ~GetSignatureHelpResponse() override;
+  explicit PROTOBUF_CONSTEXPR GetSignatureHelpResponse(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
 
-  FigureDescriptor_DoubleMapWithDefault(const FigureDescriptor_DoubleMapWithDefault& from);
-  FigureDescriptor_DoubleMapWithDefault(FigureDescriptor_DoubleMapWithDefault&& from) noexcept
-    : FigureDescriptor_DoubleMapWithDefault() {
+  GetSignatureHelpResponse(const GetSignatureHelpResponse& from);
+  GetSignatureHelpResponse(GetSignatureHelpResponse&& from) noexcept
+    : GetSignatureHelpResponse() {
     *this = ::std::move(from);
   }
 
-  inline FigureDescriptor_DoubleMapWithDefault& operator=(const FigureDescriptor_DoubleMapWithDefault& from) {
+  inline GetSignatureHelpResponse& operator=(const GetSignatureHelpResponse& from) {
     CopyFrom(from);
     return *this;
   }
-  inline FigureDescriptor_DoubleMapWithDefault& operator=(FigureDescriptor_DoubleMapWithDefault&& from) noexcept {
+  inline GetSignatureHelpResponse& operator=(GetSignatureHelpResponse&& from) noexcept {
     if (this == &from) return *this;
     if (GetOwningArena() == from.GetOwningArena()
   #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
@@ -6996,20 +6793,20 @@ class FigureDescriptor_DoubleMapWithDefault final :
   static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
     return default_instance().GetMetadata().reflection;
   }
-  static const FigureDescriptor_DoubleMapWithDefault& default_instance() {
+  static const GetSignatureHelpResponse& default_instance() {
     return *internal_default_instance();
   }
-  static inline const FigureDescriptor_DoubleMapWithDefault* internal_default_instance() {
-    return reinterpret_cast<const FigureDescriptor_DoubleMapWithDefault*>(
-               &_FigureDescriptor_DoubleMapWithDefault_default_instance_);
+  static inline const GetSignatureHelpResponse* internal_default_instance() {
+    return reinterpret_cast<const GetSignatureHelpResponse*>(
+               &_GetSignatureHelpResponse_default_instance_);
   }
   static constexpr int kIndexInFileMessages =
-    34;
+    35;
 
-  friend void swap(FigureDescriptor_DoubleMapWithDefault& a, FigureDescriptor_DoubleMapWithDefault& b) {
+  friend void swap(GetSignatureHelpResponse& a, GetSignatureHelpResponse& b) {
     a.Swap(&b);
   }
-  inline void Swap(FigureDescriptor_DoubleMapWithDefault* other) {
+  inline void Swap(GetSignatureHelpResponse* other) {
     if (other == this) return;
   #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
     if (GetOwningArena() != nullptr &&
@@ -7022,7 +6819,7 @@ class FigureDescriptor_DoubleMapWithDefault final :
       ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
     }
   }
-  void UnsafeArenaSwap(FigureDescriptor_DoubleMapWithDefault* other) {
+  void UnsafeArenaSwap(GetSignatureHelpResponse* other) {
     if (other == this) return;
     GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
     InternalSwap(other);
@@ -7030,13 +6827,13 @@ class FigureDescriptor_DoubleMapWithDefault final :
 
   // implements Message ----------------------------------------------
 
-  FigureDescriptor_DoubleMapWithDefault* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
-    return CreateMaybeMessage<FigureDescriptor_DoubleMapWithDefault>(arena);
+  GetSignatureHelpResponse* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
+    return CreateMaybeMessage<GetSignatureHelpResponse>(arena);
   }
   using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
-  void CopyFrom(const FigureDescriptor_DoubleMapWithDefault& from);
+  void CopyFrom(const GetSignatureHelpResponse& from);
   using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
-  void MergeFrom(const FigureDescriptor_DoubleMapWithDefault& from);
+  void MergeFrom(const GetSignatureHelpResponse& from);
   private:
   static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
   public:
@@ -7053,15 +6850,15 @@ class FigureDescriptor_DoubleMapWithDefault final :
   void SharedCtor();
   void SharedDtor();
   void SetCachedSize(int size) const final;
-  void InternalSwap(FigureDescriptor_DoubleMapWithDefault* other);
+  void InternalSwap(GetSignatureHelpResponse* other);
 
   private:
   friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
   static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
-    return "io.deephaven.proto.backplane.script.grpc.FigureDescriptor.DoubleMapWithDefault";
+    return "io.deephaven.proto.backplane.script.grpc.GetSignatureHelpResponse";
   }
   protected:
-  explicit FigureDescriptor_DoubleMapWithDefault(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+  explicit GetSignatureHelpResponse(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                        bool is_message_owned = false);
   public:
 
@@ -7075,70 +6872,55 @@ class FigureDescriptor_DoubleMapWithDefault final :
   // accessors -------------------------------------------------------
 
   enum : int {
-    kKeysFieldNumber = 2,
-    kValuesFieldNumber = 3,
-    kDefaultDoubleFieldNumber = 1,
+    kSignaturesFieldNumber = 1,
+    kActiveSignatureFieldNumber = 2,
+    kActiveParameterFieldNumber = 3,
   };
-  // repeated string keys = 2;
-  int keys_size() const;
+  // repeated .io.deephaven.proto.backplane.script.grpc.SignatureInformation signatures = 1;
+  int signatures_size() const;
   private:
-  int _internal_keys_size() const;
+  int _internal_signatures_size() const;
   public:
-  void clear_keys();
-  const std::string& keys(int index) const;
-  std::string* mutable_keys(int index);
-  void set_keys(int index, const std::string& value);
-  void set_keys(int index, std::string&& value);
-  void set_keys(int index, const char* value);
-  void set_keys(int index, const char* value, size_t size);
-  std::string* add_keys();
-  void add_keys(const std::string& value);
-  void add_keys(std::string&& value);
-  void add_keys(const char* value);
-  void add_keys(const char* value, size_t size);
-  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>& keys() const;
-  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>* mutable_keys();
+  void clear_signatures();
+  ::io::deephaven::proto::backplane::script::grpc::SignatureInformation* mutable_signatures(int index);
+  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::SignatureInformation >*
+      mutable_signatures();
   private:
-  const std::string& _internal_keys(int index) const;
-  std::string* _internal_add_keys();
+  const ::io::deephaven::proto::backplane::script::grpc::SignatureInformation& _internal_signatures(int index) const;
+  ::io::deephaven::proto::backplane::script::grpc::SignatureInformation* _internal_add_signatures();
   public:
+  const ::io::deephaven::proto::backplane::script::grpc::SignatureInformation& signatures(int index) const;
+  ::io::deephaven::proto::backplane::script::grpc::SignatureInformation* add_signatures();
+  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::SignatureInformation >&
+      signatures() const;
 
-  // repeated double values = 3;
-  int values_size() const;
+  // optional int32 active_signature = 2;
+  bool has_active_signature() const;
   private:
-  int _internal_values_size() const;
+  bool _internal_has_active_signature() const;
   public:
-  void clear_values();
+  void clear_active_signature();
+  int32_t active_signature() const;
+  void set_active_signature(int32_t value);
   private:
-  double _internal_values(int index) const;
-  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< double >&
-      _internal_values() const;
-  void _internal_add_values(double value);
-  ::PROTOBUF_NAMESPACE_ID::RepeatedField< double >*
-      _internal_mutable_values();
+  int32_t _internal_active_signature() const;
+  void _internal_set_active_signature(int32_t value);
   public:
-  double values(int index) const;
-  void set_values(int index, double value);
-  void add_values(double value);
-  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< double >&
-      values() const;
-  ::PROTOBUF_NAMESPACE_ID::RepeatedField< double >*
-      mutable_values();
 
-  // optional double default_double = 1;
-  bool has_default_double() const;
+  // optional int32 active_parameter = 3;
+  bool has_active_parameter() const;
   private:
-  bool _internal_has_default_double() const;
+  bool _internal_has_active_parameter() const;
   public:
-  void clear_default_double();
-  double default_double() const;
-  void set_default_double(double value);
+  void clear_active_parameter();
+  int32_t active_parameter() const;
+  void set_active_parameter(int32_t value);
   private:
-  double _internal_default_double() const;
-  void _internal_set_default_double(double value);
+  int32_t _internal_active_parameter() const;
+  void _internal_set_active_parameter(int32_t value);
   public:
 
-  // @@protoc_insertion_point(class_scope:io.deephaven.proto.backplane.script.grpc.FigureDescriptor.DoubleMapWithDefault)
+  // @@protoc_insertion_point(class_scope:io.deephaven.proto.backplane.script.grpc.GetSignatureHelpResponse)
  private:
   class _Internal;
 
@@ -7147,31 +6929,31 @@ class FigureDescriptor_DoubleMapWithDefault final :
   typedef void DestructorSkippable_;
   ::PROTOBUF_NAMESPACE_ID::internal::HasBits<1> _has_bits_;
   mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
-  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string> keys_;
-  ::PROTOBUF_NAMESPACE_ID::RepeatedField< double > values_;
-  double default_double_;
+  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::SignatureInformation > signatures_;
+  int32_t active_signature_;
+  int32_t active_parameter_;
   friend struct ::TableStruct_deephaven_2fproto_2fconsole_2eproto;
 };
 // -------------------------------------------------------------------
 
-class FigureDescriptor_BoolMapWithDefault final :
-    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BoolMapWithDefault) */ {
+class SignatureInformation final :
+    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:io.deephaven.proto.backplane.script.grpc.SignatureInformation) */ {
  public:
-  inline FigureDescriptor_BoolMapWithDefault() : FigureDescriptor_BoolMapWithDefault(nullptr) {}
-  ~FigureDescriptor_BoolMapWithDefault() override;
-  explicit PROTOBUF_CONSTEXPR FigureDescriptor_BoolMapWithDefault(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
+  inline SignatureInformation() : SignatureInformation(nullptr) {}
+  ~SignatureInformation() override;
+  explicit PROTOBUF_CONSTEXPR SignatureInformation(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
 
-  FigureDescriptor_BoolMapWithDefault(const FigureDescriptor_BoolMapWithDefault& from);
-  FigureDescriptor_BoolMapWithDefault(FigureDescriptor_BoolMapWithDefault&& from) noexcept
-    : FigureDescriptor_BoolMapWithDefault() {
+  SignatureInformation(const SignatureInformation& from);
+  SignatureInformation(SignatureInformation&& from) noexcept
+    : SignatureInformation() {
     *this = ::std::move(from);
   }
 
-  inline FigureDescriptor_BoolMapWithDefault& operator=(const FigureDescriptor_BoolMapWithDefault& from) {
+  inline SignatureInformation& operator=(const SignatureInformation& from) {
     CopyFrom(from);
     return *this;
   }
-  inline FigureDescriptor_BoolMapWithDefault& operator=(FigureDescriptor_BoolMapWithDefault&& from) noexcept {
+  inline SignatureInformation& operator=(SignatureInformation&& from) noexcept {
     if (this == &from) return *this;
     if (GetOwningArena() == from.GetOwningArena()
   #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
@@ -7194,20 +6976,20 @@ class FigureDescriptor_BoolMapWithDefault final :
   static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
     return default_instance().GetMetadata().reflection;
   }
-  static const FigureDescriptor_BoolMapWithDefault& default_instance() {
+  static const SignatureInformation& default_instance() {
     return *internal_default_instance();
   }
-  static inline const FigureDescriptor_BoolMapWithDefault* internal_default_instance() {
-    return reinterpret_cast<const FigureDescriptor_BoolMapWithDefault*>(
-               &_FigureDescriptor_BoolMapWithDefault_default_instance_);
+  static inline const SignatureInformation* internal_default_instance() {
+    return reinterpret_cast<const SignatureInformation*>(
+               &_SignatureInformation_default_instance_);
   }
   static constexpr int kIndexInFileMessages =
-    35;
+    36;
 
-  friend void swap(FigureDescriptor_BoolMapWithDefault& a, FigureDescriptor_BoolMapWithDefault& b) {
+  friend void swap(SignatureInformation& a, SignatureInformation& b) {
     a.Swap(&b);
   }
-  inline void Swap(FigureDescriptor_BoolMapWithDefault* other) {
+  inline void Swap(SignatureInformation* other) {
     if (other == this) return;
   #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
     if (GetOwningArena() != nullptr &&
@@ -7220,7 +7002,7 @@ class FigureDescriptor_BoolMapWithDefault final :
       ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
     }
   }
-  void UnsafeArenaSwap(FigureDescriptor_BoolMapWithDefault* other) {
+  void UnsafeArenaSwap(SignatureInformation* other) {
     if (other == this) return;
     GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
     InternalSwap(other);
@@ -7228,13 +7010,13 @@ class FigureDescriptor_BoolMapWithDefault final :
 
   // implements Message ----------------------------------------------
 
-  FigureDescriptor_BoolMapWithDefault* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
-    return CreateMaybeMessage<FigureDescriptor_BoolMapWithDefault>(arena);
+  SignatureInformation* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
+    return CreateMaybeMessage<SignatureInformation>(arena);
   }
   using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
-  void CopyFrom(const FigureDescriptor_BoolMapWithDefault& from);
+  void CopyFrom(const SignatureInformation& from);
   using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
-  void MergeFrom(const FigureDescriptor_BoolMapWithDefault& from);
+  void MergeFrom(const SignatureInformation& from);
   private:
   static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
   public:
@@ -7251,15 +7033,15 @@ class FigureDescriptor_BoolMapWithDefault final :
   void SharedCtor();
   void SharedDtor();
   void SetCachedSize(int size) const final;
-  void InternalSwap(FigureDescriptor_BoolMapWithDefault* other);
+  void InternalSwap(SignatureInformation* other);
 
   private:
   friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
   static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
-    return "io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BoolMapWithDefault";
+    return "io.deephaven.proto.backplane.script.grpc.SignatureInformation";
   }
   protected:
-  explicit FigureDescriptor_BoolMapWithDefault(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+  explicit SignatureInformation(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                        bool is_message_owned = false);
   public:
 
@@ -7273,70 +7055,75 @@ class FigureDescriptor_BoolMapWithDefault final :
   // accessors -------------------------------------------------------
 
   enum : int {
-    kKeysFieldNumber = 2,
-    kValuesFieldNumber = 3,
-    kDefaultBoolFieldNumber = 1,
+    kParametersFieldNumber = 3,
+    kLabelFieldNumber = 1,
+    kDocumentationFieldNumber = 2,
+    kActiveParameterFieldNumber = 4,
   };
-  // repeated string keys = 2;
-  int keys_size() const;
+  // repeated .io.deephaven.proto.backplane.script.grpc.ParameterInformation parameters = 3;
+  int parameters_size() const;
   private:
-  int _internal_keys_size() const;
+  int _internal_parameters_size() const;
   public:
-  void clear_keys();
-  const std::string& keys(int index) const;
-  std::string* mutable_keys(int index);
-  void set_keys(int index, const std::string& value);
-  void set_keys(int index, std::string&& value);
-  void set_keys(int index, const char* value);
-  void set_keys(int index, const char* value, size_t size);
-  std::string* add_keys();
-  void add_keys(const std::string& value);
-  void add_keys(std::string&& value);
-  void add_keys(const char* value);
-  void add_keys(const char* value, size_t size);
-  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>& keys() const;
-  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>* mutable_keys();
+  void clear_parameters();
+  ::io::deephaven::proto::backplane::script::grpc::ParameterInformation* mutable_parameters(int index);
+  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::ParameterInformation >*
+      mutable_parameters();
   private:
-  const std::string& _internal_keys(int index) const;
-  std::string* _internal_add_keys();
+  const ::io::deephaven::proto::backplane::script::grpc::ParameterInformation& _internal_parameters(int index) const;
+  ::io::deephaven::proto::backplane::script::grpc::ParameterInformation* _internal_add_parameters();
   public:
+  const ::io::deephaven::proto::backplane::script::grpc::ParameterInformation& parameters(int index) const;
+  ::io::deephaven::proto::backplane::script::grpc::ParameterInformation* add_parameters();
+  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::ParameterInformation >&
+      parameters() const;
 
-  // repeated bool values = 3;
-  int values_size() const;
+  // string label = 1;
+  void clear_label();
+  const std::string& label() const;
+  template <typename ArgT0 = const std::string&, typename... ArgT>
+  void set_label(ArgT0&& arg0, ArgT... args);
+  std::string* mutable_label();
+  PROTOBUF_NODISCARD std::string* release_label();
+  void set_allocated_label(std::string* label);
   private:
-  int _internal_values_size() const;
+  const std::string& _internal_label() const;
+  inline PROTOBUF_ALWAYS_INLINE void _internal_set_label(const std::string& value);
+  std::string* _internal_mutable_label();
   public:
-  void clear_values();
+
+  // .io.deephaven.proto.backplane.script.grpc.MarkupContent documentation = 2;
+  bool has_documentation() const;
   private:
-  bool _internal_values(int index) const;
-  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< bool >&
-      _internal_values() const;
-  void _internal_add_values(bool value);
-  ::PROTOBUF_NAMESPACE_ID::RepeatedField< bool >*
-      _internal_mutable_values();
+  bool _internal_has_documentation() const;
   public:
-  bool values(int index) const;
-  void set_values(int index, bool value);
-  void add_values(bool value);
-  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< bool >&
-      values() const;
-  ::PROTOBUF_NAMESPACE_ID::RepeatedField< bool >*
-      mutable_values();
+  void clear_documentation();
+  const ::io::deephaven::proto::backplane::script::grpc::MarkupContent& documentation() const;
+  PROTOBUF_NODISCARD ::io::deephaven::proto::backplane::script::grpc::MarkupContent* release_documentation();
+  ::io::deephaven::proto::backplane::script::grpc::MarkupContent* mutable_documentation();
+  void set_allocated_documentation(::io::deephaven::proto::backplane::script::grpc::MarkupContent* documentation);
+  private:
+  const ::io::deephaven::proto::backplane::script::grpc::MarkupContent& _internal_documentation() const;
+  ::io::deephaven::proto::backplane::script::grpc::MarkupContent* _internal_mutable_documentation();
+  public:
+  void unsafe_arena_set_allocated_documentation(
+      ::io::deephaven::proto::backplane::script::grpc::MarkupContent* documentation);
+  ::io::deephaven::proto::backplane::script::grpc::MarkupContent* unsafe_arena_release_documentation();
 
-  // optional bool default_bool = 1;
-  bool has_default_bool() const;
+  // optional int32 active_parameter = 4;
+  bool has_active_parameter() const;
   private:
-  bool _internal_has_default_bool() const;
+  bool _internal_has_active_parameter() const;
   public:
-  void clear_default_bool();
-  bool default_bool() const;
-  void set_default_bool(bool value);
+  void clear_active_parameter();
+  int32_t active_parameter() const;
+  void set_active_parameter(int32_t value);
   private:
-  bool _internal_default_bool() const;
-  void _internal_set_default_bool(bool value);
+  int32_t _internal_active_parameter() const;
+  void _internal_set_active_parameter(int32_t value);
   public:
 
-  // @@protoc_insertion_point(class_scope:io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BoolMapWithDefault)
+  // @@protoc_insertion_point(class_scope:io.deephaven.proto.backplane.script.grpc.SignatureInformation)
  private:
   class _Internal;
 
@@ -7345,31 +7132,32 @@ class FigureDescriptor_BoolMapWithDefault final :
   typedef void DestructorSkippable_;
   ::PROTOBUF_NAMESPACE_ID::internal::HasBits<1> _has_bits_;
   mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
-  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string> keys_;
-  ::PROTOBUF_NAMESPACE_ID::RepeatedField< bool > values_;
-  bool default_bool_;
+  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::ParameterInformation > parameters_;
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr label_;
+  ::io::deephaven::proto::backplane::script::grpc::MarkupContent* documentation_;
+  int32_t active_parameter_;
   friend struct ::TableStruct_deephaven_2fproto_2fconsole_2eproto;
 };
 // -------------------------------------------------------------------
 
-class FigureDescriptor_AxisDescriptor final :
-    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:io.deephaven.proto.backplane.script.grpc.FigureDescriptor.AxisDescriptor) */ {
+class ParameterInformation final :
+    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:io.deephaven.proto.backplane.script.grpc.ParameterInformation) */ {
  public:
-  inline FigureDescriptor_AxisDescriptor() : FigureDescriptor_AxisDescriptor(nullptr) {}
-  ~FigureDescriptor_AxisDescriptor() override;
-  explicit PROTOBUF_CONSTEXPR FigureDescriptor_AxisDescriptor(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
+  inline ParameterInformation() : ParameterInformation(nullptr) {}
+  ~ParameterInformation() override;
+  explicit PROTOBUF_CONSTEXPR ParameterInformation(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
 
-  FigureDescriptor_AxisDescriptor(const FigureDescriptor_AxisDescriptor& from);
-  FigureDescriptor_AxisDescriptor(FigureDescriptor_AxisDescriptor&& from) noexcept
-    : FigureDescriptor_AxisDescriptor() {
+  ParameterInformation(const ParameterInformation& from);
+  ParameterInformation(ParameterInformation&& from) noexcept
+    : ParameterInformation() {
     *this = ::std::move(from);
   }
 
-  inline FigureDescriptor_AxisDescriptor& operator=(const FigureDescriptor_AxisDescriptor& from) {
+  inline ParameterInformation& operator=(const ParameterInformation& from) {
     CopyFrom(from);
     return *this;
   }
-  inline FigureDescriptor_AxisDescriptor& operator=(FigureDescriptor_AxisDescriptor&& from) noexcept {
+  inline ParameterInformation& operator=(ParameterInformation&& from) noexcept {
     if (this == &from) return *this;
     if (GetOwningArena() == from.GetOwningArena()
   #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
@@ -7392,20 +7180,20 @@ class FigureDescriptor_AxisDescriptor final :
   static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
     return default_instance().GetMetadata().reflection;
   }
-  static const FigureDescriptor_AxisDescriptor& default_instance() {
+  static const ParameterInformation& default_instance() {
     return *internal_default_instance();
   }
-  static inline const FigureDescriptor_AxisDescriptor* internal_default_instance() {
-    return reinterpret_cast<const FigureDescriptor_AxisDescriptor*>(
-               &_FigureDescriptor_AxisDescriptor_default_instance_);
+  static inline const ParameterInformation* internal_default_instance() {
+    return reinterpret_cast<const ParameterInformation*>(
+               &_ParameterInformation_default_instance_);
   }
   static constexpr int kIndexInFileMessages =
-    36;
+    37;
 
-  friend void swap(FigureDescriptor_AxisDescriptor& a, FigureDescriptor_AxisDescriptor& b) {
+  friend void swap(ParameterInformation& a, ParameterInformation& b) {
     a.Swap(&b);
   }
-  inline void Swap(FigureDescriptor_AxisDescriptor* other) {
+  inline void Swap(ParameterInformation* other) {
     if (other == this) return;
   #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
     if (GetOwningArena() != nullptr &&
@@ -7418,7 +7206,7 @@ class FigureDescriptor_AxisDescriptor final :
       ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
     }
   }
-  void UnsafeArenaSwap(FigureDescriptor_AxisDescriptor* other) {
+  void UnsafeArenaSwap(ParameterInformation* other) {
     if (other == this) return;
     GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
     InternalSwap(other);
@@ -7426,13 +7214,13 @@ class FigureDescriptor_AxisDescriptor final :
 
   // implements Message ----------------------------------------------
 
-  FigureDescriptor_AxisDescriptor* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
-    return CreateMaybeMessage<FigureDescriptor_AxisDescriptor>(arena);
+  ParameterInformation* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
+    return CreateMaybeMessage<ParameterInformation>(arena);
   }
   using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
-  void CopyFrom(const FigureDescriptor_AxisDescriptor& from);
+  void CopyFrom(const ParameterInformation& from);
   using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
-  void MergeFrom(const FigureDescriptor_AxisDescriptor& from);
+  void MergeFrom(const ParameterInformation& from);
   private:
   static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
   public:
@@ -7449,15 +7237,15 @@ class FigureDescriptor_AxisDescriptor final :
   void SharedCtor();
   void SharedDtor();
   void SetCachedSize(int size) const final;
-  void InternalSwap(FigureDescriptor_AxisDescriptor* other);
+  void InternalSwap(ParameterInformation* other);
 
   private:
   friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
   static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
-    return "io.deephaven.proto.backplane.script.grpc.FigureDescriptor.AxisDescriptor";
+    return "io.deephaven.proto.backplane.script.grpc.ParameterInformation";
   }
   protected:
-  explicit FigureDescriptor_AxisDescriptor(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+  explicit ParameterInformation(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                        bool is_message_owned = false);
   public:
 
@@ -7468,172 +7256,13 @@ class FigureDescriptor_AxisDescriptor final :
 
   // nested types ----------------------------------------------------
 
-  typedef FigureDescriptor_AxisDescriptor_AxisFormatType AxisFormatType;
-  static constexpr AxisFormatType CATEGORY =
-    FigureDescriptor_AxisDescriptor_AxisFormatType_CATEGORY;
-  static constexpr AxisFormatType NUMBER =
-    FigureDescriptor_AxisDescriptor_AxisFormatType_NUMBER;
-  static inline bool AxisFormatType_IsValid(int value) {
-    return FigureDescriptor_AxisDescriptor_AxisFormatType_IsValid(value);
-  }
-  static constexpr AxisFormatType AxisFormatType_MIN =
-    FigureDescriptor_AxisDescriptor_AxisFormatType_AxisFormatType_MIN;
-  static constexpr AxisFormatType AxisFormatType_MAX =
-    FigureDescriptor_AxisDescriptor_AxisFormatType_AxisFormatType_MAX;
-  static constexpr int AxisFormatType_ARRAYSIZE =
-    FigureDescriptor_AxisDescriptor_AxisFormatType_AxisFormatType_ARRAYSIZE;
-  static inline const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor*
-  AxisFormatType_descriptor() {
-    return FigureDescriptor_AxisDescriptor_AxisFormatType_descriptor();
-  }
-  template<typename T>
-  static inline const std::string& AxisFormatType_Name(T enum_t_value) {
-    static_assert(::std::is_same<T, AxisFormatType>::value ||
-      ::std::is_integral<T>::value,
-      "Incorrect type passed to function AxisFormatType_Name.");
-    return FigureDescriptor_AxisDescriptor_AxisFormatType_Name(enum_t_value);
-  }
-  static inline bool AxisFormatType_Parse(::PROTOBUF_NAMESPACE_ID::ConstStringParam name,
-      AxisFormatType* value) {
-    return FigureDescriptor_AxisDescriptor_AxisFormatType_Parse(name, value);
-  }
-
-  typedef FigureDescriptor_AxisDescriptor_AxisType AxisType;
-  static constexpr AxisType X =
-    FigureDescriptor_AxisDescriptor_AxisType_X;
-  static constexpr AxisType Y =
-    FigureDescriptor_AxisDescriptor_AxisType_Y;
-  static constexpr AxisType SHAPE =
-    FigureDescriptor_AxisDescriptor_AxisType_SHAPE;
-  static constexpr AxisType SIZE =
-    FigureDescriptor_AxisDescriptor_AxisType_SIZE;
-  static constexpr AxisType LABEL =
-    FigureDescriptor_AxisDescriptor_AxisType_LABEL;
-  static constexpr AxisType COLOR =
-    FigureDescriptor_AxisDescriptor_AxisType_COLOR;
-  static inline bool AxisType_IsValid(int value) {
-    return FigureDescriptor_AxisDescriptor_AxisType_IsValid(value);
-  }
-  static constexpr AxisType AxisType_MIN =
-    FigureDescriptor_AxisDescriptor_AxisType_AxisType_MIN;
-  static constexpr AxisType AxisType_MAX =
-    FigureDescriptor_AxisDescriptor_AxisType_AxisType_MAX;
-  static constexpr int AxisType_ARRAYSIZE =
-    FigureDescriptor_AxisDescriptor_AxisType_AxisType_ARRAYSIZE;
-  static inline const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor*
-  AxisType_descriptor() {
-    return FigureDescriptor_AxisDescriptor_AxisType_descriptor();
-  }
-  template<typename T>
-  static inline const std::string& AxisType_Name(T enum_t_value) {
-    static_assert(::std::is_same<T, AxisType>::value ||
-      ::std::is_integral<T>::value,
-      "Incorrect type passed to function AxisType_Name.");
-    return FigureDescriptor_AxisDescriptor_AxisType_Name(enum_t_value);
-  }
-  static inline bool AxisType_Parse(::PROTOBUF_NAMESPACE_ID::ConstStringParam name,
-      AxisType* value) {
-    return FigureDescriptor_AxisDescriptor_AxisType_Parse(name, value);
-  }
-
-  typedef FigureDescriptor_AxisDescriptor_AxisPosition AxisPosition;
-  static constexpr AxisPosition TOP =
-    FigureDescriptor_AxisDescriptor_AxisPosition_TOP;
-  static constexpr AxisPosition BOTTOM =
-    FigureDescriptor_AxisDescriptor_AxisPosition_BOTTOM;
-  static constexpr AxisPosition LEFT =
-    FigureDescriptor_AxisDescriptor_AxisPosition_LEFT;
-  static constexpr AxisPosition RIGHT =
-    FigureDescriptor_AxisDescriptor_AxisPosition_RIGHT;
-  static constexpr AxisPosition NONE =
-    FigureDescriptor_AxisDescriptor_AxisPosition_NONE;
-  static inline bool AxisPosition_IsValid(int value) {
-    return FigureDescriptor_AxisDescriptor_AxisPosition_IsValid(value);
-  }
-  static constexpr AxisPosition AxisPosition_MIN =
-    FigureDescriptor_AxisDescriptor_AxisPosition_AxisPosition_MIN;
-  static constexpr AxisPosition AxisPosition_MAX =
-    FigureDescriptor_AxisDescriptor_AxisPosition_AxisPosition_MAX;
-  static constexpr int AxisPosition_ARRAYSIZE =
-    FigureDescriptor_AxisDescriptor_AxisPosition_AxisPosition_ARRAYSIZE;
-  static inline const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor*
-  AxisPosition_descriptor() {
-    return FigureDescriptor_AxisDescriptor_AxisPosition_descriptor();
-  }
-  template<typename T>
-  static inline const std::string& AxisPosition_Name(T enum_t_value) {
-    static_assert(::std::is_same<T, AxisPosition>::value ||
-      ::std::is_integral<T>::value,
-      "Incorrect type passed to function AxisPosition_Name.");
-    return FigureDescriptor_AxisDescriptor_AxisPosition_Name(enum_t_value);
-  }
-  static inline bool AxisPosition_Parse(::PROTOBUF_NAMESPACE_ID::ConstStringParam name,
-      AxisPosition* value) {
-    return FigureDescriptor_AxisDescriptor_AxisPosition_Parse(name, value);
-  }
-
-  // accessors -------------------------------------------------------
+  // accessors -------------------------------------------------------
 
   enum : int {
-    kMajorTickLocationsFieldNumber = 17,
-    kIdFieldNumber = 1,
-    kLabelFieldNumber = 6,
-    kLabelFontFieldNumber = 7,
-    kTicksFontFieldNumber = 8,
-    kFormatPatternFieldNumber = 9,
-    kColorFieldNumber = 10,
-    kBusinessCalendarDescriptorFieldNumber = 21,
-    kFormatTypeFieldNumber = 2,
-    kTypeFieldNumber = 3,
-    kMinRangeFieldNumber = 11,
-    kPositionFieldNumber = 4,
-    kLogFieldNumber = 5,
-    kMinorTicksVisibleFieldNumber = 13,
-    kMajorTicksVisibleFieldNumber = 14,
-    kInvertFieldNumber = 19,
-    kMaxRangeFieldNumber = 12,
-    kGapBetweenMajorTicksFieldNumber = 16,
-    kMinorTickCountFieldNumber = 15,
-    kIsTimeAxisFieldNumber = 20,
-    kTickLabelAngleFieldNumber = 18,
+    kLabelFieldNumber = 1,
+    kDocumentationFieldNumber = 2,
   };
-  // repeated double major_tick_locations = 17;
-  int major_tick_locations_size() const;
-  private:
-  int _internal_major_tick_locations_size() const;
-  public:
-  void clear_major_tick_locations();
-  private:
-  double _internal_major_tick_locations(int index) const;
-  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< double >&
-      _internal_major_tick_locations() const;
-  void _internal_add_major_tick_locations(double value);
-  ::PROTOBUF_NAMESPACE_ID::RepeatedField< double >*
-      _internal_mutable_major_tick_locations();
-  public:
-  double major_tick_locations(int index) const;
-  void set_major_tick_locations(int index, double value);
-  void add_major_tick_locations(double value);
-  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< double >&
-      major_tick_locations() const;
-  ::PROTOBUF_NAMESPACE_ID::RepeatedField< double >*
-      mutable_major_tick_locations();
-
-  // string id = 1;
-  void clear_id();
-  const std::string& id() const;
-  template <typename ArgT0 = const std::string&, typename... ArgT>
-  void set_id(ArgT0&& arg0, ArgT... args);
-  std::string* mutable_id();
-  PROTOBUF_NODISCARD std::string* release_id();
-  void set_allocated_id(std::string* id);
-  private:
-  const std::string& _internal_id() const;
-  inline PROTOBUF_ALWAYS_INLINE void _internal_set_id(const std::string& value);
-  std::string* _internal_mutable_id();
-  public:
-
-  // string label = 6;
+  // string label = 1;
   void clear_label();
   const std::string& label() const;
   template <typename ArgT0 = const std::string&, typename... ArgT>
@@ -7647,257 +7276,228 @@ class FigureDescriptor_AxisDescriptor final :
   std::string* _internal_mutable_label();
   public:
 
-  // string label_font = 7;
-  void clear_label_font();
-  const std::string& label_font() const;
-  template <typename ArgT0 = const std::string&, typename... ArgT>
-  void set_label_font(ArgT0&& arg0, ArgT... args);
-  std::string* mutable_label_font();
-  PROTOBUF_NODISCARD std::string* release_label_font();
-  void set_allocated_label_font(std::string* label_font);
+  // .io.deephaven.proto.backplane.script.grpc.MarkupContent documentation = 2;
+  bool has_documentation() const;
   private:
-  const std::string& _internal_label_font() const;
-  inline PROTOBUF_ALWAYS_INLINE void _internal_set_label_font(const std::string& value);
-  std::string* _internal_mutable_label_font();
+  bool _internal_has_documentation() const;
   public:
-
-  // string ticks_font = 8;
-  void clear_ticks_font();
-  const std::string& ticks_font() const;
-  template <typename ArgT0 = const std::string&, typename... ArgT>
-  void set_ticks_font(ArgT0&& arg0, ArgT... args);
-  std::string* mutable_ticks_font();
-  PROTOBUF_NODISCARD std::string* release_ticks_font();
-  void set_allocated_ticks_font(std::string* ticks_font);
+  void clear_documentation();
+  const ::io::deephaven::proto::backplane::script::grpc::MarkupContent& documentation() const;
+  PROTOBUF_NODISCARD ::io::deephaven::proto::backplane::script::grpc::MarkupContent* release_documentation();
+  ::io::deephaven::proto::backplane::script::grpc::MarkupContent* mutable_documentation();
+  void set_allocated_documentation(::io::deephaven::proto::backplane::script::grpc::MarkupContent* documentation);
   private:
-  const std::string& _internal_ticks_font() const;
-  inline PROTOBUF_ALWAYS_INLINE void _internal_set_ticks_font(const std::string& value);
-  std::string* _internal_mutable_ticks_font();
+  const ::io::deephaven::proto::backplane::script::grpc::MarkupContent& _internal_documentation() const;
+  ::io::deephaven::proto::backplane::script::grpc::MarkupContent* _internal_mutable_documentation();
   public:
+  void unsafe_arena_set_allocated_documentation(
+      ::io::deephaven::proto::backplane::script::grpc::MarkupContent* documentation);
+  ::io::deephaven::proto::backplane::script::grpc::MarkupContent* unsafe_arena_release_documentation();
 
-  // optional string format_pattern = 9;
-  bool has_format_pattern() const;
-  private:
-  bool _internal_has_format_pattern() const;
-  public:
-  void clear_format_pattern();
-  const std::string& format_pattern() const;
-  template <typename ArgT0 = const std::string&, typename... ArgT>
-  void set_format_pattern(ArgT0&& arg0, ArgT... args);
-  std::string* mutable_format_pattern();
-  PROTOBUF_NODISCARD std::string* release_format_pattern();
-  void set_allocated_format_pattern(std::string* format_pattern);
-  private:
-  const std::string& _internal_format_pattern() const;
-  inline PROTOBUF_ALWAYS_INLINE void _internal_set_format_pattern(const std::string& value);
-  std::string* _internal_mutable_format_pattern();
-  public:
+  // @@protoc_insertion_point(class_scope:io.deephaven.proto.backplane.script.grpc.ParameterInformation)
+ private:
+  class _Internal;
 
-  // string color = 10;
-  void clear_color();
-  const std::string& color() const;
-  template <typename ArgT0 = const std::string&, typename... ArgT>
-  void set_color(ArgT0&& arg0, ArgT... args);
-  std::string* mutable_color();
-  PROTOBUF_NODISCARD std::string* release_color();
-  void set_allocated_color(std::string* color);
-  private:
-  const std::string& _internal_color() const;
-  inline PROTOBUF_ALWAYS_INLINE void _internal_set_color(const std::string& value);
-  std::string* _internal_mutable_color();
-  public:
+  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
+  typedef void InternalArenaConstructable_;
+  typedef void DestructorSkippable_;
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr label_;
+  ::io::deephaven::proto::backplane::script::grpc::MarkupContent* documentation_;
+  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
+  friend struct ::TableStruct_deephaven_2fproto_2fconsole_2eproto;
+};
+// -------------------------------------------------------------------
 
-  // .io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BusinessCalendarDescriptor business_calendar_descriptor = 21;
-  bool has_business_calendar_descriptor() const;
-  private:
-  bool _internal_has_business_calendar_descriptor() const;
-  public:
-  void clear_business_calendar_descriptor();
-  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor& business_calendar_descriptor() const;
-  PROTOBUF_NODISCARD ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor* release_business_calendar_descriptor();
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor* mutable_business_calendar_descriptor();
-  void set_allocated_business_calendar_descriptor(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor* business_calendar_descriptor);
-  private:
-  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor& _internal_business_calendar_descriptor() const;
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor* _internal_mutable_business_calendar_descriptor();
-  public:
-  void unsafe_arena_set_allocated_business_calendar_descriptor(
-      ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor* business_calendar_descriptor);
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor* unsafe_arena_release_business_calendar_descriptor();
+class GetHoverRequest final :
+    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:io.deephaven.proto.backplane.script.grpc.GetHoverRequest) */ {
+ public:
+  inline GetHoverRequest() : GetHoverRequest(nullptr) {}
+  ~GetHoverRequest() override;
+  explicit PROTOBUF_CONSTEXPR GetHoverRequest(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
 
-  // .io.deephaven.proto.backplane.script.grpc.FigureDescriptor.AxisDescriptor.AxisFormatType format_type = 2;
-  void clear_format_type();
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_AxisDescriptor_AxisFormatType format_type() const;
-  void set_format_type(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_AxisDescriptor_AxisFormatType value);
-  private:
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_AxisDescriptor_AxisFormatType _internal_format_type() const;
-  void _internal_set_format_type(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_AxisDescriptor_AxisFormatType value);
-  public:
+  GetHoverRequest(const GetHoverRequest& from);
+  GetHoverRequest(GetHoverRequest&& from) noexcept
+    : GetHoverRequest() {
+    *this = ::std::move(from);
+  }
 
-  // .io.deephaven.proto.backplane.script.grpc.FigureDescriptor.AxisDescriptor.AxisType type = 3;
-  void clear_type();
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_AxisDescriptor_AxisType type() const;
-  void set_type(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_AxisDescriptor_AxisType value);
-  private:
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_AxisDescriptor_AxisType _internal_type() const;
-  void _internal_set_type(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_AxisDescriptor_AxisType value);
-  public:
+  inline GetHoverRequest& operator=(const GetHoverRequest& from) {
+    CopyFrom(from);
+    return *this;
+  }
+  inline GetHoverRequest& operator=(GetHoverRequest&& from) noexcept {
+    if (this == &from) return *this;
+    if (GetOwningArena() == from.GetOwningArena()
+  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+        && GetOwningArena() != nullptr
+  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
+    ) {
+      InternalSwap(&from);
+    } else {
+      CopyFrom(from);
+    }
+    return *this;
+  }
 
-  // double min_range = 11;
-  void clear_min_range();
-  double min_range() const;
-  void set_min_range(double value);
-  private:
-  double _internal_min_range() const;
-  void _internal_set_min_range(double value);
-  public:
+  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
+    return GetDescriptor();
+  }
+  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
+    return default_instance().GetMetadata().descriptor;
+  }
+  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
+    return default_instance().GetMetadata().reflection;
+  }
+  static const GetHoverRequest& default_instance() {
+    return *internal_default_instance();
+  }
+  static inline const GetHoverRequest* internal_default_instance() {
+    return reinterpret_cast<const GetHoverRequest*>(
+               &_GetHoverRequest_default_instance_);
+  }
+  static constexpr int kIndexInFileMessages =
+    38;
 
-  // .io.deephaven.proto.backplane.script.grpc.FigureDescriptor.AxisDescriptor.AxisPosition position = 4;
-  void clear_position();
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_AxisDescriptor_AxisPosition position() const;
-  void set_position(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_AxisDescriptor_AxisPosition value);
-  private:
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_AxisDescriptor_AxisPosition _internal_position() const;
-  void _internal_set_position(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_AxisDescriptor_AxisPosition value);
-  public:
+  friend void swap(GetHoverRequest& a, GetHoverRequest& b) {
+    a.Swap(&b);
+  }
+  inline void Swap(GetHoverRequest* other) {
+    if (other == this) return;
+  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
+    if (GetOwningArena() != nullptr &&
+        GetOwningArena() == other->GetOwningArena()) {
+   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
+    if (GetOwningArena() == other->GetOwningArena()) {
+  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
+      InternalSwap(other);
+    } else {
+      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
+    }
+  }
+  void UnsafeArenaSwap(GetHoverRequest* other) {
+    if (other == this) return;
+    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
+    InternalSwap(other);
+  }
 
-  // bool log = 5;
-  void clear_log();
-  bool log() const;
-  void set_log(bool value);
-  private:
-  bool _internal_log() const;
-  void _internal_set_log(bool value);
-  public:
+  // implements Message ----------------------------------------------
 
-  // bool minor_ticks_visible = 13;
-  void clear_minor_ticks_visible();
-  bool minor_ticks_visible() const;
-  void set_minor_ticks_visible(bool value);
+  GetHoverRequest* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
+    return CreateMaybeMessage<GetHoverRequest>(arena);
+  }
+  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
+  void CopyFrom(const GetHoverRequest& from);
+  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
+  void MergeFrom(const GetHoverRequest& from);
   private:
-  bool _internal_minor_ticks_visible() const;
-  void _internal_set_minor_ticks_visible(bool value);
+  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
   public:
+  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
+  bool IsInitialized() const final;
 
-  // bool major_ticks_visible = 14;
-  void clear_major_ticks_visible();
-  bool major_ticks_visible() const;
-  void set_major_ticks_visible(bool value);
-  private:
-  bool _internal_major_ticks_visible() const;
-  void _internal_set_major_ticks_visible(bool value);
-  public:
+  size_t ByteSizeLong() const final;
+  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
+  uint8_t* _InternalSerialize(
+      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
+  int GetCachedSize() const final { return _cached_size_.Get(); }
 
-  // bool invert = 19;
-  void clear_invert();
-  bool invert() const;
-  void set_invert(bool value);
   private:
-  bool _internal_invert() const;
-  void _internal_set_invert(bool value);
-  public:
+  void SharedCtor();
+  void SharedDtor();
+  void SetCachedSize(int size) const final;
+  void InternalSwap(GetHoverRequest* other);
 
-  // double max_range = 12;
-  void clear_max_range();
-  double max_range() const;
-  void set_max_range(double value);
   private:
-  double _internal_max_range() const;
-  void _internal_set_max_range(double value);
+  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
+  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
+    return "io.deephaven.proto.backplane.script.grpc.GetHoverRequest";
+  }
+  protected:
+  explicit GetHoverRequest(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+                       bool is_message_owned = false);
   public:
 
-  // optional double gap_between_major_ticks = 16;
-  bool has_gap_between_major_ticks() const;
-  private:
-  bool _internal_has_gap_between_major_ticks() const;
-  public:
-  void clear_gap_between_major_ticks();
-  double gap_between_major_ticks() const;
-  void set_gap_between_major_ticks(double value);
+  static const ClassData _class_data_;
+  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;
+
+  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
+
+  // nested types ----------------------------------------------------
+
+  // accessors -------------------------------------------------------
+
+  enum : int {
+    kTextDocumentFieldNumber = 1,
+    kPositionFieldNumber = 2,
+  };
+  // .io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier text_document = 1;
+  bool has_text_document() const;
   private:
-  double _internal_gap_between_major_ticks() const;
-  void _internal_set_gap_between_major_ticks(double value);
+  bool _internal_has_text_document() const;
   public:
-
-  // int32 minor_tick_count = 15;
-  void clear_minor_tick_count();
-  int32_t minor_tick_count() const;
-  void set_minor_tick_count(int32_t value);
+  void clear_text_document();
+  const ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier& text_document() const;
+  PROTOBUF_NODISCARD ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* release_text_document();
+  ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* mutable_text_document();
+  void set_allocated_text_document(::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* text_document);
   private:
-  int32_t _internal_minor_tick_count() const;
-  void _internal_set_minor_tick_count(int32_t value);
+  const ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier& _internal_text_document() const;
+  ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* _internal_mutable_text_document();
   public:
+  void unsafe_arena_set_allocated_text_document(
+      ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* text_document);
+  ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* unsafe_arena_release_text_document();
 
-  // bool is_time_axis = 20;
-  void clear_is_time_axis();
-  bool is_time_axis() const;
-  void set_is_time_axis(bool value);
+  // .io.deephaven.proto.backplane.script.grpc.Position position = 2;
+  bool has_position() const;
   private:
-  bool _internal_is_time_axis() const;
-  void _internal_set_is_time_axis(bool value);
+  bool _internal_has_position() const;
   public:
-
-  // double tick_label_angle = 18;
-  void clear_tick_label_angle();
-  double tick_label_angle() const;
-  void set_tick_label_angle(double value);
+  void clear_position();
+  const ::io::deephaven::proto::backplane::script::grpc::Position& position() const;
+  PROTOBUF_NODISCARD ::io::deephaven::proto::backplane::script::grpc::Position* release_position();
+  ::io::deephaven::proto::backplane::script::grpc::Position* mutable_position();
+  void set_allocated_position(::io::deephaven::proto::backplane::script::grpc::Position* position);
   private:
-  double _internal_tick_label_angle() const;
-  void _internal_set_tick_label_angle(double value);
+  const ::io::deephaven::proto::backplane::script::grpc::Position& _internal_position() const;
+  ::io::deephaven::proto::backplane::script::grpc::Position* _internal_mutable_position();
   public:
+  void unsafe_arena_set_allocated_position(
+      ::io::deephaven::proto::backplane::script::grpc::Position* position);
+  ::io::deephaven::proto::backplane::script::grpc::Position* unsafe_arena_release_position();
 
-  // @@protoc_insertion_point(class_scope:io.deephaven.proto.backplane.script.grpc.FigureDescriptor.AxisDescriptor)
+  // @@protoc_insertion_point(class_scope:io.deephaven.proto.backplane.script.grpc.GetHoverRequest)
  private:
   class _Internal;
 
   template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
   typedef void InternalArenaConstructable_;
   typedef void DestructorSkippable_;
-  ::PROTOBUF_NAMESPACE_ID::internal::HasBits<1> _has_bits_;
+  ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* text_document_;
+  ::io::deephaven::proto::backplane::script::grpc::Position* position_;
   mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
-  ::PROTOBUF_NAMESPACE_ID::RepeatedField< double > major_tick_locations_;
-  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr id_;
-  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr label_;
-  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr label_font_;
-  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr ticks_font_;
-  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr format_pattern_;
-  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr color_;
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor* business_calendar_descriptor_;
-  int format_type_;
-  int type_;
-  double min_range_;
-  int position_;
-  bool log_;
-  bool minor_ticks_visible_;
-  bool major_ticks_visible_;
-  bool invert_;
-  double max_range_;
-  double gap_between_major_ticks_;
-  int32_t minor_tick_count_;
-  bool is_time_axis_;
-  double tick_label_angle_;
   friend struct ::TableStruct_deephaven_2fproto_2fconsole_2eproto;
 };
 // -------------------------------------------------------------------
 
-class FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod final :
-    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BusinessCalendarDescriptor.BusinessPeriod) */ {
+class GetHoverResponse final :
+    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:io.deephaven.proto.backplane.script.grpc.GetHoverResponse) */ {
  public:
-  inline FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod() : FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod(nullptr) {}
-  ~FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod() override;
-  explicit PROTOBUF_CONSTEXPR FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
+  inline GetHoverResponse() : GetHoverResponse(nullptr) {}
+  ~GetHoverResponse() override;
+  explicit PROTOBUF_CONSTEXPR GetHoverResponse(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
 
-  FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod(const FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod& from);
-  FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod(FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod&& from) noexcept
-    : FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod() {
+  GetHoverResponse(const GetHoverResponse& from);
+  GetHoverResponse(GetHoverResponse&& from) noexcept
+    : GetHoverResponse() {
     *this = ::std::move(from);
   }
 
-  inline FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod& operator=(const FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod& from) {
+  inline GetHoverResponse& operator=(const GetHoverResponse& from) {
     CopyFrom(from);
     return *this;
   }
-  inline FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod& operator=(FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod&& from) noexcept {
+  inline GetHoverResponse& operator=(GetHoverResponse&& from) noexcept {
     if (this == &from) return *this;
     if (GetOwningArena() == from.GetOwningArena()
   #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
@@ -7920,20 +7520,20 @@ class FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod final :
   static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
     return default_instance().GetMetadata().reflection;
   }
-  static const FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod& default_instance() {
+  static const GetHoverResponse& default_instance() {
     return *internal_default_instance();
   }
-  static inline const FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod* internal_default_instance() {
-    return reinterpret_cast<const FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod*>(
-               &_FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod_default_instance_);
+  static inline const GetHoverResponse* internal_default_instance() {
+    return reinterpret_cast<const GetHoverResponse*>(
+               &_GetHoverResponse_default_instance_);
   }
   static constexpr int kIndexInFileMessages =
-    37;
+    39;
 
-  friend void swap(FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod& a, FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod& b) {
+  friend void swap(GetHoverResponse& a, GetHoverResponse& b) {
     a.Swap(&b);
   }
-  inline void Swap(FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod* other) {
+  inline void Swap(GetHoverResponse* other) {
     if (other == this) return;
   #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
     if (GetOwningArena() != nullptr &&
@@ -7946,7 +7546,7 @@ class FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod final :
       ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
     }
   }
-  void UnsafeArenaSwap(FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod* other) {
+  void UnsafeArenaSwap(GetHoverResponse* other) {
     if (other == this) return;
     GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
     InternalSwap(other);
@@ -7954,13 +7554,13 @@ class FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod final :
 
   // implements Message ----------------------------------------------
 
-  FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
-    return CreateMaybeMessage<FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod>(arena);
+  GetHoverResponse* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
+    return CreateMaybeMessage<GetHoverResponse>(arena);
   }
   using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
-  void CopyFrom(const FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod& from);
+  void CopyFrom(const GetHoverResponse& from);
   using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
-  void MergeFrom(const FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod& from);
+  void MergeFrom(const GetHoverResponse& from);
   private:
   static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
   public:
@@ -7977,15 +7577,15 @@ class FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod final :
   void SharedCtor();
   void SharedDtor();
   void SetCachedSize(int size) const final;
-  void InternalSwap(FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod* other);
+  void InternalSwap(GetHoverResponse* other);
 
   private:
   friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
   static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
-    return "io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BusinessCalendarDescriptor.BusinessPeriod";
+    return "io.deephaven.proto.backplane.script.grpc.GetHoverResponse";
   }
   protected:
-  explicit FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+  explicit GetHoverResponse(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                        bool is_message_owned = false);
   public:
 
@@ -7999,69 +7599,77 @@ class FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod final :
   // accessors -------------------------------------------------------
 
   enum : int {
-    kOpenFieldNumber = 1,
-    kCloseFieldNumber = 2,
+    kContentsFieldNumber = 1,
+    kRangeFieldNumber = 2,
   };
-  // string open = 1;
-  void clear_open();
-  const std::string& open() const;
-  template <typename ArgT0 = const std::string&, typename... ArgT>
-  void set_open(ArgT0&& arg0, ArgT... args);
-  std::string* mutable_open();
-  PROTOBUF_NODISCARD std::string* release_open();
-  void set_allocated_open(std::string* open);
+  // .io.deephaven.proto.backplane.script.grpc.MarkupContent contents = 1;
+  bool has_contents() const;
   private:
-  const std::string& _internal_open() const;
-  inline PROTOBUF_ALWAYS_INLINE void _internal_set_open(const std::string& value);
-  std::string* _internal_mutable_open();
+  bool _internal_has_contents() const;
+  public:
+  void clear_contents();
+  const ::io::deephaven::proto::backplane::script::grpc::MarkupContent& contents() const;
+  PROTOBUF_NODISCARD ::io::deephaven::proto::backplane::script::grpc::MarkupContent* release_contents();
+  ::io::deephaven::proto::backplane::script::grpc::MarkupContent* mutable_contents();
+  void set_allocated_contents(::io::deephaven::proto::backplane::script::grpc::MarkupContent* contents);
+  private:
+  const ::io::deephaven::proto::backplane::script::grpc::MarkupContent& _internal_contents() const;
+  ::io::deephaven::proto::backplane::script::grpc::MarkupContent* _internal_mutable_contents();
   public:
+  void unsafe_arena_set_allocated_contents(
+      ::io::deephaven::proto::backplane::script::grpc::MarkupContent* contents);
+  ::io::deephaven::proto::backplane::script::grpc::MarkupContent* unsafe_arena_release_contents();
 
-  // string close = 2;
-  void clear_close();
-  const std::string& close() const;
-  template <typename ArgT0 = const std::string&, typename... ArgT>
-  void set_close(ArgT0&& arg0, ArgT... args);
-  std::string* mutable_close();
-  PROTOBUF_NODISCARD std::string* release_close();
-  void set_allocated_close(std::string* close);
+  // .io.deephaven.proto.backplane.script.grpc.DocumentRange range = 2;
+  bool has_range() const;
   private:
-  const std::string& _internal_close() const;
-  inline PROTOBUF_ALWAYS_INLINE void _internal_set_close(const std::string& value);
-  std::string* _internal_mutable_close();
+  bool _internal_has_range() const;
   public:
+  void clear_range();
+  const ::io::deephaven::proto::backplane::script::grpc::DocumentRange& range() const;
+  PROTOBUF_NODISCARD ::io::deephaven::proto::backplane::script::grpc::DocumentRange* release_range();
+  ::io::deephaven::proto::backplane::script::grpc::DocumentRange* mutable_range();
+  void set_allocated_range(::io::deephaven::proto::backplane::script::grpc::DocumentRange* range);
+  private:
+  const ::io::deephaven::proto::backplane::script::grpc::DocumentRange& _internal_range() const;
+  ::io::deephaven::proto::backplane::script::grpc::DocumentRange* _internal_mutable_range();
+  public:
+  void unsafe_arena_set_allocated_range(
+      ::io::deephaven::proto::backplane::script::grpc::DocumentRange* range);
+  ::io::deephaven::proto::backplane::script::grpc::DocumentRange* unsafe_arena_release_range();
 
-  // @@protoc_insertion_point(class_scope:io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BusinessCalendarDescriptor.BusinessPeriod)
+  // @@protoc_insertion_point(class_scope:io.deephaven.proto.backplane.script.grpc.GetHoverResponse)
  private:
   class _Internal;
 
   template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
   typedef void InternalArenaConstructable_;
   typedef void DestructorSkippable_;
-  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr open_;
-  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr close_;
+  ::io::deephaven::proto::backplane::script::grpc::MarkupContent* contents_;
+  ::io::deephaven::proto::backplane::script::grpc::DocumentRange* range_;
   mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
   friend struct ::TableStruct_deephaven_2fproto_2fconsole_2eproto;
 };
 // -------------------------------------------------------------------
 
-class FigureDescriptor_BusinessCalendarDescriptor_Holiday final :
-    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BusinessCalendarDescriptor.Holiday) */ {
+class GetDiagnosticRequest final :
+    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:io.deephaven.proto.backplane.script.grpc.GetDiagnosticRequest) */ {
  public:
-  inline FigureDescriptor_BusinessCalendarDescriptor_Holiday() : FigureDescriptor_BusinessCalendarDescriptor_Holiday(nullptr) {}
-  ~FigureDescriptor_BusinessCalendarDescriptor_Holiday() override;
-  explicit PROTOBUF_CONSTEXPR FigureDescriptor_BusinessCalendarDescriptor_Holiday(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
+  inline GetDiagnosticRequest() : GetDiagnosticRequest(nullptr) {}
+  ~GetDiagnosticRequest() override;
+  explicit PROTOBUF_CONSTEXPR GetDiagnosticRequest(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
 
-  FigureDescriptor_BusinessCalendarDescriptor_Holiday(const FigureDescriptor_BusinessCalendarDescriptor_Holiday& from);
-  FigureDescriptor_BusinessCalendarDescriptor_Holiday(FigureDescriptor_BusinessCalendarDescriptor_Holiday&& from) noexcept
-    : FigureDescriptor_BusinessCalendarDescriptor_Holiday() {
+  GetDiagnosticRequest(const GetDiagnosticRequest& from);
+  GetDiagnosticRequest(GetDiagnosticRequest&& from) noexcept
+    : GetDiagnosticRequest() {
     *this = ::std::move(from);
   }
 
-  inline FigureDescriptor_BusinessCalendarDescriptor_Holiday& operator=(const FigureDescriptor_BusinessCalendarDescriptor_Holiday& from) {
+  inline GetDiagnosticRequest& operator=(const GetDiagnosticRequest& from) {
     CopyFrom(from);
     return *this;
   }
-  inline FigureDescriptor_BusinessCalendarDescriptor_Holiday& operator=(FigureDescriptor_BusinessCalendarDescriptor_Holiday&& from) noexcept {
+  inline GetDiagnosticRequest& operator=(GetDiagnosticRequest&& from) noexcept {
     if (this == &from) return *this;
     if (GetOwningArena() == from.GetOwningArena()
   #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
@@ -8084,20 +7692,20 @@ class FigureDescriptor_BusinessCalendarDescriptor_Holiday final :
   static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
     return default_instance().GetMetadata().reflection;
   }
-  static const FigureDescriptor_BusinessCalendarDescriptor_Holiday& default_instance() {
+  static const GetDiagnosticRequest& default_instance() {
     return *internal_default_instance();
   }
-  static inline const FigureDescriptor_BusinessCalendarDescriptor_Holiday* internal_default_instance() {
-    return reinterpret_cast<const FigureDescriptor_BusinessCalendarDescriptor_Holiday*>(
-               &_FigureDescriptor_BusinessCalendarDescriptor_Holiday_default_instance_);
+  static inline const GetDiagnosticRequest* internal_default_instance() {
+    return reinterpret_cast<const GetDiagnosticRequest*>(
+               &_GetDiagnosticRequest_default_instance_);
   }
   static constexpr int kIndexInFileMessages =
-    38;
+    40;
 
-  friend void swap(FigureDescriptor_BusinessCalendarDescriptor_Holiday& a, FigureDescriptor_BusinessCalendarDescriptor_Holiday& b) {
+  friend void swap(GetDiagnosticRequest& a, GetDiagnosticRequest& b) {
     a.Swap(&b);
   }
-  inline void Swap(FigureDescriptor_BusinessCalendarDescriptor_Holiday* other) {
+  inline void Swap(GetDiagnosticRequest* other) {
     if (other == this) return;
   #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
     if (GetOwningArena() != nullptr &&
@@ -8110,7 +7718,7 @@ class FigureDescriptor_BusinessCalendarDescriptor_Holiday final :
       ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
     }
   }
-  void UnsafeArenaSwap(FigureDescriptor_BusinessCalendarDescriptor_Holiday* other) {
+  void UnsafeArenaSwap(GetDiagnosticRequest* other) {
     if (other == this) return;
     GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
     InternalSwap(other);
@@ -8118,13 +7726,13 @@ class FigureDescriptor_BusinessCalendarDescriptor_Holiday final :
 
   // implements Message ----------------------------------------------
 
-  FigureDescriptor_BusinessCalendarDescriptor_Holiday* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
-    return CreateMaybeMessage<FigureDescriptor_BusinessCalendarDescriptor_Holiday>(arena);
+  GetDiagnosticRequest* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
+    return CreateMaybeMessage<GetDiagnosticRequest>(arena);
   }
   using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
-  void CopyFrom(const FigureDescriptor_BusinessCalendarDescriptor_Holiday& from);
+  void CopyFrom(const GetDiagnosticRequest& from);
   using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
-  void MergeFrom(const FigureDescriptor_BusinessCalendarDescriptor_Holiday& from);
+  void MergeFrom(const GetDiagnosticRequest& from);
   private:
   static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
   public:
@@ -8141,15 +7749,15 @@ class FigureDescriptor_BusinessCalendarDescriptor_Holiday final :
   void SharedCtor();
   void SharedDtor();
   void SetCachedSize(int size) const final;
-  void InternalSwap(FigureDescriptor_BusinessCalendarDescriptor_Holiday* other);
+  void InternalSwap(GetDiagnosticRequest* other);
 
   private:
   friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
   static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
-    return "io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BusinessCalendarDescriptor.Holiday";
+    return "io.deephaven.proto.backplane.script.grpc.GetDiagnosticRequest";
   }
   protected:
-  explicit FigureDescriptor_BusinessCalendarDescriptor_Holiday(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+  explicit GetDiagnosticRequest(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                        bool is_message_owned = false);
   public:
 
@@ -8163,77 +7771,98 @@ class FigureDescriptor_BusinessCalendarDescriptor_Holiday final :
   // accessors -------------------------------------------------------
 
   enum : int {
-    kBusinessPeriodsFieldNumber = 2,
-    kDateFieldNumber = 1,
+    kIdentifierFieldNumber = 2,
+    kPreviousResultIdFieldNumber = 3,
+    kTextDocumentFieldNumber = 1,
   };
-  // repeated .io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BusinessCalendarDescriptor.BusinessPeriod business_periods = 2;
-  int business_periods_size() const;
+  // optional string identifier = 2;
+  bool has_identifier() const;
   private:
-  int _internal_business_periods_size() const;
+  bool _internal_has_identifier() const;
   public:
-  void clear_business_periods();
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod* mutable_business_periods(int index);
-  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod >*
-      mutable_business_periods();
+  void clear_identifier();
+  const std::string& identifier() const;
+  template <typename ArgT0 = const std::string&, typename... ArgT>
+  void set_identifier(ArgT0&& arg0, ArgT... args);
+  std::string* mutable_identifier();
+  PROTOBUF_NODISCARD std::string* release_identifier();
+  void set_allocated_identifier(std::string* identifier);
   private:
-  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod& _internal_business_periods(int index) const;
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod* _internal_add_business_periods();
+  const std::string& _internal_identifier() const;
+  inline PROTOBUF_ALWAYS_INLINE void _internal_set_identifier(const std::string& value);
+  std::string* _internal_mutable_identifier();
   public:
-  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod& business_periods(int index) const;
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod* add_business_periods();
-  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod >&
-      business_periods() const;
 
-  // .io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BusinessCalendarDescriptor.LocalDate date = 1;
-  bool has_date() const;
+  // optional string previous_result_id = 3;
+  bool has_previous_result_id() const;
   private:
-  bool _internal_has_date() const;
+  bool _internal_has_previous_result_id() const;
   public:
-  void clear_date();
-  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor_LocalDate& date() const;
-  PROTOBUF_NODISCARD ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor_LocalDate* release_date();
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor_LocalDate* mutable_date();
-  void set_allocated_date(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor_LocalDate* date);
+  void clear_previous_result_id();
+  const std::string& previous_result_id() const;
+  template <typename ArgT0 = const std::string&, typename... ArgT>
+  void set_previous_result_id(ArgT0&& arg0, ArgT... args);
+  std::string* mutable_previous_result_id();
+  PROTOBUF_NODISCARD std::string* release_previous_result_id();
+  void set_allocated_previous_result_id(std::string* previous_result_id);
   private:
-  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor_LocalDate& _internal_date() const;
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor_LocalDate* _internal_mutable_date();
+  const std::string& _internal_previous_result_id() const;
+  inline PROTOBUF_ALWAYS_INLINE void _internal_set_previous_result_id(const std::string& value);
+  std::string* _internal_mutable_previous_result_id();
   public:
-  void unsafe_arena_set_allocated_date(
-      ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor_LocalDate* date);
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor_LocalDate* unsafe_arena_release_date();
 
-  // @@protoc_insertion_point(class_scope:io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BusinessCalendarDescriptor.Holiday)
+  // .io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier text_document = 1;
+  bool has_text_document() const;
+  private:
+  bool _internal_has_text_document() const;
+  public:
+  void clear_text_document();
+  const ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier& text_document() const;
+  PROTOBUF_NODISCARD ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* release_text_document();
+  ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* mutable_text_document();
+  void set_allocated_text_document(::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* text_document);
+  private:
+  const ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier& _internal_text_document() const;
+  ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* _internal_mutable_text_document();
+  public:
+  void unsafe_arena_set_allocated_text_document(
+      ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* text_document);
+  ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* unsafe_arena_release_text_document();
+
+  // @@protoc_insertion_point(class_scope:io.deephaven.proto.backplane.script.grpc.GetDiagnosticRequest)
  private:
   class _Internal;
 
   template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
   typedef void InternalArenaConstructable_;
   typedef void DestructorSkippable_;
-  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod > business_periods_;
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor_LocalDate* date_;
+  ::PROTOBUF_NAMESPACE_ID::internal::HasBits<1> _has_bits_;
   mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr identifier_;
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr previous_result_id_;
+  ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* text_document_;
   friend struct ::TableStruct_deephaven_2fproto_2fconsole_2eproto;
 };
 // -------------------------------------------------------------------
 
-class FigureDescriptor_BusinessCalendarDescriptor_LocalDate final :
-    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BusinessCalendarDescriptor.LocalDate) */ {
+class GetPullDiagnosticResponse final :
+    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:io.deephaven.proto.backplane.script.grpc.GetPullDiagnosticResponse) */ {
  public:
-  inline FigureDescriptor_BusinessCalendarDescriptor_LocalDate() : FigureDescriptor_BusinessCalendarDescriptor_LocalDate(nullptr) {}
-  ~FigureDescriptor_BusinessCalendarDescriptor_LocalDate() override;
-  explicit PROTOBUF_CONSTEXPR FigureDescriptor_BusinessCalendarDescriptor_LocalDate(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
+  inline GetPullDiagnosticResponse() : GetPullDiagnosticResponse(nullptr) {}
+  ~GetPullDiagnosticResponse() override;
+  explicit PROTOBUF_CONSTEXPR GetPullDiagnosticResponse(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
 
-  FigureDescriptor_BusinessCalendarDescriptor_LocalDate(const FigureDescriptor_BusinessCalendarDescriptor_LocalDate& from);
-  FigureDescriptor_BusinessCalendarDescriptor_LocalDate(FigureDescriptor_BusinessCalendarDescriptor_LocalDate&& from) noexcept
-    : FigureDescriptor_BusinessCalendarDescriptor_LocalDate() {
+  GetPullDiagnosticResponse(const GetPullDiagnosticResponse& from);
+  GetPullDiagnosticResponse(GetPullDiagnosticResponse&& from) noexcept
+    : GetPullDiagnosticResponse() {
     *this = ::std::move(from);
   }
 
-  inline FigureDescriptor_BusinessCalendarDescriptor_LocalDate& operator=(const FigureDescriptor_BusinessCalendarDescriptor_LocalDate& from) {
+  inline GetPullDiagnosticResponse& operator=(const GetPullDiagnosticResponse& from) {
     CopyFrom(from);
     return *this;
   }
-  inline FigureDescriptor_BusinessCalendarDescriptor_LocalDate& operator=(FigureDescriptor_BusinessCalendarDescriptor_LocalDate&& from) noexcept {
+  inline GetPullDiagnosticResponse& operator=(GetPullDiagnosticResponse&& from) noexcept {
     if (this == &from) return *this;
     if (GetOwningArena() == from.GetOwningArena()
   #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
@@ -8256,20 +7885,20 @@ class FigureDescriptor_BusinessCalendarDescriptor_LocalDate final :
   static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
     return default_instance().GetMetadata().reflection;
   }
-  static const FigureDescriptor_BusinessCalendarDescriptor_LocalDate& default_instance() {
+  static const GetPullDiagnosticResponse& default_instance() {
     return *internal_default_instance();
   }
-  static inline const FigureDescriptor_BusinessCalendarDescriptor_LocalDate* internal_default_instance() {
-    return reinterpret_cast<const FigureDescriptor_BusinessCalendarDescriptor_LocalDate*>(
-               &_FigureDescriptor_BusinessCalendarDescriptor_LocalDate_default_instance_);
+  static inline const GetPullDiagnosticResponse* internal_default_instance() {
+    return reinterpret_cast<const GetPullDiagnosticResponse*>(
+               &_GetPullDiagnosticResponse_default_instance_);
   }
   static constexpr int kIndexInFileMessages =
-    39;
+    41;
 
-  friend void swap(FigureDescriptor_BusinessCalendarDescriptor_LocalDate& a, FigureDescriptor_BusinessCalendarDescriptor_LocalDate& b) {
+  friend void swap(GetPullDiagnosticResponse& a, GetPullDiagnosticResponse& b) {
     a.Swap(&b);
   }
-  inline void Swap(FigureDescriptor_BusinessCalendarDescriptor_LocalDate* other) {
+  inline void Swap(GetPullDiagnosticResponse* other) {
     if (other == this) return;
   #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
     if (GetOwningArena() != nullptr &&
@@ -8282,7 +7911,7 @@ class FigureDescriptor_BusinessCalendarDescriptor_LocalDate final :
       ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
     }
   }
-  void UnsafeArenaSwap(FigureDescriptor_BusinessCalendarDescriptor_LocalDate* other) {
+  void UnsafeArenaSwap(GetPullDiagnosticResponse* other) {
     if (other == this) return;
     GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
     InternalSwap(other);
@@ -8290,13 +7919,13 @@ class FigureDescriptor_BusinessCalendarDescriptor_LocalDate final :
 
   // implements Message ----------------------------------------------
 
-  FigureDescriptor_BusinessCalendarDescriptor_LocalDate* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
-    return CreateMaybeMessage<FigureDescriptor_BusinessCalendarDescriptor_LocalDate>(arena);
+  GetPullDiagnosticResponse* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
+    return CreateMaybeMessage<GetPullDiagnosticResponse>(arena);
   }
   using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
-  void CopyFrom(const FigureDescriptor_BusinessCalendarDescriptor_LocalDate& from);
+  void CopyFrom(const GetPullDiagnosticResponse& from);
   using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
-  void MergeFrom(const FigureDescriptor_BusinessCalendarDescriptor_LocalDate& from);
+  void MergeFrom(const GetPullDiagnosticResponse& from);
   private:
   static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
   public:
@@ -8313,15 +7942,15 @@ class FigureDescriptor_BusinessCalendarDescriptor_LocalDate final :
   void SharedCtor();
   void SharedDtor();
   void SetCachedSize(int size) const final;
-  void InternalSwap(FigureDescriptor_BusinessCalendarDescriptor_LocalDate* other);
+  void InternalSwap(GetPullDiagnosticResponse* other);
 
   private:
   friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
   static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
-    return "io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BusinessCalendarDescriptor.LocalDate";
+    return "io.deephaven.proto.backplane.script.grpc.GetPullDiagnosticResponse";
   }
   protected:
-  explicit FigureDescriptor_BusinessCalendarDescriptor_LocalDate(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+  explicit GetPullDiagnosticResponse(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                        bool is_message_owned = false);
   public:
 
@@ -8335,70 +7964,94 @@ class FigureDescriptor_BusinessCalendarDescriptor_LocalDate final :
   // accessors -------------------------------------------------------
 
   enum : int {
-    kYearFieldNumber = 1,
-    kMonthFieldNumber = 2,
-    kDayFieldNumber = 3,
+    kItemsFieldNumber = 3,
+    kKindFieldNumber = 1,
+    kResultIdFieldNumber = 2,
   };
-  // int32 year = 1;
-  void clear_year();
-  int32_t year() const;
-  void set_year(int32_t value);
+  // repeated .io.deephaven.proto.backplane.script.grpc.Diagnostic items = 3;
+  int items_size() const;
   private:
-  int32_t _internal_year() const;
-  void _internal_set_year(int32_t value);
+  int _internal_items_size() const;
+  public:
+  void clear_items();
+  ::io::deephaven::proto::backplane::script::grpc::Diagnostic* mutable_items(int index);
+  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::Diagnostic >*
+      mutable_items();
+  private:
+  const ::io::deephaven::proto::backplane::script::grpc::Diagnostic& _internal_items(int index) const;
+  ::io::deephaven::proto::backplane::script::grpc::Diagnostic* _internal_add_items();
   public:
+  const ::io::deephaven::proto::backplane::script::grpc::Diagnostic& items(int index) const;
+  ::io::deephaven::proto::backplane::script::grpc::Diagnostic* add_items();
+  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::Diagnostic >&
+      items() const;
 
-  // int32 month = 2;
-  void clear_month();
-  int32_t month() const;
-  void set_month(int32_t value);
+  // string kind = 1;
+  void clear_kind();
+  const std::string& kind() const;
+  template <typename ArgT0 = const std::string&, typename... ArgT>
+  void set_kind(ArgT0&& arg0, ArgT... args);
+  std::string* mutable_kind();
+  PROTOBUF_NODISCARD std::string* release_kind();
+  void set_allocated_kind(std::string* kind);
   private:
-  int32_t _internal_month() const;
-  void _internal_set_month(int32_t value);
+  const std::string& _internal_kind() const;
+  inline PROTOBUF_ALWAYS_INLINE void _internal_set_kind(const std::string& value);
+  std::string* _internal_mutable_kind();
   public:
 
-  // int32 day = 3;
-  void clear_day();
-  int32_t day() const;
-  void set_day(int32_t value);
+  // optional string result_id = 2;
+  bool has_result_id() const;
   private:
-  int32_t _internal_day() const;
-  void _internal_set_day(int32_t value);
+  bool _internal_has_result_id() const;
+  public:
+  void clear_result_id();
+  const std::string& result_id() const;
+  template <typename ArgT0 = const std::string&, typename... ArgT>
+  void set_result_id(ArgT0&& arg0, ArgT... args);
+  std::string* mutable_result_id();
+  PROTOBUF_NODISCARD std::string* release_result_id();
+  void set_allocated_result_id(std::string* result_id);
+  private:
+  const std::string& _internal_result_id() const;
+  inline PROTOBUF_ALWAYS_INLINE void _internal_set_result_id(const std::string& value);
+  std::string* _internal_mutable_result_id();
   public:
 
-  // @@protoc_insertion_point(class_scope:io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BusinessCalendarDescriptor.LocalDate)
+  // @@protoc_insertion_point(class_scope:io.deephaven.proto.backplane.script.grpc.GetPullDiagnosticResponse)
  private:
   class _Internal;
 
   template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
   typedef void InternalArenaConstructable_;
   typedef void DestructorSkippable_;
-  int32_t year_;
-  int32_t month_;
-  int32_t day_;
+  ::PROTOBUF_NAMESPACE_ID::internal::HasBits<1> _has_bits_;
   mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
+  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::Diagnostic > items_;
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr kind_;
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr result_id_;
   friend struct ::TableStruct_deephaven_2fproto_2fconsole_2eproto;
 };
 // -------------------------------------------------------------------
 
-class FigureDescriptor_BusinessCalendarDescriptor final :
-    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BusinessCalendarDescriptor) */ {
+class GetPublishDiagnosticResponse final :
+    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:io.deephaven.proto.backplane.script.grpc.GetPublishDiagnosticResponse) */ {
  public:
-  inline FigureDescriptor_BusinessCalendarDescriptor() : FigureDescriptor_BusinessCalendarDescriptor(nullptr) {}
-  ~FigureDescriptor_BusinessCalendarDescriptor() override;
-  explicit PROTOBUF_CONSTEXPR FigureDescriptor_BusinessCalendarDescriptor(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
+  inline GetPublishDiagnosticResponse() : GetPublishDiagnosticResponse(nullptr) {}
+  ~GetPublishDiagnosticResponse() override;
+  explicit PROTOBUF_CONSTEXPR GetPublishDiagnosticResponse(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
 
-  FigureDescriptor_BusinessCalendarDescriptor(const FigureDescriptor_BusinessCalendarDescriptor& from);
-  FigureDescriptor_BusinessCalendarDescriptor(FigureDescriptor_BusinessCalendarDescriptor&& from) noexcept
-    : FigureDescriptor_BusinessCalendarDescriptor() {
+  GetPublishDiagnosticResponse(const GetPublishDiagnosticResponse& from);
+  GetPublishDiagnosticResponse(GetPublishDiagnosticResponse&& from) noexcept
+    : GetPublishDiagnosticResponse() {
     *this = ::std::move(from);
   }
 
-  inline FigureDescriptor_BusinessCalendarDescriptor& operator=(const FigureDescriptor_BusinessCalendarDescriptor& from) {
+  inline GetPublishDiagnosticResponse& operator=(const GetPublishDiagnosticResponse& from) {
     CopyFrom(from);
     return *this;
   }
-  inline FigureDescriptor_BusinessCalendarDescriptor& operator=(FigureDescriptor_BusinessCalendarDescriptor&& from) noexcept {
+  inline GetPublishDiagnosticResponse& operator=(GetPublishDiagnosticResponse&& from) noexcept {
     if (this == &from) return *this;
     if (GetOwningArena() == from.GetOwningArena()
   #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
@@ -8421,20 +8074,20 @@ class FigureDescriptor_BusinessCalendarDescriptor final :
   static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
     return default_instance().GetMetadata().reflection;
   }
-  static const FigureDescriptor_BusinessCalendarDescriptor& default_instance() {
+  static const GetPublishDiagnosticResponse& default_instance() {
     return *internal_default_instance();
   }
-  static inline const FigureDescriptor_BusinessCalendarDescriptor* internal_default_instance() {
-    return reinterpret_cast<const FigureDescriptor_BusinessCalendarDescriptor*>(
-               &_FigureDescriptor_BusinessCalendarDescriptor_default_instance_);
+  static inline const GetPublishDiagnosticResponse* internal_default_instance() {
+    return reinterpret_cast<const GetPublishDiagnosticResponse*>(
+               &_GetPublishDiagnosticResponse_default_instance_);
   }
   static constexpr int kIndexInFileMessages =
-    40;
+    42;
 
-  friend void swap(FigureDescriptor_BusinessCalendarDescriptor& a, FigureDescriptor_BusinessCalendarDescriptor& b) {
+  friend void swap(GetPublishDiagnosticResponse& a, GetPublishDiagnosticResponse& b) {
     a.Swap(&b);
   }
-  inline void Swap(FigureDescriptor_BusinessCalendarDescriptor* other) {
+  inline void Swap(GetPublishDiagnosticResponse* other) {
     if (other == this) return;
   #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
     if (GetOwningArena() != nullptr &&
@@ -8447,7 +8100,7 @@ class FigureDescriptor_BusinessCalendarDescriptor final :
       ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
     }
   }
-  void UnsafeArenaSwap(FigureDescriptor_BusinessCalendarDescriptor* other) {
+  void UnsafeArenaSwap(GetPublishDiagnosticResponse* other) {
     if (other == this) return;
     GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
     InternalSwap(other);
@@ -8455,13 +8108,13 @@ class FigureDescriptor_BusinessCalendarDescriptor final :
 
   // implements Message ----------------------------------------------
 
-  FigureDescriptor_BusinessCalendarDescriptor* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
-    return CreateMaybeMessage<FigureDescriptor_BusinessCalendarDescriptor>(arena);
+  GetPublishDiagnosticResponse* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
+    return CreateMaybeMessage<GetPublishDiagnosticResponse>(arena);
   }
   using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
-  void CopyFrom(const FigureDescriptor_BusinessCalendarDescriptor& from);
+  void CopyFrom(const GetPublishDiagnosticResponse& from);
   using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
-  void MergeFrom(const FigureDescriptor_BusinessCalendarDescriptor& from);
+  void MergeFrom(const GetPublishDiagnosticResponse& from);
   private:
   static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
   public:
@@ -8478,15 +8131,15 @@ class FigureDescriptor_BusinessCalendarDescriptor final :
   void SharedCtor();
   void SharedDtor();
   void SetCachedSize(int size) const final;
-  void InternalSwap(FigureDescriptor_BusinessCalendarDescriptor* other);
+  void InternalSwap(GetPublishDiagnosticResponse* other);
 
   private:
   friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
   static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
-    return "io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BusinessCalendarDescriptor";
+    return "io.deephaven.proto.backplane.script.grpc.GetPublishDiagnosticResponse";
   }
   protected:
-  explicit FigureDescriptor_BusinessCalendarDescriptor(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+  explicit GetPublishDiagnosticResponse(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                        bool is_message_owned = false);
   public:
 
@@ -8497,176 +8150,92 @@ class FigureDescriptor_BusinessCalendarDescriptor final :
 
   // nested types ----------------------------------------------------
 
-  typedef FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod BusinessPeriod;
-  typedef FigureDescriptor_BusinessCalendarDescriptor_Holiday Holiday;
-  typedef FigureDescriptor_BusinessCalendarDescriptor_LocalDate LocalDate;
-
-  typedef FigureDescriptor_BusinessCalendarDescriptor_DayOfWeek DayOfWeek;
-  static constexpr DayOfWeek SUNDAY =
-    FigureDescriptor_BusinessCalendarDescriptor_DayOfWeek_SUNDAY;
-  static constexpr DayOfWeek MONDAY =
-    FigureDescriptor_BusinessCalendarDescriptor_DayOfWeek_MONDAY;
-  static constexpr DayOfWeek TUESDAY =
-    FigureDescriptor_BusinessCalendarDescriptor_DayOfWeek_TUESDAY;
-  static constexpr DayOfWeek WEDNESDAY =
-    FigureDescriptor_BusinessCalendarDescriptor_DayOfWeek_WEDNESDAY;
-  static constexpr DayOfWeek THURSDAY =
-    FigureDescriptor_BusinessCalendarDescriptor_DayOfWeek_THURSDAY;
-  static constexpr DayOfWeek FRIDAY =
-    FigureDescriptor_BusinessCalendarDescriptor_DayOfWeek_FRIDAY;
-  static constexpr DayOfWeek SATURDAY =
-    FigureDescriptor_BusinessCalendarDescriptor_DayOfWeek_SATURDAY;
-  static inline bool DayOfWeek_IsValid(int value) {
-    return FigureDescriptor_BusinessCalendarDescriptor_DayOfWeek_IsValid(value);
-  }
-  static constexpr DayOfWeek DayOfWeek_MIN =
-    FigureDescriptor_BusinessCalendarDescriptor_DayOfWeek_DayOfWeek_MIN;
-  static constexpr DayOfWeek DayOfWeek_MAX =
-    FigureDescriptor_BusinessCalendarDescriptor_DayOfWeek_DayOfWeek_MAX;
-  static constexpr int DayOfWeek_ARRAYSIZE =
-    FigureDescriptor_BusinessCalendarDescriptor_DayOfWeek_DayOfWeek_ARRAYSIZE;
-  static inline const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor*
-  DayOfWeek_descriptor() {
-    return FigureDescriptor_BusinessCalendarDescriptor_DayOfWeek_descriptor();
-  }
-  template<typename T>
-  static inline const std::string& DayOfWeek_Name(T enum_t_value) {
-    static_assert(::std::is_same<T, DayOfWeek>::value ||
-      ::std::is_integral<T>::value,
-      "Incorrect type passed to function DayOfWeek_Name.");
-    return FigureDescriptor_BusinessCalendarDescriptor_DayOfWeek_Name(enum_t_value);
-  }
-  static inline bool DayOfWeek_Parse(::PROTOBUF_NAMESPACE_ID::ConstStringParam name,
-      DayOfWeek* value) {
-    return FigureDescriptor_BusinessCalendarDescriptor_DayOfWeek_Parse(name, value);
-  }
-
   // accessors -------------------------------------------------------
 
   enum : int {
-    kBusinessDaysFieldNumber = 3,
-    kBusinessPeriodsFieldNumber = 4,
-    kHolidaysFieldNumber = 5,
-    kNameFieldNumber = 1,
-    kTimeZoneFieldNumber = 2,
+    kDiagnosticsFieldNumber = 3,
+    kUriFieldNumber = 1,
+    kVersionFieldNumber = 2,
   };
-  // repeated .io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BusinessCalendarDescriptor.DayOfWeek business_days = 3;
-  int business_days_size() const;
+  // repeated .io.deephaven.proto.backplane.script.grpc.Diagnostic diagnostics = 3;
+  int diagnostics_size() const;
   private:
-  int _internal_business_days_size() const;
+  int _internal_diagnostics_size() const;
   public:
-  void clear_business_days();
+  void clear_diagnostics();
+  ::io::deephaven::proto::backplane::script::grpc::Diagnostic* mutable_diagnostics(int index);
+  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::Diagnostic >*
+      mutable_diagnostics();
   private:
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor_DayOfWeek _internal_business_days(int index) const;
-  void _internal_add_business_days(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor_DayOfWeek value);
-  ::PROTOBUF_NAMESPACE_ID::RepeatedField<int>* _internal_mutable_business_days();
+  const ::io::deephaven::proto::backplane::script::grpc::Diagnostic& _internal_diagnostics(int index) const;
+  ::io::deephaven::proto::backplane::script::grpc::Diagnostic* _internal_add_diagnostics();
   public:
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor_DayOfWeek business_days(int index) const;
-  void set_business_days(int index, ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor_DayOfWeek value);
-  void add_business_days(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor_DayOfWeek value);
-  const ::PROTOBUF_NAMESPACE_ID::RepeatedField<int>& business_days() const;
-  ::PROTOBUF_NAMESPACE_ID::RepeatedField<int>* mutable_business_days();
+  const ::io::deephaven::proto::backplane::script::grpc::Diagnostic& diagnostics(int index) const;
+  ::io::deephaven::proto::backplane::script::grpc::Diagnostic* add_diagnostics();
+  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::Diagnostic >&
+      diagnostics() const;
 
-  // repeated .io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BusinessCalendarDescriptor.BusinessPeriod business_periods = 4;
-  int business_periods_size() const;
-  private:
-  int _internal_business_periods_size() const;
-  public:
-  void clear_business_periods();
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod* mutable_business_periods(int index);
-  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod >*
-      mutable_business_periods();
+  // string uri = 1;
+  void clear_uri();
+  const std::string& uri() const;
+  template <typename ArgT0 = const std::string&, typename... ArgT>
+  void set_uri(ArgT0&& arg0, ArgT... args);
+  std::string* mutable_uri();
+  PROTOBUF_NODISCARD std::string* release_uri();
+  void set_allocated_uri(std::string* uri);
   private:
-  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod& _internal_business_periods(int index) const;
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod* _internal_add_business_periods();
+  const std::string& _internal_uri() const;
+  inline PROTOBUF_ALWAYS_INLINE void _internal_set_uri(const std::string& value);
+  std::string* _internal_mutable_uri();
   public:
-  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod& business_periods(int index) const;
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod* add_business_periods();
-  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod >&
-      business_periods() const;
 
-  // repeated .io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BusinessCalendarDescriptor.Holiday holidays = 5;
-  int holidays_size() const;
+  // optional int32 version = 2;
+  bool has_version() const;
   private:
-  int _internal_holidays_size() const;
+  bool _internal_has_version() const;
   public:
-  void clear_holidays();
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor_Holiday* mutable_holidays(int index);
-  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor_Holiday >*
-      mutable_holidays();
+  void clear_version();
+  int32_t version() const;
+  void set_version(int32_t value);
   private:
-  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor_Holiday& _internal_holidays(int index) const;
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor_Holiday* _internal_add_holidays();
-  public:
-  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor_Holiday& holidays(int index) const;
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor_Holiday* add_holidays();
-  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor_Holiday >&
-      holidays() const;
-
-  // string name = 1;
-  void clear_name();
-  const std::string& name() const;
-  template <typename ArgT0 = const std::string&, typename... ArgT>
-  void set_name(ArgT0&& arg0, ArgT... args);
-  std::string* mutable_name();
-  PROTOBUF_NODISCARD std::string* release_name();
-  void set_allocated_name(std::string* name);
-  private:
-  const std::string& _internal_name() const;
-  inline PROTOBUF_ALWAYS_INLINE void _internal_set_name(const std::string& value);
-  std::string* _internal_mutable_name();
-  public:
-
-  // string time_zone = 2;
-  void clear_time_zone();
-  const std::string& time_zone() const;
-  template <typename ArgT0 = const std::string&, typename... ArgT>
-  void set_time_zone(ArgT0&& arg0, ArgT... args);
-  std::string* mutable_time_zone();
-  PROTOBUF_NODISCARD std::string* release_time_zone();
-  void set_allocated_time_zone(std::string* time_zone);
-  private:
-  const std::string& _internal_time_zone() const;
-  inline PROTOBUF_ALWAYS_INLINE void _internal_set_time_zone(const std::string& value);
-  std::string* _internal_mutable_time_zone();
+  int32_t _internal_version() const;
+  void _internal_set_version(int32_t value);
   public:
 
-  // @@protoc_insertion_point(class_scope:io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BusinessCalendarDescriptor)
+  // @@protoc_insertion_point(class_scope:io.deephaven.proto.backplane.script.grpc.GetPublishDiagnosticResponse)
  private:
   class _Internal;
 
   template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
   typedef void InternalArenaConstructable_;
   typedef void DestructorSkippable_;
-  ::PROTOBUF_NAMESPACE_ID::RepeatedField<int> business_days_;
-  mutable std::atomic<int> _business_days_cached_byte_size_;
-  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod > business_periods_;
-  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor_Holiday > holidays_;
-  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr name_;
-  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr time_zone_;
+  ::PROTOBUF_NAMESPACE_ID::internal::HasBits<1> _has_bits_;
   mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
+  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::Diagnostic > diagnostics_;
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr uri_;
+  int32_t version_;
   friend struct ::TableStruct_deephaven_2fproto_2fconsole_2eproto;
 };
 // -------------------------------------------------------------------
 
-class FigureDescriptor_MultiSeriesSourceDescriptor final :
-    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:io.deephaven.proto.backplane.script.grpc.FigureDescriptor.MultiSeriesSourceDescriptor) */ {
+class Diagnostic_CodeDescription final :
+    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:io.deephaven.proto.backplane.script.grpc.Diagnostic.CodeDescription) */ {
  public:
-  inline FigureDescriptor_MultiSeriesSourceDescriptor() : FigureDescriptor_MultiSeriesSourceDescriptor(nullptr) {}
-  ~FigureDescriptor_MultiSeriesSourceDescriptor() override;
-  explicit PROTOBUF_CONSTEXPR FigureDescriptor_MultiSeriesSourceDescriptor(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
+  inline Diagnostic_CodeDescription() : Diagnostic_CodeDescription(nullptr) {}
+  ~Diagnostic_CodeDescription() override;
+  explicit PROTOBUF_CONSTEXPR Diagnostic_CodeDescription(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
 
-  FigureDescriptor_MultiSeriesSourceDescriptor(const FigureDescriptor_MultiSeriesSourceDescriptor& from);
-  FigureDescriptor_MultiSeriesSourceDescriptor(FigureDescriptor_MultiSeriesSourceDescriptor&& from) noexcept
-    : FigureDescriptor_MultiSeriesSourceDescriptor() {
+  Diagnostic_CodeDescription(const Diagnostic_CodeDescription& from);
+  Diagnostic_CodeDescription(Diagnostic_CodeDescription&& from) noexcept
+    : Diagnostic_CodeDescription() {
     *this = ::std::move(from);
   }
 
-  inline FigureDescriptor_MultiSeriesSourceDescriptor& operator=(const FigureDescriptor_MultiSeriesSourceDescriptor& from) {
+  inline Diagnostic_CodeDescription& operator=(const Diagnostic_CodeDescription& from) {
     CopyFrom(from);
     return *this;
   }
-  inline FigureDescriptor_MultiSeriesSourceDescriptor& operator=(FigureDescriptor_MultiSeriesSourceDescriptor&& from) noexcept {
+  inline Diagnostic_CodeDescription& operator=(Diagnostic_CodeDescription&& from) noexcept {
     if (this == &from) return *this;
     if (GetOwningArena() == from.GetOwningArena()
   #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
@@ -8689,20 +8258,20 @@ class FigureDescriptor_MultiSeriesSourceDescriptor final :
   static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
     return default_instance().GetMetadata().reflection;
   }
-  static const FigureDescriptor_MultiSeriesSourceDescriptor& default_instance() {
+  static const Diagnostic_CodeDescription& default_instance() {
     return *internal_default_instance();
   }
-  static inline const FigureDescriptor_MultiSeriesSourceDescriptor* internal_default_instance() {
-    return reinterpret_cast<const FigureDescriptor_MultiSeriesSourceDescriptor*>(
-               &_FigureDescriptor_MultiSeriesSourceDescriptor_default_instance_);
+  static inline const Diagnostic_CodeDescription* internal_default_instance() {
+    return reinterpret_cast<const Diagnostic_CodeDescription*>(
+               &_Diagnostic_CodeDescription_default_instance_);
   }
   static constexpr int kIndexInFileMessages =
-    41;
+    43;
 
-  friend void swap(FigureDescriptor_MultiSeriesSourceDescriptor& a, FigureDescriptor_MultiSeriesSourceDescriptor& b) {
+  friend void swap(Diagnostic_CodeDescription& a, Diagnostic_CodeDescription& b) {
     a.Swap(&b);
   }
-  inline void Swap(FigureDescriptor_MultiSeriesSourceDescriptor* other) {
+  inline void Swap(Diagnostic_CodeDescription* other) {
     if (other == this) return;
   #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
     if (GetOwningArena() != nullptr &&
@@ -8715,7 +8284,7 @@ class FigureDescriptor_MultiSeriesSourceDescriptor final :
       ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
     }
   }
-  void UnsafeArenaSwap(FigureDescriptor_MultiSeriesSourceDescriptor* other) {
+  void UnsafeArenaSwap(Diagnostic_CodeDescription* other) {
     if (other == this) return;
     GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
     InternalSwap(other);
@@ -8723,13 +8292,13 @@ class FigureDescriptor_MultiSeriesSourceDescriptor final :
 
   // implements Message ----------------------------------------------
 
-  FigureDescriptor_MultiSeriesSourceDescriptor* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
-    return CreateMaybeMessage<FigureDescriptor_MultiSeriesSourceDescriptor>(arena);
+  Diagnostic_CodeDescription* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
+    return CreateMaybeMessage<Diagnostic_CodeDescription>(arena);
   }
   using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
-  void CopyFrom(const FigureDescriptor_MultiSeriesSourceDescriptor& from);
+  void CopyFrom(const Diagnostic_CodeDescription& from);
   using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
-  void MergeFrom(const FigureDescriptor_MultiSeriesSourceDescriptor& from);
+  void MergeFrom(const Diagnostic_CodeDescription& from);
   private:
   static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
   public:
@@ -8746,15 +8315,15 @@ class FigureDescriptor_MultiSeriesSourceDescriptor final :
   void SharedCtor();
   void SharedDtor();
   void SetCachedSize(int size) const final;
-  void InternalSwap(FigureDescriptor_MultiSeriesSourceDescriptor* other);
+  void InternalSwap(Diagnostic_CodeDescription* other);
 
   private:
   friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
   static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
-    return "io.deephaven.proto.backplane.script.grpc.FigureDescriptor.MultiSeriesSourceDescriptor";
+    return "io.deephaven.proto.backplane.script.grpc.Diagnostic.CodeDescription";
   }
   protected:
-  explicit FigureDescriptor_MultiSeriesSourceDescriptor(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+  explicit Diagnostic_CodeDescription(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                        bool is_message_owned = false);
   public:
 
@@ -8768,91 +8337,53 @@ class FigureDescriptor_MultiSeriesSourceDescriptor final :
   // accessors -------------------------------------------------------
 
   enum : int {
-    kAxisIdFieldNumber = 1,
-    kColumnNameFieldNumber = 4,
-    kTypeFieldNumber = 2,
-    kPartitionedTableIdFieldNumber = 3,
+    kHrefFieldNumber = 1,
   };
-  // string axis_id = 1;
-  void clear_axis_id();
-  const std::string& axis_id() const;
-  template <typename ArgT0 = const std::string&, typename... ArgT>
-  void set_axis_id(ArgT0&& arg0, ArgT... args);
-  std::string* mutable_axis_id();
-  PROTOBUF_NODISCARD std::string* release_axis_id();
-  void set_allocated_axis_id(std::string* axis_id);
-  private:
-  const std::string& _internal_axis_id() const;
-  inline PROTOBUF_ALWAYS_INLINE void _internal_set_axis_id(const std::string& value);
-  std::string* _internal_mutable_axis_id();
-  public:
-
-  // string column_name = 4;
-  void clear_column_name();
-  const std::string& column_name() const;
+  // string href = 1;
+  void clear_href();
+  const std::string& href() const;
   template <typename ArgT0 = const std::string&, typename... ArgT>
-  void set_column_name(ArgT0&& arg0, ArgT... args);
-  std::string* mutable_column_name();
-  PROTOBUF_NODISCARD std::string* release_column_name();
-  void set_allocated_column_name(std::string* column_name);
-  private:
-  const std::string& _internal_column_name() const;
-  inline PROTOBUF_ALWAYS_INLINE void _internal_set_column_name(const std::string& value);
-  std::string* _internal_mutable_column_name();
-  public:
-
-  // .io.deephaven.proto.backplane.script.grpc.FigureDescriptor.SourceType type = 2;
-  void clear_type();
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_SourceType type() const;
-  void set_type(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_SourceType value);
-  private:
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_SourceType _internal_type() const;
-  void _internal_set_type(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_SourceType value);
-  public:
-
-  // int32 partitioned_table_id = 3;
-  void clear_partitioned_table_id();
-  int32_t partitioned_table_id() const;
-  void set_partitioned_table_id(int32_t value);
+  void set_href(ArgT0&& arg0, ArgT... args);
+  std::string* mutable_href();
+  PROTOBUF_NODISCARD std::string* release_href();
+  void set_allocated_href(std::string* href);
   private:
-  int32_t _internal_partitioned_table_id() const;
-  void _internal_set_partitioned_table_id(int32_t value);
+  const std::string& _internal_href() const;
+  inline PROTOBUF_ALWAYS_INLINE void _internal_set_href(const std::string& value);
+  std::string* _internal_mutable_href();
   public:
 
-  // @@protoc_insertion_point(class_scope:io.deephaven.proto.backplane.script.grpc.FigureDescriptor.MultiSeriesSourceDescriptor)
+  // @@protoc_insertion_point(class_scope:io.deephaven.proto.backplane.script.grpc.Diagnostic.CodeDescription)
  private:
   class _Internal;
 
   template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
   typedef void InternalArenaConstructable_;
   typedef void DestructorSkippable_;
-  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr axis_id_;
-  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr column_name_;
-  int type_;
-  int32_t partitioned_table_id_;
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr href_;
   mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
   friend struct ::TableStruct_deephaven_2fproto_2fconsole_2eproto;
 };
 // -------------------------------------------------------------------
 
-class FigureDescriptor_SourceDescriptor final :
-    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:io.deephaven.proto.backplane.script.grpc.FigureDescriptor.SourceDescriptor) */ {
+class Diagnostic final :
+    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:io.deephaven.proto.backplane.script.grpc.Diagnostic) */ {
  public:
-  inline FigureDescriptor_SourceDescriptor() : FigureDescriptor_SourceDescriptor(nullptr) {}
-  ~FigureDescriptor_SourceDescriptor() override;
-  explicit PROTOBUF_CONSTEXPR FigureDescriptor_SourceDescriptor(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
+  inline Diagnostic() : Diagnostic(nullptr) {}
+  ~Diagnostic() override;
+  explicit PROTOBUF_CONSTEXPR Diagnostic(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
 
-  FigureDescriptor_SourceDescriptor(const FigureDescriptor_SourceDescriptor& from);
-  FigureDescriptor_SourceDescriptor(FigureDescriptor_SourceDescriptor&& from) noexcept
-    : FigureDescriptor_SourceDescriptor() {
+  Diagnostic(const Diagnostic& from);
+  Diagnostic(Diagnostic&& from) noexcept
+    : Diagnostic() {
     *this = ::std::move(from);
   }
 
-  inline FigureDescriptor_SourceDescriptor& operator=(const FigureDescriptor_SourceDescriptor& from) {
+  inline Diagnostic& operator=(const Diagnostic& from) {
     CopyFrom(from);
     return *this;
   }
-  inline FigureDescriptor_SourceDescriptor& operator=(FigureDescriptor_SourceDescriptor&& from) noexcept {
+  inline Diagnostic& operator=(Diagnostic&& from) noexcept {
     if (this == &from) return *this;
     if (GetOwningArena() == from.GetOwningArena()
   #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
@@ -8875,20 +8406,20 @@ class FigureDescriptor_SourceDescriptor final :
   static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
     return default_instance().GetMetadata().reflection;
   }
-  static const FigureDescriptor_SourceDescriptor& default_instance() {
+  static const Diagnostic& default_instance() {
     return *internal_default_instance();
   }
-  static inline const FigureDescriptor_SourceDescriptor* internal_default_instance() {
-    return reinterpret_cast<const FigureDescriptor_SourceDescriptor*>(
-               &_FigureDescriptor_SourceDescriptor_default_instance_);
+  static inline const Diagnostic* internal_default_instance() {
+    return reinterpret_cast<const Diagnostic*>(
+               &_Diagnostic_default_instance_);
   }
   static constexpr int kIndexInFileMessages =
-    42;
+    44;
 
-  friend void swap(FigureDescriptor_SourceDescriptor& a, FigureDescriptor_SourceDescriptor& b) {
+  friend void swap(Diagnostic& a, Diagnostic& b) {
     a.Swap(&b);
   }
-  inline void Swap(FigureDescriptor_SourceDescriptor* other) {
+  inline void Swap(Diagnostic* other) {
     if (other == this) return;
   #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
     if (GetOwningArena() != nullptr &&
@@ -8901,7 +8432,7 @@ class FigureDescriptor_SourceDescriptor final :
       ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
     }
   }
-  void UnsafeArenaSwap(FigureDescriptor_SourceDescriptor* other) {
+  void UnsafeArenaSwap(Diagnostic* other) {
     if (other == this) return;
     GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
     InternalSwap(other);
@@ -8909,13 +8440,13 @@ class FigureDescriptor_SourceDescriptor final :
 
   // implements Message ----------------------------------------------
 
-  FigureDescriptor_SourceDescriptor* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
-    return CreateMaybeMessage<FigureDescriptor_SourceDescriptor>(arena);
+  Diagnostic* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
+    return CreateMaybeMessage<Diagnostic>(arena);
   }
   using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
-  void CopyFrom(const FigureDescriptor_SourceDescriptor& from);
+  void CopyFrom(const Diagnostic& from);
   using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
-  void MergeFrom(const FigureDescriptor_SourceDescriptor& from);
+  void MergeFrom(const Diagnostic& from);
   private:
   static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
   public:
@@ -8932,15 +8463,15 @@ class FigureDescriptor_SourceDescriptor final :
   void SharedCtor();
   void SharedDtor();
   void SetCachedSize(int size) const final;
-  void InternalSwap(FigureDescriptor_SourceDescriptor* other);
+  void InternalSwap(Diagnostic* other);
 
   private:
   friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
   static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
-    return "io.deephaven.proto.backplane.script.grpc.FigureDescriptor.SourceDescriptor";
+    return "io.deephaven.proto.backplane.script.grpc.Diagnostic";
   }
   protected:
-  explicit FigureDescriptor_SourceDescriptor(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+  explicit Diagnostic(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                        bool is_message_owned = false);
   public:
 
@@ -8951,141 +8482,258 @@ class FigureDescriptor_SourceDescriptor final :
 
   // nested types ----------------------------------------------------
 
+  typedef Diagnostic_CodeDescription CodeDescription;
+
+  typedef Diagnostic_DiagnosticSeverity DiagnosticSeverity;
+  static constexpr DiagnosticSeverity NOT_SET_SEVERITY =
+    Diagnostic_DiagnosticSeverity_NOT_SET_SEVERITY;
+  static constexpr DiagnosticSeverity ERROR =
+    Diagnostic_DiagnosticSeverity_ERROR;
+  static constexpr DiagnosticSeverity WARNING =
+    Diagnostic_DiagnosticSeverity_WARNING;
+  static constexpr DiagnosticSeverity INFORMATION =
+    Diagnostic_DiagnosticSeverity_INFORMATION;
+  static constexpr DiagnosticSeverity HINT =
+    Diagnostic_DiagnosticSeverity_HINT;
+  static inline bool DiagnosticSeverity_IsValid(int value) {
+    return Diagnostic_DiagnosticSeverity_IsValid(value);
+  }
+  static constexpr DiagnosticSeverity DiagnosticSeverity_MIN =
+    Diagnostic_DiagnosticSeverity_DiagnosticSeverity_MIN;
+  static constexpr DiagnosticSeverity DiagnosticSeverity_MAX =
+    Diagnostic_DiagnosticSeverity_DiagnosticSeverity_MAX;
+  static constexpr int DiagnosticSeverity_ARRAYSIZE =
+    Diagnostic_DiagnosticSeverity_DiagnosticSeverity_ARRAYSIZE;
+  static inline const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor*
+  DiagnosticSeverity_descriptor() {
+    return Diagnostic_DiagnosticSeverity_descriptor();
+  }
+  template<typename T>
+  static inline const std::string& DiagnosticSeverity_Name(T enum_t_value) {
+    static_assert(::std::is_same<T, DiagnosticSeverity>::value ||
+      ::std::is_integral<T>::value,
+      "Incorrect type passed to function DiagnosticSeverity_Name.");
+    return Diagnostic_DiagnosticSeverity_Name(enum_t_value);
+  }
+  static inline bool DiagnosticSeverity_Parse(::PROTOBUF_NAMESPACE_ID::ConstStringParam name,
+      DiagnosticSeverity* value) {
+    return Diagnostic_DiagnosticSeverity_Parse(name, value);
+  }
+
+  typedef Diagnostic_DiagnosticTag DiagnosticTag;
+  static constexpr DiagnosticTag NOT_SET_TAG =
+    Diagnostic_DiagnosticTag_NOT_SET_TAG;
+  static constexpr DiagnosticTag UNNECESSARY =
+    Diagnostic_DiagnosticTag_UNNECESSARY;
+  static constexpr DiagnosticTag DEPRECATED =
+    Diagnostic_DiagnosticTag_DEPRECATED;
+  static inline bool DiagnosticTag_IsValid(int value) {
+    return Diagnostic_DiagnosticTag_IsValid(value);
+  }
+  static constexpr DiagnosticTag DiagnosticTag_MIN =
+    Diagnostic_DiagnosticTag_DiagnosticTag_MIN;
+  static constexpr DiagnosticTag DiagnosticTag_MAX =
+    Diagnostic_DiagnosticTag_DiagnosticTag_MAX;
+  static constexpr int DiagnosticTag_ARRAYSIZE =
+    Diagnostic_DiagnosticTag_DiagnosticTag_ARRAYSIZE;
+  static inline const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor*
+  DiagnosticTag_descriptor() {
+    return Diagnostic_DiagnosticTag_descriptor();
+  }
+  template<typename T>
+  static inline const std::string& DiagnosticTag_Name(T enum_t_value) {
+    static_assert(::std::is_same<T, DiagnosticTag>::value ||
+      ::std::is_integral<T>::value,
+      "Incorrect type passed to function DiagnosticTag_Name.");
+    return Diagnostic_DiagnosticTag_Name(enum_t_value);
+  }
+  static inline bool DiagnosticTag_Parse(::PROTOBUF_NAMESPACE_ID::ConstStringParam name,
+      DiagnosticTag* value) {
+    return Diagnostic_DiagnosticTag_Parse(name, value);
+  }
+
   // accessors -------------------------------------------------------
 
   enum : int {
-    kAxisIdFieldNumber = 1,
-    kColumnNameFieldNumber = 5,
-    kColumnTypeFieldNumber = 6,
-    kOneClickFieldNumber = 7,
-    kTypeFieldNumber = 2,
-    kTableIdFieldNumber = 3,
-    kPartitionedTableIdFieldNumber = 4,
+    kTagsFieldNumber = 7,
+    kCodeFieldNumber = 3,
+    kSourceFieldNumber = 5,
+    kMessageFieldNumber = 6,
+    kDataFieldNumber = 9,
+    kRangeFieldNumber = 1,
+    kCodeDescriptionFieldNumber = 4,
+    kSeverityFieldNumber = 2,
   };
-  // string axis_id = 1;
-  void clear_axis_id();
-  const std::string& axis_id() const;
-  template <typename ArgT0 = const std::string&, typename... ArgT>
-  void set_axis_id(ArgT0&& arg0, ArgT... args);
-  std::string* mutable_axis_id();
-  PROTOBUF_NODISCARD std::string* release_axis_id();
-  void set_allocated_axis_id(std::string* axis_id);
+  // repeated .io.deephaven.proto.backplane.script.grpc.Diagnostic.DiagnosticTag tags = 7;
+  int tags_size() const;
   private:
-  const std::string& _internal_axis_id() const;
-  inline PROTOBUF_ALWAYS_INLINE void _internal_set_axis_id(const std::string& value);
-  std::string* _internal_mutable_axis_id();
+  int _internal_tags_size() const;
   public:
-
-  // string column_name = 5;
-  void clear_column_name();
-  const std::string& column_name() const;
-  template <typename ArgT0 = const std::string&, typename... ArgT>
-  void set_column_name(ArgT0&& arg0, ArgT... args);
-  std::string* mutable_column_name();
-  PROTOBUF_NODISCARD std::string* release_column_name();
-  void set_allocated_column_name(std::string* column_name);
+  void clear_tags();
   private:
-  const std::string& _internal_column_name() const;
-  inline PROTOBUF_ALWAYS_INLINE void _internal_set_column_name(const std::string& value);
-  std::string* _internal_mutable_column_name();
+  ::io::deephaven::proto::backplane::script::grpc::Diagnostic_DiagnosticTag _internal_tags(int index) const;
+  void _internal_add_tags(::io::deephaven::proto::backplane::script::grpc::Diagnostic_DiagnosticTag value);
+  ::PROTOBUF_NAMESPACE_ID::RepeatedField<int>* _internal_mutable_tags();
   public:
+  ::io::deephaven::proto::backplane::script::grpc::Diagnostic_DiagnosticTag tags(int index) const;
+  void set_tags(int index, ::io::deephaven::proto::backplane::script::grpc::Diagnostic_DiagnosticTag value);
+  void add_tags(::io::deephaven::proto::backplane::script::grpc::Diagnostic_DiagnosticTag value);
+  const ::PROTOBUF_NAMESPACE_ID::RepeatedField<int>& tags() const;
+  ::PROTOBUF_NAMESPACE_ID::RepeatedField<int>* mutable_tags();
 
-  // string column_type = 6;
-  void clear_column_type();
-  const std::string& column_type() const;
+  // optional string code = 3;
+  bool has_code() const;
+  private:
+  bool _internal_has_code() const;
+  public:
+  void clear_code();
+  const std::string& code() const;
   template <typename ArgT0 = const std::string&, typename... ArgT>
-  void set_column_type(ArgT0&& arg0, ArgT... args);
-  std::string* mutable_column_type();
-  PROTOBUF_NODISCARD std::string* release_column_type();
-  void set_allocated_column_type(std::string* column_type);
+  void set_code(ArgT0&& arg0, ArgT... args);
+  std::string* mutable_code();
+  PROTOBUF_NODISCARD std::string* release_code();
+  void set_allocated_code(std::string* code);
   private:
-  const std::string& _internal_column_type() const;
-  inline PROTOBUF_ALWAYS_INLINE void _internal_set_column_type(const std::string& value);
-  std::string* _internal_mutable_column_type();
+  const std::string& _internal_code() const;
+  inline PROTOBUF_ALWAYS_INLINE void _internal_set_code(const std::string& value);
+  std::string* _internal_mutable_code();
   public:
 
-  // .io.deephaven.proto.backplane.script.grpc.FigureDescriptor.OneClickDescriptor one_click = 7;
-  bool has_one_click() const;
+  // optional string source = 5;
+  bool has_source() const;
   private:
-  bool _internal_has_one_click() const;
+  bool _internal_has_source() const;
   public:
-  void clear_one_click();
-  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_OneClickDescriptor& one_click() const;
-  PROTOBUF_NODISCARD ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_OneClickDescriptor* release_one_click();
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_OneClickDescriptor* mutable_one_click();
-  void set_allocated_one_click(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_OneClickDescriptor* one_click);
+  void clear_source();
+  const std::string& source() const;
+  template <typename ArgT0 = const std::string&, typename... ArgT>
+  void set_source(ArgT0&& arg0, ArgT... args);
+  std::string* mutable_source();
+  PROTOBUF_NODISCARD std::string* release_source();
+  void set_allocated_source(std::string* source);
   private:
-  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_OneClickDescriptor& _internal_one_click() const;
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_OneClickDescriptor* _internal_mutable_one_click();
+  const std::string& _internal_source() const;
+  inline PROTOBUF_ALWAYS_INLINE void _internal_set_source(const std::string& value);
+  std::string* _internal_mutable_source();
   public:
-  void unsafe_arena_set_allocated_one_click(
-      ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_OneClickDescriptor* one_click);
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_OneClickDescriptor* unsafe_arena_release_one_click();
 
-  // .io.deephaven.proto.backplane.script.grpc.FigureDescriptor.SourceType type = 2;
-  void clear_type();
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_SourceType type() const;
-  void set_type(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_SourceType value);
+  // string message = 6;
+  void clear_message();
+  const std::string& message() const;
+  template <typename ArgT0 = const std::string&, typename... ArgT>
+  void set_message(ArgT0&& arg0, ArgT... args);
+  std::string* mutable_message();
+  PROTOBUF_NODISCARD std::string* release_message();
+  void set_allocated_message(std::string* message);
   private:
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_SourceType _internal_type() const;
-  void _internal_set_type(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_SourceType value);
+  const std::string& _internal_message() const;
+  inline PROTOBUF_ALWAYS_INLINE void _internal_set_message(const std::string& value);
+  std::string* _internal_mutable_message();
   public:
 
-  // int32 table_id = 3;
-  void clear_table_id();
-  int32_t table_id() const;
-  void set_table_id(int32_t value);
+  // optional bytes data = 9;
+  bool has_data() const;
   private:
-  int32_t _internal_table_id() const;
-  void _internal_set_table_id(int32_t value);
+  bool _internal_has_data() const;
   public:
-
-  // int32 partitioned_table_id = 4;
-  void clear_partitioned_table_id();
-  int32_t partitioned_table_id() const;
-  void set_partitioned_table_id(int32_t value);
+  void clear_data();
+  const std::string& data() const;
+  template <typename ArgT0 = const std::string&, typename... ArgT>
+  void set_data(ArgT0&& arg0, ArgT... args);
+  std::string* mutable_data();
+  PROTOBUF_NODISCARD std::string* release_data();
+  void set_allocated_data(std::string* data);
   private:
-  int32_t _internal_partitioned_table_id() const;
-  void _internal_set_partitioned_table_id(int32_t value);
+  const std::string& _internal_data() const;
+  inline PROTOBUF_ALWAYS_INLINE void _internal_set_data(const std::string& value);
+  std::string* _internal_mutable_data();
   public:
 
-  // @@protoc_insertion_point(class_scope:io.deephaven.proto.backplane.script.grpc.FigureDescriptor.SourceDescriptor)
+  // .io.deephaven.proto.backplane.script.grpc.DocumentRange range = 1;
+  bool has_range() const;
+  private:
+  bool _internal_has_range() const;
+  public:
+  void clear_range();
+  const ::io::deephaven::proto::backplane::script::grpc::DocumentRange& range() const;
+  PROTOBUF_NODISCARD ::io::deephaven::proto::backplane::script::grpc::DocumentRange* release_range();
+  ::io::deephaven::proto::backplane::script::grpc::DocumentRange* mutable_range();
+  void set_allocated_range(::io::deephaven::proto::backplane::script::grpc::DocumentRange* range);
+  private:
+  const ::io::deephaven::proto::backplane::script::grpc::DocumentRange& _internal_range() const;
+  ::io::deephaven::proto::backplane::script::grpc::DocumentRange* _internal_mutable_range();
+  public:
+  void unsafe_arena_set_allocated_range(
+      ::io::deephaven::proto::backplane::script::grpc::DocumentRange* range);
+  ::io::deephaven::proto::backplane::script::grpc::DocumentRange* unsafe_arena_release_range();
+
+  // optional .io.deephaven.proto.backplane.script.grpc.Diagnostic.CodeDescription code_description = 4;
+  bool has_code_description() const;
+  private:
+  bool _internal_has_code_description() const;
+  public:
+  void clear_code_description();
+  const ::io::deephaven::proto::backplane::script::grpc::Diagnostic_CodeDescription& code_description() const;
+  PROTOBUF_NODISCARD ::io::deephaven::proto::backplane::script::grpc::Diagnostic_CodeDescription* release_code_description();
+  ::io::deephaven::proto::backplane::script::grpc::Diagnostic_CodeDescription* mutable_code_description();
+  void set_allocated_code_description(::io::deephaven::proto::backplane::script::grpc::Diagnostic_CodeDescription* code_description);
+  private:
+  const ::io::deephaven::proto::backplane::script::grpc::Diagnostic_CodeDescription& _internal_code_description() const;
+  ::io::deephaven::proto::backplane::script::grpc::Diagnostic_CodeDescription* _internal_mutable_code_description();
+  public:
+  void unsafe_arena_set_allocated_code_description(
+      ::io::deephaven::proto::backplane::script::grpc::Diagnostic_CodeDescription* code_description);
+  ::io::deephaven::proto::backplane::script::grpc::Diagnostic_CodeDescription* unsafe_arena_release_code_description();
+
+  // .io.deephaven.proto.backplane.script.grpc.Diagnostic.DiagnosticSeverity severity = 2;
+  void clear_severity();
+  ::io::deephaven::proto::backplane::script::grpc::Diagnostic_DiagnosticSeverity severity() const;
+  void set_severity(::io::deephaven::proto::backplane::script::grpc::Diagnostic_DiagnosticSeverity value);
+  private:
+  ::io::deephaven::proto::backplane::script::grpc::Diagnostic_DiagnosticSeverity _internal_severity() const;
+  void _internal_set_severity(::io::deephaven::proto::backplane::script::grpc::Diagnostic_DiagnosticSeverity value);
+  public:
+
+  // @@protoc_insertion_point(class_scope:io.deephaven.proto.backplane.script.grpc.Diagnostic)
  private:
   class _Internal;
 
   template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
   typedef void InternalArenaConstructable_;
   typedef void DestructorSkippable_;
-  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr axis_id_;
-  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr column_name_;
-  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr column_type_;
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_OneClickDescriptor* one_click_;
-  int type_;
-  int32_t table_id_;
-  int32_t partitioned_table_id_;
+  ::PROTOBUF_NAMESPACE_ID::internal::HasBits<1> _has_bits_;
   mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
+  ::PROTOBUF_NAMESPACE_ID::RepeatedField<int> tags_;
+  mutable std::atomic<int> _tags_cached_byte_size_;
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr code_;
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr source_;
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr message_;
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr data_;
+  ::io::deephaven::proto::backplane::script::grpc::DocumentRange* range_;
+  ::io::deephaven::proto::backplane::script::grpc::Diagnostic_CodeDescription* code_description_;
+  int severity_;
   friend struct ::TableStruct_deephaven_2fproto_2fconsole_2eproto;
 };
 // -------------------------------------------------------------------
 
-class FigureDescriptor_OneClickDescriptor final :
-    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:io.deephaven.proto.backplane.script.grpc.FigureDescriptor.OneClickDescriptor) */ {
+class FigureDescriptor_ChartDescriptor final :
+    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:io.deephaven.proto.backplane.script.grpc.FigureDescriptor.ChartDescriptor) */ {
  public:
-  inline FigureDescriptor_OneClickDescriptor() : FigureDescriptor_OneClickDescriptor(nullptr) {}
-  ~FigureDescriptor_OneClickDescriptor() override;
-  explicit PROTOBUF_CONSTEXPR FigureDescriptor_OneClickDescriptor(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
+  inline FigureDescriptor_ChartDescriptor() : FigureDescriptor_ChartDescriptor(nullptr) {}
+  ~FigureDescriptor_ChartDescriptor() override;
+  explicit PROTOBUF_CONSTEXPR FigureDescriptor_ChartDescriptor(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
 
-  FigureDescriptor_OneClickDescriptor(const FigureDescriptor_OneClickDescriptor& from);
-  FigureDescriptor_OneClickDescriptor(FigureDescriptor_OneClickDescriptor&& from) noexcept
-    : FigureDescriptor_OneClickDescriptor() {
+  FigureDescriptor_ChartDescriptor(const FigureDescriptor_ChartDescriptor& from);
+  FigureDescriptor_ChartDescriptor(FigureDescriptor_ChartDescriptor&& from) noexcept
+    : FigureDescriptor_ChartDescriptor() {
     *this = ::std::move(from);
   }
 
-  inline FigureDescriptor_OneClickDescriptor& operator=(const FigureDescriptor_OneClickDescriptor& from) {
+  inline FigureDescriptor_ChartDescriptor& operator=(const FigureDescriptor_ChartDescriptor& from) {
     CopyFrom(from);
     return *this;
   }
-  inline FigureDescriptor_OneClickDescriptor& operator=(FigureDescriptor_OneClickDescriptor&& from) noexcept {
+  inline FigureDescriptor_ChartDescriptor& operator=(FigureDescriptor_ChartDescriptor&& from) noexcept {
     if (this == &from) return *this;
     if (GetOwningArena() == from.GetOwningArena()
   #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
@@ -9108,20 +8756,20 @@ class FigureDescriptor_OneClickDescriptor final :
   static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
     return default_instance().GetMetadata().reflection;
   }
-  static const FigureDescriptor_OneClickDescriptor& default_instance() {
+  static const FigureDescriptor_ChartDescriptor& default_instance() {
     return *internal_default_instance();
   }
-  static inline const FigureDescriptor_OneClickDescriptor* internal_default_instance() {
-    return reinterpret_cast<const FigureDescriptor_OneClickDescriptor*>(
-               &_FigureDescriptor_OneClickDescriptor_default_instance_);
+  static inline const FigureDescriptor_ChartDescriptor* internal_default_instance() {
+    return reinterpret_cast<const FigureDescriptor_ChartDescriptor*>(
+               &_FigureDescriptor_ChartDescriptor_default_instance_);
   }
   static constexpr int kIndexInFileMessages =
-    43;
+    45;
 
-  friend void swap(FigureDescriptor_OneClickDescriptor& a, FigureDescriptor_OneClickDescriptor& b) {
+  friend void swap(FigureDescriptor_ChartDescriptor& a, FigureDescriptor_ChartDescriptor& b) {
     a.Swap(&b);
   }
-  inline void Swap(FigureDescriptor_OneClickDescriptor* other) {
+  inline void Swap(FigureDescriptor_ChartDescriptor* other) {
     if (other == this) return;
   #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
     if (GetOwningArena() != nullptr &&
@@ -9134,7 +8782,7 @@ class FigureDescriptor_OneClickDescriptor final :
       ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
     }
   }
-  void UnsafeArenaSwap(FigureDescriptor_OneClickDescriptor* other) {
+  void UnsafeArenaSwap(FigureDescriptor_ChartDescriptor* other) {
     if (other == this) return;
     GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
     InternalSwap(other);
@@ -9142,13 +8790,13 @@ class FigureDescriptor_OneClickDescriptor final :
 
   // implements Message ----------------------------------------------
 
-  FigureDescriptor_OneClickDescriptor* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
-    return CreateMaybeMessage<FigureDescriptor_OneClickDescriptor>(arena);
+  FigureDescriptor_ChartDescriptor* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
+    return CreateMaybeMessage<FigureDescriptor_ChartDescriptor>(arena);
   }
   using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
-  void CopyFrom(const FigureDescriptor_OneClickDescriptor& from);
+  void CopyFrom(const FigureDescriptor_ChartDescriptor& from);
   using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
-  void MergeFrom(const FigureDescriptor_OneClickDescriptor& from);
+  void MergeFrom(const FigureDescriptor_ChartDescriptor& from);
   private:
   static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
   public:
@@ -9165,15 +8813,15 @@ class FigureDescriptor_OneClickDescriptor final :
   void SharedCtor();
   void SharedDtor();
   void SetCachedSize(int size) const final;
-  void InternalSwap(FigureDescriptor_OneClickDescriptor* other);
+  void InternalSwap(FigureDescriptor_ChartDescriptor* other);
 
   private:
   friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
   static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
-    return "io.deephaven.proto.backplane.script.grpc.FigureDescriptor.OneClickDescriptor";
+    return "io.deephaven.proto.backplane.script.grpc.FigureDescriptor.ChartDescriptor";
   }
   protected:
-  explicit FigureDescriptor_OneClickDescriptor(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+  explicit FigureDescriptor_ChartDescriptor(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                        bool is_message_owned = false);
   public:
 
@@ -9184,103 +8832,302 @@ class FigureDescriptor_OneClickDescriptor final :
 
   // nested types ----------------------------------------------------
 
+  typedef FigureDescriptor_ChartDescriptor_ChartType ChartType;
+  static constexpr ChartType XY =
+    FigureDescriptor_ChartDescriptor_ChartType_XY;
+  static constexpr ChartType PIE =
+    FigureDescriptor_ChartDescriptor_ChartType_PIE;
+  PROTOBUF_DEPRECATED_ENUM static constexpr ChartType OHLC =
+    FigureDescriptor_ChartDescriptor_ChartType_OHLC;
+  static constexpr ChartType CATEGORY =
+    FigureDescriptor_ChartDescriptor_ChartType_CATEGORY;
+  static constexpr ChartType XYZ =
+    FigureDescriptor_ChartDescriptor_ChartType_XYZ;
+  static constexpr ChartType CATEGORY_3D =
+    FigureDescriptor_ChartDescriptor_ChartType_CATEGORY_3D;
+  static constexpr ChartType TREEMAP =
+    FigureDescriptor_ChartDescriptor_ChartType_TREEMAP;
+  static inline bool ChartType_IsValid(int value) {
+    return FigureDescriptor_ChartDescriptor_ChartType_IsValid(value);
+  }
+  static constexpr ChartType ChartType_MIN =
+    FigureDescriptor_ChartDescriptor_ChartType_ChartType_MIN;
+  static constexpr ChartType ChartType_MAX =
+    FigureDescriptor_ChartDescriptor_ChartType_ChartType_MAX;
+  static constexpr int ChartType_ARRAYSIZE =
+    FigureDescriptor_ChartDescriptor_ChartType_ChartType_ARRAYSIZE;
+  static inline const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor*
+  ChartType_descriptor() {
+    return FigureDescriptor_ChartDescriptor_ChartType_descriptor();
+  }
+  template<typename T>
+  static inline const std::string& ChartType_Name(T enum_t_value) {
+    static_assert(::std::is_same<T, ChartType>::value ||
+      ::std::is_integral<T>::value,
+      "Incorrect type passed to function ChartType_Name.");
+    return FigureDescriptor_ChartDescriptor_ChartType_Name(enum_t_value);
+  }
+  static inline bool ChartType_Parse(::PROTOBUF_NAMESPACE_ID::ConstStringParam name,
+      ChartType* value) {
+    return FigureDescriptor_ChartDescriptor_ChartType_Parse(name, value);
+  }
+
   // accessors -------------------------------------------------------
 
   enum : int {
-    kColumnsFieldNumber = 1,
-    kColumnTypesFieldNumber = 2,
-    kRequireAllFiltersToDisplayFieldNumber = 3,
+    kSeriesFieldNumber = 3,
+    kMultiSeriesFieldNumber = 4,
+    kAxesFieldNumber = 5,
+    kTitleFieldNumber = 7,
+    kTitleFontFieldNumber = 8,
+    kTitleColorFieldNumber = 9,
+    kLegendFontFieldNumber = 11,
+    kLegendColorFieldNumber = 12,
+    kColspanFieldNumber = 1,
+    kRowspanFieldNumber = 2,
+    kChartTypeFieldNumber = 6,
+    kShowLegendFieldNumber = 10,
+    kIs3DFieldNumber = 13,
+    kColumnFieldNumber = 14,
+    kRowFieldNumber = 15,
   };
-  // repeated string columns = 1;
-  int columns_size() const;
+  // repeated .io.deephaven.proto.backplane.script.grpc.FigureDescriptor.SeriesDescriptor series = 3;
+  int series_size() const;
   private:
-  int _internal_columns_size() const;
+  int _internal_series_size() const;
   public:
-  void clear_columns();
-  const std::string& columns(int index) const;
-  std::string* mutable_columns(int index);
-  void set_columns(int index, const std::string& value);
-  void set_columns(int index, std::string&& value);
-  void set_columns(int index, const char* value);
-  void set_columns(int index, const char* value, size_t size);
-  std::string* add_columns();
-  void add_columns(const std::string& value);
-  void add_columns(std::string&& value);
-  void add_columns(const char* value);
-  void add_columns(const char* value, size_t size);
-  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>& columns() const;
-  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>* mutable_columns();
+  void clear_series();
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_SeriesDescriptor* mutable_series(int index);
+  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_SeriesDescriptor >*
+      mutable_series();
   private:
-  const std::string& _internal_columns(int index) const;
-  std::string* _internal_add_columns();
+  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_SeriesDescriptor& _internal_series(int index) const;
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_SeriesDescriptor* _internal_add_series();
   public:
+  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_SeriesDescriptor& series(int index) const;
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_SeriesDescriptor* add_series();
+  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_SeriesDescriptor >&
+      series() const;
 
-  // repeated string column_types = 2;
-  int column_types_size() const;
+  // repeated .io.deephaven.proto.backplane.script.grpc.FigureDescriptor.MultiSeriesDescriptor multi_series = 4;
+  int multi_series_size() const;
   private:
-  int _internal_column_types_size() const;
+  int _internal_multi_series_size() const;
   public:
-  void clear_column_types();
-  const std::string& column_types(int index) const;
-  std::string* mutable_column_types(int index);
-  void set_column_types(int index, const std::string& value);
-  void set_column_types(int index, std::string&& value);
-  void set_column_types(int index, const char* value);
-  void set_column_types(int index, const char* value, size_t size);
-  std::string* add_column_types();
-  void add_column_types(const std::string& value);
-  void add_column_types(std::string&& value);
-  void add_column_types(const char* value);
-  void add_column_types(const char* value, size_t size);
-  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>& column_types() const;
-  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>* mutable_column_types();
+  void clear_multi_series();
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_MultiSeriesDescriptor* mutable_multi_series(int index);
+  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_MultiSeriesDescriptor >*
+      mutable_multi_series();
   private:
-  const std::string& _internal_column_types(int index) const;
-  std::string* _internal_add_column_types();
+  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_MultiSeriesDescriptor& _internal_multi_series(int index) const;
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_MultiSeriesDescriptor* _internal_add_multi_series();
   public:
+  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_MultiSeriesDescriptor& multi_series(int index) const;
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_MultiSeriesDescriptor* add_multi_series();
+  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_MultiSeriesDescriptor >&
+      multi_series() const;
 
-  // bool require_all_filters_to_display = 3;
-  void clear_require_all_filters_to_display();
-  bool require_all_filters_to_display() const;
-  void set_require_all_filters_to_display(bool value);
+  // repeated .io.deephaven.proto.backplane.script.grpc.FigureDescriptor.AxisDescriptor axes = 5;
+  int axes_size() const;
   private:
-  bool _internal_require_all_filters_to_display() const;
-  void _internal_set_require_all_filters_to_display(bool value);
+  int _internal_axes_size() const;
+  public:
+  void clear_axes();
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_AxisDescriptor* mutable_axes(int index);
+  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_AxisDescriptor >*
+      mutable_axes();
+  private:
+  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_AxisDescriptor& _internal_axes(int index) const;
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_AxisDescriptor* _internal_add_axes();
   public:
+  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_AxisDescriptor& axes(int index) const;
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_AxisDescriptor* add_axes();
+  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_AxisDescriptor >&
+      axes() const;
 
-  // @@protoc_insertion_point(class_scope:io.deephaven.proto.backplane.script.grpc.FigureDescriptor.OneClickDescriptor)
- private:
-  class _Internal;
+  // optional string title = 7;
+  bool has_title() const;
+  private:
+  bool _internal_has_title() const;
+  public:
+  void clear_title();
+  const std::string& title() const;
+  template <typename ArgT0 = const std::string&, typename... ArgT>
+  void set_title(ArgT0&& arg0, ArgT... args);
+  std::string* mutable_title();
+  PROTOBUF_NODISCARD std::string* release_title();
+  void set_allocated_title(std::string* title);
+  private:
+  const std::string& _internal_title() const;
+  inline PROTOBUF_ALWAYS_INLINE void _internal_set_title(const std::string& value);
+  std::string* _internal_mutable_title();
+  public:
 
-  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
-  typedef void InternalArenaConstructable_;
-  typedef void DestructorSkippable_;
-  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string> columns_;
-  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string> column_types_;
-  bool require_all_filters_to_display_;
-  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
+  // string title_font = 8;
+  void clear_title_font();
+  const std::string& title_font() const;
+  template <typename ArgT0 = const std::string&, typename... ArgT>
+  void set_title_font(ArgT0&& arg0, ArgT... args);
+  std::string* mutable_title_font();
+  PROTOBUF_NODISCARD std::string* release_title_font();
+  void set_allocated_title_font(std::string* title_font);
+  private:
+  const std::string& _internal_title_font() const;
+  inline PROTOBUF_ALWAYS_INLINE void _internal_set_title_font(const std::string& value);
+  std::string* _internal_mutable_title_font();
+  public:
+
+  // string title_color = 9;
+  void clear_title_color();
+  const std::string& title_color() const;
+  template <typename ArgT0 = const std::string&, typename... ArgT>
+  void set_title_color(ArgT0&& arg0, ArgT... args);
+  std::string* mutable_title_color();
+  PROTOBUF_NODISCARD std::string* release_title_color();
+  void set_allocated_title_color(std::string* title_color);
+  private:
+  const std::string& _internal_title_color() const;
+  inline PROTOBUF_ALWAYS_INLINE void _internal_set_title_color(const std::string& value);
+  std::string* _internal_mutable_title_color();
+  public:
+
+  // string legend_font = 11;
+  void clear_legend_font();
+  const std::string& legend_font() const;
+  template <typename ArgT0 = const std::string&, typename... ArgT>
+  void set_legend_font(ArgT0&& arg0, ArgT... args);
+  std::string* mutable_legend_font();
+  PROTOBUF_NODISCARD std::string* release_legend_font();
+  void set_allocated_legend_font(std::string* legend_font);
+  private:
+  const std::string& _internal_legend_font() const;
+  inline PROTOBUF_ALWAYS_INLINE void _internal_set_legend_font(const std::string& value);
+  std::string* _internal_mutable_legend_font();
+  public:
+
+  // string legend_color = 12;
+  void clear_legend_color();
+  const std::string& legend_color() const;
+  template <typename ArgT0 = const std::string&, typename... ArgT>
+  void set_legend_color(ArgT0&& arg0, ArgT... args);
+  std::string* mutable_legend_color();
+  PROTOBUF_NODISCARD std::string* release_legend_color();
+  void set_allocated_legend_color(std::string* legend_color);
+  private:
+  const std::string& _internal_legend_color() const;
+  inline PROTOBUF_ALWAYS_INLINE void _internal_set_legend_color(const std::string& value);
+  std::string* _internal_mutable_legend_color();
+  public:
+
+  // int32 colspan = 1;
+  void clear_colspan();
+  int32_t colspan() const;
+  void set_colspan(int32_t value);
+  private:
+  int32_t _internal_colspan() const;
+  void _internal_set_colspan(int32_t value);
+  public:
+
+  // int32 rowspan = 2;
+  void clear_rowspan();
+  int32_t rowspan() const;
+  void set_rowspan(int32_t value);
+  private:
+  int32_t _internal_rowspan() const;
+  void _internal_set_rowspan(int32_t value);
+  public:
+
+  // .io.deephaven.proto.backplane.script.grpc.FigureDescriptor.ChartDescriptor.ChartType chart_type = 6;
+  void clear_chart_type();
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_ChartDescriptor_ChartType chart_type() const;
+  void set_chart_type(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_ChartDescriptor_ChartType value);
+  private:
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_ChartDescriptor_ChartType _internal_chart_type() const;
+  void _internal_set_chart_type(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_ChartDescriptor_ChartType value);
+  public:
+
+  // bool show_legend = 10;
+  void clear_show_legend();
+  bool show_legend() const;
+  void set_show_legend(bool value);
+  private:
+  bool _internal_show_legend() const;
+  void _internal_set_show_legend(bool value);
+  public:
+
+  // bool is3d = 13;
+  void clear_is3d();
+  bool is3d() const;
+  void set_is3d(bool value);
+  private:
+  bool _internal_is3d() const;
+  void _internal_set_is3d(bool value);
+  public:
+
+  // int32 column = 14;
+  void clear_column();
+  int32_t column() const;
+  void set_column(int32_t value);
+  private:
+  int32_t _internal_column() const;
+  void _internal_set_column(int32_t value);
+  public:
+
+  // int32 row = 15;
+  void clear_row();
+  int32_t row() const;
+  void set_row(int32_t value);
+  private:
+  int32_t _internal_row() const;
+  void _internal_set_row(int32_t value);
+  public:
+
+  // @@protoc_insertion_point(class_scope:io.deephaven.proto.backplane.script.grpc.FigureDescriptor.ChartDescriptor)
+ private:
+  class _Internal;
+
+  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
+  typedef void InternalArenaConstructable_;
+  typedef void DestructorSkippable_;
+  ::PROTOBUF_NAMESPACE_ID::internal::HasBits<1> _has_bits_;
+  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
+  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_SeriesDescriptor > series_;
+  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_MultiSeriesDescriptor > multi_series_;
+  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_AxisDescriptor > axes_;
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr title_;
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr title_font_;
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr title_color_;
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr legend_font_;
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr legend_color_;
+  int32_t colspan_;
+  int32_t rowspan_;
+  int chart_type_;
+  bool show_legend_;
+  bool is3d_;
+  int32_t column_;
+  int32_t row_;
   friend struct ::TableStruct_deephaven_2fproto_2fconsole_2eproto;
 };
 // -------------------------------------------------------------------
 
-class FigureDescriptor final :
-    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:io.deephaven.proto.backplane.script.grpc.FigureDescriptor) */ {
+class FigureDescriptor_SeriesDescriptor final :
+    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:io.deephaven.proto.backplane.script.grpc.FigureDescriptor.SeriesDescriptor) */ {
  public:
-  inline FigureDescriptor() : FigureDescriptor(nullptr) {}
-  ~FigureDescriptor() override;
-  explicit PROTOBUF_CONSTEXPR FigureDescriptor(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
+  inline FigureDescriptor_SeriesDescriptor() : FigureDescriptor_SeriesDescriptor(nullptr) {}
+  ~FigureDescriptor_SeriesDescriptor() override;
+  explicit PROTOBUF_CONSTEXPR FigureDescriptor_SeriesDescriptor(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
 
-  FigureDescriptor(const FigureDescriptor& from);
-  FigureDescriptor(FigureDescriptor&& from) noexcept
-    : FigureDescriptor() {
+  FigureDescriptor_SeriesDescriptor(const FigureDescriptor_SeriesDescriptor& from);
+  FigureDescriptor_SeriesDescriptor(FigureDescriptor_SeriesDescriptor&& from) noexcept
+    : FigureDescriptor_SeriesDescriptor() {
     *this = ::std::move(from);
   }
 
-  inline FigureDescriptor& operator=(const FigureDescriptor& from) {
+  inline FigureDescriptor_SeriesDescriptor& operator=(const FigureDescriptor_SeriesDescriptor& from) {
     CopyFrom(from);
     return *this;
   }
-  inline FigureDescriptor& operator=(FigureDescriptor&& from) noexcept {
+  inline FigureDescriptor_SeriesDescriptor& operator=(FigureDescriptor_SeriesDescriptor&& from) noexcept {
     if (this == &from) return *this;
     if (GetOwningArena() == from.GetOwningArena()
   #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
@@ -9303,20 +9150,20 @@ class FigureDescriptor final :
   static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
     return default_instance().GetMetadata().reflection;
   }
-  static const FigureDescriptor& default_instance() {
+  static const FigureDescriptor_SeriesDescriptor& default_instance() {
     return *internal_default_instance();
   }
-  static inline const FigureDescriptor* internal_default_instance() {
-    return reinterpret_cast<const FigureDescriptor*>(
-               &_FigureDescriptor_default_instance_);
+  static inline const FigureDescriptor_SeriesDescriptor* internal_default_instance() {
+    return reinterpret_cast<const FigureDescriptor_SeriesDescriptor*>(
+               &_FigureDescriptor_SeriesDescriptor_default_instance_);
   }
   static constexpr int kIndexInFileMessages =
-    44;
+    46;
 
-  friend void swap(FigureDescriptor& a, FigureDescriptor& b) {
+  friend void swap(FigureDescriptor_SeriesDescriptor& a, FigureDescriptor_SeriesDescriptor& b) {
     a.Swap(&b);
   }
-  inline void Swap(FigureDescriptor* other) {
+  inline void Swap(FigureDescriptor_SeriesDescriptor* other) {
     if (other == this) return;
   #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
     if (GetOwningArena() != nullptr &&
@@ -9329,7 +9176,7 @@ class FigureDescriptor final :
       ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
     }
   }
-  void UnsafeArenaSwap(FigureDescriptor* other) {
+  void UnsafeArenaSwap(FigureDescriptor_SeriesDescriptor* other) {
     if (other == this) return;
     GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
     InternalSwap(other);
@@ -9337,13 +9184,13 @@ class FigureDescriptor final :
 
   // implements Message ----------------------------------------------
 
-  FigureDescriptor* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
-    return CreateMaybeMessage<FigureDescriptor>(arena);
+  FigureDescriptor_SeriesDescriptor* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
+    return CreateMaybeMessage<FigureDescriptor_SeriesDescriptor>(arena);
   }
   using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
-  void CopyFrom(const FigureDescriptor& from);
+  void CopyFrom(const FigureDescriptor_SeriesDescriptor& from);
   using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
-  void MergeFrom(const FigureDescriptor& from);
+  void MergeFrom(const FigureDescriptor_SeriesDescriptor& from);
   private:
   static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
   public:
@@ -9360,15 +9207,15 @@ class FigureDescriptor final :
   void SharedCtor();
   void SharedDtor();
   void SetCachedSize(int size) const final;
-  void InternalSwap(FigureDescriptor* other);
+  void InternalSwap(FigureDescriptor_SeriesDescriptor* other);
 
   private:
   friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
   static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
-    return "io.deephaven.proto.backplane.script.grpc.FigureDescriptor";
+    return "io.deephaven.proto.backplane.script.grpc.FigureDescriptor.SeriesDescriptor";
   }
   protected:
-  explicit FigureDescriptor(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+  explicit FigureDescriptor_SeriesDescriptor(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                        bool is_message_owned = false);
   public:
 
@@ -9379,260 +9226,224 @@ class FigureDescriptor final :
 
   // nested types ----------------------------------------------------
 
-  typedef FigureDescriptor_ChartDescriptor ChartDescriptor;
-  typedef FigureDescriptor_SeriesDescriptor SeriesDescriptor;
-  typedef FigureDescriptor_MultiSeriesDescriptor MultiSeriesDescriptor;
-  typedef FigureDescriptor_StringMapWithDefault StringMapWithDefault;
-  typedef FigureDescriptor_DoubleMapWithDefault DoubleMapWithDefault;
-  typedef FigureDescriptor_BoolMapWithDefault BoolMapWithDefault;
-  typedef FigureDescriptor_AxisDescriptor AxisDescriptor;
-  typedef FigureDescriptor_BusinessCalendarDescriptor BusinessCalendarDescriptor;
-  typedef FigureDescriptor_MultiSeriesSourceDescriptor MultiSeriesSourceDescriptor;
-  typedef FigureDescriptor_SourceDescriptor SourceDescriptor;
-  typedef FigureDescriptor_OneClickDescriptor OneClickDescriptor;
-
-  typedef FigureDescriptor_SeriesPlotStyle SeriesPlotStyle;
-  static constexpr SeriesPlotStyle BAR =
-    FigureDescriptor_SeriesPlotStyle_BAR;
-  static constexpr SeriesPlotStyle STACKED_BAR =
-    FigureDescriptor_SeriesPlotStyle_STACKED_BAR;
-  static constexpr SeriesPlotStyle LINE =
-    FigureDescriptor_SeriesPlotStyle_LINE;
-  static constexpr SeriesPlotStyle AREA =
-    FigureDescriptor_SeriesPlotStyle_AREA;
-  static constexpr SeriesPlotStyle STACKED_AREA =
-    FigureDescriptor_SeriesPlotStyle_STACKED_AREA;
-  static constexpr SeriesPlotStyle PIE =
-    FigureDescriptor_SeriesPlotStyle_PIE;
-  static constexpr SeriesPlotStyle HISTOGRAM =
-    FigureDescriptor_SeriesPlotStyle_HISTOGRAM;
-  static constexpr SeriesPlotStyle OHLC =
-    FigureDescriptor_SeriesPlotStyle_OHLC;
-  static constexpr SeriesPlotStyle SCATTER =
-    FigureDescriptor_SeriesPlotStyle_SCATTER;
-  static constexpr SeriesPlotStyle STEP =
-    FigureDescriptor_SeriesPlotStyle_STEP;
-  static constexpr SeriesPlotStyle ERROR_BAR =
-    FigureDescriptor_SeriesPlotStyle_ERROR_BAR;
-  static constexpr SeriesPlotStyle TREEMAP =
-    FigureDescriptor_SeriesPlotStyle_TREEMAP;
-  static inline bool SeriesPlotStyle_IsValid(int value) {
-    return FigureDescriptor_SeriesPlotStyle_IsValid(value);
-  }
-  static constexpr SeriesPlotStyle SeriesPlotStyle_MIN =
-    FigureDescriptor_SeriesPlotStyle_SeriesPlotStyle_MIN;
-  static constexpr SeriesPlotStyle SeriesPlotStyle_MAX =
-    FigureDescriptor_SeriesPlotStyle_SeriesPlotStyle_MAX;
-  static constexpr int SeriesPlotStyle_ARRAYSIZE =
-    FigureDescriptor_SeriesPlotStyle_SeriesPlotStyle_ARRAYSIZE;
-  static inline const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor*
-  SeriesPlotStyle_descriptor() {
-    return FigureDescriptor_SeriesPlotStyle_descriptor();
-  }
-  template<typename T>
-  static inline const std::string& SeriesPlotStyle_Name(T enum_t_value) {
-    static_assert(::std::is_same<T, SeriesPlotStyle>::value ||
-      ::std::is_integral<T>::value,
-      "Incorrect type passed to function SeriesPlotStyle_Name.");
-    return FigureDescriptor_SeriesPlotStyle_Name(enum_t_value);
-  }
-  static inline bool SeriesPlotStyle_Parse(::PROTOBUF_NAMESPACE_ID::ConstStringParam name,
-      SeriesPlotStyle* value) {
-    return FigureDescriptor_SeriesPlotStyle_Parse(name, value);
-  }
-
-  typedef FigureDescriptor_SourceType SourceType;
-  static constexpr SourceType X =
-    FigureDescriptor_SourceType_X;
-  static constexpr SourceType Y =
-    FigureDescriptor_SourceType_Y;
-  static constexpr SourceType Z =
-    FigureDescriptor_SourceType_Z;
-  static constexpr SourceType X_LOW =
-    FigureDescriptor_SourceType_X_LOW;
-  static constexpr SourceType X_HIGH =
-    FigureDescriptor_SourceType_X_HIGH;
-  static constexpr SourceType Y_LOW =
-    FigureDescriptor_SourceType_Y_LOW;
-  static constexpr SourceType Y_HIGH =
-    FigureDescriptor_SourceType_Y_HIGH;
-  static constexpr SourceType TIME =
-    FigureDescriptor_SourceType_TIME;
-  static constexpr SourceType OPEN =
-    FigureDescriptor_SourceType_OPEN;
-  static constexpr SourceType HIGH =
-    FigureDescriptor_SourceType_HIGH;
-  static constexpr SourceType LOW =
-    FigureDescriptor_SourceType_LOW;
-  static constexpr SourceType CLOSE =
-    FigureDescriptor_SourceType_CLOSE;
-  static constexpr SourceType SHAPE =
-    FigureDescriptor_SourceType_SHAPE;
-  static constexpr SourceType SIZE =
-    FigureDescriptor_SourceType_SIZE;
-  static constexpr SourceType LABEL =
-    FigureDescriptor_SourceType_LABEL;
-  static constexpr SourceType COLOR =
-    FigureDescriptor_SourceType_COLOR;
-  static constexpr SourceType PARENT =
-    FigureDescriptor_SourceType_PARENT;
-  static constexpr SourceType HOVER_TEXT =
-    FigureDescriptor_SourceType_HOVER_TEXT;
-  static constexpr SourceType TEXT =
-    FigureDescriptor_SourceType_TEXT;
-  static inline bool SourceType_IsValid(int value) {
-    return FigureDescriptor_SourceType_IsValid(value);
-  }
-  static constexpr SourceType SourceType_MIN =
-    FigureDescriptor_SourceType_SourceType_MIN;
-  static constexpr SourceType SourceType_MAX =
-    FigureDescriptor_SourceType_SourceType_MAX;
-  static constexpr int SourceType_ARRAYSIZE =
-    FigureDescriptor_SourceType_SourceType_ARRAYSIZE;
-  static inline const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor*
-  SourceType_descriptor() {
-    return FigureDescriptor_SourceType_descriptor();
-  }
-  template<typename T>
-  static inline const std::string& SourceType_Name(T enum_t_value) {
-    static_assert(::std::is_same<T, SourceType>::value ||
-      ::std::is_integral<T>::value,
-      "Incorrect type passed to function SourceType_Name.");
-    return FigureDescriptor_SourceType_Name(enum_t_value);
-  }
-  static inline bool SourceType_Parse(::PROTOBUF_NAMESPACE_ID::ConstStringParam name,
-      SourceType* value) {
-    return FigureDescriptor_SourceType_Parse(name, value);
-  }
-
-  // accessors -------------------------------------------------------
+  // accessors -------------------------------------------------------
 
   enum : int {
-    kChartsFieldNumber = 10,
-    kErrorsFieldNumber = 13,
-    kTitleFieldNumber = 1,
-    kTitleFontFieldNumber = 2,
-    kTitleColorFieldNumber = 3,
-    kUpdateIntervalFieldNumber = 7,
-    kColsFieldNumber = 8,
-    kRowsFieldNumber = 9,
+    kDataSourcesFieldNumber = 15,
+    kNameFieldNumber = 2,
+    kLineColorFieldNumber = 6,
+    kPointLabelFormatFieldNumber = 8,
+    kXToolTipPatternFieldNumber = 9,
+    kYToolTipPatternFieldNumber = 10,
+    kShapeLabelFieldNumber = 11,
+    kShapeColorFieldNumber = 13,
+    kShapeFieldNumber = 14,
+    kPlotStyleFieldNumber = 1,
+    kLinesVisibleFieldNumber = 3,
+    kShapesVisibleFieldNumber = 4,
+    kGradientVisibleFieldNumber = 5,
+    kShapeSizeFieldNumber = 12,
   };
-  // repeated .io.deephaven.proto.backplane.script.grpc.FigureDescriptor.ChartDescriptor charts = 10;
-  int charts_size() const;
+  // repeated .io.deephaven.proto.backplane.script.grpc.FigureDescriptor.SourceDescriptor data_sources = 15;
+  int data_sources_size() const;
   private:
-  int _internal_charts_size() const;
+  int _internal_data_sources_size() const;
   public:
-  void clear_charts();
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_ChartDescriptor* mutable_charts(int index);
-  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_ChartDescriptor >*
-      mutable_charts();
+  void clear_data_sources();
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_SourceDescriptor* mutable_data_sources(int index);
+  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_SourceDescriptor >*
+      mutable_data_sources();
   private:
-  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_ChartDescriptor& _internal_charts(int index) const;
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_ChartDescriptor* _internal_add_charts();
+  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_SourceDescriptor& _internal_data_sources(int index) const;
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_SourceDescriptor* _internal_add_data_sources();
   public:
-  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_ChartDescriptor& charts(int index) const;
-  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_ChartDescriptor* add_charts();
-  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_ChartDescriptor >&
-      charts() const;
+  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_SourceDescriptor& data_sources(int index) const;
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_SourceDescriptor* add_data_sources();
+  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_SourceDescriptor >&
+      data_sources() const;
 
-  // repeated string errors = 13;
-  int errors_size() const;
+  // string name = 2;
+  void clear_name();
+  const std::string& name() const;
+  template <typename ArgT0 = const std::string&, typename... ArgT>
+  void set_name(ArgT0&& arg0, ArgT... args);
+  std::string* mutable_name();
+  PROTOBUF_NODISCARD std::string* release_name();
+  void set_allocated_name(std::string* name);
   private:
-  int _internal_errors_size() const;
+  const std::string& _internal_name() const;
+  inline PROTOBUF_ALWAYS_INLINE void _internal_set_name(const std::string& value);
+  std::string* _internal_mutable_name();
   public:
-  void clear_errors();
-  const std::string& errors(int index) const;
-  std::string* mutable_errors(int index);
-  void set_errors(int index, const std::string& value);
-  void set_errors(int index, std::string&& value);
-  void set_errors(int index, const char* value);
-  void set_errors(int index, const char* value, size_t size);
-  std::string* add_errors();
-  void add_errors(const std::string& value);
-  void add_errors(std::string&& value);
-  void add_errors(const char* value);
-  void add_errors(const char* value, size_t size);
-  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>& errors() const;
-  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>* mutable_errors();
+
+  // string line_color = 6;
+  void clear_line_color();
+  const std::string& line_color() const;
+  template <typename ArgT0 = const std::string&, typename... ArgT>
+  void set_line_color(ArgT0&& arg0, ArgT... args);
+  std::string* mutable_line_color();
+  PROTOBUF_NODISCARD std::string* release_line_color();
+  void set_allocated_line_color(std::string* line_color);
   private:
-  const std::string& _internal_errors(int index) const;
-  std::string* _internal_add_errors();
+  const std::string& _internal_line_color() const;
+  inline PROTOBUF_ALWAYS_INLINE void _internal_set_line_color(const std::string& value);
+  std::string* _internal_mutable_line_color();
   public:
 
-  // optional string title = 1;
-  bool has_title() const;
+  // optional string point_label_format = 8;
+  bool has_point_label_format() const;
   private:
-  bool _internal_has_title() const;
+  bool _internal_has_point_label_format() const;
   public:
-  void clear_title();
-  const std::string& title() const;
+  void clear_point_label_format();
+  const std::string& point_label_format() const;
   template <typename ArgT0 = const std::string&, typename... ArgT>
-  void set_title(ArgT0&& arg0, ArgT... args);
-  std::string* mutable_title();
-  PROTOBUF_NODISCARD std::string* release_title();
-  void set_allocated_title(std::string* title);
+  void set_point_label_format(ArgT0&& arg0, ArgT... args);
+  std::string* mutable_point_label_format();
+  PROTOBUF_NODISCARD std::string* release_point_label_format();
+  void set_allocated_point_label_format(std::string* point_label_format);
   private:
-  const std::string& _internal_title() const;
-  inline PROTOBUF_ALWAYS_INLINE void _internal_set_title(const std::string& value);
-  std::string* _internal_mutable_title();
+  const std::string& _internal_point_label_format() const;
+  inline PROTOBUF_ALWAYS_INLINE void _internal_set_point_label_format(const std::string& value);
+  std::string* _internal_mutable_point_label_format();
   public:
 
-  // string title_font = 2;
-  void clear_title_font();
-  const std::string& title_font() const;
-  template <typename ArgT0 = const std::string&, typename... ArgT>
-  void set_title_font(ArgT0&& arg0, ArgT... args);
-  std::string* mutable_title_font();
-  PROTOBUF_NODISCARD std::string* release_title_font();
-  void set_allocated_title_font(std::string* title_font);
+  // optional string x_tool_tip_pattern = 9;
+  bool has_x_tool_tip_pattern() const;
   private:
-  const std::string& _internal_title_font() const;
-  inline PROTOBUF_ALWAYS_INLINE void _internal_set_title_font(const std::string& value);
-  std::string* _internal_mutable_title_font();
+  bool _internal_has_x_tool_tip_pattern() const;
   public:
-
-  // string title_color = 3;
-  void clear_title_color();
-  const std::string& title_color() const;
+  void clear_x_tool_tip_pattern();
+  const std::string& x_tool_tip_pattern() const;
   template <typename ArgT0 = const std::string&, typename... ArgT>
-  void set_title_color(ArgT0&& arg0, ArgT... args);
-  std::string* mutable_title_color();
-  PROTOBUF_NODISCARD std::string* release_title_color();
-  void set_allocated_title_color(std::string* title_color);
+  void set_x_tool_tip_pattern(ArgT0&& arg0, ArgT... args);
+  std::string* mutable_x_tool_tip_pattern();
+  PROTOBUF_NODISCARD std::string* release_x_tool_tip_pattern();
+  void set_allocated_x_tool_tip_pattern(std::string* x_tool_tip_pattern);
   private:
-  const std::string& _internal_title_color() const;
-  inline PROTOBUF_ALWAYS_INLINE void _internal_set_title_color(const std::string& value);
-  std::string* _internal_mutable_title_color();
+  const std::string& _internal_x_tool_tip_pattern() const;
+  inline PROTOBUF_ALWAYS_INLINE void _internal_set_x_tool_tip_pattern(const std::string& value);
+  std::string* _internal_mutable_x_tool_tip_pattern();
   public:
 
-  // int64 update_interval = 7 [jstype = JS_STRING];
-  void clear_update_interval();
-  int64_t update_interval() const;
-  void set_update_interval(int64_t value);
+  // optional string y_tool_tip_pattern = 10;
+  bool has_y_tool_tip_pattern() const;
   private:
-  int64_t _internal_update_interval() const;
-  void _internal_set_update_interval(int64_t value);
+  bool _internal_has_y_tool_tip_pattern() const;
   public:
-
-  // int32 cols = 8;
-  void clear_cols();
-  int32_t cols() const;
-  void set_cols(int32_t value);
+  void clear_y_tool_tip_pattern();
+  const std::string& y_tool_tip_pattern() const;
+  template <typename ArgT0 = const std::string&, typename... ArgT>
+  void set_y_tool_tip_pattern(ArgT0&& arg0, ArgT... args);
+  std::string* mutable_y_tool_tip_pattern();
+  PROTOBUF_NODISCARD std::string* release_y_tool_tip_pattern();
+  void set_allocated_y_tool_tip_pattern(std::string* y_tool_tip_pattern);
   private:
-  int32_t _internal_cols() const;
-  void _internal_set_cols(int32_t value);
+  const std::string& _internal_y_tool_tip_pattern() const;
+  inline PROTOBUF_ALWAYS_INLINE void _internal_set_y_tool_tip_pattern(const std::string& value);
+  std::string* _internal_mutable_y_tool_tip_pattern();
   public:
 
-  // int32 rows = 9;
-  void clear_rows();
-  int32_t rows() const;
-  void set_rows(int32_t value);
+  // string shape_label = 11;
+  void clear_shape_label();
+  const std::string& shape_label() const;
+  template <typename ArgT0 = const std::string&, typename... ArgT>
+  void set_shape_label(ArgT0&& arg0, ArgT... args);
+  std::string* mutable_shape_label();
+  PROTOBUF_NODISCARD std::string* release_shape_label();
+  void set_allocated_shape_label(std::string* shape_label);
   private:
-  int32_t _internal_rows() const;
-  void _internal_set_rows(int32_t value);
+  const std::string& _internal_shape_label() const;
+  inline PROTOBUF_ALWAYS_INLINE void _internal_set_shape_label(const std::string& value);
+  std::string* _internal_mutable_shape_label();
   public:
 
-  // @@protoc_insertion_point(class_scope:io.deephaven.proto.backplane.script.grpc.FigureDescriptor)
+  // string shape_color = 13;
+  void clear_shape_color();
+  const std::string& shape_color() const;
+  template <typename ArgT0 = const std::string&, typename... ArgT>
+  void set_shape_color(ArgT0&& arg0, ArgT... args);
+  std::string* mutable_shape_color();
+  PROTOBUF_NODISCARD std::string* release_shape_color();
+  void set_allocated_shape_color(std::string* shape_color);
+  private:
+  const std::string& _internal_shape_color() const;
+  inline PROTOBUF_ALWAYS_INLINE void _internal_set_shape_color(const std::string& value);
+  std::string* _internal_mutable_shape_color();
+  public:
+
+  // string shape = 14;
+  void clear_shape();
+  const std::string& shape() const;
+  template <typename ArgT0 = const std::string&, typename... ArgT>
+  void set_shape(ArgT0&& arg0, ArgT... args);
+  std::string* mutable_shape();
+  PROTOBUF_NODISCARD std::string* release_shape();
+  void set_allocated_shape(std::string* shape);
+  private:
+  const std::string& _internal_shape() const;
+  inline PROTOBUF_ALWAYS_INLINE void _internal_set_shape(const std::string& value);
+  std::string* _internal_mutable_shape();
+  public:
+
+  // .io.deephaven.proto.backplane.script.grpc.FigureDescriptor.SeriesPlotStyle plot_style = 1;
+  void clear_plot_style();
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_SeriesPlotStyle plot_style() const;
+  void set_plot_style(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_SeriesPlotStyle value);
+  private:
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_SeriesPlotStyle _internal_plot_style() const;
+  void _internal_set_plot_style(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_SeriesPlotStyle value);
+  public:
+
+  // optional bool lines_visible = 3;
+  bool has_lines_visible() const;
+  private:
+  bool _internal_has_lines_visible() const;
+  public:
+  void clear_lines_visible();
+  bool lines_visible() const;
+  void set_lines_visible(bool value);
+  private:
+  bool _internal_lines_visible() const;
+  void _internal_set_lines_visible(bool value);
+  public:
+
+  // optional bool shapes_visible = 4;
+  bool has_shapes_visible() const;
+  private:
+  bool _internal_has_shapes_visible() const;
+  public:
+  void clear_shapes_visible();
+  bool shapes_visible() const;
+  void set_shapes_visible(bool value);
+  private:
+  bool _internal_shapes_visible() const;
+  void _internal_set_shapes_visible(bool value);
+  public:
+
+  // bool gradient_visible = 5;
+  void clear_gradient_visible();
+  bool gradient_visible() const;
+  void set_gradient_visible(bool value);
+  private:
+  bool _internal_gradient_visible() const;
+  void _internal_set_gradient_visible(bool value);
+  public:
+
+  // optional double shape_size = 12;
+  bool has_shape_size() const;
+  private:
+  bool _internal_has_shape_size() const;
+  public:
+  void clear_shape_size();
+  double shape_size() const;
+  void set_shape_size(double value);
+  private:
+  double _internal_shape_size() const;
+  void _internal_set_shape_size(double value);
+  public:
+
+  // @@protoc_insertion_point(class_scope:io.deephaven.proto.backplane.script.grpc.FigureDescriptor.SeriesDescriptor)
  private:
   class _Internal;
 
@@ -9641,143 +9452,6367 @@ class FigureDescriptor final :
   typedef void DestructorSkippable_;
   ::PROTOBUF_NAMESPACE_ID::internal::HasBits<1> _has_bits_;
   mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
-  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_ChartDescriptor > charts_;
-  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string> errors_;
-  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr title_;
-  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr title_font_;
-  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr title_color_;
-  int64_t update_interval_;
-  int32_t cols_;
-  int32_t rows_;
+  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_SourceDescriptor > data_sources_;
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr name_;
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr line_color_;
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr point_label_format_;
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr x_tool_tip_pattern_;
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr y_tool_tip_pattern_;
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr shape_label_;
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr shape_color_;
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr shape_;
+  int plot_style_;
+  bool lines_visible_;
+  bool shapes_visible_;
+  bool gradient_visible_;
+  double shape_size_;
   friend struct ::TableStruct_deephaven_2fproto_2fconsole_2eproto;
 };
-// ===================================================================
+// -------------------------------------------------------------------
 
+class FigureDescriptor_MultiSeriesDescriptor final :
+    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:io.deephaven.proto.backplane.script.grpc.FigureDescriptor.MultiSeriesDescriptor) */ {
+ public:
+  inline FigureDescriptor_MultiSeriesDescriptor() : FigureDescriptor_MultiSeriesDescriptor(nullptr) {}
+  ~FigureDescriptor_MultiSeriesDescriptor() override;
+  explicit PROTOBUF_CONSTEXPR FigureDescriptor_MultiSeriesDescriptor(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
 
-// ===================================================================
+  FigureDescriptor_MultiSeriesDescriptor(const FigureDescriptor_MultiSeriesDescriptor& from);
+  FigureDescriptor_MultiSeriesDescriptor(FigureDescriptor_MultiSeriesDescriptor&& from) noexcept
+    : FigureDescriptor_MultiSeriesDescriptor() {
+    *this = ::std::move(from);
+  }
 
-#ifdef __GNUC__
-  #pragma GCC diagnostic push
-  #pragma GCC diagnostic ignored "-Wstrict-aliasing"
-#endif  // __GNUC__
-// GetConsoleTypesRequest
+  inline FigureDescriptor_MultiSeriesDescriptor& operator=(const FigureDescriptor_MultiSeriesDescriptor& from) {
+    CopyFrom(from);
+    return *this;
+  }
+  inline FigureDescriptor_MultiSeriesDescriptor& operator=(FigureDescriptor_MultiSeriesDescriptor&& from) noexcept {
+    if (this == &from) return *this;
+    if (GetOwningArena() == from.GetOwningArena()
+  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+        && GetOwningArena() != nullptr
+  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
+    ) {
+      InternalSwap(&from);
+    } else {
+      CopyFrom(from);
+    }
+    return *this;
+  }
 
-// -------------------------------------------------------------------
+  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
+    return GetDescriptor();
+  }
+  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
+    return default_instance().GetMetadata().descriptor;
+  }
+  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
+    return default_instance().GetMetadata().reflection;
+  }
+  static const FigureDescriptor_MultiSeriesDescriptor& default_instance() {
+    return *internal_default_instance();
+  }
+  static inline const FigureDescriptor_MultiSeriesDescriptor* internal_default_instance() {
+    return reinterpret_cast<const FigureDescriptor_MultiSeriesDescriptor*>(
+               &_FigureDescriptor_MultiSeriesDescriptor_default_instance_);
+  }
+  static constexpr int kIndexInFileMessages =
+    47;
 
-// GetConsoleTypesResponse
+  friend void swap(FigureDescriptor_MultiSeriesDescriptor& a, FigureDescriptor_MultiSeriesDescriptor& b) {
+    a.Swap(&b);
+  }
+  inline void Swap(FigureDescriptor_MultiSeriesDescriptor* other) {
+    if (other == this) return;
+  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
+    if (GetOwningArena() != nullptr &&
+        GetOwningArena() == other->GetOwningArena()) {
+   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
+    if (GetOwningArena() == other->GetOwningArena()) {
+  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
+      InternalSwap(other);
+    } else {
+      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
+    }
+  }
+  void UnsafeArenaSwap(FigureDescriptor_MultiSeriesDescriptor* other) {
+    if (other == this) return;
+    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
+    InternalSwap(other);
+  }
 
-// repeated string console_types = 1;
-inline int GetConsoleTypesResponse::_internal_console_types_size() const {
-  return console_types_.size();
-}
-inline int GetConsoleTypesResponse::console_types_size() const {
-  return _internal_console_types_size();
-}
-inline void GetConsoleTypesResponse::clear_console_types() {
-  console_types_.Clear();
-}
-inline std::string* GetConsoleTypesResponse::add_console_types() {
-  std::string* _s = _internal_add_console_types();
-  // @@protoc_insertion_point(field_add_mutable:io.deephaven.proto.backplane.script.grpc.GetConsoleTypesResponse.console_types)
-  return _s;
+  // implements Message ----------------------------------------------
+
+  FigureDescriptor_MultiSeriesDescriptor* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
+    return CreateMaybeMessage<FigureDescriptor_MultiSeriesDescriptor>(arena);
+  }
+  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
+  void CopyFrom(const FigureDescriptor_MultiSeriesDescriptor& from);
+  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
+  void MergeFrom(const FigureDescriptor_MultiSeriesDescriptor& from);
+  private:
+  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
+  public:
+  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
+  bool IsInitialized() const final;
+
+  size_t ByteSizeLong() const final;
+  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
+  uint8_t* _InternalSerialize(
+      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
+  int GetCachedSize() const final { return _cached_size_.Get(); }
+
+  private:
+  void SharedCtor();
+  void SharedDtor();
+  void SetCachedSize(int size) const final;
+  void InternalSwap(FigureDescriptor_MultiSeriesDescriptor* other);
+
+  private:
+  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
+  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
+    return "io.deephaven.proto.backplane.script.grpc.FigureDescriptor.MultiSeriesDescriptor";
+  }
+  protected:
+  explicit FigureDescriptor_MultiSeriesDescriptor(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+                       bool is_message_owned = false);
+  public:
+
+  static const ClassData _class_data_;
+  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;
+
+  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
+
+  // nested types ----------------------------------------------------
+
+  // accessors -------------------------------------------------------
+
+  enum : int {
+    kDataSourcesFieldNumber = 14,
+    kNameFieldNumber = 2,
+    kLineColorFieldNumber = 3,
+    kPointColorFieldNumber = 4,
+    kLinesVisibleFieldNumber = 5,
+    kPointsVisibleFieldNumber = 6,
+    kGradientVisibleFieldNumber = 7,
+    kPointLabelFormatFieldNumber = 8,
+    kXToolTipPatternFieldNumber = 9,
+    kYToolTipPatternFieldNumber = 10,
+    kPointLabelFieldNumber = 11,
+    kPointSizeFieldNumber = 12,
+    kPointShapeFieldNumber = 13,
+    kPlotStyleFieldNumber = 1,
+  };
+  // repeated .io.deephaven.proto.backplane.script.grpc.FigureDescriptor.MultiSeriesSourceDescriptor data_sources = 14;
+  int data_sources_size() const;
+  private:
+  int _internal_data_sources_size() const;
+  public:
+  void clear_data_sources();
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_MultiSeriesSourceDescriptor* mutable_data_sources(int index);
+  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_MultiSeriesSourceDescriptor >*
+      mutable_data_sources();
+  private:
+  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_MultiSeriesSourceDescriptor& _internal_data_sources(int index) const;
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_MultiSeriesSourceDescriptor* _internal_add_data_sources();
+  public:
+  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_MultiSeriesSourceDescriptor& data_sources(int index) const;
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_MultiSeriesSourceDescriptor* add_data_sources();
+  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_MultiSeriesSourceDescriptor >&
+      data_sources() const;
+
+  // string name = 2;
+  void clear_name();
+  const std::string& name() const;
+  template <typename ArgT0 = const std::string&, typename... ArgT>
+  void set_name(ArgT0&& arg0, ArgT... args);
+  std::string* mutable_name();
+  PROTOBUF_NODISCARD std::string* release_name();
+  void set_allocated_name(std::string* name);
+  private:
+  const std::string& _internal_name() const;
+  inline PROTOBUF_ALWAYS_INLINE void _internal_set_name(const std::string& value);
+  std::string* _internal_mutable_name();
+  public:
+
+  // .io.deephaven.proto.backplane.script.grpc.FigureDescriptor.StringMapWithDefault line_color = 3;
+  bool has_line_color() const;
+  private:
+  bool _internal_has_line_color() const;
+  public:
+  void clear_line_color();
+  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault& line_color() const;
+  PROTOBUF_NODISCARD ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* release_line_color();
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* mutable_line_color();
+  void set_allocated_line_color(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* line_color);
+  private:
+  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault& _internal_line_color() const;
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* _internal_mutable_line_color();
+  public:
+  void unsafe_arena_set_allocated_line_color(
+      ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* line_color);
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* unsafe_arena_release_line_color();
+
+  // .io.deephaven.proto.backplane.script.grpc.FigureDescriptor.StringMapWithDefault point_color = 4;
+  bool has_point_color() const;
+  private:
+  bool _internal_has_point_color() const;
+  public:
+  void clear_point_color();
+  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault& point_color() const;
+  PROTOBUF_NODISCARD ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* release_point_color();
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* mutable_point_color();
+  void set_allocated_point_color(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* point_color);
+  private:
+  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault& _internal_point_color() const;
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* _internal_mutable_point_color();
+  public:
+  void unsafe_arena_set_allocated_point_color(
+      ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* point_color);
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* unsafe_arena_release_point_color();
+
+  // .io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BoolMapWithDefault lines_visible = 5;
+  bool has_lines_visible() const;
+  private:
+  bool _internal_has_lines_visible() const;
+  public:
+  void clear_lines_visible();
+  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BoolMapWithDefault& lines_visible() const;
+  PROTOBUF_NODISCARD ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BoolMapWithDefault* release_lines_visible();
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BoolMapWithDefault* mutable_lines_visible();
+  void set_allocated_lines_visible(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BoolMapWithDefault* lines_visible);
+  private:
+  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BoolMapWithDefault& _internal_lines_visible() const;
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BoolMapWithDefault* _internal_mutable_lines_visible();
+  public:
+  void unsafe_arena_set_allocated_lines_visible(
+      ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BoolMapWithDefault* lines_visible);
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BoolMapWithDefault* unsafe_arena_release_lines_visible();
+
+  // .io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BoolMapWithDefault points_visible = 6;
+  bool has_points_visible() const;
+  private:
+  bool _internal_has_points_visible() const;
+  public:
+  void clear_points_visible();
+  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BoolMapWithDefault& points_visible() const;
+  PROTOBUF_NODISCARD ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BoolMapWithDefault* release_points_visible();
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BoolMapWithDefault* mutable_points_visible();
+  void set_allocated_points_visible(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BoolMapWithDefault* points_visible);
+  private:
+  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BoolMapWithDefault& _internal_points_visible() const;
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BoolMapWithDefault* _internal_mutable_points_visible();
+  public:
+  void unsafe_arena_set_allocated_points_visible(
+      ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BoolMapWithDefault* points_visible);
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BoolMapWithDefault* unsafe_arena_release_points_visible();
+
+  // .io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BoolMapWithDefault gradient_visible = 7;
+  bool has_gradient_visible() const;
+  private:
+  bool _internal_has_gradient_visible() const;
+  public:
+  void clear_gradient_visible();
+  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BoolMapWithDefault& gradient_visible() const;
+  PROTOBUF_NODISCARD ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BoolMapWithDefault* release_gradient_visible();
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BoolMapWithDefault* mutable_gradient_visible();
+  void set_allocated_gradient_visible(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BoolMapWithDefault* gradient_visible);
+  private:
+  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BoolMapWithDefault& _internal_gradient_visible() const;
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BoolMapWithDefault* _internal_mutable_gradient_visible();
+  public:
+  void unsafe_arena_set_allocated_gradient_visible(
+      ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BoolMapWithDefault* gradient_visible);
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BoolMapWithDefault* unsafe_arena_release_gradient_visible();
+
+  // .io.deephaven.proto.backplane.script.grpc.FigureDescriptor.StringMapWithDefault point_label_format = 8;
+  bool has_point_label_format() const;
+  private:
+  bool _internal_has_point_label_format() const;
+  public:
+  void clear_point_label_format();
+  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault& point_label_format() const;
+  PROTOBUF_NODISCARD ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* release_point_label_format();
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* mutable_point_label_format();
+  void set_allocated_point_label_format(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* point_label_format);
+  private:
+  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault& _internal_point_label_format() const;
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* _internal_mutable_point_label_format();
+  public:
+  void unsafe_arena_set_allocated_point_label_format(
+      ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* point_label_format);
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* unsafe_arena_release_point_label_format();
+
+  // .io.deephaven.proto.backplane.script.grpc.FigureDescriptor.StringMapWithDefault x_tool_tip_pattern = 9;
+  bool has_x_tool_tip_pattern() const;
+  private:
+  bool _internal_has_x_tool_tip_pattern() const;
+  public:
+  void clear_x_tool_tip_pattern();
+  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault& x_tool_tip_pattern() const;
+  PROTOBUF_NODISCARD ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* release_x_tool_tip_pattern();
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* mutable_x_tool_tip_pattern();
+  void set_allocated_x_tool_tip_pattern(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* x_tool_tip_pattern);
+  private:
+  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault& _internal_x_tool_tip_pattern() const;
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* _internal_mutable_x_tool_tip_pattern();
+  public:
+  void unsafe_arena_set_allocated_x_tool_tip_pattern(
+      ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* x_tool_tip_pattern);
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* unsafe_arena_release_x_tool_tip_pattern();
+
+  // .io.deephaven.proto.backplane.script.grpc.FigureDescriptor.StringMapWithDefault y_tool_tip_pattern = 10;
+  bool has_y_tool_tip_pattern() const;
+  private:
+  bool _internal_has_y_tool_tip_pattern() const;
+  public:
+  void clear_y_tool_tip_pattern();
+  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault& y_tool_tip_pattern() const;
+  PROTOBUF_NODISCARD ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* release_y_tool_tip_pattern();
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* mutable_y_tool_tip_pattern();
+  void set_allocated_y_tool_tip_pattern(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* y_tool_tip_pattern);
+  private:
+  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault& _internal_y_tool_tip_pattern() const;
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* _internal_mutable_y_tool_tip_pattern();
+  public:
+  void unsafe_arena_set_allocated_y_tool_tip_pattern(
+      ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* y_tool_tip_pattern);
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* unsafe_arena_release_y_tool_tip_pattern();
+
+  // .io.deephaven.proto.backplane.script.grpc.FigureDescriptor.StringMapWithDefault point_label = 11;
+  bool has_point_label() const;
+  private:
+  bool _internal_has_point_label() const;
+  public:
+  void clear_point_label();
+  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault& point_label() const;
+  PROTOBUF_NODISCARD ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* release_point_label();
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* mutable_point_label();
+  void set_allocated_point_label(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* point_label);
+  private:
+  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault& _internal_point_label() const;
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* _internal_mutable_point_label();
+  public:
+  void unsafe_arena_set_allocated_point_label(
+      ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* point_label);
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* unsafe_arena_release_point_label();
+
+  // .io.deephaven.proto.backplane.script.grpc.FigureDescriptor.DoubleMapWithDefault point_size = 12;
+  bool has_point_size() const;
+  private:
+  bool _internal_has_point_size() const;
+  public:
+  void clear_point_size();
+  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_DoubleMapWithDefault& point_size() const;
+  PROTOBUF_NODISCARD ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_DoubleMapWithDefault* release_point_size();
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_DoubleMapWithDefault* mutable_point_size();
+  void set_allocated_point_size(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_DoubleMapWithDefault* point_size);
+  private:
+  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_DoubleMapWithDefault& _internal_point_size() const;
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_DoubleMapWithDefault* _internal_mutable_point_size();
+  public:
+  void unsafe_arena_set_allocated_point_size(
+      ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_DoubleMapWithDefault* point_size);
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_DoubleMapWithDefault* unsafe_arena_release_point_size();
+
+  // .io.deephaven.proto.backplane.script.grpc.FigureDescriptor.StringMapWithDefault point_shape = 13;
+  bool has_point_shape() const;
+  private:
+  bool _internal_has_point_shape() const;
+  public:
+  void clear_point_shape();
+  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault& point_shape() const;
+  PROTOBUF_NODISCARD ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* release_point_shape();
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* mutable_point_shape();
+  void set_allocated_point_shape(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* point_shape);
+  private:
+  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault& _internal_point_shape() const;
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* _internal_mutable_point_shape();
+  public:
+  void unsafe_arena_set_allocated_point_shape(
+      ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* point_shape);
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* unsafe_arena_release_point_shape();
+
+  // .io.deephaven.proto.backplane.script.grpc.FigureDescriptor.SeriesPlotStyle plot_style = 1;
+  void clear_plot_style();
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_SeriesPlotStyle plot_style() const;
+  void set_plot_style(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_SeriesPlotStyle value);
+  private:
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_SeriesPlotStyle _internal_plot_style() const;
+  void _internal_set_plot_style(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_SeriesPlotStyle value);
+  public:
+
+  // @@protoc_insertion_point(class_scope:io.deephaven.proto.backplane.script.grpc.FigureDescriptor.MultiSeriesDescriptor)
+ private:
+  class _Internal;
+
+  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
+  typedef void InternalArenaConstructable_;
+  typedef void DestructorSkippable_;
+  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_MultiSeriesSourceDescriptor > data_sources_;
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr name_;
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* line_color_;
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* point_color_;
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BoolMapWithDefault* lines_visible_;
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BoolMapWithDefault* points_visible_;
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BoolMapWithDefault* gradient_visible_;
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* point_label_format_;
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* x_tool_tip_pattern_;
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* y_tool_tip_pattern_;
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* point_label_;
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_DoubleMapWithDefault* point_size_;
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_StringMapWithDefault* point_shape_;
+  int plot_style_;
+  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
+  friend struct ::TableStruct_deephaven_2fproto_2fconsole_2eproto;
+};
+// -------------------------------------------------------------------
+
+class FigureDescriptor_StringMapWithDefault final :
+    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:io.deephaven.proto.backplane.script.grpc.FigureDescriptor.StringMapWithDefault) */ {
+ public:
+  inline FigureDescriptor_StringMapWithDefault() : FigureDescriptor_StringMapWithDefault(nullptr) {}
+  ~FigureDescriptor_StringMapWithDefault() override;
+  explicit PROTOBUF_CONSTEXPR FigureDescriptor_StringMapWithDefault(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
+
+  FigureDescriptor_StringMapWithDefault(const FigureDescriptor_StringMapWithDefault& from);
+  FigureDescriptor_StringMapWithDefault(FigureDescriptor_StringMapWithDefault&& from) noexcept
+    : FigureDescriptor_StringMapWithDefault() {
+    *this = ::std::move(from);
+  }
+
+  inline FigureDescriptor_StringMapWithDefault& operator=(const FigureDescriptor_StringMapWithDefault& from) {
+    CopyFrom(from);
+    return *this;
+  }
+  inline FigureDescriptor_StringMapWithDefault& operator=(FigureDescriptor_StringMapWithDefault&& from) noexcept {
+    if (this == &from) return *this;
+    if (GetOwningArena() == from.GetOwningArena()
+  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+        && GetOwningArena() != nullptr
+  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
+    ) {
+      InternalSwap(&from);
+    } else {
+      CopyFrom(from);
+    }
+    return *this;
+  }
+
+  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
+    return GetDescriptor();
+  }
+  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
+    return default_instance().GetMetadata().descriptor;
+  }
+  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
+    return default_instance().GetMetadata().reflection;
+  }
+  static const FigureDescriptor_StringMapWithDefault& default_instance() {
+    return *internal_default_instance();
+  }
+  static inline const FigureDescriptor_StringMapWithDefault* internal_default_instance() {
+    return reinterpret_cast<const FigureDescriptor_StringMapWithDefault*>(
+               &_FigureDescriptor_StringMapWithDefault_default_instance_);
+  }
+  static constexpr int kIndexInFileMessages =
+    48;
+
+  friend void swap(FigureDescriptor_StringMapWithDefault& a, FigureDescriptor_StringMapWithDefault& b) {
+    a.Swap(&b);
+  }
+  inline void Swap(FigureDescriptor_StringMapWithDefault* other) {
+    if (other == this) return;
+  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
+    if (GetOwningArena() != nullptr &&
+        GetOwningArena() == other->GetOwningArena()) {
+   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
+    if (GetOwningArena() == other->GetOwningArena()) {
+  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
+      InternalSwap(other);
+    } else {
+      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
+    }
+  }
+  void UnsafeArenaSwap(FigureDescriptor_StringMapWithDefault* other) {
+    if (other == this) return;
+    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
+    InternalSwap(other);
+  }
+
+  // implements Message ----------------------------------------------
+
+  FigureDescriptor_StringMapWithDefault* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
+    return CreateMaybeMessage<FigureDescriptor_StringMapWithDefault>(arena);
+  }
+  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
+  void CopyFrom(const FigureDescriptor_StringMapWithDefault& from);
+  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
+  void MergeFrom(const FigureDescriptor_StringMapWithDefault& from);
+  private:
+  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
+  public:
+  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
+  bool IsInitialized() const final;
+
+  size_t ByteSizeLong() const final;
+  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
+  uint8_t* _InternalSerialize(
+      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
+  int GetCachedSize() const final { return _cached_size_.Get(); }
+
+  private:
+  void SharedCtor();
+  void SharedDtor();
+  void SetCachedSize(int size) const final;
+  void InternalSwap(FigureDescriptor_StringMapWithDefault* other);
+
+  private:
+  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
+  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
+    return "io.deephaven.proto.backplane.script.grpc.FigureDescriptor.StringMapWithDefault";
+  }
+  protected:
+  explicit FigureDescriptor_StringMapWithDefault(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+                       bool is_message_owned = false);
+  public:
+
+  static const ClassData _class_data_;
+  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;
+
+  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
+
+  // nested types ----------------------------------------------------
+
+  // accessors -------------------------------------------------------
+
+  enum : int {
+    kKeysFieldNumber = 2,
+    kValuesFieldNumber = 3,
+    kDefaultStringFieldNumber = 1,
+  };
+  // repeated string keys = 2;
+  int keys_size() const;
+  private:
+  int _internal_keys_size() const;
+  public:
+  void clear_keys();
+  const std::string& keys(int index) const;
+  std::string* mutable_keys(int index);
+  void set_keys(int index, const std::string& value);
+  void set_keys(int index, std::string&& value);
+  void set_keys(int index, const char* value);
+  void set_keys(int index, const char* value, size_t size);
+  std::string* add_keys();
+  void add_keys(const std::string& value);
+  void add_keys(std::string&& value);
+  void add_keys(const char* value);
+  void add_keys(const char* value, size_t size);
+  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>& keys() const;
+  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>* mutable_keys();
+  private:
+  const std::string& _internal_keys(int index) const;
+  std::string* _internal_add_keys();
+  public:
+
+  // repeated string values = 3;
+  int values_size() const;
+  private:
+  int _internal_values_size() const;
+  public:
+  void clear_values();
+  const std::string& values(int index) const;
+  std::string* mutable_values(int index);
+  void set_values(int index, const std::string& value);
+  void set_values(int index, std::string&& value);
+  void set_values(int index, const char* value);
+  void set_values(int index, const char* value, size_t size);
+  std::string* add_values();
+  void add_values(const std::string& value);
+  void add_values(std::string&& value);
+  void add_values(const char* value);
+  void add_values(const char* value, size_t size);
+  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>& values() const;
+  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>* mutable_values();
+  private:
+  const std::string& _internal_values(int index) const;
+  std::string* _internal_add_values();
+  public:
+
+  // optional string default_string = 1;
+  bool has_default_string() const;
+  private:
+  bool _internal_has_default_string() const;
+  public:
+  void clear_default_string();
+  const std::string& default_string() const;
+  template <typename ArgT0 = const std::string&, typename... ArgT>
+  void set_default_string(ArgT0&& arg0, ArgT... args);
+  std::string* mutable_default_string();
+  PROTOBUF_NODISCARD std::string* release_default_string();
+  void set_allocated_default_string(std::string* default_string);
+  private:
+  const std::string& _internal_default_string() const;
+  inline PROTOBUF_ALWAYS_INLINE void _internal_set_default_string(const std::string& value);
+  std::string* _internal_mutable_default_string();
+  public:
+
+  // @@protoc_insertion_point(class_scope:io.deephaven.proto.backplane.script.grpc.FigureDescriptor.StringMapWithDefault)
+ private:
+  class _Internal;
+
+  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
+  typedef void InternalArenaConstructable_;
+  typedef void DestructorSkippable_;
+  ::PROTOBUF_NAMESPACE_ID::internal::HasBits<1> _has_bits_;
+  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
+  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string> keys_;
+  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string> values_;
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr default_string_;
+  friend struct ::TableStruct_deephaven_2fproto_2fconsole_2eproto;
+};
+// -------------------------------------------------------------------
+
+class FigureDescriptor_DoubleMapWithDefault final :
+    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:io.deephaven.proto.backplane.script.grpc.FigureDescriptor.DoubleMapWithDefault) */ {
+ public:
+  inline FigureDescriptor_DoubleMapWithDefault() : FigureDescriptor_DoubleMapWithDefault(nullptr) {}
+  ~FigureDescriptor_DoubleMapWithDefault() override;
+  explicit PROTOBUF_CONSTEXPR FigureDescriptor_DoubleMapWithDefault(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
+
+  FigureDescriptor_DoubleMapWithDefault(const FigureDescriptor_DoubleMapWithDefault& from);
+  FigureDescriptor_DoubleMapWithDefault(FigureDescriptor_DoubleMapWithDefault&& from) noexcept
+    : FigureDescriptor_DoubleMapWithDefault() {
+    *this = ::std::move(from);
+  }
+
+  inline FigureDescriptor_DoubleMapWithDefault& operator=(const FigureDescriptor_DoubleMapWithDefault& from) {
+    CopyFrom(from);
+    return *this;
+  }
+  inline FigureDescriptor_DoubleMapWithDefault& operator=(FigureDescriptor_DoubleMapWithDefault&& from) noexcept {
+    if (this == &from) return *this;
+    if (GetOwningArena() == from.GetOwningArena()
+  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+        && GetOwningArena() != nullptr
+  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
+    ) {
+      InternalSwap(&from);
+    } else {
+      CopyFrom(from);
+    }
+    return *this;
+  }
+
+  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
+    return GetDescriptor();
+  }
+  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
+    return default_instance().GetMetadata().descriptor;
+  }
+  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
+    return default_instance().GetMetadata().reflection;
+  }
+  static const FigureDescriptor_DoubleMapWithDefault& default_instance() {
+    return *internal_default_instance();
+  }
+  static inline const FigureDescriptor_DoubleMapWithDefault* internal_default_instance() {
+    return reinterpret_cast<const FigureDescriptor_DoubleMapWithDefault*>(
+               &_FigureDescriptor_DoubleMapWithDefault_default_instance_);
+  }
+  static constexpr int kIndexInFileMessages =
+    49;
+
+  friend void swap(FigureDescriptor_DoubleMapWithDefault& a, FigureDescriptor_DoubleMapWithDefault& b) {
+    a.Swap(&b);
+  }
+  inline void Swap(FigureDescriptor_DoubleMapWithDefault* other) {
+    if (other == this) return;
+  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
+    if (GetOwningArena() != nullptr &&
+        GetOwningArena() == other->GetOwningArena()) {
+   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
+    if (GetOwningArena() == other->GetOwningArena()) {
+  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
+      InternalSwap(other);
+    } else {
+      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
+    }
+  }
+  void UnsafeArenaSwap(FigureDescriptor_DoubleMapWithDefault* other) {
+    if (other == this) return;
+    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
+    InternalSwap(other);
+  }
+
+  // implements Message ----------------------------------------------
+
+  FigureDescriptor_DoubleMapWithDefault* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
+    return CreateMaybeMessage<FigureDescriptor_DoubleMapWithDefault>(arena);
+  }
+  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
+  void CopyFrom(const FigureDescriptor_DoubleMapWithDefault& from);
+  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
+  void MergeFrom(const FigureDescriptor_DoubleMapWithDefault& from);
+  private:
+  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
+  public:
+  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
+  bool IsInitialized() const final;
+
+  size_t ByteSizeLong() const final;
+  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
+  uint8_t* _InternalSerialize(
+      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
+  int GetCachedSize() const final { return _cached_size_.Get(); }
+
+  private:
+  void SharedCtor();
+  void SharedDtor();
+  void SetCachedSize(int size) const final;
+  void InternalSwap(FigureDescriptor_DoubleMapWithDefault* other);
+
+  private:
+  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
+  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
+    return "io.deephaven.proto.backplane.script.grpc.FigureDescriptor.DoubleMapWithDefault";
+  }
+  protected:
+  explicit FigureDescriptor_DoubleMapWithDefault(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+                       bool is_message_owned = false);
+  public:
+
+  static const ClassData _class_data_;
+  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;
+
+  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
+
+  // nested types ----------------------------------------------------
+
+  // accessors -------------------------------------------------------
+
+  enum : int {
+    kKeysFieldNumber = 2,
+    kValuesFieldNumber = 3,
+    kDefaultDoubleFieldNumber = 1,
+  };
+  // repeated string keys = 2;
+  int keys_size() const;
+  private:
+  int _internal_keys_size() const;
+  public:
+  void clear_keys();
+  const std::string& keys(int index) const;
+  std::string* mutable_keys(int index);
+  void set_keys(int index, const std::string& value);
+  void set_keys(int index, std::string&& value);
+  void set_keys(int index, const char* value);
+  void set_keys(int index, const char* value, size_t size);
+  std::string* add_keys();
+  void add_keys(const std::string& value);
+  void add_keys(std::string&& value);
+  void add_keys(const char* value);
+  void add_keys(const char* value, size_t size);
+  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>& keys() const;
+  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>* mutable_keys();
+  private:
+  const std::string& _internal_keys(int index) const;
+  std::string* _internal_add_keys();
+  public:
+
+  // repeated double values = 3;
+  int values_size() const;
+  private:
+  int _internal_values_size() const;
+  public:
+  void clear_values();
+  private:
+  double _internal_values(int index) const;
+  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< double >&
+      _internal_values() const;
+  void _internal_add_values(double value);
+  ::PROTOBUF_NAMESPACE_ID::RepeatedField< double >*
+      _internal_mutable_values();
+  public:
+  double values(int index) const;
+  void set_values(int index, double value);
+  void add_values(double value);
+  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< double >&
+      values() const;
+  ::PROTOBUF_NAMESPACE_ID::RepeatedField< double >*
+      mutable_values();
+
+  // optional double default_double = 1;
+  bool has_default_double() const;
+  private:
+  bool _internal_has_default_double() const;
+  public:
+  void clear_default_double();
+  double default_double() const;
+  void set_default_double(double value);
+  private:
+  double _internal_default_double() const;
+  void _internal_set_default_double(double value);
+  public:
+
+  // @@protoc_insertion_point(class_scope:io.deephaven.proto.backplane.script.grpc.FigureDescriptor.DoubleMapWithDefault)
+ private:
+  class _Internal;
+
+  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
+  typedef void InternalArenaConstructable_;
+  typedef void DestructorSkippable_;
+  ::PROTOBUF_NAMESPACE_ID::internal::HasBits<1> _has_bits_;
+  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
+  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string> keys_;
+  ::PROTOBUF_NAMESPACE_ID::RepeatedField< double > values_;
+  double default_double_;
+  friend struct ::TableStruct_deephaven_2fproto_2fconsole_2eproto;
+};
+// -------------------------------------------------------------------
+
+class FigureDescriptor_BoolMapWithDefault final :
+    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BoolMapWithDefault) */ {
+ public:
+  inline FigureDescriptor_BoolMapWithDefault() : FigureDescriptor_BoolMapWithDefault(nullptr) {}
+  ~FigureDescriptor_BoolMapWithDefault() override;
+  explicit PROTOBUF_CONSTEXPR FigureDescriptor_BoolMapWithDefault(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
+
+  FigureDescriptor_BoolMapWithDefault(const FigureDescriptor_BoolMapWithDefault& from);
+  FigureDescriptor_BoolMapWithDefault(FigureDescriptor_BoolMapWithDefault&& from) noexcept
+    : FigureDescriptor_BoolMapWithDefault() {
+    *this = ::std::move(from);
+  }
+
+  inline FigureDescriptor_BoolMapWithDefault& operator=(const FigureDescriptor_BoolMapWithDefault& from) {
+    CopyFrom(from);
+    return *this;
+  }
+  inline FigureDescriptor_BoolMapWithDefault& operator=(FigureDescriptor_BoolMapWithDefault&& from) noexcept {
+    if (this == &from) return *this;
+    if (GetOwningArena() == from.GetOwningArena()
+  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+        && GetOwningArena() != nullptr
+  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
+    ) {
+      InternalSwap(&from);
+    } else {
+      CopyFrom(from);
+    }
+    return *this;
+  }
+
+  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
+    return GetDescriptor();
+  }
+  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
+    return default_instance().GetMetadata().descriptor;
+  }
+  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
+    return default_instance().GetMetadata().reflection;
+  }
+  static const FigureDescriptor_BoolMapWithDefault& default_instance() {
+    return *internal_default_instance();
+  }
+  static inline const FigureDescriptor_BoolMapWithDefault* internal_default_instance() {
+    return reinterpret_cast<const FigureDescriptor_BoolMapWithDefault*>(
+               &_FigureDescriptor_BoolMapWithDefault_default_instance_);
+  }
+  static constexpr int kIndexInFileMessages =
+    50;
+
+  friend void swap(FigureDescriptor_BoolMapWithDefault& a, FigureDescriptor_BoolMapWithDefault& b) {
+    a.Swap(&b);
+  }
+  inline void Swap(FigureDescriptor_BoolMapWithDefault* other) {
+    if (other == this) return;
+  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
+    if (GetOwningArena() != nullptr &&
+        GetOwningArena() == other->GetOwningArena()) {
+   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
+    if (GetOwningArena() == other->GetOwningArena()) {
+  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
+      InternalSwap(other);
+    } else {
+      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
+    }
+  }
+  void UnsafeArenaSwap(FigureDescriptor_BoolMapWithDefault* other) {
+    if (other == this) return;
+    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
+    InternalSwap(other);
+  }
+
+  // implements Message ----------------------------------------------
+
+  FigureDescriptor_BoolMapWithDefault* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
+    return CreateMaybeMessage<FigureDescriptor_BoolMapWithDefault>(arena);
+  }
+  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
+  void CopyFrom(const FigureDescriptor_BoolMapWithDefault& from);
+  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
+  void MergeFrom(const FigureDescriptor_BoolMapWithDefault& from);
+  private:
+  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
+  public:
+  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
+  bool IsInitialized() const final;
+
+  size_t ByteSizeLong() const final;
+  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
+  uint8_t* _InternalSerialize(
+      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
+  int GetCachedSize() const final { return _cached_size_.Get(); }
+
+  private:
+  void SharedCtor();
+  void SharedDtor();
+  void SetCachedSize(int size) const final;
+  void InternalSwap(FigureDescriptor_BoolMapWithDefault* other);
+
+  private:
+  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
+  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
+    return "io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BoolMapWithDefault";
+  }
+  protected:
+  explicit FigureDescriptor_BoolMapWithDefault(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+                       bool is_message_owned = false);
+  public:
+
+  static const ClassData _class_data_;
+  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;
+
+  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
+
+  // nested types ----------------------------------------------------
+
+  // accessors -------------------------------------------------------
+
+  enum : int {
+    kKeysFieldNumber = 2,
+    kValuesFieldNumber = 3,
+    kDefaultBoolFieldNumber = 1,
+  };
+  // repeated string keys = 2;
+  int keys_size() const;
+  private:
+  int _internal_keys_size() const;
+  public:
+  void clear_keys();
+  const std::string& keys(int index) const;
+  std::string* mutable_keys(int index);
+  void set_keys(int index, const std::string& value);
+  void set_keys(int index, std::string&& value);
+  void set_keys(int index, const char* value);
+  void set_keys(int index, const char* value, size_t size);
+  std::string* add_keys();
+  void add_keys(const std::string& value);
+  void add_keys(std::string&& value);
+  void add_keys(const char* value);
+  void add_keys(const char* value, size_t size);
+  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>& keys() const;
+  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>* mutable_keys();
+  private:
+  const std::string& _internal_keys(int index) const;
+  std::string* _internal_add_keys();
+  public:
+
+  // repeated bool values = 3;
+  int values_size() const;
+  private:
+  int _internal_values_size() const;
+  public:
+  void clear_values();
+  private:
+  bool _internal_values(int index) const;
+  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< bool >&
+      _internal_values() const;
+  void _internal_add_values(bool value);
+  ::PROTOBUF_NAMESPACE_ID::RepeatedField< bool >*
+      _internal_mutable_values();
+  public:
+  bool values(int index) const;
+  void set_values(int index, bool value);
+  void add_values(bool value);
+  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< bool >&
+      values() const;
+  ::PROTOBUF_NAMESPACE_ID::RepeatedField< bool >*
+      mutable_values();
+
+  // optional bool default_bool = 1;
+  bool has_default_bool() const;
+  private:
+  bool _internal_has_default_bool() const;
+  public:
+  void clear_default_bool();
+  bool default_bool() const;
+  void set_default_bool(bool value);
+  private:
+  bool _internal_default_bool() const;
+  void _internal_set_default_bool(bool value);
+  public:
+
+  // @@protoc_insertion_point(class_scope:io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BoolMapWithDefault)
+ private:
+  class _Internal;
+
+  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
+  typedef void InternalArenaConstructable_;
+  typedef void DestructorSkippable_;
+  ::PROTOBUF_NAMESPACE_ID::internal::HasBits<1> _has_bits_;
+  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
+  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string> keys_;
+  ::PROTOBUF_NAMESPACE_ID::RepeatedField< bool > values_;
+  bool default_bool_;
+  friend struct ::TableStruct_deephaven_2fproto_2fconsole_2eproto;
+};
+// -------------------------------------------------------------------
+
+class FigureDescriptor_AxisDescriptor final :
+    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:io.deephaven.proto.backplane.script.grpc.FigureDescriptor.AxisDescriptor) */ {
+ public:
+  inline FigureDescriptor_AxisDescriptor() : FigureDescriptor_AxisDescriptor(nullptr) {}
+  ~FigureDescriptor_AxisDescriptor() override;
+  explicit PROTOBUF_CONSTEXPR FigureDescriptor_AxisDescriptor(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
+
+  FigureDescriptor_AxisDescriptor(const FigureDescriptor_AxisDescriptor& from);
+  FigureDescriptor_AxisDescriptor(FigureDescriptor_AxisDescriptor&& from) noexcept
+    : FigureDescriptor_AxisDescriptor() {
+    *this = ::std::move(from);
+  }
+
+  inline FigureDescriptor_AxisDescriptor& operator=(const FigureDescriptor_AxisDescriptor& from) {
+    CopyFrom(from);
+    return *this;
+  }
+  inline FigureDescriptor_AxisDescriptor& operator=(FigureDescriptor_AxisDescriptor&& from) noexcept {
+    if (this == &from) return *this;
+    if (GetOwningArena() == from.GetOwningArena()
+  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+        && GetOwningArena() != nullptr
+  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
+    ) {
+      InternalSwap(&from);
+    } else {
+      CopyFrom(from);
+    }
+    return *this;
+  }
+
+  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
+    return GetDescriptor();
+  }
+  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
+    return default_instance().GetMetadata().descriptor;
+  }
+  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
+    return default_instance().GetMetadata().reflection;
+  }
+  static const FigureDescriptor_AxisDescriptor& default_instance() {
+    return *internal_default_instance();
+  }
+  static inline const FigureDescriptor_AxisDescriptor* internal_default_instance() {
+    return reinterpret_cast<const FigureDescriptor_AxisDescriptor*>(
+               &_FigureDescriptor_AxisDescriptor_default_instance_);
+  }
+  static constexpr int kIndexInFileMessages =
+    51;
+
+  friend void swap(FigureDescriptor_AxisDescriptor& a, FigureDescriptor_AxisDescriptor& b) {
+    a.Swap(&b);
+  }
+  inline void Swap(FigureDescriptor_AxisDescriptor* other) {
+    if (other == this) return;
+  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
+    if (GetOwningArena() != nullptr &&
+        GetOwningArena() == other->GetOwningArena()) {
+   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
+    if (GetOwningArena() == other->GetOwningArena()) {
+  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
+      InternalSwap(other);
+    } else {
+      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
+    }
+  }
+  void UnsafeArenaSwap(FigureDescriptor_AxisDescriptor* other) {
+    if (other == this) return;
+    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
+    InternalSwap(other);
+  }
+
+  // implements Message ----------------------------------------------
+
+  FigureDescriptor_AxisDescriptor* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
+    return CreateMaybeMessage<FigureDescriptor_AxisDescriptor>(arena);
+  }
+  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
+  void CopyFrom(const FigureDescriptor_AxisDescriptor& from);
+  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
+  void MergeFrom(const FigureDescriptor_AxisDescriptor& from);
+  private:
+  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
+  public:
+  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
+  bool IsInitialized() const final;
+
+  size_t ByteSizeLong() const final;
+  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
+  uint8_t* _InternalSerialize(
+      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
+  int GetCachedSize() const final { return _cached_size_.Get(); }
+
+  private:
+  void SharedCtor();
+  void SharedDtor();
+  void SetCachedSize(int size) const final;
+  void InternalSwap(FigureDescriptor_AxisDescriptor* other);
+
+  private:
+  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
+  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
+    return "io.deephaven.proto.backplane.script.grpc.FigureDescriptor.AxisDescriptor";
+  }
+  protected:
+  explicit FigureDescriptor_AxisDescriptor(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+                       bool is_message_owned = false);
+  public:
+
+  static const ClassData _class_data_;
+  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;
+
+  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
+
+  // nested types ----------------------------------------------------
+
+  typedef FigureDescriptor_AxisDescriptor_AxisFormatType AxisFormatType;
+  static constexpr AxisFormatType CATEGORY =
+    FigureDescriptor_AxisDescriptor_AxisFormatType_CATEGORY;
+  static constexpr AxisFormatType NUMBER =
+    FigureDescriptor_AxisDescriptor_AxisFormatType_NUMBER;
+  static inline bool AxisFormatType_IsValid(int value) {
+    return FigureDescriptor_AxisDescriptor_AxisFormatType_IsValid(value);
+  }
+  static constexpr AxisFormatType AxisFormatType_MIN =
+    FigureDescriptor_AxisDescriptor_AxisFormatType_AxisFormatType_MIN;
+  static constexpr AxisFormatType AxisFormatType_MAX =
+    FigureDescriptor_AxisDescriptor_AxisFormatType_AxisFormatType_MAX;
+  static constexpr int AxisFormatType_ARRAYSIZE =
+    FigureDescriptor_AxisDescriptor_AxisFormatType_AxisFormatType_ARRAYSIZE;
+  static inline const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor*
+  AxisFormatType_descriptor() {
+    return FigureDescriptor_AxisDescriptor_AxisFormatType_descriptor();
+  }
+  template<typename T>
+  static inline const std::string& AxisFormatType_Name(T enum_t_value) {
+    static_assert(::std::is_same<T, AxisFormatType>::value ||
+      ::std::is_integral<T>::value,
+      "Incorrect type passed to function AxisFormatType_Name.");
+    return FigureDescriptor_AxisDescriptor_AxisFormatType_Name(enum_t_value);
+  }
+  static inline bool AxisFormatType_Parse(::PROTOBUF_NAMESPACE_ID::ConstStringParam name,
+      AxisFormatType* value) {
+    return FigureDescriptor_AxisDescriptor_AxisFormatType_Parse(name, value);
+  }
+
+  typedef FigureDescriptor_AxisDescriptor_AxisType AxisType;
+  static constexpr AxisType X =
+    FigureDescriptor_AxisDescriptor_AxisType_X;
+  static constexpr AxisType Y =
+    FigureDescriptor_AxisDescriptor_AxisType_Y;
+  static constexpr AxisType SHAPE =
+    FigureDescriptor_AxisDescriptor_AxisType_SHAPE;
+  static constexpr AxisType SIZE =
+    FigureDescriptor_AxisDescriptor_AxisType_SIZE;
+  static constexpr AxisType LABEL =
+    FigureDescriptor_AxisDescriptor_AxisType_LABEL;
+  static constexpr AxisType COLOR =
+    FigureDescriptor_AxisDescriptor_AxisType_COLOR;
+  static inline bool AxisType_IsValid(int value) {
+    return FigureDescriptor_AxisDescriptor_AxisType_IsValid(value);
+  }
+  static constexpr AxisType AxisType_MIN =
+    FigureDescriptor_AxisDescriptor_AxisType_AxisType_MIN;
+  static constexpr AxisType AxisType_MAX =
+    FigureDescriptor_AxisDescriptor_AxisType_AxisType_MAX;
+  static constexpr int AxisType_ARRAYSIZE =
+    FigureDescriptor_AxisDescriptor_AxisType_AxisType_ARRAYSIZE;
+  static inline const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor*
+  AxisType_descriptor() {
+    return FigureDescriptor_AxisDescriptor_AxisType_descriptor();
+  }
+  template<typename T>
+  static inline const std::string& AxisType_Name(T enum_t_value) {
+    static_assert(::std::is_same<T, AxisType>::value ||
+      ::std::is_integral<T>::value,
+      "Incorrect type passed to function AxisType_Name.");
+    return FigureDescriptor_AxisDescriptor_AxisType_Name(enum_t_value);
+  }
+  static inline bool AxisType_Parse(::PROTOBUF_NAMESPACE_ID::ConstStringParam name,
+      AxisType* value) {
+    return FigureDescriptor_AxisDescriptor_AxisType_Parse(name, value);
+  }
+
+  typedef FigureDescriptor_AxisDescriptor_AxisPosition AxisPosition;
+  static constexpr AxisPosition TOP =
+    FigureDescriptor_AxisDescriptor_AxisPosition_TOP;
+  static constexpr AxisPosition BOTTOM =
+    FigureDescriptor_AxisDescriptor_AxisPosition_BOTTOM;
+  static constexpr AxisPosition LEFT =
+    FigureDescriptor_AxisDescriptor_AxisPosition_LEFT;
+  static constexpr AxisPosition RIGHT =
+    FigureDescriptor_AxisDescriptor_AxisPosition_RIGHT;
+  static constexpr AxisPosition NONE =
+    FigureDescriptor_AxisDescriptor_AxisPosition_NONE;
+  static inline bool AxisPosition_IsValid(int value) {
+    return FigureDescriptor_AxisDescriptor_AxisPosition_IsValid(value);
+  }
+  static constexpr AxisPosition AxisPosition_MIN =
+    FigureDescriptor_AxisDescriptor_AxisPosition_AxisPosition_MIN;
+  static constexpr AxisPosition AxisPosition_MAX =
+    FigureDescriptor_AxisDescriptor_AxisPosition_AxisPosition_MAX;
+  static constexpr int AxisPosition_ARRAYSIZE =
+    FigureDescriptor_AxisDescriptor_AxisPosition_AxisPosition_ARRAYSIZE;
+  static inline const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor*
+  AxisPosition_descriptor() {
+    return FigureDescriptor_AxisDescriptor_AxisPosition_descriptor();
+  }
+  template<typename T>
+  static inline const std::string& AxisPosition_Name(T enum_t_value) {
+    static_assert(::std::is_same<T, AxisPosition>::value ||
+      ::std::is_integral<T>::value,
+      "Incorrect type passed to function AxisPosition_Name.");
+    return FigureDescriptor_AxisDescriptor_AxisPosition_Name(enum_t_value);
+  }
+  static inline bool AxisPosition_Parse(::PROTOBUF_NAMESPACE_ID::ConstStringParam name,
+      AxisPosition* value) {
+    return FigureDescriptor_AxisDescriptor_AxisPosition_Parse(name, value);
+  }
+
+  // accessors -------------------------------------------------------
+
+  enum : int {
+    kMajorTickLocationsFieldNumber = 17,
+    kIdFieldNumber = 1,
+    kLabelFieldNumber = 6,
+    kLabelFontFieldNumber = 7,
+    kTicksFontFieldNumber = 8,
+    kFormatPatternFieldNumber = 9,
+    kColorFieldNumber = 10,
+    kBusinessCalendarDescriptorFieldNumber = 21,
+    kFormatTypeFieldNumber = 2,
+    kTypeFieldNumber = 3,
+    kMinRangeFieldNumber = 11,
+    kPositionFieldNumber = 4,
+    kLogFieldNumber = 5,
+    kMinorTicksVisibleFieldNumber = 13,
+    kMajorTicksVisibleFieldNumber = 14,
+    kInvertFieldNumber = 19,
+    kMaxRangeFieldNumber = 12,
+    kGapBetweenMajorTicksFieldNumber = 16,
+    kMinorTickCountFieldNumber = 15,
+    kIsTimeAxisFieldNumber = 20,
+    kTickLabelAngleFieldNumber = 18,
+  };
+  // repeated double major_tick_locations = 17;
+  int major_tick_locations_size() const;
+  private:
+  int _internal_major_tick_locations_size() const;
+  public:
+  void clear_major_tick_locations();
+  private:
+  double _internal_major_tick_locations(int index) const;
+  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< double >&
+      _internal_major_tick_locations() const;
+  void _internal_add_major_tick_locations(double value);
+  ::PROTOBUF_NAMESPACE_ID::RepeatedField< double >*
+      _internal_mutable_major_tick_locations();
+  public:
+  double major_tick_locations(int index) const;
+  void set_major_tick_locations(int index, double value);
+  void add_major_tick_locations(double value);
+  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< double >&
+      major_tick_locations() const;
+  ::PROTOBUF_NAMESPACE_ID::RepeatedField< double >*
+      mutable_major_tick_locations();
+
+  // string id = 1;
+  void clear_id();
+  const std::string& id() const;
+  template <typename ArgT0 = const std::string&, typename... ArgT>
+  void set_id(ArgT0&& arg0, ArgT... args);
+  std::string* mutable_id();
+  PROTOBUF_NODISCARD std::string* release_id();
+  void set_allocated_id(std::string* id);
+  private:
+  const std::string& _internal_id() const;
+  inline PROTOBUF_ALWAYS_INLINE void _internal_set_id(const std::string& value);
+  std::string* _internal_mutable_id();
+  public:
+
+  // string label = 6;
+  void clear_label();
+  const std::string& label() const;
+  template <typename ArgT0 = const std::string&, typename... ArgT>
+  void set_label(ArgT0&& arg0, ArgT... args);
+  std::string* mutable_label();
+  PROTOBUF_NODISCARD std::string* release_label();
+  void set_allocated_label(std::string* label);
+  private:
+  const std::string& _internal_label() const;
+  inline PROTOBUF_ALWAYS_INLINE void _internal_set_label(const std::string& value);
+  std::string* _internal_mutable_label();
+  public:
+
+  // string label_font = 7;
+  void clear_label_font();
+  const std::string& label_font() const;
+  template <typename ArgT0 = const std::string&, typename... ArgT>
+  void set_label_font(ArgT0&& arg0, ArgT... args);
+  std::string* mutable_label_font();
+  PROTOBUF_NODISCARD std::string* release_label_font();
+  void set_allocated_label_font(std::string* label_font);
+  private:
+  const std::string& _internal_label_font() const;
+  inline PROTOBUF_ALWAYS_INLINE void _internal_set_label_font(const std::string& value);
+  std::string* _internal_mutable_label_font();
+  public:
+
+  // string ticks_font = 8;
+  void clear_ticks_font();
+  const std::string& ticks_font() const;
+  template <typename ArgT0 = const std::string&, typename... ArgT>
+  void set_ticks_font(ArgT0&& arg0, ArgT... args);
+  std::string* mutable_ticks_font();
+  PROTOBUF_NODISCARD std::string* release_ticks_font();
+  void set_allocated_ticks_font(std::string* ticks_font);
+  private:
+  const std::string& _internal_ticks_font() const;
+  inline PROTOBUF_ALWAYS_INLINE void _internal_set_ticks_font(const std::string& value);
+  std::string* _internal_mutable_ticks_font();
+  public:
+
+  // optional string format_pattern = 9;
+  bool has_format_pattern() const;
+  private:
+  bool _internal_has_format_pattern() const;
+  public:
+  void clear_format_pattern();
+  const std::string& format_pattern() const;
+  template <typename ArgT0 = const std::string&, typename... ArgT>
+  void set_format_pattern(ArgT0&& arg0, ArgT... args);
+  std::string* mutable_format_pattern();
+  PROTOBUF_NODISCARD std::string* release_format_pattern();
+  void set_allocated_format_pattern(std::string* format_pattern);
+  private:
+  const std::string& _internal_format_pattern() const;
+  inline PROTOBUF_ALWAYS_INLINE void _internal_set_format_pattern(const std::string& value);
+  std::string* _internal_mutable_format_pattern();
+  public:
+
+  // string color = 10;
+  void clear_color();
+  const std::string& color() const;
+  template <typename ArgT0 = const std::string&, typename... ArgT>
+  void set_color(ArgT0&& arg0, ArgT... args);
+  std::string* mutable_color();
+  PROTOBUF_NODISCARD std::string* release_color();
+  void set_allocated_color(std::string* color);
+  private:
+  const std::string& _internal_color() const;
+  inline PROTOBUF_ALWAYS_INLINE void _internal_set_color(const std::string& value);
+  std::string* _internal_mutable_color();
+  public:
+
+  // .io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BusinessCalendarDescriptor business_calendar_descriptor = 21;
+  bool has_business_calendar_descriptor() const;
+  private:
+  bool _internal_has_business_calendar_descriptor() const;
+  public:
+  void clear_business_calendar_descriptor();
+  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor& business_calendar_descriptor() const;
+  PROTOBUF_NODISCARD ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor* release_business_calendar_descriptor();
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor* mutable_business_calendar_descriptor();
+  void set_allocated_business_calendar_descriptor(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor* business_calendar_descriptor);
+  private:
+  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor& _internal_business_calendar_descriptor() const;
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor* _internal_mutable_business_calendar_descriptor();
+  public:
+  void unsafe_arena_set_allocated_business_calendar_descriptor(
+      ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor* business_calendar_descriptor);
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor* unsafe_arena_release_business_calendar_descriptor();
+
+  // .io.deephaven.proto.backplane.script.grpc.FigureDescriptor.AxisDescriptor.AxisFormatType format_type = 2;
+  void clear_format_type();
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_AxisDescriptor_AxisFormatType format_type() const;
+  void set_format_type(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_AxisDescriptor_AxisFormatType value);
+  private:
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_AxisDescriptor_AxisFormatType _internal_format_type() const;
+  void _internal_set_format_type(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_AxisDescriptor_AxisFormatType value);
+  public:
+
+  // .io.deephaven.proto.backplane.script.grpc.FigureDescriptor.AxisDescriptor.AxisType type = 3;
+  void clear_type();
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_AxisDescriptor_AxisType type() const;
+  void set_type(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_AxisDescriptor_AxisType value);
+  private:
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_AxisDescriptor_AxisType _internal_type() const;
+  void _internal_set_type(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_AxisDescriptor_AxisType value);
+  public:
+
+  // double min_range = 11;
+  void clear_min_range();
+  double min_range() const;
+  void set_min_range(double value);
+  private:
+  double _internal_min_range() const;
+  void _internal_set_min_range(double value);
+  public:
+
+  // .io.deephaven.proto.backplane.script.grpc.FigureDescriptor.AxisDescriptor.AxisPosition position = 4;
+  void clear_position();
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_AxisDescriptor_AxisPosition position() const;
+  void set_position(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_AxisDescriptor_AxisPosition value);
+  private:
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_AxisDescriptor_AxisPosition _internal_position() const;
+  void _internal_set_position(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_AxisDescriptor_AxisPosition value);
+  public:
+
+  // bool log = 5;
+  void clear_log();
+  bool log() const;
+  void set_log(bool value);
+  private:
+  bool _internal_log() const;
+  void _internal_set_log(bool value);
+  public:
+
+  // bool minor_ticks_visible = 13;
+  void clear_minor_ticks_visible();
+  bool minor_ticks_visible() const;
+  void set_minor_ticks_visible(bool value);
+  private:
+  bool _internal_minor_ticks_visible() const;
+  void _internal_set_minor_ticks_visible(bool value);
+  public:
+
+  // bool major_ticks_visible = 14;
+  void clear_major_ticks_visible();
+  bool major_ticks_visible() const;
+  void set_major_ticks_visible(bool value);
+  private:
+  bool _internal_major_ticks_visible() const;
+  void _internal_set_major_ticks_visible(bool value);
+  public:
+
+  // bool invert = 19;
+  void clear_invert();
+  bool invert() const;
+  void set_invert(bool value);
+  private:
+  bool _internal_invert() const;
+  void _internal_set_invert(bool value);
+  public:
+
+  // double max_range = 12;
+  void clear_max_range();
+  double max_range() const;
+  void set_max_range(double value);
+  private:
+  double _internal_max_range() const;
+  void _internal_set_max_range(double value);
+  public:
+
+  // optional double gap_between_major_ticks = 16;
+  bool has_gap_between_major_ticks() const;
+  private:
+  bool _internal_has_gap_between_major_ticks() const;
+  public:
+  void clear_gap_between_major_ticks();
+  double gap_between_major_ticks() const;
+  void set_gap_between_major_ticks(double value);
+  private:
+  double _internal_gap_between_major_ticks() const;
+  void _internal_set_gap_between_major_ticks(double value);
+  public:
+
+  // int32 minor_tick_count = 15;
+  void clear_minor_tick_count();
+  int32_t minor_tick_count() const;
+  void set_minor_tick_count(int32_t value);
+  private:
+  int32_t _internal_minor_tick_count() const;
+  void _internal_set_minor_tick_count(int32_t value);
+  public:
+
+  // bool is_time_axis = 20;
+  void clear_is_time_axis();
+  bool is_time_axis() const;
+  void set_is_time_axis(bool value);
+  private:
+  bool _internal_is_time_axis() const;
+  void _internal_set_is_time_axis(bool value);
+  public:
+
+  // double tick_label_angle = 18;
+  void clear_tick_label_angle();
+  double tick_label_angle() const;
+  void set_tick_label_angle(double value);
+  private:
+  double _internal_tick_label_angle() const;
+  void _internal_set_tick_label_angle(double value);
+  public:
+
+  // @@protoc_insertion_point(class_scope:io.deephaven.proto.backplane.script.grpc.FigureDescriptor.AxisDescriptor)
+ private:
+  class _Internal;
+
+  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
+  typedef void InternalArenaConstructable_;
+  typedef void DestructorSkippable_;
+  ::PROTOBUF_NAMESPACE_ID::internal::HasBits<1> _has_bits_;
+  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
+  ::PROTOBUF_NAMESPACE_ID::RepeatedField< double > major_tick_locations_;
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr id_;
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr label_;
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr label_font_;
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr ticks_font_;
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr format_pattern_;
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr color_;
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor* business_calendar_descriptor_;
+  int format_type_;
+  int type_;
+  double min_range_;
+  int position_;
+  bool log_;
+  bool minor_ticks_visible_;
+  bool major_ticks_visible_;
+  bool invert_;
+  double max_range_;
+  double gap_between_major_ticks_;
+  int32_t minor_tick_count_;
+  bool is_time_axis_;
+  double tick_label_angle_;
+  friend struct ::TableStruct_deephaven_2fproto_2fconsole_2eproto;
+};
+// -------------------------------------------------------------------
+
+class FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod final :
+    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BusinessCalendarDescriptor.BusinessPeriod) */ {
+ public:
+  inline FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod() : FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod(nullptr) {}
+  ~FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod() override;
+  explicit PROTOBUF_CONSTEXPR FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
+
+  FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod(const FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod& from);
+  FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod(FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod&& from) noexcept
+    : FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod() {
+    *this = ::std::move(from);
+  }
+
+  inline FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod& operator=(const FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod& from) {
+    CopyFrom(from);
+    return *this;
+  }
+  inline FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod& operator=(FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod&& from) noexcept {
+    if (this == &from) return *this;
+    if (GetOwningArena() == from.GetOwningArena()
+  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+        && GetOwningArena() != nullptr
+  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
+    ) {
+      InternalSwap(&from);
+    } else {
+      CopyFrom(from);
+    }
+    return *this;
+  }
+
+  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
+    return GetDescriptor();
+  }
+  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
+    return default_instance().GetMetadata().descriptor;
+  }
+  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
+    return default_instance().GetMetadata().reflection;
+  }
+  static const FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod& default_instance() {
+    return *internal_default_instance();
+  }
+  static inline const FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod* internal_default_instance() {
+    return reinterpret_cast<const FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod*>(
+               &_FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod_default_instance_);
+  }
+  static constexpr int kIndexInFileMessages =
+    52;
+
+  friend void swap(FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod& a, FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod& b) {
+    a.Swap(&b);
+  }
+  inline void Swap(FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod* other) {
+    if (other == this) return;
+  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
+    if (GetOwningArena() != nullptr &&
+        GetOwningArena() == other->GetOwningArena()) {
+   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
+    if (GetOwningArena() == other->GetOwningArena()) {
+  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
+      InternalSwap(other);
+    } else {
+      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
+    }
+  }
+  void UnsafeArenaSwap(FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod* other) {
+    if (other == this) return;
+    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
+    InternalSwap(other);
+  }
+
+  // implements Message ----------------------------------------------
+
+  FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
+    return CreateMaybeMessage<FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod>(arena);
+  }
+  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
+  void CopyFrom(const FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod& from);
+  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
+  void MergeFrom(const FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod& from);
+  private:
+  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
+  public:
+  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
+  bool IsInitialized() const final;
+
+  size_t ByteSizeLong() const final;
+  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
+  uint8_t* _InternalSerialize(
+      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
+  int GetCachedSize() const final { return _cached_size_.Get(); }
+
+  private:
+  void SharedCtor();
+  void SharedDtor();
+  void SetCachedSize(int size) const final;
+  void InternalSwap(FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod* other);
+
+  private:
+  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
+  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
+    return "io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BusinessCalendarDescriptor.BusinessPeriod";
+  }
+  protected:
+  explicit FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+                       bool is_message_owned = false);
+  public:
+
+  static const ClassData _class_data_;
+  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;
+
+  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
+
+  // nested types ----------------------------------------------------
+
+  // accessors -------------------------------------------------------
+
+  enum : int {
+    kOpenFieldNumber = 1,
+    kCloseFieldNumber = 2,
+  };
+  // string open = 1;
+  void clear_open();
+  const std::string& open() const;
+  template <typename ArgT0 = const std::string&, typename... ArgT>
+  void set_open(ArgT0&& arg0, ArgT... args);
+  std::string* mutable_open();
+  PROTOBUF_NODISCARD std::string* release_open();
+  void set_allocated_open(std::string* open);
+  private:
+  const std::string& _internal_open() const;
+  inline PROTOBUF_ALWAYS_INLINE void _internal_set_open(const std::string& value);
+  std::string* _internal_mutable_open();
+  public:
+
+  // string close = 2;
+  void clear_close();
+  const std::string& close() const;
+  template <typename ArgT0 = const std::string&, typename... ArgT>
+  void set_close(ArgT0&& arg0, ArgT... args);
+  std::string* mutable_close();
+  PROTOBUF_NODISCARD std::string* release_close();
+  void set_allocated_close(std::string* close);
+  private:
+  const std::string& _internal_close() const;
+  inline PROTOBUF_ALWAYS_INLINE void _internal_set_close(const std::string& value);
+  std::string* _internal_mutable_close();
+  public:
+
+  // @@protoc_insertion_point(class_scope:io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BusinessCalendarDescriptor.BusinessPeriod)
+ private:
+  class _Internal;
+
+  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
+  typedef void InternalArenaConstructable_;
+  typedef void DestructorSkippable_;
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr open_;
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr close_;
+  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
+  friend struct ::TableStruct_deephaven_2fproto_2fconsole_2eproto;
+};
+// -------------------------------------------------------------------
+
+class FigureDescriptor_BusinessCalendarDescriptor_Holiday final :
+    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BusinessCalendarDescriptor.Holiday) */ {
+ public:
+  inline FigureDescriptor_BusinessCalendarDescriptor_Holiday() : FigureDescriptor_BusinessCalendarDescriptor_Holiday(nullptr) {}
+  ~FigureDescriptor_BusinessCalendarDescriptor_Holiday() override;
+  explicit PROTOBUF_CONSTEXPR FigureDescriptor_BusinessCalendarDescriptor_Holiday(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
+
+  FigureDescriptor_BusinessCalendarDescriptor_Holiday(const FigureDescriptor_BusinessCalendarDescriptor_Holiday& from);
+  FigureDescriptor_BusinessCalendarDescriptor_Holiday(FigureDescriptor_BusinessCalendarDescriptor_Holiday&& from) noexcept
+    : FigureDescriptor_BusinessCalendarDescriptor_Holiday() {
+    *this = ::std::move(from);
+  }
+
+  inline FigureDescriptor_BusinessCalendarDescriptor_Holiday& operator=(const FigureDescriptor_BusinessCalendarDescriptor_Holiday& from) {
+    CopyFrom(from);
+    return *this;
+  }
+  inline FigureDescriptor_BusinessCalendarDescriptor_Holiday& operator=(FigureDescriptor_BusinessCalendarDescriptor_Holiday&& from) noexcept {
+    if (this == &from) return *this;
+    if (GetOwningArena() == from.GetOwningArena()
+  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+        && GetOwningArena() != nullptr
+  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
+    ) {
+      InternalSwap(&from);
+    } else {
+      CopyFrom(from);
+    }
+    return *this;
+  }
+
+  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
+    return GetDescriptor();
+  }
+  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
+    return default_instance().GetMetadata().descriptor;
+  }
+  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
+    return default_instance().GetMetadata().reflection;
+  }
+  static const FigureDescriptor_BusinessCalendarDescriptor_Holiday& default_instance() {
+    return *internal_default_instance();
+  }
+  static inline const FigureDescriptor_BusinessCalendarDescriptor_Holiday* internal_default_instance() {
+    return reinterpret_cast<const FigureDescriptor_BusinessCalendarDescriptor_Holiday*>(
+               &_FigureDescriptor_BusinessCalendarDescriptor_Holiday_default_instance_);
+  }
+  static constexpr int kIndexInFileMessages =
+    53;
+
+  friend void swap(FigureDescriptor_BusinessCalendarDescriptor_Holiday& a, FigureDescriptor_BusinessCalendarDescriptor_Holiday& b) {
+    a.Swap(&b);
+  }
+  inline void Swap(FigureDescriptor_BusinessCalendarDescriptor_Holiday* other) {
+    if (other == this) return;
+  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
+    if (GetOwningArena() != nullptr &&
+        GetOwningArena() == other->GetOwningArena()) {
+   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
+    if (GetOwningArena() == other->GetOwningArena()) {
+  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
+      InternalSwap(other);
+    } else {
+      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
+    }
+  }
+  void UnsafeArenaSwap(FigureDescriptor_BusinessCalendarDescriptor_Holiday* other) {
+    if (other == this) return;
+    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
+    InternalSwap(other);
+  }
+
+  // implements Message ----------------------------------------------
+
+  FigureDescriptor_BusinessCalendarDescriptor_Holiday* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
+    return CreateMaybeMessage<FigureDescriptor_BusinessCalendarDescriptor_Holiday>(arena);
+  }
+  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
+  void CopyFrom(const FigureDescriptor_BusinessCalendarDescriptor_Holiday& from);
+  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
+  void MergeFrom(const FigureDescriptor_BusinessCalendarDescriptor_Holiday& from);
+  private:
+  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
+  public:
+  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
+  bool IsInitialized() const final;
+
+  size_t ByteSizeLong() const final;
+  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
+  uint8_t* _InternalSerialize(
+      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
+  int GetCachedSize() const final { return _cached_size_.Get(); }
+
+  private:
+  void SharedCtor();
+  void SharedDtor();
+  void SetCachedSize(int size) const final;
+  void InternalSwap(FigureDescriptor_BusinessCalendarDescriptor_Holiday* other);
+
+  private:
+  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
+  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
+    return "io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BusinessCalendarDescriptor.Holiday";
+  }
+  protected:
+  explicit FigureDescriptor_BusinessCalendarDescriptor_Holiday(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+                       bool is_message_owned = false);
+  public:
+
+  static const ClassData _class_data_;
+  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;
+
+  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
+
+  // nested types ----------------------------------------------------
+
+  // accessors -------------------------------------------------------
+
+  enum : int {
+    kBusinessPeriodsFieldNumber = 2,
+    kDateFieldNumber = 1,
+  };
+  // repeated .io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BusinessCalendarDescriptor.BusinessPeriod business_periods = 2;
+  int business_periods_size() const;
+  private:
+  int _internal_business_periods_size() const;
+  public:
+  void clear_business_periods();
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod* mutable_business_periods(int index);
+  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod >*
+      mutable_business_periods();
+  private:
+  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod& _internal_business_periods(int index) const;
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod* _internal_add_business_periods();
+  public:
+  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod& business_periods(int index) const;
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod* add_business_periods();
+  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod >&
+      business_periods() const;
+
+  // .io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BusinessCalendarDescriptor.LocalDate date = 1;
+  bool has_date() const;
+  private:
+  bool _internal_has_date() const;
+  public:
+  void clear_date();
+  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor_LocalDate& date() const;
+  PROTOBUF_NODISCARD ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor_LocalDate* release_date();
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor_LocalDate* mutable_date();
+  void set_allocated_date(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor_LocalDate* date);
+  private:
+  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor_LocalDate& _internal_date() const;
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor_LocalDate* _internal_mutable_date();
+  public:
+  void unsafe_arena_set_allocated_date(
+      ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor_LocalDate* date);
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor_LocalDate* unsafe_arena_release_date();
+
+  // @@protoc_insertion_point(class_scope:io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BusinessCalendarDescriptor.Holiday)
+ private:
+  class _Internal;
+
+  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
+  typedef void InternalArenaConstructable_;
+  typedef void DestructorSkippable_;
+  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod > business_periods_;
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor_LocalDate* date_;
+  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
+  friend struct ::TableStruct_deephaven_2fproto_2fconsole_2eproto;
+};
+// -------------------------------------------------------------------
+
+class FigureDescriptor_BusinessCalendarDescriptor_LocalDate final :
+    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BusinessCalendarDescriptor.LocalDate) */ {
+ public:
+  inline FigureDescriptor_BusinessCalendarDescriptor_LocalDate() : FigureDescriptor_BusinessCalendarDescriptor_LocalDate(nullptr) {}
+  ~FigureDescriptor_BusinessCalendarDescriptor_LocalDate() override;
+  explicit PROTOBUF_CONSTEXPR FigureDescriptor_BusinessCalendarDescriptor_LocalDate(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
+
+  FigureDescriptor_BusinessCalendarDescriptor_LocalDate(const FigureDescriptor_BusinessCalendarDescriptor_LocalDate& from);
+  FigureDescriptor_BusinessCalendarDescriptor_LocalDate(FigureDescriptor_BusinessCalendarDescriptor_LocalDate&& from) noexcept
+    : FigureDescriptor_BusinessCalendarDescriptor_LocalDate() {
+    *this = ::std::move(from);
+  }
+
+  inline FigureDescriptor_BusinessCalendarDescriptor_LocalDate& operator=(const FigureDescriptor_BusinessCalendarDescriptor_LocalDate& from) {
+    CopyFrom(from);
+    return *this;
+  }
+  inline FigureDescriptor_BusinessCalendarDescriptor_LocalDate& operator=(FigureDescriptor_BusinessCalendarDescriptor_LocalDate&& from) noexcept {
+    if (this == &from) return *this;
+    if (GetOwningArena() == from.GetOwningArena()
+  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+        && GetOwningArena() != nullptr
+  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
+    ) {
+      InternalSwap(&from);
+    } else {
+      CopyFrom(from);
+    }
+    return *this;
+  }
+
+  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
+    return GetDescriptor();
+  }
+  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
+    return default_instance().GetMetadata().descriptor;
+  }
+  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
+    return default_instance().GetMetadata().reflection;
+  }
+  static const FigureDescriptor_BusinessCalendarDescriptor_LocalDate& default_instance() {
+    return *internal_default_instance();
+  }
+  static inline const FigureDescriptor_BusinessCalendarDescriptor_LocalDate* internal_default_instance() {
+    return reinterpret_cast<const FigureDescriptor_BusinessCalendarDescriptor_LocalDate*>(
+               &_FigureDescriptor_BusinessCalendarDescriptor_LocalDate_default_instance_);
+  }
+  static constexpr int kIndexInFileMessages =
+    54;
+
+  friend void swap(FigureDescriptor_BusinessCalendarDescriptor_LocalDate& a, FigureDescriptor_BusinessCalendarDescriptor_LocalDate& b) {
+    a.Swap(&b);
+  }
+  inline void Swap(FigureDescriptor_BusinessCalendarDescriptor_LocalDate* other) {
+    if (other == this) return;
+  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
+    if (GetOwningArena() != nullptr &&
+        GetOwningArena() == other->GetOwningArena()) {
+   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
+    if (GetOwningArena() == other->GetOwningArena()) {
+  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
+      InternalSwap(other);
+    } else {
+      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
+    }
+  }
+  void UnsafeArenaSwap(FigureDescriptor_BusinessCalendarDescriptor_LocalDate* other) {
+    if (other == this) return;
+    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
+    InternalSwap(other);
+  }
+
+  // implements Message ----------------------------------------------
+
+  FigureDescriptor_BusinessCalendarDescriptor_LocalDate* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
+    return CreateMaybeMessage<FigureDescriptor_BusinessCalendarDescriptor_LocalDate>(arena);
+  }
+  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
+  void CopyFrom(const FigureDescriptor_BusinessCalendarDescriptor_LocalDate& from);
+  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
+  void MergeFrom(const FigureDescriptor_BusinessCalendarDescriptor_LocalDate& from);
+  private:
+  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
+  public:
+  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
+  bool IsInitialized() const final;
+
+  size_t ByteSizeLong() const final;
+  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
+  uint8_t* _InternalSerialize(
+      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
+  int GetCachedSize() const final { return _cached_size_.Get(); }
+
+  private:
+  void SharedCtor();
+  void SharedDtor();
+  void SetCachedSize(int size) const final;
+  void InternalSwap(FigureDescriptor_BusinessCalendarDescriptor_LocalDate* other);
+
+  private:
+  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
+  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
+    return "io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BusinessCalendarDescriptor.LocalDate";
+  }
+  protected:
+  explicit FigureDescriptor_BusinessCalendarDescriptor_LocalDate(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+                       bool is_message_owned = false);
+  public:
+
+  static const ClassData _class_data_;
+  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;
+
+  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
+
+  // nested types ----------------------------------------------------
+
+  // accessors -------------------------------------------------------
+
+  enum : int {
+    kYearFieldNumber = 1,
+    kMonthFieldNumber = 2,
+    kDayFieldNumber = 3,
+  };
+  // int32 year = 1;
+  void clear_year();
+  int32_t year() const;
+  void set_year(int32_t value);
+  private:
+  int32_t _internal_year() const;
+  void _internal_set_year(int32_t value);
+  public:
+
+  // int32 month = 2;
+  void clear_month();
+  int32_t month() const;
+  void set_month(int32_t value);
+  private:
+  int32_t _internal_month() const;
+  void _internal_set_month(int32_t value);
+  public:
+
+  // int32 day = 3;
+  void clear_day();
+  int32_t day() const;
+  void set_day(int32_t value);
+  private:
+  int32_t _internal_day() const;
+  void _internal_set_day(int32_t value);
+  public:
+
+  // @@protoc_insertion_point(class_scope:io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BusinessCalendarDescriptor.LocalDate)
+ private:
+  class _Internal;
+
+  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
+  typedef void InternalArenaConstructable_;
+  typedef void DestructorSkippable_;
+  int32_t year_;
+  int32_t month_;
+  int32_t day_;
+  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
+  friend struct ::TableStruct_deephaven_2fproto_2fconsole_2eproto;
+};
+// -------------------------------------------------------------------
+
+class FigureDescriptor_BusinessCalendarDescriptor final :
+    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BusinessCalendarDescriptor) */ {
+ public:
+  inline FigureDescriptor_BusinessCalendarDescriptor() : FigureDescriptor_BusinessCalendarDescriptor(nullptr) {}
+  ~FigureDescriptor_BusinessCalendarDescriptor() override;
+  explicit PROTOBUF_CONSTEXPR FigureDescriptor_BusinessCalendarDescriptor(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
+
+  FigureDescriptor_BusinessCalendarDescriptor(const FigureDescriptor_BusinessCalendarDescriptor& from);
+  FigureDescriptor_BusinessCalendarDescriptor(FigureDescriptor_BusinessCalendarDescriptor&& from) noexcept
+    : FigureDescriptor_BusinessCalendarDescriptor() {
+    *this = ::std::move(from);
+  }
+
+  inline FigureDescriptor_BusinessCalendarDescriptor& operator=(const FigureDescriptor_BusinessCalendarDescriptor& from) {
+    CopyFrom(from);
+    return *this;
+  }
+  inline FigureDescriptor_BusinessCalendarDescriptor& operator=(FigureDescriptor_BusinessCalendarDescriptor&& from) noexcept {
+    if (this == &from) return *this;
+    if (GetOwningArena() == from.GetOwningArena()
+  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+        && GetOwningArena() != nullptr
+  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
+    ) {
+      InternalSwap(&from);
+    } else {
+      CopyFrom(from);
+    }
+    return *this;
+  }
+
+  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
+    return GetDescriptor();
+  }
+  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
+    return default_instance().GetMetadata().descriptor;
+  }
+  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
+    return default_instance().GetMetadata().reflection;
+  }
+  static const FigureDescriptor_BusinessCalendarDescriptor& default_instance() {
+    return *internal_default_instance();
+  }
+  static inline const FigureDescriptor_BusinessCalendarDescriptor* internal_default_instance() {
+    return reinterpret_cast<const FigureDescriptor_BusinessCalendarDescriptor*>(
+               &_FigureDescriptor_BusinessCalendarDescriptor_default_instance_);
+  }
+  static constexpr int kIndexInFileMessages =
+    55;
+
+  friend void swap(FigureDescriptor_BusinessCalendarDescriptor& a, FigureDescriptor_BusinessCalendarDescriptor& b) {
+    a.Swap(&b);
+  }
+  inline void Swap(FigureDescriptor_BusinessCalendarDescriptor* other) {
+    if (other == this) return;
+  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
+    if (GetOwningArena() != nullptr &&
+        GetOwningArena() == other->GetOwningArena()) {
+   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
+    if (GetOwningArena() == other->GetOwningArena()) {
+  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
+      InternalSwap(other);
+    } else {
+      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
+    }
+  }
+  void UnsafeArenaSwap(FigureDescriptor_BusinessCalendarDescriptor* other) {
+    if (other == this) return;
+    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
+    InternalSwap(other);
+  }
+
+  // implements Message ----------------------------------------------
+
+  FigureDescriptor_BusinessCalendarDescriptor* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
+    return CreateMaybeMessage<FigureDescriptor_BusinessCalendarDescriptor>(arena);
+  }
+  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
+  void CopyFrom(const FigureDescriptor_BusinessCalendarDescriptor& from);
+  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
+  void MergeFrom(const FigureDescriptor_BusinessCalendarDescriptor& from);
+  private:
+  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
+  public:
+  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
+  bool IsInitialized() const final;
+
+  size_t ByteSizeLong() const final;
+  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
+  uint8_t* _InternalSerialize(
+      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
+  int GetCachedSize() const final { return _cached_size_.Get(); }
+
+  private:
+  void SharedCtor();
+  void SharedDtor();
+  void SetCachedSize(int size) const final;
+  void InternalSwap(FigureDescriptor_BusinessCalendarDescriptor* other);
+
+  private:
+  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
+  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
+    return "io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BusinessCalendarDescriptor";
+  }
+  protected:
+  explicit FigureDescriptor_BusinessCalendarDescriptor(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+                       bool is_message_owned = false);
+  public:
+
+  static const ClassData _class_data_;
+  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;
+
+  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
+
+  // nested types ----------------------------------------------------
+
+  typedef FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod BusinessPeriod;
+  typedef FigureDescriptor_BusinessCalendarDescriptor_Holiday Holiday;
+  typedef FigureDescriptor_BusinessCalendarDescriptor_LocalDate LocalDate;
+
+  typedef FigureDescriptor_BusinessCalendarDescriptor_DayOfWeek DayOfWeek;
+  static constexpr DayOfWeek SUNDAY =
+    FigureDescriptor_BusinessCalendarDescriptor_DayOfWeek_SUNDAY;
+  static constexpr DayOfWeek MONDAY =
+    FigureDescriptor_BusinessCalendarDescriptor_DayOfWeek_MONDAY;
+  static constexpr DayOfWeek TUESDAY =
+    FigureDescriptor_BusinessCalendarDescriptor_DayOfWeek_TUESDAY;
+  static constexpr DayOfWeek WEDNESDAY =
+    FigureDescriptor_BusinessCalendarDescriptor_DayOfWeek_WEDNESDAY;
+  static constexpr DayOfWeek THURSDAY =
+    FigureDescriptor_BusinessCalendarDescriptor_DayOfWeek_THURSDAY;
+  static constexpr DayOfWeek FRIDAY =
+    FigureDescriptor_BusinessCalendarDescriptor_DayOfWeek_FRIDAY;
+  static constexpr DayOfWeek SATURDAY =
+    FigureDescriptor_BusinessCalendarDescriptor_DayOfWeek_SATURDAY;
+  static inline bool DayOfWeek_IsValid(int value) {
+    return FigureDescriptor_BusinessCalendarDescriptor_DayOfWeek_IsValid(value);
+  }
+  static constexpr DayOfWeek DayOfWeek_MIN =
+    FigureDescriptor_BusinessCalendarDescriptor_DayOfWeek_DayOfWeek_MIN;
+  static constexpr DayOfWeek DayOfWeek_MAX =
+    FigureDescriptor_BusinessCalendarDescriptor_DayOfWeek_DayOfWeek_MAX;
+  static constexpr int DayOfWeek_ARRAYSIZE =
+    FigureDescriptor_BusinessCalendarDescriptor_DayOfWeek_DayOfWeek_ARRAYSIZE;
+  static inline const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor*
+  DayOfWeek_descriptor() {
+    return FigureDescriptor_BusinessCalendarDescriptor_DayOfWeek_descriptor();
+  }
+  template<typename T>
+  static inline const std::string& DayOfWeek_Name(T enum_t_value) {
+    static_assert(::std::is_same<T, DayOfWeek>::value ||
+      ::std::is_integral<T>::value,
+      "Incorrect type passed to function DayOfWeek_Name.");
+    return FigureDescriptor_BusinessCalendarDescriptor_DayOfWeek_Name(enum_t_value);
+  }
+  static inline bool DayOfWeek_Parse(::PROTOBUF_NAMESPACE_ID::ConstStringParam name,
+      DayOfWeek* value) {
+    return FigureDescriptor_BusinessCalendarDescriptor_DayOfWeek_Parse(name, value);
+  }
+
+  // accessors -------------------------------------------------------
+
+  enum : int {
+    kBusinessDaysFieldNumber = 3,
+    kBusinessPeriodsFieldNumber = 4,
+    kHolidaysFieldNumber = 5,
+    kNameFieldNumber = 1,
+    kTimeZoneFieldNumber = 2,
+  };
+  // repeated .io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BusinessCalendarDescriptor.DayOfWeek business_days = 3;
+  int business_days_size() const;
+  private:
+  int _internal_business_days_size() const;
+  public:
+  void clear_business_days();
+  private:
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor_DayOfWeek _internal_business_days(int index) const;
+  void _internal_add_business_days(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor_DayOfWeek value);
+  ::PROTOBUF_NAMESPACE_ID::RepeatedField<int>* _internal_mutable_business_days();
+  public:
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor_DayOfWeek business_days(int index) const;
+  void set_business_days(int index, ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor_DayOfWeek value);
+  void add_business_days(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor_DayOfWeek value);
+  const ::PROTOBUF_NAMESPACE_ID::RepeatedField<int>& business_days() const;
+  ::PROTOBUF_NAMESPACE_ID::RepeatedField<int>* mutable_business_days();
+
+  // repeated .io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BusinessCalendarDescriptor.BusinessPeriod business_periods = 4;
+  int business_periods_size() const;
+  private:
+  int _internal_business_periods_size() const;
+  public:
+  void clear_business_periods();
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod* mutable_business_periods(int index);
+  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod >*
+      mutable_business_periods();
+  private:
+  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod& _internal_business_periods(int index) const;
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod* _internal_add_business_periods();
+  public:
+  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod& business_periods(int index) const;
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod* add_business_periods();
+  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod >&
+      business_periods() const;
+
+  // repeated .io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BusinessCalendarDescriptor.Holiday holidays = 5;
+  int holidays_size() const;
+  private:
+  int _internal_holidays_size() const;
+  public:
+  void clear_holidays();
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor_Holiday* mutable_holidays(int index);
+  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor_Holiday >*
+      mutable_holidays();
+  private:
+  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor_Holiday& _internal_holidays(int index) const;
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor_Holiday* _internal_add_holidays();
+  public:
+  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor_Holiday& holidays(int index) const;
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor_Holiday* add_holidays();
+  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor_Holiday >&
+      holidays() const;
+
+  // string name = 1;
+  void clear_name();
+  const std::string& name() const;
+  template <typename ArgT0 = const std::string&, typename... ArgT>
+  void set_name(ArgT0&& arg0, ArgT... args);
+  std::string* mutable_name();
+  PROTOBUF_NODISCARD std::string* release_name();
+  void set_allocated_name(std::string* name);
+  private:
+  const std::string& _internal_name() const;
+  inline PROTOBUF_ALWAYS_INLINE void _internal_set_name(const std::string& value);
+  std::string* _internal_mutable_name();
+  public:
+
+  // string time_zone = 2;
+  void clear_time_zone();
+  const std::string& time_zone() const;
+  template <typename ArgT0 = const std::string&, typename... ArgT>
+  void set_time_zone(ArgT0&& arg0, ArgT... args);
+  std::string* mutable_time_zone();
+  PROTOBUF_NODISCARD std::string* release_time_zone();
+  void set_allocated_time_zone(std::string* time_zone);
+  private:
+  const std::string& _internal_time_zone() const;
+  inline PROTOBUF_ALWAYS_INLINE void _internal_set_time_zone(const std::string& value);
+  std::string* _internal_mutable_time_zone();
+  public:
+
+  // @@protoc_insertion_point(class_scope:io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BusinessCalendarDescriptor)
+ private:
+  class _Internal;
+
+  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
+  typedef void InternalArenaConstructable_;
+  typedef void DestructorSkippable_;
+  ::PROTOBUF_NAMESPACE_ID::RepeatedField<int> business_days_;
+  mutable std::atomic<int> _business_days_cached_byte_size_;
+  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod > business_periods_;
+  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_BusinessCalendarDescriptor_Holiday > holidays_;
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr name_;
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr time_zone_;
+  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
+  friend struct ::TableStruct_deephaven_2fproto_2fconsole_2eproto;
+};
+// -------------------------------------------------------------------
+
+class FigureDescriptor_MultiSeriesSourceDescriptor final :
+    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:io.deephaven.proto.backplane.script.grpc.FigureDescriptor.MultiSeriesSourceDescriptor) */ {
+ public:
+  inline FigureDescriptor_MultiSeriesSourceDescriptor() : FigureDescriptor_MultiSeriesSourceDescriptor(nullptr) {}
+  ~FigureDescriptor_MultiSeriesSourceDescriptor() override;
+  explicit PROTOBUF_CONSTEXPR FigureDescriptor_MultiSeriesSourceDescriptor(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
+
+  FigureDescriptor_MultiSeriesSourceDescriptor(const FigureDescriptor_MultiSeriesSourceDescriptor& from);
+  FigureDescriptor_MultiSeriesSourceDescriptor(FigureDescriptor_MultiSeriesSourceDescriptor&& from) noexcept
+    : FigureDescriptor_MultiSeriesSourceDescriptor() {
+    *this = ::std::move(from);
+  }
+
+  inline FigureDescriptor_MultiSeriesSourceDescriptor& operator=(const FigureDescriptor_MultiSeriesSourceDescriptor& from) {
+    CopyFrom(from);
+    return *this;
+  }
+  inline FigureDescriptor_MultiSeriesSourceDescriptor& operator=(FigureDescriptor_MultiSeriesSourceDescriptor&& from) noexcept {
+    if (this == &from) return *this;
+    if (GetOwningArena() == from.GetOwningArena()
+  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+        && GetOwningArena() != nullptr
+  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
+    ) {
+      InternalSwap(&from);
+    } else {
+      CopyFrom(from);
+    }
+    return *this;
+  }
+
+  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
+    return GetDescriptor();
+  }
+  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
+    return default_instance().GetMetadata().descriptor;
+  }
+  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
+    return default_instance().GetMetadata().reflection;
+  }
+  static const FigureDescriptor_MultiSeriesSourceDescriptor& default_instance() {
+    return *internal_default_instance();
+  }
+  static inline const FigureDescriptor_MultiSeriesSourceDescriptor* internal_default_instance() {
+    return reinterpret_cast<const FigureDescriptor_MultiSeriesSourceDescriptor*>(
+               &_FigureDescriptor_MultiSeriesSourceDescriptor_default_instance_);
+  }
+  static constexpr int kIndexInFileMessages =
+    56;
+
+  friend void swap(FigureDescriptor_MultiSeriesSourceDescriptor& a, FigureDescriptor_MultiSeriesSourceDescriptor& b) {
+    a.Swap(&b);
+  }
+  inline void Swap(FigureDescriptor_MultiSeriesSourceDescriptor* other) {
+    if (other == this) return;
+  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
+    if (GetOwningArena() != nullptr &&
+        GetOwningArena() == other->GetOwningArena()) {
+   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
+    if (GetOwningArena() == other->GetOwningArena()) {
+  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
+      InternalSwap(other);
+    } else {
+      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
+    }
+  }
+  void UnsafeArenaSwap(FigureDescriptor_MultiSeriesSourceDescriptor* other) {
+    if (other == this) return;
+    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
+    InternalSwap(other);
+  }
+
+  // implements Message ----------------------------------------------
+
+  FigureDescriptor_MultiSeriesSourceDescriptor* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
+    return CreateMaybeMessage<FigureDescriptor_MultiSeriesSourceDescriptor>(arena);
+  }
+  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
+  void CopyFrom(const FigureDescriptor_MultiSeriesSourceDescriptor& from);
+  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
+  void MergeFrom(const FigureDescriptor_MultiSeriesSourceDescriptor& from);
+  private:
+  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
+  public:
+  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
+  bool IsInitialized() const final;
+
+  size_t ByteSizeLong() const final;
+  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
+  uint8_t* _InternalSerialize(
+      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
+  int GetCachedSize() const final { return _cached_size_.Get(); }
+
+  private:
+  void SharedCtor();
+  void SharedDtor();
+  void SetCachedSize(int size) const final;
+  void InternalSwap(FigureDescriptor_MultiSeriesSourceDescriptor* other);
+
+  private:
+  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
+  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
+    return "io.deephaven.proto.backplane.script.grpc.FigureDescriptor.MultiSeriesSourceDescriptor";
+  }
+  protected:
+  explicit FigureDescriptor_MultiSeriesSourceDescriptor(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+                       bool is_message_owned = false);
+  public:
+
+  static const ClassData _class_data_;
+  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;
+
+  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
+
+  // nested types ----------------------------------------------------
+
+  // accessors -------------------------------------------------------
+
+  enum : int {
+    kAxisIdFieldNumber = 1,
+    kColumnNameFieldNumber = 4,
+    kTypeFieldNumber = 2,
+    kPartitionedTableIdFieldNumber = 3,
+  };
+  // string axis_id = 1;
+  void clear_axis_id();
+  const std::string& axis_id() const;
+  template <typename ArgT0 = const std::string&, typename... ArgT>
+  void set_axis_id(ArgT0&& arg0, ArgT... args);
+  std::string* mutable_axis_id();
+  PROTOBUF_NODISCARD std::string* release_axis_id();
+  void set_allocated_axis_id(std::string* axis_id);
+  private:
+  const std::string& _internal_axis_id() const;
+  inline PROTOBUF_ALWAYS_INLINE void _internal_set_axis_id(const std::string& value);
+  std::string* _internal_mutable_axis_id();
+  public:
+
+  // string column_name = 4;
+  void clear_column_name();
+  const std::string& column_name() const;
+  template <typename ArgT0 = const std::string&, typename... ArgT>
+  void set_column_name(ArgT0&& arg0, ArgT... args);
+  std::string* mutable_column_name();
+  PROTOBUF_NODISCARD std::string* release_column_name();
+  void set_allocated_column_name(std::string* column_name);
+  private:
+  const std::string& _internal_column_name() const;
+  inline PROTOBUF_ALWAYS_INLINE void _internal_set_column_name(const std::string& value);
+  std::string* _internal_mutable_column_name();
+  public:
+
+  // .io.deephaven.proto.backplane.script.grpc.FigureDescriptor.SourceType type = 2;
+  void clear_type();
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_SourceType type() const;
+  void set_type(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_SourceType value);
+  private:
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_SourceType _internal_type() const;
+  void _internal_set_type(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_SourceType value);
+  public:
+
+  // int32 partitioned_table_id = 3;
+  void clear_partitioned_table_id();
+  int32_t partitioned_table_id() const;
+  void set_partitioned_table_id(int32_t value);
+  private:
+  int32_t _internal_partitioned_table_id() const;
+  void _internal_set_partitioned_table_id(int32_t value);
+  public:
+
+  // @@protoc_insertion_point(class_scope:io.deephaven.proto.backplane.script.grpc.FigureDescriptor.MultiSeriesSourceDescriptor)
+ private:
+  class _Internal;
+
+  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
+  typedef void InternalArenaConstructable_;
+  typedef void DestructorSkippable_;
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr axis_id_;
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr column_name_;
+  int type_;
+  int32_t partitioned_table_id_;
+  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
+  friend struct ::TableStruct_deephaven_2fproto_2fconsole_2eproto;
+};
+// -------------------------------------------------------------------
+
+class FigureDescriptor_SourceDescriptor final :
+    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:io.deephaven.proto.backplane.script.grpc.FigureDescriptor.SourceDescriptor) */ {
+ public:
+  inline FigureDescriptor_SourceDescriptor() : FigureDescriptor_SourceDescriptor(nullptr) {}
+  ~FigureDescriptor_SourceDescriptor() override;
+  explicit PROTOBUF_CONSTEXPR FigureDescriptor_SourceDescriptor(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
+
+  FigureDescriptor_SourceDescriptor(const FigureDescriptor_SourceDescriptor& from);
+  FigureDescriptor_SourceDescriptor(FigureDescriptor_SourceDescriptor&& from) noexcept
+    : FigureDescriptor_SourceDescriptor() {
+    *this = ::std::move(from);
+  }
+
+  inline FigureDescriptor_SourceDescriptor& operator=(const FigureDescriptor_SourceDescriptor& from) {
+    CopyFrom(from);
+    return *this;
+  }
+  inline FigureDescriptor_SourceDescriptor& operator=(FigureDescriptor_SourceDescriptor&& from) noexcept {
+    if (this == &from) return *this;
+    if (GetOwningArena() == from.GetOwningArena()
+  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+        && GetOwningArena() != nullptr
+  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
+    ) {
+      InternalSwap(&from);
+    } else {
+      CopyFrom(from);
+    }
+    return *this;
+  }
+
+  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
+    return GetDescriptor();
+  }
+  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
+    return default_instance().GetMetadata().descriptor;
+  }
+  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
+    return default_instance().GetMetadata().reflection;
+  }
+  static const FigureDescriptor_SourceDescriptor& default_instance() {
+    return *internal_default_instance();
+  }
+  static inline const FigureDescriptor_SourceDescriptor* internal_default_instance() {
+    return reinterpret_cast<const FigureDescriptor_SourceDescriptor*>(
+               &_FigureDescriptor_SourceDescriptor_default_instance_);
+  }
+  static constexpr int kIndexInFileMessages =
+    57;
+
+  friend void swap(FigureDescriptor_SourceDescriptor& a, FigureDescriptor_SourceDescriptor& b) {
+    a.Swap(&b);
+  }
+  inline void Swap(FigureDescriptor_SourceDescriptor* other) {
+    if (other == this) return;
+  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
+    if (GetOwningArena() != nullptr &&
+        GetOwningArena() == other->GetOwningArena()) {
+   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
+    if (GetOwningArena() == other->GetOwningArena()) {
+  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
+      InternalSwap(other);
+    } else {
+      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
+    }
+  }
+  void UnsafeArenaSwap(FigureDescriptor_SourceDescriptor* other) {
+    if (other == this) return;
+    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
+    InternalSwap(other);
+  }
+
+  // implements Message ----------------------------------------------
+
+  FigureDescriptor_SourceDescriptor* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
+    return CreateMaybeMessage<FigureDescriptor_SourceDescriptor>(arena);
+  }
+  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
+  void CopyFrom(const FigureDescriptor_SourceDescriptor& from);
+  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
+  void MergeFrom(const FigureDescriptor_SourceDescriptor& from);
+  private:
+  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
+  public:
+  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
+  bool IsInitialized() const final;
+
+  size_t ByteSizeLong() const final;
+  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
+  uint8_t* _InternalSerialize(
+      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
+  int GetCachedSize() const final { return _cached_size_.Get(); }
+
+  private:
+  void SharedCtor();
+  void SharedDtor();
+  void SetCachedSize(int size) const final;
+  void InternalSwap(FigureDescriptor_SourceDescriptor* other);
+
+  private:
+  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
+  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
+    return "io.deephaven.proto.backplane.script.grpc.FigureDescriptor.SourceDescriptor";
+  }
+  protected:
+  explicit FigureDescriptor_SourceDescriptor(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+                       bool is_message_owned = false);
+  public:
+
+  static const ClassData _class_data_;
+  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;
+
+  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
+
+  // nested types ----------------------------------------------------
+
+  // accessors -------------------------------------------------------
+
+  enum : int {
+    kAxisIdFieldNumber = 1,
+    kColumnNameFieldNumber = 5,
+    kColumnTypeFieldNumber = 6,
+    kOneClickFieldNumber = 7,
+    kTypeFieldNumber = 2,
+    kTableIdFieldNumber = 3,
+    kPartitionedTableIdFieldNumber = 4,
+  };
+  // string axis_id = 1;
+  void clear_axis_id();
+  const std::string& axis_id() const;
+  template <typename ArgT0 = const std::string&, typename... ArgT>
+  void set_axis_id(ArgT0&& arg0, ArgT... args);
+  std::string* mutable_axis_id();
+  PROTOBUF_NODISCARD std::string* release_axis_id();
+  void set_allocated_axis_id(std::string* axis_id);
+  private:
+  const std::string& _internal_axis_id() const;
+  inline PROTOBUF_ALWAYS_INLINE void _internal_set_axis_id(const std::string& value);
+  std::string* _internal_mutable_axis_id();
+  public:
+
+  // string column_name = 5;
+  void clear_column_name();
+  const std::string& column_name() const;
+  template <typename ArgT0 = const std::string&, typename... ArgT>
+  void set_column_name(ArgT0&& arg0, ArgT... args);
+  std::string* mutable_column_name();
+  PROTOBUF_NODISCARD std::string* release_column_name();
+  void set_allocated_column_name(std::string* column_name);
+  private:
+  const std::string& _internal_column_name() const;
+  inline PROTOBUF_ALWAYS_INLINE void _internal_set_column_name(const std::string& value);
+  std::string* _internal_mutable_column_name();
+  public:
+
+  // string column_type = 6;
+  void clear_column_type();
+  const std::string& column_type() const;
+  template <typename ArgT0 = const std::string&, typename... ArgT>
+  void set_column_type(ArgT0&& arg0, ArgT... args);
+  std::string* mutable_column_type();
+  PROTOBUF_NODISCARD std::string* release_column_type();
+  void set_allocated_column_type(std::string* column_type);
+  private:
+  const std::string& _internal_column_type() const;
+  inline PROTOBUF_ALWAYS_INLINE void _internal_set_column_type(const std::string& value);
+  std::string* _internal_mutable_column_type();
+  public:
+
+  // .io.deephaven.proto.backplane.script.grpc.FigureDescriptor.OneClickDescriptor one_click = 7;
+  bool has_one_click() const;
+  private:
+  bool _internal_has_one_click() const;
+  public:
+  void clear_one_click();
+  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_OneClickDescriptor& one_click() const;
+  PROTOBUF_NODISCARD ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_OneClickDescriptor* release_one_click();
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_OneClickDescriptor* mutable_one_click();
+  void set_allocated_one_click(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_OneClickDescriptor* one_click);
+  private:
+  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_OneClickDescriptor& _internal_one_click() const;
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_OneClickDescriptor* _internal_mutable_one_click();
+  public:
+  void unsafe_arena_set_allocated_one_click(
+      ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_OneClickDescriptor* one_click);
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_OneClickDescriptor* unsafe_arena_release_one_click();
+
+  // .io.deephaven.proto.backplane.script.grpc.FigureDescriptor.SourceType type = 2;
+  void clear_type();
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_SourceType type() const;
+  void set_type(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_SourceType value);
+  private:
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_SourceType _internal_type() const;
+  void _internal_set_type(::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_SourceType value);
+  public:
+
+  // int32 table_id = 3;
+  void clear_table_id();
+  int32_t table_id() const;
+  void set_table_id(int32_t value);
+  private:
+  int32_t _internal_table_id() const;
+  void _internal_set_table_id(int32_t value);
+  public:
+
+  // int32 partitioned_table_id = 4;
+  void clear_partitioned_table_id();
+  int32_t partitioned_table_id() const;
+  void set_partitioned_table_id(int32_t value);
+  private:
+  int32_t _internal_partitioned_table_id() const;
+  void _internal_set_partitioned_table_id(int32_t value);
+  public:
+
+  // @@protoc_insertion_point(class_scope:io.deephaven.proto.backplane.script.grpc.FigureDescriptor.SourceDescriptor)
+ private:
+  class _Internal;
+
+  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
+  typedef void InternalArenaConstructable_;
+  typedef void DestructorSkippable_;
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr axis_id_;
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr column_name_;
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr column_type_;
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_OneClickDescriptor* one_click_;
+  int type_;
+  int32_t table_id_;
+  int32_t partitioned_table_id_;
+  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
+  friend struct ::TableStruct_deephaven_2fproto_2fconsole_2eproto;
+};
+// -------------------------------------------------------------------
+
+class FigureDescriptor_OneClickDescriptor final :
+    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:io.deephaven.proto.backplane.script.grpc.FigureDescriptor.OneClickDescriptor) */ {
+ public:
+  inline FigureDescriptor_OneClickDescriptor() : FigureDescriptor_OneClickDescriptor(nullptr) {}
+  ~FigureDescriptor_OneClickDescriptor() override;
+  explicit PROTOBUF_CONSTEXPR FigureDescriptor_OneClickDescriptor(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
+
+  FigureDescriptor_OneClickDescriptor(const FigureDescriptor_OneClickDescriptor& from);
+  FigureDescriptor_OneClickDescriptor(FigureDescriptor_OneClickDescriptor&& from) noexcept
+    : FigureDescriptor_OneClickDescriptor() {
+    *this = ::std::move(from);
+  }
+
+  inline FigureDescriptor_OneClickDescriptor& operator=(const FigureDescriptor_OneClickDescriptor& from) {
+    CopyFrom(from);
+    return *this;
+  }
+  inline FigureDescriptor_OneClickDescriptor& operator=(FigureDescriptor_OneClickDescriptor&& from) noexcept {
+    if (this == &from) return *this;
+    if (GetOwningArena() == from.GetOwningArena()
+  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+        && GetOwningArena() != nullptr
+  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
+    ) {
+      InternalSwap(&from);
+    } else {
+      CopyFrom(from);
+    }
+    return *this;
+  }
+
+  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
+    return GetDescriptor();
+  }
+  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
+    return default_instance().GetMetadata().descriptor;
+  }
+  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
+    return default_instance().GetMetadata().reflection;
+  }
+  static const FigureDescriptor_OneClickDescriptor& default_instance() {
+    return *internal_default_instance();
+  }
+  static inline const FigureDescriptor_OneClickDescriptor* internal_default_instance() {
+    return reinterpret_cast<const FigureDescriptor_OneClickDescriptor*>(
+               &_FigureDescriptor_OneClickDescriptor_default_instance_);
+  }
+  static constexpr int kIndexInFileMessages =
+    58;
+
+  friend void swap(FigureDescriptor_OneClickDescriptor& a, FigureDescriptor_OneClickDescriptor& b) {
+    a.Swap(&b);
+  }
+  inline void Swap(FigureDescriptor_OneClickDescriptor* other) {
+    if (other == this) return;
+  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
+    if (GetOwningArena() != nullptr &&
+        GetOwningArena() == other->GetOwningArena()) {
+   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
+    if (GetOwningArena() == other->GetOwningArena()) {
+  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
+      InternalSwap(other);
+    } else {
+      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
+    }
+  }
+  void UnsafeArenaSwap(FigureDescriptor_OneClickDescriptor* other) {
+    if (other == this) return;
+    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
+    InternalSwap(other);
+  }
+
+  // implements Message ----------------------------------------------
+
+  FigureDescriptor_OneClickDescriptor* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
+    return CreateMaybeMessage<FigureDescriptor_OneClickDescriptor>(arena);
+  }
+  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
+  void CopyFrom(const FigureDescriptor_OneClickDescriptor& from);
+  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
+  void MergeFrom(const FigureDescriptor_OneClickDescriptor& from);
+  private:
+  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
+  public:
+  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
+  bool IsInitialized() const final;
+
+  size_t ByteSizeLong() const final;
+  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
+  uint8_t* _InternalSerialize(
+      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
+  int GetCachedSize() const final { return _cached_size_.Get(); }
+
+  private:
+  void SharedCtor();
+  void SharedDtor();
+  void SetCachedSize(int size) const final;
+  void InternalSwap(FigureDescriptor_OneClickDescriptor* other);
+
+  private:
+  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
+  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
+    return "io.deephaven.proto.backplane.script.grpc.FigureDescriptor.OneClickDescriptor";
+  }
+  protected:
+  explicit FigureDescriptor_OneClickDescriptor(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+                       bool is_message_owned = false);
+  public:
+
+  static const ClassData _class_data_;
+  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;
+
+  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
+
+  // nested types ----------------------------------------------------
+
+  // accessors -------------------------------------------------------
+
+  enum : int {
+    kColumnsFieldNumber = 1,
+    kColumnTypesFieldNumber = 2,
+    kRequireAllFiltersToDisplayFieldNumber = 3,
+  };
+  // repeated string columns = 1;
+  int columns_size() const;
+  private:
+  int _internal_columns_size() const;
+  public:
+  void clear_columns();
+  const std::string& columns(int index) const;
+  std::string* mutable_columns(int index);
+  void set_columns(int index, const std::string& value);
+  void set_columns(int index, std::string&& value);
+  void set_columns(int index, const char* value);
+  void set_columns(int index, const char* value, size_t size);
+  std::string* add_columns();
+  void add_columns(const std::string& value);
+  void add_columns(std::string&& value);
+  void add_columns(const char* value);
+  void add_columns(const char* value, size_t size);
+  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>& columns() const;
+  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>* mutable_columns();
+  private:
+  const std::string& _internal_columns(int index) const;
+  std::string* _internal_add_columns();
+  public:
+
+  // repeated string column_types = 2;
+  int column_types_size() const;
+  private:
+  int _internal_column_types_size() const;
+  public:
+  void clear_column_types();
+  const std::string& column_types(int index) const;
+  std::string* mutable_column_types(int index);
+  void set_column_types(int index, const std::string& value);
+  void set_column_types(int index, std::string&& value);
+  void set_column_types(int index, const char* value);
+  void set_column_types(int index, const char* value, size_t size);
+  std::string* add_column_types();
+  void add_column_types(const std::string& value);
+  void add_column_types(std::string&& value);
+  void add_column_types(const char* value);
+  void add_column_types(const char* value, size_t size);
+  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>& column_types() const;
+  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>* mutable_column_types();
+  private:
+  const std::string& _internal_column_types(int index) const;
+  std::string* _internal_add_column_types();
+  public:
+
+  // bool require_all_filters_to_display = 3;
+  void clear_require_all_filters_to_display();
+  bool require_all_filters_to_display() const;
+  void set_require_all_filters_to_display(bool value);
+  private:
+  bool _internal_require_all_filters_to_display() const;
+  void _internal_set_require_all_filters_to_display(bool value);
+  public:
+
+  // @@protoc_insertion_point(class_scope:io.deephaven.proto.backplane.script.grpc.FigureDescriptor.OneClickDescriptor)
+ private:
+  class _Internal;
+
+  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
+  typedef void InternalArenaConstructable_;
+  typedef void DestructorSkippable_;
+  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string> columns_;
+  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string> column_types_;
+  bool require_all_filters_to_display_;
+  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
+  friend struct ::TableStruct_deephaven_2fproto_2fconsole_2eproto;
+};
+// -------------------------------------------------------------------
+
+class FigureDescriptor final :
+    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:io.deephaven.proto.backplane.script.grpc.FigureDescriptor) */ {
+ public:
+  inline FigureDescriptor() : FigureDescriptor(nullptr) {}
+  ~FigureDescriptor() override;
+  explicit PROTOBUF_CONSTEXPR FigureDescriptor(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
+
+  FigureDescriptor(const FigureDescriptor& from);
+  FigureDescriptor(FigureDescriptor&& from) noexcept
+    : FigureDescriptor() {
+    *this = ::std::move(from);
+  }
+
+  inline FigureDescriptor& operator=(const FigureDescriptor& from) {
+    CopyFrom(from);
+    return *this;
+  }
+  inline FigureDescriptor& operator=(FigureDescriptor&& from) noexcept {
+    if (this == &from) return *this;
+    if (GetOwningArena() == from.GetOwningArena()
+  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+        && GetOwningArena() != nullptr
+  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
+    ) {
+      InternalSwap(&from);
+    } else {
+      CopyFrom(from);
+    }
+    return *this;
+  }
+
+  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
+    return GetDescriptor();
+  }
+  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
+    return default_instance().GetMetadata().descriptor;
+  }
+  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
+    return default_instance().GetMetadata().reflection;
+  }
+  static const FigureDescriptor& default_instance() {
+    return *internal_default_instance();
+  }
+  static inline const FigureDescriptor* internal_default_instance() {
+    return reinterpret_cast<const FigureDescriptor*>(
+               &_FigureDescriptor_default_instance_);
+  }
+  static constexpr int kIndexInFileMessages =
+    59;
+
+  friend void swap(FigureDescriptor& a, FigureDescriptor& b) {
+    a.Swap(&b);
+  }
+  inline void Swap(FigureDescriptor* other) {
+    if (other == this) return;
+  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
+    if (GetOwningArena() != nullptr &&
+        GetOwningArena() == other->GetOwningArena()) {
+   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
+    if (GetOwningArena() == other->GetOwningArena()) {
+  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
+      InternalSwap(other);
+    } else {
+      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
+    }
+  }
+  void UnsafeArenaSwap(FigureDescriptor* other) {
+    if (other == this) return;
+    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
+    InternalSwap(other);
+  }
+
+  // implements Message ----------------------------------------------
+
+  FigureDescriptor* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
+    return CreateMaybeMessage<FigureDescriptor>(arena);
+  }
+  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
+  void CopyFrom(const FigureDescriptor& from);
+  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
+  void MergeFrom(const FigureDescriptor& from);
+  private:
+  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
+  public:
+  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
+  bool IsInitialized() const final;
+
+  size_t ByteSizeLong() const final;
+  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
+  uint8_t* _InternalSerialize(
+      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
+  int GetCachedSize() const final { return _cached_size_.Get(); }
+
+  private:
+  void SharedCtor();
+  void SharedDtor();
+  void SetCachedSize(int size) const final;
+  void InternalSwap(FigureDescriptor* other);
+
+  private:
+  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
+  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
+    return "io.deephaven.proto.backplane.script.grpc.FigureDescriptor";
+  }
+  protected:
+  explicit FigureDescriptor(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+                       bool is_message_owned = false);
+  public:
+
+  static const ClassData _class_data_;
+  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;
+
+  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
+
+  // nested types ----------------------------------------------------
+
+  typedef FigureDescriptor_ChartDescriptor ChartDescriptor;
+  typedef FigureDescriptor_SeriesDescriptor SeriesDescriptor;
+  typedef FigureDescriptor_MultiSeriesDescriptor MultiSeriesDescriptor;
+  typedef FigureDescriptor_StringMapWithDefault StringMapWithDefault;
+  typedef FigureDescriptor_DoubleMapWithDefault DoubleMapWithDefault;
+  typedef FigureDescriptor_BoolMapWithDefault BoolMapWithDefault;
+  typedef FigureDescriptor_AxisDescriptor AxisDescriptor;
+  typedef FigureDescriptor_BusinessCalendarDescriptor BusinessCalendarDescriptor;
+  typedef FigureDescriptor_MultiSeriesSourceDescriptor MultiSeriesSourceDescriptor;
+  typedef FigureDescriptor_SourceDescriptor SourceDescriptor;
+  typedef FigureDescriptor_OneClickDescriptor OneClickDescriptor;
+
+  typedef FigureDescriptor_SeriesPlotStyle SeriesPlotStyle;
+  static constexpr SeriesPlotStyle BAR =
+    FigureDescriptor_SeriesPlotStyle_BAR;
+  static constexpr SeriesPlotStyle STACKED_BAR =
+    FigureDescriptor_SeriesPlotStyle_STACKED_BAR;
+  static constexpr SeriesPlotStyle LINE =
+    FigureDescriptor_SeriesPlotStyle_LINE;
+  static constexpr SeriesPlotStyle AREA =
+    FigureDescriptor_SeriesPlotStyle_AREA;
+  static constexpr SeriesPlotStyle STACKED_AREA =
+    FigureDescriptor_SeriesPlotStyle_STACKED_AREA;
+  static constexpr SeriesPlotStyle PIE =
+    FigureDescriptor_SeriesPlotStyle_PIE;
+  static constexpr SeriesPlotStyle HISTOGRAM =
+    FigureDescriptor_SeriesPlotStyle_HISTOGRAM;
+  static constexpr SeriesPlotStyle OHLC =
+    FigureDescriptor_SeriesPlotStyle_OHLC;
+  static constexpr SeriesPlotStyle SCATTER =
+    FigureDescriptor_SeriesPlotStyle_SCATTER;
+  static constexpr SeriesPlotStyle STEP =
+    FigureDescriptor_SeriesPlotStyle_STEP;
+  static constexpr SeriesPlotStyle ERROR_BAR =
+    FigureDescriptor_SeriesPlotStyle_ERROR_BAR;
+  static constexpr SeriesPlotStyle TREEMAP =
+    FigureDescriptor_SeriesPlotStyle_TREEMAP;
+  static inline bool SeriesPlotStyle_IsValid(int value) {
+    return FigureDescriptor_SeriesPlotStyle_IsValid(value);
+  }
+  static constexpr SeriesPlotStyle SeriesPlotStyle_MIN =
+    FigureDescriptor_SeriesPlotStyle_SeriesPlotStyle_MIN;
+  static constexpr SeriesPlotStyle SeriesPlotStyle_MAX =
+    FigureDescriptor_SeriesPlotStyle_SeriesPlotStyle_MAX;
+  static constexpr int SeriesPlotStyle_ARRAYSIZE =
+    FigureDescriptor_SeriesPlotStyle_SeriesPlotStyle_ARRAYSIZE;
+  static inline const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor*
+  SeriesPlotStyle_descriptor() {
+    return FigureDescriptor_SeriesPlotStyle_descriptor();
+  }
+  template<typename T>
+  static inline const std::string& SeriesPlotStyle_Name(T enum_t_value) {
+    static_assert(::std::is_same<T, SeriesPlotStyle>::value ||
+      ::std::is_integral<T>::value,
+      "Incorrect type passed to function SeriesPlotStyle_Name.");
+    return FigureDescriptor_SeriesPlotStyle_Name(enum_t_value);
+  }
+  static inline bool SeriesPlotStyle_Parse(::PROTOBUF_NAMESPACE_ID::ConstStringParam name,
+      SeriesPlotStyle* value) {
+    return FigureDescriptor_SeriesPlotStyle_Parse(name, value);
+  }
+
+  typedef FigureDescriptor_SourceType SourceType;
+  static constexpr SourceType X =
+    FigureDescriptor_SourceType_X;
+  static constexpr SourceType Y =
+    FigureDescriptor_SourceType_Y;
+  static constexpr SourceType Z =
+    FigureDescriptor_SourceType_Z;
+  static constexpr SourceType X_LOW =
+    FigureDescriptor_SourceType_X_LOW;
+  static constexpr SourceType X_HIGH =
+    FigureDescriptor_SourceType_X_HIGH;
+  static constexpr SourceType Y_LOW =
+    FigureDescriptor_SourceType_Y_LOW;
+  static constexpr SourceType Y_HIGH =
+    FigureDescriptor_SourceType_Y_HIGH;
+  static constexpr SourceType TIME =
+    FigureDescriptor_SourceType_TIME;
+  static constexpr SourceType OPEN =
+    FigureDescriptor_SourceType_OPEN;
+  static constexpr SourceType HIGH =
+    FigureDescriptor_SourceType_HIGH;
+  static constexpr SourceType LOW =
+    FigureDescriptor_SourceType_LOW;
+  static constexpr SourceType CLOSE =
+    FigureDescriptor_SourceType_CLOSE;
+  static constexpr SourceType SHAPE =
+    FigureDescriptor_SourceType_SHAPE;
+  static constexpr SourceType SIZE =
+    FigureDescriptor_SourceType_SIZE;
+  static constexpr SourceType LABEL =
+    FigureDescriptor_SourceType_LABEL;
+  static constexpr SourceType COLOR =
+    FigureDescriptor_SourceType_COLOR;
+  static constexpr SourceType PARENT =
+    FigureDescriptor_SourceType_PARENT;
+  static constexpr SourceType HOVER_TEXT =
+    FigureDescriptor_SourceType_HOVER_TEXT;
+  static constexpr SourceType TEXT =
+    FigureDescriptor_SourceType_TEXT;
+  static inline bool SourceType_IsValid(int value) {
+    return FigureDescriptor_SourceType_IsValid(value);
+  }
+  static constexpr SourceType SourceType_MIN =
+    FigureDescriptor_SourceType_SourceType_MIN;
+  static constexpr SourceType SourceType_MAX =
+    FigureDescriptor_SourceType_SourceType_MAX;
+  static constexpr int SourceType_ARRAYSIZE =
+    FigureDescriptor_SourceType_SourceType_ARRAYSIZE;
+  static inline const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor*
+  SourceType_descriptor() {
+    return FigureDescriptor_SourceType_descriptor();
+  }
+  template<typename T>
+  static inline const std::string& SourceType_Name(T enum_t_value) {
+    static_assert(::std::is_same<T, SourceType>::value ||
+      ::std::is_integral<T>::value,
+      "Incorrect type passed to function SourceType_Name.");
+    return FigureDescriptor_SourceType_Name(enum_t_value);
+  }
+  static inline bool SourceType_Parse(::PROTOBUF_NAMESPACE_ID::ConstStringParam name,
+      SourceType* value) {
+    return FigureDescriptor_SourceType_Parse(name, value);
+  }
+
+  // accessors -------------------------------------------------------
+
+  enum : int {
+    kChartsFieldNumber = 10,
+    kErrorsFieldNumber = 13,
+    kTitleFieldNumber = 1,
+    kTitleFontFieldNumber = 2,
+    kTitleColorFieldNumber = 3,
+    kUpdateIntervalFieldNumber = 7,
+    kColsFieldNumber = 8,
+    kRowsFieldNumber = 9,
+  };
+  // repeated .io.deephaven.proto.backplane.script.grpc.FigureDescriptor.ChartDescriptor charts = 10;
+  int charts_size() const;
+  private:
+  int _internal_charts_size() const;
+  public:
+  void clear_charts();
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_ChartDescriptor* mutable_charts(int index);
+  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_ChartDescriptor >*
+      mutable_charts();
+  private:
+  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_ChartDescriptor& _internal_charts(int index) const;
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_ChartDescriptor* _internal_add_charts();
+  public:
+  const ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_ChartDescriptor& charts(int index) const;
+  ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_ChartDescriptor* add_charts();
+  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_ChartDescriptor >&
+      charts() const;
+
+  // repeated string errors = 13;
+  int errors_size() const;
+  private:
+  int _internal_errors_size() const;
+  public:
+  void clear_errors();
+  const std::string& errors(int index) const;
+  std::string* mutable_errors(int index);
+  void set_errors(int index, const std::string& value);
+  void set_errors(int index, std::string&& value);
+  void set_errors(int index, const char* value);
+  void set_errors(int index, const char* value, size_t size);
+  std::string* add_errors();
+  void add_errors(const std::string& value);
+  void add_errors(std::string&& value);
+  void add_errors(const char* value);
+  void add_errors(const char* value, size_t size);
+  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>& errors() const;
+  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>* mutable_errors();
+  private:
+  const std::string& _internal_errors(int index) const;
+  std::string* _internal_add_errors();
+  public:
+
+  // optional string title = 1;
+  bool has_title() const;
+  private:
+  bool _internal_has_title() const;
+  public:
+  void clear_title();
+  const std::string& title() const;
+  template <typename ArgT0 = const std::string&, typename... ArgT>
+  void set_title(ArgT0&& arg0, ArgT... args);
+  std::string* mutable_title();
+  PROTOBUF_NODISCARD std::string* release_title();
+  void set_allocated_title(std::string* title);
+  private:
+  const std::string& _internal_title() const;
+  inline PROTOBUF_ALWAYS_INLINE void _internal_set_title(const std::string& value);
+  std::string* _internal_mutable_title();
+  public:
+
+  // string title_font = 2;
+  void clear_title_font();
+  const std::string& title_font() const;
+  template <typename ArgT0 = const std::string&, typename... ArgT>
+  void set_title_font(ArgT0&& arg0, ArgT... args);
+  std::string* mutable_title_font();
+  PROTOBUF_NODISCARD std::string* release_title_font();
+  void set_allocated_title_font(std::string* title_font);
+  private:
+  const std::string& _internal_title_font() const;
+  inline PROTOBUF_ALWAYS_INLINE void _internal_set_title_font(const std::string& value);
+  std::string* _internal_mutable_title_font();
+  public:
+
+  // string title_color = 3;
+  void clear_title_color();
+  const std::string& title_color() const;
+  template <typename ArgT0 = const std::string&, typename... ArgT>
+  void set_title_color(ArgT0&& arg0, ArgT... args);
+  std::string* mutable_title_color();
+  PROTOBUF_NODISCARD std::string* release_title_color();
+  void set_allocated_title_color(std::string* title_color);
+  private:
+  const std::string& _internal_title_color() const;
+  inline PROTOBUF_ALWAYS_INLINE void _internal_set_title_color(const std::string& value);
+  std::string* _internal_mutable_title_color();
+  public:
+
+  // int64 update_interval = 7 [jstype = JS_STRING];
+  void clear_update_interval();
+  int64_t update_interval() const;
+  void set_update_interval(int64_t value);
+  private:
+  int64_t _internal_update_interval() const;
+  void _internal_set_update_interval(int64_t value);
+  public:
+
+  // int32 cols = 8;
+  void clear_cols();
+  int32_t cols() const;
+  void set_cols(int32_t value);
+  private:
+  int32_t _internal_cols() const;
+  void _internal_set_cols(int32_t value);
+  public:
+
+  // int32 rows = 9;
+  void clear_rows();
+  int32_t rows() const;
+  void set_rows(int32_t value);
+  private:
+  int32_t _internal_rows() const;
+  void _internal_set_rows(int32_t value);
+  public:
+
+  // @@protoc_insertion_point(class_scope:io.deephaven.proto.backplane.script.grpc.FigureDescriptor)
+ private:
+  class _Internal;
+
+  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
+  typedef void InternalArenaConstructable_;
+  typedef void DestructorSkippable_;
+  ::PROTOBUF_NAMESPACE_ID::internal::HasBits<1> _has_bits_;
+  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
+  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_ChartDescriptor > charts_;
+  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string> errors_;
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr title_;
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr title_font_;
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr title_color_;
+  int64_t update_interval_;
+  int32_t cols_;
+  int32_t rows_;
+  friend struct ::TableStruct_deephaven_2fproto_2fconsole_2eproto;
+};
+// ===================================================================
+
+
+// ===================================================================
+
+#ifdef __GNUC__
+  #pragma GCC diagnostic push
+  #pragma GCC diagnostic ignored "-Wstrict-aliasing"
+#endif  // __GNUC__
+// GetConsoleTypesRequest
+
+// -------------------------------------------------------------------
+
+// GetConsoleTypesResponse
+
+// repeated string console_types = 1;
+inline int GetConsoleTypesResponse::_internal_console_types_size() const {
+  return console_types_.size();
+}
+inline int GetConsoleTypesResponse::console_types_size() const {
+  return _internal_console_types_size();
+}
+inline void GetConsoleTypesResponse::clear_console_types() {
+  console_types_.Clear();
+}
+inline std::string* GetConsoleTypesResponse::add_console_types() {
+  std::string* _s = _internal_add_console_types();
+  // @@protoc_insertion_point(field_add_mutable:io.deephaven.proto.backplane.script.grpc.GetConsoleTypesResponse.console_types)
+  return _s;
+}
+inline const std::string& GetConsoleTypesResponse::_internal_console_types(int index) const {
+  return console_types_.Get(index);
+}
+inline const std::string& GetConsoleTypesResponse::console_types(int index) const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.GetConsoleTypesResponse.console_types)
+  return _internal_console_types(index);
+}
+inline std::string* GetConsoleTypesResponse::mutable_console_types(int index) {
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.GetConsoleTypesResponse.console_types)
+  return console_types_.Mutable(index);
+}
+inline void GetConsoleTypesResponse::set_console_types(int index, const std::string& value) {
+  console_types_.Mutable(index)->assign(value);
+  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.GetConsoleTypesResponse.console_types)
+}
+inline void GetConsoleTypesResponse::set_console_types(int index, std::string&& value) {
+  console_types_.Mutable(index)->assign(std::move(value));
+  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.GetConsoleTypesResponse.console_types)
+}
+inline void GetConsoleTypesResponse::set_console_types(int index, const char* value) {
+  GOOGLE_DCHECK(value != nullptr);
+  console_types_.Mutable(index)->assign(value);
+  // @@protoc_insertion_point(field_set_char:io.deephaven.proto.backplane.script.grpc.GetConsoleTypesResponse.console_types)
+}
+inline void GetConsoleTypesResponse::set_console_types(int index, const char* value, size_t size) {
+  console_types_.Mutable(index)->assign(
+    reinterpret_cast<const char*>(value), size);
+  // @@protoc_insertion_point(field_set_pointer:io.deephaven.proto.backplane.script.grpc.GetConsoleTypesResponse.console_types)
+}
+inline std::string* GetConsoleTypesResponse::_internal_add_console_types() {
+  return console_types_.Add();
+}
+inline void GetConsoleTypesResponse::add_console_types(const std::string& value) {
+  console_types_.Add()->assign(value);
+  // @@protoc_insertion_point(field_add:io.deephaven.proto.backplane.script.grpc.GetConsoleTypesResponse.console_types)
+}
+inline void GetConsoleTypesResponse::add_console_types(std::string&& value) {
+  console_types_.Add(std::move(value));
+  // @@protoc_insertion_point(field_add:io.deephaven.proto.backplane.script.grpc.GetConsoleTypesResponse.console_types)
+}
+inline void GetConsoleTypesResponse::add_console_types(const char* value) {
+  GOOGLE_DCHECK(value != nullptr);
+  console_types_.Add()->assign(value);
+  // @@protoc_insertion_point(field_add_char:io.deephaven.proto.backplane.script.grpc.GetConsoleTypesResponse.console_types)
+}
+inline void GetConsoleTypesResponse::add_console_types(const char* value, size_t size) {
+  console_types_.Add()->assign(reinterpret_cast<const char*>(value), size);
+  // @@protoc_insertion_point(field_add_pointer:io.deephaven.proto.backplane.script.grpc.GetConsoleTypesResponse.console_types)
+}
+inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>&
+GetConsoleTypesResponse::console_types() const {
+  // @@protoc_insertion_point(field_list:io.deephaven.proto.backplane.script.grpc.GetConsoleTypesResponse.console_types)
+  return console_types_;
+}
+inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>*
+GetConsoleTypesResponse::mutable_console_types() {
+  // @@protoc_insertion_point(field_mutable_list:io.deephaven.proto.backplane.script.grpc.GetConsoleTypesResponse.console_types)
+  return &console_types_;
+}
+
+// -------------------------------------------------------------------
+
+// StartConsoleRequest
+
+// .io.deephaven.proto.backplane.grpc.Ticket result_id = 1;
+inline bool StartConsoleRequest::_internal_has_result_id() const {
+  return this != internal_default_instance() && result_id_ != nullptr;
+}
+inline bool StartConsoleRequest::has_result_id() const {
+  return _internal_has_result_id();
+}
+inline const ::io::deephaven::proto::backplane::grpc::Ticket& StartConsoleRequest::_internal_result_id() const {
+  const ::io::deephaven::proto::backplane::grpc::Ticket* p = result_id_;
+  return p != nullptr ? *p : reinterpret_cast<const ::io::deephaven::proto::backplane::grpc::Ticket&>(
+      ::io::deephaven::proto::backplane::grpc::_Ticket_default_instance_);
+}
+inline const ::io::deephaven::proto::backplane::grpc::Ticket& StartConsoleRequest::result_id() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.StartConsoleRequest.result_id)
+  return _internal_result_id();
+}
+inline void StartConsoleRequest::unsafe_arena_set_allocated_result_id(
+    ::io::deephaven::proto::backplane::grpc::Ticket* result_id) {
+  if (GetArenaForAllocation() == nullptr) {
+    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(result_id_);
+  }
+  result_id_ = result_id;
+  if (result_id) {
+    
+  } else {
+    
+  }
+  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:io.deephaven.proto.backplane.script.grpc.StartConsoleRequest.result_id)
+}
+inline ::io::deephaven::proto::backplane::grpc::Ticket* StartConsoleRequest::release_result_id() {
+  
+  ::io::deephaven::proto::backplane::grpc::Ticket* temp = result_id_;
+  result_id_ = nullptr;
+#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
+  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
+  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
+  if (GetArenaForAllocation() == nullptr) { delete old; }
+#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
+  if (GetArenaForAllocation() != nullptr) {
+    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
+  }
+#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
+  return temp;
+}
+inline ::io::deephaven::proto::backplane::grpc::Ticket* StartConsoleRequest::unsafe_arena_release_result_id() {
+  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.StartConsoleRequest.result_id)
+  
+  ::io::deephaven::proto::backplane::grpc::Ticket* temp = result_id_;
+  result_id_ = nullptr;
+  return temp;
+}
+inline ::io::deephaven::proto::backplane::grpc::Ticket* StartConsoleRequest::_internal_mutable_result_id() {
+  
+  if (result_id_ == nullptr) {
+    auto* p = CreateMaybeMessage<::io::deephaven::proto::backplane::grpc::Ticket>(GetArenaForAllocation());
+    result_id_ = p;
+  }
+  return result_id_;
+}
+inline ::io::deephaven::proto::backplane::grpc::Ticket* StartConsoleRequest::mutable_result_id() {
+  ::io::deephaven::proto::backplane::grpc::Ticket* _msg = _internal_mutable_result_id();
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.StartConsoleRequest.result_id)
+  return _msg;
+}
+inline void StartConsoleRequest::set_allocated_result_id(::io::deephaven::proto::backplane::grpc::Ticket* result_id) {
+  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
+  if (message_arena == nullptr) {
+    delete reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::MessageLite*>(result_id_);
+  }
+  if (result_id) {
+    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
+        ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(
+                reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(result_id));
+    if (message_arena != submessage_arena) {
+      result_id = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
+          message_arena, result_id, submessage_arena);
+    }
+    
+  } else {
+    
+  }
+  result_id_ = result_id;
+  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.StartConsoleRequest.result_id)
+}
+
+// string session_type = 2;
+inline void StartConsoleRequest::clear_session_type() {
+  session_type_.ClearToEmpty();
+}
+inline const std::string& StartConsoleRequest::session_type() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.StartConsoleRequest.session_type)
+  return _internal_session_type();
+}
+template <typename ArgT0, typename... ArgT>
+inline PROTOBUF_ALWAYS_INLINE
+void StartConsoleRequest::set_session_type(ArgT0&& arg0, ArgT... args) {
+ 
+ session_type_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation());
+  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.StartConsoleRequest.session_type)
+}
+inline std::string* StartConsoleRequest::mutable_session_type() {
+  std::string* _s = _internal_mutable_session_type();
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.StartConsoleRequest.session_type)
+  return _s;
+}
+inline const std::string& StartConsoleRequest::_internal_session_type() const {
+  return session_type_.Get();
+}
+inline void StartConsoleRequest::_internal_set_session_type(const std::string& value) {
+  
+  session_type_.Set(value, GetArenaForAllocation());
+}
+inline std::string* StartConsoleRequest::_internal_mutable_session_type() {
+  
+  return session_type_.Mutable(GetArenaForAllocation());
+}
+inline std::string* StartConsoleRequest::release_session_type() {
+  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.StartConsoleRequest.session_type)
+  return session_type_.Release();
+}
+inline void StartConsoleRequest::set_allocated_session_type(std::string* session_type) {
+  if (session_type != nullptr) {
+    
+  } else {
+    
+  }
+  session_type_.SetAllocated(session_type, GetArenaForAllocation());
+#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  if (session_type_.IsDefault()) {
+    session_type_.Set("", GetArenaForAllocation());
+  }
+#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.StartConsoleRequest.session_type)
+}
+
+// -------------------------------------------------------------------
+
+// StartConsoleResponse
+
+// .io.deephaven.proto.backplane.grpc.Ticket result_id = 1;
+inline bool StartConsoleResponse::_internal_has_result_id() const {
+  return this != internal_default_instance() && result_id_ != nullptr;
+}
+inline bool StartConsoleResponse::has_result_id() const {
+  return _internal_has_result_id();
+}
+inline const ::io::deephaven::proto::backplane::grpc::Ticket& StartConsoleResponse::_internal_result_id() const {
+  const ::io::deephaven::proto::backplane::grpc::Ticket* p = result_id_;
+  return p != nullptr ? *p : reinterpret_cast<const ::io::deephaven::proto::backplane::grpc::Ticket&>(
+      ::io::deephaven::proto::backplane::grpc::_Ticket_default_instance_);
+}
+inline const ::io::deephaven::proto::backplane::grpc::Ticket& StartConsoleResponse::result_id() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.StartConsoleResponse.result_id)
+  return _internal_result_id();
+}
+inline void StartConsoleResponse::unsafe_arena_set_allocated_result_id(
+    ::io::deephaven::proto::backplane::grpc::Ticket* result_id) {
+  if (GetArenaForAllocation() == nullptr) {
+    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(result_id_);
+  }
+  result_id_ = result_id;
+  if (result_id) {
+    
+  } else {
+    
+  }
+  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:io.deephaven.proto.backplane.script.grpc.StartConsoleResponse.result_id)
+}
+inline ::io::deephaven::proto::backplane::grpc::Ticket* StartConsoleResponse::release_result_id() {
+  
+  ::io::deephaven::proto::backplane::grpc::Ticket* temp = result_id_;
+  result_id_ = nullptr;
+#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
+  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
+  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
+  if (GetArenaForAllocation() == nullptr) { delete old; }
+#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
+  if (GetArenaForAllocation() != nullptr) {
+    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
+  }
+#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
+  return temp;
+}
+inline ::io::deephaven::proto::backplane::grpc::Ticket* StartConsoleResponse::unsafe_arena_release_result_id() {
+  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.StartConsoleResponse.result_id)
+  
+  ::io::deephaven::proto::backplane::grpc::Ticket* temp = result_id_;
+  result_id_ = nullptr;
+  return temp;
+}
+inline ::io::deephaven::proto::backplane::grpc::Ticket* StartConsoleResponse::_internal_mutable_result_id() {
+  
+  if (result_id_ == nullptr) {
+    auto* p = CreateMaybeMessage<::io::deephaven::proto::backplane::grpc::Ticket>(GetArenaForAllocation());
+    result_id_ = p;
+  }
+  return result_id_;
+}
+inline ::io::deephaven::proto::backplane::grpc::Ticket* StartConsoleResponse::mutable_result_id() {
+  ::io::deephaven::proto::backplane::grpc::Ticket* _msg = _internal_mutable_result_id();
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.StartConsoleResponse.result_id)
+  return _msg;
+}
+inline void StartConsoleResponse::set_allocated_result_id(::io::deephaven::proto::backplane::grpc::Ticket* result_id) {
+  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
+  if (message_arena == nullptr) {
+    delete reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::MessageLite*>(result_id_);
+  }
+  if (result_id) {
+    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
+        ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(
+                reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(result_id));
+    if (message_arena != submessage_arena) {
+      result_id = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
+          message_arena, result_id, submessage_arena);
+    }
+    
+  } else {
+    
+  }
+  result_id_ = result_id;
+  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.StartConsoleResponse.result_id)
+}
+
+// -------------------------------------------------------------------
+
+// GetHeapInfoRequest
+
+// -------------------------------------------------------------------
+
+// GetHeapInfoResponse
+
+// int64 max_memory = 1 [jstype = JS_STRING];
+inline void GetHeapInfoResponse::clear_max_memory() {
+  max_memory_ = int64_t{0};
+}
+inline int64_t GetHeapInfoResponse::_internal_max_memory() const {
+  return max_memory_;
+}
+inline int64_t GetHeapInfoResponse::max_memory() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.GetHeapInfoResponse.max_memory)
+  return _internal_max_memory();
+}
+inline void GetHeapInfoResponse::_internal_set_max_memory(int64_t value) {
+  
+  max_memory_ = value;
+}
+inline void GetHeapInfoResponse::set_max_memory(int64_t value) {
+  _internal_set_max_memory(value);
+  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.GetHeapInfoResponse.max_memory)
+}
+
+// int64 total_memory = 2 [jstype = JS_STRING];
+inline void GetHeapInfoResponse::clear_total_memory() {
+  total_memory_ = int64_t{0};
+}
+inline int64_t GetHeapInfoResponse::_internal_total_memory() const {
+  return total_memory_;
+}
+inline int64_t GetHeapInfoResponse::total_memory() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.GetHeapInfoResponse.total_memory)
+  return _internal_total_memory();
+}
+inline void GetHeapInfoResponse::_internal_set_total_memory(int64_t value) {
+  
+  total_memory_ = value;
+}
+inline void GetHeapInfoResponse::set_total_memory(int64_t value) {
+  _internal_set_total_memory(value);
+  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.GetHeapInfoResponse.total_memory)
+}
+
+// int64 free_memory = 3 [jstype = JS_STRING];
+inline void GetHeapInfoResponse::clear_free_memory() {
+  free_memory_ = int64_t{0};
+}
+inline int64_t GetHeapInfoResponse::_internal_free_memory() const {
+  return free_memory_;
+}
+inline int64_t GetHeapInfoResponse::free_memory() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.GetHeapInfoResponse.free_memory)
+  return _internal_free_memory();
+}
+inline void GetHeapInfoResponse::_internal_set_free_memory(int64_t value) {
+  
+  free_memory_ = value;
+}
+inline void GetHeapInfoResponse::set_free_memory(int64_t value) {
+  _internal_set_free_memory(value);
+  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.GetHeapInfoResponse.free_memory)
+}
+
+// -------------------------------------------------------------------
+
+// LogSubscriptionRequest
+
+// int64 last_seen_log_timestamp = 1 [jstype = JS_STRING];
+inline void LogSubscriptionRequest::clear_last_seen_log_timestamp() {
+  last_seen_log_timestamp_ = int64_t{0};
+}
+inline int64_t LogSubscriptionRequest::_internal_last_seen_log_timestamp() const {
+  return last_seen_log_timestamp_;
+}
+inline int64_t LogSubscriptionRequest::last_seen_log_timestamp() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.LogSubscriptionRequest.last_seen_log_timestamp)
+  return _internal_last_seen_log_timestamp();
+}
+inline void LogSubscriptionRequest::_internal_set_last_seen_log_timestamp(int64_t value) {
+  
+  last_seen_log_timestamp_ = value;
+}
+inline void LogSubscriptionRequest::set_last_seen_log_timestamp(int64_t value) {
+  _internal_set_last_seen_log_timestamp(value);
+  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.LogSubscriptionRequest.last_seen_log_timestamp)
+}
+
+// repeated string levels = 2;
+inline int LogSubscriptionRequest::_internal_levels_size() const {
+  return levels_.size();
+}
+inline int LogSubscriptionRequest::levels_size() const {
+  return _internal_levels_size();
+}
+inline void LogSubscriptionRequest::clear_levels() {
+  levels_.Clear();
+}
+inline std::string* LogSubscriptionRequest::add_levels() {
+  std::string* _s = _internal_add_levels();
+  // @@protoc_insertion_point(field_add_mutable:io.deephaven.proto.backplane.script.grpc.LogSubscriptionRequest.levels)
+  return _s;
+}
+inline const std::string& LogSubscriptionRequest::_internal_levels(int index) const {
+  return levels_.Get(index);
+}
+inline const std::string& LogSubscriptionRequest::levels(int index) const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.LogSubscriptionRequest.levels)
+  return _internal_levels(index);
+}
+inline std::string* LogSubscriptionRequest::mutable_levels(int index) {
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.LogSubscriptionRequest.levels)
+  return levels_.Mutable(index);
+}
+inline void LogSubscriptionRequest::set_levels(int index, const std::string& value) {
+  levels_.Mutable(index)->assign(value);
+  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.LogSubscriptionRequest.levels)
+}
+inline void LogSubscriptionRequest::set_levels(int index, std::string&& value) {
+  levels_.Mutable(index)->assign(std::move(value));
+  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.LogSubscriptionRequest.levels)
+}
+inline void LogSubscriptionRequest::set_levels(int index, const char* value) {
+  GOOGLE_DCHECK(value != nullptr);
+  levels_.Mutable(index)->assign(value);
+  // @@protoc_insertion_point(field_set_char:io.deephaven.proto.backplane.script.grpc.LogSubscriptionRequest.levels)
+}
+inline void LogSubscriptionRequest::set_levels(int index, const char* value, size_t size) {
+  levels_.Mutable(index)->assign(
+    reinterpret_cast<const char*>(value), size);
+  // @@protoc_insertion_point(field_set_pointer:io.deephaven.proto.backplane.script.grpc.LogSubscriptionRequest.levels)
+}
+inline std::string* LogSubscriptionRequest::_internal_add_levels() {
+  return levels_.Add();
+}
+inline void LogSubscriptionRequest::add_levels(const std::string& value) {
+  levels_.Add()->assign(value);
+  // @@protoc_insertion_point(field_add:io.deephaven.proto.backplane.script.grpc.LogSubscriptionRequest.levels)
+}
+inline void LogSubscriptionRequest::add_levels(std::string&& value) {
+  levels_.Add(std::move(value));
+  // @@protoc_insertion_point(field_add:io.deephaven.proto.backplane.script.grpc.LogSubscriptionRequest.levels)
+}
+inline void LogSubscriptionRequest::add_levels(const char* value) {
+  GOOGLE_DCHECK(value != nullptr);
+  levels_.Add()->assign(value);
+  // @@protoc_insertion_point(field_add_char:io.deephaven.proto.backplane.script.grpc.LogSubscriptionRequest.levels)
+}
+inline void LogSubscriptionRequest::add_levels(const char* value, size_t size) {
+  levels_.Add()->assign(reinterpret_cast<const char*>(value), size);
+  // @@protoc_insertion_point(field_add_pointer:io.deephaven.proto.backplane.script.grpc.LogSubscriptionRequest.levels)
+}
+inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>&
+LogSubscriptionRequest::levels() const {
+  // @@protoc_insertion_point(field_list:io.deephaven.proto.backplane.script.grpc.LogSubscriptionRequest.levels)
+  return levels_;
+}
+inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>*
+LogSubscriptionRequest::mutable_levels() {
+  // @@protoc_insertion_point(field_mutable_list:io.deephaven.proto.backplane.script.grpc.LogSubscriptionRequest.levels)
+  return &levels_;
+}
+
+// -------------------------------------------------------------------
+
+// LogSubscriptionData
+
+// int64 micros = 1 [jstype = JS_STRING];
+inline void LogSubscriptionData::clear_micros() {
+  micros_ = int64_t{0};
+}
+inline int64_t LogSubscriptionData::_internal_micros() const {
+  return micros_;
+}
+inline int64_t LogSubscriptionData::micros() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.LogSubscriptionData.micros)
+  return _internal_micros();
+}
+inline void LogSubscriptionData::_internal_set_micros(int64_t value) {
+  
+  micros_ = value;
+}
+inline void LogSubscriptionData::set_micros(int64_t value) {
+  _internal_set_micros(value);
+  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.LogSubscriptionData.micros)
+}
+
+// string log_level = 2;
+inline void LogSubscriptionData::clear_log_level() {
+  log_level_.ClearToEmpty();
+}
+inline const std::string& LogSubscriptionData::log_level() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.LogSubscriptionData.log_level)
+  return _internal_log_level();
+}
+template <typename ArgT0, typename... ArgT>
+inline PROTOBUF_ALWAYS_INLINE
+void LogSubscriptionData::set_log_level(ArgT0&& arg0, ArgT... args) {
+ 
+ log_level_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation());
+  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.LogSubscriptionData.log_level)
+}
+inline std::string* LogSubscriptionData::mutable_log_level() {
+  std::string* _s = _internal_mutable_log_level();
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.LogSubscriptionData.log_level)
+  return _s;
+}
+inline const std::string& LogSubscriptionData::_internal_log_level() const {
+  return log_level_.Get();
+}
+inline void LogSubscriptionData::_internal_set_log_level(const std::string& value) {
+  
+  log_level_.Set(value, GetArenaForAllocation());
+}
+inline std::string* LogSubscriptionData::_internal_mutable_log_level() {
+  
+  return log_level_.Mutable(GetArenaForAllocation());
+}
+inline std::string* LogSubscriptionData::release_log_level() {
+  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.LogSubscriptionData.log_level)
+  return log_level_.Release();
+}
+inline void LogSubscriptionData::set_allocated_log_level(std::string* log_level) {
+  if (log_level != nullptr) {
+    
+  } else {
+    
+  }
+  log_level_.SetAllocated(log_level, GetArenaForAllocation());
+#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  if (log_level_.IsDefault()) {
+    log_level_.Set("", GetArenaForAllocation());
+  }
+#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.LogSubscriptionData.log_level)
+}
+
+// string message = 3;
+inline void LogSubscriptionData::clear_message() {
+  message_.ClearToEmpty();
+}
+inline const std::string& LogSubscriptionData::message() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.LogSubscriptionData.message)
+  return _internal_message();
+}
+template <typename ArgT0, typename... ArgT>
+inline PROTOBUF_ALWAYS_INLINE
+void LogSubscriptionData::set_message(ArgT0&& arg0, ArgT... args) {
+ 
+ message_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation());
+  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.LogSubscriptionData.message)
+}
+inline std::string* LogSubscriptionData::mutable_message() {
+  std::string* _s = _internal_mutable_message();
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.LogSubscriptionData.message)
+  return _s;
+}
+inline const std::string& LogSubscriptionData::_internal_message() const {
+  return message_.Get();
+}
+inline void LogSubscriptionData::_internal_set_message(const std::string& value) {
+  
+  message_.Set(value, GetArenaForAllocation());
+}
+inline std::string* LogSubscriptionData::_internal_mutable_message() {
+  
+  return message_.Mutable(GetArenaForAllocation());
+}
+inline std::string* LogSubscriptionData::release_message() {
+  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.LogSubscriptionData.message)
+  return message_.Release();
+}
+inline void LogSubscriptionData::set_allocated_message(std::string* message) {
+  if (message != nullptr) {
+    
+  } else {
+    
+  }
+  message_.SetAllocated(message, GetArenaForAllocation());
+#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  if (message_.IsDefault()) {
+    message_.Set("", GetArenaForAllocation());
+  }
+#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.LogSubscriptionData.message)
+}
+
+// -------------------------------------------------------------------
+
+// ExecuteCommandRequest
+
+// .io.deephaven.proto.backplane.grpc.Ticket console_id = 1;
+inline bool ExecuteCommandRequest::_internal_has_console_id() const {
+  return this != internal_default_instance() && console_id_ != nullptr;
+}
+inline bool ExecuteCommandRequest::has_console_id() const {
+  return _internal_has_console_id();
+}
+inline const ::io::deephaven::proto::backplane::grpc::Ticket& ExecuteCommandRequest::_internal_console_id() const {
+  const ::io::deephaven::proto::backplane::grpc::Ticket* p = console_id_;
+  return p != nullptr ? *p : reinterpret_cast<const ::io::deephaven::proto::backplane::grpc::Ticket&>(
+      ::io::deephaven::proto::backplane::grpc::_Ticket_default_instance_);
+}
+inline const ::io::deephaven::proto::backplane::grpc::Ticket& ExecuteCommandRequest::console_id() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.ExecuteCommandRequest.console_id)
+  return _internal_console_id();
+}
+inline void ExecuteCommandRequest::unsafe_arena_set_allocated_console_id(
+    ::io::deephaven::proto::backplane::grpc::Ticket* console_id) {
+  if (GetArenaForAllocation() == nullptr) {
+    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(console_id_);
+  }
+  console_id_ = console_id;
+  if (console_id) {
+    
+  } else {
+    
+  }
+  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:io.deephaven.proto.backplane.script.grpc.ExecuteCommandRequest.console_id)
+}
+inline ::io::deephaven::proto::backplane::grpc::Ticket* ExecuteCommandRequest::release_console_id() {
+  
+  ::io::deephaven::proto::backplane::grpc::Ticket* temp = console_id_;
+  console_id_ = nullptr;
+#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
+  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
+  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
+  if (GetArenaForAllocation() == nullptr) { delete old; }
+#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
+  if (GetArenaForAllocation() != nullptr) {
+    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
+  }
+#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
+  return temp;
+}
+inline ::io::deephaven::proto::backplane::grpc::Ticket* ExecuteCommandRequest::unsafe_arena_release_console_id() {
+  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.ExecuteCommandRequest.console_id)
+  
+  ::io::deephaven::proto::backplane::grpc::Ticket* temp = console_id_;
+  console_id_ = nullptr;
+  return temp;
+}
+inline ::io::deephaven::proto::backplane::grpc::Ticket* ExecuteCommandRequest::_internal_mutable_console_id() {
+  
+  if (console_id_ == nullptr) {
+    auto* p = CreateMaybeMessage<::io::deephaven::proto::backplane::grpc::Ticket>(GetArenaForAllocation());
+    console_id_ = p;
+  }
+  return console_id_;
+}
+inline ::io::deephaven::proto::backplane::grpc::Ticket* ExecuteCommandRequest::mutable_console_id() {
+  ::io::deephaven::proto::backplane::grpc::Ticket* _msg = _internal_mutable_console_id();
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.ExecuteCommandRequest.console_id)
+  return _msg;
+}
+inline void ExecuteCommandRequest::set_allocated_console_id(::io::deephaven::proto::backplane::grpc::Ticket* console_id) {
+  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
+  if (message_arena == nullptr) {
+    delete reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::MessageLite*>(console_id_);
+  }
+  if (console_id) {
+    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
+        ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(
+                reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(console_id));
+    if (message_arena != submessage_arena) {
+      console_id = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
+          message_arena, console_id, submessage_arena);
+    }
+    
+  } else {
+    
+  }
+  console_id_ = console_id;
+  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.ExecuteCommandRequest.console_id)
+}
+
+// string code = 3;
+inline void ExecuteCommandRequest::clear_code() {
+  code_.ClearToEmpty();
+}
+inline const std::string& ExecuteCommandRequest::code() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.ExecuteCommandRequest.code)
+  return _internal_code();
+}
+template <typename ArgT0, typename... ArgT>
+inline PROTOBUF_ALWAYS_INLINE
+void ExecuteCommandRequest::set_code(ArgT0&& arg0, ArgT... args) {
+ 
+ code_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation());
+  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.ExecuteCommandRequest.code)
+}
+inline std::string* ExecuteCommandRequest::mutable_code() {
+  std::string* _s = _internal_mutable_code();
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.ExecuteCommandRequest.code)
+  return _s;
+}
+inline const std::string& ExecuteCommandRequest::_internal_code() const {
+  return code_.Get();
+}
+inline void ExecuteCommandRequest::_internal_set_code(const std::string& value) {
+  
+  code_.Set(value, GetArenaForAllocation());
+}
+inline std::string* ExecuteCommandRequest::_internal_mutable_code() {
+  
+  return code_.Mutable(GetArenaForAllocation());
+}
+inline std::string* ExecuteCommandRequest::release_code() {
+  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.ExecuteCommandRequest.code)
+  return code_.Release();
+}
+inline void ExecuteCommandRequest::set_allocated_code(std::string* code) {
+  if (code != nullptr) {
+    
+  } else {
+    
+  }
+  code_.SetAllocated(code, GetArenaForAllocation());
+#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  if (code_.IsDefault()) {
+    code_.Set("", GetArenaForAllocation());
+  }
+#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.ExecuteCommandRequest.code)
+}
+
+// -------------------------------------------------------------------
+
+// ExecuteCommandResponse
+
+// string error_message = 1;
+inline void ExecuteCommandResponse::clear_error_message() {
+  error_message_.ClearToEmpty();
+}
+inline const std::string& ExecuteCommandResponse::error_message() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.ExecuteCommandResponse.error_message)
+  return _internal_error_message();
+}
+template <typename ArgT0, typename... ArgT>
+inline PROTOBUF_ALWAYS_INLINE
+void ExecuteCommandResponse::set_error_message(ArgT0&& arg0, ArgT... args) {
+ 
+ error_message_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation());
+  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.ExecuteCommandResponse.error_message)
+}
+inline std::string* ExecuteCommandResponse::mutable_error_message() {
+  std::string* _s = _internal_mutable_error_message();
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.ExecuteCommandResponse.error_message)
+  return _s;
+}
+inline const std::string& ExecuteCommandResponse::_internal_error_message() const {
+  return error_message_.Get();
+}
+inline void ExecuteCommandResponse::_internal_set_error_message(const std::string& value) {
+  
+  error_message_.Set(value, GetArenaForAllocation());
+}
+inline std::string* ExecuteCommandResponse::_internal_mutable_error_message() {
+  
+  return error_message_.Mutable(GetArenaForAllocation());
+}
+inline std::string* ExecuteCommandResponse::release_error_message() {
+  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.ExecuteCommandResponse.error_message)
+  return error_message_.Release();
+}
+inline void ExecuteCommandResponse::set_allocated_error_message(std::string* error_message) {
+  if (error_message != nullptr) {
+    
+  } else {
+    
+  }
+  error_message_.SetAllocated(error_message, GetArenaForAllocation());
+#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  if (error_message_.IsDefault()) {
+    error_message_.Set("", GetArenaForAllocation());
+  }
+#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.ExecuteCommandResponse.error_message)
+}
+
+// .io.deephaven.proto.backplane.grpc.FieldsChangeUpdate changes = 2;
+inline bool ExecuteCommandResponse::_internal_has_changes() const {
+  return this != internal_default_instance() && changes_ != nullptr;
+}
+inline bool ExecuteCommandResponse::has_changes() const {
+  return _internal_has_changes();
+}
+inline const ::io::deephaven::proto::backplane::grpc::FieldsChangeUpdate& ExecuteCommandResponse::_internal_changes() const {
+  const ::io::deephaven::proto::backplane::grpc::FieldsChangeUpdate* p = changes_;
+  return p != nullptr ? *p : reinterpret_cast<const ::io::deephaven::proto::backplane::grpc::FieldsChangeUpdate&>(
+      ::io::deephaven::proto::backplane::grpc::_FieldsChangeUpdate_default_instance_);
+}
+inline const ::io::deephaven::proto::backplane::grpc::FieldsChangeUpdate& ExecuteCommandResponse::changes() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.ExecuteCommandResponse.changes)
+  return _internal_changes();
+}
+inline void ExecuteCommandResponse::unsafe_arena_set_allocated_changes(
+    ::io::deephaven::proto::backplane::grpc::FieldsChangeUpdate* changes) {
+  if (GetArenaForAllocation() == nullptr) {
+    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(changes_);
+  }
+  changes_ = changes;
+  if (changes) {
+    
+  } else {
+    
+  }
+  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:io.deephaven.proto.backplane.script.grpc.ExecuteCommandResponse.changes)
+}
+inline ::io::deephaven::proto::backplane::grpc::FieldsChangeUpdate* ExecuteCommandResponse::release_changes() {
+  
+  ::io::deephaven::proto::backplane::grpc::FieldsChangeUpdate* temp = changes_;
+  changes_ = nullptr;
+#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
+  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
+  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
+  if (GetArenaForAllocation() == nullptr) { delete old; }
+#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
+  if (GetArenaForAllocation() != nullptr) {
+    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
+  }
+#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
+  return temp;
+}
+inline ::io::deephaven::proto::backplane::grpc::FieldsChangeUpdate* ExecuteCommandResponse::unsafe_arena_release_changes() {
+  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.ExecuteCommandResponse.changes)
+  
+  ::io::deephaven::proto::backplane::grpc::FieldsChangeUpdate* temp = changes_;
+  changes_ = nullptr;
+  return temp;
+}
+inline ::io::deephaven::proto::backplane::grpc::FieldsChangeUpdate* ExecuteCommandResponse::_internal_mutable_changes() {
+  
+  if (changes_ == nullptr) {
+    auto* p = CreateMaybeMessage<::io::deephaven::proto::backplane::grpc::FieldsChangeUpdate>(GetArenaForAllocation());
+    changes_ = p;
+  }
+  return changes_;
+}
+inline ::io::deephaven::proto::backplane::grpc::FieldsChangeUpdate* ExecuteCommandResponse::mutable_changes() {
+  ::io::deephaven::proto::backplane::grpc::FieldsChangeUpdate* _msg = _internal_mutable_changes();
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.ExecuteCommandResponse.changes)
+  return _msg;
+}
+inline void ExecuteCommandResponse::set_allocated_changes(::io::deephaven::proto::backplane::grpc::FieldsChangeUpdate* changes) {
+  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
+  if (message_arena == nullptr) {
+    delete reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::MessageLite*>(changes_);
+  }
+  if (changes) {
+    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
+        ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(
+                reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(changes));
+    if (message_arena != submessage_arena) {
+      changes = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
+          message_arena, changes, submessage_arena);
+    }
+    
+  } else {
+    
+  }
+  changes_ = changes;
+  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.ExecuteCommandResponse.changes)
+}
+
+// -------------------------------------------------------------------
+
+// BindTableToVariableRequest
+
+// .io.deephaven.proto.backplane.grpc.Ticket console_id = 1;
+inline bool BindTableToVariableRequest::_internal_has_console_id() const {
+  return this != internal_default_instance() && console_id_ != nullptr;
+}
+inline bool BindTableToVariableRequest::has_console_id() const {
+  return _internal_has_console_id();
+}
+inline const ::io::deephaven::proto::backplane::grpc::Ticket& BindTableToVariableRequest::_internal_console_id() const {
+  const ::io::deephaven::proto::backplane::grpc::Ticket* p = console_id_;
+  return p != nullptr ? *p : reinterpret_cast<const ::io::deephaven::proto::backplane::grpc::Ticket&>(
+      ::io::deephaven::proto::backplane::grpc::_Ticket_default_instance_);
+}
+inline const ::io::deephaven::proto::backplane::grpc::Ticket& BindTableToVariableRequest::console_id() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.BindTableToVariableRequest.console_id)
+  return _internal_console_id();
+}
+inline void BindTableToVariableRequest::unsafe_arena_set_allocated_console_id(
+    ::io::deephaven::proto::backplane::grpc::Ticket* console_id) {
+  if (GetArenaForAllocation() == nullptr) {
+    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(console_id_);
+  }
+  console_id_ = console_id;
+  if (console_id) {
+    
+  } else {
+    
+  }
+  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:io.deephaven.proto.backplane.script.grpc.BindTableToVariableRequest.console_id)
+}
+inline ::io::deephaven::proto::backplane::grpc::Ticket* BindTableToVariableRequest::release_console_id() {
+  
+  ::io::deephaven::proto::backplane::grpc::Ticket* temp = console_id_;
+  console_id_ = nullptr;
+#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
+  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
+  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
+  if (GetArenaForAllocation() == nullptr) { delete old; }
+#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
+  if (GetArenaForAllocation() != nullptr) {
+    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
+  }
+#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
+  return temp;
+}
+inline ::io::deephaven::proto::backplane::grpc::Ticket* BindTableToVariableRequest::unsafe_arena_release_console_id() {
+  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.BindTableToVariableRequest.console_id)
+  
+  ::io::deephaven::proto::backplane::grpc::Ticket* temp = console_id_;
+  console_id_ = nullptr;
+  return temp;
+}
+inline ::io::deephaven::proto::backplane::grpc::Ticket* BindTableToVariableRequest::_internal_mutable_console_id() {
+  
+  if (console_id_ == nullptr) {
+    auto* p = CreateMaybeMessage<::io::deephaven::proto::backplane::grpc::Ticket>(GetArenaForAllocation());
+    console_id_ = p;
+  }
+  return console_id_;
+}
+inline ::io::deephaven::proto::backplane::grpc::Ticket* BindTableToVariableRequest::mutable_console_id() {
+  ::io::deephaven::proto::backplane::grpc::Ticket* _msg = _internal_mutable_console_id();
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.BindTableToVariableRequest.console_id)
+  return _msg;
+}
+inline void BindTableToVariableRequest::set_allocated_console_id(::io::deephaven::proto::backplane::grpc::Ticket* console_id) {
+  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
+  if (message_arena == nullptr) {
+    delete reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::MessageLite*>(console_id_);
+  }
+  if (console_id) {
+    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
+        ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(
+                reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(console_id));
+    if (message_arena != submessage_arena) {
+      console_id = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
+          message_arena, console_id, submessage_arena);
+    }
+    
+  } else {
+    
+  }
+  console_id_ = console_id;
+  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.BindTableToVariableRequest.console_id)
+}
+
+// string variable_name = 3;
+inline void BindTableToVariableRequest::clear_variable_name() {
+  variable_name_.ClearToEmpty();
+}
+inline const std::string& BindTableToVariableRequest::variable_name() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.BindTableToVariableRequest.variable_name)
+  return _internal_variable_name();
+}
+template <typename ArgT0, typename... ArgT>
+inline PROTOBUF_ALWAYS_INLINE
+void BindTableToVariableRequest::set_variable_name(ArgT0&& arg0, ArgT... args) {
+ 
+ variable_name_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation());
+  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.BindTableToVariableRequest.variable_name)
+}
+inline std::string* BindTableToVariableRequest::mutable_variable_name() {
+  std::string* _s = _internal_mutable_variable_name();
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.BindTableToVariableRequest.variable_name)
+  return _s;
+}
+inline const std::string& BindTableToVariableRequest::_internal_variable_name() const {
+  return variable_name_.Get();
+}
+inline void BindTableToVariableRequest::_internal_set_variable_name(const std::string& value) {
+  
+  variable_name_.Set(value, GetArenaForAllocation());
+}
+inline std::string* BindTableToVariableRequest::_internal_mutable_variable_name() {
+  
+  return variable_name_.Mutable(GetArenaForAllocation());
+}
+inline std::string* BindTableToVariableRequest::release_variable_name() {
+  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.BindTableToVariableRequest.variable_name)
+  return variable_name_.Release();
+}
+inline void BindTableToVariableRequest::set_allocated_variable_name(std::string* variable_name) {
+  if (variable_name != nullptr) {
+    
+  } else {
+    
+  }
+  variable_name_.SetAllocated(variable_name, GetArenaForAllocation());
+#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  if (variable_name_.IsDefault()) {
+    variable_name_.Set("", GetArenaForAllocation());
+  }
+#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.BindTableToVariableRequest.variable_name)
+}
+
+// .io.deephaven.proto.backplane.grpc.Ticket table_id = 4;
+inline bool BindTableToVariableRequest::_internal_has_table_id() const {
+  return this != internal_default_instance() && table_id_ != nullptr;
+}
+inline bool BindTableToVariableRequest::has_table_id() const {
+  return _internal_has_table_id();
+}
+inline const ::io::deephaven::proto::backplane::grpc::Ticket& BindTableToVariableRequest::_internal_table_id() const {
+  const ::io::deephaven::proto::backplane::grpc::Ticket* p = table_id_;
+  return p != nullptr ? *p : reinterpret_cast<const ::io::deephaven::proto::backplane::grpc::Ticket&>(
+      ::io::deephaven::proto::backplane::grpc::_Ticket_default_instance_);
+}
+inline const ::io::deephaven::proto::backplane::grpc::Ticket& BindTableToVariableRequest::table_id() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.BindTableToVariableRequest.table_id)
+  return _internal_table_id();
+}
+inline void BindTableToVariableRequest::unsafe_arena_set_allocated_table_id(
+    ::io::deephaven::proto::backplane::grpc::Ticket* table_id) {
+  if (GetArenaForAllocation() == nullptr) {
+    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(table_id_);
+  }
+  table_id_ = table_id;
+  if (table_id) {
+    
+  } else {
+    
+  }
+  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:io.deephaven.proto.backplane.script.grpc.BindTableToVariableRequest.table_id)
+}
+inline ::io::deephaven::proto::backplane::grpc::Ticket* BindTableToVariableRequest::release_table_id() {
+  
+  ::io::deephaven::proto::backplane::grpc::Ticket* temp = table_id_;
+  table_id_ = nullptr;
+#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
+  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
+  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
+  if (GetArenaForAllocation() == nullptr) { delete old; }
+#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
+  if (GetArenaForAllocation() != nullptr) {
+    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
+  }
+#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
+  return temp;
+}
+inline ::io::deephaven::proto::backplane::grpc::Ticket* BindTableToVariableRequest::unsafe_arena_release_table_id() {
+  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.BindTableToVariableRequest.table_id)
+  
+  ::io::deephaven::proto::backplane::grpc::Ticket* temp = table_id_;
+  table_id_ = nullptr;
+  return temp;
+}
+inline ::io::deephaven::proto::backplane::grpc::Ticket* BindTableToVariableRequest::_internal_mutable_table_id() {
+  
+  if (table_id_ == nullptr) {
+    auto* p = CreateMaybeMessage<::io::deephaven::proto::backplane::grpc::Ticket>(GetArenaForAllocation());
+    table_id_ = p;
+  }
+  return table_id_;
+}
+inline ::io::deephaven::proto::backplane::grpc::Ticket* BindTableToVariableRequest::mutable_table_id() {
+  ::io::deephaven::proto::backplane::grpc::Ticket* _msg = _internal_mutable_table_id();
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.BindTableToVariableRequest.table_id)
+  return _msg;
+}
+inline void BindTableToVariableRequest::set_allocated_table_id(::io::deephaven::proto::backplane::grpc::Ticket* table_id) {
+  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
+  if (message_arena == nullptr) {
+    delete reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::MessageLite*>(table_id_);
+  }
+  if (table_id) {
+    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
+        ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(
+                reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(table_id));
+    if (message_arena != submessage_arena) {
+      table_id = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
+          message_arena, table_id, submessage_arena);
+    }
+    
+  } else {
+    
+  }
+  table_id_ = table_id;
+  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.BindTableToVariableRequest.table_id)
+}
+
+// -------------------------------------------------------------------
+
+// BindTableToVariableResponse
+
+// -------------------------------------------------------------------
+
+// CancelCommandRequest
+
+// .io.deephaven.proto.backplane.grpc.Ticket console_id = 1;
+inline bool CancelCommandRequest::_internal_has_console_id() const {
+  return this != internal_default_instance() && console_id_ != nullptr;
+}
+inline bool CancelCommandRequest::has_console_id() const {
+  return _internal_has_console_id();
+}
+inline const ::io::deephaven::proto::backplane::grpc::Ticket& CancelCommandRequest::_internal_console_id() const {
+  const ::io::deephaven::proto::backplane::grpc::Ticket* p = console_id_;
+  return p != nullptr ? *p : reinterpret_cast<const ::io::deephaven::proto::backplane::grpc::Ticket&>(
+      ::io::deephaven::proto::backplane::grpc::_Ticket_default_instance_);
+}
+inline const ::io::deephaven::proto::backplane::grpc::Ticket& CancelCommandRequest::console_id() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.CancelCommandRequest.console_id)
+  return _internal_console_id();
+}
+inline void CancelCommandRequest::unsafe_arena_set_allocated_console_id(
+    ::io::deephaven::proto::backplane::grpc::Ticket* console_id) {
+  if (GetArenaForAllocation() == nullptr) {
+    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(console_id_);
+  }
+  console_id_ = console_id;
+  if (console_id) {
+    
+  } else {
+    
+  }
+  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:io.deephaven.proto.backplane.script.grpc.CancelCommandRequest.console_id)
+}
+inline ::io::deephaven::proto::backplane::grpc::Ticket* CancelCommandRequest::release_console_id() {
+  
+  ::io::deephaven::proto::backplane::grpc::Ticket* temp = console_id_;
+  console_id_ = nullptr;
+#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
+  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
+  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
+  if (GetArenaForAllocation() == nullptr) { delete old; }
+#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
+  if (GetArenaForAllocation() != nullptr) {
+    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
+  }
+#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
+  return temp;
+}
+inline ::io::deephaven::proto::backplane::grpc::Ticket* CancelCommandRequest::unsafe_arena_release_console_id() {
+  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.CancelCommandRequest.console_id)
+  
+  ::io::deephaven::proto::backplane::grpc::Ticket* temp = console_id_;
+  console_id_ = nullptr;
+  return temp;
+}
+inline ::io::deephaven::proto::backplane::grpc::Ticket* CancelCommandRequest::_internal_mutable_console_id() {
+  
+  if (console_id_ == nullptr) {
+    auto* p = CreateMaybeMessage<::io::deephaven::proto::backplane::grpc::Ticket>(GetArenaForAllocation());
+    console_id_ = p;
+  }
+  return console_id_;
+}
+inline ::io::deephaven::proto::backplane::grpc::Ticket* CancelCommandRequest::mutable_console_id() {
+  ::io::deephaven::proto::backplane::grpc::Ticket* _msg = _internal_mutable_console_id();
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.CancelCommandRequest.console_id)
+  return _msg;
+}
+inline void CancelCommandRequest::set_allocated_console_id(::io::deephaven::proto::backplane::grpc::Ticket* console_id) {
+  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
+  if (message_arena == nullptr) {
+    delete reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::MessageLite*>(console_id_);
+  }
+  if (console_id) {
+    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
+        ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(
+                reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(console_id));
+    if (message_arena != submessage_arena) {
+      console_id = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
+          message_arena, console_id, submessage_arena);
+    }
+    
+  } else {
+    
+  }
+  console_id_ = console_id;
+  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.CancelCommandRequest.console_id)
+}
+
+// .io.deephaven.proto.backplane.grpc.Ticket command_id = 2;
+inline bool CancelCommandRequest::_internal_has_command_id() const {
+  return this != internal_default_instance() && command_id_ != nullptr;
+}
+inline bool CancelCommandRequest::has_command_id() const {
+  return _internal_has_command_id();
+}
+inline const ::io::deephaven::proto::backplane::grpc::Ticket& CancelCommandRequest::_internal_command_id() const {
+  const ::io::deephaven::proto::backplane::grpc::Ticket* p = command_id_;
+  return p != nullptr ? *p : reinterpret_cast<const ::io::deephaven::proto::backplane::grpc::Ticket&>(
+      ::io::deephaven::proto::backplane::grpc::_Ticket_default_instance_);
+}
+inline const ::io::deephaven::proto::backplane::grpc::Ticket& CancelCommandRequest::command_id() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.CancelCommandRequest.command_id)
+  return _internal_command_id();
+}
+inline void CancelCommandRequest::unsafe_arena_set_allocated_command_id(
+    ::io::deephaven::proto::backplane::grpc::Ticket* command_id) {
+  if (GetArenaForAllocation() == nullptr) {
+    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(command_id_);
+  }
+  command_id_ = command_id;
+  if (command_id) {
+    
+  } else {
+    
+  }
+  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:io.deephaven.proto.backplane.script.grpc.CancelCommandRequest.command_id)
+}
+inline ::io::deephaven::proto::backplane::grpc::Ticket* CancelCommandRequest::release_command_id() {
+  
+  ::io::deephaven::proto::backplane::grpc::Ticket* temp = command_id_;
+  command_id_ = nullptr;
+#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
+  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
+  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
+  if (GetArenaForAllocation() == nullptr) { delete old; }
+#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
+  if (GetArenaForAllocation() != nullptr) {
+    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
+  }
+#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
+  return temp;
+}
+inline ::io::deephaven::proto::backplane::grpc::Ticket* CancelCommandRequest::unsafe_arena_release_command_id() {
+  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.CancelCommandRequest.command_id)
+  
+  ::io::deephaven::proto::backplane::grpc::Ticket* temp = command_id_;
+  command_id_ = nullptr;
+  return temp;
+}
+inline ::io::deephaven::proto::backplane::grpc::Ticket* CancelCommandRequest::_internal_mutable_command_id() {
+  
+  if (command_id_ == nullptr) {
+    auto* p = CreateMaybeMessage<::io::deephaven::proto::backplane::grpc::Ticket>(GetArenaForAllocation());
+    command_id_ = p;
+  }
+  return command_id_;
+}
+inline ::io::deephaven::proto::backplane::grpc::Ticket* CancelCommandRequest::mutable_command_id() {
+  ::io::deephaven::proto::backplane::grpc::Ticket* _msg = _internal_mutable_command_id();
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.CancelCommandRequest.command_id)
+  return _msg;
+}
+inline void CancelCommandRequest::set_allocated_command_id(::io::deephaven::proto::backplane::grpc::Ticket* command_id) {
+  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
+  if (message_arena == nullptr) {
+    delete reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::MessageLite*>(command_id_);
+  }
+  if (command_id) {
+    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
+        ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(
+                reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(command_id));
+    if (message_arena != submessage_arena) {
+      command_id = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
+          message_arena, command_id, submessage_arena);
+    }
+    
+  } else {
+    
+  }
+  command_id_ = command_id;
+  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.CancelCommandRequest.command_id)
+}
+
+// -------------------------------------------------------------------
+
+// CancelCommandResponse
+
+// -------------------------------------------------------------------
+
+// CancelAutoCompleteRequest
+
+// .io.deephaven.proto.backplane.grpc.Ticket console_id = 1;
+inline bool CancelAutoCompleteRequest::_internal_has_console_id() const {
+  return this != internal_default_instance() && console_id_ != nullptr;
+}
+inline bool CancelAutoCompleteRequest::has_console_id() const {
+  return _internal_has_console_id();
+}
+inline const ::io::deephaven::proto::backplane::grpc::Ticket& CancelAutoCompleteRequest::_internal_console_id() const {
+  const ::io::deephaven::proto::backplane::grpc::Ticket* p = console_id_;
+  return p != nullptr ? *p : reinterpret_cast<const ::io::deephaven::proto::backplane::grpc::Ticket&>(
+      ::io::deephaven::proto::backplane::grpc::_Ticket_default_instance_);
+}
+inline const ::io::deephaven::proto::backplane::grpc::Ticket& CancelAutoCompleteRequest::console_id() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.CancelAutoCompleteRequest.console_id)
+  return _internal_console_id();
+}
+inline void CancelAutoCompleteRequest::unsafe_arena_set_allocated_console_id(
+    ::io::deephaven::proto::backplane::grpc::Ticket* console_id) {
+  if (GetArenaForAllocation() == nullptr) {
+    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(console_id_);
+  }
+  console_id_ = console_id;
+  if (console_id) {
+    
+  } else {
+    
+  }
+  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:io.deephaven.proto.backplane.script.grpc.CancelAutoCompleteRequest.console_id)
+}
+inline ::io::deephaven::proto::backplane::grpc::Ticket* CancelAutoCompleteRequest::release_console_id() {
+  
+  ::io::deephaven::proto::backplane::grpc::Ticket* temp = console_id_;
+  console_id_ = nullptr;
+#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
+  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
+  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
+  if (GetArenaForAllocation() == nullptr) { delete old; }
+#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
+  if (GetArenaForAllocation() != nullptr) {
+    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
+  }
+#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
+  return temp;
+}
+inline ::io::deephaven::proto::backplane::grpc::Ticket* CancelAutoCompleteRequest::unsafe_arena_release_console_id() {
+  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.CancelAutoCompleteRequest.console_id)
+  
+  ::io::deephaven::proto::backplane::grpc::Ticket* temp = console_id_;
+  console_id_ = nullptr;
+  return temp;
+}
+inline ::io::deephaven::proto::backplane::grpc::Ticket* CancelAutoCompleteRequest::_internal_mutable_console_id() {
+  
+  if (console_id_ == nullptr) {
+    auto* p = CreateMaybeMessage<::io::deephaven::proto::backplane::grpc::Ticket>(GetArenaForAllocation());
+    console_id_ = p;
+  }
+  return console_id_;
+}
+inline ::io::deephaven::proto::backplane::grpc::Ticket* CancelAutoCompleteRequest::mutable_console_id() {
+  ::io::deephaven::proto::backplane::grpc::Ticket* _msg = _internal_mutable_console_id();
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.CancelAutoCompleteRequest.console_id)
+  return _msg;
+}
+inline void CancelAutoCompleteRequest::set_allocated_console_id(::io::deephaven::proto::backplane::grpc::Ticket* console_id) {
+  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
+  if (message_arena == nullptr) {
+    delete reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::MessageLite*>(console_id_);
+  }
+  if (console_id) {
+    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
+        ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(
+                reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(console_id));
+    if (message_arena != submessage_arena) {
+      console_id = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
+          message_arena, console_id, submessage_arena);
+    }
+    
+  } else {
+    
+  }
+  console_id_ = console_id;
+  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.CancelAutoCompleteRequest.console_id)
+}
+
+// int32 request_id = 2;
+inline void CancelAutoCompleteRequest::clear_request_id() {
+  request_id_ = 0;
+}
+inline int32_t CancelAutoCompleteRequest::_internal_request_id() const {
+  return request_id_;
+}
+inline int32_t CancelAutoCompleteRequest::request_id() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.CancelAutoCompleteRequest.request_id)
+  return _internal_request_id();
+}
+inline void CancelAutoCompleteRequest::_internal_set_request_id(int32_t value) {
+  
+  request_id_ = value;
+}
+inline void CancelAutoCompleteRequest::set_request_id(int32_t value) {
+  _internal_set_request_id(value);
+  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.CancelAutoCompleteRequest.request_id)
+}
+
+// -------------------------------------------------------------------
+
+// CancelAutoCompleteResponse
+
+// -------------------------------------------------------------------
+
+// AutoCompleteRequest
+
+// .io.deephaven.proto.backplane.grpc.Ticket console_id = 5;
+inline bool AutoCompleteRequest::_internal_has_console_id() const {
+  return this != internal_default_instance() && console_id_ != nullptr;
+}
+inline bool AutoCompleteRequest::has_console_id() const {
+  return _internal_has_console_id();
+}
+inline const ::io::deephaven::proto::backplane::grpc::Ticket& AutoCompleteRequest::_internal_console_id() const {
+  const ::io::deephaven::proto::backplane::grpc::Ticket* p = console_id_;
+  return p != nullptr ? *p : reinterpret_cast<const ::io::deephaven::proto::backplane::grpc::Ticket&>(
+      ::io::deephaven::proto::backplane::grpc::_Ticket_default_instance_);
+}
+inline const ::io::deephaven::proto::backplane::grpc::Ticket& AutoCompleteRequest::console_id() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest.console_id)
+  return _internal_console_id();
+}
+inline void AutoCompleteRequest::unsafe_arena_set_allocated_console_id(
+    ::io::deephaven::proto::backplane::grpc::Ticket* console_id) {
+  if (GetArenaForAllocation() == nullptr) {
+    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(console_id_);
+  }
+  console_id_ = console_id;
+  if (console_id) {
+    
+  } else {
+    
+  }
+  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest.console_id)
+}
+inline ::io::deephaven::proto::backplane::grpc::Ticket* AutoCompleteRequest::release_console_id() {
+  
+  ::io::deephaven::proto::backplane::grpc::Ticket* temp = console_id_;
+  console_id_ = nullptr;
+#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
+  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
+  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
+  if (GetArenaForAllocation() == nullptr) { delete old; }
+#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
+  if (GetArenaForAllocation() != nullptr) {
+    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
+  }
+#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
+  return temp;
+}
+inline ::io::deephaven::proto::backplane::grpc::Ticket* AutoCompleteRequest::unsafe_arena_release_console_id() {
+  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest.console_id)
+  
+  ::io::deephaven::proto::backplane::grpc::Ticket* temp = console_id_;
+  console_id_ = nullptr;
+  return temp;
+}
+inline ::io::deephaven::proto::backplane::grpc::Ticket* AutoCompleteRequest::_internal_mutable_console_id() {
+  
+  if (console_id_ == nullptr) {
+    auto* p = CreateMaybeMessage<::io::deephaven::proto::backplane::grpc::Ticket>(GetArenaForAllocation());
+    console_id_ = p;
+  }
+  return console_id_;
+}
+inline ::io::deephaven::proto::backplane::grpc::Ticket* AutoCompleteRequest::mutable_console_id() {
+  ::io::deephaven::proto::backplane::grpc::Ticket* _msg = _internal_mutable_console_id();
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest.console_id)
+  return _msg;
+}
+inline void AutoCompleteRequest::set_allocated_console_id(::io::deephaven::proto::backplane::grpc::Ticket* console_id) {
+  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
+  if (message_arena == nullptr) {
+    delete reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::MessageLite*>(console_id_);
+  }
+  if (console_id) {
+    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
+        ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(
+                reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(console_id));
+    if (message_arena != submessage_arena) {
+      console_id = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
+          message_arena, console_id, submessage_arena);
+    }
+    
+  } else {
+    
+  }
+  console_id_ = console_id;
+  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest.console_id)
+}
+
+// int32 request_id = 6;
+inline void AutoCompleteRequest::clear_request_id() {
+  request_id_ = 0;
+}
+inline int32_t AutoCompleteRequest::_internal_request_id() const {
+  return request_id_;
+}
+inline int32_t AutoCompleteRequest::request_id() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest.request_id)
+  return _internal_request_id();
+}
+inline void AutoCompleteRequest::_internal_set_request_id(int32_t value) {
+  
+  request_id_ = value;
+}
+inline void AutoCompleteRequest::set_request_id(int32_t value) {
+  _internal_set_request_id(value);
+  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest.request_id)
+}
+
+// .io.deephaven.proto.backplane.script.grpc.OpenDocumentRequest open_document = 1;
+inline bool AutoCompleteRequest::_internal_has_open_document() const {
+  return request_case() == kOpenDocument;
+}
+inline bool AutoCompleteRequest::has_open_document() const {
+  return _internal_has_open_document();
+}
+inline void AutoCompleteRequest::set_has_open_document() {
+  _oneof_case_[0] = kOpenDocument;
+}
+inline void AutoCompleteRequest::clear_open_document() {
+  if (_internal_has_open_document()) {
+    if (GetArenaForAllocation() == nullptr) {
+      delete request_.open_document_;
+    }
+    clear_has_request();
+  }
+}
+inline ::io::deephaven::proto::backplane::script::grpc::OpenDocumentRequest* AutoCompleteRequest::release_open_document() {
+  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest.open_document)
+  if (_internal_has_open_document()) {
+    clear_has_request();
+    ::io::deephaven::proto::backplane::script::grpc::OpenDocumentRequest* temp = request_.open_document_;
+    if (GetArenaForAllocation() != nullptr) {
+      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
+    }
+    request_.open_document_ = nullptr;
+    return temp;
+  } else {
+    return nullptr;
+  }
+}
+inline const ::io::deephaven::proto::backplane::script::grpc::OpenDocumentRequest& AutoCompleteRequest::_internal_open_document() const {
+  return _internal_has_open_document()
+      ? *request_.open_document_
+      : reinterpret_cast< ::io::deephaven::proto::backplane::script::grpc::OpenDocumentRequest&>(::io::deephaven::proto::backplane::script::grpc::_OpenDocumentRequest_default_instance_);
+}
+inline const ::io::deephaven::proto::backplane::script::grpc::OpenDocumentRequest& AutoCompleteRequest::open_document() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest.open_document)
+  return _internal_open_document();
+}
+inline ::io::deephaven::proto::backplane::script::grpc::OpenDocumentRequest* AutoCompleteRequest::unsafe_arena_release_open_document() {
+  // @@protoc_insertion_point(field_unsafe_arena_release:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest.open_document)
+  if (_internal_has_open_document()) {
+    clear_has_request();
+    ::io::deephaven::proto::backplane::script::grpc::OpenDocumentRequest* temp = request_.open_document_;
+    request_.open_document_ = nullptr;
+    return temp;
+  } else {
+    return nullptr;
+  }
+}
+inline void AutoCompleteRequest::unsafe_arena_set_allocated_open_document(::io::deephaven::proto::backplane::script::grpc::OpenDocumentRequest* open_document) {
+  clear_request();
+  if (open_document) {
+    set_has_open_document();
+    request_.open_document_ = open_document;
+  }
+  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest.open_document)
+}
+inline ::io::deephaven::proto::backplane::script::grpc::OpenDocumentRequest* AutoCompleteRequest::_internal_mutable_open_document() {
+  if (!_internal_has_open_document()) {
+    clear_request();
+    set_has_open_document();
+    request_.open_document_ = CreateMaybeMessage< ::io::deephaven::proto::backplane::script::grpc::OpenDocumentRequest >(GetArenaForAllocation());
+  }
+  return request_.open_document_;
+}
+inline ::io::deephaven::proto::backplane::script::grpc::OpenDocumentRequest* AutoCompleteRequest::mutable_open_document() {
+  ::io::deephaven::proto::backplane::script::grpc::OpenDocumentRequest* _msg = _internal_mutable_open_document();
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest.open_document)
+  return _msg;
+}
+
+// .io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest change_document = 2;
+inline bool AutoCompleteRequest::_internal_has_change_document() const {
+  return request_case() == kChangeDocument;
+}
+inline bool AutoCompleteRequest::has_change_document() const {
+  return _internal_has_change_document();
+}
+inline void AutoCompleteRequest::set_has_change_document() {
+  _oneof_case_[0] = kChangeDocument;
+}
+inline void AutoCompleteRequest::clear_change_document() {
+  if (_internal_has_change_document()) {
+    if (GetArenaForAllocation() == nullptr) {
+      delete request_.change_document_;
+    }
+    clear_has_request();
+  }
+}
+inline ::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest* AutoCompleteRequest::release_change_document() {
+  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest.change_document)
+  if (_internal_has_change_document()) {
+    clear_has_request();
+    ::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest* temp = request_.change_document_;
+    if (GetArenaForAllocation() != nullptr) {
+      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
+    }
+    request_.change_document_ = nullptr;
+    return temp;
+  } else {
+    return nullptr;
+  }
+}
+inline const ::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest& AutoCompleteRequest::_internal_change_document() const {
+  return _internal_has_change_document()
+      ? *request_.change_document_
+      : reinterpret_cast< ::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest&>(::io::deephaven::proto::backplane::script::grpc::_ChangeDocumentRequest_default_instance_);
+}
+inline const ::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest& AutoCompleteRequest::change_document() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest.change_document)
+  return _internal_change_document();
+}
+inline ::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest* AutoCompleteRequest::unsafe_arena_release_change_document() {
+  // @@protoc_insertion_point(field_unsafe_arena_release:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest.change_document)
+  if (_internal_has_change_document()) {
+    clear_has_request();
+    ::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest* temp = request_.change_document_;
+    request_.change_document_ = nullptr;
+    return temp;
+  } else {
+    return nullptr;
+  }
+}
+inline void AutoCompleteRequest::unsafe_arena_set_allocated_change_document(::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest* change_document) {
+  clear_request();
+  if (change_document) {
+    set_has_change_document();
+    request_.change_document_ = change_document;
+  }
+  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest.change_document)
+}
+inline ::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest* AutoCompleteRequest::_internal_mutable_change_document() {
+  if (!_internal_has_change_document()) {
+    clear_request();
+    set_has_change_document();
+    request_.change_document_ = CreateMaybeMessage< ::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest >(GetArenaForAllocation());
+  }
+  return request_.change_document_;
+}
+inline ::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest* AutoCompleteRequest::mutable_change_document() {
+  ::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest* _msg = _internal_mutable_change_document();
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest.change_document)
+  return _msg;
+}
+
+// .io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest get_completion_items = 3;
+inline bool AutoCompleteRequest::_internal_has_get_completion_items() const {
+  return request_case() == kGetCompletionItems;
+}
+inline bool AutoCompleteRequest::has_get_completion_items() const {
+  return _internal_has_get_completion_items();
+}
+inline void AutoCompleteRequest::set_has_get_completion_items() {
+  _oneof_case_[0] = kGetCompletionItems;
+}
+inline void AutoCompleteRequest::clear_get_completion_items() {
+  if (_internal_has_get_completion_items()) {
+    if (GetArenaForAllocation() == nullptr) {
+      delete request_.get_completion_items_;
+    }
+    clear_has_request();
+  }
+}
+inline ::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsRequest* AutoCompleteRequest::release_get_completion_items() {
+  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest.get_completion_items)
+  if (_internal_has_get_completion_items()) {
+    clear_has_request();
+    ::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsRequest* temp = request_.get_completion_items_;
+    if (GetArenaForAllocation() != nullptr) {
+      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
+    }
+    request_.get_completion_items_ = nullptr;
+    return temp;
+  } else {
+    return nullptr;
+  }
+}
+inline const ::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsRequest& AutoCompleteRequest::_internal_get_completion_items() const {
+  return _internal_has_get_completion_items()
+      ? *request_.get_completion_items_
+      : reinterpret_cast< ::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsRequest&>(::io::deephaven::proto::backplane::script::grpc::_GetCompletionItemsRequest_default_instance_);
+}
+inline const ::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsRequest& AutoCompleteRequest::get_completion_items() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest.get_completion_items)
+  return _internal_get_completion_items();
+}
+inline ::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsRequest* AutoCompleteRequest::unsafe_arena_release_get_completion_items() {
+  // @@protoc_insertion_point(field_unsafe_arena_release:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest.get_completion_items)
+  if (_internal_has_get_completion_items()) {
+    clear_has_request();
+    ::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsRequest* temp = request_.get_completion_items_;
+    request_.get_completion_items_ = nullptr;
+    return temp;
+  } else {
+    return nullptr;
+  }
+}
+inline void AutoCompleteRequest::unsafe_arena_set_allocated_get_completion_items(::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsRequest* get_completion_items) {
+  clear_request();
+  if (get_completion_items) {
+    set_has_get_completion_items();
+    request_.get_completion_items_ = get_completion_items;
+  }
+  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest.get_completion_items)
+}
+inline ::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsRequest* AutoCompleteRequest::_internal_mutable_get_completion_items() {
+  if (!_internal_has_get_completion_items()) {
+    clear_request();
+    set_has_get_completion_items();
+    request_.get_completion_items_ = CreateMaybeMessage< ::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsRequest >(GetArenaForAllocation());
+  }
+  return request_.get_completion_items_;
+}
+inline ::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsRequest* AutoCompleteRequest::mutable_get_completion_items() {
+  ::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsRequest* _msg = _internal_mutable_get_completion_items();
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest.get_completion_items)
+  return _msg;
+}
+
+// .io.deephaven.proto.backplane.script.grpc.GetSignatureHelpRequest get_signature_help = 7;
+inline bool AutoCompleteRequest::_internal_has_get_signature_help() const {
+  return request_case() == kGetSignatureHelp;
+}
+inline bool AutoCompleteRequest::has_get_signature_help() const {
+  return _internal_has_get_signature_help();
+}
+inline void AutoCompleteRequest::set_has_get_signature_help() {
+  _oneof_case_[0] = kGetSignatureHelp;
+}
+inline void AutoCompleteRequest::clear_get_signature_help() {
+  if (_internal_has_get_signature_help()) {
+    if (GetArenaForAllocation() == nullptr) {
+      delete request_.get_signature_help_;
+    }
+    clear_has_request();
+  }
+}
+inline ::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpRequest* AutoCompleteRequest::release_get_signature_help() {
+  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest.get_signature_help)
+  if (_internal_has_get_signature_help()) {
+    clear_has_request();
+    ::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpRequest* temp = request_.get_signature_help_;
+    if (GetArenaForAllocation() != nullptr) {
+      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
+    }
+    request_.get_signature_help_ = nullptr;
+    return temp;
+  } else {
+    return nullptr;
+  }
+}
+inline const ::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpRequest& AutoCompleteRequest::_internal_get_signature_help() const {
+  return _internal_has_get_signature_help()
+      ? *request_.get_signature_help_
+      : reinterpret_cast< ::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpRequest&>(::io::deephaven::proto::backplane::script::grpc::_GetSignatureHelpRequest_default_instance_);
+}
+inline const ::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpRequest& AutoCompleteRequest::get_signature_help() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest.get_signature_help)
+  return _internal_get_signature_help();
+}
+inline ::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpRequest* AutoCompleteRequest::unsafe_arena_release_get_signature_help() {
+  // @@protoc_insertion_point(field_unsafe_arena_release:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest.get_signature_help)
+  if (_internal_has_get_signature_help()) {
+    clear_has_request();
+    ::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpRequest* temp = request_.get_signature_help_;
+    request_.get_signature_help_ = nullptr;
+    return temp;
+  } else {
+    return nullptr;
+  }
+}
+inline void AutoCompleteRequest::unsafe_arena_set_allocated_get_signature_help(::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpRequest* get_signature_help) {
+  clear_request();
+  if (get_signature_help) {
+    set_has_get_signature_help();
+    request_.get_signature_help_ = get_signature_help;
+  }
+  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest.get_signature_help)
+}
+inline ::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpRequest* AutoCompleteRequest::_internal_mutable_get_signature_help() {
+  if (!_internal_has_get_signature_help()) {
+    clear_request();
+    set_has_get_signature_help();
+    request_.get_signature_help_ = CreateMaybeMessage< ::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpRequest >(GetArenaForAllocation());
+  }
+  return request_.get_signature_help_;
+}
+inline ::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpRequest* AutoCompleteRequest::mutable_get_signature_help() {
+  ::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpRequest* _msg = _internal_mutable_get_signature_help();
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest.get_signature_help)
+  return _msg;
+}
+
+// .io.deephaven.proto.backplane.script.grpc.GetHoverRequest get_hover = 8;
+inline bool AutoCompleteRequest::_internal_has_get_hover() const {
+  return request_case() == kGetHover;
+}
+inline bool AutoCompleteRequest::has_get_hover() const {
+  return _internal_has_get_hover();
+}
+inline void AutoCompleteRequest::set_has_get_hover() {
+  _oneof_case_[0] = kGetHover;
+}
+inline void AutoCompleteRequest::clear_get_hover() {
+  if (_internal_has_get_hover()) {
+    if (GetArenaForAllocation() == nullptr) {
+      delete request_.get_hover_;
+    }
+    clear_has_request();
+  }
+}
+inline ::io::deephaven::proto::backplane::script::grpc::GetHoverRequest* AutoCompleteRequest::release_get_hover() {
+  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest.get_hover)
+  if (_internal_has_get_hover()) {
+    clear_has_request();
+    ::io::deephaven::proto::backplane::script::grpc::GetHoverRequest* temp = request_.get_hover_;
+    if (GetArenaForAllocation() != nullptr) {
+      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
+    }
+    request_.get_hover_ = nullptr;
+    return temp;
+  } else {
+    return nullptr;
+  }
+}
+inline const ::io::deephaven::proto::backplane::script::grpc::GetHoverRequest& AutoCompleteRequest::_internal_get_hover() const {
+  return _internal_has_get_hover()
+      ? *request_.get_hover_
+      : reinterpret_cast< ::io::deephaven::proto::backplane::script::grpc::GetHoverRequest&>(::io::deephaven::proto::backplane::script::grpc::_GetHoverRequest_default_instance_);
+}
+inline const ::io::deephaven::proto::backplane::script::grpc::GetHoverRequest& AutoCompleteRequest::get_hover() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest.get_hover)
+  return _internal_get_hover();
+}
+inline ::io::deephaven::proto::backplane::script::grpc::GetHoverRequest* AutoCompleteRequest::unsafe_arena_release_get_hover() {
+  // @@protoc_insertion_point(field_unsafe_arena_release:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest.get_hover)
+  if (_internal_has_get_hover()) {
+    clear_has_request();
+    ::io::deephaven::proto::backplane::script::grpc::GetHoverRequest* temp = request_.get_hover_;
+    request_.get_hover_ = nullptr;
+    return temp;
+  } else {
+    return nullptr;
+  }
+}
+inline void AutoCompleteRequest::unsafe_arena_set_allocated_get_hover(::io::deephaven::proto::backplane::script::grpc::GetHoverRequest* get_hover) {
+  clear_request();
+  if (get_hover) {
+    set_has_get_hover();
+    request_.get_hover_ = get_hover;
+  }
+  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest.get_hover)
+}
+inline ::io::deephaven::proto::backplane::script::grpc::GetHoverRequest* AutoCompleteRequest::_internal_mutable_get_hover() {
+  if (!_internal_has_get_hover()) {
+    clear_request();
+    set_has_get_hover();
+    request_.get_hover_ = CreateMaybeMessage< ::io::deephaven::proto::backplane::script::grpc::GetHoverRequest >(GetArenaForAllocation());
+  }
+  return request_.get_hover_;
+}
+inline ::io::deephaven::proto::backplane::script::grpc::GetHoverRequest* AutoCompleteRequest::mutable_get_hover() {
+  ::io::deephaven::proto::backplane::script::grpc::GetHoverRequest* _msg = _internal_mutable_get_hover();
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest.get_hover)
+  return _msg;
+}
+
+// .io.deephaven.proto.backplane.script.grpc.GetDiagnosticRequest get_diagnostic = 9;
+inline bool AutoCompleteRequest::_internal_has_get_diagnostic() const {
+  return request_case() == kGetDiagnostic;
+}
+inline bool AutoCompleteRequest::has_get_diagnostic() const {
+  return _internal_has_get_diagnostic();
+}
+inline void AutoCompleteRequest::set_has_get_diagnostic() {
+  _oneof_case_[0] = kGetDiagnostic;
+}
+inline void AutoCompleteRequest::clear_get_diagnostic() {
+  if (_internal_has_get_diagnostic()) {
+    if (GetArenaForAllocation() == nullptr) {
+      delete request_.get_diagnostic_;
+    }
+    clear_has_request();
+  }
+}
+inline ::io::deephaven::proto::backplane::script::grpc::GetDiagnosticRequest* AutoCompleteRequest::release_get_diagnostic() {
+  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest.get_diagnostic)
+  if (_internal_has_get_diagnostic()) {
+    clear_has_request();
+    ::io::deephaven::proto::backplane::script::grpc::GetDiagnosticRequest* temp = request_.get_diagnostic_;
+    if (GetArenaForAllocation() != nullptr) {
+      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
+    }
+    request_.get_diagnostic_ = nullptr;
+    return temp;
+  } else {
+    return nullptr;
+  }
+}
+inline const ::io::deephaven::proto::backplane::script::grpc::GetDiagnosticRequest& AutoCompleteRequest::_internal_get_diagnostic() const {
+  return _internal_has_get_diagnostic()
+      ? *request_.get_diagnostic_
+      : reinterpret_cast< ::io::deephaven::proto::backplane::script::grpc::GetDiagnosticRequest&>(::io::deephaven::proto::backplane::script::grpc::_GetDiagnosticRequest_default_instance_);
+}
+inline const ::io::deephaven::proto::backplane::script::grpc::GetDiagnosticRequest& AutoCompleteRequest::get_diagnostic() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest.get_diagnostic)
+  return _internal_get_diagnostic();
+}
+inline ::io::deephaven::proto::backplane::script::grpc::GetDiagnosticRequest* AutoCompleteRequest::unsafe_arena_release_get_diagnostic() {
+  // @@protoc_insertion_point(field_unsafe_arena_release:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest.get_diagnostic)
+  if (_internal_has_get_diagnostic()) {
+    clear_has_request();
+    ::io::deephaven::proto::backplane::script::grpc::GetDiagnosticRequest* temp = request_.get_diagnostic_;
+    request_.get_diagnostic_ = nullptr;
+    return temp;
+  } else {
+    return nullptr;
+  }
+}
+inline void AutoCompleteRequest::unsafe_arena_set_allocated_get_diagnostic(::io::deephaven::proto::backplane::script::grpc::GetDiagnosticRequest* get_diagnostic) {
+  clear_request();
+  if (get_diagnostic) {
+    set_has_get_diagnostic();
+    request_.get_diagnostic_ = get_diagnostic;
+  }
+  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest.get_diagnostic)
+}
+inline ::io::deephaven::proto::backplane::script::grpc::GetDiagnosticRequest* AutoCompleteRequest::_internal_mutable_get_diagnostic() {
+  if (!_internal_has_get_diagnostic()) {
+    clear_request();
+    set_has_get_diagnostic();
+    request_.get_diagnostic_ = CreateMaybeMessage< ::io::deephaven::proto::backplane::script::grpc::GetDiagnosticRequest >(GetArenaForAllocation());
+  }
+  return request_.get_diagnostic_;
+}
+inline ::io::deephaven::proto::backplane::script::grpc::GetDiagnosticRequest* AutoCompleteRequest::mutable_get_diagnostic() {
+  ::io::deephaven::proto::backplane::script::grpc::GetDiagnosticRequest* _msg = _internal_mutable_get_diagnostic();
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest.get_diagnostic)
+  return _msg;
+}
+
+// .io.deephaven.proto.backplane.script.grpc.CloseDocumentRequest close_document = 4;
+inline bool AutoCompleteRequest::_internal_has_close_document() const {
+  return request_case() == kCloseDocument;
+}
+inline bool AutoCompleteRequest::has_close_document() const {
+  return _internal_has_close_document();
+}
+inline void AutoCompleteRequest::set_has_close_document() {
+  _oneof_case_[0] = kCloseDocument;
+}
+inline void AutoCompleteRequest::clear_close_document() {
+  if (_internal_has_close_document()) {
+    if (GetArenaForAllocation() == nullptr) {
+      delete request_.close_document_;
+    }
+    clear_has_request();
+  }
+}
+inline ::io::deephaven::proto::backplane::script::grpc::CloseDocumentRequest* AutoCompleteRequest::release_close_document() {
+  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest.close_document)
+  if (_internal_has_close_document()) {
+    clear_has_request();
+    ::io::deephaven::proto::backplane::script::grpc::CloseDocumentRequest* temp = request_.close_document_;
+    if (GetArenaForAllocation() != nullptr) {
+      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
+    }
+    request_.close_document_ = nullptr;
+    return temp;
+  } else {
+    return nullptr;
+  }
+}
+inline const ::io::deephaven::proto::backplane::script::grpc::CloseDocumentRequest& AutoCompleteRequest::_internal_close_document() const {
+  return _internal_has_close_document()
+      ? *request_.close_document_
+      : reinterpret_cast< ::io::deephaven::proto::backplane::script::grpc::CloseDocumentRequest&>(::io::deephaven::proto::backplane::script::grpc::_CloseDocumentRequest_default_instance_);
+}
+inline const ::io::deephaven::proto::backplane::script::grpc::CloseDocumentRequest& AutoCompleteRequest::close_document() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest.close_document)
+  return _internal_close_document();
+}
+inline ::io::deephaven::proto::backplane::script::grpc::CloseDocumentRequest* AutoCompleteRequest::unsafe_arena_release_close_document() {
+  // @@protoc_insertion_point(field_unsafe_arena_release:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest.close_document)
+  if (_internal_has_close_document()) {
+    clear_has_request();
+    ::io::deephaven::proto::backplane::script::grpc::CloseDocumentRequest* temp = request_.close_document_;
+    request_.close_document_ = nullptr;
+    return temp;
+  } else {
+    return nullptr;
+  }
+}
+inline void AutoCompleteRequest::unsafe_arena_set_allocated_close_document(::io::deephaven::proto::backplane::script::grpc::CloseDocumentRequest* close_document) {
+  clear_request();
+  if (close_document) {
+    set_has_close_document();
+    request_.close_document_ = close_document;
+  }
+  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest.close_document)
+}
+inline ::io::deephaven::proto::backplane::script::grpc::CloseDocumentRequest* AutoCompleteRequest::_internal_mutable_close_document() {
+  if (!_internal_has_close_document()) {
+    clear_request();
+    set_has_close_document();
+    request_.close_document_ = CreateMaybeMessage< ::io::deephaven::proto::backplane::script::grpc::CloseDocumentRequest >(GetArenaForAllocation());
+  }
+  return request_.close_document_;
+}
+inline ::io::deephaven::proto::backplane::script::grpc::CloseDocumentRequest* AutoCompleteRequest::mutable_close_document() {
+  ::io::deephaven::proto::backplane::script::grpc::CloseDocumentRequest* _msg = _internal_mutable_close_document();
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest.close_document)
+  return _msg;
+}
+
+inline bool AutoCompleteRequest::has_request() const {
+  return request_case() != REQUEST_NOT_SET;
+}
+inline void AutoCompleteRequest::clear_has_request() {
+  _oneof_case_[0] = REQUEST_NOT_SET;
+}
+inline AutoCompleteRequest::RequestCase AutoCompleteRequest::request_case() const {
+  return AutoCompleteRequest::RequestCase(_oneof_case_[0]);
+}
+// -------------------------------------------------------------------
+
+// AutoCompleteResponse
+
+// int32 request_id = 2;
+inline void AutoCompleteResponse::clear_request_id() {
+  request_id_ = 0;
+}
+inline int32_t AutoCompleteResponse::_internal_request_id() const {
+  return request_id_;
+}
+inline int32_t AutoCompleteResponse::request_id() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.AutoCompleteResponse.request_id)
+  return _internal_request_id();
+}
+inline void AutoCompleteResponse::_internal_set_request_id(int32_t value) {
+  
+  request_id_ = value;
+}
+inline void AutoCompleteResponse::set_request_id(int32_t value) {
+  _internal_set_request_id(value);
+  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.AutoCompleteResponse.request_id)
+}
+
+// bool success = 3;
+inline void AutoCompleteResponse::clear_success() {
+  success_ = false;
+}
+inline bool AutoCompleteResponse::_internal_success() const {
+  return success_;
+}
+inline bool AutoCompleteResponse::success() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.AutoCompleteResponse.success)
+  return _internal_success();
+}
+inline void AutoCompleteResponse::_internal_set_success(bool value) {
+  
+  success_ = value;
+}
+inline void AutoCompleteResponse::set_success(bool value) {
+  _internal_set_success(value);
+  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.AutoCompleteResponse.success)
+}
+
+// .io.deephaven.proto.backplane.script.grpc.GetCompletionItemsResponse completion_items = 1;
+inline bool AutoCompleteResponse::_internal_has_completion_items() const {
+  return response_case() == kCompletionItems;
+}
+inline bool AutoCompleteResponse::has_completion_items() const {
+  return _internal_has_completion_items();
+}
+inline void AutoCompleteResponse::set_has_completion_items() {
+  _oneof_case_[0] = kCompletionItems;
+}
+inline void AutoCompleteResponse::clear_completion_items() {
+  if (_internal_has_completion_items()) {
+    if (GetArenaForAllocation() == nullptr) {
+      delete response_.completion_items_;
+    }
+    clear_has_response();
+  }
+}
+inline ::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsResponse* AutoCompleteResponse::release_completion_items() {
+  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.AutoCompleteResponse.completion_items)
+  if (_internal_has_completion_items()) {
+    clear_has_response();
+    ::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsResponse* temp = response_.completion_items_;
+    if (GetArenaForAllocation() != nullptr) {
+      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
+    }
+    response_.completion_items_ = nullptr;
+    return temp;
+  } else {
+    return nullptr;
+  }
+}
+inline const ::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsResponse& AutoCompleteResponse::_internal_completion_items() const {
+  return _internal_has_completion_items()
+      ? *response_.completion_items_
+      : reinterpret_cast< ::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsResponse&>(::io::deephaven::proto::backplane::script::grpc::_GetCompletionItemsResponse_default_instance_);
+}
+inline const ::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsResponse& AutoCompleteResponse::completion_items() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.AutoCompleteResponse.completion_items)
+  return _internal_completion_items();
+}
+inline ::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsResponse* AutoCompleteResponse::unsafe_arena_release_completion_items() {
+  // @@protoc_insertion_point(field_unsafe_arena_release:io.deephaven.proto.backplane.script.grpc.AutoCompleteResponse.completion_items)
+  if (_internal_has_completion_items()) {
+    clear_has_response();
+    ::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsResponse* temp = response_.completion_items_;
+    response_.completion_items_ = nullptr;
+    return temp;
+  } else {
+    return nullptr;
+  }
+}
+inline void AutoCompleteResponse::unsafe_arena_set_allocated_completion_items(::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsResponse* completion_items) {
+  clear_response();
+  if (completion_items) {
+    set_has_completion_items();
+    response_.completion_items_ = completion_items;
+  }
+  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:io.deephaven.proto.backplane.script.grpc.AutoCompleteResponse.completion_items)
+}
+inline ::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsResponse* AutoCompleteResponse::_internal_mutable_completion_items() {
+  if (!_internal_has_completion_items()) {
+    clear_response();
+    set_has_completion_items();
+    response_.completion_items_ = CreateMaybeMessage< ::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsResponse >(GetArenaForAllocation());
+  }
+  return response_.completion_items_;
+}
+inline ::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsResponse* AutoCompleteResponse::mutable_completion_items() {
+  ::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsResponse* _msg = _internal_mutable_completion_items();
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.AutoCompleteResponse.completion_items)
+  return _msg;
+}
+
+// .io.deephaven.proto.backplane.script.grpc.GetSignatureHelpResponse signatures = 4;
+inline bool AutoCompleteResponse::_internal_has_signatures() const {
+  return response_case() == kSignatures;
+}
+inline bool AutoCompleteResponse::has_signatures() const {
+  return _internal_has_signatures();
+}
+inline void AutoCompleteResponse::set_has_signatures() {
+  _oneof_case_[0] = kSignatures;
+}
+inline void AutoCompleteResponse::clear_signatures() {
+  if (_internal_has_signatures()) {
+    if (GetArenaForAllocation() == nullptr) {
+      delete response_.signatures_;
+    }
+    clear_has_response();
+  }
+}
+inline ::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpResponse* AutoCompleteResponse::release_signatures() {
+  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.AutoCompleteResponse.signatures)
+  if (_internal_has_signatures()) {
+    clear_has_response();
+    ::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpResponse* temp = response_.signatures_;
+    if (GetArenaForAllocation() != nullptr) {
+      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
+    }
+    response_.signatures_ = nullptr;
+    return temp;
+  } else {
+    return nullptr;
+  }
+}
+inline const ::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpResponse& AutoCompleteResponse::_internal_signatures() const {
+  return _internal_has_signatures()
+      ? *response_.signatures_
+      : reinterpret_cast< ::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpResponse&>(::io::deephaven::proto::backplane::script::grpc::_GetSignatureHelpResponse_default_instance_);
+}
+inline const ::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpResponse& AutoCompleteResponse::signatures() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.AutoCompleteResponse.signatures)
+  return _internal_signatures();
+}
+inline ::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpResponse* AutoCompleteResponse::unsafe_arena_release_signatures() {
+  // @@protoc_insertion_point(field_unsafe_arena_release:io.deephaven.proto.backplane.script.grpc.AutoCompleteResponse.signatures)
+  if (_internal_has_signatures()) {
+    clear_has_response();
+    ::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpResponse* temp = response_.signatures_;
+    response_.signatures_ = nullptr;
+    return temp;
+  } else {
+    return nullptr;
+  }
+}
+inline void AutoCompleteResponse::unsafe_arena_set_allocated_signatures(::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpResponse* signatures) {
+  clear_response();
+  if (signatures) {
+    set_has_signatures();
+    response_.signatures_ = signatures;
+  }
+  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:io.deephaven.proto.backplane.script.grpc.AutoCompleteResponse.signatures)
+}
+inline ::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpResponse* AutoCompleteResponse::_internal_mutable_signatures() {
+  if (!_internal_has_signatures()) {
+    clear_response();
+    set_has_signatures();
+    response_.signatures_ = CreateMaybeMessage< ::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpResponse >(GetArenaForAllocation());
+  }
+  return response_.signatures_;
+}
+inline ::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpResponse* AutoCompleteResponse::mutable_signatures() {
+  ::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpResponse* _msg = _internal_mutable_signatures();
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.AutoCompleteResponse.signatures)
+  return _msg;
+}
+
+// .io.deephaven.proto.backplane.script.grpc.GetHoverResponse hover = 5;
+inline bool AutoCompleteResponse::_internal_has_hover() const {
+  return response_case() == kHover;
+}
+inline bool AutoCompleteResponse::has_hover() const {
+  return _internal_has_hover();
+}
+inline void AutoCompleteResponse::set_has_hover() {
+  _oneof_case_[0] = kHover;
+}
+inline void AutoCompleteResponse::clear_hover() {
+  if (_internal_has_hover()) {
+    if (GetArenaForAllocation() == nullptr) {
+      delete response_.hover_;
+    }
+    clear_has_response();
+  }
+}
+inline ::io::deephaven::proto::backplane::script::grpc::GetHoverResponse* AutoCompleteResponse::release_hover() {
+  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.AutoCompleteResponse.hover)
+  if (_internal_has_hover()) {
+    clear_has_response();
+    ::io::deephaven::proto::backplane::script::grpc::GetHoverResponse* temp = response_.hover_;
+    if (GetArenaForAllocation() != nullptr) {
+      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
+    }
+    response_.hover_ = nullptr;
+    return temp;
+  } else {
+    return nullptr;
+  }
+}
+inline const ::io::deephaven::proto::backplane::script::grpc::GetHoverResponse& AutoCompleteResponse::_internal_hover() const {
+  return _internal_has_hover()
+      ? *response_.hover_
+      : reinterpret_cast< ::io::deephaven::proto::backplane::script::grpc::GetHoverResponse&>(::io::deephaven::proto::backplane::script::grpc::_GetHoverResponse_default_instance_);
+}
+inline const ::io::deephaven::proto::backplane::script::grpc::GetHoverResponse& AutoCompleteResponse::hover() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.AutoCompleteResponse.hover)
+  return _internal_hover();
+}
+inline ::io::deephaven::proto::backplane::script::grpc::GetHoverResponse* AutoCompleteResponse::unsafe_arena_release_hover() {
+  // @@protoc_insertion_point(field_unsafe_arena_release:io.deephaven.proto.backplane.script.grpc.AutoCompleteResponse.hover)
+  if (_internal_has_hover()) {
+    clear_has_response();
+    ::io::deephaven::proto::backplane::script::grpc::GetHoverResponse* temp = response_.hover_;
+    response_.hover_ = nullptr;
+    return temp;
+  } else {
+    return nullptr;
+  }
+}
+inline void AutoCompleteResponse::unsafe_arena_set_allocated_hover(::io::deephaven::proto::backplane::script::grpc::GetHoverResponse* hover) {
+  clear_response();
+  if (hover) {
+    set_has_hover();
+    response_.hover_ = hover;
+  }
+  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:io.deephaven.proto.backplane.script.grpc.AutoCompleteResponse.hover)
+}
+inline ::io::deephaven::proto::backplane::script::grpc::GetHoverResponse* AutoCompleteResponse::_internal_mutable_hover() {
+  if (!_internal_has_hover()) {
+    clear_response();
+    set_has_hover();
+    response_.hover_ = CreateMaybeMessage< ::io::deephaven::proto::backplane::script::grpc::GetHoverResponse >(GetArenaForAllocation());
+  }
+  return response_.hover_;
+}
+inline ::io::deephaven::proto::backplane::script::grpc::GetHoverResponse* AutoCompleteResponse::mutable_hover() {
+  ::io::deephaven::proto::backplane::script::grpc::GetHoverResponse* _msg = _internal_mutable_hover();
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.AutoCompleteResponse.hover)
+  return _msg;
+}
+
+// .io.deephaven.proto.backplane.script.grpc.GetPullDiagnosticResponse diagnostic = 6;
+inline bool AutoCompleteResponse::_internal_has_diagnostic() const {
+  return response_case() == kDiagnostic;
+}
+inline bool AutoCompleteResponse::has_diagnostic() const {
+  return _internal_has_diagnostic();
+}
+inline void AutoCompleteResponse::set_has_diagnostic() {
+  _oneof_case_[0] = kDiagnostic;
+}
+inline void AutoCompleteResponse::clear_diagnostic() {
+  if (_internal_has_diagnostic()) {
+    if (GetArenaForAllocation() == nullptr) {
+      delete response_.diagnostic_;
+    }
+    clear_has_response();
+  }
+}
+inline ::io::deephaven::proto::backplane::script::grpc::GetPullDiagnosticResponse* AutoCompleteResponse::release_diagnostic() {
+  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.AutoCompleteResponse.diagnostic)
+  if (_internal_has_diagnostic()) {
+    clear_has_response();
+    ::io::deephaven::proto::backplane::script::grpc::GetPullDiagnosticResponse* temp = response_.diagnostic_;
+    if (GetArenaForAllocation() != nullptr) {
+      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
+    }
+    response_.diagnostic_ = nullptr;
+    return temp;
+  } else {
+    return nullptr;
+  }
+}
+inline const ::io::deephaven::proto::backplane::script::grpc::GetPullDiagnosticResponse& AutoCompleteResponse::_internal_diagnostic() const {
+  return _internal_has_diagnostic()
+      ? *response_.diagnostic_
+      : reinterpret_cast< ::io::deephaven::proto::backplane::script::grpc::GetPullDiagnosticResponse&>(::io::deephaven::proto::backplane::script::grpc::_GetPullDiagnosticResponse_default_instance_);
+}
+inline const ::io::deephaven::proto::backplane::script::grpc::GetPullDiagnosticResponse& AutoCompleteResponse::diagnostic() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.AutoCompleteResponse.diagnostic)
+  return _internal_diagnostic();
+}
+inline ::io::deephaven::proto::backplane::script::grpc::GetPullDiagnosticResponse* AutoCompleteResponse::unsafe_arena_release_diagnostic() {
+  // @@protoc_insertion_point(field_unsafe_arena_release:io.deephaven.proto.backplane.script.grpc.AutoCompleteResponse.diagnostic)
+  if (_internal_has_diagnostic()) {
+    clear_has_response();
+    ::io::deephaven::proto::backplane::script::grpc::GetPullDiagnosticResponse* temp = response_.diagnostic_;
+    response_.diagnostic_ = nullptr;
+    return temp;
+  } else {
+    return nullptr;
+  }
+}
+inline void AutoCompleteResponse::unsafe_arena_set_allocated_diagnostic(::io::deephaven::proto::backplane::script::grpc::GetPullDiagnosticResponse* diagnostic) {
+  clear_response();
+  if (diagnostic) {
+    set_has_diagnostic();
+    response_.diagnostic_ = diagnostic;
+  }
+  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:io.deephaven.proto.backplane.script.grpc.AutoCompleteResponse.diagnostic)
+}
+inline ::io::deephaven::proto::backplane::script::grpc::GetPullDiagnosticResponse* AutoCompleteResponse::_internal_mutable_diagnostic() {
+  if (!_internal_has_diagnostic()) {
+    clear_response();
+    set_has_diagnostic();
+    response_.diagnostic_ = CreateMaybeMessage< ::io::deephaven::proto::backplane::script::grpc::GetPullDiagnosticResponse >(GetArenaForAllocation());
+  }
+  return response_.diagnostic_;
+}
+inline ::io::deephaven::proto::backplane::script::grpc::GetPullDiagnosticResponse* AutoCompleteResponse::mutable_diagnostic() {
+  ::io::deephaven::proto::backplane::script::grpc::GetPullDiagnosticResponse* _msg = _internal_mutable_diagnostic();
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.AutoCompleteResponse.diagnostic)
+  return _msg;
+}
+
+// .io.deephaven.proto.backplane.script.grpc.GetPublishDiagnosticResponse diagnostic_publish = 7;
+inline bool AutoCompleteResponse::_internal_has_diagnostic_publish() const {
+  return response_case() == kDiagnosticPublish;
+}
+inline bool AutoCompleteResponse::has_diagnostic_publish() const {
+  return _internal_has_diagnostic_publish();
+}
+inline void AutoCompleteResponse::set_has_diagnostic_publish() {
+  _oneof_case_[0] = kDiagnosticPublish;
+}
+inline void AutoCompleteResponse::clear_diagnostic_publish() {
+  if (_internal_has_diagnostic_publish()) {
+    if (GetArenaForAllocation() == nullptr) {
+      delete response_.diagnostic_publish_;
+    }
+    clear_has_response();
+  }
+}
+inline ::io::deephaven::proto::backplane::script::grpc::GetPublishDiagnosticResponse* AutoCompleteResponse::release_diagnostic_publish() {
+  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.AutoCompleteResponse.diagnostic_publish)
+  if (_internal_has_diagnostic_publish()) {
+    clear_has_response();
+    ::io::deephaven::proto::backplane::script::grpc::GetPublishDiagnosticResponse* temp = response_.diagnostic_publish_;
+    if (GetArenaForAllocation() != nullptr) {
+      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
+    }
+    response_.diagnostic_publish_ = nullptr;
+    return temp;
+  } else {
+    return nullptr;
+  }
+}
+inline const ::io::deephaven::proto::backplane::script::grpc::GetPublishDiagnosticResponse& AutoCompleteResponse::_internal_diagnostic_publish() const {
+  return _internal_has_diagnostic_publish()
+      ? *response_.diagnostic_publish_
+      : reinterpret_cast< ::io::deephaven::proto::backplane::script::grpc::GetPublishDiagnosticResponse&>(::io::deephaven::proto::backplane::script::grpc::_GetPublishDiagnosticResponse_default_instance_);
+}
+inline const ::io::deephaven::proto::backplane::script::grpc::GetPublishDiagnosticResponse& AutoCompleteResponse::diagnostic_publish() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.AutoCompleteResponse.diagnostic_publish)
+  return _internal_diagnostic_publish();
+}
+inline ::io::deephaven::proto::backplane::script::grpc::GetPublishDiagnosticResponse* AutoCompleteResponse::unsafe_arena_release_diagnostic_publish() {
+  // @@protoc_insertion_point(field_unsafe_arena_release:io.deephaven.proto.backplane.script.grpc.AutoCompleteResponse.diagnostic_publish)
+  if (_internal_has_diagnostic_publish()) {
+    clear_has_response();
+    ::io::deephaven::proto::backplane::script::grpc::GetPublishDiagnosticResponse* temp = response_.diagnostic_publish_;
+    response_.diagnostic_publish_ = nullptr;
+    return temp;
+  } else {
+    return nullptr;
+  }
+}
+inline void AutoCompleteResponse::unsafe_arena_set_allocated_diagnostic_publish(::io::deephaven::proto::backplane::script::grpc::GetPublishDiagnosticResponse* diagnostic_publish) {
+  clear_response();
+  if (diagnostic_publish) {
+    set_has_diagnostic_publish();
+    response_.diagnostic_publish_ = diagnostic_publish;
+  }
+  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:io.deephaven.proto.backplane.script.grpc.AutoCompleteResponse.diagnostic_publish)
+}
+inline ::io::deephaven::proto::backplane::script::grpc::GetPublishDiagnosticResponse* AutoCompleteResponse::_internal_mutable_diagnostic_publish() {
+  if (!_internal_has_diagnostic_publish()) {
+    clear_response();
+    set_has_diagnostic_publish();
+    response_.diagnostic_publish_ = CreateMaybeMessage< ::io::deephaven::proto::backplane::script::grpc::GetPublishDiagnosticResponse >(GetArenaForAllocation());
+  }
+  return response_.diagnostic_publish_;
+}
+inline ::io::deephaven::proto::backplane::script::grpc::GetPublishDiagnosticResponse* AutoCompleteResponse::mutable_diagnostic_publish() {
+  ::io::deephaven::proto::backplane::script::grpc::GetPublishDiagnosticResponse* _msg = _internal_mutable_diagnostic_publish();
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.AutoCompleteResponse.diagnostic_publish)
+  return _msg;
+}
+
+inline bool AutoCompleteResponse::has_response() const {
+  return response_case() != RESPONSE_NOT_SET;
+}
+inline void AutoCompleteResponse::clear_has_response() {
+  _oneof_case_[0] = RESPONSE_NOT_SET;
+}
+inline AutoCompleteResponse::ResponseCase AutoCompleteResponse::response_case() const {
+  return AutoCompleteResponse::ResponseCase(_oneof_case_[0]);
+}
+// -------------------------------------------------------------------
+
+// BrowserNextResponse
+
+// -------------------------------------------------------------------
+
+// OpenDocumentRequest
+
+// .io.deephaven.proto.backplane.grpc.Ticket console_id = 1 [deprecated = true];
+inline bool OpenDocumentRequest::_internal_has_console_id() const {
+  return this != internal_default_instance() && console_id_ != nullptr;
+}
+inline bool OpenDocumentRequest::has_console_id() const {
+  return _internal_has_console_id();
+}
+inline const ::io::deephaven::proto::backplane::grpc::Ticket& OpenDocumentRequest::_internal_console_id() const {
+  const ::io::deephaven::proto::backplane::grpc::Ticket* p = console_id_;
+  return p != nullptr ? *p : reinterpret_cast<const ::io::deephaven::proto::backplane::grpc::Ticket&>(
+      ::io::deephaven::proto::backplane::grpc::_Ticket_default_instance_);
+}
+inline const ::io::deephaven::proto::backplane::grpc::Ticket& OpenDocumentRequest::console_id() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.OpenDocumentRequest.console_id)
+  return _internal_console_id();
+}
+inline void OpenDocumentRequest::unsafe_arena_set_allocated_console_id(
+    ::io::deephaven::proto::backplane::grpc::Ticket* console_id) {
+  if (GetArenaForAllocation() == nullptr) {
+    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(console_id_);
+  }
+  console_id_ = console_id;
+  if (console_id) {
+    
+  } else {
+    
+  }
+  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:io.deephaven.proto.backplane.script.grpc.OpenDocumentRequest.console_id)
+}
+inline ::io::deephaven::proto::backplane::grpc::Ticket* OpenDocumentRequest::release_console_id() {
+  
+  ::io::deephaven::proto::backplane::grpc::Ticket* temp = console_id_;
+  console_id_ = nullptr;
+#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
+  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
+  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
+  if (GetArenaForAllocation() == nullptr) { delete old; }
+#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
+  if (GetArenaForAllocation() != nullptr) {
+    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
+  }
+#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
+  return temp;
+}
+inline ::io::deephaven::proto::backplane::grpc::Ticket* OpenDocumentRequest::unsafe_arena_release_console_id() {
+  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.OpenDocumentRequest.console_id)
+  
+  ::io::deephaven::proto::backplane::grpc::Ticket* temp = console_id_;
+  console_id_ = nullptr;
+  return temp;
+}
+inline ::io::deephaven::proto::backplane::grpc::Ticket* OpenDocumentRequest::_internal_mutable_console_id() {
+  
+  if (console_id_ == nullptr) {
+    auto* p = CreateMaybeMessage<::io::deephaven::proto::backplane::grpc::Ticket>(GetArenaForAllocation());
+    console_id_ = p;
+  }
+  return console_id_;
+}
+inline ::io::deephaven::proto::backplane::grpc::Ticket* OpenDocumentRequest::mutable_console_id() {
+  ::io::deephaven::proto::backplane::grpc::Ticket* _msg = _internal_mutable_console_id();
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.OpenDocumentRequest.console_id)
+  return _msg;
+}
+inline void OpenDocumentRequest::set_allocated_console_id(::io::deephaven::proto::backplane::grpc::Ticket* console_id) {
+  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
+  if (message_arena == nullptr) {
+    delete reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::MessageLite*>(console_id_);
+  }
+  if (console_id) {
+    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
+        ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(
+                reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(console_id));
+    if (message_arena != submessage_arena) {
+      console_id = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
+          message_arena, console_id, submessage_arena);
+    }
+    
+  } else {
+    
+  }
+  console_id_ = console_id;
+  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.OpenDocumentRequest.console_id)
+}
+
+// .io.deephaven.proto.backplane.script.grpc.TextDocumentItem text_document = 2;
+inline bool OpenDocumentRequest::_internal_has_text_document() const {
+  return this != internal_default_instance() && text_document_ != nullptr;
+}
+inline bool OpenDocumentRequest::has_text_document() const {
+  return _internal_has_text_document();
+}
+inline void OpenDocumentRequest::clear_text_document() {
+  if (GetArenaForAllocation() == nullptr && text_document_ != nullptr) {
+    delete text_document_;
+  }
+  text_document_ = nullptr;
+}
+inline const ::io::deephaven::proto::backplane::script::grpc::TextDocumentItem& OpenDocumentRequest::_internal_text_document() const {
+  const ::io::deephaven::proto::backplane::script::grpc::TextDocumentItem* p = text_document_;
+  return p != nullptr ? *p : reinterpret_cast<const ::io::deephaven::proto::backplane::script::grpc::TextDocumentItem&>(
+      ::io::deephaven::proto::backplane::script::grpc::_TextDocumentItem_default_instance_);
+}
+inline const ::io::deephaven::proto::backplane::script::grpc::TextDocumentItem& OpenDocumentRequest::text_document() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.OpenDocumentRequest.text_document)
+  return _internal_text_document();
+}
+inline void OpenDocumentRequest::unsafe_arena_set_allocated_text_document(
+    ::io::deephaven::proto::backplane::script::grpc::TextDocumentItem* text_document) {
+  if (GetArenaForAllocation() == nullptr) {
+    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(text_document_);
+  }
+  text_document_ = text_document;
+  if (text_document) {
+    
+  } else {
+    
+  }
+  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:io.deephaven.proto.backplane.script.grpc.OpenDocumentRequest.text_document)
+}
+inline ::io::deephaven::proto::backplane::script::grpc::TextDocumentItem* OpenDocumentRequest::release_text_document() {
+  
+  ::io::deephaven::proto::backplane::script::grpc::TextDocumentItem* temp = text_document_;
+  text_document_ = nullptr;
+#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
+  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
+  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
+  if (GetArenaForAllocation() == nullptr) { delete old; }
+#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
+  if (GetArenaForAllocation() != nullptr) {
+    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
+  }
+#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
+  return temp;
+}
+inline ::io::deephaven::proto::backplane::script::grpc::TextDocumentItem* OpenDocumentRequest::unsafe_arena_release_text_document() {
+  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.OpenDocumentRequest.text_document)
+  
+  ::io::deephaven::proto::backplane::script::grpc::TextDocumentItem* temp = text_document_;
+  text_document_ = nullptr;
+  return temp;
+}
+inline ::io::deephaven::proto::backplane::script::grpc::TextDocumentItem* OpenDocumentRequest::_internal_mutable_text_document() {
+  
+  if (text_document_ == nullptr) {
+    auto* p = CreateMaybeMessage<::io::deephaven::proto::backplane::script::grpc::TextDocumentItem>(GetArenaForAllocation());
+    text_document_ = p;
+  }
+  return text_document_;
+}
+inline ::io::deephaven::proto::backplane::script::grpc::TextDocumentItem* OpenDocumentRequest::mutable_text_document() {
+  ::io::deephaven::proto::backplane::script::grpc::TextDocumentItem* _msg = _internal_mutable_text_document();
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.OpenDocumentRequest.text_document)
+  return _msg;
+}
+inline void OpenDocumentRequest::set_allocated_text_document(::io::deephaven::proto::backplane::script::grpc::TextDocumentItem* text_document) {
+  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
+  if (message_arena == nullptr) {
+    delete text_document_;
+  }
+  if (text_document) {
+    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
+        ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(text_document);
+    if (message_arena != submessage_arena) {
+      text_document = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
+          message_arena, text_document, submessage_arena);
+    }
+    
+  } else {
+    
+  }
+  text_document_ = text_document;
+  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.OpenDocumentRequest.text_document)
+}
+
+// -------------------------------------------------------------------
+
+// TextDocumentItem
+
+// string uri = 1;
+inline void TextDocumentItem::clear_uri() {
+  uri_.ClearToEmpty();
+}
+inline const std::string& TextDocumentItem::uri() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.TextDocumentItem.uri)
+  return _internal_uri();
+}
+template <typename ArgT0, typename... ArgT>
+inline PROTOBUF_ALWAYS_INLINE
+void TextDocumentItem::set_uri(ArgT0&& arg0, ArgT... args) {
+ 
+ uri_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation());
+  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.TextDocumentItem.uri)
+}
+inline std::string* TextDocumentItem::mutable_uri() {
+  std::string* _s = _internal_mutable_uri();
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.TextDocumentItem.uri)
+  return _s;
+}
+inline const std::string& TextDocumentItem::_internal_uri() const {
+  return uri_.Get();
+}
+inline void TextDocumentItem::_internal_set_uri(const std::string& value) {
+  
+  uri_.Set(value, GetArenaForAllocation());
+}
+inline std::string* TextDocumentItem::_internal_mutable_uri() {
+  
+  return uri_.Mutable(GetArenaForAllocation());
+}
+inline std::string* TextDocumentItem::release_uri() {
+  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.TextDocumentItem.uri)
+  return uri_.Release();
+}
+inline void TextDocumentItem::set_allocated_uri(std::string* uri) {
+  if (uri != nullptr) {
+    
+  } else {
+    
+  }
+  uri_.SetAllocated(uri, GetArenaForAllocation());
+#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  if (uri_.IsDefault()) {
+    uri_.Set("", GetArenaForAllocation());
+  }
+#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.TextDocumentItem.uri)
+}
+
+// string language_id = 2;
+inline void TextDocumentItem::clear_language_id() {
+  language_id_.ClearToEmpty();
+}
+inline const std::string& TextDocumentItem::language_id() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.TextDocumentItem.language_id)
+  return _internal_language_id();
+}
+template <typename ArgT0, typename... ArgT>
+inline PROTOBUF_ALWAYS_INLINE
+void TextDocumentItem::set_language_id(ArgT0&& arg0, ArgT... args) {
+ 
+ language_id_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation());
+  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.TextDocumentItem.language_id)
+}
+inline std::string* TextDocumentItem::mutable_language_id() {
+  std::string* _s = _internal_mutable_language_id();
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.TextDocumentItem.language_id)
+  return _s;
+}
+inline const std::string& TextDocumentItem::_internal_language_id() const {
+  return language_id_.Get();
+}
+inline void TextDocumentItem::_internal_set_language_id(const std::string& value) {
+  
+  language_id_.Set(value, GetArenaForAllocation());
+}
+inline std::string* TextDocumentItem::_internal_mutable_language_id() {
+  
+  return language_id_.Mutable(GetArenaForAllocation());
+}
+inline std::string* TextDocumentItem::release_language_id() {
+  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.TextDocumentItem.language_id)
+  return language_id_.Release();
+}
+inline void TextDocumentItem::set_allocated_language_id(std::string* language_id) {
+  if (language_id != nullptr) {
+    
+  } else {
+    
+  }
+  language_id_.SetAllocated(language_id, GetArenaForAllocation());
+#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  if (language_id_.IsDefault()) {
+    language_id_.Set("", GetArenaForAllocation());
+  }
+#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.TextDocumentItem.language_id)
+}
+
+// int32 version = 3;
+inline void TextDocumentItem::clear_version() {
+  version_ = 0;
+}
+inline int32_t TextDocumentItem::_internal_version() const {
+  return version_;
+}
+inline int32_t TextDocumentItem::version() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.TextDocumentItem.version)
+  return _internal_version();
+}
+inline void TextDocumentItem::_internal_set_version(int32_t value) {
+  
+  version_ = value;
+}
+inline void TextDocumentItem::set_version(int32_t value) {
+  _internal_set_version(value);
+  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.TextDocumentItem.version)
+}
+
+// string text = 4;
+inline void TextDocumentItem::clear_text() {
+  text_.ClearToEmpty();
+}
+inline const std::string& TextDocumentItem::text() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.TextDocumentItem.text)
+  return _internal_text();
+}
+template <typename ArgT0, typename... ArgT>
+inline PROTOBUF_ALWAYS_INLINE
+void TextDocumentItem::set_text(ArgT0&& arg0, ArgT... args) {
+ 
+ text_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation());
+  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.TextDocumentItem.text)
+}
+inline std::string* TextDocumentItem::mutable_text() {
+  std::string* _s = _internal_mutable_text();
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.TextDocumentItem.text)
+  return _s;
+}
+inline const std::string& TextDocumentItem::_internal_text() const {
+  return text_.Get();
+}
+inline void TextDocumentItem::_internal_set_text(const std::string& value) {
+  
+  text_.Set(value, GetArenaForAllocation());
+}
+inline std::string* TextDocumentItem::_internal_mutable_text() {
+  
+  return text_.Mutable(GetArenaForAllocation());
+}
+inline std::string* TextDocumentItem::release_text() {
+  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.TextDocumentItem.text)
+  return text_.Release();
+}
+inline void TextDocumentItem::set_allocated_text(std::string* text) {
+  if (text != nullptr) {
+    
+  } else {
+    
+  }
+  text_.SetAllocated(text, GetArenaForAllocation());
+#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  if (text_.IsDefault()) {
+    text_.Set("", GetArenaForAllocation());
+  }
+#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.TextDocumentItem.text)
+}
+
+// -------------------------------------------------------------------
+
+// CloseDocumentRequest
+
+// .io.deephaven.proto.backplane.grpc.Ticket console_id = 1 [deprecated = true];
+inline bool CloseDocumentRequest::_internal_has_console_id() const {
+  return this != internal_default_instance() && console_id_ != nullptr;
+}
+inline bool CloseDocumentRequest::has_console_id() const {
+  return _internal_has_console_id();
+}
+inline const ::io::deephaven::proto::backplane::grpc::Ticket& CloseDocumentRequest::_internal_console_id() const {
+  const ::io::deephaven::proto::backplane::grpc::Ticket* p = console_id_;
+  return p != nullptr ? *p : reinterpret_cast<const ::io::deephaven::proto::backplane::grpc::Ticket&>(
+      ::io::deephaven::proto::backplane::grpc::_Ticket_default_instance_);
+}
+inline const ::io::deephaven::proto::backplane::grpc::Ticket& CloseDocumentRequest::console_id() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.CloseDocumentRequest.console_id)
+  return _internal_console_id();
+}
+inline void CloseDocumentRequest::unsafe_arena_set_allocated_console_id(
+    ::io::deephaven::proto::backplane::grpc::Ticket* console_id) {
+  if (GetArenaForAllocation() == nullptr) {
+    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(console_id_);
+  }
+  console_id_ = console_id;
+  if (console_id) {
+    
+  } else {
+    
+  }
+  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:io.deephaven.proto.backplane.script.grpc.CloseDocumentRequest.console_id)
+}
+inline ::io::deephaven::proto::backplane::grpc::Ticket* CloseDocumentRequest::release_console_id() {
+  
+  ::io::deephaven::proto::backplane::grpc::Ticket* temp = console_id_;
+  console_id_ = nullptr;
+#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
+  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
+  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
+  if (GetArenaForAllocation() == nullptr) { delete old; }
+#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
+  if (GetArenaForAllocation() != nullptr) {
+    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
+  }
+#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
+  return temp;
+}
+inline ::io::deephaven::proto::backplane::grpc::Ticket* CloseDocumentRequest::unsafe_arena_release_console_id() {
+  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.CloseDocumentRequest.console_id)
+  
+  ::io::deephaven::proto::backplane::grpc::Ticket* temp = console_id_;
+  console_id_ = nullptr;
+  return temp;
 }
-inline const std::string& GetConsoleTypesResponse::_internal_console_types(int index) const {
-  return console_types_.Get(index);
+inline ::io::deephaven::proto::backplane::grpc::Ticket* CloseDocumentRequest::_internal_mutable_console_id() {
+  
+  if (console_id_ == nullptr) {
+    auto* p = CreateMaybeMessage<::io::deephaven::proto::backplane::grpc::Ticket>(GetArenaForAllocation());
+    console_id_ = p;
+  }
+  return console_id_;
 }
-inline const std::string& GetConsoleTypesResponse::console_types(int index) const {
-  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.GetConsoleTypesResponse.console_types)
-  return _internal_console_types(index);
+inline ::io::deephaven::proto::backplane::grpc::Ticket* CloseDocumentRequest::mutable_console_id() {
+  ::io::deephaven::proto::backplane::grpc::Ticket* _msg = _internal_mutable_console_id();
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.CloseDocumentRequest.console_id)
+  return _msg;
 }
-inline std::string* GetConsoleTypesResponse::mutable_console_types(int index) {
-  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.GetConsoleTypesResponse.console_types)
-  return console_types_.Mutable(index);
+inline void CloseDocumentRequest::set_allocated_console_id(::io::deephaven::proto::backplane::grpc::Ticket* console_id) {
+  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
+  if (message_arena == nullptr) {
+    delete reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::MessageLite*>(console_id_);
+  }
+  if (console_id) {
+    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
+        ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(
+                reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(console_id));
+    if (message_arena != submessage_arena) {
+      console_id = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
+          message_arena, console_id, submessage_arena);
+    }
+    
+  } else {
+    
+  }
+  console_id_ = console_id;
+  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.CloseDocumentRequest.console_id)
 }
-inline void GetConsoleTypesResponse::set_console_types(int index, const std::string& value) {
-  console_types_.Mutable(index)->assign(value);
-  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.GetConsoleTypesResponse.console_types)
+
+// .io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier text_document = 2;
+inline bool CloseDocumentRequest::_internal_has_text_document() const {
+  return this != internal_default_instance() && text_document_ != nullptr;
 }
-inline void GetConsoleTypesResponse::set_console_types(int index, std::string&& value) {
-  console_types_.Mutable(index)->assign(std::move(value));
-  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.GetConsoleTypesResponse.console_types)
+inline bool CloseDocumentRequest::has_text_document() const {
+  return _internal_has_text_document();
 }
-inline void GetConsoleTypesResponse::set_console_types(int index, const char* value) {
-  GOOGLE_DCHECK(value != nullptr);
-  console_types_.Mutable(index)->assign(value);
-  // @@protoc_insertion_point(field_set_char:io.deephaven.proto.backplane.script.grpc.GetConsoleTypesResponse.console_types)
+inline void CloseDocumentRequest::clear_text_document() {
+  if (GetArenaForAllocation() == nullptr && text_document_ != nullptr) {
+    delete text_document_;
+  }
+  text_document_ = nullptr;
 }
-inline void GetConsoleTypesResponse::set_console_types(int index, const char* value, size_t size) {
-  console_types_.Mutable(index)->assign(
-    reinterpret_cast<const char*>(value), size);
-  // @@protoc_insertion_point(field_set_pointer:io.deephaven.proto.backplane.script.grpc.GetConsoleTypesResponse.console_types)
+inline const ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier& CloseDocumentRequest::_internal_text_document() const {
+  const ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* p = text_document_;
+  return p != nullptr ? *p : reinterpret_cast<const ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier&>(
+      ::io::deephaven::proto::backplane::script::grpc::_VersionedTextDocumentIdentifier_default_instance_);
 }
-inline std::string* GetConsoleTypesResponse::_internal_add_console_types() {
-  return console_types_.Add();
+inline const ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier& CloseDocumentRequest::text_document() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.CloseDocumentRequest.text_document)
+  return _internal_text_document();
 }
-inline void GetConsoleTypesResponse::add_console_types(const std::string& value) {
-  console_types_.Add()->assign(value);
-  // @@protoc_insertion_point(field_add:io.deephaven.proto.backplane.script.grpc.GetConsoleTypesResponse.console_types)
+inline void CloseDocumentRequest::unsafe_arena_set_allocated_text_document(
+    ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* text_document) {
+  if (GetArenaForAllocation() == nullptr) {
+    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(text_document_);
+  }
+  text_document_ = text_document;
+  if (text_document) {
+    
+  } else {
+    
+  }
+  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:io.deephaven.proto.backplane.script.grpc.CloseDocumentRequest.text_document)
 }
-inline void GetConsoleTypesResponse::add_console_types(std::string&& value) {
-  console_types_.Add(std::move(value));
-  // @@protoc_insertion_point(field_add:io.deephaven.proto.backplane.script.grpc.GetConsoleTypesResponse.console_types)
+inline ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* CloseDocumentRequest::release_text_document() {
+  
+  ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* temp = text_document_;
+  text_document_ = nullptr;
+#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
+  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
+  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
+  if (GetArenaForAllocation() == nullptr) { delete old; }
+#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
+  if (GetArenaForAllocation() != nullptr) {
+    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
+  }
+#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
+  return temp;
 }
-inline void GetConsoleTypesResponse::add_console_types(const char* value) {
-  GOOGLE_DCHECK(value != nullptr);
-  console_types_.Add()->assign(value);
-  // @@protoc_insertion_point(field_add_char:io.deephaven.proto.backplane.script.grpc.GetConsoleTypesResponse.console_types)
+inline ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* CloseDocumentRequest::unsafe_arena_release_text_document() {
+  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.CloseDocumentRequest.text_document)
+  
+  ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* temp = text_document_;
+  text_document_ = nullptr;
+  return temp;
 }
-inline void GetConsoleTypesResponse::add_console_types(const char* value, size_t size) {
-  console_types_.Add()->assign(reinterpret_cast<const char*>(value), size);
-  // @@protoc_insertion_point(field_add_pointer:io.deephaven.proto.backplane.script.grpc.GetConsoleTypesResponse.console_types)
+inline ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* CloseDocumentRequest::_internal_mutable_text_document() {
+  
+  if (text_document_ == nullptr) {
+    auto* p = CreateMaybeMessage<::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier>(GetArenaForAllocation());
+    text_document_ = p;
+  }
+  return text_document_;
 }
-inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>&
-GetConsoleTypesResponse::console_types() const {
-  // @@protoc_insertion_point(field_list:io.deephaven.proto.backplane.script.grpc.GetConsoleTypesResponse.console_types)
-  return console_types_;
+inline ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* CloseDocumentRequest::mutable_text_document() {
+  ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* _msg = _internal_mutable_text_document();
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.CloseDocumentRequest.text_document)
+  return _msg;
 }
-inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>*
-GetConsoleTypesResponse::mutable_console_types() {
-  // @@protoc_insertion_point(field_mutable_list:io.deephaven.proto.backplane.script.grpc.GetConsoleTypesResponse.console_types)
-  return &console_types_;
+inline void CloseDocumentRequest::set_allocated_text_document(::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* text_document) {
+  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
+  if (message_arena == nullptr) {
+    delete text_document_;
+  }
+  if (text_document) {
+    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
+        ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(text_document);
+    if (message_arena != submessage_arena) {
+      text_document = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
+          message_arena, text_document, submessage_arena);
+    }
+    
+  } else {
+    
+  }
+  text_document_ = text_document;
+  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.CloseDocumentRequest.text_document)
 }
 
 // -------------------------------------------------------------------
 
-// StartConsoleRequest
+// ChangeDocumentRequest_TextDocumentContentChangeEvent
 
-// .io.deephaven.proto.backplane.grpc.Ticket result_id = 1;
-inline bool StartConsoleRequest::_internal_has_result_id() const {
-  return this != internal_default_instance() && result_id_ != nullptr;
+// .io.deephaven.proto.backplane.script.grpc.DocumentRange range = 1;
+inline bool ChangeDocumentRequest_TextDocumentContentChangeEvent::_internal_has_range() const {
+  return this != internal_default_instance() && range_ != nullptr;
 }
-inline bool StartConsoleRequest::has_result_id() const {
-  return _internal_has_result_id();
+inline bool ChangeDocumentRequest_TextDocumentContentChangeEvent::has_range() const {
+  return _internal_has_range();
 }
-inline const ::io::deephaven::proto::backplane::grpc::Ticket& StartConsoleRequest::_internal_result_id() const {
-  const ::io::deephaven::proto::backplane::grpc::Ticket* p = result_id_;
-  return p != nullptr ? *p : reinterpret_cast<const ::io::deephaven::proto::backplane::grpc::Ticket&>(
-      ::io::deephaven::proto::backplane::grpc::_Ticket_default_instance_);
+inline void ChangeDocumentRequest_TextDocumentContentChangeEvent::clear_range() {
+  if (GetArenaForAllocation() == nullptr && range_ != nullptr) {
+    delete range_;
+  }
+  range_ = nullptr;
 }
-inline const ::io::deephaven::proto::backplane::grpc::Ticket& StartConsoleRequest::result_id() const {
-  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.StartConsoleRequest.result_id)
-  return _internal_result_id();
+inline const ::io::deephaven::proto::backplane::script::grpc::DocumentRange& ChangeDocumentRequest_TextDocumentContentChangeEvent::_internal_range() const {
+  const ::io::deephaven::proto::backplane::script::grpc::DocumentRange* p = range_;
+  return p != nullptr ? *p : reinterpret_cast<const ::io::deephaven::proto::backplane::script::grpc::DocumentRange&>(
+      ::io::deephaven::proto::backplane::script::grpc::_DocumentRange_default_instance_);
 }
-inline void StartConsoleRequest::unsafe_arena_set_allocated_result_id(
-    ::io::deephaven::proto::backplane::grpc::Ticket* result_id) {
+inline const ::io::deephaven::proto::backplane::script::grpc::DocumentRange& ChangeDocumentRequest_TextDocumentContentChangeEvent::range() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.TextDocumentContentChangeEvent.range)
+  return _internal_range();
+}
+inline void ChangeDocumentRequest_TextDocumentContentChangeEvent::unsafe_arena_set_allocated_range(
+    ::io::deephaven::proto::backplane::script::grpc::DocumentRange* range) {
   if (GetArenaForAllocation() == nullptr) {
-    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(result_id_);
+    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(range_);
   }
-  result_id_ = result_id;
-  if (result_id) {
+  range_ = range;
+  if (range) {
     
   } else {
     
   }
-  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:io.deephaven.proto.backplane.script.grpc.StartConsoleRequest.result_id)
+  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.TextDocumentContentChangeEvent.range)
 }
-inline ::io::deephaven::proto::backplane::grpc::Ticket* StartConsoleRequest::release_result_id() {
+inline ::io::deephaven::proto::backplane::script::grpc::DocumentRange* ChangeDocumentRequest_TextDocumentContentChangeEvent::release_range() {
   
-  ::io::deephaven::proto::backplane::grpc::Ticket* temp = result_id_;
-  result_id_ = nullptr;
+  ::io::deephaven::proto::backplane::script::grpc::DocumentRange* temp = range_;
+  range_ = nullptr;
 #ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
   auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
   temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
@@ -9789,134 +15824,153 @@ inline ::io::deephaven::proto::backplane::grpc::Ticket* StartConsoleRequest::rel
 #endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
   return temp;
 }
-inline ::io::deephaven::proto::backplane::grpc::Ticket* StartConsoleRequest::unsafe_arena_release_result_id() {
-  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.StartConsoleRequest.result_id)
+inline ::io::deephaven::proto::backplane::script::grpc::DocumentRange* ChangeDocumentRequest_TextDocumentContentChangeEvent::unsafe_arena_release_range() {
+  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.TextDocumentContentChangeEvent.range)
   
-  ::io::deephaven::proto::backplane::grpc::Ticket* temp = result_id_;
-  result_id_ = nullptr;
+  ::io::deephaven::proto::backplane::script::grpc::DocumentRange* temp = range_;
+  range_ = nullptr;
   return temp;
 }
-inline ::io::deephaven::proto::backplane::grpc::Ticket* StartConsoleRequest::_internal_mutable_result_id() {
+inline ::io::deephaven::proto::backplane::script::grpc::DocumentRange* ChangeDocumentRequest_TextDocumentContentChangeEvent::_internal_mutable_range() {
   
-  if (result_id_ == nullptr) {
-    auto* p = CreateMaybeMessage<::io::deephaven::proto::backplane::grpc::Ticket>(GetArenaForAllocation());
-    result_id_ = p;
+  if (range_ == nullptr) {
+    auto* p = CreateMaybeMessage<::io::deephaven::proto::backplane::script::grpc::DocumentRange>(GetArenaForAllocation());
+    range_ = p;
   }
-  return result_id_;
+  return range_;
 }
-inline ::io::deephaven::proto::backplane::grpc::Ticket* StartConsoleRequest::mutable_result_id() {
-  ::io::deephaven::proto::backplane::grpc::Ticket* _msg = _internal_mutable_result_id();
-  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.StartConsoleRequest.result_id)
+inline ::io::deephaven::proto::backplane::script::grpc::DocumentRange* ChangeDocumentRequest_TextDocumentContentChangeEvent::mutable_range() {
+  ::io::deephaven::proto::backplane::script::grpc::DocumentRange* _msg = _internal_mutable_range();
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.TextDocumentContentChangeEvent.range)
   return _msg;
 }
-inline void StartConsoleRequest::set_allocated_result_id(::io::deephaven::proto::backplane::grpc::Ticket* result_id) {
+inline void ChangeDocumentRequest_TextDocumentContentChangeEvent::set_allocated_range(::io::deephaven::proto::backplane::script::grpc::DocumentRange* range) {
   ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
   if (message_arena == nullptr) {
-    delete reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::MessageLite*>(result_id_);
+    delete range_;
   }
-  if (result_id) {
+  if (range) {
     ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
-        ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(
-                reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(result_id));
+        ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(range);
     if (message_arena != submessage_arena) {
-      result_id = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
-          message_arena, result_id, submessage_arena);
+      range = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
+          message_arena, range, submessage_arena);
     }
     
   } else {
     
   }
-  result_id_ = result_id;
-  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.StartConsoleRequest.result_id)
+  range_ = range;
+  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.TextDocumentContentChangeEvent.range)
+}
+
+// int32 range_length = 2;
+inline void ChangeDocumentRequest_TextDocumentContentChangeEvent::clear_range_length() {
+  range_length_ = 0;
+}
+inline int32_t ChangeDocumentRequest_TextDocumentContentChangeEvent::_internal_range_length() const {
+  return range_length_;
+}
+inline int32_t ChangeDocumentRequest_TextDocumentContentChangeEvent::range_length() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.TextDocumentContentChangeEvent.range_length)
+  return _internal_range_length();
+}
+inline void ChangeDocumentRequest_TextDocumentContentChangeEvent::_internal_set_range_length(int32_t value) {
+  
+  range_length_ = value;
+}
+inline void ChangeDocumentRequest_TextDocumentContentChangeEvent::set_range_length(int32_t value) {
+  _internal_set_range_length(value);
+  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.TextDocumentContentChangeEvent.range_length)
 }
 
-// string session_type = 2;
-inline void StartConsoleRequest::clear_session_type() {
-  session_type_.ClearToEmpty();
+// string text = 3;
+inline void ChangeDocumentRequest_TextDocumentContentChangeEvent::clear_text() {
+  text_.ClearToEmpty();
 }
-inline const std::string& StartConsoleRequest::session_type() const {
-  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.StartConsoleRequest.session_type)
-  return _internal_session_type();
+inline const std::string& ChangeDocumentRequest_TextDocumentContentChangeEvent::text() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.TextDocumentContentChangeEvent.text)
+  return _internal_text();
 }
 template <typename ArgT0, typename... ArgT>
 inline PROTOBUF_ALWAYS_INLINE
-void StartConsoleRequest::set_session_type(ArgT0&& arg0, ArgT... args) {
+void ChangeDocumentRequest_TextDocumentContentChangeEvent::set_text(ArgT0&& arg0, ArgT... args) {
  
- session_type_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation());
-  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.StartConsoleRequest.session_type)
+ text_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation());
+  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.TextDocumentContentChangeEvent.text)
 }
-inline std::string* StartConsoleRequest::mutable_session_type() {
-  std::string* _s = _internal_mutable_session_type();
-  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.StartConsoleRequest.session_type)
+inline std::string* ChangeDocumentRequest_TextDocumentContentChangeEvent::mutable_text() {
+  std::string* _s = _internal_mutable_text();
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.TextDocumentContentChangeEvent.text)
   return _s;
 }
-inline const std::string& StartConsoleRequest::_internal_session_type() const {
-  return session_type_.Get();
+inline const std::string& ChangeDocumentRequest_TextDocumentContentChangeEvent::_internal_text() const {
+  return text_.Get();
 }
-inline void StartConsoleRequest::_internal_set_session_type(const std::string& value) {
+inline void ChangeDocumentRequest_TextDocumentContentChangeEvent::_internal_set_text(const std::string& value) {
   
-  session_type_.Set(value, GetArenaForAllocation());
+  text_.Set(value, GetArenaForAllocation());
 }
-inline std::string* StartConsoleRequest::_internal_mutable_session_type() {
+inline std::string* ChangeDocumentRequest_TextDocumentContentChangeEvent::_internal_mutable_text() {
   
-  return session_type_.Mutable(GetArenaForAllocation());
+  return text_.Mutable(GetArenaForAllocation());
 }
-inline std::string* StartConsoleRequest::release_session_type() {
-  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.StartConsoleRequest.session_type)
-  return session_type_.Release();
+inline std::string* ChangeDocumentRequest_TextDocumentContentChangeEvent::release_text() {
+  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.TextDocumentContentChangeEvent.text)
+  return text_.Release();
 }
-inline void StartConsoleRequest::set_allocated_session_type(std::string* session_type) {
-  if (session_type != nullptr) {
+inline void ChangeDocumentRequest_TextDocumentContentChangeEvent::set_allocated_text(std::string* text) {
+  if (text != nullptr) {
     
   } else {
     
   }
-  session_type_.SetAllocated(session_type, GetArenaForAllocation());
+  text_.SetAllocated(text, GetArenaForAllocation());
 #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
-  if (session_type_.IsDefault()) {
-    session_type_.Set("", GetArenaForAllocation());
+  if (text_.IsDefault()) {
+    text_.Set("", GetArenaForAllocation());
   }
 #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
-  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.StartConsoleRequest.session_type)
+  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.TextDocumentContentChangeEvent.text)
 }
 
 // -------------------------------------------------------------------
 
-// StartConsoleResponse
+// ChangeDocumentRequest
 
-// .io.deephaven.proto.backplane.grpc.Ticket result_id = 1;
-inline bool StartConsoleResponse::_internal_has_result_id() const {
-  return this != internal_default_instance() && result_id_ != nullptr;
+// .io.deephaven.proto.backplane.grpc.Ticket console_id = 1 [deprecated = true];
+inline bool ChangeDocumentRequest::_internal_has_console_id() const {
+  return this != internal_default_instance() && console_id_ != nullptr;
 }
-inline bool StartConsoleResponse::has_result_id() const {
-  return _internal_has_result_id();
+inline bool ChangeDocumentRequest::has_console_id() const {
+  return _internal_has_console_id();
 }
-inline const ::io::deephaven::proto::backplane::grpc::Ticket& StartConsoleResponse::_internal_result_id() const {
-  const ::io::deephaven::proto::backplane::grpc::Ticket* p = result_id_;
+inline const ::io::deephaven::proto::backplane::grpc::Ticket& ChangeDocumentRequest::_internal_console_id() const {
+  const ::io::deephaven::proto::backplane::grpc::Ticket* p = console_id_;
   return p != nullptr ? *p : reinterpret_cast<const ::io::deephaven::proto::backplane::grpc::Ticket&>(
       ::io::deephaven::proto::backplane::grpc::_Ticket_default_instance_);
 }
-inline const ::io::deephaven::proto::backplane::grpc::Ticket& StartConsoleResponse::result_id() const {
-  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.StartConsoleResponse.result_id)
-  return _internal_result_id();
+inline const ::io::deephaven::proto::backplane::grpc::Ticket& ChangeDocumentRequest::console_id() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.console_id)
+  return _internal_console_id();
 }
-inline void StartConsoleResponse::unsafe_arena_set_allocated_result_id(
-    ::io::deephaven::proto::backplane::grpc::Ticket* result_id) {
+inline void ChangeDocumentRequest::unsafe_arena_set_allocated_console_id(
+    ::io::deephaven::proto::backplane::grpc::Ticket* console_id) {
   if (GetArenaForAllocation() == nullptr) {
-    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(result_id_);
+    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(console_id_);
   }
-  result_id_ = result_id;
-  if (result_id) {
+  console_id_ = console_id;
+  if (console_id) {
     
   } else {
     
   }
-  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:io.deephaven.proto.backplane.script.grpc.StartConsoleResponse.result_id)
+  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.console_id)
 }
-inline ::io::deephaven::proto::backplane::grpc::Ticket* StartConsoleResponse::release_result_id() {
+inline ::io::deephaven::proto::backplane::grpc::Ticket* ChangeDocumentRequest::release_console_id() {
   
-  ::io::deephaven::proto::backplane::grpc::Ticket* temp = result_id_;
-  result_id_ = nullptr;
+  ::io::deephaven::proto::backplane::grpc::Ticket* temp = console_id_;
+  console_id_ = nullptr;
 #ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
   auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
   temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
@@ -9928,375 +15982,310 @@ inline ::io::deephaven::proto::backplane::grpc::Ticket* StartConsoleResponse::re
 #endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
   return temp;
 }
-inline ::io::deephaven::proto::backplane::grpc::Ticket* StartConsoleResponse::unsafe_arena_release_result_id() {
-  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.StartConsoleResponse.result_id)
+inline ::io::deephaven::proto::backplane::grpc::Ticket* ChangeDocumentRequest::unsafe_arena_release_console_id() {
+  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.console_id)
   
-  ::io::deephaven::proto::backplane::grpc::Ticket* temp = result_id_;
-  result_id_ = nullptr;
+  ::io::deephaven::proto::backplane::grpc::Ticket* temp = console_id_;
+  console_id_ = nullptr;
   return temp;
 }
-inline ::io::deephaven::proto::backplane::grpc::Ticket* StartConsoleResponse::_internal_mutable_result_id() {
+inline ::io::deephaven::proto::backplane::grpc::Ticket* ChangeDocumentRequest::_internal_mutable_console_id() {
   
-  if (result_id_ == nullptr) {
+  if (console_id_ == nullptr) {
     auto* p = CreateMaybeMessage<::io::deephaven::proto::backplane::grpc::Ticket>(GetArenaForAllocation());
-    result_id_ = p;
+    console_id_ = p;
   }
-  return result_id_;
+  return console_id_;
 }
-inline ::io::deephaven::proto::backplane::grpc::Ticket* StartConsoleResponse::mutable_result_id() {
-  ::io::deephaven::proto::backplane::grpc::Ticket* _msg = _internal_mutable_result_id();
-  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.StartConsoleResponse.result_id)
+inline ::io::deephaven::proto::backplane::grpc::Ticket* ChangeDocumentRequest::mutable_console_id() {
+  ::io::deephaven::proto::backplane::grpc::Ticket* _msg = _internal_mutable_console_id();
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.console_id)
   return _msg;
 }
-inline void StartConsoleResponse::set_allocated_result_id(::io::deephaven::proto::backplane::grpc::Ticket* result_id) {
+inline void ChangeDocumentRequest::set_allocated_console_id(::io::deephaven::proto::backplane::grpc::Ticket* console_id) {
   ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
   if (message_arena == nullptr) {
-    delete reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::MessageLite*>(result_id_);
+    delete reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::MessageLite*>(console_id_);
   }
-  if (result_id) {
+  if (console_id) {
     ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
         ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(
-                reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(result_id));
+                reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(console_id));
     if (message_arena != submessage_arena) {
-      result_id = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
-          message_arena, result_id, submessage_arena);
+      console_id = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
+          message_arena, console_id, submessage_arena);
     }
     
   } else {
     
   }
-  result_id_ = result_id;
-  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.StartConsoleResponse.result_id)
-}
-
-// -------------------------------------------------------------------
-
-// GetHeapInfoRequest
-
-// -------------------------------------------------------------------
-
-// GetHeapInfoResponse
-
-// int64 max_memory = 1 [jstype = JS_STRING];
-inline void GetHeapInfoResponse::clear_max_memory() {
-  max_memory_ = int64_t{0};
-}
-inline int64_t GetHeapInfoResponse::_internal_max_memory() const {
-  return max_memory_;
-}
-inline int64_t GetHeapInfoResponse::max_memory() const {
-  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.GetHeapInfoResponse.max_memory)
-  return _internal_max_memory();
-}
-inline void GetHeapInfoResponse::_internal_set_max_memory(int64_t value) {
-  
-  max_memory_ = value;
-}
-inline void GetHeapInfoResponse::set_max_memory(int64_t value) {
-  _internal_set_max_memory(value);
-  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.GetHeapInfoResponse.max_memory)
-}
-
-// int64 total_memory = 2 [jstype = JS_STRING];
-inline void GetHeapInfoResponse::clear_total_memory() {
-  total_memory_ = int64_t{0};
-}
-inline int64_t GetHeapInfoResponse::_internal_total_memory() const {
-  return total_memory_;
-}
-inline int64_t GetHeapInfoResponse::total_memory() const {
-  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.GetHeapInfoResponse.total_memory)
-  return _internal_total_memory();
-}
-inline void GetHeapInfoResponse::_internal_set_total_memory(int64_t value) {
-  
-  total_memory_ = value;
-}
-inline void GetHeapInfoResponse::set_total_memory(int64_t value) {
-  _internal_set_total_memory(value);
-  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.GetHeapInfoResponse.total_memory)
-}
-
-// int64 free_memory = 3 [jstype = JS_STRING];
-inline void GetHeapInfoResponse::clear_free_memory() {
-  free_memory_ = int64_t{0};
-}
-inline int64_t GetHeapInfoResponse::_internal_free_memory() const {
-  return free_memory_;
-}
-inline int64_t GetHeapInfoResponse::free_memory() const {
-  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.GetHeapInfoResponse.free_memory)
-  return _internal_free_memory();
-}
-inline void GetHeapInfoResponse::_internal_set_free_memory(int64_t value) {
-  
-  free_memory_ = value;
-}
-inline void GetHeapInfoResponse::set_free_memory(int64_t value) {
-  _internal_set_free_memory(value);
-  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.GetHeapInfoResponse.free_memory)
+  console_id_ = console_id;
+  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.console_id)
 }
 
-// -------------------------------------------------------------------
-
-// LogSubscriptionRequest
-
-// int64 last_seen_log_timestamp = 1 [jstype = JS_STRING];
-inline void LogSubscriptionRequest::clear_last_seen_log_timestamp() {
-  last_seen_log_timestamp_ = int64_t{0};
-}
-inline int64_t LogSubscriptionRequest::_internal_last_seen_log_timestamp() const {
-  return last_seen_log_timestamp_;
-}
-inline int64_t LogSubscriptionRequest::last_seen_log_timestamp() const {
-  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.LogSubscriptionRequest.last_seen_log_timestamp)
-  return _internal_last_seen_log_timestamp();
+// .io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier text_document = 2;
+inline bool ChangeDocumentRequest::_internal_has_text_document() const {
+  return this != internal_default_instance() && text_document_ != nullptr;
 }
-inline void LogSubscriptionRequest::_internal_set_last_seen_log_timestamp(int64_t value) {
-  
-  last_seen_log_timestamp_ = value;
+inline bool ChangeDocumentRequest::has_text_document() const {
+  return _internal_has_text_document();
 }
-inline void LogSubscriptionRequest::set_last_seen_log_timestamp(int64_t value) {
-  _internal_set_last_seen_log_timestamp(value);
-  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.LogSubscriptionRequest.last_seen_log_timestamp)
+inline void ChangeDocumentRequest::clear_text_document() {
+  if (GetArenaForAllocation() == nullptr && text_document_ != nullptr) {
+    delete text_document_;
+  }
+  text_document_ = nullptr;
 }
-
-// repeated string levels = 2;
-inline int LogSubscriptionRequest::_internal_levels_size() const {
-  return levels_.size();
+inline const ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier& ChangeDocumentRequest::_internal_text_document() const {
+  const ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* p = text_document_;
+  return p != nullptr ? *p : reinterpret_cast<const ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier&>(
+      ::io::deephaven::proto::backplane::script::grpc::_VersionedTextDocumentIdentifier_default_instance_);
 }
-inline int LogSubscriptionRequest::levels_size() const {
-  return _internal_levels_size();
+inline const ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier& ChangeDocumentRequest::text_document() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.text_document)
+  return _internal_text_document();
 }
-inline void LogSubscriptionRequest::clear_levels() {
-  levels_.Clear();
+inline void ChangeDocumentRequest::unsafe_arena_set_allocated_text_document(
+    ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* text_document) {
+  if (GetArenaForAllocation() == nullptr) {
+    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(text_document_);
+  }
+  text_document_ = text_document;
+  if (text_document) {
+    
+  } else {
+    
+  }
+  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.text_document)
 }
-inline std::string* LogSubscriptionRequest::add_levels() {
-  std::string* _s = _internal_add_levels();
-  // @@protoc_insertion_point(field_add_mutable:io.deephaven.proto.backplane.script.grpc.LogSubscriptionRequest.levels)
-  return _s;
+inline ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* ChangeDocumentRequest::release_text_document() {
+  
+  ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* temp = text_document_;
+  text_document_ = nullptr;
+#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
+  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
+  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
+  if (GetArenaForAllocation() == nullptr) { delete old; }
+#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
+  if (GetArenaForAllocation() != nullptr) {
+    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
+  }
+#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
+  return temp;
 }
-inline const std::string& LogSubscriptionRequest::_internal_levels(int index) const {
-  return levels_.Get(index);
+inline ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* ChangeDocumentRequest::unsafe_arena_release_text_document() {
+  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.text_document)
+  
+  ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* temp = text_document_;
+  text_document_ = nullptr;
+  return temp;
 }
-inline const std::string& LogSubscriptionRequest::levels(int index) const {
-  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.LogSubscriptionRequest.levels)
-  return _internal_levels(index);
+inline ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* ChangeDocumentRequest::_internal_mutable_text_document() {
+  
+  if (text_document_ == nullptr) {
+    auto* p = CreateMaybeMessage<::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier>(GetArenaForAllocation());
+    text_document_ = p;
+  }
+  return text_document_;
 }
-inline std::string* LogSubscriptionRequest::mutable_levels(int index) {
-  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.LogSubscriptionRequest.levels)
-  return levels_.Mutable(index);
+inline ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* ChangeDocumentRequest::mutable_text_document() {
+  ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* _msg = _internal_mutable_text_document();
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.text_document)
+  return _msg;
 }
-inline void LogSubscriptionRequest::set_levels(int index, const std::string& value) {
-  levels_.Mutable(index)->assign(value);
-  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.LogSubscriptionRequest.levels)
+inline void ChangeDocumentRequest::set_allocated_text_document(::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* text_document) {
+  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
+  if (message_arena == nullptr) {
+    delete text_document_;
+  }
+  if (text_document) {
+    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
+        ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(text_document);
+    if (message_arena != submessage_arena) {
+      text_document = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
+          message_arena, text_document, submessage_arena);
+    }
+    
+  } else {
+    
+  }
+  text_document_ = text_document;
+  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.text_document)
 }
-inline void LogSubscriptionRequest::set_levels(int index, std::string&& value) {
-  levels_.Mutable(index)->assign(std::move(value));
-  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.LogSubscriptionRequest.levels)
+
+// repeated .io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.TextDocumentContentChangeEvent content_changes = 3;
+inline int ChangeDocumentRequest::_internal_content_changes_size() const {
+  return content_changes_.size();
 }
-inline void LogSubscriptionRequest::set_levels(int index, const char* value) {
-  GOOGLE_DCHECK(value != nullptr);
-  levels_.Mutable(index)->assign(value);
-  // @@protoc_insertion_point(field_set_char:io.deephaven.proto.backplane.script.grpc.LogSubscriptionRequest.levels)
+inline int ChangeDocumentRequest::content_changes_size() const {
+  return _internal_content_changes_size();
 }
-inline void LogSubscriptionRequest::set_levels(int index, const char* value, size_t size) {
-  levels_.Mutable(index)->assign(
-    reinterpret_cast<const char*>(value), size);
-  // @@protoc_insertion_point(field_set_pointer:io.deephaven.proto.backplane.script.grpc.LogSubscriptionRequest.levels)
+inline void ChangeDocumentRequest::clear_content_changes() {
+  content_changes_.Clear();
 }
-inline std::string* LogSubscriptionRequest::_internal_add_levels() {
-  return levels_.Add();
+inline ::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest_TextDocumentContentChangeEvent* ChangeDocumentRequest::mutable_content_changes(int index) {
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.content_changes)
+  return content_changes_.Mutable(index);
 }
-inline void LogSubscriptionRequest::add_levels(const std::string& value) {
-  levels_.Add()->assign(value);
-  // @@protoc_insertion_point(field_add:io.deephaven.proto.backplane.script.grpc.LogSubscriptionRequest.levels)
+inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest_TextDocumentContentChangeEvent >*
+ChangeDocumentRequest::mutable_content_changes() {
+  // @@protoc_insertion_point(field_mutable_list:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.content_changes)
+  return &content_changes_;
 }
-inline void LogSubscriptionRequest::add_levels(std::string&& value) {
-  levels_.Add(std::move(value));
-  // @@protoc_insertion_point(field_add:io.deephaven.proto.backplane.script.grpc.LogSubscriptionRequest.levels)
+inline const ::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest_TextDocumentContentChangeEvent& ChangeDocumentRequest::_internal_content_changes(int index) const {
+  return content_changes_.Get(index);
 }
-inline void LogSubscriptionRequest::add_levels(const char* value) {
-  GOOGLE_DCHECK(value != nullptr);
-  levels_.Add()->assign(value);
-  // @@protoc_insertion_point(field_add_char:io.deephaven.proto.backplane.script.grpc.LogSubscriptionRequest.levels)
+inline const ::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest_TextDocumentContentChangeEvent& ChangeDocumentRequest::content_changes(int index) const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.content_changes)
+  return _internal_content_changes(index);
 }
-inline void LogSubscriptionRequest::add_levels(const char* value, size_t size) {
-  levels_.Add()->assign(reinterpret_cast<const char*>(value), size);
-  // @@protoc_insertion_point(field_add_pointer:io.deephaven.proto.backplane.script.grpc.LogSubscriptionRequest.levels)
+inline ::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest_TextDocumentContentChangeEvent* ChangeDocumentRequest::_internal_add_content_changes() {
+  return content_changes_.Add();
 }
-inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>&
-LogSubscriptionRequest::levels() const {
-  // @@protoc_insertion_point(field_list:io.deephaven.proto.backplane.script.grpc.LogSubscriptionRequest.levels)
-  return levels_;
+inline ::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest_TextDocumentContentChangeEvent* ChangeDocumentRequest::add_content_changes() {
+  ::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest_TextDocumentContentChangeEvent* _add = _internal_add_content_changes();
+  // @@protoc_insertion_point(field_add:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.content_changes)
+  return _add;
 }
-inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>*
-LogSubscriptionRequest::mutable_levels() {
-  // @@protoc_insertion_point(field_mutable_list:io.deephaven.proto.backplane.script.grpc.LogSubscriptionRequest.levels)
-  return &levels_;
+inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest_TextDocumentContentChangeEvent >&
+ChangeDocumentRequest::content_changes() const {
+  // @@protoc_insertion_point(field_list:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.content_changes)
+  return content_changes_;
 }
 
 // -------------------------------------------------------------------
 
-// LogSubscriptionData
-
-// int64 micros = 1 [jstype = JS_STRING];
-inline void LogSubscriptionData::clear_micros() {
-  micros_ = int64_t{0};
-}
-inline int64_t LogSubscriptionData::_internal_micros() const {
-  return micros_;
-}
-inline int64_t LogSubscriptionData::micros() const {
-  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.LogSubscriptionData.micros)
-  return _internal_micros();
-}
-inline void LogSubscriptionData::_internal_set_micros(int64_t value) {
-  
-  micros_ = value;
-}
-inline void LogSubscriptionData::set_micros(int64_t value) {
-  _internal_set_micros(value);
-  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.LogSubscriptionData.micros)
-}
+// DocumentRange
 
-// string log_level = 2;
-inline void LogSubscriptionData::clear_log_level() {
-  log_level_.ClearToEmpty();
-}
-inline const std::string& LogSubscriptionData::log_level() const {
-  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.LogSubscriptionData.log_level)
-  return _internal_log_level();
-}
-template <typename ArgT0, typename... ArgT>
-inline PROTOBUF_ALWAYS_INLINE
-void LogSubscriptionData::set_log_level(ArgT0&& arg0, ArgT... args) {
- 
- log_level_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation());
-  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.LogSubscriptionData.log_level)
-}
-inline std::string* LogSubscriptionData::mutable_log_level() {
-  std::string* _s = _internal_mutable_log_level();
-  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.LogSubscriptionData.log_level)
-  return _s;
+// .io.deephaven.proto.backplane.script.grpc.Position start = 1;
+inline bool DocumentRange::_internal_has_start() const {
+  return this != internal_default_instance() && start_ != nullptr;
 }
-inline const std::string& LogSubscriptionData::_internal_log_level() const {
-  return log_level_.Get();
+inline bool DocumentRange::has_start() const {
+  return _internal_has_start();
 }
-inline void LogSubscriptionData::_internal_set_log_level(const std::string& value) {
-  
-  log_level_.Set(value, GetArenaForAllocation());
+inline void DocumentRange::clear_start() {
+  if (GetArenaForAllocation() == nullptr && start_ != nullptr) {
+    delete start_;
+  }
+  start_ = nullptr;
 }
-inline std::string* LogSubscriptionData::_internal_mutable_log_level() {
-  
-  return log_level_.Mutable(GetArenaForAllocation());
+inline const ::io::deephaven::proto::backplane::script::grpc::Position& DocumentRange::_internal_start() const {
+  const ::io::deephaven::proto::backplane::script::grpc::Position* p = start_;
+  return p != nullptr ? *p : reinterpret_cast<const ::io::deephaven::proto::backplane::script::grpc::Position&>(
+      ::io::deephaven::proto::backplane::script::grpc::_Position_default_instance_);
 }
-inline std::string* LogSubscriptionData::release_log_level() {
-  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.LogSubscriptionData.log_level)
-  return log_level_.Release();
+inline const ::io::deephaven::proto::backplane::script::grpc::Position& DocumentRange::start() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.DocumentRange.start)
+  return _internal_start();
 }
-inline void LogSubscriptionData::set_allocated_log_level(std::string* log_level) {
-  if (log_level != nullptr) {
+inline void DocumentRange::unsafe_arena_set_allocated_start(
+    ::io::deephaven::proto::backplane::script::grpc::Position* start) {
+  if (GetArenaForAllocation() == nullptr) {
+    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(start_);
+  }
+  start_ = start;
+  if (start) {
     
   } else {
     
   }
-  log_level_.SetAllocated(log_level, GetArenaForAllocation());
-#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
-  if (log_level_.IsDefault()) {
-    log_level_.Set("", GetArenaForAllocation());
-  }
-#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
-  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.LogSubscriptionData.log_level)
-}
-
-// string message = 3;
-inline void LogSubscriptionData::clear_message() {
-  message_.ClearToEmpty();
-}
-inline const std::string& LogSubscriptionData::message() const {
-  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.LogSubscriptionData.message)
-  return _internal_message();
-}
-template <typename ArgT0, typename... ArgT>
-inline PROTOBUF_ALWAYS_INLINE
-void LogSubscriptionData::set_message(ArgT0&& arg0, ArgT... args) {
- 
- message_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation());
-  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.LogSubscriptionData.message)
-}
-inline std::string* LogSubscriptionData::mutable_message() {
-  std::string* _s = _internal_mutable_message();
-  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.LogSubscriptionData.message)
-  return _s;
+  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:io.deephaven.proto.backplane.script.grpc.DocumentRange.start)
 }
-inline const std::string& LogSubscriptionData::_internal_message() const {
-  return message_.Get();
+inline ::io::deephaven::proto::backplane::script::grpc::Position* DocumentRange::release_start() {
+  
+  ::io::deephaven::proto::backplane::script::grpc::Position* temp = start_;
+  start_ = nullptr;
+#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
+  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
+  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
+  if (GetArenaForAllocation() == nullptr) { delete old; }
+#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
+  if (GetArenaForAllocation() != nullptr) {
+    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
+  }
+#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
+  return temp;
 }
-inline void LogSubscriptionData::_internal_set_message(const std::string& value) {
+inline ::io::deephaven::proto::backplane::script::grpc::Position* DocumentRange::unsafe_arena_release_start() {
+  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.DocumentRange.start)
   
-  message_.Set(value, GetArenaForAllocation());
+  ::io::deephaven::proto::backplane::script::grpc::Position* temp = start_;
+  start_ = nullptr;
+  return temp;
 }
-inline std::string* LogSubscriptionData::_internal_mutable_message() {
+inline ::io::deephaven::proto::backplane::script::grpc::Position* DocumentRange::_internal_mutable_start() {
   
-  return message_.Mutable(GetArenaForAllocation());
+  if (start_ == nullptr) {
+    auto* p = CreateMaybeMessage<::io::deephaven::proto::backplane::script::grpc::Position>(GetArenaForAllocation());
+    start_ = p;
+  }
+  return start_;
 }
-inline std::string* LogSubscriptionData::release_message() {
-  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.LogSubscriptionData.message)
-  return message_.Release();
+inline ::io::deephaven::proto::backplane::script::grpc::Position* DocumentRange::mutable_start() {
+  ::io::deephaven::proto::backplane::script::grpc::Position* _msg = _internal_mutable_start();
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.DocumentRange.start)
+  return _msg;
 }
-inline void LogSubscriptionData::set_allocated_message(std::string* message) {
-  if (message != nullptr) {
+inline void DocumentRange::set_allocated_start(::io::deephaven::proto::backplane::script::grpc::Position* start) {
+  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
+  if (message_arena == nullptr) {
+    delete start_;
+  }
+  if (start) {
+    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
+        ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(start);
+    if (message_arena != submessage_arena) {
+      start = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
+          message_arena, start, submessage_arena);
+    }
     
   } else {
     
   }
-  message_.SetAllocated(message, GetArenaForAllocation());
-#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
-  if (message_.IsDefault()) {
-    message_.Set("", GetArenaForAllocation());
-  }
-#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
-  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.LogSubscriptionData.message)
+  start_ = start;
+  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.DocumentRange.start)
 }
 
-// -------------------------------------------------------------------
-
-// ExecuteCommandRequest
-
-// .io.deephaven.proto.backplane.grpc.Ticket console_id = 1;
-inline bool ExecuteCommandRequest::_internal_has_console_id() const {
-  return this != internal_default_instance() && console_id_ != nullptr;
+// .io.deephaven.proto.backplane.script.grpc.Position end = 2;
+inline bool DocumentRange::_internal_has_end() const {
+  return this != internal_default_instance() && end_ != nullptr;
 }
-inline bool ExecuteCommandRequest::has_console_id() const {
-  return _internal_has_console_id();
+inline bool DocumentRange::has_end() const {
+  return _internal_has_end();
 }
-inline const ::io::deephaven::proto::backplane::grpc::Ticket& ExecuteCommandRequest::_internal_console_id() const {
-  const ::io::deephaven::proto::backplane::grpc::Ticket* p = console_id_;
-  return p != nullptr ? *p : reinterpret_cast<const ::io::deephaven::proto::backplane::grpc::Ticket&>(
-      ::io::deephaven::proto::backplane::grpc::_Ticket_default_instance_);
+inline void DocumentRange::clear_end() {
+  if (GetArenaForAllocation() == nullptr && end_ != nullptr) {
+    delete end_;
+  }
+  end_ = nullptr;
 }
-inline const ::io::deephaven::proto::backplane::grpc::Ticket& ExecuteCommandRequest::console_id() const {
-  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.ExecuteCommandRequest.console_id)
-  return _internal_console_id();
+inline const ::io::deephaven::proto::backplane::script::grpc::Position& DocumentRange::_internal_end() const {
+  const ::io::deephaven::proto::backplane::script::grpc::Position* p = end_;
+  return p != nullptr ? *p : reinterpret_cast<const ::io::deephaven::proto::backplane::script::grpc::Position&>(
+      ::io::deephaven::proto::backplane::script::grpc::_Position_default_instance_);
 }
-inline void ExecuteCommandRequest::unsafe_arena_set_allocated_console_id(
-    ::io::deephaven::proto::backplane::grpc::Ticket* console_id) {
+inline const ::io::deephaven::proto::backplane::script::grpc::Position& DocumentRange::end() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.DocumentRange.end)
+  return _internal_end();
+}
+inline void DocumentRange::unsafe_arena_set_allocated_end(
+    ::io::deephaven::proto::backplane::script::grpc::Position* end) {
   if (GetArenaForAllocation() == nullptr) {
-    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(console_id_);
+    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(end_);
   }
-  console_id_ = console_id;
-  if (console_id) {
+  end_ = end;
+  if (end) {
     
   } else {
     
   }
-  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:io.deephaven.proto.backplane.script.grpc.ExecuteCommandRequest.console_id)
+  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:io.deephaven.proto.backplane.script.grpc.DocumentRange.end)
 }
-inline ::io::deephaven::proto::backplane::grpc::Ticket* ExecuteCommandRequest::release_console_id() {
+inline ::io::deephaven::proto::backplane::script::grpc::Position* DocumentRange::release_end() {
   
-  ::io::deephaven::proto::backplane::grpc::Ticket* temp = console_id_;
-  console_id_ = nullptr;
+  ::io::deephaven::proto::backplane::script::grpc::Position* temp = end_;
+  end_ = nullptr;
 #ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
   auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
   temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
@@ -10308,257 +16297,289 @@ inline ::io::deephaven::proto::backplane::grpc::Ticket* ExecuteCommandRequest::r
 #endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
   return temp;
 }
-inline ::io::deephaven::proto::backplane::grpc::Ticket* ExecuteCommandRequest::unsafe_arena_release_console_id() {
-  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.ExecuteCommandRequest.console_id)
+inline ::io::deephaven::proto::backplane::script::grpc::Position* DocumentRange::unsafe_arena_release_end() {
+  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.DocumentRange.end)
   
-  ::io::deephaven::proto::backplane::grpc::Ticket* temp = console_id_;
-  console_id_ = nullptr;
+  ::io::deephaven::proto::backplane::script::grpc::Position* temp = end_;
+  end_ = nullptr;
   return temp;
 }
-inline ::io::deephaven::proto::backplane::grpc::Ticket* ExecuteCommandRequest::_internal_mutable_console_id() {
+inline ::io::deephaven::proto::backplane::script::grpc::Position* DocumentRange::_internal_mutable_end() {
   
-  if (console_id_ == nullptr) {
-    auto* p = CreateMaybeMessage<::io::deephaven::proto::backplane::grpc::Ticket>(GetArenaForAllocation());
-    console_id_ = p;
+  if (end_ == nullptr) {
+    auto* p = CreateMaybeMessage<::io::deephaven::proto::backplane::script::grpc::Position>(GetArenaForAllocation());
+    end_ = p;
   }
-  return console_id_;
+  return end_;
 }
-inline ::io::deephaven::proto::backplane::grpc::Ticket* ExecuteCommandRequest::mutable_console_id() {
-  ::io::deephaven::proto::backplane::grpc::Ticket* _msg = _internal_mutable_console_id();
-  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.ExecuteCommandRequest.console_id)
+inline ::io::deephaven::proto::backplane::script::grpc::Position* DocumentRange::mutable_end() {
+  ::io::deephaven::proto::backplane::script::grpc::Position* _msg = _internal_mutable_end();
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.DocumentRange.end)
   return _msg;
 }
-inline void ExecuteCommandRequest::set_allocated_console_id(::io::deephaven::proto::backplane::grpc::Ticket* console_id) {
+inline void DocumentRange::set_allocated_end(::io::deephaven::proto::backplane::script::grpc::Position* end) {
   ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
   if (message_arena == nullptr) {
-    delete reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::MessageLite*>(console_id_);
+    delete end_;
   }
-  if (console_id) {
+  if (end) {
     ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
-        ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(
-                reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(console_id));
+        ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(end);
     if (message_arena != submessage_arena) {
-      console_id = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
-          message_arena, console_id, submessage_arena);
+      end = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
+          message_arena, end, submessage_arena);
     }
     
   } else {
     
   }
-  console_id_ = console_id;
-  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.ExecuteCommandRequest.console_id)
+  end_ = end;
+  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.DocumentRange.end)
 }
 
-// string code = 3;
-inline void ExecuteCommandRequest::clear_code() {
-  code_.ClearToEmpty();
+// -------------------------------------------------------------------
+
+// VersionedTextDocumentIdentifier
+
+// string uri = 1;
+inline void VersionedTextDocumentIdentifier::clear_uri() {
+  uri_.ClearToEmpty();
 }
-inline const std::string& ExecuteCommandRequest::code() const {
-  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.ExecuteCommandRequest.code)
-  return _internal_code();
+inline const std::string& VersionedTextDocumentIdentifier::uri() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier.uri)
+  return _internal_uri();
 }
 template <typename ArgT0, typename... ArgT>
 inline PROTOBUF_ALWAYS_INLINE
-void ExecuteCommandRequest::set_code(ArgT0&& arg0, ArgT... args) {
+void VersionedTextDocumentIdentifier::set_uri(ArgT0&& arg0, ArgT... args) {
  
- code_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation());
-  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.ExecuteCommandRequest.code)
+ uri_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation());
+  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier.uri)
 }
-inline std::string* ExecuteCommandRequest::mutable_code() {
-  std::string* _s = _internal_mutable_code();
-  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.ExecuteCommandRequest.code)
+inline std::string* VersionedTextDocumentIdentifier::mutable_uri() {
+  std::string* _s = _internal_mutable_uri();
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier.uri)
   return _s;
 }
-inline const std::string& ExecuteCommandRequest::_internal_code() const {
-  return code_.Get();
+inline const std::string& VersionedTextDocumentIdentifier::_internal_uri() const {
+  return uri_.Get();
 }
-inline void ExecuteCommandRequest::_internal_set_code(const std::string& value) {
+inline void VersionedTextDocumentIdentifier::_internal_set_uri(const std::string& value) {
   
-  code_.Set(value, GetArenaForAllocation());
+  uri_.Set(value, GetArenaForAllocation());
+}
+inline std::string* VersionedTextDocumentIdentifier::_internal_mutable_uri() {
+  
+  return uri_.Mutable(GetArenaForAllocation());
+}
+inline std::string* VersionedTextDocumentIdentifier::release_uri() {
+  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier.uri)
+  return uri_.Release();
+}
+inline void VersionedTextDocumentIdentifier::set_allocated_uri(std::string* uri) {
+  if (uri != nullptr) {
+    
+  } else {
+    
+  }
+  uri_.SetAllocated(uri, GetArenaForAllocation());
+#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  if (uri_.IsDefault()) {
+    uri_.Set("", GetArenaForAllocation());
+  }
+#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier.uri)
+}
+
+// int32 version = 2;
+inline void VersionedTextDocumentIdentifier::clear_version() {
+  version_ = 0;
+}
+inline int32_t VersionedTextDocumentIdentifier::_internal_version() const {
+  return version_;
+}
+inline int32_t VersionedTextDocumentIdentifier::version() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier.version)
+  return _internal_version();
+}
+inline void VersionedTextDocumentIdentifier::_internal_set_version(int32_t value) {
+  
+  version_ = value;
+}
+inline void VersionedTextDocumentIdentifier::set_version(int32_t value) {
+  _internal_set_version(value);
+  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier.version)
+}
+
+// -------------------------------------------------------------------
+
+// Position
+
+// int32 line = 1;
+inline void Position::clear_line() {
+  line_ = 0;
+}
+inline int32_t Position::_internal_line() const {
+  return line_;
+}
+inline int32_t Position::line() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.Position.line)
+  return _internal_line();
+}
+inline void Position::_internal_set_line(int32_t value) {
+  
+  line_ = value;
+}
+inline void Position::set_line(int32_t value) {
+  _internal_set_line(value);
+  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.Position.line)
+}
+
+// int32 character = 2;
+inline void Position::clear_character() {
+  character_ = 0;
+}
+inline int32_t Position::_internal_character() const {
+  return character_;
+}
+inline int32_t Position::character() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.Position.character)
+  return _internal_character();
 }
-inline std::string* ExecuteCommandRequest::_internal_mutable_code() {
+inline void Position::_internal_set_character(int32_t value) {
   
-  return code_.Mutable(GetArenaForAllocation());
-}
-inline std::string* ExecuteCommandRequest::release_code() {
-  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.ExecuteCommandRequest.code)
-  return code_.Release();
+  character_ = value;
 }
-inline void ExecuteCommandRequest::set_allocated_code(std::string* code) {
-  if (code != nullptr) {
-    
-  } else {
-    
-  }
-  code_.SetAllocated(code, GetArenaForAllocation());
-#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
-  if (code_.IsDefault()) {
-    code_.Set("", GetArenaForAllocation());
-  }
-#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
-  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.ExecuteCommandRequest.code)
+inline void Position::set_character(int32_t value) {
+  _internal_set_character(value);
+  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.Position.character)
 }
 
 // -------------------------------------------------------------------
 
-// ExecuteCommandResponse
+// MarkupContent
 
-// string error_message = 1;
-inline void ExecuteCommandResponse::clear_error_message() {
-  error_message_.ClearToEmpty();
+// string kind = 1;
+inline void MarkupContent::clear_kind() {
+  kind_.ClearToEmpty();
 }
-inline const std::string& ExecuteCommandResponse::error_message() const {
-  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.ExecuteCommandResponse.error_message)
-  return _internal_error_message();
+inline const std::string& MarkupContent::kind() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.MarkupContent.kind)
+  return _internal_kind();
 }
 template <typename ArgT0, typename... ArgT>
 inline PROTOBUF_ALWAYS_INLINE
-void ExecuteCommandResponse::set_error_message(ArgT0&& arg0, ArgT... args) {
+void MarkupContent::set_kind(ArgT0&& arg0, ArgT... args) {
  
- error_message_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation());
-  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.ExecuteCommandResponse.error_message)
+ kind_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation());
+  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.MarkupContent.kind)
 }
-inline std::string* ExecuteCommandResponse::mutable_error_message() {
-  std::string* _s = _internal_mutable_error_message();
-  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.ExecuteCommandResponse.error_message)
+inline std::string* MarkupContent::mutable_kind() {
+  std::string* _s = _internal_mutable_kind();
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.MarkupContent.kind)
   return _s;
 }
-inline const std::string& ExecuteCommandResponse::_internal_error_message() const {
-  return error_message_.Get();
+inline const std::string& MarkupContent::_internal_kind() const {
+  return kind_.Get();
 }
-inline void ExecuteCommandResponse::_internal_set_error_message(const std::string& value) {
+inline void MarkupContent::_internal_set_kind(const std::string& value) {
   
-  error_message_.Set(value, GetArenaForAllocation());
+  kind_.Set(value, GetArenaForAllocation());
 }
-inline std::string* ExecuteCommandResponse::_internal_mutable_error_message() {
+inline std::string* MarkupContent::_internal_mutable_kind() {
   
-  return error_message_.Mutable(GetArenaForAllocation());
+  return kind_.Mutable(GetArenaForAllocation());
 }
-inline std::string* ExecuteCommandResponse::release_error_message() {
-  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.ExecuteCommandResponse.error_message)
-  return error_message_.Release();
+inline std::string* MarkupContent::release_kind() {
+  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.MarkupContent.kind)
+  return kind_.Release();
 }
-inline void ExecuteCommandResponse::set_allocated_error_message(std::string* error_message) {
-  if (error_message != nullptr) {
+inline void MarkupContent::set_allocated_kind(std::string* kind) {
+  if (kind != nullptr) {
     
   } else {
     
   }
-  error_message_.SetAllocated(error_message, GetArenaForAllocation());
+  kind_.SetAllocated(kind, GetArenaForAllocation());
 #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
-  if (error_message_.IsDefault()) {
-    error_message_.Set("", GetArenaForAllocation());
+  if (kind_.IsDefault()) {
+    kind_.Set("", GetArenaForAllocation());
   }
 #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
-  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.ExecuteCommandResponse.error_message)
+  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.MarkupContent.kind)
 }
 
-// .io.deephaven.proto.backplane.grpc.FieldsChangeUpdate changes = 2;
-inline bool ExecuteCommandResponse::_internal_has_changes() const {
-  return this != internal_default_instance() && changes_ != nullptr;
-}
-inline bool ExecuteCommandResponse::has_changes() const {
-  return _internal_has_changes();
+// string value = 2;
+inline void MarkupContent::clear_value() {
+  value_.ClearToEmpty();
 }
-inline const ::io::deephaven::proto::backplane::grpc::FieldsChangeUpdate& ExecuteCommandResponse::_internal_changes() const {
-  const ::io::deephaven::proto::backplane::grpc::FieldsChangeUpdate* p = changes_;
-  return p != nullptr ? *p : reinterpret_cast<const ::io::deephaven::proto::backplane::grpc::FieldsChangeUpdate&>(
-      ::io::deephaven::proto::backplane::grpc::_FieldsChangeUpdate_default_instance_);
+inline const std::string& MarkupContent::value() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.MarkupContent.value)
+  return _internal_value();
 }
-inline const ::io::deephaven::proto::backplane::grpc::FieldsChangeUpdate& ExecuteCommandResponse::changes() const {
-  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.ExecuteCommandResponse.changes)
-  return _internal_changes();
+template <typename ArgT0, typename... ArgT>
+inline PROTOBUF_ALWAYS_INLINE
+void MarkupContent::set_value(ArgT0&& arg0, ArgT... args) {
+ 
+ value_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation());
+  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.MarkupContent.value)
 }
-inline void ExecuteCommandResponse::unsafe_arena_set_allocated_changes(
-    ::io::deephaven::proto::backplane::grpc::FieldsChangeUpdate* changes) {
-  if (GetArenaForAllocation() == nullptr) {
-    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(changes_);
-  }
-  changes_ = changes;
-  if (changes) {
-    
-  } else {
-    
-  }
-  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:io.deephaven.proto.backplane.script.grpc.ExecuteCommandResponse.changes)
+inline std::string* MarkupContent::mutable_value() {
+  std::string* _s = _internal_mutable_value();
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.MarkupContent.value)
+  return _s;
 }
-inline ::io::deephaven::proto::backplane::grpc::FieldsChangeUpdate* ExecuteCommandResponse::release_changes() {
-  
-  ::io::deephaven::proto::backplane::grpc::FieldsChangeUpdate* temp = changes_;
-  changes_ = nullptr;
-#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
-  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
-  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
-  if (GetArenaForAllocation() == nullptr) { delete old; }
-#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
-  if (GetArenaForAllocation() != nullptr) {
-    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
-  }
-#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
-  return temp;
+inline const std::string& MarkupContent::_internal_value() const {
+  return value_.Get();
 }
-inline ::io::deephaven::proto::backplane::grpc::FieldsChangeUpdate* ExecuteCommandResponse::unsafe_arena_release_changes() {
-  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.ExecuteCommandResponse.changes)
+inline void MarkupContent::_internal_set_value(const std::string& value) {
   
-  ::io::deephaven::proto::backplane::grpc::FieldsChangeUpdate* temp = changes_;
-  changes_ = nullptr;
-  return temp;
+  value_.Set(value, GetArenaForAllocation());
 }
-inline ::io::deephaven::proto::backplane::grpc::FieldsChangeUpdate* ExecuteCommandResponse::_internal_mutable_changes() {
+inline std::string* MarkupContent::_internal_mutable_value() {
   
-  if (changes_ == nullptr) {
-    auto* p = CreateMaybeMessage<::io::deephaven::proto::backplane::grpc::FieldsChangeUpdate>(GetArenaForAllocation());
-    changes_ = p;
-  }
-  return changes_;
+  return value_.Mutable(GetArenaForAllocation());
 }
-inline ::io::deephaven::proto::backplane::grpc::FieldsChangeUpdate* ExecuteCommandResponse::mutable_changes() {
-  ::io::deephaven::proto::backplane::grpc::FieldsChangeUpdate* _msg = _internal_mutable_changes();
-  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.ExecuteCommandResponse.changes)
-  return _msg;
+inline std::string* MarkupContent::release_value() {
+  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.MarkupContent.value)
+  return value_.Release();
 }
-inline void ExecuteCommandResponse::set_allocated_changes(::io::deephaven::proto::backplane::grpc::FieldsChangeUpdate* changes) {
-  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
-  if (message_arena == nullptr) {
-    delete reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::MessageLite*>(changes_);
-  }
-  if (changes) {
-    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
-        ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(
-                reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(changes));
-    if (message_arena != submessage_arena) {
-      changes = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
-          message_arena, changes, submessage_arena);
-    }
+inline void MarkupContent::set_allocated_value(std::string* value) {
+  if (value != nullptr) {
     
   } else {
     
   }
-  changes_ = changes;
-  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.ExecuteCommandResponse.changes)
+  value_.SetAllocated(value, GetArenaForAllocation());
+#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  if (value_.IsDefault()) {
+    value_.Set("", GetArenaForAllocation());
+  }
+#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.MarkupContent.value)
 }
 
 // -------------------------------------------------------------------
 
-// BindTableToVariableRequest
+// GetCompletionItemsRequest
 
-// .io.deephaven.proto.backplane.grpc.Ticket console_id = 1;
-inline bool BindTableToVariableRequest::_internal_has_console_id() const {
+// .io.deephaven.proto.backplane.grpc.Ticket console_id = 1 [deprecated = true];
+inline bool GetCompletionItemsRequest::_internal_has_console_id() const {
   return this != internal_default_instance() && console_id_ != nullptr;
 }
-inline bool BindTableToVariableRequest::has_console_id() const {
+inline bool GetCompletionItemsRequest::has_console_id() const {
   return _internal_has_console_id();
 }
-inline const ::io::deephaven::proto::backplane::grpc::Ticket& BindTableToVariableRequest::_internal_console_id() const {
+inline const ::io::deephaven::proto::backplane::grpc::Ticket& GetCompletionItemsRequest::_internal_console_id() const {
   const ::io::deephaven::proto::backplane::grpc::Ticket* p = console_id_;
   return p != nullptr ? *p : reinterpret_cast<const ::io::deephaven::proto::backplane::grpc::Ticket&>(
       ::io::deephaven::proto::backplane::grpc::_Ticket_default_instance_);
 }
-inline const ::io::deephaven::proto::backplane::grpc::Ticket& BindTableToVariableRequest::console_id() const {
-  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.BindTableToVariableRequest.console_id)
+inline const ::io::deephaven::proto::backplane::grpc::Ticket& GetCompletionItemsRequest::console_id() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest.console_id)
   return _internal_console_id();
 }
-inline void BindTableToVariableRequest::unsafe_arena_set_allocated_console_id(
+inline void GetCompletionItemsRequest::unsafe_arena_set_allocated_console_id(
     ::io::deephaven::proto::backplane::grpc::Ticket* console_id) {
   if (GetArenaForAllocation() == nullptr) {
     delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(console_id_);
@@ -10569,9 +16590,9 @@ inline void BindTableToVariableRequest::unsafe_arena_set_allocated_console_id(
   } else {
     
   }
-  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:io.deephaven.proto.backplane.script.grpc.BindTableToVariableRequest.console_id)
+  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest.console_id)
 }
-inline ::io::deephaven::proto::backplane::grpc::Ticket* BindTableToVariableRequest::release_console_id() {
+inline ::io::deephaven::proto::backplane::grpc::Ticket* GetCompletionItemsRequest::release_console_id() {
   
   ::io::deephaven::proto::backplane::grpc::Ticket* temp = console_id_;
   console_id_ = nullptr;
@@ -10586,14 +16607,14 @@ inline ::io::deephaven::proto::backplane::grpc::Ticket* BindTableToVariableReque
 #endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
   return temp;
 }
-inline ::io::deephaven::proto::backplane::grpc::Ticket* BindTableToVariableRequest::unsafe_arena_release_console_id() {
-  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.BindTableToVariableRequest.console_id)
+inline ::io::deephaven::proto::backplane::grpc::Ticket* GetCompletionItemsRequest::unsafe_arena_release_console_id() {
+  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest.console_id)
   
   ::io::deephaven::proto::backplane::grpc::Ticket* temp = console_id_;
   console_id_ = nullptr;
   return temp;
 }
-inline ::io::deephaven::proto::backplane::grpc::Ticket* BindTableToVariableRequest::_internal_mutable_console_id() {
+inline ::io::deephaven::proto::backplane::grpc::Ticket* GetCompletionItemsRequest::_internal_mutable_console_id() {
   
   if (console_id_ == nullptr) {
     auto* p = CreateMaybeMessage<::io::deephaven::proto::backplane::grpc::Ticket>(GetArenaForAllocation());
@@ -10601,12 +16622,12 @@ inline ::io::deephaven::proto::backplane::grpc::Ticket* BindTableToVariableReque
   }
   return console_id_;
 }
-inline ::io::deephaven::proto::backplane::grpc::Ticket* BindTableToVariableRequest::mutable_console_id() {
+inline ::io::deephaven::proto::backplane::grpc::Ticket* GetCompletionItemsRequest::mutable_console_id() {
   ::io::deephaven::proto::backplane::grpc::Ticket* _msg = _internal_mutable_console_id();
-  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.BindTableToVariableRequest.console_id)
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest.console_id)
   return _msg;
 }
-inline void BindTableToVariableRequest::set_allocated_console_id(::io::deephaven::proto::backplane::grpc::Ticket* console_id) {
+inline void GetCompletionItemsRequest::set_allocated_console_id(::io::deephaven::proto::backplane::grpc::Ticket* console_id) {
   ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
   if (message_arena == nullptr) {
     delete reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::MessageLite*>(console_id_);
@@ -10624,92 +16645,48 @@ inline void BindTableToVariableRequest::set_allocated_console_id(::io::deephaven
     
   }
   console_id_ = console_id;
-  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.BindTableToVariableRequest.console_id)
+  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest.console_id)
 }
 
-// string variable_name = 3;
-inline void BindTableToVariableRequest::clear_variable_name() {
-  variable_name_.ClearToEmpty();
-}
-inline const std::string& BindTableToVariableRequest::variable_name() const {
-  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.BindTableToVariableRequest.variable_name)
-  return _internal_variable_name();
-}
-template <typename ArgT0, typename... ArgT>
-inline PROTOBUF_ALWAYS_INLINE
-void BindTableToVariableRequest::set_variable_name(ArgT0&& arg0, ArgT... args) {
- 
- variable_name_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation());
-  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.BindTableToVariableRequest.variable_name)
-}
-inline std::string* BindTableToVariableRequest::mutable_variable_name() {
-  std::string* _s = _internal_mutable_variable_name();
-  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.BindTableToVariableRequest.variable_name)
-  return _s;
-}
-inline const std::string& BindTableToVariableRequest::_internal_variable_name() const {
-  return variable_name_.Get();
-}
-inline void BindTableToVariableRequest::_internal_set_variable_name(const std::string& value) {
-  
-  variable_name_.Set(value, GetArenaForAllocation());
-}
-inline std::string* BindTableToVariableRequest::_internal_mutable_variable_name() {
-  
-  return variable_name_.Mutable(GetArenaForAllocation());
+// .io.deephaven.proto.backplane.script.grpc.CompletionContext context = 2;
+inline bool GetCompletionItemsRequest::_internal_has_context() const {
+  return this != internal_default_instance() && context_ != nullptr;
 }
-inline std::string* BindTableToVariableRequest::release_variable_name() {
-  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.BindTableToVariableRequest.variable_name)
-  return variable_name_.Release();
+inline bool GetCompletionItemsRequest::has_context() const {
+  return _internal_has_context();
 }
-inline void BindTableToVariableRequest::set_allocated_variable_name(std::string* variable_name) {
-  if (variable_name != nullptr) {
-    
-  } else {
-    
-  }
-  variable_name_.SetAllocated(variable_name, GetArenaForAllocation());
-#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
-  if (variable_name_.IsDefault()) {
-    variable_name_.Set("", GetArenaForAllocation());
+inline void GetCompletionItemsRequest::clear_context() {
+  if (GetArenaForAllocation() == nullptr && context_ != nullptr) {
+    delete context_;
   }
-#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
-  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.BindTableToVariableRequest.variable_name)
-}
-
-// .io.deephaven.proto.backplane.grpc.Ticket table_id = 4;
-inline bool BindTableToVariableRequest::_internal_has_table_id() const {
-  return this != internal_default_instance() && table_id_ != nullptr;
-}
-inline bool BindTableToVariableRequest::has_table_id() const {
-  return _internal_has_table_id();
+  context_ = nullptr;
 }
-inline const ::io::deephaven::proto::backplane::grpc::Ticket& BindTableToVariableRequest::_internal_table_id() const {
-  const ::io::deephaven::proto::backplane::grpc::Ticket* p = table_id_;
-  return p != nullptr ? *p : reinterpret_cast<const ::io::deephaven::proto::backplane::grpc::Ticket&>(
-      ::io::deephaven::proto::backplane::grpc::_Ticket_default_instance_);
+inline const ::io::deephaven::proto::backplane::script::grpc::CompletionContext& GetCompletionItemsRequest::_internal_context() const {
+  const ::io::deephaven::proto::backplane::script::grpc::CompletionContext* p = context_;
+  return p != nullptr ? *p : reinterpret_cast<const ::io::deephaven::proto::backplane::script::grpc::CompletionContext&>(
+      ::io::deephaven::proto::backplane::script::grpc::_CompletionContext_default_instance_);
 }
-inline const ::io::deephaven::proto::backplane::grpc::Ticket& BindTableToVariableRequest::table_id() const {
-  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.BindTableToVariableRequest.table_id)
-  return _internal_table_id();
+inline const ::io::deephaven::proto::backplane::script::grpc::CompletionContext& GetCompletionItemsRequest::context() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest.context)
+  return _internal_context();
 }
-inline void BindTableToVariableRequest::unsafe_arena_set_allocated_table_id(
-    ::io::deephaven::proto::backplane::grpc::Ticket* table_id) {
+inline void GetCompletionItemsRequest::unsafe_arena_set_allocated_context(
+    ::io::deephaven::proto::backplane::script::grpc::CompletionContext* context) {
   if (GetArenaForAllocation() == nullptr) {
-    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(table_id_);
+    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(context_);
   }
-  table_id_ = table_id;
-  if (table_id) {
+  context_ = context;
+  if (context) {
     
   } else {
     
   }
-  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:io.deephaven.proto.backplane.script.grpc.BindTableToVariableRequest.table_id)
+  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest.context)
 }
-inline ::io::deephaven::proto::backplane::grpc::Ticket* BindTableToVariableRequest::release_table_id() {
+inline ::io::deephaven::proto::backplane::script::grpc::CompletionContext* GetCompletionItemsRequest::release_context() {
   
-  ::io::deephaven::proto::backplane::grpc::Ticket* temp = table_id_;
-  table_id_ = nullptr;
+  ::io::deephaven::proto::backplane::script::grpc::CompletionContext* temp = context_;
+  context_ = nullptr;
 #ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
   auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
   temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
@@ -10721,88 +16698,85 @@ inline ::io::deephaven::proto::backplane::grpc::Ticket* BindTableToVariableReque
 #endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
   return temp;
 }
-inline ::io::deephaven::proto::backplane::grpc::Ticket* BindTableToVariableRequest::unsafe_arena_release_table_id() {
-  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.BindTableToVariableRequest.table_id)
+inline ::io::deephaven::proto::backplane::script::grpc::CompletionContext* GetCompletionItemsRequest::unsafe_arena_release_context() {
+  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest.context)
   
-  ::io::deephaven::proto::backplane::grpc::Ticket* temp = table_id_;
-  table_id_ = nullptr;
+  ::io::deephaven::proto::backplane::script::grpc::CompletionContext* temp = context_;
+  context_ = nullptr;
   return temp;
 }
-inline ::io::deephaven::proto::backplane::grpc::Ticket* BindTableToVariableRequest::_internal_mutable_table_id() {
+inline ::io::deephaven::proto::backplane::script::grpc::CompletionContext* GetCompletionItemsRequest::_internal_mutable_context() {
   
-  if (table_id_ == nullptr) {
-    auto* p = CreateMaybeMessage<::io::deephaven::proto::backplane::grpc::Ticket>(GetArenaForAllocation());
-    table_id_ = p;
+  if (context_ == nullptr) {
+    auto* p = CreateMaybeMessage<::io::deephaven::proto::backplane::script::grpc::CompletionContext>(GetArenaForAllocation());
+    context_ = p;
   }
-  return table_id_;
+  return context_;
 }
-inline ::io::deephaven::proto::backplane::grpc::Ticket* BindTableToVariableRequest::mutable_table_id() {
-  ::io::deephaven::proto::backplane::grpc::Ticket* _msg = _internal_mutable_table_id();
-  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.BindTableToVariableRequest.table_id)
+inline ::io::deephaven::proto::backplane::script::grpc::CompletionContext* GetCompletionItemsRequest::mutable_context() {
+  ::io::deephaven::proto::backplane::script::grpc::CompletionContext* _msg = _internal_mutable_context();
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest.context)
   return _msg;
 }
-inline void BindTableToVariableRequest::set_allocated_table_id(::io::deephaven::proto::backplane::grpc::Ticket* table_id) {
+inline void GetCompletionItemsRequest::set_allocated_context(::io::deephaven::proto::backplane::script::grpc::CompletionContext* context) {
   ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
   if (message_arena == nullptr) {
-    delete reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::MessageLite*>(table_id_);
+    delete context_;
   }
-  if (table_id) {
+  if (context) {
     ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
-        ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(
-                reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(table_id));
+        ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(context);
     if (message_arena != submessage_arena) {
-      table_id = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
-          message_arena, table_id, submessage_arena);
+      context = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
+          message_arena, context, submessage_arena);
     }
     
   } else {
     
   }
-  table_id_ = table_id;
-  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.BindTableToVariableRequest.table_id)
+  context_ = context;
+  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest.context)
 }
 
-// -------------------------------------------------------------------
-
-// BindTableToVariableResponse
-
-// -------------------------------------------------------------------
-
-// CancelCommandRequest
-
-// .io.deephaven.proto.backplane.grpc.Ticket console_id = 1;
-inline bool CancelCommandRequest::_internal_has_console_id() const {
-  return this != internal_default_instance() && console_id_ != nullptr;
+// .io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier text_document = 3;
+inline bool GetCompletionItemsRequest::_internal_has_text_document() const {
+  return this != internal_default_instance() && text_document_ != nullptr;
 }
-inline bool CancelCommandRequest::has_console_id() const {
-  return _internal_has_console_id();
+inline bool GetCompletionItemsRequest::has_text_document() const {
+  return _internal_has_text_document();
 }
-inline const ::io::deephaven::proto::backplane::grpc::Ticket& CancelCommandRequest::_internal_console_id() const {
-  const ::io::deephaven::proto::backplane::grpc::Ticket* p = console_id_;
-  return p != nullptr ? *p : reinterpret_cast<const ::io::deephaven::proto::backplane::grpc::Ticket&>(
-      ::io::deephaven::proto::backplane::grpc::_Ticket_default_instance_);
+inline void GetCompletionItemsRequest::clear_text_document() {
+  if (GetArenaForAllocation() == nullptr && text_document_ != nullptr) {
+    delete text_document_;
+  }
+  text_document_ = nullptr;
 }
-inline const ::io::deephaven::proto::backplane::grpc::Ticket& CancelCommandRequest::console_id() const {
-  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.CancelCommandRequest.console_id)
-  return _internal_console_id();
+inline const ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier& GetCompletionItemsRequest::_internal_text_document() const {
+  const ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* p = text_document_;
+  return p != nullptr ? *p : reinterpret_cast<const ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier&>(
+      ::io::deephaven::proto::backplane::script::grpc::_VersionedTextDocumentIdentifier_default_instance_);
 }
-inline void CancelCommandRequest::unsafe_arena_set_allocated_console_id(
-    ::io::deephaven::proto::backplane::grpc::Ticket* console_id) {
+inline const ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier& GetCompletionItemsRequest::text_document() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest.text_document)
+  return _internal_text_document();
+}
+inline void GetCompletionItemsRequest::unsafe_arena_set_allocated_text_document(
+    ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* text_document) {
   if (GetArenaForAllocation() == nullptr) {
-    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(console_id_);
+    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(text_document_);
   }
-  console_id_ = console_id;
-  if (console_id) {
+  text_document_ = text_document;
+  if (text_document) {
     
   } else {
     
   }
-  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:io.deephaven.proto.backplane.script.grpc.CancelCommandRequest.console_id)
+  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest.text_document)
 }
-inline ::io::deephaven::proto::backplane::grpc::Ticket* CancelCommandRequest::release_console_id() {
+inline ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* GetCompletionItemsRequest::release_text_document() {
   
-  ::io::deephaven::proto::backplane::grpc::Ticket* temp = console_id_;
-  console_id_ = nullptr;
+  ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* temp = text_document_;
+  text_document_ = nullptr;
 #ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
   auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
   temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
@@ -10814,80 +16788,85 @@ inline ::io::deephaven::proto::backplane::grpc::Ticket* CancelCommandRequest::re
 #endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
   return temp;
 }
-inline ::io::deephaven::proto::backplane::grpc::Ticket* CancelCommandRequest::unsafe_arena_release_console_id() {
-  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.CancelCommandRequest.console_id)
+inline ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* GetCompletionItemsRequest::unsafe_arena_release_text_document() {
+  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest.text_document)
   
-  ::io::deephaven::proto::backplane::grpc::Ticket* temp = console_id_;
-  console_id_ = nullptr;
+  ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* temp = text_document_;
+  text_document_ = nullptr;
   return temp;
 }
-inline ::io::deephaven::proto::backplane::grpc::Ticket* CancelCommandRequest::_internal_mutable_console_id() {
+inline ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* GetCompletionItemsRequest::_internal_mutable_text_document() {
   
-  if (console_id_ == nullptr) {
-    auto* p = CreateMaybeMessage<::io::deephaven::proto::backplane::grpc::Ticket>(GetArenaForAllocation());
-    console_id_ = p;
+  if (text_document_ == nullptr) {
+    auto* p = CreateMaybeMessage<::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier>(GetArenaForAllocation());
+    text_document_ = p;
   }
-  return console_id_;
+  return text_document_;
 }
-inline ::io::deephaven::proto::backplane::grpc::Ticket* CancelCommandRequest::mutable_console_id() {
-  ::io::deephaven::proto::backplane::grpc::Ticket* _msg = _internal_mutable_console_id();
-  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.CancelCommandRequest.console_id)
+inline ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* GetCompletionItemsRequest::mutable_text_document() {
+  ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* _msg = _internal_mutable_text_document();
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest.text_document)
   return _msg;
 }
-inline void CancelCommandRequest::set_allocated_console_id(::io::deephaven::proto::backplane::grpc::Ticket* console_id) {
+inline void GetCompletionItemsRequest::set_allocated_text_document(::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* text_document) {
   ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
   if (message_arena == nullptr) {
-    delete reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::MessageLite*>(console_id_);
+    delete text_document_;
   }
-  if (console_id) {
+  if (text_document) {
     ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
-        ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(
-                reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(console_id));
+        ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(text_document);
     if (message_arena != submessage_arena) {
-      console_id = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
-          message_arena, console_id, submessage_arena);
+      text_document = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
+          message_arena, text_document, submessage_arena);
     }
     
   } else {
     
   }
-  console_id_ = console_id;
-  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.CancelCommandRequest.console_id)
+  text_document_ = text_document;
+  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest.text_document)
 }
 
-// .io.deephaven.proto.backplane.grpc.Ticket command_id = 2;
-inline bool CancelCommandRequest::_internal_has_command_id() const {
-  return this != internal_default_instance() && command_id_ != nullptr;
+// .io.deephaven.proto.backplane.script.grpc.Position position = 4;
+inline bool GetCompletionItemsRequest::_internal_has_position() const {
+  return this != internal_default_instance() && position_ != nullptr;
 }
-inline bool CancelCommandRequest::has_command_id() const {
-  return _internal_has_command_id();
+inline bool GetCompletionItemsRequest::has_position() const {
+  return _internal_has_position();
 }
-inline const ::io::deephaven::proto::backplane::grpc::Ticket& CancelCommandRequest::_internal_command_id() const {
-  const ::io::deephaven::proto::backplane::grpc::Ticket* p = command_id_;
-  return p != nullptr ? *p : reinterpret_cast<const ::io::deephaven::proto::backplane::grpc::Ticket&>(
-      ::io::deephaven::proto::backplane::grpc::_Ticket_default_instance_);
+inline void GetCompletionItemsRequest::clear_position() {
+  if (GetArenaForAllocation() == nullptr && position_ != nullptr) {
+    delete position_;
+  }
+  position_ = nullptr;
 }
-inline const ::io::deephaven::proto::backplane::grpc::Ticket& CancelCommandRequest::command_id() const {
-  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.CancelCommandRequest.command_id)
-  return _internal_command_id();
+inline const ::io::deephaven::proto::backplane::script::grpc::Position& GetCompletionItemsRequest::_internal_position() const {
+  const ::io::deephaven::proto::backplane::script::grpc::Position* p = position_;
+  return p != nullptr ? *p : reinterpret_cast<const ::io::deephaven::proto::backplane::script::grpc::Position&>(
+      ::io::deephaven::proto::backplane::script::grpc::_Position_default_instance_);
 }
-inline void CancelCommandRequest::unsafe_arena_set_allocated_command_id(
-    ::io::deephaven::proto::backplane::grpc::Ticket* command_id) {
+inline const ::io::deephaven::proto::backplane::script::grpc::Position& GetCompletionItemsRequest::position() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest.position)
+  return _internal_position();
+}
+inline void GetCompletionItemsRequest::unsafe_arena_set_allocated_position(
+    ::io::deephaven::proto::backplane::script::grpc::Position* position) {
   if (GetArenaForAllocation() == nullptr) {
-    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(command_id_);
+    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(position_);
   }
-  command_id_ = command_id;
-  if (command_id) {
+  position_ = position;
+  if (position) {
     
   } else {
     
   }
-  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:io.deephaven.proto.backplane.script.grpc.CancelCommandRequest.command_id)
+  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest.position)
 }
-inline ::io::deephaven::proto::backplane::grpc::Ticket* CancelCommandRequest::release_command_id() {
+inline ::io::deephaven::proto::backplane::script::grpc::Position* GetCompletionItemsRequest::release_position() {
   
-  ::io::deephaven::proto::backplane::grpc::Ticket* temp = command_id_;
-  command_id_ = nullptr;
+  ::io::deephaven::proto::backplane::script::grpc::Position* temp = position_;
+  position_ = nullptr;
 #ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
   auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
   temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
@@ -10899,579 +16878,467 @@ inline ::io::deephaven::proto::backplane::grpc::Ticket* CancelCommandRequest::re
 #endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
   return temp;
 }
-inline ::io::deephaven::proto::backplane::grpc::Ticket* CancelCommandRequest::unsafe_arena_release_command_id() {
-  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.CancelCommandRequest.command_id)
+inline ::io::deephaven::proto::backplane::script::grpc::Position* GetCompletionItemsRequest::unsafe_arena_release_position() {
+  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest.position)
   
-  ::io::deephaven::proto::backplane::grpc::Ticket* temp = command_id_;
-  command_id_ = nullptr;
+  ::io::deephaven::proto::backplane::script::grpc::Position* temp = position_;
+  position_ = nullptr;
   return temp;
 }
-inline ::io::deephaven::proto::backplane::grpc::Ticket* CancelCommandRequest::_internal_mutable_command_id() {
+inline ::io::deephaven::proto::backplane::script::grpc::Position* GetCompletionItemsRequest::_internal_mutable_position() {
   
-  if (command_id_ == nullptr) {
-    auto* p = CreateMaybeMessage<::io::deephaven::proto::backplane::grpc::Ticket>(GetArenaForAllocation());
-    command_id_ = p;
-  }
-  return command_id_;
-}
-inline ::io::deephaven::proto::backplane::grpc::Ticket* CancelCommandRequest::mutable_command_id() {
-  ::io::deephaven::proto::backplane::grpc::Ticket* _msg = _internal_mutable_command_id();
-  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.CancelCommandRequest.command_id)
-  return _msg;
-}
-inline void CancelCommandRequest::set_allocated_command_id(::io::deephaven::proto::backplane::grpc::Ticket* command_id) {
-  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
-  if (message_arena == nullptr) {
-    delete reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::MessageLite*>(command_id_);
-  }
-  if (command_id) {
-    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
-        ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(
-                reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(command_id));
-    if (message_arena != submessage_arena) {
-      command_id = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
-          message_arena, command_id, submessage_arena);
-    }
-    
-  } else {
-    
+  if (position_ == nullptr) {
+    auto* p = CreateMaybeMessage<::io::deephaven::proto::backplane::script::grpc::Position>(GetArenaForAllocation());
+    position_ = p;
   }
-  command_id_ = command_id;
-  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.CancelCommandRequest.command_id)
-}
-
-// -------------------------------------------------------------------
-
-// CancelCommandResponse
-
-// -------------------------------------------------------------------
-
-// AutoCompleteRequest
-
-// .io.deephaven.proto.backplane.script.grpc.OpenDocumentRequest open_document = 1;
-inline bool AutoCompleteRequest::_internal_has_open_document() const {
-  return request_case() == kOpenDocument;
-}
-inline bool AutoCompleteRequest::has_open_document() const {
-  return _internal_has_open_document();
-}
-inline void AutoCompleteRequest::set_has_open_document() {
-  _oneof_case_[0] = kOpenDocument;
+  return position_;
 }
-inline void AutoCompleteRequest::clear_open_document() {
-  if (_internal_has_open_document()) {
-    if (GetArenaForAllocation() == nullptr) {
-      delete request_.open_document_;
-    }
-    clear_has_request();
-  }
+inline ::io::deephaven::proto::backplane::script::grpc::Position* GetCompletionItemsRequest::mutable_position() {
+  ::io::deephaven::proto::backplane::script::grpc::Position* _msg = _internal_mutable_position();
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest.position)
+  return _msg;
 }
-inline ::io::deephaven::proto::backplane::script::grpc::OpenDocumentRequest* AutoCompleteRequest::release_open_document() {
-  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest.open_document)
-  if (_internal_has_open_document()) {
-    clear_has_request();
-    ::io::deephaven::proto::backplane::script::grpc::OpenDocumentRequest* temp = request_.open_document_;
-    if (GetArenaForAllocation() != nullptr) {
-      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
+inline void GetCompletionItemsRequest::set_allocated_position(::io::deephaven::proto::backplane::script::grpc::Position* position) {
+  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
+  if (message_arena == nullptr) {
+    delete position_;
+  }
+  if (position) {
+    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
+        ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(position);
+    if (message_arena != submessage_arena) {
+      position = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
+          message_arena, position, submessage_arena);
     }
-    request_.open_document_ = nullptr;
-    return temp;
+    
   } else {
-    return nullptr;
+    
   }
+  position_ = position;
+  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest.position)
 }
-inline const ::io::deephaven::proto::backplane::script::grpc::OpenDocumentRequest& AutoCompleteRequest::_internal_open_document() const {
-  return _internal_has_open_document()
-      ? *request_.open_document_
-      : reinterpret_cast< ::io::deephaven::proto::backplane::script::grpc::OpenDocumentRequest&>(::io::deephaven::proto::backplane::script::grpc::_OpenDocumentRequest_default_instance_);
+
+// int32 request_id = 5 [deprecated = true];
+inline void GetCompletionItemsRequest::clear_request_id() {
+  request_id_ = 0;
 }
-inline const ::io::deephaven::proto::backplane::script::grpc::OpenDocumentRequest& AutoCompleteRequest::open_document() const {
-  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest.open_document)
-  return _internal_open_document();
+inline int32_t GetCompletionItemsRequest::_internal_request_id() const {
+  return request_id_;
 }
-inline ::io::deephaven::proto::backplane::script::grpc::OpenDocumentRequest* AutoCompleteRequest::unsafe_arena_release_open_document() {
-  // @@protoc_insertion_point(field_unsafe_arena_release:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest.open_document)
-  if (_internal_has_open_document()) {
-    clear_has_request();
-    ::io::deephaven::proto::backplane::script::grpc::OpenDocumentRequest* temp = request_.open_document_;
-    request_.open_document_ = nullptr;
-    return temp;
-  } else {
-    return nullptr;
-  }
+inline int32_t GetCompletionItemsRequest::request_id() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest.request_id)
+  return _internal_request_id();
 }
-inline void AutoCompleteRequest::unsafe_arena_set_allocated_open_document(::io::deephaven::proto::backplane::script::grpc::OpenDocumentRequest* open_document) {
-  clear_request();
-  if (open_document) {
-    set_has_open_document();
-    request_.open_document_ = open_document;
-  }
-  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest.open_document)
+inline void GetCompletionItemsRequest::_internal_set_request_id(int32_t value) {
+  
+  request_id_ = value;
 }
-inline ::io::deephaven::proto::backplane::script::grpc::OpenDocumentRequest* AutoCompleteRequest::_internal_mutable_open_document() {
-  if (!_internal_has_open_document()) {
-    clear_request();
-    set_has_open_document();
-    request_.open_document_ = CreateMaybeMessage< ::io::deephaven::proto::backplane::script::grpc::OpenDocumentRequest >(GetArenaForAllocation());
-  }
-  return request_.open_document_;
+inline void GetCompletionItemsRequest::set_request_id(int32_t value) {
+  _internal_set_request_id(value);
+  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest.request_id)
 }
-inline ::io::deephaven::proto::backplane::script::grpc::OpenDocumentRequest* AutoCompleteRequest::mutable_open_document() {
-  ::io::deephaven::proto::backplane::script::grpc::OpenDocumentRequest* _msg = _internal_mutable_open_document();
-  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest.open_document)
-  return _msg;
+
+// -------------------------------------------------------------------
+
+// CompletionContext
+
+// int32 trigger_kind = 1;
+inline void CompletionContext::clear_trigger_kind() {
+  trigger_kind_ = 0;
+}
+inline int32_t CompletionContext::_internal_trigger_kind() const {
+  return trigger_kind_;
+}
+inline int32_t CompletionContext::trigger_kind() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.CompletionContext.trigger_kind)
+  return _internal_trigger_kind();
+}
+inline void CompletionContext::_internal_set_trigger_kind(int32_t value) {
+  
+  trigger_kind_ = value;
+}
+inline void CompletionContext::set_trigger_kind(int32_t value) {
+  _internal_set_trigger_kind(value);
+  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.CompletionContext.trigger_kind)
 }
 
-// .io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest change_document = 2;
-inline bool AutoCompleteRequest::_internal_has_change_document() const {
-  return request_case() == kChangeDocument;
+// string trigger_character = 2;
+inline void CompletionContext::clear_trigger_character() {
+  trigger_character_.ClearToEmpty();
 }
-inline bool AutoCompleteRequest::has_change_document() const {
-  return _internal_has_change_document();
+inline const std::string& CompletionContext::trigger_character() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.CompletionContext.trigger_character)
+  return _internal_trigger_character();
 }
-inline void AutoCompleteRequest::set_has_change_document() {
-  _oneof_case_[0] = kChangeDocument;
+template <typename ArgT0, typename... ArgT>
+inline PROTOBUF_ALWAYS_INLINE
+void CompletionContext::set_trigger_character(ArgT0&& arg0, ArgT... args) {
+ 
+ trigger_character_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation());
+  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.CompletionContext.trigger_character)
 }
-inline void AutoCompleteRequest::clear_change_document() {
-  if (_internal_has_change_document()) {
-    if (GetArenaForAllocation() == nullptr) {
-      delete request_.change_document_;
-    }
-    clear_has_request();
-  }
+inline std::string* CompletionContext::mutable_trigger_character() {
+  std::string* _s = _internal_mutable_trigger_character();
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.CompletionContext.trigger_character)
+  return _s;
 }
-inline ::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest* AutoCompleteRequest::release_change_document() {
-  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest.change_document)
-  if (_internal_has_change_document()) {
-    clear_has_request();
-    ::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest* temp = request_.change_document_;
-    if (GetArenaForAllocation() != nullptr) {
-      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
-    }
-    request_.change_document_ = nullptr;
-    return temp;
-  } else {
-    return nullptr;
-  }
+inline const std::string& CompletionContext::_internal_trigger_character() const {
+  return trigger_character_.Get();
 }
-inline const ::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest& AutoCompleteRequest::_internal_change_document() const {
-  return _internal_has_change_document()
-      ? *request_.change_document_
-      : reinterpret_cast< ::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest&>(::io::deephaven::proto::backplane::script::grpc::_ChangeDocumentRequest_default_instance_);
+inline void CompletionContext::_internal_set_trigger_character(const std::string& value) {
+  
+  trigger_character_.Set(value, GetArenaForAllocation());
 }
-inline const ::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest& AutoCompleteRequest::change_document() const {
-  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest.change_document)
-  return _internal_change_document();
+inline std::string* CompletionContext::_internal_mutable_trigger_character() {
+  
+  return trigger_character_.Mutable(GetArenaForAllocation());
 }
-inline ::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest* AutoCompleteRequest::unsafe_arena_release_change_document() {
-  // @@protoc_insertion_point(field_unsafe_arena_release:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest.change_document)
-  if (_internal_has_change_document()) {
-    clear_has_request();
-    ::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest* temp = request_.change_document_;
-    request_.change_document_ = nullptr;
-    return temp;
+inline std::string* CompletionContext::release_trigger_character() {
+  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.CompletionContext.trigger_character)
+  return trigger_character_.Release();
+}
+inline void CompletionContext::set_allocated_trigger_character(std::string* trigger_character) {
+  if (trigger_character != nullptr) {
+    
   } else {
-    return nullptr;
+    
   }
-}
-inline void AutoCompleteRequest::unsafe_arena_set_allocated_change_document(::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest* change_document) {
-  clear_request();
-  if (change_document) {
-    set_has_change_document();
-    request_.change_document_ = change_document;
+  trigger_character_.SetAllocated(trigger_character, GetArenaForAllocation());
+#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  if (trigger_character_.IsDefault()) {
+    trigger_character_.Set("", GetArenaForAllocation());
   }
-  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest.change_document)
+#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.CompletionContext.trigger_character)
 }
-inline ::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest* AutoCompleteRequest::_internal_mutable_change_document() {
-  if (!_internal_has_change_document()) {
-    clear_request();
-    set_has_change_document();
-    request_.change_document_ = CreateMaybeMessage< ::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest >(GetArenaForAllocation());
-  }
-  return request_.change_document_;
+
+// -------------------------------------------------------------------
+
+// GetCompletionItemsResponse
+
+// repeated .io.deephaven.proto.backplane.script.grpc.CompletionItem items = 1;
+inline int GetCompletionItemsResponse::_internal_items_size() const {
+  return items_.size();
 }
-inline ::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest* AutoCompleteRequest::mutable_change_document() {
-  ::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest* _msg = _internal_mutable_change_document();
-  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest.change_document)
-  return _msg;
+inline int GetCompletionItemsResponse::items_size() const {
+  return _internal_items_size();
 }
-
-// .io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest get_completion_items = 3;
-inline bool AutoCompleteRequest::_internal_has_get_completion_items() const {
-  return request_case() == kGetCompletionItems;
+inline void GetCompletionItemsResponse::clear_items() {
+  items_.Clear();
 }
-inline bool AutoCompleteRequest::has_get_completion_items() const {
-  return _internal_has_get_completion_items();
+inline ::io::deephaven::proto::backplane::script::grpc::CompletionItem* GetCompletionItemsResponse::mutable_items(int index) {
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsResponse.items)
+  return items_.Mutable(index);
 }
-inline void AutoCompleteRequest::set_has_get_completion_items() {
-  _oneof_case_[0] = kGetCompletionItems;
+inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::CompletionItem >*
+GetCompletionItemsResponse::mutable_items() {
+  // @@protoc_insertion_point(field_mutable_list:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsResponse.items)
+  return &items_;
 }
-inline void AutoCompleteRequest::clear_get_completion_items() {
-  if (_internal_has_get_completion_items()) {
-    if (GetArenaForAllocation() == nullptr) {
-      delete request_.get_completion_items_;
-    }
-    clear_has_request();
-  }
+inline const ::io::deephaven::proto::backplane::script::grpc::CompletionItem& GetCompletionItemsResponse::_internal_items(int index) const {
+  return items_.Get(index);
 }
-inline ::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsRequest* AutoCompleteRequest::release_get_completion_items() {
-  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest.get_completion_items)
-  if (_internal_has_get_completion_items()) {
-    clear_has_request();
-    ::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsRequest* temp = request_.get_completion_items_;
-    if (GetArenaForAllocation() != nullptr) {
-      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
-    }
-    request_.get_completion_items_ = nullptr;
-    return temp;
-  } else {
-    return nullptr;
-  }
+inline const ::io::deephaven::proto::backplane::script::grpc::CompletionItem& GetCompletionItemsResponse::items(int index) const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsResponse.items)
+  return _internal_items(index);
+}
+inline ::io::deephaven::proto::backplane::script::grpc::CompletionItem* GetCompletionItemsResponse::_internal_add_items() {
+  return items_.Add();
+}
+inline ::io::deephaven::proto::backplane::script::grpc::CompletionItem* GetCompletionItemsResponse::add_items() {
+  ::io::deephaven::proto::backplane::script::grpc::CompletionItem* _add = _internal_add_items();
+  // @@protoc_insertion_point(field_add:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsResponse.items)
+  return _add;
 }
-inline const ::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsRequest& AutoCompleteRequest::_internal_get_completion_items() const {
-  return _internal_has_get_completion_items()
-      ? *request_.get_completion_items_
-      : reinterpret_cast< ::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsRequest&>(::io::deephaven::proto::backplane::script::grpc::_GetCompletionItemsRequest_default_instance_);
+inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::CompletionItem >&
+GetCompletionItemsResponse::items() const {
+  // @@protoc_insertion_point(field_list:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsResponse.items)
+  return items_;
 }
-inline const ::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsRequest& AutoCompleteRequest::get_completion_items() const {
-  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest.get_completion_items)
-  return _internal_get_completion_items();
+
+// int32 request_id = 2 [deprecated = true];
+inline void GetCompletionItemsResponse::clear_request_id() {
+  request_id_ = 0;
 }
-inline ::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsRequest* AutoCompleteRequest::unsafe_arena_release_get_completion_items() {
-  // @@protoc_insertion_point(field_unsafe_arena_release:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest.get_completion_items)
-  if (_internal_has_get_completion_items()) {
-    clear_has_request();
-    ::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsRequest* temp = request_.get_completion_items_;
-    request_.get_completion_items_ = nullptr;
-    return temp;
-  } else {
-    return nullptr;
-  }
+inline int32_t GetCompletionItemsResponse::_internal_request_id() const {
+  return request_id_;
 }
-inline void AutoCompleteRequest::unsafe_arena_set_allocated_get_completion_items(::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsRequest* get_completion_items) {
-  clear_request();
-  if (get_completion_items) {
-    set_has_get_completion_items();
-    request_.get_completion_items_ = get_completion_items;
-  }
-  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest.get_completion_items)
+inline int32_t GetCompletionItemsResponse::request_id() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsResponse.request_id)
+  return _internal_request_id();
 }
-inline ::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsRequest* AutoCompleteRequest::_internal_mutable_get_completion_items() {
-  if (!_internal_has_get_completion_items()) {
-    clear_request();
-    set_has_get_completion_items();
-    request_.get_completion_items_ = CreateMaybeMessage< ::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsRequest >(GetArenaForAllocation());
-  }
-  return request_.get_completion_items_;
+inline void GetCompletionItemsResponse::_internal_set_request_id(int32_t value) {
+  
+  request_id_ = value;
 }
-inline ::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsRequest* AutoCompleteRequest::mutable_get_completion_items() {
-  ::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsRequest* _msg = _internal_mutable_get_completion_items();
-  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest.get_completion_items)
-  return _msg;
+inline void GetCompletionItemsResponse::set_request_id(int32_t value) {
+  _internal_set_request_id(value);
+  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsResponse.request_id)
 }
 
-// .io.deephaven.proto.backplane.script.grpc.CloseDocumentRequest close_document = 4;
-inline bool AutoCompleteRequest::_internal_has_close_document() const {
-  return request_case() == kCloseDocument;
-}
-inline bool AutoCompleteRequest::has_close_document() const {
-  return _internal_has_close_document();
+// bool success = 3 [deprecated = true];
+inline void GetCompletionItemsResponse::clear_success() {
+  success_ = false;
 }
-inline void AutoCompleteRequest::set_has_close_document() {
-  _oneof_case_[0] = kCloseDocument;
+inline bool GetCompletionItemsResponse::_internal_success() const {
+  return success_;
 }
-inline void AutoCompleteRequest::clear_close_document() {
-  if (_internal_has_close_document()) {
-    if (GetArenaForAllocation() == nullptr) {
-      delete request_.close_document_;
-    }
-    clear_has_request();
-  }
+inline bool GetCompletionItemsResponse::success() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsResponse.success)
+  return _internal_success();
 }
-inline ::io::deephaven::proto::backplane::script::grpc::CloseDocumentRequest* AutoCompleteRequest::release_close_document() {
-  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest.close_document)
-  if (_internal_has_close_document()) {
-    clear_has_request();
-    ::io::deephaven::proto::backplane::script::grpc::CloseDocumentRequest* temp = request_.close_document_;
-    if (GetArenaForAllocation() != nullptr) {
-      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
-    }
-    request_.close_document_ = nullptr;
-    return temp;
-  } else {
-    return nullptr;
-  }
+inline void GetCompletionItemsResponse::_internal_set_success(bool value) {
+  
+  success_ = value;
 }
-inline const ::io::deephaven::proto::backplane::script::grpc::CloseDocumentRequest& AutoCompleteRequest::_internal_close_document() const {
-  return _internal_has_close_document()
-      ? *request_.close_document_
-      : reinterpret_cast< ::io::deephaven::proto::backplane::script::grpc::CloseDocumentRequest&>(::io::deephaven::proto::backplane::script::grpc::_CloseDocumentRequest_default_instance_);
+inline void GetCompletionItemsResponse::set_success(bool value) {
+  _internal_set_success(value);
+  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsResponse.success)
 }
-inline const ::io::deephaven::proto::backplane::script::grpc::CloseDocumentRequest& AutoCompleteRequest::close_document() const {
-  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest.close_document)
-  return _internal_close_document();
+
+// -------------------------------------------------------------------
+
+// CompletionItem
+
+// int32 start = 1;
+inline void CompletionItem::clear_start() {
+  start_ = 0;
 }
-inline ::io::deephaven::proto::backplane::script::grpc::CloseDocumentRequest* AutoCompleteRequest::unsafe_arena_release_close_document() {
-  // @@protoc_insertion_point(field_unsafe_arena_release:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest.close_document)
-  if (_internal_has_close_document()) {
-    clear_has_request();
-    ::io::deephaven::proto::backplane::script::grpc::CloseDocumentRequest* temp = request_.close_document_;
-    request_.close_document_ = nullptr;
-    return temp;
-  } else {
-    return nullptr;
-  }
+inline int32_t CompletionItem::_internal_start() const {
+  return start_;
 }
-inline void AutoCompleteRequest::unsafe_arena_set_allocated_close_document(::io::deephaven::proto::backplane::script::grpc::CloseDocumentRequest* close_document) {
-  clear_request();
-  if (close_document) {
-    set_has_close_document();
-    request_.close_document_ = close_document;
-  }
-  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest.close_document)
+inline int32_t CompletionItem::start() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.CompletionItem.start)
+  return _internal_start();
 }
-inline ::io::deephaven::proto::backplane::script::grpc::CloseDocumentRequest* AutoCompleteRequest::_internal_mutable_close_document() {
-  if (!_internal_has_close_document()) {
-    clear_request();
-    set_has_close_document();
-    request_.close_document_ = CreateMaybeMessage< ::io::deephaven::proto::backplane::script::grpc::CloseDocumentRequest >(GetArenaForAllocation());
-  }
-  return request_.close_document_;
+inline void CompletionItem::_internal_set_start(int32_t value) {
+  
+  start_ = value;
 }
-inline ::io::deephaven::proto::backplane::script::grpc::CloseDocumentRequest* AutoCompleteRequest::mutable_close_document() {
-  ::io::deephaven::proto::backplane::script::grpc::CloseDocumentRequest* _msg = _internal_mutable_close_document();
-  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest.close_document)
-  return _msg;
+inline void CompletionItem::set_start(int32_t value) {
+  _internal_set_start(value);
+  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.CompletionItem.start)
 }
 
-inline bool AutoCompleteRequest::has_request() const {
-  return request_case() != REQUEST_NOT_SET;
+// int32 length = 2;
+inline void CompletionItem::clear_length() {
+  length_ = 0;
 }
-inline void AutoCompleteRequest::clear_has_request() {
-  _oneof_case_[0] = REQUEST_NOT_SET;
+inline int32_t CompletionItem::_internal_length() const {
+  return length_;
 }
-inline AutoCompleteRequest::RequestCase AutoCompleteRequest::request_case() const {
-  return AutoCompleteRequest::RequestCase(_oneof_case_[0]);
+inline int32_t CompletionItem::length() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.CompletionItem.length)
+  return _internal_length();
+}
+inline void CompletionItem::_internal_set_length(int32_t value) {
+  
+  length_ = value;
+}
+inline void CompletionItem::set_length(int32_t value) {
+  _internal_set_length(value);
+  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.CompletionItem.length)
 }
-// -------------------------------------------------------------------
-
-// AutoCompleteResponse
 
-// .io.deephaven.proto.backplane.script.grpc.GetCompletionItemsResponse completion_items = 1;
-inline bool AutoCompleteResponse::_internal_has_completion_items() const {
-  return response_case() == kCompletionItems;
+// string label = 3;
+inline void CompletionItem::clear_label() {
+  label_.ClearToEmpty();
 }
-inline bool AutoCompleteResponse::has_completion_items() const {
-  return _internal_has_completion_items();
+inline const std::string& CompletionItem::label() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.CompletionItem.label)
+  return _internal_label();
 }
-inline void AutoCompleteResponse::set_has_completion_items() {
-  _oneof_case_[0] = kCompletionItems;
+template <typename ArgT0, typename... ArgT>
+inline PROTOBUF_ALWAYS_INLINE
+void CompletionItem::set_label(ArgT0&& arg0, ArgT... args) {
+ 
+ label_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation());
+  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.CompletionItem.label)
 }
-inline void AutoCompleteResponse::clear_completion_items() {
-  if (_internal_has_completion_items()) {
-    if (GetArenaForAllocation() == nullptr) {
-      delete response_.completion_items_;
-    }
-    clear_has_response();
-  }
+inline std::string* CompletionItem::mutable_label() {
+  std::string* _s = _internal_mutable_label();
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.CompletionItem.label)
+  return _s;
 }
-inline ::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsResponse* AutoCompleteResponse::release_completion_items() {
-  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.AutoCompleteResponse.completion_items)
-  if (_internal_has_completion_items()) {
-    clear_has_response();
-    ::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsResponse* temp = response_.completion_items_;
-    if (GetArenaForAllocation() != nullptr) {
-      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
-    }
-    response_.completion_items_ = nullptr;
-    return temp;
-  } else {
-    return nullptr;
-  }
+inline const std::string& CompletionItem::_internal_label() const {
+  return label_.Get();
 }
-inline const ::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsResponse& AutoCompleteResponse::_internal_completion_items() const {
-  return _internal_has_completion_items()
-      ? *response_.completion_items_
-      : reinterpret_cast< ::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsResponse&>(::io::deephaven::proto::backplane::script::grpc::_GetCompletionItemsResponse_default_instance_);
+inline void CompletionItem::_internal_set_label(const std::string& value) {
+  
+  label_.Set(value, GetArenaForAllocation());
 }
-inline const ::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsResponse& AutoCompleteResponse::completion_items() const {
-  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.AutoCompleteResponse.completion_items)
-  return _internal_completion_items();
+inline std::string* CompletionItem::_internal_mutable_label() {
+  
+  return label_.Mutable(GetArenaForAllocation());
 }
-inline ::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsResponse* AutoCompleteResponse::unsafe_arena_release_completion_items() {
-  // @@protoc_insertion_point(field_unsafe_arena_release:io.deephaven.proto.backplane.script.grpc.AutoCompleteResponse.completion_items)
-  if (_internal_has_completion_items()) {
-    clear_has_response();
-    ::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsResponse* temp = response_.completion_items_;
-    response_.completion_items_ = nullptr;
-    return temp;
+inline std::string* CompletionItem::release_label() {
+  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.CompletionItem.label)
+  return label_.Release();
+}
+inline void CompletionItem::set_allocated_label(std::string* label) {
+  if (label != nullptr) {
+    
   } else {
-    return nullptr;
+    
   }
-}
-inline void AutoCompleteResponse::unsafe_arena_set_allocated_completion_items(::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsResponse* completion_items) {
-  clear_response();
-  if (completion_items) {
-    set_has_completion_items();
-    response_.completion_items_ = completion_items;
+  label_.SetAllocated(label, GetArenaForAllocation());
+#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  if (label_.IsDefault()) {
+    label_.Set("", GetArenaForAllocation());
   }
-  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:io.deephaven.proto.backplane.script.grpc.AutoCompleteResponse.completion_items)
+#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.CompletionItem.label)
 }
-inline ::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsResponse* AutoCompleteResponse::_internal_mutable_completion_items() {
-  if (!_internal_has_completion_items()) {
-    clear_response();
-    set_has_completion_items();
-    response_.completion_items_ = CreateMaybeMessage< ::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsResponse >(GetArenaForAllocation());
-  }
-  return response_.completion_items_;
+
+// int32 kind = 4;
+inline void CompletionItem::clear_kind() {
+  kind_ = 0;
 }
-inline ::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsResponse* AutoCompleteResponse::mutable_completion_items() {
-  ::io::deephaven::proto::backplane::script::grpc::GetCompletionItemsResponse* _msg = _internal_mutable_completion_items();
-  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.AutoCompleteResponse.completion_items)
-  return _msg;
+inline int32_t CompletionItem::_internal_kind() const {
+  return kind_;
 }
-
-inline bool AutoCompleteResponse::has_response() const {
-  return response_case() != RESPONSE_NOT_SET;
+inline int32_t CompletionItem::kind() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.CompletionItem.kind)
+  return _internal_kind();
 }
-inline void AutoCompleteResponse::clear_has_response() {
-  _oneof_case_[0] = RESPONSE_NOT_SET;
+inline void CompletionItem::_internal_set_kind(int32_t value) {
+  
+  kind_ = value;
 }
-inline AutoCompleteResponse::ResponseCase AutoCompleteResponse::response_case() const {
-  return AutoCompleteResponse::ResponseCase(_oneof_case_[0]);
+inline void CompletionItem::set_kind(int32_t value) {
+  _internal_set_kind(value);
+  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.CompletionItem.kind)
 }
-// -------------------------------------------------------------------
-
-// BrowserNextResponse
-
-// -------------------------------------------------------------------
-
-// OpenDocumentRequest
 
-// .io.deephaven.proto.backplane.grpc.Ticket console_id = 1;
-inline bool OpenDocumentRequest::_internal_has_console_id() const {
-  return this != internal_default_instance() && console_id_ != nullptr;
-}
-inline bool OpenDocumentRequest::has_console_id() const {
-  return _internal_has_console_id();
+// string detail = 5;
+inline void CompletionItem::clear_detail() {
+  detail_.ClearToEmpty();
 }
-inline const ::io::deephaven::proto::backplane::grpc::Ticket& OpenDocumentRequest::_internal_console_id() const {
-  const ::io::deephaven::proto::backplane::grpc::Ticket* p = console_id_;
-  return p != nullptr ? *p : reinterpret_cast<const ::io::deephaven::proto::backplane::grpc::Ticket&>(
-      ::io::deephaven::proto::backplane::grpc::_Ticket_default_instance_);
+inline const std::string& CompletionItem::detail() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.CompletionItem.detail)
+  return _internal_detail();
 }
-inline const ::io::deephaven::proto::backplane::grpc::Ticket& OpenDocumentRequest::console_id() const {
-  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.OpenDocumentRequest.console_id)
-  return _internal_console_id();
+template <typename ArgT0, typename... ArgT>
+inline PROTOBUF_ALWAYS_INLINE
+void CompletionItem::set_detail(ArgT0&& arg0, ArgT... args) {
+ 
+ detail_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation());
+  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.CompletionItem.detail)
 }
-inline void OpenDocumentRequest::unsafe_arena_set_allocated_console_id(
-    ::io::deephaven::proto::backplane::grpc::Ticket* console_id) {
-  if (GetArenaForAllocation() == nullptr) {
-    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(console_id_);
-  }
-  console_id_ = console_id;
-  if (console_id) {
-    
-  } else {
-    
-  }
-  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:io.deephaven.proto.backplane.script.grpc.OpenDocumentRequest.console_id)
+inline std::string* CompletionItem::mutable_detail() {
+  std::string* _s = _internal_mutable_detail();
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.CompletionItem.detail)
+  return _s;
 }
-inline ::io::deephaven::proto::backplane::grpc::Ticket* OpenDocumentRequest::release_console_id() {
-  
-  ::io::deephaven::proto::backplane::grpc::Ticket* temp = console_id_;
-  console_id_ = nullptr;
-#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
-  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
-  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
-  if (GetArenaForAllocation() == nullptr) { delete old; }
-#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
-  if (GetArenaForAllocation() != nullptr) {
-    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
-  }
-#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
-  return temp;
+inline const std::string& CompletionItem::_internal_detail() const {
+  return detail_.Get();
 }
-inline ::io::deephaven::proto::backplane::grpc::Ticket* OpenDocumentRequest::unsafe_arena_release_console_id() {
-  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.OpenDocumentRequest.console_id)
+inline void CompletionItem::_internal_set_detail(const std::string& value) {
   
-  ::io::deephaven::proto::backplane::grpc::Ticket* temp = console_id_;
-  console_id_ = nullptr;
-  return temp;
+  detail_.Set(value, GetArenaForAllocation());
 }
-inline ::io::deephaven::proto::backplane::grpc::Ticket* OpenDocumentRequest::_internal_mutable_console_id() {
+inline std::string* CompletionItem::_internal_mutable_detail() {
   
-  if (console_id_ == nullptr) {
-    auto* p = CreateMaybeMessage<::io::deephaven::proto::backplane::grpc::Ticket>(GetArenaForAllocation());
-    console_id_ = p;
-  }
-  return console_id_;
+  return detail_.Mutable(GetArenaForAllocation());
 }
-inline ::io::deephaven::proto::backplane::grpc::Ticket* OpenDocumentRequest::mutable_console_id() {
-  ::io::deephaven::proto::backplane::grpc::Ticket* _msg = _internal_mutable_console_id();
-  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.OpenDocumentRequest.console_id)
-  return _msg;
+inline std::string* CompletionItem::release_detail() {
+  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.CompletionItem.detail)
+  return detail_.Release();
 }
-inline void OpenDocumentRequest::set_allocated_console_id(::io::deephaven::proto::backplane::grpc::Ticket* console_id) {
-  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
-  if (message_arena == nullptr) {
-    delete reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::MessageLite*>(console_id_);
-  }
-  if (console_id) {
-    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
-        ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(
-                reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(console_id));
-    if (message_arena != submessage_arena) {
-      console_id = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
-          message_arena, console_id, submessage_arena);
-    }
+inline void CompletionItem::set_allocated_detail(std::string* detail) {
+  if (detail != nullptr) {
     
   } else {
     
   }
-  console_id_ = console_id;
-  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.OpenDocumentRequest.console_id)
+  detail_.SetAllocated(detail, GetArenaForAllocation());
+#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  if (detail_.IsDefault()) {
+    detail_.Set("", GetArenaForAllocation());
+  }
+#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.CompletionItem.detail)
 }
 
-// .io.deephaven.proto.backplane.script.grpc.TextDocumentItem text_document = 2;
-inline bool OpenDocumentRequest::_internal_has_text_document() const {
-  return this != internal_default_instance() && text_document_ != nullptr;
+// bool deprecated = 7;
+inline void CompletionItem::clear_deprecated() {
+  deprecated_ = false;
 }
-inline bool OpenDocumentRequest::has_text_document() const {
-  return _internal_has_text_document();
+inline bool CompletionItem::_internal_deprecated() const {
+  return deprecated_;
 }
-inline void OpenDocumentRequest::clear_text_document() {
-  if (GetArenaForAllocation() == nullptr && text_document_ != nullptr) {
-    delete text_document_;
+inline bool CompletionItem::deprecated() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.CompletionItem.deprecated)
+  return _internal_deprecated();
+}
+inline void CompletionItem::_internal_set_deprecated(bool value) {
+  
+  deprecated_ = value;
+}
+inline void CompletionItem::set_deprecated(bool value) {
+  _internal_set_deprecated(value);
+  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.CompletionItem.deprecated)
+}
+
+// bool preselect = 8;
+inline void CompletionItem::clear_preselect() {
+  preselect_ = false;
+}
+inline bool CompletionItem::_internal_preselect() const {
+  return preselect_;
+}
+inline bool CompletionItem::preselect() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.CompletionItem.preselect)
+  return _internal_preselect();
+}
+inline void CompletionItem::_internal_set_preselect(bool value) {
+  
+  preselect_ = value;
+}
+inline void CompletionItem::set_preselect(bool value) {
+  _internal_set_preselect(value);
+  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.CompletionItem.preselect)
+}
+
+// .io.deephaven.proto.backplane.script.grpc.TextEdit text_edit = 9;
+inline bool CompletionItem::_internal_has_text_edit() const {
+  return this != internal_default_instance() && text_edit_ != nullptr;
+}
+inline bool CompletionItem::has_text_edit() const {
+  return _internal_has_text_edit();
+}
+inline void CompletionItem::clear_text_edit() {
+  if (GetArenaForAllocation() == nullptr && text_edit_ != nullptr) {
+    delete text_edit_;
   }
-  text_document_ = nullptr;
+  text_edit_ = nullptr;
 }
-inline const ::io::deephaven::proto::backplane::script::grpc::TextDocumentItem& OpenDocumentRequest::_internal_text_document() const {
-  const ::io::deephaven::proto::backplane::script::grpc::TextDocumentItem* p = text_document_;
-  return p != nullptr ? *p : reinterpret_cast<const ::io::deephaven::proto::backplane::script::grpc::TextDocumentItem&>(
-      ::io::deephaven::proto::backplane::script::grpc::_TextDocumentItem_default_instance_);
+inline const ::io::deephaven::proto::backplane::script::grpc::TextEdit& CompletionItem::_internal_text_edit() const {
+  const ::io::deephaven::proto::backplane::script::grpc::TextEdit* p = text_edit_;
+  return p != nullptr ? *p : reinterpret_cast<const ::io::deephaven::proto::backplane::script::grpc::TextEdit&>(
+      ::io::deephaven::proto::backplane::script::grpc::_TextEdit_default_instance_);
 }
-inline const ::io::deephaven::proto::backplane::script::grpc::TextDocumentItem& OpenDocumentRequest::text_document() const {
-  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.OpenDocumentRequest.text_document)
-  return _internal_text_document();
+inline const ::io::deephaven::proto::backplane::script::grpc::TextEdit& CompletionItem::text_edit() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.CompletionItem.text_edit)
+  return _internal_text_edit();
 }
-inline void OpenDocumentRequest::unsafe_arena_set_allocated_text_document(
-    ::io::deephaven::proto::backplane::script::grpc::TextDocumentItem* text_document) {
+inline void CompletionItem::unsafe_arena_set_allocated_text_edit(
+    ::io::deephaven::proto::backplane::script::grpc::TextEdit* text_edit) {
   if (GetArenaForAllocation() == nullptr) {
-    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(text_document_);
+    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(text_edit_);
   }
-  text_document_ = text_document;
-  if (text_document) {
+  text_edit_ = text_edit;
+  if (text_edit) {
     
   } else {
     
   }
-  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:io.deephaven.proto.backplane.script.grpc.OpenDocumentRequest.text_document)
+  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:io.deephaven.proto.backplane.script.grpc.CompletionItem.text_edit)
 }
-inline ::io::deephaven::proto::backplane::script::grpc::TextDocumentItem* OpenDocumentRequest::release_text_document() {
+inline ::io::deephaven::proto::backplane::script::grpc::TextEdit* CompletionItem::release_text_edit() {
   
-  ::io::deephaven::proto::backplane::script::grpc::TextDocumentItem* temp = text_document_;
-  text_document_ = nullptr;
+  ::io::deephaven::proto::backplane::script::grpc::TextEdit* temp = text_edit_;
+  text_edit_ = nullptr;
 #ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
   auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
   temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
@@ -11483,348 +17350,320 @@ inline ::io::deephaven::proto::backplane::script::grpc::TextDocumentItem* OpenDo
 #endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
   return temp;
 }
-inline ::io::deephaven::proto::backplane::script::grpc::TextDocumentItem* OpenDocumentRequest::unsafe_arena_release_text_document() {
-  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.OpenDocumentRequest.text_document)
+inline ::io::deephaven::proto::backplane::script::grpc::TextEdit* CompletionItem::unsafe_arena_release_text_edit() {
+  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.CompletionItem.text_edit)
   
-  ::io::deephaven::proto::backplane::script::grpc::TextDocumentItem* temp = text_document_;
-  text_document_ = nullptr;
+  ::io::deephaven::proto::backplane::script::grpc::TextEdit* temp = text_edit_;
+  text_edit_ = nullptr;
   return temp;
 }
-inline ::io::deephaven::proto::backplane::script::grpc::TextDocumentItem* OpenDocumentRequest::_internal_mutable_text_document() {
+inline ::io::deephaven::proto::backplane::script::grpc::TextEdit* CompletionItem::_internal_mutable_text_edit() {
   
-  if (text_document_ == nullptr) {
-    auto* p = CreateMaybeMessage<::io::deephaven::proto::backplane::script::grpc::TextDocumentItem>(GetArenaForAllocation());
-    text_document_ = p;
+  if (text_edit_ == nullptr) {
+    auto* p = CreateMaybeMessage<::io::deephaven::proto::backplane::script::grpc::TextEdit>(GetArenaForAllocation());
+    text_edit_ = p;
   }
-  return text_document_;
+  return text_edit_;
 }
-inline ::io::deephaven::proto::backplane::script::grpc::TextDocumentItem* OpenDocumentRequest::mutable_text_document() {
-  ::io::deephaven::proto::backplane::script::grpc::TextDocumentItem* _msg = _internal_mutable_text_document();
-  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.OpenDocumentRequest.text_document)
+inline ::io::deephaven::proto::backplane::script::grpc::TextEdit* CompletionItem::mutable_text_edit() {
+  ::io::deephaven::proto::backplane::script::grpc::TextEdit* _msg = _internal_mutable_text_edit();
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.CompletionItem.text_edit)
   return _msg;
 }
-inline void OpenDocumentRequest::set_allocated_text_document(::io::deephaven::proto::backplane::script::grpc::TextDocumentItem* text_document) {
+inline void CompletionItem::set_allocated_text_edit(::io::deephaven::proto::backplane::script::grpc::TextEdit* text_edit) {
   ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
   if (message_arena == nullptr) {
-    delete text_document_;
+    delete text_edit_;
   }
-  if (text_document) {
+  if (text_edit) {
     ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
-        ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(text_document);
+        ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(text_edit);
     if (message_arena != submessage_arena) {
-      text_document = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
-          message_arena, text_document, submessage_arena);
+      text_edit = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
+          message_arena, text_edit, submessage_arena);
     }
     
   } else {
     
   }
-  text_document_ = text_document;
-  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.OpenDocumentRequest.text_document)
+  text_edit_ = text_edit;
+  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.CompletionItem.text_edit)
 }
 
-// -------------------------------------------------------------------
-
-// TextDocumentItem
-
-// string uri = 1;
-inline void TextDocumentItem::clear_uri() {
-  uri_.ClearToEmpty();
+// string sort_text = 10;
+inline void CompletionItem::clear_sort_text() {
+  sort_text_.ClearToEmpty();
 }
-inline const std::string& TextDocumentItem::uri() const {
-  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.TextDocumentItem.uri)
-  return _internal_uri();
+inline const std::string& CompletionItem::sort_text() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.CompletionItem.sort_text)
+  return _internal_sort_text();
 }
 template <typename ArgT0, typename... ArgT>
 inline PROTOBUF_ALWAYS_INLINE
-void TextDocumentItem::set_uri(ArgT0&& arg0, ArgT... args) {
+void CompletionItem::set_sort_text(ArgT0&& arg0, ArgT... args) {
  
- uri_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation());
-  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.TextDocumentItem.uri)
+ sort_text_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation());
+  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.CompletionItem.sort_text)
 }
-inline std::string* TextDocumentItem::mutable_uri() {
-  std::string* _s = _internal_mutable_uri();
-  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.TextDocumentItem.uri)
+inline std::string* CompletionItem::mutable_sort_text() {
+  std::string* _s = _internal_mutable_sort_text();
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.CompletionItem.sort_text)
   return _s;
 }
-inline const std::string& TextDocumentItem::_internal_uri() const {
-  return uri_.Get();
+inline const std::string& CompletionItem::_internal_sort_text() const {
+  return sort_text_.Get();
 }
-inline void TextDocumentItem::_internal_set_uri(const std::string& value) {
+inline void CompletionItem::_internal_set_sort_text(const std::string& value) {
   
-  uri_.Set(value, GetArenaForAllocation());
+  sort_text_.Set(value, GetArenaForAllocation());
 }
-inline std::string* TextDocumentItem::_internal_mutable_uri() {
+inline std::string* CompletionItem::_internal_mutable_sort_text() {
   
-  return uri_.Mutable(GetArenaForAllocation());
+  return sort_text_.Mutable(GetArenaForAllocation());
 }
-inline std::string* TextDocumentItem::release_uri() {
-  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.TextDocumentItem.uri)
-  return uri_.Release();
+inline std::string* CompletionItem::release_sort_text() {
+  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.CompletionItem.sort_text)
+  return sort_text_.Release();
 }
-inline void TextDocumentItem::set_allocated_uri(std::string* uri) {
-  if (uri != nullptr) {
+inline void CompletionItem::set_allocated_sort_text(std::string* sort_text) {
+  if (sort_text != nullptr) {
     
   } else {
     
   }
-  uri_.SetAllocated(uri, GetArenaForAllocation());
+  sort_text_.SetAllocated(sort_text, GetArenaForAllocation());
 #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
-  if (uri_.IsDefault()) {
-    uri_.Set("", GetArenaForAllocation());
+  if (sort_text_.IsDefault()) {
+    sort_text_.Set("", GetArenaForAllocation());
   }
 #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
-  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.TextDocumentItem.uri)
+  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.CompletionItem.sort_text)
 }
 
-// string language_id = 2;
-inline void TextDocumentItem::clear_language_id() {
-  language_id_.ClearToEmpty();
+// string filter_text = 11;
+inline void CompletionItem::clear_filter_text() {
+  filter_text_.ClearToEmpty();
 }
-inline const std::string& TextDocumentItem::language_id() const {
-  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.TextDocumentItem.language_id)
-  return _internal_language_id();
+inline const std::string& CompletionItem::filter_text() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.CompletionItem.filter_text)
+  return _internal_filter_text();
 }
 template <typename ArgT0, typename... ArgT>
 inline PROTOBUF_ALWAYS_INLINE
-void TextDocumentItem::set_language_id(ArgT0&& arg0, ArgT... args) {
+void CompletionItem::set_filter_text(ArgT0&& arg0, ArgT... args) {
  
- language_id_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation());
-  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.TextDocumentItem.language_id)
+ filter_text_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation());
+  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.CompletionItem.filter_text)
 }
-inline std::string* TextDocumentItem::mutable_language_id() {
-  std::string* _s = _internal_mutable_language_id();
-  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.TextDocumentItem.language_id)
+inline std::string* CompletionItem::mutable_filter_text() {
+  std::string* _s = _internal_mutable_filter_text();
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.CompletionItem.filter_text)
   return _s;
 }
-inline const std::string& TextDocumentItem::_internal_language_id() const {
-  return language_id_.Get();
+inline const std::string& CompletionItem::_internal_filter_text() const {
+  return filter_text_.Get();
 }
-inline void TextDocumentItem::_internal_set_language_id(const std::string& value) {
+inline void CompletionItem::_internal_set_filter_text(const std::string& value) {
   
-  language_id_.Set(value, GetArenaForAllocation());
+  filter_text_.Set(value, GetArenaForAllocation());
 }
-inline std::string* TextDocumentItem::_internal_mutable_language_id() {
+inline std::string* CompletionItem::_internal_mutable_filter_text() {
   
-  return language_id_.Mutable(GetArenaForAllocation());
+  return filter_text_.Mutable(GetArenaForAllocation());
 }
-inline std::string* TextDocumentItem::release_language_id() {
-  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.TextDocumentItem.language_id)
-  return language_id_.Release();
+inline std::string* CompletionItem::release_filter_text() {
+  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.CompletionItem.filter_text)
+  return filter_text_.Release();
 }
-inline void TextDocumentItem::set_allocated_language_id(std::string* language_id) {
-  if (language_id != nullptr) {
+inline void CompletionItem::set_allocated_filter_text(std::string* filter_text) {
+  if (filter_text != nullptr) {
     
   } else {
     
   }
-  language_id_.SetAllocated(language_id, GetArenaForAllocation());
+  filter_text_.SetAllocated(filter_text, GetArenaForAllocation());
 #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
-  if (language_id_.IsDefault()) {
-    language_id_.Set("", GetArenaForAllocation());
+  if (filter_text_.IsDefault()) {
+    filter_text_.Set("", GetArenaForAllocation());
   }
 #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
-  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.TextDocumentItem.language_id)
+  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.CompletionItem.filter_text)
 }
 
-// int32 version = 3;
-inline void TextDocumentItem::clear_version() {
-  version_ = 0;
+// int32 insert_text_format = 12;
+inline void CompletionItem::clear_insert_text_format() {
+  insert_text_format_ = 0;
 }
-inline int32_t TextDocumentItem::_internal_version() const {
-  return version_;
+inline int32_t CompletionItem::_internal_insert_text_format() const {
+  return insert_text_format_;
 }
-inline int32_t TextDocumentItem::version() const {
-  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.TextDocumentItem.version)
-  return _internal_version();
+inline int32_t CompletionItem::insert_text_format() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.CompletionItem.insert_text_format)
+  return _internal_insert_text_format();
 }
-inline void TextDocumentItem::_internal_set_version(int32_t value) {
+inline void CompletionItem::_internal_set_insert_text_format(int32_t value) {
   
-  version_ = value;
+  insert_text_format_ = value;
 }
-inline void TextDocumentItem::set_version(int32_t value) {
-  _internal_set_version(value);
-  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.TextDocumentItem.version)
+inline void CompletionItem::set_insert_text_format(int32_t value) {
+  _internal_set_insert_text_format(value);
+  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.CompletionItem.insert_text_format)
 }
 
-// string text = 4;
-inline void TextDocumentItem::clear_text() {
-  text_.ClearToEmpty();
+// repeated .io.deephaven.proto.backplane.script.grpc.TextEdit additional_text_edits = 13;
+inline int CompletionItem::_internal_additional_text_edits_size() const {
+  return additional_text_edits_.size();
 }
-inline const std::string& TextDocumentItem::text() const {
-  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.TextDocumentItem.text)
-  return _internal_text();
+inline int CompletionItem::additional_text_edits_size() const {
+  return _internal_additional_text_edits_size();
 }
-template <typename ArgT0, typename... ArgT>
-inline PROTOBUF_ALWAYS_INLINE
-void TextDocumentItem::set_text(ArgT0&& arg0, ArgT... args) {
- 
- text_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation());
-  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.TextDocumentItem.text)
+inline void CompletionItem::clear_additional_text_edits() {
+  additional_text_edits_.Clear();
 }
-inline std::string* TextDocumentItem::mutable_text() {
-  std::string* _s = _internal_mutable_text();
-  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.TextDocumentItem.text)
-  return _s;
+inline ::io::deephaven::proto::backplane::script::grpc::TextEdit* CompletionItem::mutable_additional_text_edits(int index) {
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.CompletionItem.additional_text_edits)
+  return additional_text_edits_.Mutable(index);
 }
-inline const std::string& TextDocumentItem::_internal_text() const {
-  return text_.Get();
+inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::TextEdit >*
+CompletionItem::mutable_additional_text_edits() {
+  // @@protoc_insertion_point(field_mutable_list:io.deephaven.proto.backplane.script.grpc.CompletionItem.additional_text_edits)
+  return &additional_text_edits_;
 }
-inline void TextDocumentItem::_internal_set_text(const std::string& value) {
-  
-  text_.Set(value, GetArenaForAllocation());
+inline const ::io::deephaven::proto::backplane::script::grpc::TextEdit& CompletionItem::_internal_additional_text_edits(int index) const {
+  return additional_text_edits_.Get(index);
 }
-inline std::string* TextDocumentItem::_internal_mutable_text() {
-  
-  return text_.Mutable(GetArenaForAllocation());
+inline const ::io::deephaven::proto::backplane::script::grpc::TextEdit& CompletionItem::additional_text_edits(int index) const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.CompletionItem.additional_text_edits)
+  return _internal_additional_text_edits(index);
 }
-inline std::string* TextDocumentItem::release_text() {
-  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.TextDocumentItem.text)
-  return text_.Release();
+inline ::io::deephaven::proto::backplane::script::grpc::TextEdit* CompletionItem::_internal_add_additional_text_edits() {
+  return additional_text_edits_.Add();
 }
-inline void TextDocumentItem::set_allocated_text(std::string* text) {
-  if (text != nullptr) {
-    
-  } else {
-    
-  }
-  text_.SetAllocated(text, GetArenaForAllocation());
-#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
-  if (text_.IsDefault()) {
-    text_.Set("", GetArenaForAllocation());
-  }
-#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
-  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.TextDocumentItem.text)
+inline ::io::deephaven::proto::backplane::script::grpc::TextEdit* CompletionItem::add_additional_text_edits() {
+  ::io::deephaven::proto::backplane::script::grpc::TextEdit* _add = _internal_add_additional_text_edits();
+  // @@protoc_insertion_point(field_add:io.deephaven.proto.backplane.script.grpc.CompletionItem.additional_text_edits)
+  return _add;
+}
+inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::TextEdit >&
+CompletionItem::additional_text_edits() const {
+  // @@protoc_insertion_point(field_list:io.deephaven.proto.backplane.script.grpc.CompletionItem.additional_text_edits)
+  return additional_text_edits_;
+}
+
+// repeated string commit_characters = 14;
+inline int CompletionItem::_internal_commit_characters_size() const {
+  return commit_characters_.size();
+}
+inline int CompletionItem::commit_characters_size() const {
+  return _internal_commit_characters_size();
+}
+inline void CompletionItem::clear_commit_characters() {
+  commit_characters_.Clear();
+}
+inline std::string* CompletionItem::add_commit_characters() {
+  std::string* _s = _internal_add_commit_characters();
+  // @@protoc_insertion_point(field_add_mutable:io.deephaven.proto.backplane.script.grpc.CompletionItem.commit_characters)
+  return _s;
+}
+inline const std::string& CompletionItem::_internal_commit_characters(int index) const {
+  return commit_characters_.Get(index);
+}
+inline const std::string& CompletionItem::commit_characters(int index) const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.CompletionItem.commit_characters)
+  return _internal_commit_characters(index);
+}
+inline std::string* CompletionItem::mutable_commit_characters(int index) {
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.CompletionItem.commit_characters)
+  return commit_characters_.Mutable(index);
 }
-
-// -------------------------------------------------------------------
-
-// CloseDocumentRequest
-
-// .io.deephaven.proto.backplane.grpc.Ticket console_id = 1;
-inline bool CloseDocumentRequest::_internal_has_console_id() const {
-  return this != internal_default_instance() && console_id_ != nullptr;
+inline void CompletionItem::set_commit_characters(int index, const std::string& value) {
+  commit_characters_.Mutable(index)->assign(value);
+  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.CompletionItem.commit_characters)
 }
-inline bool CloseDocumentRequest::has_console_id() const {
-  return _internal_has_console_id();
+inline void CompletionItem::set_commit_characters(int index, std::string&& value) {
+  commit_characters_.Mutable(index)->assign(std::move(value));
+  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.CompletionItem.commit_characters)
 }
-inline const ::io::deephaven::proto::backplane::grpc::Ticket& CloseDocumentRequest::_internal_console_id() const {
-  const ::io::deephaven::proto::backplane::grpc::Ticket* p = console_id_;
-  return p != nullptr ? *p : reinterpret_cast<const ::io::deephaven::proto::backplane::grpc::Ticket&>(
-      ::io::deephaven::proto::backplane::grpc::_Ticket_default_instance_);
+inline void CompletionItem::set_commit_characters(int index, const char* value) {
+  GOOGLE_DCHECK(value != nullptr);
+  commit_characters_.Mutable(index)->assign(value);
+  // @@protoc_insertion_point(field_set_char:io.deephaven.proto.backplane.script.grpc.CompletionItem.commit_characters)
 }
-inline const ::io::deephaven::proto::backplane::grpc::Ticket& CloseDocumentRequest::console_id() const {
-  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.CloseDocumentRequest.console_id)
-  return _internal_console_id();
+inline void CompletionItem::set_commit_characters(int index, const char* value, size_t size) {
+  commit_characters_.Mutable(index)->assign(
+    reinterpret_cast<const char*>(value), size);
+  // @@protoc_insertion_point(field_set_pointer:io.deephaven.proto.backplane.script.grpc.CompletionItem.commit_characters)
 }
-inline void CloseDocumentRequest::unsafe_arena_set_allocated_console_id(
-    ::io::deephaven::proto::backplane::grpc::Ticket* console_id) {
-  if (GetArenaForAllocation() == nullptr) {
-    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(console_id_);
-  }
-  console_id_ = console_id;
-  if (console_id) {
-    
-  } else {
-    
-  }
-  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:io.deephaven.proto.backplane.script.grpc.CloseDocumentRequest.console_id)
+inline std::string* CompletionItem::_internal_add_commit_characters() {
+  return commit_characters_.Add();
 }
-inline ::io::deephaven::proto::backplane::grpc::Ticket* CloseDocumentRequest::release_console_id() {
-  
-  ::io::deephaven::proto::backplane::grpc::Ticket* temp = console_id_;
-  console_id_ = nullptr;
-#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
-  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
-  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
-  if (GetArenaForAllocation() == nullptr) { delete old; }
-#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
-  if (GetArenaForAllocation() != nullptr) {
-    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
-  }
-#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
-  return temp;
+inline void CompletionItem::add_commit_characters(const std::string& value) {
+  commit_characters_.Add()->assign(value);
+  // @@protoc_insertion_point(field_add:io.deephaven.proto.backplane.script.grpc.CompletionItem.commit_characters)
 }
-inline ::io::deephaven::proto::backplane::grpc::Ticket* CloseDocumentRequest::unsafe_arena_release_console_id() {
-  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.CloseDocumentRequest.console_id)
-  
-  ::io::deephaven::proto::backplane::grpc::Ticket* temp = console_id_;
-  console_id_ = nullptr;
-  return temp;
+inline void CompletionItem::add_commit_characters(std::string&& value) {
+  commit_characters_.Add(std::move(value));
+  // @@protoc_insertion_point(field_add:io.deephaven.proto.backplane.script.grpc.CompletionItem.commit_characters)
 }
-inline ::io::deephaven::proto::backplane::grpc::Ticket* CloseDocumentRequest::_internal_mutable_console_id() {
-  
-  if (console_id_ == nullptr) {
-    auto* p = CreateMaybeMessage<::io::deephaven::proto::backplane::grpc::Ticket>(GetArenaForAllocation());
-    console_id_ = p;
-  }
-  return console_id_;
+inline void CompletionItem::add_commit_characters(const char* value) {
+  GOOGLE_DCHECK(value != nullptr);
+  commit_characters_.Add()->assign(value);
+  // @@protoc_insertion_point(field_add_char:io.deephaven.proto.backplane.script.grpc.CompletionItem.commit_characters)
 }
-inline ::io::deephaven::proto::backplane::grpc::Ticket* CloseDocumentRequest::mutable_console_id() {
-  ::io::deephaven::proto::backplane::grpc::Ticket* _msg = _internal_mutable_console_id();
-  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.CloseDocumentRequest.console_id)
-  return _msg;
+inline void CompletionItem::add_commit_characters(const char* value, size_t size) {
+  commit_characters_.Add()->assign(reinterpret_cast<const char*>(value), size);
+  // @@protoc_insertion_point(field_add_pointer:io.deephaven.proto.backplane.script.grpc.CompletionItem.commit_characters)
 }
-inline void CloseDocumentRequest::set_allocated_console_id(::io::deephaven::proto::backplane::grpc::Ticket* console_id) {
-  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
-  if (message_arena == nullptr) {
-    delete reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::MessageLite*>(console_id_);
-  }
-  if (console_id) {
-    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
-        ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(
-                reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(console_id));
-    if (message_arena != submessage_arena) {
-      console_id = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
-          message_arena, console_id, submessage_arena);
-    }
-    
-  } else {
-    
-  }
-  console_id_ = console_id;
-  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.CloseDocumentRequest.console_id)
+inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>&
+CompletionItem::commit_characters() const {
+  // @@protoc_insertion_point(field_list:io.deephaven.proto.backplane.script.grpc.CompletionItem.commit_characters)
+  return commit_characters_;
+}
+inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>*
+CompletionItem::mutable_commit_characters() {
+  // @@protoc_insertion_point(field_mutable_list:io.deephaven.proto.backplane.script.grpc.CompletionItem.commit_characters)
+  return &commit_characters_;
 }
 
-// .io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier text_document = 2;
-inline bool CloseDocumentRequest::_internal_has_text_document() const {
-  return this != internal_default_instance() && text_document_ != nullptr;
+// .io.deephaven.proto.backplane.script.grpc.MarkupContent documentation = 15;
+inline bool CompletionItem::_internal_has_documentation() const {
+  return this != internal_default_instance() && documentation_ != nullptr;
 }
-inline bool CloseDocumentRequest::has_text_document() const {
-  return _internal_has_text_document();
+inline bool CompletionItem::has_documentation() const {
+  return _internal_has_documentation();
 }
-inline void CloseDocumentRequest::clear_text_document() {
-  if (GetArenaForAllocation() == nullptr && text_document_ != nullptr) {
-    delete text_document_;
+inline void CompletionItem::clear_documentation() {
+  if (GetArenaForAllocation() == nullptr && documentation_ != nullptr) {
+    delete documentation_;
   }
-  text_document_ = nullptr;
+  documentation_ = nullptr;
 }
-inline const ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier& CloseDocumentRequest::_internal_text_document() const {
-  const ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* p = text_document_;
-  return p != nullptr ? *p : reinterpret_cast<const ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier&>(
-      ::io::deephaven::proto::backplane::script::grpc::_VersionedTextDocumentIdentifier_default_instance_);
+inline const ::io::deephaven::proto::backplane::script::grpc::MarkupContent& CompletionItem::_internal_documentation() const {
+  const ::io::deephaven::proto::backplane::script::grpc::MarkupContent* p = documentation_;
+  return p != nullptr ? *p : reinterpret_cast<const ::io::deephaven::proto::backplane::script::grpc::MarkupContent&>(
+      ::io::deephaven::proto::backplane::script::grpc::_MarkupContent_default_instance_);
 }
-inline const ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier& CloseDocumentRequest::text_document() const {
-  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.CloseDocumentRequest.text_document)
-  return _internal_text_document();
+inline const ::io::deephaven::proto::backplane::script::grpc::MarkupContent& CompletionItem::documentation() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.CompletionItem.documentation)
+  return _internal_documentation();
 }
-inline void CloseDocumentRequest::unsafe_arena_set_allocated_text_document(
-    ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* text_document) {
+inline void CompletionItem::unsafe_arena_set_allocated_documentation(
+    ::io::deephaven::proto::backplane::script::grpc::MarkupContent* documentation) {
   if (GetArenaForAllocation() == nullptr) {
-    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(text_document_);
+    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(documentation_);
   }
-  text_document_ = text_document;
-  if (text_document) {
+  documentation_ = documentation;
+  if (documentation) {
     
   } else {
     
   }
-  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:io.deephaven.proto.backplane.script.grpc.CloseDocumentRequest.text_document)
+  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:io.deephaven.proto.backplane.script.grpc.CompletionItem.documentation)
 }
-inline ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* CloseDocumentRequest::release_text_document() {
+inline ::io::deephaven::proto::backplane::script::grpc::MarkupContent* CompletionItem::release_documentation() {
   
-  ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* temp = text_document_;
-  text_document_ = nullptr;
+  ::io::deephaven::proto::backplane::script::grpc::MarkupContent* temp = documentation_;
+  documentation_ = nullptr;
 #ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
   auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
   temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
@@ -11836,73 +17675,73 @@ inline ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIde
 #endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
   return temp;
 }
-inline ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* CloseDocumentRequest::unsafe_arena_release_text_document() {
-  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.CloseDocumentRequest.text_document)
+inline ::io::deephaven::proto::backplane::script::grpc::MarkupContent* CompletionItem::unsafe_arena_release_documentation() {
+  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.CompletionItem.documentation)
   
-  ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* temp = text_document_;
-  text_document_ = nullptr;
+  ::io::deephaven::proto::backplane::script::grpc::MarkupContent* temp = documentation_;
+  documentation_ = nullptr;
   return temp;
 }
-inline ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* CloseDocumentRequest::_internal_mutable_text_document() {
+inline ::io::deephaven::proto::backplane::script::grpc::MarkupContent* CompletionItem::_internal_mutable_documentation() {
   
-  if (text_document_ == nullptr) {
-    auto* p = CreateMaybeMessage<::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier>(GetArenaForAllocation());
-    text_document_ = p;
+  if (documentation_ == nullptr) {
+    auto* p = CreateMaybeMessage<::io::deephaven::proto::backplane::script::grpc::MarkupContent>(GetArenaForAllocation());
+    documentation_ = p;
   }
-  return text_document_;
+  return documentation_;
 }
-inline ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* CloseDocumentRequest::mutable_text_document() {
-  ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* _msg = _internal_mutable_text_document();
-  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.CloseDocumentRequest.text_document)
+inline ::io::deephaven::proto::backplane::script::grpc::MarkupContent* CompletionItem::mutable_documentation() {
+  ::io::deephaven::proto::backplane::script::grpc::MarkupContent* _msg = _internal_mutable_documentation();
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.CompletionItem.documentation)
   return _msg;
 }
-inline void CloseDocumentRequest::set_allocated_text_document(::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* text_document) {
+inline void CompletionItem::set_allocated_documentation(::io::deephaven::proto::backplane::script::grpc::MarkupContent* documentation) {
   ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
   if (message_arena == nullptr) {
-    delete text_document_;
+    delete documentation_;
   }
-  if (text_document) {
+  if (documentation) {
     ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
-        ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(text_document);
+        ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(documentation);
     if (message_arena != submessage_arena) {
-      text_document = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
-          message_arena, text_document, submessage_arena);
+      documentation = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
+          message_arena, documentation, submessage_arena);
     }
     
   } else {
     
   }
-  text_document_ = text_document;
-  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.CloseDocumentRequest.text_document)
+  documentation_ = documentation;
+  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.CompletionItem.documentation)
 }
 
 // -------------------------------------------------------------------
 
-// ChangeDocumentRequest_TextDocumentContentChangeEvent
+// TextEdit
 
 // .io.deephaven.proto.backplane.script.grpc.DocumentRange range = 1;
-inline bool ChangeDocumentRequest_TextDocumentContentChangeEvent::_internal_has_range() const {
+inline bool TextEdit::_internal_has_range() const {
   return this != internal_default_instance() && range_ != nullptr;
 }
-inline bool ChangeDocumentRequest_TextDocumentContentChangeEvent::has_range() const {
+inline bool TextEdit::has_range() const {
   return _internal_has_range();
 }
-inline void ChangeDocumentRequest_TextDocumentContentChangeEvent::clear_range() {
+inline void TextEdit::clear_range() {
   if (GetArenaForAllocation() == nullptr && range_ != nullptr) {
     delete range_;
   }
   range_ = nullptr;
 }
-inline const ::io::deephaven::proto::backplane::script::grpc::DocumentRange& ChangeDocumentRequest_TextDocumentContentChangeEvent::_internal_range() const {
+inline const ::io::deephaven::proto::backplane::script::grpc::DocumentRange& TextEdit::_internal_range() const {
   const ::io::deephaven::proto::backplane::script::grpc::DocumentRange* p = range_;
   return p != nullptr ? *p : reinterpret_cast<const ::io::deephaven::proto::backplane::script::grpc::DocumentRange&>(
       ::io::deephaven::proto::backplane::script::grpc::_DocumentRange_default_instance_);
 }
-inline const ::io::deephaven::proto::backplane::script::grpc::DocumentRange& ChangeDocumentRequest_TextDocumentContentChangeEvent::range() const {
-  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.TextDocumentContentChangeEvent.range)
+inline const ::io::deephaven::proto::backplane::script::grpc::DocumentRange& TextEdit::range() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.TextEdit.range)
   return _internal_range();
 }
-inline void ChangeDocumentRequest_TextDocumentContentChangeEvent::unsafe_arena_set_allocated_range(
+inline void TextEdit::unsafe_arena_set_allocated_range(
     ::io::deephaven::proto::backplane::script::grpc::DocumentRange* range) {
   if (GetArenaForAllocation() == nullptr) {
     delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(range_);
@@ -11913,9 +17752,9 @@ inline void ChangeDocumentRequest_TextDocumentContentChangeEvent::unsafe_arena_s
   } else {
     
   }
-  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.TextDocumentContentChangeEvent.range)
+  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:io.deephaven.proto.backplane.script.grpc.TextEdit.range)
 }
-inline ::io::deephaven::proto::backplane::script::grpc::DocumentRange* ChangeDocumentRequest_TextDocumentContentChangeEvent::release_range() {
+inline ::io::deephaven::proto::backplane::script::grpc::DocumentRange* TextEdit::release_range() {
   
   ::io::deephaven::proto::backplane::script::grpc::DocumentRange* temp = range_;
   range_ = nullptr;
@@ -11930,14 +17769,14 @@ inline ::io::deephaven::proto::backplane::script::grpc::DocumentRange* ChangeDoc
 #endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
   return temp;
 }
-inline ::io::deephaven::proto::backplane::script::grpc::DocumentRange* ChangeDocumentRequest_TextDocumentContentChangeEvent::unsafe_arena_release_range() {
-  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.TextDocumentContentChangeEvent.range)
+inline ::io::deephaven::proto::backplane::script::grpc::DocumentRange* TextEdit::unsafe_arena_release_range() {
+  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.TextEdit.range)
   
   ::io::deephaven::proto::backplane::script::grpc::DocumentRange* temp = range_;
   range_ = nullptr;
   return temp;
 }
-inline ::io::deephaven::proto::backplane::script::grpc::DocumentRange* ChangeDocumentRequest_TextDocumentContentChangeEvent::_internal_mutable_range() {
+inline ::io::deephaven::proto::backplane::script::grpc::DocumentRange* TextEdit::_internal_mutable_range() {
   
   if (range_ == nullptr) {
     auto* p = CreateMaybeMessage<::io::deephaven::proto::backplane::script::grpc::DocumentRange>(GetArenaForAllocation());
@@ -11945,12 +17784,12 @@ inline ::io::deephaven::proto::backplane::script::grpc::DocumentRange* ChangeDoc
   }
   return range_;
 }
-inline ::io::deephaven::proto::backplane::script::grpc::DocumentRange* ChangeDocumentRequest_TextDocumentContentChangeEvent::mutable_range() {
+inline ::io::deephaven::proto::backplane::script::grpc::DocumentRange* TextEdit::mutable_range() {
   ::io::deephaven::proto::backplane::script::grpc::DocumentRange* _msg = _internal_mutable_range();
-  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.TextDocumentContentChangeEvent.range)
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.TextEdit.range)
   return _msg;
 }
-inline void ChangeDocumentRequest_TextDocumentContentChangeEvent::set_allocated_range(::io::deephaven::proto::backplane::script::grpc::DocumentRange* range) {
+inline void TextEdit::set_allocated_range(::io::deephaven::proto::backplane::script::grpc::DocumentRange* range) {
   ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
   if (message_arena == nullptr) {
     delete range_;
@@ -11967,65 +17806,45 @@ inline void ChangeDocumentRequest_TextDocumentContentChangeEvent::set_allocated_
     
   }
   range_ = range;
-  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.TextDocumentContentChangeEvent.range)
-}
-
-// int32 range_length = 2;
-inline void ChangeDocumentRequest_TextDocumentContentChangeEvent::clear_range_length() {
-  range_length_ = 0;
-}
-inline int32_t ChangeDocumentRequest_TextDocumentContentChangeEvent::_internal_range_length() const {
-  return range_length_;
-}
-inline int32_t ChangeDocumentRequest_TextDocumentContentChangeEvent::range_length() const {
-  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.TextDocumentContentChangeEvent.range_length)
-  return _internal_range_length();
-}
-inline void ChangeDocumentRequest_TextDocumentContentChangeEvent::_internal_set_range_length(int32_t value) {
-  
-  range_length_ = value;
-}
-inline void ChangeDocumentRequest_TextDocumentContentChangeEvent::set_range_length(int32_t value) {
-  _internal_set_range_length(value);
-  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.TextDocumentContentChangeEvent.range_length)
+  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.TextEdit.range)
 }
 
-// string text = 3;
-inline void ChangeDocumentRequest_TextDocumentContentChangeEvent::clear_text() {
+// string text = 2;
+inline void TextEdit::clear_text() {
   text_.ClearToEmpty();
 }
-inline const std::string& ChangeDocumentRequest_TextDocumentContentChangeEvent::text() const {
-  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.TextDocumentContentChangeEvent.text)
+inline const std::string& TextEdit::text() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.TextEdit.text)
   return _internal_text();
 }
 template <typename ArgT0, typename... ArgT>
 inline PROTOBUF_ALWAYS_INLINE
-void ChangeDocumentRequest_TextDocumentContentChangeEvent::set_text(ArgT0&& arg0, ArgT... args) {
+void TextEdit::set_text(ArgT0&& arg0, ArgT... args) {
  
  text_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation());
-  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.TextDocumentContentChangeEvent.text)
+  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.TextEdit.text)
 }
-inline std::string* ChangeDocumentRequest_TextDocumentContentChangeEvent::mutable_text() {
+inline std::string* TextEdit::mutable_text() {
   std::string* _s = _internal_mutable_text();
-  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.TextDocumentContentChangeEvent.text)
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.TextEdit.text)
   return _s;
 }
-inline const std::string& ChangeDocumentRequest_TextDocumentContentChangeEvent::_internal_text() const {
+inline const std::string& TextEdit::_internal_text() const {
   return text_.Get();
 }
-inline void ChangeDocumentRequest_TextDocumentContentChangeEvent::_internal_set_text(const std::string& value) {
+inline void TextEdit::_internal_set_text(const std::string& value) {
   
   text_.Set(value, GetArenaForAllocation());
 }
-inline std::string* ChangeDocumentRequest_TextDocumentContentChangeEvent::_internal_mutable_text() {
+inline std::string* TextEdit::_internal_mutable_text() {
   
   return text_.Mutable(GetArenaForAllocation());
 }
-inline std::string* ChangeDocumentRequest_TextDocumentContentChangeEvent::release_text() {
-  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.TextDocumentContentChangeEvent.text)
+inline std::string* TextEdit::release_text() {
+  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.TextEdit.text)
   return text_.Release();
 }
-inline void ChangeDocumentRequest_TextDocumentContentChangeEvent::set_allocated_text(std::string* text) {
+inline void TextEdit::set_allocated_text(std::string* text) {
   if (text != nullptr) {
     
   } else {
@@ -12037,46 +17856,52 @@ inline void ChangeDocumentRequest_TextDocumentContentChangeEvent::set_allocated_
     text_.Set("", GetArenaForAllocation());
   }
 #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
-  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.TextDocumentContentChangeEvent.text)
+  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.TextEdit.text)
 }
 
 // -------------------------------------------------------------------
 
-// ChangeDocumentRequest
+// GetSignatureHelpRequest
 
-// .io.deephaven.proto.backplane.grpc.Ticket console_id = 1;
-inline bool ChangeDocumentRequest::_internal_has_console_id() const {
-  return this != internal_default_instance() && console_id_ != nullptr;
+// .io.deephaven.proto.backplane.script.grpc.SignatureHelpContext context = 1;
+inline bool GetSignatureHelpRequest::_internal_has_context() const {
+  return this != internal_default_instance() && context_ != nullptr;
 }
-inline bool ChangeDocumentRequest::has_console_id() const {
-  return _internal_has_console_id();
+inline bool GetSignatureHelpRequest::has_context() const {
+  return _internal_has_context();
 }
-inline const ::io::deephaven::proto::backplane::grpc::Ticket& ChangeDocumentRequest::_internal_console_id() const {
-  const ::io::deephaven::proto::backplane::grpc::Ticket* p = console_id_;
-  return p != nullptr ? *p : reinterpret_cast<const ::io::deephaven::proto::backplane::grpc::Ticket&>(
-      ::io::deephaven::proto::backplane::grpc::_Ticket_default_instance_);
+inline void GetSignatureHelpRequest::clear_context() {
+  if (GetArenaForAllocation() == nullptr && context_ != nullptr) {
+    delete context_;
+  }
+  context_ = nullptr;
 }
-inline const ::io::deephaven::proto::backplane::grpc::Ticket& ChangeDocumentRequest::console_id() const {
-  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.console_id)
-  return _internal_console_id();
+inline const ::io::deephaven::proto::backplane::script::grpc::SignatureHelpContext& GetSignatureHelpRequest::_internal_context() const {
+  const ::io::deephaven::proto::backplane::script::grpc::SignatureHelpContext* p = context_;
+  return p != nullptr ? *p : reinterpret_cast<const ::io::deephaven::proto::backplane::script::grpc::SignatureHelpContext&>(
+      ::io::deephaven::proto::backplane::script::grpc::_SignatureHelpContext_default_instance_);
 }
-inline void ChangeDocumentRequest::unsafe_arena_set_allocated_console_id(
-    ::io::deephaven::proto::backplane::grpc::Ticket* console_id) {
+inline const ::io::deephaven::proto::backplane::script::grpc::SignatureHelpContext& GetSignatureHelpRequest::context() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.GetSignatureHelpRequest.context)
+  return _internal_context();
+}
+inline void GetSignatureHelpRequest::unsafe_arena_set_allocated_context(
+    ::io::deephaven::proto::backplane::script::grpc::SignatureHelpContext* context) {
   if (GetArenaForAllocation() == nullptr) {
-    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(console_id_);
+    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(context_);
   }
-  console_id_ = console_id;
-  if (console_id) {
+  context_ = context;
+  if (context) {
     
   } else {
     
   }
-  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.console_id)
+  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:io.deephaven.proto.backplane.script.grpc.GetSignatureHelpRequest.context)
 }
-inline ::io::deephaven::proto::backplane::grpc::Ticket* ChangeDocumentRequest::release_console_id() {
+inline ::io::deephaven::proto::backplane::script::grpc::SignatureHelpContext* GetSignatureHelpRequest::release_context() {
   
-  ::io::deephaven::proto::backplane::grpc::Ticket* temp = console_id_;
-  console_id_ = nullptr;
+  ::io::deephaven::proto::backplane::script::grpc::SignatureHelpContext* temp = context_;
+  context_ = nullptr;
 #ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
   auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
   temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
@@ -12088,70 +17913,69 @@ inline ::io::deephaven::proto::backplane::grpc::Ticket* ChangeDocumentRequest::r
 #endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
   return temp;
 }
-inline ::io::deephaven::proto::backplane::grpc::Ticket* ChangeDocumentRequest::unsafe_arena_release_console_id() {
-  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.console_id)
+inline ::io::deephaven::proto::backplane::script::grpc::SignatureHelpContext* GetSignatureHelpRequest::unsafe_arena_release_context() {
+  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.GetSignatureHelpRequest.context)
   
-  ::io::deephaven::proto::backplane::grpc::Ticket* temp = console_id_;
-  console_id_ = nullptr;
+  ::io::deephaven::proto::backplane::script::grpc::SignatureHelpContext* temp = context_;
+  context_ = nullptr;
   return temp;
 }
-inline ::io::deephaven::proto::backplane::grpc::Ticket* ChangeDocumentRequest::_internal_mutable_console_id() {
+inline ::io::deephaven::proto::backplane::script::grpc::SignatureHelpContext* GetSignatureHelpRequest::_internal_mutable_context() {
   
-  if (console_id_ == nullptr) {
-    auto* p = CreateMaybeMessage<::io::deephaven::proto::backplane::grpc::Ticket>(GetArenaForAllocation());
-    console_id_ = p;
+  if (context_ == nullptr) {
+    auto* p = CreateMaybeMessage<::io::deephaven::proto::backplane::script::grpc::SignatureHelpContext>(GetArenaForAllocation());
+    context_ = p;
   }
-  return console_id_;
+  return context_;
 }
-inline ::io::deephaven::proto::backplane::grpc::Ticket* ChangeDocumentRequest::mutable_console_id() {
-  ::io::deephaven::proto::backplane::grpc::Ticket* _msg = _internal_mutable_console_id();
-  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.console_id)
+inline ::io::deephaven::proto::backplane::script::grpc::SignatureHelpContext* GetSignatureHelpRequest::mutable_context() {
+  ::io::deephaven::proto::backplane::script::grpc::SignatureHelpContext* _msg = _internal_mutable_context();
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.GetSignatureHelpRequest.context)
   return _msg;
 }
-inline void ChangeDocumentRequest::set_allocated_console_id(::io::deephaven::proto::backplane::grpc::Ticket* console_id) {
+inline void GetSignatureHelpRequest::set_allocated_context(::io::deephaven::proto::backplane::script::grpc::SignatureHelpContext* context) {
   ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
   if (message_arena == nullptr) {
-    delete reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::MessageLite*>(console_id_);
+    delete context_;
   }
-  if (console_id) {
+  if (context) {
     ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
-        ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(
-                reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(console_id));
+        ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(context);
     if (message_arena != submessage_arena) {
-      console_id = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
-          message_arena, console_id, submessage_arena);
+      context = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
+          message_arena, context, submessage_arena);
     }
     
   } else {
     
   }
-  console_id_ = console_id;
-  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.console_id)
+  context_ = context;
+  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.GetSignatureHelpRequest.context)
 }
 
 // .io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier text_document = 2;
-inline bool ChangeDocumentRequest::_internal_has_text_document() const {
+inline bool GetSignatureHelpRequest::_internal_has_text_document() const {
   return this != internal_default_instance() && text_document_ != nullptr;
 }
-inline bool ChangeDocumentRequest::has_text_document() const {
+inline bool GetSignatureHelpRequest::has_text_document() const {
   return _internal_has_text_document();
 }
-inline void ChangeDocumentRequest::clear_text_document() {
+inline void GetSignatureHelpRequest::clear_text_document() {
   if (GetArenaForAllocation() == nullptr && text_document_ != nullptr) {
     delete text_document_;
   }
   text_document_ = nullptr;
 }
-inline const ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier& ChangeDocumentRequest::_internal_text_document() const {
+inline const ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier& GetSignatureHelpRequest::_internal_text_document() const {
   const ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* p = text_document_;
   return p != nullptr ? *p : reinterpret_cast<const ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier&>(
       ::io::deephaven::proto::backplane::script::grpc::_VersionedTextDocumentIdentifier_default_instance_);
 }
-inline const ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier& ChangeDocumentRequest::text_document() const {
-  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.text_document)
+inline const ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier& GetSignatureHelpRequest::text_document() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.GetSignatureHelpRequest.text_document)
   return _internal_text_document();
 }
-inline void ChangeDocumentRequest::unsafe_arena_set_allocated_text_document(
+inline void GetSignatureHelpRequest::unsafe_arena_set_allocated_text_document(
     ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* text_document) {
   if (GetArenaForAllocation() == nullptr) {
     delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(text_document_);
@@ -12162,9 +17986,9 @@ inline void ChangeDocumentRequest::unsafe_arena_set_allocated_text_document(
   } else {
     
   }
-  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.text_document)
+  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:io.deephaven.proto.backplane.script.grpc.GetSignatureHelpRequest.text_document)
 }
-inline ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* ChangeDocumentRequest::release_text_document() {
+inline ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* GetSignatureHelpRequest::release_text_document() {
   
   ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* temp = text_document_;
   text_document_ = nullptr;
@@ -12179,14 +18003,14 @@ inline ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIde
 #endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
   return temp;
 }
-inline ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* ChangeDocumentRequest::unsafe_arena_release_text_document() {
-  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.text_document)
+inline ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* GetSignatureHelpRequest::unsafe_arena_release_text_document() {
+  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.GetSignatureHelpRequest.text_document)
   
   ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* temp = text_document_;
   text_document_ = nullptr;
   return temp;
 }
-inline ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* ChangeDocumentRequest::_internal_mutable_text_document() {
+inline ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* GetSignatureHelpRequest::_internal_mutable_text_document() {
   
   if (text_document_ == nullptr) {
     auto* p = CreateMaybeMessage<::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier>(GetArenaForAllocation());
@@ -12194,12 +18018,12 @@ inline ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIde
   }
   return text_document_;
 }
-inline ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* ChangeDocumentRequest::mutable_text_document() {
+inline ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* GetSignatureHelpRequest::mutable_text_document() {
   ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* _msg = _internal_mutable_text_document();
-  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.text_document)
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.GetSignatureHelpRequest.text_document)
   return _msg;
 }
-inline void ChangeDocumentRequest::set_allocated_text_document(::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* text_document) {
+inline void GetSignatureHelpRequest::set_allocated_text_document(::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* text_document) {
   ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
   if (message_arena == nullptr) {
     delete text_document_;
@@ -12216,92 +18040,48 @@ inline void ChangeDocumentRequest::set_allocated_text_document(::io::deephaven::
     
   }
   text_document_ = text_document;
-  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.text_document)
-}
-
-// repeated .io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.TextDocumentContentChangeEvent content_changes = 3;
-inline int ChangeDocumentRequest::_internal_content_changes_size() const {
-  return content_changes_.size();
-}
-inline int ChangeDocumentRequest::content_changes_size() const {
-  return _internal_content_changes_size();
-}
-inline void ChangeDocumentRequest::clear_content_changes() {
-  content_changes_.Clear();
-}
-inline ::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest_TextDocumentContentChangeEvent* ChangeDocumentRequest::mutable_content_changes(int index) {
-  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.content_changes)
-  return content_changes_.Mutable(index);
-}
-inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest_TextDocumentContentChangeEvent >*
-ChangeDocumentRequest::mutable_content_changes() {
-  // @@protoc_insertion_point(field_mutable_list:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.content_changes)
-  return &content_changes_;
-}
-inline const ::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest_TextDocumentContentChangeEvent& ChangeDocumentRequest::_internal_content_changes(int index) const {
-  return content_changes_.Get(index);
-}
-inline const ::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest_TextDocumentContentChangeEvent& ChangeDocumentRequest::content_changes(int index) const {
-  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.content_changes)
-  return _internal_content_changes(index);
-}
-inline ::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest_TextDocumentContentChangeEvent* ChangeDocumentRequest::_internal_add_content_changes() {
-  return content_changes_.Add();
-}
-inline ::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest_TextDocumentContentChangeEvent* ChangeDocumentRequest::add_content_changes() {
-  ::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest_TextDocumentContentChangeEvent* _add = _internal_add_content_changes();
-  // @@protoc_insertion_point(field_add:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.content_changes)
-  return _add;
-}
-inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::ChangeDocumentRequest_TextDocumentContentChangeEvent >&
-ChangeDocumentRequest::content_changes() const {
-  // @@protoc_insertion_point(field_list:io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.content_changes)
-  return content_changes_;
+  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.GetSignatureHelpRequest.text_document)
 }
 
-// -------------------------------------------------------------------
-
-// DocumentRange
-
-// .io.deephaven.proto.backplane.script.grpc.Position start = 1;
-inline bool DocumentRange::_internal_has_start() const {
-  return this != internal_default_instance() && start_ != nullptr;
+// .io.deephaven.proto.backplane.script.grpc.Position position = 3;
+inline bool GetSignatureHelpRequest::_internal_has_position() const {
+  return this != internal_default_instance() && position_ != nullptr;
 }
-inline bool DocumentRange::has_start() const {
-  return _internal_has_start();
+inline bool GetSignatureHelpRequest::has_position() const {
+  return _internal_has_position();
 }
-inline void DocumentRange::clear_start() {
-  if (GetArenaForAllocation() == nullptr && start_ != nullptr) {
-    delete start_;
+inline void GetSignatureHelpRequest::clear_position() {
+  if (GetArenaForAllocation() == nullptr && position_ != nullptr) {
+    delete position_;
   }
-  start_ = nullptr;
+  position_ = nullptr;
 }
-inline const ::io::deephaven::proto::backplane::script::grpc::Position& DocumentRange::_internal_start() const {
-  const ::io::deephaven::proto::backplane::script::grpc::Position* p = start_;
+inline const ::io::deephaven::proto::backplane::script::grpc::Position& GetSignatureHelpRequest::_internal_position() const {
+  const ::io::deephaven::proto::backplane::script::grpc::Position* p = position_;
   return p != nullptr ? *p : reinterpret_cast<const ::io::deephaven::proto::backplane::script::grpc::Position&>(
       ::io::deephaven::proto::backplane::script::grpc::_Position_default_instance_);
 }
-inline const ::io::deephaven::proto::backplane::script::grpc::Position& DocumentRange::start() const {
-  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.DocumentRange.start)
-  return _internal_start();
+inline const ::io::deephaven::proto::backplane::script::grpc::Position& GetSignatureHelpRequest::position() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.GetSignatureHelpRequest.position)
+  return _internal_position();
 }
-inline void DocumentRange::unsafe_arena_set_allocated_start(
-    ::io::deephaven::proto::backplane::script::grpc::Position* start) {
+inline void GetSignatureHelpRequest::unsafe_arena_set_allocated_position(
+    ::io::deephaven::proto::backplane::script::grpc::Position* position) {
   if (GetArenaForAllocation() == nullptr) {
-    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(start_);
+    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(position_);
   }
-  start_ = start;
-  if (start) {
+  position_ = position;
+  if (position) {
     
   } else {
     
   }
-  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:io.deephaven.proto.backplane.script.grpc.DocumentRange.start)
+  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:io.deephaven.proto.backplane.script.grpc.GetSignatureHelpRequest.position)
 }
-inline ::io::deephaven::proto::backplane::script::grpc::Position* DocumentRange::release_start() {
+inline ::io::deephaven::proto::backplane::script::grpc::Position* GetSignatureHelpRequest::release_position() {
   
-  ::io::deephaven::proto::backplane::script::grpc::Position* temp = start_;
-  start_ = nullptr;
+  ::io::deephaven::proto::backplane::script::grpc::Position* temp = position_;
+  position_ = nullptr;
 #ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
   auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
   temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
@@ -12313,85 +18093,197 @@ inline ::io::deephaven::proto::backplane::script::grpc::Position* DocumentRange:
 #endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
   return temp;
 }
-inline ::io::deephaven::proto::backplane::script::grpc::Position* DocumentRange::unsafe_arena_release_start() {
-  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.DocumentRange.start)
+inline ::io::deephaven::proto::backplane::script::grpc::Position* GetSignatureHelpRequest::unsafe_arena_release_position() {
+  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.GetSignatureHelpRequest.position)
   
-  ::io::deephaven::proto::backplane::script::grpc::Position* temp = start_;
-  start_ = nullptr;
+  ::io::deephaven::proto::backplane::script::grpc::Position* temp = position_;
+  position_ = nullptr;
   return temp;
 }
-inline ::io::deephaven::proto::backplane::script::grpc::Position* DocumentRange::_internal_mutable_start() {
+inline ::io::deephaven::proto::backplane::script::grpc::Position* GetSignatureHelpRequest::_internal_mutable_position() {
   
-  if (start_ == nullptr) {
+  if (position_ == nullptr) {
     auto* p = CreateMaybeMessage<::io::deephaven::proto::backplane::script::grpc::Position>(GetArenaForAllocation());
-    start_ = p;
+    position_ = p;
   }
-  return start_;
+  return position_;
 }
-inline ::io::deephaven::proto::backplane::script::grpc::Position* DocumentRange::mutable_start() {
-  ::io::deephaven::proto::backplane::script::grpc::Position* _msg = _internal_mutable_start();
-  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.DocumentRange.start)
+inline ::io::deephaven::proto::backplane::script::grpc::Position* GetSignatureHelpRequest::mutable_position() {
+  ::io::deephaven::proto::backplane::script::grpc::Position* _msg = _internal_mutable_position();
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.GetSignatureHelpRequest.position)
   return _msg;
 }
-inline void DocumentRange::set_allocated_start(::io::deephaven::proto::backplane::script::grpc::Position* start) {
+inline void GetSignatureHelpRequest::set_allocated_position(::io::deephaven::proto::backplane::script::grpc::Position* position) {
   ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
   if (message_arena == nullptr) {
-    delete start_;
+    delete position_;
   }
-  if (start) {
+  if (position) {
     ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
-        ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(start);
+        ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(position);
     if (message_arena != submessage_arena) {
-      start = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
-          message_arena, start, submessage_arena);
+      position = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
+          message_arena, position, submessage_arena);
     }
     
   } else {
     
   }
-  start_ = start;
-  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.DocumentRange.start)
+  position_ = position;
+  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.GetSignatureHelpRequest.position)
+}
+
+// -------------------------------------------------------------------
+
+// SignatureHelpContext
+
+// int32 trigger_kind = 1;
+inline void SignatureHelpContext::clear_trigger_kind() {
+  trigger_kind_ = 0;
+}
+inline int32_t SignatureHelpContext::_internal_trigger_kind() const {
+  return trigger_kind_;
+}
+inline int32_t SignatureHelpContext::trigger_kind() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.SignatureHelpContext.trigger_kind)
+  return _internal_trigger_kind();
+}
+inline void SignatureHelpContext::_internal_set_trigger_kind(int32_t value) {
+  
+  trigger_kind_ = value;
+}
+inline void SignatureHelpContext::set_trigger_kind(int32_t value) {
+  _internal_set_trigger_kind(value);
+  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.SignatureHelpContext.trigger_kind)
+}
+
+// optional string trigger_character = 2;
+inline bool SignatureHelpContext::_internal_has_trigger_character() const {
+  bool value = (_has_bits_[0] & 0x00000001u) != 0;
+  return value;
+}
+inline bool SignatureHelpContext::has_trigger_character() const {
+  return _internal_has_trigger_character();
+}
+inline void SignatureHelpContext::clear_trigger_character() {
+  trigger_character_.ClearToEmpty();
+  _has_bits_[0] &= ~0x00000001u;
+}
+inline const std::string& SignatureHelpContext::trigger_character() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.SignatureHelpContext.trigger_character)
+  return _internal_trigger_character();
+}
+template <typename ArgT0, typename... ArgT>
+inline PROTOBUF_ALWAYS_INLINE
+void SignatureHelpContext::set_trigger_character(ArgT0&& arg0, ArgT... args) {
+ _has_bits_[0] |= 0x00000001u;
+ trigger_character_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation());
+  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.SignatureHelpContext.trigger_character)
+}
+inline std::string* SignatureHelpContext::mutable_trigger_character() {
+  std::string* _s = _internal_mutable_trigger_character();
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.SignatureHelpContext.trigger_character)
+  return _s;
+}
+inline const std::string& SignatureHelpContext::_internal_trigger_character() const {
+  return trigger_character_.Get();
+}
+inline void SignatureHelpContext::_internal_set_trigger_character(const std::string& value) {
+  _has_bits_[0] |= 0x00000001u;
+  trigger_character_.Set(value, GetArenaForAllocation());
+}
+inline std::string* SignatureHelpContext::_internal_mutable_trigger_character() {
+  _has_bits_[0] |= 0x00000001u;
+  return trigger_character_.Mutable(GetArenaForAllocation());
+}
+inline std::string* SignatureHelpContext::release_trigger_character() {
+  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.SignatureHelpContext.trigger_character)
+  if (!_internal_has_trigger_character()) {
+    return nullptr;
+  }
+  _has_bits_[0] &= ~0x00000001u;
+  auto* p = trigger_character_.Release();
+#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  if (trigger_character_.IsDefault()) {
+    trigger_character_.Set("", GetArenaForAllocation());
+  }
+#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  return p;
+}
+inline void SignatureHelpContext::set_allocated_trigger_character(std::string* trigger_character) {
+  if (trigger_character != nullptr) {
+    _has_bits_[0] |= 0x00000001u;
+  } else {
+    _has_bits_[0] &= ~0x00000001u;
+  }
+  trigger_character_.SetAllocated(trigger_character, GetArenaForAllocation());
+#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  if (trigger_character_.IsDefault()) {
+    trigger_character_.Set("", GetArenaForAllocation());
+  }
+#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.SignatureHelpContext.trigger_character)
+}
+
+// bool is_retrigger = 3;
+inline void SignatureHelpContext::clear_is_retrigger() {
+  is_retrigger_ = false;
+}
+inline bool SignatureHelpContext::_internal_is_retrigger() const {
+  return is_retrigger_;
+}
+inline bool SignatureHelpContext::is_retrigger() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.SignatureHelpContext.is_retrigger)
+  return _internal_is_retrigger();
+}
+inline void SignatureHelpContext::_internal_set_is_retrigger(bool value) {
+  
+  is_retrigger_ = value;
+}
+inline void SignatureHelpContext::set_is_retrigger(bool value) {
+  _internal_set_is_retrigger(value);
+  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.SignatureHelpContext.is_retrigger)
 }
 
-// .io.deephaven.proto.backplane.script.grpc.Position end = 2;
-inline bool DocumentRange::_internal_has_end() const {
-  return this != internal_default_instance() && end_ != nullptr;
+// .io.deephaven.proto.backplane.script.grpc.GetSignatureHelpResponse active_signature_help = 4;
+inline bool SignatureHelpContext::_internal_has_active_signature_help() const {
+  return this != internal_default_instance() && active_signature_help_ != nullptr;
 }
-inline bool DocumentRange::has_end() const {
-  return _internal_has_end();
+inline bool SignatureHelpContext::has_active_signature_help() const {
+  return _internal_has_active_signature_help();
 }
-inline void DocumentRange::clear_end() {
-  if (GetArenaForAllocation() == nullptr && end_ != nullptr) {
-    delete end_;
+inline void SignatureHelpContext::clear_active_signature_help() {
+  if (GetArenaForAllocation() == nullptr && active_signature_help_ != nullptr) {
+    delete active_signature_help_;
   }
-  end_ = nullptr;
+  active_signature_help_ = nullptr;
 }
-inline const ::io::deephaven::proto::backplane::script::grpc::Position& DocumentRange::_internal_end() const {
-  const ::io::deephaven::proto::backplane::script::grpc::Position* p = end_;
-  return p != nullptr ? *p : reinterpret_cast<const ::io::deephaven::proto::backplane::script::grpc::Position&>(
-      ::io::deephaven::proto::backplane::script::grpc::_Position_default_instance_);
+inline const ::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpResponse& SignatureHelpContext::_internal_active_signature_help() const {
+  const ::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpResponse* p = active_signature_help_;
+  return p != nullptr ? *p : reinterpret_cast<const ::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpResponse&>(
+      ::io::deephaven::proto::backplane::script::grpc::_GetSignatureHelpResponse_default_instance_);
 }
-inline const ::io::deephaven::proto::backplane::script::grpc::Position& DocumentRange::end() const {
-  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.DocumentRange.end)
-  return _internal_end();
+inline const ::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpResponse& SignatureHelpContext::active_signature_help() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.SignatureHelpContext.active_signature_help)
+  return _internal_active_signature_help();
 }
-inline void DocumentRange::unsafe_arena_set_allocated_end(
-    ::io::deephaven::proto::backplane::script::grpc::Position* end) {
+inline void SignatureHelpContext::unsafe_arena_set_allocated_active_signature_help(
+    ::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpResponse* active_signature_help) {
   if (GetArenaForAllocation() == nullptr) {
-    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(end_);
+    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(active_signature_help_);
   }
-  end_ = end;
-  if (end) {
+  active_signature_help_ = active_signature_help;
+  if (active_signature_help) {
     
   } else {
     
   }
-  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:io.deephaven.proto.backplane.script.grpc.DocumentRange.end)
+  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:io.deephaven.proto.backplane.script.grpc.SignatureHelpContext.active_signature_help)
 }
-inline ::io::deephaven::proto::backplane::script::grpc::Position* DocumentRange::release_end() {
+inline ::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpResponse* SignatureHelpContext::release_active_signature_help() {
   
-  ::io::deephaven::proto::backplane::script::grpc::Position* temp = end_;
-  end_ = nullptr;
+  ::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpResponse* temp = active_signature_help_;
+  active_signature_help_ = nullptr;
 #ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
   auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
   temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
@@ -12403,292 +18295,451 @@ inline ::io::deephaven::proto::backplane::script::grpc::Position* DocumentRange:
 #endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
   return temp;
 }
-inline ::io::deephaven::proto::backplane::script::grpc::Position* DocumentRange::unsafe_arena_release_end() {
-  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.DocumentRange.end)
+inline ::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpResponse* SignatureHelpContext::unsafe_arena_release_active_signature_help() {
+  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.SignatureHelpContext.active_signature_help)
   
-  ::io::deephaven::proto::backplane::script::grpc::Position* temp = end_;
-  end_ = nullptr;
+  ::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpResponse* temp = active_signature_help_;
+  active_signature_help_ = nullptr;
   return temp;
 }
-inline ::io::deephaven::proto::backplane::script::grpc::Position* DocumentRange::_internal_mutable_end() {
+inline ::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpResponse* SignatureHelpContext::_internal_mutable_active_signature_help() {
   
-  if (end_ == nullptr) {
-    auto* p = CreateMaybeMessage<::io::deephaven::proto::backplane::script::grpc::Position>(GetArenaForAllocation());
-    end_ = p;
+  if (active_signature_help_ == nullptr) {
+    auto* p = CreateMaybeMessage<::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpResponse>(GetArenaForAllocation());
+    active_signature_help_ = p;
   }
-  return end_;
+  return active_signature_help_;
 }
-inline ::io::deephaven::proto::backplane::script::grpc::Position* DocumentRange::mutable_end() {
-  ::io::deephaven::proto::backplane::script::grpc::Position* _msg = _internal_mutable_end();
-  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.DocumentRange.end)
+inline ::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpResponse* SignatureHelpContext::mutable_active_signature_help() {
+  ::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpResponse* _msg = _internal_mutable_active_signature_help();
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.SignatureHelpContext.active_signature_help)
   return _msg;
 }
-inline void DocumentRange::set_allocated_end(::io::deephaven::proto::backplane::script::grpc::Position* end) {
+inline void SignatureHelpContext::set_allocated_active_signature_help(::io::deephaven::proto::backplane::script::grpc::GetSignatureHelpResponse* active_signature_help) {
   ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
   if (message_arena == nullptr) {
-    delete end_;
+    delete active_signature_help_;
   }
-  if (end) {
+  if (active_signature_help) {
     ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
-        ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(end);
+        ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(active_signature_help);
     if (message_arena != submessage_arena) {
-      end = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
-          message_arena, end, submessage_arena);
+      active_signature_help = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
+          message_arena, active_signature_help, submessage_arena);
     }
     
   } else {
     
   }
-  end_ = end;
-  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.DocumentRange.end)
+  active_signature_help_ = active_signature_help;
+  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.SignatureHelpContext.active_signature_help)
 }
 
 // -------------------------------------------------------------------
 
-// VersionedTextDocumentIdentifier
+// GetSignatureHelpResponse
 
-// string uri = 1;
-inline void VersionedTextDocumentIdentifier::clear_uri() {
-  uri_.ClearToEmpty();
+// repeated .io.deephaven.proto.backplane.script.grpc.SignatureInformation signatures = 1;
+inline int GetSignatureHelpResponse::_internal_signatures_size() const {
+  return signatures_.size();
 }
-inline const std::string& VersionedTextDocumentIdentifier::uri() const {
-  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier.uri)
-  return _internal_uri();
+inline int GetSignatureHelpResponse::signatures_size() const {
+  return _internal_signatures_size();
+}
+inline void GetSignatureHelpResponse::clear_signatures() {
+  signatures_.Clear();
+}
+inline ::io::deephaven::proto::backplane::script::grpc::SignatureInformation* GetSignatureHelpResponse::mutable_signatures(int index) {
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.GetSignatureHelpResponse.signatures)
+  return signatures_.Mutable(index);
+}
+inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::SignatureInformation >*
+GetSignatureHelpResponse::mutable_signatures() {
+  // @@protoc_insertion_point(field_mutable_list:io.deephaven.proto.backplane.script.grpc.GetSignatureHelpResponse.signatures)
+  return &signatures_;
+}
+inline const ::io::deephaven::proto::backplane::script::grpc::SignatureInformation& GetSignatureHelpResponse::_internal_signatures(int index) const {
+  return signatures_.Get(index);
+}
+inline const ::io::deephaven::proto::backplane::script::grpc::SignatureInformation& GetSignatureHelpResponse::signatures(int index) const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.GetSignatureHelpResponse.signatures)
+  return _internal_signatures(index);
+}
+inline ::io::deephaven::proto::backplane::script::grpc::SignatureInformation* GetSignatureHelpResponse::_internal_add_signatures() {
+  return signatures_.Add();
+}
+inline ::io::deephaven::proto::backplane::script::grpc::SignatureInformation* GetSignatureHelpResponse::add_signatures() {
+  ::io::deephaven::proto::backplane::script::grpc::SignatureInformation* _add = _internal_add_signatures();
+  // @@protoc_insertion_point(field_add:io.deephaven.proto.backplane.script.grpc.GetSignatureHelpResponse.signatures)
+  return _add;
+}
+inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::SignatureInformation >&
+GetSignatureHelpResponse::signatures() const {
+  // @@protoc_insertion_point(field_list:io.deephaven.proto.backplane.script.grpc.GetSignatureHelpResponse.signatures)
+  return signatures_;
+}
+
+// optional int32 active_signature = 2;
+inline bool GetSignatureHelpResponse::_internal_has_active_signature() const {
+  bool value = (_has_bits_[0] & 0x00000001u) != 0;
+  return value;
+}
+inline bool GetSignatureHelpResponse::has_active_signature() const {
+  return _internal_has_active_signature();
+}
+inline void GetSignatureHelpResponse::clear_active_signature() {
+  active_signature_ = 0;
+  _has_bits_[0] &= ~0x00000001u;
+}
+inline int32_t GetSignatureHelpResponse::_internal_active_signature() const {
+  return active_signature_;
+}
+inline int32_t GetSignatureHelpResponse::active_signature() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.GetSignatureHelpResponse.active_signature)
+  return _internal_active_signature();
+}
+inline void GetSignatureHelpResponse::_internal_set_active_signature(int32_t value) {
+  _has_bits_[0] |= 0x00000001u;
+  active_signature_ = value;
+}
+inline void GetSignatureHelpResponse::set_active_signature(int32_t value) {
+  _internal_set_active_signature(value);
+  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.GetSignatureHelpResponse.active_signature)
+}
+
+// optional int32 active_parameter = 3;
+inline bool GetSignatureHelpResponse::_internal_has_active_parameter() const {
+  bool value = (_has_bits_[0] & 0x00000002u) != 0;
+  return value;
+}
+inline bool GetSignatureHelpResponse::has_active_parameter() const {
+  return _internal_has_active_parameter();
+}
+inline void GetSignatureHelpResponse::clear_active_parameter() {
+  active_parameter_ = 0;
+  _has_bits_[0] &= ~0x00000002u;
+}
+inline int32_t GetSignatureHelpResponse::_internal_active_parameter() const {
+  return active_parameter_;
+}
+inline int32_t GetSignatureHelpResponse::active_parameter() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.GetSignatureHelpResponse.active_parameter)
+  return _internal_active_parameter();
+}
+inline void GetSignatureHelpResponse::_internal_set_active_parameter(int32_t value) {
+  _has_bits_[0] |= 0x00000002u;
+  active_parameter_ = value;
+}
+inline void GetSignatureHelpResponse::set_active_parameter(int32_t value) {
+  _internal_set_active_parameter(value);
+  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.GetSignatureHelpResponse.active_parameter)
+}
+
+// -------------------------------------------------------------------
+
+// SignatureInformation
+
+// string label = 1;
+inline void SignatureInformation::clear_label() {
+  label_.ClearToEmpty();
+}
+inline const std::string& SignatureInformation::label() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.SignatureInformation.label)
+  return _internal_label();
 }
 template <typename ArgT0, typename... ArgT>
 inline PROTOBUF_ALWAYS_INLINE
-void VersionedTextDocumentIdentifier::set_uri(ArgT0&& arg0, ArgT... args) {
+void SignatureInformation::set_label(ArgT0&& arg0, ArgT... args) {
  
- uri_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation());
-  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier.uri)
+ label_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation());
+  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.SignatureInformation.label)
 }
-inline std::string* VersionedTextDocumentIdentifier::mutable_uri() {
-  std::string* _s = _internal_mutable_uri();
-  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier.uri)
+inline std::string* SignatureInformation::mutable_label() {
+  std::string* _s = _internal_mutable_label();
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.SignatureInformation.label)
   return _s;
 }
-inline const std::string& VersionedTextDocumentIdentifier::_internal_uri() const {
-  return uri_.Get();
+inline const std::string& SignatureInformation::_internal_label() const {
+  return label_.Get();
 }
-inline void VersionedTextDocumentIdentifier::_internal_set_uri(const std::string& value) {
+inline void SignatureInformation::_internal_set_label(const std::string& value) {
   
-  uri_.Set(value, GetArenaForAllocation());
+  label_.Set(value, GetArenaForAllocation());
 }
-inline std::string* VersionedTextDocumentIdentifier::_internal_mutable_uri() {
+inline std::string* SignatureInformation::_internal_mutable_label() {
   
-  return uri_.Mutable(GetArenaForAllocation());
+  return label_.Mutable(GetArenaForAllocation());
 }
-inline std::string* VersionedTextDocumentIdentifier::release_uri() {
-  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier.uri)
-  return uri_.Release();
+inline std::string* SignatureInformation::release_label() {
+  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.SignatureInformation.label)
+  return label_.Release();
 }
-inline void VersionedTextDocumentIdentifier::set_allocated_uri(std::string* uri) {
-  if (uri != nullptr) {
+inline void SignatureInformation::set_allocated_label(std::string* label) {
+  if (label != nullptr) {
     
   } else {
     
   }
-  uri_.SetAllocated(uri, GetArenaForAllocation());
+  label_.SetAllocated(label, GetArenaForAllocation());
 #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
-  if (uri_.IsDefault()) {
-    uri_.Set("", GetArenaForAllocation());
+  if (label_.IsDefault()) {
+    label_.Set("", GetArenaForAllocation());
   }
 #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
-  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier.uri)
+  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.SignatureInformation.label)
 }
 
-// int32 version = 2;
-inline void VersionedTextDocumentIdentifier::clear_version() {
-  version_ = 0;
+// .io.deephaven.proto.backplane.script.grpc.MarkupContent documentation = 2;
+inline bool SignatureInformation::_internal_has_documentation() const {
+  return this != internal_default_instance() && documentation_ != nullptr;
 }
-inline int32_t VersionedTextDocumentIdentifier::_internal_version() const {
-  return version_;
+inline bool SignatureInformation::has_documentation() const {
+  return _internal_has_documentation();
 }
-inline int32_t VersionedTextDocumentIdentifier::version() const {
-  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier.version)
-  return _internal_version();
+inline void SignatureInformation::clear_documentation() {
+  if (GetArenaForAllocation() == nullptr && documentation_ != nullptr) {
+    delete documentation_;
+  }
+  documentation_ = nullptr;
 }
-inline void VersionedTextDocumentIdentifier::_internal_set_version(int32_t value) {
-  
-  version_ = value;
+inline const ::io::deephaven::proto::backplane::script::grpc::MarkupContent& SignatureInformation::_internal_documentation() const {
+  const ::io::deephaven::proto::backplane::script::grpc::MarkupContent* p = documentation_;
+  return p != nullptr ? *p : reinterpret_cast<const ::io::deephaven::proto::backplane::script::grpc::MarkupContent&>(
+      ::io::deephaven::proto::backplane::script::grpc::_MarkupContent_default_instance_);
 }
-inline void VersionedTextDocumentIdentifier::set_version(int32_t value) {
-  _internal_set_version(value);
-  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier.version)
+inline const ::io::deephaven::proto::backplane::script::grpc::MarkupContent& SignatureInformation::documentation() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.SignatureInformation.documentation)
+  return _internal_documentation();
 }
-
-// -------------------------------------------------------------------
-
-// Position
-
-// int32 line = 1;
-inline void Position::clear_line() {
-  line_ = 0;
+inline void SignatureInformation::unsafe_arena_set_allocated_documentation(
+    ::io::deephaven::proto::backplane::script::grpc::MarkupContent* documentation) {
+  if (GetArenaForAllocation() == nullptr) {
+    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(documentation_);
+  }
+  documentation_ = documentation;
+  if (documentation) {
+    
+  } else {
+    
+  }
+  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:io.deephaven.proto.backplane.script.grpc.SignatureInformation.documentation)
 }
-inline int32_t Position::_internal_line() const {
-  return line_;
+inline ::io::deephaven::proto::backplane::script::grpc::MarkupContent* SignatureInformation::release_documentation() {
+  
+  ::io::deephaven::proto::backplane::script::grpc::MarkupContent* temp = documentation_;
+  documentation_ = nullptr;
+#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
+  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
+  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
+  if (GetArenaForAllocation() == nullptr) { delete old; }
+#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
+  if (GetArenaForAllocation() != nullptr) {
+    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
+  }
+#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
+  return temp;
 }
-inline int32_t Position::line() const {
-  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.Position.line)
-  return _internal_line();
+inline ::io::deephaven::proto::backplane::script::grpc::MarkupContent* SignatureInformation::unsafe_arena_release_documentation() {
+  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.SignatureInformation.documentation)
+  
+  ::io::deephaven::proto::backplane::script::grpc::MarkupContent* temp = documentation_;
+  documentation_ = nullptr;
+  return temp;
 }
-inline void Position::_internal_set_line(int32_t value) {
+inline ::io::deephaven::proto::backplane::script::grpc::MarkupContent* SignatureInformation::_internal_mutable_documentation() {
   
-  line_ = value;
+  if (documentation_ == nullptr) {
+    auto* p = CreateMaybeMessage<::io::deephaven::proto::backplane::script::grpc::MarkupContent>(GetArenaForAllocation());
+    documentation_ = p;
+  }
+  return documentation_;
 }
-inline void Position::set_line(int32_t value) {
-  _internal_set_line(value);
-  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.Position.line)
+inline ::io::deephaven::proto::backplane::script::grpc::MarkupContent* SignatureInformation::mutable_documentation() {
+  ::io::deephaven::proto::backplane::script::grpc::MarkupContent* _msg = _internal_mutable_documentation();
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.SignatureInformation.documentation)
+  return _msg;
+}
+inline void SignatureInformation::set_allocated_documentation(::io::deephaven::proto::backplane::script::grpc::MarkupContent* documentation) {
+  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
+  if (message_arena == nullptr) {
+    delete documentation_;
+  }
+  if (documentation) {
+    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
+        ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(documentation);
+    if (message_arena != submessage_arena) {
+      documentation = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
+          message_arena, documentation, submessage_arena);
+    }
+    
+  } else {
+    
+  }
+  documentation_ = documentation;
+  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.SignatureInformation.documentation)
 }
 
-// int32 character = 2;
-inline void Position::clear_character() {
-  character_ = 0;
+// repeated .io.deephaven.proto.backplane.script.grpc.ParameterInformation parameters = 3;
+inline int SignatureInformation::_internal_parameters_size() const {
+  return parameters_.size();
 }
-inline int32_t Position::_internal_character() const {
-  return character_;
+inline int SignatureInformation::parameters_size() const {
+  return _internal_parameters_size();
 }
-inline int32_t Position::character() const {
-  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.Position.character)
-  return _internal_character();
+inline void SignatureInformation::clear_parameters() {
+  parameters_.Clear();
 }
-inline void Position::_internal_set_character(int32_t value) {
-  
-  character_ = value;
+inline ::io::deephaven::proto::backplane::script::grpc::ParameterInformation* SignatureInformation::mutable_parameters(int index) {
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.SignatureInformation.parameters)
+  return parameters_.Mutable(index);
 }
-inline void Position::set_character(int32_t value) {
-  _internal_set_character(value);
-  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.Position.character)
+inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::ParameterInformation >*
+SignatureInformation::mutable_parameters() {
+  // @@protoc_insertion_point(field_mutable_list:io.deephaven.proto.backplane.script.grpc.SignatureInformation.parameters)
+  return &parameters_;
+}
+inline const ::io::deephaven::proto::backplane::script::grpc::ParameterInformation& SignatureInformation::_internal_parameters(int index) const {
+  return parameters_.Get(index);
+}
+inline const ::io::deephaven::proto::backplane::script::grpc::ParameterInformation& SignatureInformation::parameters(int index) const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.SignatureInformation.parameters)
+  return _internal_parameters(index);
+}
+inline ::io::deephaven::proto::backplane::script::grpc::ParameterInformation* SignatureInformation::_internal_add_parameters() {
+  return parameters_.Add();
+}
+inline ::io::deephaven::proto::backplane::script::grpc::ParameterInformation* SignatureInformation::add_parameters() {
+  ::io::deephaven::proto::backplane::script::grpc::ParameterInformation* _add = _internal_add_parameters();
+  // @@protoc_insertion_point(field_add:io.deephaven.proto.backplane.script.grpc.SignatureInformation.parameters)
+  return _add;
+}
+inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::ParameterInformation >&
+SignatureInformation::parameters() const {
+  // @@protoc_insertion_point(field_list:io.deephaven.proto.backplane.script.grpc.SignatureInformation.parameters)
+  return parameters_;
 }
 
-// -------------------------------------------------------------------
-
-// GetCompletionItemsRequest
-
-// .io.deephaven.proto.backplane.grpc.Ticket console_id = 1;
-inline bool GetCompletionItemsRequest::_internal_has_console_id() const {
-  return this != internal_default_instance() && console_id_ != nullptr;
+// optional int32 active_parameter = 4;
+inline bool SignatureInformation::_internal_has_active_parameter() const {
+  bool value = (_has_bits_[0] & 0x00000001u) != 0;
+  return value;
 }
-inline bool GetCompletionItemsRequest::has_console_id() const {
-  return _internal_has_console_id();
+inline bool SignatureInformation::has_active_parameter() const {
+  return _internal_has_active_parameter();
 }
-inline const ::io::deephaven::proto::backplane::grpc::Ticket& GetCompletionItemsRequest::_internal_console_id() const {
-  const ::io::deephaven::proto::backplane::grpc::Ticket* p = console_id_;
-  return p != nullptr ? *p : reinterpret_cast<const ::io::deephaven::proto::backplane::grpc::Ticket&>(
-      ::io::deephaven::proto::backplane::grpc::_Ticket_default_instance_);
+inline void SignatureInformation::clear_active_parameter() {
+  active_parameter_ = 0;
+  _has_bits_[0] &= ~0x00000001u;
 }
-inline const ::io::deephaven::proto::backplane::grpc::Ticket& GetCompletionItemsRequest::console_id() const {
-  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest.console_id)
-  return _internal_console_id();
+inline int32_t SignatureInformation::_internal_active_parameter() const {
+  return active_parameter_;
 }
-inline void GetCompletionItemsRequest::unsafe_arena_set_allocated_console_id(
-    ::io::deephaven::proto::backplane::grpc::Ticket* console_id) {
-  if (GetArenaForAllocation() == nullptr) {
-    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(console_id_);
-  }
-  console_id_ = console_id;
-  if (console_id) {
-    
-  } else {
-    
-  }
-  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest.console_id)
+inline int32_t SignatureInformation::active_parameter() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.SignatureInformation.active_parameter)
+  return _internal_active_parameter();
+}
+inline void SignatureInformation::_internal_set_active_parameter(int32_t value) {
+  _has_bits_[0] |= 0x00000001u;
+  active_parameter_ = value;
+}
+inline void SignatureInformation::set_active_parameter(int32_t value) {
+  _internal_set_active_parameter(value);
+  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.SignatureInformation.active_parameter)
+}
+
+// -------------------------------------------------------------------
+
+// ParameterInformation
+
+// string label = 1;
+inline void ParameterInformation::clear_label() {
+  label_.ClearToEmpty();
 }
-inline ::io::deephaven::proto::backplane::grpc::Ticket* GetCompletionItemsRequest::release_console_id() {
-  
-  ::io::deephaven::proto::backplane::grpc::Ticket* temp = console_id_;
-  console_id_ = nullptr;
-#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
-  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
-  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
-  if (GetArenaForAllocation() == nullptr) { delete old; }
-#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
-  if (GetArenaForAllocation() != nullptr) {
-    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
-  }
-#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
-  return temp;
+inline const std::string& ParameterInformation::label() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.ParameterInformation.label)
+  return _internal_label();
 }
-inline ::io::deephaven::proto::backplane::grpc::Ticket* GetCompletionItemsRequest::unsafe_arena_release_console_id() {
-  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest.console_id)
+template <typename ArgT0, typename... ArgT>
+inline PROTOBUF_ALWAYS_INLINE
+void ParameterInformation::set_label(ArgT0&& arg0, ArgT... args) {
+ 
+ label_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation());
+  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.ParameterInformation.label)
+}
+inline std::string* ParameterInformation::mutable_label() {
+  std::string* _s = _internal_mutable_label();
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.ParameterInformation.label)
+  return _s;
+}
+inline const std::string& ParameterInformation::_internal_label() const {
+  return label_.Get();
+}
+inline void ParameterInformation::_internal_set_label(const std::string& value) {
   
-  ::io::deephaven::proto::backplane::grpc::Ticket* temp = console_id_;
-  console_id_ = nullptr;
-  return temp;
+  label_.Set(value, GetArenaForAllocation());
 }
-inline ::io::deephaven::proto::backplane::grpc::Ticket* GetCompletionItemsRequest::_internal_mutable_console_id() {
+inline std::string* ParameterInformation::_internal_mutable_label() {
   
-  if (console_id_ == nullptr) {
-    auto* p = CreateMaybeMessage<::io::deephaven::proto::backplane::grpc::Ticket>(GetArenaForAllocation());
-    console_id_ = p;
-  }
-  return console_id_;
+  return label_.Mutable(GetArenaForAllocation());
 }
-inline ::io::deephaven::proto::backplane::grpc::Ticket* GetCompletionItemsRequest::mutable_console_id() {
-  ::io::deephaven::proto::backplane::grpc::Ticket* _msg = _internal_mutable_console_id();
-  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest.console_id)
-  return _msg;
+inline std::string* ParameterInformation::release_label() {
+  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.ParameterInformation.label)
+  return label_.Release();
 }
-inline void GetCompletionItemsRequest::set_allocated_console_id(::io::deephaven::proto::backplane::grpc::Ticket* console_id) {
-  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
-  if (message_arena == nullptr) {
-    delete reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::MessageLite*>(console_id_);
-  }
-  if (console_id) {
-    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
-        ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(
-                reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(console_id));
-    if (message_arena != submessage_arena) {
-      console_id = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
-          message_arena, console_id, submessage_arena);
-    }
+inline void ParameterInformation::set_allocated_label(std::string* label) {
+  if (label != nullptr) {
     
   } else {
     
   }
-  console_id_ = console_id;
-  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest.console_id)
+  label_.SetAllocated(label, GetArenaForAllocation());
+#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  if (label_.IsDefault()) {
+    label_.Set("", GetArenaForAllocation());
+  }
+#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.ParameterInformation.label)
 }
 
-// .io.deephaven.proto.backplane.script.grpc.CompletionContext context = 2;
-inline bool GetCompletionItemsRequest::_internal_has_context() const {
-  return this != internal_default_instance() && context_ != nullptr;
+// .io.deephaven.proto.backplane.script.grpc.MarkupContent documentation = 2;
+inline bool ParameterInformation::_internal_has_documentation() const {
+  return this != internal_default_instance() && documentation_ != nullptr;
 }
-inline bool GetCompletionItemsRequest::has_context() const {
-  return _internal_has_context();
+inline bool ParameterInformation::has_documentation() const {
+  return _internal_has_documentation();
 }
-inline void GetCompletionItemsRequest::clear_context() {
-  if (GetArenaForAllocation() == nullptr && context_ != nullptr) {
-    delete context_;
+inline void ParameterInformation::clear_documentation() {
+  if (GetArenaForAllocation() == nullptr && documentation_ != nullptr) {
+    delete documentation_;
   }
-  context_ = nullptr;
+  documentation_ = nullptr;
 }
-inline const ::io::deephaven::proto::backplane::script::grpc::CompletionContext& GetCompletionItemsRequest::_internal_context() const {
-  const ::io::deephaven::proto::backplane::script::grpc::CompletionContext* p = context_;
-  return p != nullptr ? *p : reinterpret_cast<const ::io::deephaven::proto::backplane::script::grpc::CompletionContext&>(
-      ::io::deephaven::proto::backplane::script::grpc::_CompletionContext_default_instance_);
+inline const ::io::deephaven::proto::backplane::script::grpc::MarkupContent& ParameterInformation::_internal_documentation() const {
+  const ::io::deephaven::proto::backplane::script::grpc::MarkupContent* p = documentation_;
+  return p != nullptr ? *p : reinterpret_cast<const ::io::deephaven::proto::backplane::script::grpc::MarkupContent&>(
+      ::io::deephaven::proto::backplane::script::grpc::_MarkupContent_default_instance_);
 }
-inline const ::io::deephaven::proto::backplane::script::grpc::CompletionContext& GetCompletionItemsRequest::context() const {
-  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest.context)
-  return _internal_context();
+inline const ::io::deephaven::proto::backplane::script::grpc::MarkupContent& ParameterInformation::documentation() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.ParameterInformation.documentation)
+  return _internal_documentation();
 }
-inline void GetCompletionItemsRequest::unsafe_arena_set_allocated_context(
-    ::io::deephaven::proto::backplane::script::grpc::CompletionContext* context) {
+inline void ParameterInformation::unsafe_arena_set_allocated_documentation(
+    ::io::deephaven::proto::backplane::script::grpc::MarkupContent* documentation) {
   if (GetArenaForAllocation() == nullptr) {
-    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(context_);
+    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(documentation_);
   }
-  context_ = context;
-  if (context) {
+  documentation_ = documentation;
+  if (documentation) {
     
   } else {
     
   }
-  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest.context)
+  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:io.deephaven.proto.backplane.script.grpc.ParameterInformation.documentation)
 }
-inline ::io::deephaven::proto::backplane::script::grpc::CompletionContext* GetCompletionItemsRequest::release_context() {
+inline ::io::deephaven::proto::backplane::script::grpc::MarkupContent* ParameterInformation::release_documentation() {
   
-  ::io::deephaven::proto::backplane::script::grpc::CompletionContext* temp = context_;
-  context_ = nullptr;
+  ::io::deephaven::proto::backplane::script::grpc::MarkupContent* temp = documentation_;
+  documentation_ = nullptr;
 #ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
   auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
   temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
@@ -12700,69 +18751,73 @@ inline ::io::deephaven::proto::backplane::script::grpc::CompletionContext* GetCo
 #endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
   return temp;
 }
-inline ::io::deephaven::proto::backplane::script::grpc::CompletionContext* GetCompletionItemsRequest::unsafe_arena_release_context() {
-  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest.context)
+inline ::io::deephaven::proto::backplane::script::grpc::MarkupContent* ParameterInformation::unsafe_arena_release_documentation() {
+  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.ParameterInformation.documentation)
   
-  ::io::deephaven::proto::backplane::script::grpc::CompletionContext* temp = context_;
-  context_ = nullptr;
+  ::io::deephaven::proto::backplane::script::grpc::MarkupContent* temp = documentation_;
+  documentation_ = nullptr;
   return temp;
 }
-inline ::io::deephaven::proto::backplane::script::grpc::CompletionContext* GetCompletionItemsRequest::_internal_mutable_context() {
+inline ::io::deephaven::proto::backplane::script::grpc::MarkupContent* ParameterInformation::_internal_mutable_documentation() {
   
-  if (context_ == nullptr) {
-    auto* p = CreateMaybeMessage<::io::deephaven::proto::backplane::script::grpc::CompletionContext>(GetArenaForAllocation());
-    context_ = p;
+  if (documentation_ == nullptr) {
+    auto* p = CreateMaybeMessage<::io::deephaven::proto::backplane::script::grpc::MarkupContent>(GetArenaForAllocation());
+    documentation_ = p;
   }
-  return context_;
+  return documentation_;
 }
-inline ::io::deephaven::proto::backplane::script::grpc::CompletionContext* GetCompletionItemsRequest::mutable_context() {
-  ::io::deephaven::proto::backplane::script::grpc::CompletionContext* _msg = _internal_mutable_context();
-  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest.context)
+inline ::io::deephaven::proto::backplane::script::grpc::MarkupContent* ParameterInformation::mutable_documentation() {
+  ::io::deephaven::proto::backplane::script::grpc::MarkupContent* _msg = _internal_mutable_documentation();
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.ParameterInformation.documentation)
   return _msg;
 }
-inline void GetCompletionItemsRequest::set_allocated_context(::io::deephaven::proto::backplane::script::grpc::CompletionContext* context) {
+inline void ParameterInformation::set_allocated_documentation(::io::deephaven::proto::backplane::script::grpc::MarkupContent* documentation) {
   ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
   if (message_arena == nullptr) {
-    delete context_;
+    delete documentation_;
   }
-  if (context) {
+  if (documentation) {
     ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
-        ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(context);
+        ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(documentation);
     if (message_arena != submessage_arena) {
-      context = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
-          message_arena, context, submessage_arena);
+      documentation = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
+          message_arena, documentation, submessage_arena);
     }
     
   } else {
     
   }
-  context_ = context;
-  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest.context)
+  documentation_ = documentation;
+  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.ParameterInformation.documentation)
 }
 
-// .io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier text_document = 3;
-inline bool GetCompletionItemsRequest::_internal_has_text_document() const {
+// -------------------------------------------------------------------
+
+// GetHoverRequest
+
+// .io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier text_document = 1;
+inline bool GetHoverRequest::_internal_has_text_document() const {
   return this != internal_default_instance() && text_document_ != nullptr;
 }
-inline bool GetCompletionItemsRequest::has_text_document() const {
+inline bool GetHoverRequest::has_text_document() const {
   return _internal_has_text_document();
 }
-inline void GetCompletionItemsRequest::clear_text_document() {
+inline void GetHoverRequest::clear_text_document() {
   if (GetArenaForAllocation() == nullptr && text_document_ != nullptr) {
     delete text_document_;
   }
   text_document_ = nullptr;
 }
-inline const ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier& GetCompletionItemsRequest::_internal_text_document() const {
+inline const ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier& GetHoverRequest::_internal_text_document() const {
   const ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* p = text_document_;
   return p != nullptr ? *p : reinterpret_cast<const ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier&>(
       ::io::deephaven::proto::backplane::script::grpc::_VersionedTextDocumentIdentifier_default_instance_);
 }
-inline const ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier& GetCompletionItemsRequest::text_document() const {
-  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest.text_document)
+inline const ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier& GetHoverRequest::text_document() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.GetHoverRequest.text_document)
   return _internal_text_document();
 }
-inline void GetCompletionItemsRequest::unsafe_arena_set_allocated_text_document(
+inline void GetHoverRequest::unsafe_arena_set_allocated_text_document(
     ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* text_document) {
   if (GetArenaForAllocation() == nullptr) {
     delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(text_document_);
@@ -12773,9 +18828,9 @@ inline void GetCompletionItemsRequest::unsafe_arena_set_allocated_text_document(
   } else {
     
   }
-  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest.text_document)
+  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:io.deephaven.proto.backplane.script.grpc.GetHoverRequest.text_document)
 }
-inline ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* GetCompletionItemsRequest::release_text_document() {
+inline ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* GetHoverRequest::release_text_document() {
   
   ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* temp = text_document_;
   text_document_ = nullptr;
@@ -12790,14 +18845,14 @@ inline ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIde
 #endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
   return temp;
 }
-inline ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* GetCompletionItemsRequest::unsafe_arena_release_text_document() {
-  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest.text_document)
+inline ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* GetHoverRequest::unsafe_arena_release_text_document() {
+  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.GetHoverRequest.text_document)
   
   ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* temp = text_document_;
   text_document_ = nullptr;
   return temp;
 }
-inline ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* GetCompletionItemsRequest::_internal_mutable_text_document() {
+inline ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* GetHoverRequest::_internal_mutable_text_document() {
   
   if (text_document_ == nullptr) {
     auto* p = CreateMaybeMessage<::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier>(GetArenaForAllocation());
@@ -12805,12 +18860,12 @@ inline ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIde
   }
   return text_document_;
 }
-inline ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* GetCompletionItemsRequest::mutable_text_document() {
+inline ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* GetHoverRequest::mutable_text_document() {
   ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* _msg = _internal_mutable_text_document();
-  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest.text_document)
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.GetHoverRequest.text_document)
   return _msg;
 }
-inline void GetCompletionItemsRequest::set_allocated_text_document(::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* text_document) {
+inline void GetHoverRequest::set_allocated_text_document(::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* text_document) {
   ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
   if (message_arena == nullptr) {
     delete text_document_;
@@ -12827,32 +18882,32 @@ inline void GetCompletionItemsRequest::set_allocated_text_document(::io::deephav
     
   }
   text_document_ = text_document;
-  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest.text_document)
+  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.GetHoverRequest.text_document)
 }
 
-// .io.deephaven.proto.backplane.script.grpc.Position position = 4;
-inline bool GetCompletionItemsRequest::_internal_has_position() const {
+// .io.deephaven.proto.backplane.script.grpc.Position position = 2;
+inline bool GetHoverRequest::_internal_has_position() const {
   return this != internal_default_instance() && position_ != nullptr;
 }
-inline bool GetCompletionItemsRequest::has_position() const {
+inline bool GetHoverRequest::has_position() const {
   return _internal_has_position();
 }
-inline void GetCompletionItemsRequest::clear_position() {
+inline void GetHoverRequest::clear_position() {
   if (GetArenaForAllocation() == nullptr && position_ != nullptr) {
     delete position_;
   }
   position_ = nullptr;
 }
-inline const ::io::deephaven::proto::backplane::script::grpc::Position& GetCompletionItemsRequest::_internal_position() const {
+inline const ::io::deephaven::proto::backplane::script::grpc::Position& GetHoverRequest::_internal_position() const {
   const ::io::deephaven::proto::backplane::script::grpc::Position* p = position_;
   return p != nullptr ? *p : reinterpret_cast<const ::io::deephaven::proto::backplane::script::grpc::Position&>(
       ::io::deephaven::proto::backplane::script::grpc::_Position_default_instance_);
 }
-inline const ::io::deephaven::proto::backplane::script::grpc::Position& GetCompletionItemsRequest::position() const {
-  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest.position)
+inline const ::io::deephaven::proto::backplane::script::grpc::Position& GetHoverRequest::position() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.GetHoverRequest.position)
   return _internal_position();
 }
-inline void GetCompletionItemsRequest::unsafe_arena_set_allocated_position(
+inline void GetHoverRequest::unsafe_arena_set_allocated_position(
     ::io::deephaven::proto::backplane::script::grpc::Position* position) {
   if (GetArenaForAllocation() == nullptr) {
     delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(position_);
@@ -12863,9 +18918,9 @@ inline void GetCompletionItemsRequest::unsafe_arena_set_allocated_position(
   } else {
     
   }
-  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest.position)
+  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:io.deephaven.proto.backplane.script.grpc.GetHoverRequest.position)
 }
-inline ::io::deephaven::proto::backplane::script::grpc::Position* GetCompletionItemsRequest::release_position() {
+inline ::io::deephaven::proto::backplane::script::grpc::Position* GetHoverRequest::release_position() {
   
   ::io::deephaven::proto::backplane::script::grpc::Position* temp = position_;
   position_ = nullptr;
@@ -12880,14 +18935,14 @@ inline ::io::deephaven::proto::backplane::script::grpc::Position* GetCompletionI
 #endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
   return temp;
 }
-inline ::io::deephaven::proto::backplane::script::grpc::Position* GetCompletionItemsRequest::unsafe_arena_release_position() {
-  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest.position)
+inline ::io::deephaven::proto::backplane::script::grpc::Position* GetHoverRequest::unsafe_arena_release_position() {
+  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.GetHoverRequest.position)
   
   ::io::deephaven::proto::backplane::script::grpc::Position* temp = position_;
   position_ = nullptr;
   return temp;
 }
-inline ::io::deephaven::proto::backplane::script::grpc::Position* GetCompletionItemsRequest::_internal_mutable_position() {
+inline ::io::deephaven::proto::backplane::script::grpc::Position* GetHoverRequest::_internal_mutable_position() {
   
   if (position_ == nullptr) {
     auto* p = CreateMaybeMessage<::io::deephaven::proto::backplane::script::grpc::Position>(GetArenaForAllocation());
@@ -12895,12 +18950,12 @@ inline ::io::deephaven::proto::backplane::script::grpc::Position* GetCompletionI
   }
   return position_;
 }
-inline ::io::deephaven::proto::backplane::script::grpc::Position* GetCompletionItemsRequest::mutable_position() {
+inline ::io::deephaven::proto::backplane::script::grpc::Position* GetHoverRequest::mutable_position() {
   ::io::deephaven::proto::backplane::script::grpc::Position* _msg = _internal_mutable_position();
-  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest.position)
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.GetHoverRequest.position)
   return _msg;
 }
-inline void GetCompletionItemsRequest::set_allocated_position(::io::deephaven::proto::backplane::script::grpc::Position* position) {
+inline void GetHoverRequest::set_allocated_position(::io::deephaven::proto::backplane::script::grpc::Position* position) {
   ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
   if (message_arena == nullptr) {
     delete position_;
@@ -12917,809 +18972,982 @@ inline void GetCompletionItemsRequest::set_allocated_position(::io::deephaven::p
     
   }
   position_ = position;
-  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest.position)
-}
-
-// int32 request_id = 5;
-inline void GetCompletionItemsRequest::clear_request_id() {
-  request_id_ = 0;
-}
-inline int32_t GetCompletionItemsRequest::_internal_request_id() const {
-  return request_id_;
-}
-inline int32_t GetCompletionItemsRequest::request_id() const {
-  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest.request_id)
-  return _internal_request_id();
-}
-inline void GetCompletionItemsRequest::_internal_set_request_id(int32_t value) {
-  
-  request_id_ = value;
-}
-inline void GetCompletionItemsRequest::set_request_id(int32_t value) {
-  _internal_set_request_id(value);
-  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest.request_id)
+  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.GetHoverRequest.position)
 }
 
 // -------------------------------------------------------------------
 
-// CompletionContext
-
-// int32 trigger_kind = 1;
-inline void CompletionContext::clear_trigger_kind() {
-  trigger_kind_ = 0;
-}
-inline int32_t CompletionContext::_internal_trigger_kind() const {
-  return trigger_kind_;
-}
-inline int32_t CompletionContext::trigger_kind() const {
-  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.CompletionContext.trigger_kind)
-  return _internal_trigger_kind();
-}
-inline void CompletionContext::_internal_set_trigger_kind(int32_t value) {
-  
-  trigger_kind_ = value;
-}
-inline void CompletionContext::set_trigger_kind(int32_t value) {
-  _internal_set_trigger_kind(value);
-  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.CompletionContext.trigger_kind)
-}
+// GetHoverResponse
 
-// string trigger_character = 2;
-inline void CompletionContext::clear_trigger_character() {
-  trigger_character_.ClearToEmpty();
-}
-inline const std::string& CompletionContext::trigger_character() const {
-  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.CompletionContext.trigger_character)
-  return _internal_trigger_character();
-}
-template <typename ArgT0, typename... ArgT>
-inline PROTOBUF_ALWAYS_INLINE
-void CompletionContext::set_trigger_character(ArgT0&& arg0, ArgT... args) {
- 
- trigger_character_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation());
-  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.CompletionContext.trigger_character)
-}
-inline std::string* CompletionContext::mutable_trigger_character() {
-  std::string* _s = _internal_mutable_trigger_character();
-  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.CompletionContext.trigger_character)
-  return _s;
-}
-inline const std::string& CompletionContext::_internal_trigger_character() const {
-  return trigger_character_.Get();
-}
-inline void CompletionContext::_internal_set_trigger_character(const std::string& value) {
-  
-  trigger_character_.Set(value, GetArenaForAllocation());
-}
-inline std::string* CompletionContext::_internal_mutable_trigger_character() {
-  
-  return trigger_character_.Mutable(GetArenaForAllocation());
+// .io.deephaven.proto.backplane.script.grpc.MarkupContent contents = 1;
+inline bool GetHoverResponse::_internal_has_contents() const {
+  return this != internal_default_instance() && contents_ != nullptr;
 }
-inline std::string* CompletionContext::release_trigger_character() {
-  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.CompletionContext.trigger_character)
-  return trigger_character_.Release();
+inline bool GetHoverResponse::has_contents() const {
+  return _internal_has_contents();
 }
-inline void CompletionContext::set_allocated_trigger_character(std::string* trigger_character) {
-  if (trigger_character != nullptr) {
-    
-  } else {
-    
-  }
-  trigger_character_.SetAllocated(trigger_character, GetArenaForAllocation());
-#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
-  if (trigger_character_.IsDefault()) {
-    trigger_character_.Set("", GetArenaForAllocation());
+inline void GetHoverResponse::clear_contents() {
+  if (GetArenaForAllocation() == nullptr && contents_ != nullptr) {
+    delete contents_;
   }
-#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
-  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.CompletionContext.trigger_character)
-}
-
-// -------------------------------------------------------------------
-
-// GetCompletionItemsResponse
-
-// repeated .io.deephaven.proto.backplane.script.grpc.CompletionItem items = 1;
-inline int GetCompletionItemsResponse::_internal_items_size() const {
-  return items_.size();
-}
-inline int GetCompletionItemsResponse::items_size() const {
-  return _internal_items_size();
+  contents_ = nullptr;
 }
-inline void GetCompletionItemsResponse::clear_items() {
-  items_.Clear();
+inline const ::io::deephaven::proto::backplane::script::grpc::MarkupContent& GetHoverResponse::_internal_contents() const {
+  const ::io::deephaven::proto::backplane::script::grpc::MarkupContent* p = contents_;
+  return p != nullptr ? *p : reinterpret_cast<const ::io::deephaven::proto::backplane::script::grpc::MarkupContent&>(
+      ::io::deephaven::proto::backplane::script::grpc::_MarkupContent_default_instance_);
 }
-inline ::io::deephaven::proto::backplane::script::grpc::CompletionItem* GetCompletionItemsResponse::mutable_items(int index) {
-  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsResponse.items)
-  return items_.Mutable(index);
+inline const ::io::deephaven::proto::backplane::script::grpc::MarkupContent& GetHoverResponse::contents() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.GetHoverResponse.contents)
+  return _internal_contents();
 }
-inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::CompletionItem >*
-GetCompletionItemsResponse::mutable_items() {
-  // @@protoc_insertion_point(field_mutable_list:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsResponse.items)
-  return &items_;
+inline void GetHoverResponse::unsafe_arena_set_allocated_contents(
+    ::io::deephaven::proto::backplane::script::grpc::MarkupContent* contents) {
+  if (GetArenaForAllocation() == nullptr) {
+    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(contents_);
+  }
+  contents_ = contents;
+  if (contents) {
+    
+  } else {
+    
+  }
+  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:io.deephaven.proto.backplane.script.grpc.GetHoverResponse.contents)
 }
-inline const ::io::deephaven::proto::backplane::script::grpc::CompletionItem& GetCompletionItemsResponse::_internal_items(int index) const {
-  return items_.Get(index);
+inline ::io::deephaven::proto::backplane::script::grpc::MarkupContent* GetHoverResponse::release_contents() {
+  
+  ::io::deephaven::proto::backplane::script::grpc::MarkupContent* temp = contents_;
+  contents_ = nullptr;
+#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
+  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
+  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
+  if (GetArenaForAllocation() == nullptr) { delete old; }
+#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
+  if (GetArenaForAllocation() != nullptr) {
+    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
+  }
+#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
+  return temp;
 }
-inline const ::io::deephaven::proto::backplane::script::grpc::CompletionItem& GetCompletionItemsResponse::items(int index) const {
-  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsResponse.items)
-  return _internal_items(index);
+inline ::io::deephaven::proto::backplane::script::grpc::MarkupContent* GetHoverResponse::unsafe_arena_release_contents() {
+  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.GetHoverResponse.contents)
+  
+  ::io::deephaven::proto::backplane::script::grpc::MarkupContent* temp = contents_;
+  contents_ = nullptr;
+  return temp;
 }
-inline ::io::deephaven::proto::backplane::script::grpc::CompletionItem* GetCompletionItemsResponse::_internal_add_items() {
-  return items_.Add();
+inline ::io::deephaven::proto::backplane::script::grpc::MarkupContent* GetHoverResponse::_internal_mutable_contents() {
+  
+  if (contents_ == nullptr) {
+    auto* p = CreateMaybeMessage<::io::deephaven::proto::backplane::script::grpc::MarkupContent>(GetArenaForAllocation());
+    contents_ = p;
+  }
+  return contents_;
 }
-inline ::io::deephaven::proto::backplane::script::grpc::CompletionItem* GetCompletionItemsResponse::add_items() {
-  ::io::deephaven::proto::backplane::script::grpc::CompletionItem* _add = _internal_add_items();
-  // @@protoc_insertion_point(field_add:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsResponse.items)
-  return _add;
+inline ::io::deephaven::proto::backplane::script::grpc::MarkupContent* GetHoverResponse::mutable_contents() {
+  ::io::deephaven::proto::backplane::script::grpc::MarkupContent* _msg = _internal_mutable_contents();
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.GetHoverResponse.contents)
+  return _msg;
 }
-inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::CompletionItem >&
-GetCompletionItemsResponse::items() const {
-  // @@protoc_insertion_point(field_list:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsResponse.items)
-  return items_;
+inline void GetHoverResponse::set_allocated_contents(::io::deephaven::proto::backplane::script::grpc::MarkupContent* contents) {
+  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
+  if (message_arena == nullptr) {
+    delete contents_;
+  }
+  if (contents) {
+    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
+        ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(contents);
+    if (message_arena != submessage_arena) {
+      contents = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
+          message_arena, contents, submessage_arena);
+    }
+    
+  } else {
+    
+  }
+  contents_ = contents;
+  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.GetHoverResponse.contents)
 }
 
-// int32 request_id = 2;
-inline void GetCompletionItemsResponse::clear_request_id() {
-  request_id_ = 0;
+// .io.deephaven.proto.backplane.script.grpc.DocumentRange range = 2;
+inline bool GetHoverResponse::_internal_has_range() const {
+  return this != internal_default_instance() && range_ != nullptr;
 }
-inline int32_t GetCompletionItemsResponse::_internal_request_id() const {
-  return request_id_;
+inline bool GetHoverResponse::has_range() const {
+  return _internal_has_range();
 }
-inline int32_t GetCompletionItemsResponse::request_id() const {
-  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsResponse.request_id)
-  return _internal_request_id();
+inline void GetHoverResponse::clear_range() {
+  if (GetArenaForAllocation() == nullptr && range_ != nullptr) {
+    delete range_;
+  }
+  range_ = nullptr;
 }
-inline void GetCompletionItemsResponse::_internal_set_request_id(int32_t value) {
-  
-  request_id_ = value;
+inline const ::io::deephaven::proto::backplane::script::grpc::DocumentRange& GetHoverResponse::_internal_range() const {
+  const ::io::deephaven::proto::backplane::script::grpc::DocumentRange* p = range_;
+  return p != nullptr ? *p : reinterpret_cast<const ::io::deephaven::proto::backplane::script::grpc::DocumentRange&>(
+      ::io::deephaven::proto::backplane::script::grpc::_DocumentRange_default_instance_);
 }
-inline void GetCompletionItemsResponse::set_request_id(int32_t value) {
-  _internal_set_request_id(value);
-  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsResponse.request_id)
+inline const ::io::deephaven::proto::backplane::script::grpc::DocumentRange& GetHoverResponse::range() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.GetHoverResponse.range)
+  return _internal_range();
 }
-
-// bool success = 3;
-inline void GetCompletionItemsResponse::clear_success() {
-  success_ = false;
+inline void GetHoverResponse::unsafe_arena_set_allocated_range(
+    ::io::deephaven::proto::backplane::script::grpc::DocumentRange* range) {
+  if (GetArenaForAllocation() == nullptr) {
+    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(range_);
+  }
+  range_ = range;
+  if (range) {
+    
+  } else {
+    
+  }
+  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:io.deephaven.proto.backplane.script.grpc.GetHoverResponse.range)
 }
-inline bool GetCompletionItemsResponse::_internal_success() const {
-  return success_;
+inline ::io::deephaven::proto::backplane::script::grpc::DocumentRange* GetHoverResponse::release_range() {
+  
+  ::io::deephaven::proto::backplane::script::grpc::DocumentRange* temp = range_;
+  range_ = nullptr;
+#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
+  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
+  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
+  if (GetArenaForAllocation() == nullptr) { delete old; }
+#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
+  if (GetArenaForAllocation() != nullptr) {
+    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
+  }
+#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
+  return temp;
 }
-inline bool GetCompletionItemsResponse::success() const {
-  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsResponse.success)
-  return _internal_success();
+inline ::io::deephaven::proto::backplane::script::grpc::DocumentRange* GetHoverResponse::unsafe_arena_release_range() {
+  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.GetHoverResponse.range)
+  
+  ::io::deephaven::proto::backplane::script::grpc::DocumentRange* temp = range_;
+  range_ = nullptr;
+  return temp;
 }
-inline void GetCompletionItemsResponse::_internal_set_success(bool value) {
+inline ::io::deephaven::proto::backplane::script::grpc::DocumentRange* GetHoverResponse::_internal_mutable_range() {
   
-  success_ = value;
+  if (range_ == nullptr) {
+    auto* p = CreateMaybeMessage<::io::deephaven::proto::backplane::script::grpc::DocumentRange>(GetArenaForAllocation());
+    range_ = p;
+  }
+  return range_;
 }
-inline void GetCompletionItemsResponse::set_success(bool value) {
-  _internal_set_success(value);
-  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.GetCompletionItemsResponse.success)
+inline ::io::deephaven::proto::backplane::script::grpc::DocumentRange* GetHoverResponse::mutable_range() {
+  ::io::deephaven::proto::backplane::script::grpc::DocumentRange* _msg = _internal_mutable_range();
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.GetHoverResponse.range)
+  return _msg;
+}
+inline void GetHoverResponse::set_allocated_range(::io::deephaven::proto::backplane::script::grpc::DocumentRange* range) {
+  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
+  if (message_arena == nullptr) {
+    delete range_;
+  }
+  if (range) {
+    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
+        ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(range);
+    if (message_arena != submessage_arena) {
+      range = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
+          message_arena, range, submessage_arena);
+    }
+    
+  } else {
+    
+  }
+  range_ = range;
+  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.GetHoverResponse.range)
 }
 
 // -------------------------------------------------------------------
 
-// CompletionItem
+// GetDiagnosticRequest
 
-// int32 start = 1;
-inline void CompletionItem::clear_start() {
-  start_ = 0;
+// .io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier text_document = 1;
+inline bool GetDiagnosticRequest::_internal_has_text_document() const {
+  return this != internal_default_instance() && text_document_ != nullptr;
 }
-inline int32_t CompletionItem::_internal_start() const {
-  return start_;
+inline bool GetDiagnosticRequest::has_text_document() const {
+  return _internal_has_text_document();
 }
-inline int32_t CompletionItem::start() const {
-  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.CompletionItem.start)
-  return _internal_start();
+inline void GetDiagnosticRequest::clear_text_document() {
+  if (GetArenaForAllocation() == nullptr && text_document_ != nullptr) {
+    delete text_document_;
+  }
+  text_document_ = nullptr;
 }
-inline void CompletionItem::_internal_set_start(int32_t value) {
-  
-  start_ = value;
+inline const ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier& GetDiagnosticRequest::_internal_text_document() const {
+  const ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* p = text_document_;
+  return p != nullptr ? *p : reinterpret_cast<const ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier&>(
+      ::io::deephaven::proto::backplane::script::grpc::_VersionedTextDocumentIdentifier_default_instance_);
 }
-inline void CompletionItem::set_start(int32_t value) {
-  _internal_set_start(value);
-  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.CompletionItem.start)
+inline const ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier& GetDiagnosticRequest::text_document() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.GetDiagnosticRequest.text_document)
+  return _internal_text_document();
 }
-
-// int32 length = 2;
-inline void CompletionItem::clear_length() {
-  length_ = 0;
+inline void GetDiagnosticRequest::unsafe_arena_set_allocated_text_document(
+    ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* text_document) {
+  if (GetArenaForAllocation() == nullptr) {
+    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(text_document_);
+  }
+  text_document_ = text_document;
+  if (text_document) {
+    
+  } else {
+    
+  }
+  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:io.deephaven.proto.backplane.script.grpc.GetDiagnosticRequest.text_document)
 }
-inline int32_t CompletionItem::_internal_length() const {
-  return length_;
+inline ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* GetDiagnosticRequest::release_text_document() {
+  
+  ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* temp = text_document_;
+  text_document_ = nullptr;
+#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
+  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
+  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
+  if (GetArenaForAllocation() == nullptr) { delete old; }
+#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
+  if (GetArenaForAllocation() != nullptr) {
+    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
+  }
+#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
+  return temp;
 }
-inline int32_t CompletionItem::length() const {
-  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.CompletionItem.length)
-  return _internal_length();
+inline ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* GetDiagnosticRequest::unsafe_arena_release_text_document() {
+  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.GetDiagnosticRequest.text_document)
+  
+  ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* temp = text_document_;
+  text_document_ = nullptr;
+  return temp;
 }
-inline void CompletionItem::_internal_set_length(int32_t value) {
+inline ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* GetDiagnosticRequest::_internal_mutable_text_document() {
   
-  length_ = value;
+  if (text_document_ == nullptr) {
+    auto* p = CreateMaybeMessage<::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier>(GetArenaForAllocation());
+    text_document_ = p;
+  }
+  return text_document_;
 }
-inline void CompletionItem::set_length(int32_t value) {
-  _internal_set_length(value);
-  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.CompletionItem.length)
+inline ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* GetDiagnosticRequest::mutable_text_document() {
+  ::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* _msg = _internal_mutable_text_document();
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.GetDiagnosticRequest.text_document)
+  return _msg;
+}
+inline void GetDiagnosticRequest::set_allocated_text_document(::io::deephaven::proto::backplane::script::grpc::VersionedTextDocumentIdentifier* text_document) {
+  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
+  if (message_arena == nullptr) {
+    delete text_document_;
+  }
+  if (text_document) {
+    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
+        ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(text_document);
+    if (message_arena != submessage_arena) {
+      text_document = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
+          message_arena, text_document, submessage_arena);
+    }
+    
+  } else {
+    
+  }
+  text_document_ = text_document;
+  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.GetDiagnosticRequest.text_document)
 }
 
-// string label = 3;
-inline void CompletionItem::clear_label() {
-  label_.ClearToEmpty();
+// optional string identifier = 2;
+inline bool GetDiagnosticRequest::_internal_has_identifier() const {
+  bool value = (_has_bits_[0] & 0x00000001u) != 0;
+  return value;
 }
-inline const std::string& CompletionItem::label() const {
-  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.CompletionItem.label)
-  return _internal_label();
+inline bool GetDiagnosticRequest::has_identifier() const {
+  return _internal_has_identifier();
+}
+inline void GetDiagnosticRequest::clear_identifier() {
+  identifier_.ClearToEmpty();
+  _has_bits_[0] &= ~0x00000001u;
+}
+inline const std::string& GetDiagnosticRequest::identifier() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.GetDiagnosticRequest.identifier)
+  return _internal_identifier();
 }
 template <typename ArgT0, typename... ArgT>
 inline PROTOBUF_ALWAYS_INLINE
-void CompletionItem::set_label(ArgT0&& arg0, ArgT... args) {
- 
- label_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation());
-  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.CompletionItem.label)
+void GetDiagnosticRequest::set_identifier(ArgT0&& arg0, ArgT... args) {
+ _has_bits_[0] |= 0x00000001u;
+ identifier_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation());
+  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.GetDiagnosticRequest.identifier)
 }
-inline std::string* CompletionItem::mutable_label() {
-  std::string* _s = _internal_mutable_label();
-  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.CompletionItem.label)
+inline std::string* GetDiagnosticRequest::mutable_identifier() {
+  std::string* _s = _internal_mutable_identifier();
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.GetDiagnosticRequest.identifier)
   return _s;
 }
-inline const std::string& CompletionItem::_internal_label() const {
-  return label_.Get();
+inline const std::string& GetDiagnosticRequest::_internal_identifier() const {
+  return identifier_.Get();
 }
-inline void CompletionItem::_internal_set_label(const std::string& value) {
-  
-  label_.Set(value, GetArenaForAllocation());
+inline void GetDiagnosticRequest::_internal_set_identifier(const std::string& value) {
+  _has_bits_[0] |= 0x00000001u;
+  identifier_.Set(value, GetArenaForAllocation());
 }
-inline std::string* CompletionItem::_internal_mutable_label() {
-  
-  return label_.Mutable(GetArenaForAllocation());
+inline std::string* GetDiagnosticRequest::_internal_mutable_identifier() {
+  _has_bits_[0] |= 0x00000001u;
+  return identifier_.Mutable(GetArenaForAllocation());
 }
-inline std::string* CompletionItem::release_label() {
-  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.CompletionItem.label)
-  return label_.Release();
+inline std::string* GetDiagnosticRequest::release_identifier() {
+  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.GetDiagnosticRequest.identifier)
+  if (!_internal_has_identifier()) {
+    return nullptr;
+  }
+  _has_bits_[0] &= ~0x00000001u;
+  auto* p = identifier_.Release();
+#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  if (identifier_.IsDefault()) {
+    identifier_.Set("", GetArenaForAllocation());
+  }
+#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  return p;
 }
-inline void CompletionItem::set_allocated_label(std::string* label) {
-  if (label != nullptr) {
-    
+inline void GetDiagnosticRequest::set_allocated_identifier(std::string* identifier) {
+  if (identifier != nullptr) {
+    _has_bits_[0] |= 0x00000001u;
   } else {
-    
+    _has_bits_[0] &= ~0x00000001u;
   }
-  label_.SetAllocated(label, GetArenaForAllocation());
+  identifier_.SetAllocated(identifier, GetArenaForAllocation());
 #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
-  if (label_.IsDefault()) {
-    label_.Set("", GetArenaForAllocation());
+  if (identifier_.IsDefault()) {
+    identifier_.Set("", GetArenaForAllocation());
   }
 #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
-  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.CompletionItem.label)
+  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.GetDiagnosticRequest.identifier)
 }
 
-// int32 kind = 4;
-inline void CompletionItem::clear_kind() {
-  kind_ = 0;
-}
-inline int32_t CompletionItem::_internal_kind() const {
-  return kind_;
-}
-inline int32_t CompletionItem::kind() const {
-  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.CompletionItem.kind)
-  return _internal_kind();
-}
-inline void CompletionItem::_internal_set_kind(int32_t value) {
-  
-  kind_ = value;
+// optional string previous_result_id = 3;
+inline bool GetDiagnosticRequest::_internal_has_previous_result_id() const {
+  bool value = (_has_bits_[0] & 0x00000002u) != 0;
+  return value;
 }
-inline void CompletionItem::set_kind(int32_t value) {
-  _internal_set_kind(value);
-  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.CompletionItem.kind)
+inline bool GetDiagnosticRequest::has_previous_result_id() const {
+  return _internal_has_previous_result_id();
 }
-
-// string detail = 5;
-inline void CompletionItem::clear_detail() {
-  detail_.ClearToEmpty();
+inline void GetDiagnosticRequest::clear_previous_result_id() {
+  previous_result_id_.ClearToEmpty();
+  _has_bits_[0] &= ~0x00000002u;
 }
-inline const std::string& CompletionItem::detail() const {
-  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.CompletionItem.detail)
-  return _internal_detail();
+inline const std::string& GetDiagnosticRequest::previous_result_id() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.GetDiagnosticRequest.previous_result_id)
+  return _internal_previous_result_id();
 }
 template <typename ArgT0, typename... ArgT>
 inline PROTOBUF_ALWAYS_INLINE
-void CompletionItem::set_detail(ArgT0&& arg0, ArgT... args) {
- 
- detail_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation());
-  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.CompletionItem.detail)
+void GetDiagnosticRequest::set_previous_result_id(ArgT0&& arg0, ArgT... args) {
+ _has_bits_[0] |= 0x00000002u;
+ previous_result_id_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation());
+  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.GetDiagnosticRequest.previous_result_id)
 }
-inline std::string* CompletionItem::mutable_detail() {
-  std::string* _s = _internal_mutable_detail();
-  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.CompletionItem.detail)
+inline std::string* GetDiagnosticRequest::mutable_previous_result_id() {
+  std::string* _s = _internal_mutable_previous_result_id();
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.GetDiagnosticRequest.previous_result_id)
   return _s;
 }
-inline const std::string& CompletionItem::_internal_detail() const {
-  return detail_.Get();
+inline const std::string& GetDiagnosticRequest::_internal_previous_result_id() const {
+  return previous_result_id_.Get();
 }
-inline void CompletionItem::_internal_set_detail(const std::string& value) {
-  
-  detail_.Set(value, GetArenaForAllocation());
+inline void GetDiagnosticRequest::_internal_set_previous_result_id(const std::string& value) {
+  _has_bits_[0] |= 0x00000002u;
+  previous_result_id_.Set(value, GetArenaForAllocation());
 }
-inline std::string* CompletionItem::_internal_mutable_detail() {
-  
-  return detail_.Mutable(GetArenaForAllocation());
+inline std::string* GetDiagnosticRequest::_internal_mutable_previous_result_id() {
+  _has_bits_[0] |= 0x00000002u;
+  return previous_result_id_.Mutable(GetArenaForAllocation());
 }
-inline std::string* CompletionItem::release_detail() {
-  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.CompletionItem.detail)
-  return detail_.Release();
+inline std::string* GetDiagnosticRequest::release_previous_result_id() {
+  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.GetDiagnosticRequest.previous_result_id)
+  if (!_internal_has_previous_result_id()) {
+    return nullptr;
+  }
+  _has_bits_[0] &= ~0x00000002u;
+  auto* p = previous_result_id_.Release();
+#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  if (previous_result_id_.IsDefault()) {
+    previous_result_id_.Set("", GetArenaForAllocation());
+  }
+#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  return p;
 }
-inline void CompletionItem::set_allocated_detail(std::string* detail) {
-  if (detail != nullptr) {
-    
+inline void GetDiagnosticRequest::set_allocated_previous_result_id(std::string* previous_result_id) {
+  if (previous_result_id != nullptr) {
+    _has_bits_[0] |= 0x00000002u;
   } else {
-    
+    _has_bits_[0] &= ~0x00000002u;
   }
-  detail_.SetAllocated(detail, GetArenaForAllocation());
+  previous_result_id_.SetAllocated(previous_result_id, GetArenaForAllocation());
 #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
-  if (detail_.IsDefault()) {
-    detail_.Set("", GetArenaForAllocation());
+  if (previous_result_id_.IsDefault()) {
+    previous_result_id_.Set("", GetArenaForAllocation());
   }
 #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
-  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.CompletionItem.detail)
+  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.GetDiagnosticRequest.previous_result_id)
 }
 
-// string documentation = 6;
-inline void CompletionItem::clear_documentation() {
-  documentation_.ClearToEmpty();
+// -------------------------------------------------------------------
+
+// GetPullDiagnosticResponse
+
+// string kind = 1;
+inline void GetPullDiagnosticResponse::clear_kind() {
+  kind_.ClearToEmpty();
 }
-inline const std::string& CompletionItem::documentation() const {
-  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.CompletionItem.documentation)
-  return _internal_documentation();
+inline const std::string& GetPullDiagnosticResponse::kind() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.GetPullDiagnosticResponse.kind)
+  return _internal_kind();
 }
 template <typename ArgT0, typename... ArgT>
 inline PROTOBUF_ALWAYS_INLINE
-void CompletionItem::set_documentation(ArgT0&& arg0, ArgT... args) {
+void GetPullDiagnosticResponse::set_kind(ArgT0&& arg0, ArgT... args) {
  
- documentation_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation());
-  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.CompletionItem.documentation)
+ kind_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation());
+  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.GetPullDiagnosticResponse.kind)
 }
-inline std::string* CompletionItem::mutable_documentation() {
-  std::string* _s = _internal_mutable_documentation();
-  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.CompletionItem.documentation)
+inline std::string* GetPullDiagnosticResponse::mutable_kind() {
+  std::string* _s = _internal_mutable_kind();
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.GetPullDiagnosticResponse.kind)
   return _s;
 }
-inline const std::string& CompletionItem::_internal_documentation() const {
-  return documentation_.Get();
+inline const std::string& GetPullDiagnosticResponse::_internal_kind() const {
+  return kind_.Get();
 }
-inline void CompletionItem::_internal_set_documentation(const std::string& value) {
+inline void GetPullDiagnosticResponse::_internal_set_kind(const std::string& value) {
   
-  documentation_.Set(value, GetArenaForAllocation());
+  kind_.Set(value, GetArenaForAllocation());
 }
-inline std::string* CompletionItem::_internal_mutable_documentation() {
+inline std::string* GetPullDiagnosticResponse::_internal_mutable_kind() {
   
-  return documentation_.Mutable(GetArenaForAllocation());
+  return kind_.Mutable(GetArenaForAllocation());
 }
-inline std::string* CompletionItem::release_documentation() {
-  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.CompletionItem.documentation)
-  return documentation_.Release();
+inline std::string* GetPullDiagnosticResponse::release_kind() {
+  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.GetPullDiagnosticResponse.kind)
+  return kind_.Release();
 }
-inline void CompletionItem::set_allocated_documentation(std::string* documentation) {
-  if (documentation != nullptr) {
+inline void GetPullDiagnosticResponse::set_allocated_kind(std::string* kind) {
+  if (kind != nullptr) {
     
   } else {
     
   }
-  documentation_.SetAllocated(documentation, GetArenaForAllocation());
+  kind_.SetAllocated(kind, GetArenaForAllocation());
 #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
-  if (documentation_.IsDefault()) {
-    documentation_.Set("", GetArenaForAllocation());
+  if (kind_.IsDefault()) {
+    kind_.Set("", GetArenaForAllocation());
   }
 #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
-  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.CompletionItem.documentation)
+  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.GetPullDiagnosticResponse.kind)
 }
 
-// bool deprecated = 7;
-inline void CompletionItem::clear_deprecated() {
-  deprecated_ = false;
+// optional string result_id = 2;
+inline bool GetPullDiagnosticResponse::_internal_has_result_id() const {
+  bool value = (_has_bits_[0] & 0x00000001u) != 0;
+  return value;
 }
-inline bool CompletionItem::_internal_deprecated() const {
-  return deprecated_;
+inline bool GetPullDiagnosticResponse::has_result_id() const {
+  return _internal_has_result_id();
 }
-inline bool CompletionItem::deprecated() const {
-  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.CompletionItem.deprecated)
-  return _internal_deprecated();
+inline void GetPullDiagnosticResponse::clear_result_id() {
+  result_id_.ClearToEmpty();
+  _has_bits_[0] &= ~0x00000001u;
 }
-inline void CompletionItem::_internal_set_deprecated(bool value) {
-  
-  deprecated_ = value;
+inline const std::string& GetPullDiagnosticResponse::result_id() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.GetPullDiagnosticResponse.result_id)
+  return _internal_result_id();
 }
-inline void CompletionItem::set_deprecated(bool value) {
-  _internal_set_deprecated(value);
-  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.CompletionItem.deprecated)
+template <typename ArgT0, typename... ArgT>
+inline PROTOBUF_ALWAYS_INLINE
+void GetPullDiagnosticResponse::set_result_id(ArgT0&& arg0, ArgT... args) {
+ _has_bits_[0] |= 0x00000001u;
+ result_id_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation());
+  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.GetPullDiagnosticResponse.result_id)
 }
-
-// bool preselect = 8;
-inline void CompletionItem::clear_preselect() {
-  preselect_ = false;
+inline std::string* GetPullDiagnosticResponse::mutable_result_id() {
+  std::string* _s = _internal_mutable_result_id();
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.GetPullDiagnosticResponse.result_id)
+  return _s;
 }
-inline bool CompletionItem::_internal_preselect() const {
-  return preselect_;
+inline const std::string& GetPullDiagnosticResponse::_internal_result_id() const {
+  return result_id_.Get();
 }
-inline bool CompletionItem::preselect() const {
-  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.CompletionItem.preselect)
-  return _internal_preselect();
+inline void GetPullDiagnosticResponse::_internal_set_result_id(const std::string& value) {
+  _has_bits_[0] |= 0x00000001u;
+  result_id_.Set(value, GetArenaForAllocation());
 }
-inline void CompletionItem::_internal_set_preselect(bool value) {
-  
-  preselect_ = value;
+inline std::string* GetPullDiagnosticResponse::_internal_mutable_result_id() {
+  _has_bits_[0] |= 0x00000001u;
+  return result_id_.Mutable(GetArenaForAllocation());
 }
-inline void CompletionItem::set_preselect(bool value) {
-  _internal_set_preselect(value);
-  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.CompletionItem.preselect)
+inline std::string* GetPullDiagnosticResponse::release_result_id() {
+  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.GetPullDiagnosticResponse.result_id)
+  if (!_internal_has_result_id()) {
+    return nullptr;
+  }
+  _has_bits_[0] &= ~0x00000001u;
+  auto* p = result_id_.Release();
+#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  if (result_id_.IsDefault()) {
+    result_id_.Set("", GetArenaForAllocation());
+  }
+#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  return p;
 }
-
-// .io.deephaven.proto.backplane.script.grpc.TextEdit text_edit = 9;
-inline bool CompletionItem::_internal_has_text_edit() const {
-  return this != internal_default_instance() && text_edit_ != nullptr;
+inline void GetPullDiagnosticResponse::set_allocated_result_id(std::string* result_id) {
+  if (result_id != nullptr) {
+    _has_bits_[0] |= 0x00000001u;
+  } else {
+    _has_bits_[0] &= ~0x00000001u;
+  }
+  result_id_.SetAllocated(result_id, GetArenaForAllocation());
+#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  if (result_id_.IsDefault()) {
+    result_id_.Set("", GetArenaForAllocation());
+  }
+#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.GetPullDiagnosticResponse.result_id)
 }
-inline bool CompletionItem::has_text_edit() const {
-  return _internal_has_text_edit();
+
+// repeated .io.deephaven.proto.backplane.script.grpc.Diagnostic items = 3;
+inline int GetPullDiagnosticResponse::_internal_items_size() const {
+  return items_.size();
 }
-inline void CompletionItem::clear_text_edit() {
-  if (GetArenaForAllocation() == nullptr && text_edit_ != nullptr) {
-    delete text_edit_;
-  }
-  text_edit_ = nullptr;
+inline int GetPullDiagnosticResponse::items_size() const {
+  return _internal_items_size();
 }
-inline const ::io::deephaven::proto::backplane::script::grpc::TextEdit& CompletionItem::_internal_text_edit() const {
-  const ::io::deephaven::proto::backplane::script::grpc::TextEdit* p = text_edit_;
-  return p != nullptr ? *p : reinterpret_cast<const ::io::deephaven::proto::backplane::script::grpc::TextEdit&>(
-      ::io::deephaven::proto::backplane::script::grpc::_TextEdit_default_instance_);
+inline void GetPullDiagnosticResponse::clear_items() {
+  items_.Clear();
 }
-inline const ::io::deephaven::proto::backplane::script::grpc::TextEdit& CompletionItem::text_edit() const {
-  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.CompletionItem.text_edit)
-  return _internal_text_edit();
+inline ::io::deephaven::proto::backplane::script::grpc::Diagnostic* GetPullDiagnosticResponse::mutable_items(int index) {
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.GetPullDiagnosticResponse.items)
+  return items_.Mutable(index);
 }
-inline void CompletionItem::unsafe_arena_set_allocated_text_edit(
-    ::io::deephaven::proto::backplane::script::grpc::TextEdit* text_edit) {
-  if (GetArenaForAllocation() == nullptr) {
-    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(text_edit_);
-  }
-  text_edit_ = text_edit;
-  if (text_edit) {
-    
-  } else {
-    
-  }
-  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:io.deephaven.proto.backplane.script.grpc.CompletionItem.text_edit)
+inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::Diagnostic >*
+GetPullDiagnosticResponse::mutable_items() {
+  // @@protoc_insertion_point(field_mutable_list:io.deephaven.proto.backplane.script.grpc.GetPullDiagnosticResponse.items)
+  return &items_;
 }
-inline ::io::deephaven::proto::backplane::script::grpc::TextEdit* CompletionItem::release_text_edit() {
-  
-  ::io::deephaven::proto::backplane::script::grpc::TextEdit* temp = text_edit_;
-  text_edit_ = nullptr;
-#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
-  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
-  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
-  if (GetArenaForAllocation() == nullptr) { delete old; }
-#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
-  if (GetArenaForAllocation() != nullptr) {
-    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
-  }
-#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
-  return temp;
+inline const ::io::deephaven::proto::backplane::script::grpc::Diagnostic& GetPullDiagnosticResponse::_internal_items(int index) const {
+  return items_.Get(index);
 }
-inline ::io::deephaven::proto::backplane::script::grpc::TextEdit* CompletionItem::unsafe_arena_release_text_edit() {
-  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.CompletionItem.text_edit)
-  
-  ::io::deephaven::proto::backplane::script::grpc::TextEdit* temp = text_edit_;
-  text_edit_ = nullptr;
-  return temp;
+inline const ::io::deephaven::proto::backplane::script::grpc::Diagnostic& GetPullDiagnosticResponse::items(int index) const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.GetPullDiagnosticResponse.items)
+  return _internal_items(index);
 }
-inline ::io::deephaven::proto::backplane::script::grpc::TextEdit* CompletionItem::_internal_mutable_text_edit() {
-  
-  if (text_edit_ == nullptr) {
-    auto* p = CreateMaybeMessage<::io::deephaven::proto::backplane::script::grpc::TextEdit>(GetArenaForAllocation());
-    text_edit_ = p;
-  }
-  return text_edit_;
+inline ::io::deephaven::proto::backplane::script::grpc::Diagnostic* GetPullDiagnosticResponse::_internal_add_items() {
+  return items_.Add();
 }
-inline ::io::deephaven::proto::backplane::script::grpc::TextEdit* CompletionItem::mutable_text_edit() {
-  ::io::deephaven::proto::backplane::script::grpc::TextEdit* _msg = _internal_mutable_text_edit();
-  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.CompletionItem.text_edit)
-  return _msg;
+inline ::io::deephaven::proto::backplane::script::grpc::Diagnostic* GetPullDiagnosticResponse::add_items() {
+  ::io::deephaven::proto::backplane::script::grpc::Diagnostic* _add = _internal_add_items();
+  // @@protoc_insertion_point(field_add:io.deephaven.proto.backplane.script.grpc.GetPullDiagnosticResponse.items)
+  return _add;
 }
-inline void CompletionItem::set_allocated_text_edit(::io::deephaven::proto::backplane::script::grpc::TextEdit* text_edit) {
-  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
-  if (message_arena == nullptr) {
-    delete text_edit_;
-  }
-  if (text_edit) {
-    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
-        ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(text_edit);
-    if (message_arena != submessage_arena) {
-      text_edit = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
-          message_arena, text_edit, submessage_arena);
-    }
-    
-  } else {
-    
-  }
-  text_edit_ = text_edit;
-  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.CompletionItem.text_edit)
+inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::Diagnostic >&
+GetPullDiagnosticResponse::items() const {
+  // @@protoc_insertion_point(field_list:io.deephaven.proto.backplane.script.grpc.GetPullDiagnosticResponse.items)
+  return items_;
 }
 
-// string sort_text = 10;
-inline void CompletionItem::clear_sort_text() {
-  sort_text_.ClearToEmpty();
+// -------------------------------------------------------------------
+
+// GetPublishDiagnosticResponse
+
+// string uri = 1;
+inline void GetPublishDiagnosticResponse::clear_uri() {
+  uri_.ClearToEmpty();
 }
-inline const std::string& CompletionItem::sort_text() const {
-  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.CompletionItem.sort_text)
-  return _internal_sort_text();
+inline const std::string& GetPublishDiagnosticResponse::uri() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.GetPublishDiagnosticResponse.uri)
+  return _internal_uri();
 }
 template <typename ArgT0, typename... ArgT>
 inline PROTOBUF_ALWAYS_INLINE
-void CompletionItem::set_sort_text(ArgT0&& arg0, ArgT... args) {
+void GetPublishDiagnosticResponse::set_uri(ArgT0&& arg0, ArgT... args) {
  
- sort_text_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation());
-  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.CompletionItem.sort_text)
+ uri_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation());
+  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.GetPublishDiagnosticResponse.uri)
 }
-inline std::string* CompletionItem::mutable_sort_text() {
-  std::string* _s = _internal_mutable_sort_text();
-  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.CompletionItem.sort_text)
+inline std::string* GetPublishDiagnosticResponse::mutable_uri() {
+  std::string* _s = _internal_mutable_uri();
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.GetPublishDiagnosticResponse.uri)
   return _s;
 }
-inline const std::string& CompletionItem::_internal_sort_text() const {
-  return sort_text_.Get();
+inline const std::string& GetPublishDiagnosticResponse::_internal_uri() const {
+  return uri_.Get();
 }
-inline void CompletionItem::_internal_set_sort_text(const std::string& value) {
+inline void GetPublishDiagnosticResponse::_internal_set_uri(const std::string& value) {
   
-  sort_text_.Set(value, GetArenaForAllocation());
+  uri_.Set(value, GetArenaForAllocation());
 }
-inline std::string* CompletionItem::_internal_mutable_sort_text() {
+inline std::string* GetPublishDiagnosticResponse::_internal_mutable_uri() {
   
-  return sort_text_.Mutable(GetArenaForAllocation());
+  return uri_.Mutable(GetArenaForAllocation());
 }
-inline std::string* CompletionItem::release_sort_text() {
-  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.CompletionItem.sort_text)
-  return sort_text_.Release();
+inline std::string* GetPublishDiagnosticResponse::release_uri() {
+  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.GetPublishDiagnosticResponse.uri)
+  return uri_.Release();
 }
-inline void CompletionItem::set_allocated_sort_text(std::string* sort_text) {
-  if (sort_text != nullptr) {
+inline void GetPublishDiagnosticResponse::set_allocated_uri(std::string* uri) {
+  if (uri != nullptr) {
     
   } else {
     
   }
-  sort_text_.SetAllocated(sort_text, GetArenaForAllocation());
+  uri_.SetAllocated(uri, GetArenaForAllocation());
 #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
-  if (sort_text_.IsDefault()) {
-    sort_text_.Set("", GetArenaForAllocation());
+  if (uri_.IsDefault()) {
+    uri_.Set("", GetArenaForAllocation());
   }
 #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
-  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.CompletionItem.sort_text)
+  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.GetPublishDiagnosticResponse.uri)
 }
 
-// string filter_text = 11;
-inline void CompletionItem::clear_filter_text() {
-  filter_text_.ClearToEmpty();
+// optional int32 version = 2;
+inline bool GetPublishDiagnosticResponse::_internal_has_version() const {
+  bool value = (_has_bits_[0] & 0x00000001u) != 0;
+  return value;
 }
-inline const std::string& CompletionItem::filter_text() const {
-  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.CompletionItem.filter_text)
-  return _internal_filter_text();
+inline bool GetPublishDiagnosticResponse::has_version() const {
+  return _internal_has_version();
+}
+inline void GetPublishDiagnosticResponse::clear_version() {
+  version_ = 0;
+  _has_bits_[0] &= ~0x00000001u;
+}
+inline int32_t GetPublishDiagnosticResponse::_internal_version() const {
+  return version_;
+}
+inline int32_t GetPublishDiagnosticResponse::version() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.GetPublishDiagnosticResponse.version)
+  return _internal_version();
+}
+inline void GetPublishDiagnosticResponse::_internal_set_version(int32_t value) {
+  _has_bits_[0] |= 0x00000001u;
+  version_ = value;
+}
+inline void GetPublishDiagnosticResponse::set_version(int32_t value) {
+  _internal_set_version(value);
+  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.GetPublishDiagnosticResponse.version)
+}
+
+// repeated .io.deephaven.proto.backplane.script.grpc.Diagnostic diagnostics = 3;
+inline int GetPublishDiagnosticResponse::_internal_diagnostics_size() const {
+  return diagnostics_.size();
+}
+inline int GetPublishDiagnosticResponse::diagnostics_size() const {
+  return _internal_diagnostics_size();
+}
+inline void GetPublishDiagnosticResponse::clear_diagnostics() {
+  diagnostics_.Clear();
+}
+inline ::io::deephaven::proto::backplane::script::grpc::Diagnostic* GetPublishDiagnosticResponse::mutable_diagnostics(int index) {
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.GetPublishDiagnosticResponse.diagnostics)
+  return diagnostics_.Mutable(index);
+}
+inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::Diagnostic >*
+GetPublishDiagnosticResponse::mutable_diagnostics() {
+  // @@protoc_insertion_point(field_mutable_list:io.deephaven.proto.backplane.script.grpc.GetPublishDiagnosticResponse.diagnostics)
+  return &diagnostics_;
+}
+inline const ::io::deephaven::proto::backplane::script::grpc::Diagnostic& GetPublishDiagnosticResponse::_internal_diagnostics(int index) const {
+  return diagnostics_.Get(index);
+}
+inline const ::io::deephaven::proto::backplane::script::grpc::Diagnostic& GetPublishDiagnosticResponse::diagnostics(int index) const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.GetPublishDiagnosticResponse.diagnostics)
+  return _internal_diagnostics(index);
+}
+inline ::io::deephaven::proto::backplane::script::grpc::Diagnostic* GetPublishDiagnosticResponse::_internal_add_diagnostics() {
+  return diagnostics_.Add();
+}
+inline ::io::deephaven::proto::backplane::script::grpc::Diagnostic* GetPublishDiagnosticResponse::add_diagnostics() {
+  ::io::deephaven::proto::backplane::script::grpc::Diagnostic* _add = _internal_add_diagnostics();
+  // @@protoc_insertion_point(field_add:io.deephaven.proto.backplane.script.grpc.GetPublishDiagnosticResponse.diagnostics)
+  return _add;
+}
+inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::Diagnostic >&
+GetPublishDiagnosticResponse::diagnostics() const {
+  // @@protoc_insertion_point(field_list:io.deephaven.proto.backplane.script.grpc.GetPublishDiagnosticResponse.diagnostics)
+  return diagnostics_;
+}
+
+// -------------------------------------------------------------------
+
+// Diagnostic_CodeDescription
+
+// string href = 1;
+inline void Diagnostic_CodeDescription::clear_href() {
+  href_.ClearToEmpty();
+}
+inline const std::string& Diagnostic_CodeDescription::href() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.Diagnostic.CodeDescription.href)
+  return _internal_href();
 }
 template <typename ArgT0, typename... ArgT>
 inline PROTOBUF_ALWAYS_INLINE
-void CompletionItem::set_filter_text(ArgT0&& arg0, ArgT... args) {
+void Diagnostic_CodeDescription::set_href(ArgT0&& arg0, ArgT... args) {
  
- filter_text_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation());
-  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.CompletionItem.filter_text)
+ href_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation());
+  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.Diagnostic.CodeDescription.href)
 }
-inline std::string* CompletionItem::mutable_filter_text() {
-  std::string* _s = _internal_mutable_filter_text();
-  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.CompletionItem.filter_text)
+inline std::string* Diagnostic_CodeDescription::mutable_href() {
+  std::string* _s = _internal_mutable_href();
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.Diagnostic.CodeDescription.href)
   return _s;
 }
-inline const std::string& CompletionItem::_internal_filter_text() const {
-  return filter_text_.Get();
+inline const std::string& Diagnostic_CodeDescription::_internal_href() const {
+  return href_.Get();
 }
-inline void CompletionItem::_internal_set_filter_text(const std::string& value) {
+inline void Diagnostic_CodeDescription::_internal_set_href(const std::string& value) {
   
-  filter_text_.Set(value, GetArenaForAllocation());
+  href_.Set(value, GetArenaForAllocation());
 }
-inline std::string* CompletionItem::_internal_mutable_filter_text() {
+inline std::string* Diagnostic_CodeDescription::_internal_mutable_href() {
   
-  return filter_text_.Mutable(GetArenaForAllocation());
+  return href_.Mutable(GetArenaForAllocation());
 }
-inline std::string* CompletionItem::release_filter_text() {
-  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.CompletionItem.filter_text)
-  return filter_text_.Release();
+inline std::string* Diagnostic_CodeDescription::release_href() {
+  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.Diagnostic.CodeDescription.href)
+  return href_.Release();
 }
-inline void CompletionItem::set_allocated_filter_text(std::string* filter_text) {
-  if (filter_text != nullptr) {
+inline void Diagnostic_CodeDescription::set_allocated_href(std::string* href) {
+  if (href != nullptr) {
     
   } else {
     
   }
-  filter_text_.SetAllocated(filter_text, GetArenaForAllocation());
+  href_.SetAllocated(href, GetArenaForAllocation());
 #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
-  if (filter_text_.IsDefault()) {
-    filter_text_.Set("", GetArenaForAllocation());
+  if (href_.IsDefault()) {
+    href_.Set("", GetArenaForAllocation());
   }
 #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
-  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.CompletionItem.filter_text)
+  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.Diagnostic.CodeDescription.href)
 }
 
-// int32 insert_text_format = 12;
-inline void CompletionItem::clear_insert_text_format() {
-  insert_text_format_ = 0;
-}
-inline int32_t CompletionItem::_internal_insert_text_format() const {
-  return insert_text_format_;
-}
-inline int32_t CompletionItem::insert_text_format() const {
-  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.CompletionItem.insert_text_format)
-  return _internal_insert_text_format();
-}
-inline void CompletionItem::_internal_set_insert_text_format(int32_t value) {
-  
-  insert_text_format_ = value;
-}
-inline void CompletionItem::set_insert_text_format(int32_t value) {
-  _internal_set_insert_text_format(value);
-  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.CompletionItem.insert_text_format)
-}
+// -------------------------------------------------------------------
 
-// repeated .io.deephaven.proto.backplane.script.grpc.TextEdit additional_text_edits = 13;
-inline int CompletionItem::_internal_additional_text_edits_size() const {
-  return additional_text_edits_.size();
-}
-inline int CompletionItem::additional_text_edits_size() const {
-  return _internal_additional_text_edits_size();
+// Diagnostic
+
+// .io.deephaven.proto.backplane.script.grpc.DocumentRange range = 1;
+inline bool Diagnostic::_internal_has_range() const {
+  return this != internal_default_instance() && range_ != nullptr;
 }
-inline void CompletionItem::clear_additional_text_edits() {
-  additional_text_edits_.Clear();
+inline bool Diagnostic::has_range() const {
+  return _internal_has_range();
 }
-inline ::io::deephaven::proto::backplane::script::grpc::TextEdit* CompletionItem::mutable_additional_text_edits(int index) {
-  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.CompletionItem.additional_text_edits)
-  return additional_text_edits_.Mutable(index);
+inline void Diagnostic::clear_range() {
+  if (GetArenaForAllocation() == nullptr && range_ != nullptr) {
+    delete range_;
+  }
+  range_ = nullptr;
 }
-inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::TextEdit >*
-CompletionItem::mutable_additional_text_edits() {
-  // @@protoc_insertion_point(field_mutable_list:io.deephaven.proto.backplane.script.grpc.CompletionItem.additional_text_edits)
-  return &additional_text_edits_;
+inline const ::io::deephaven::proto::backplane::script::grpc::DocumentRange& Diagnostic::_internal_range() const {
+  const ::io::deephaven::proto::backplane::script::grpc::DocumentRange* p = range_;
+  return p != nullptr ? *p : reinterpret_cast<const ::io::deephaven::proto::backplane::script::grpc::DocumentRange&>(
+      ::io::deephaven::proto::backplane::script::grpc::_DocumentRange_default_instance_);
 }
-inline const ::io::deephaven::proto::backplane::script::grpc::TextEdit& CompletionItem::_internal_additional_text_edits(int index) const {
-  return additional_text_edits_.Get(index);
+inline const ::io::deephaven::proto::backplane::script::grpc::DocumentRange& Diagnostic::range() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.Diagnostic.range)
+  return _internal_range();
 }
-inline const ::io::deephaven::proto::backplane::script::grpc::TextEdit& CompletionItem::additional_text_edits(int index) const {
-  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.CompletionItem.additional_text_edits)
-  return _internal_additional_text_edits(index);
+inline void Diagnostic::unsafe_arena_set_allocated_range(
+    ::io::deephaven::proto::backplane::script::grpc::DocumentRange* range) {
+  if (GetArenaForAllocation() == nullptr) {
+    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(range_);
+  }
+  range_ = range;
+  if (range) {
+    
+  } else {
+    
+  }
+  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:io.deephaven.proto.backplane.script.grpc.Diagnostic.range)
 }
-inline ::io::deephaven::proto::backplane::script::grpc::TextEdit* CompletionItem::_internal_add_additional_text_edits() {
-  return additional_text_edits_.Add();
+inline ::io::deephaven::proto::backplane::script::grpc::DocumentRange* Diagnostic::release_range() {
+  
+  ::io::deephaven::proto::backplane::script::grpc::DocumentRange* temp = range_;
+  range_ = nullptr;
+#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
+  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
+  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
+  if (GetArenaForAllocation() == nullptr) { delete old; }
+#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
+  if (GetArenaForAllocation() != nullptr) {
+    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
+  }
+#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
+  return temp;
 }
-inline ::io::deephaven::proto::backplane::script::grpc::TextEdit* CompletionItem::add_additional_text_edits() {
-  ::io::deephaven::proto::backplane::script::grpc::TextEdit* _add = _internal_add_additional_text_edits();
-  // @@protoc_insertion_point(field_add:io.deephaven.proto.backplane.script.grpc.CompletionItem.additional_text_edits)
-  return _add;
+inline ::io::deephaven::proto::backplane::script::grpc::DocumentRange* Diagnostic::unsafe_arena_release_range() {
+  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.Diagnostic.range)
+  
+  ::io::deephaven::proto::backplane::script::grpc::DocumentRange* temp = range_;
+  range_ = nullptr;
+  return temp;
 }
-inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::io::deephaven::proto::backplane::script::grpc::TextEdit >&
-CompletionItem::additional_text_edits() const {
-  // @@protoc_insertion_point(field_list:io.deephaven.proto.backplane.script.grpc.CompletionItem.additional_text_edits)
-  return additional_text_edits_;
+inline ::io::deephaven::proto::backplane::script::grpc::DocumentRange* Diagnostic::_internal_mutable_range() {
+  
+  if (range_ == nullptr) {
+    auto* p = CreateMaybeMessage<::io::deephaven::proto::backplane::script::grpc::DocumentRange>(GetArenaForAllocation());
+    range_ = p;
+  }
+  return range_;
 }
-
-// repeated string commit_characters = 14;
-inline int CompletionItem::_internal_commit_characters_size() const {
-  return commit_characters_.size();
+inline ::io::deephaven::proto::backplane::script::grpc::DocumentRange* Diagnostic::mutable_range() {
+  ::io::deephaven::proto::backplane::script::grpc::DocumentRange* _msg = _internal_mutable_range();
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.Diagnostic.range)
+  return _msg;
 }
-inline int CompletionItem::commit_characters_size() const {
-  return _internal_commit_characters_size();
+inline void Diagnostic::set_allocated_range(::io::deephaven::proto::backplane::script::grpc::DocumentRange* range) {
+  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
+  if (message_arena == nullptr) {
+    delete range_;
+  }
+  if (range) {
+    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
+        ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(range);
+    if (message_arena != submessage_arena) {
+      range = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
+          message_arena, range, submessage_arena);
+    }
+    
+  } else {
+    
+  }
+  range_ = range;
+  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.Diagnostic.range)
 }
-inline void CompletionItem::clear_commit_characters() {
-  commit_characters_.Clear();
+
+// .io.deephaven.proto.backplane.script.grpc.Diagnostic.DiagnosticSeverity severity = 2;
+inline void Diagnostic::clear_severity() {
+  severity_ = 0;
 }
-inline std::string* CompletionItem::add_commit_characters() {
-  std::string* _s = _internal_add_commit_characters();
-  // @@protoc_insertion_point(field_add_mutable:io.deephaven.proto.backplane.script.grpc.CompletionItem.commit_characters)
-  return _s;
+inline ::io::deephaven::proto::backplane::script::grpc::Diagnostic_DiagnosticSeverity Diagnostic::_internal_severity() const {
+  return static_cast< ::io::deephaven::proto::backplane::script::grpc::Diagnostic_DiagnosticSeverity >(severity_);
 }
-inline const std::string& CompletionItem::_internal_commit_characters(int index) const {
-  return commit_characters_.Get(index);
+inline ::io::deephaven::proto::backplane::script::grpc::Diagnostic_DiagnosticSeverity Diagnostic::severity() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.Diagnostic.severity)
+  return _internal_severity();
 }
-inline const std::string& CompletionItem::commit_characters(int index) const {
-  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.CompletionItem.commit_characters)
-  return _internal_commit_characters(index);
+inline void Diagnostic::_internal_set_severity(::io::deephaven::proto::backplane::script::grpc::Diagnostic_DiagnosticSeverity value) {
+  
+  severity_ = value;
 }
-inline std::string* CompletionItem::mutable_commit_characters(int index) {
-  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.CompletionItem.commit_characters)
-  return commit_characters_.Mutable(index);
+inline void Diagnostic::set_severity(::io::deephaven::proto::backplane::script::grpc::Diagnostic_DiagnosticSeverity value) {
+  _internal_set_severity(value);
+  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.Diagnostic.severity)
 }
-inline void CompletionItem::set_commit_characters(int index, const std::string& value) {
-  commit_characters_.Mutable(index)->assign(value);
-  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.CompletionItem.commit_characters)
+
+// optional string code = 3;
+inline bool Diagnostic::_internal_has_code() const {
+  bool value = (_has_bits_[0] & 0x00000001u) != 0;
+  return value;
 }
-inline void CompletionItem::set_commit_characters(int index, std::string&& value) {
-  commit_characters_.Mutable(index)->assign(std::move(value));
-  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.CompletionItem.commit_characters)
+inline bool Diagnostic::has_code() const {
+  return _internal_has_code();
 }
-inline void CompletionItem::set_commit_characters(int index, const char* value) {
-  GOOGLE_DCHECK(value != nullptr);
-  commit_characters_.Mutable(index)->assign(value);
-  // @@protoc_insertion_point(field_set_char:io.deephaven.proto.backplane.script.grpc.CompletionItem.commit_characters)
+inline void Diagnostic::clear_code() {
+  code_.ClearToEmpty();
+  _has_bits_[0] &= ~0x00000001u;
 }
-inline void CompletionItem::set_commit_characters(int index, const char* value, size_t size) {
-  commit_characters_.Mutable(index)->assign(
-    reinterpret_cast<const char*>(value), size);
-  // @@protoc_insertion_point(field_set_pointer:io.deephaven.proto.backplane.script.grpc.CompletionItem.commit_characters)
+inline const std::string& Diagnostic::code() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.Diagnostic.code)
+  return _internal_code();
 }
-inline std::string* CompletionItem::_internal_add_commit_characters() {
-  return commit_characters_.Add();
+template <typename ArgT0, typename... ArgT>
+inline PROTOBUF_ALWAYS_INLINE
+void Diagnostic::set_code(ArgT0&& arg0, ArgT... args) {
+ _has_bits_[0] |= 0x00000001u;
+ code_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation());
+  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.Diagnostic.code)
 }
-inline void CompletionItem::add_commit_characters(const std::string& value) {
-  commit_characters_.Add()->assign(value);
-  // @@protoc_insertion_point(field_add:io.deephaven.proto.backplane.script.grpc.CompletionItem.commit_characters)
+inline std::string* Diagnostic::mutable_code() {
+  std::string* _s = _internal_mutable_code();
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.Diagnostic.code)
+  return _s;
 }
-inline void CompletionItem::add_commit_characters(std::string&& value) {
-  commit_characters_.Add(std::move(value));
-  // @@protoc_insertion_point(field_add:io.deephaven.proto.backplane.script.grpc.CompletionItem.commit_characters)
+inline const std::string& Diagnostic::_internal_code() const {
+  return code_.Get();
 }
-inline void CompletionItem::add_commit_characters(const char* value) {
-  GOOGLE_DCHECK(value != nullptr);
-  commit_characters_.Add()->assign(value);
-  // @@protoc_insertion_point(field_add_char:io.deephaven.proto.backplane.script.grpc.CompletionItem.commit_characters)
+inline void Diagnostic::_internal_set_code(const std::string& value) {
+  _has_bits_[0] |= 0x00000001u;
+  code_.Set(value, GetArenaForAllocation());
 }
-inline void CompletionItem::add_commit_characters(const char* value, size_t size) {
-  commit_characters_.Add()->assign(reinterpret_cast<const char*>(value), size);
-  // @@protoc_insertion_point(field_add_pointer:io.deephaven.proto.backplane.script.grpc.CompletionItem.commit_characters)
+inline std::string* Diagnostic::_internal_mutable_code() {
+  _has_bits_[0] |= 0x00000001u;
+  return code_.Mutable(GetArenaForAllocation());
 }
-inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>&
-CompletionItem::commit_characters() const {
-  // @@protoc_insertion_point(field_list:io.deephaven.proto.backplane.script.grpc.CompletionItem.commit_characters)
-  return commit_characters_;
+inline std::string* Diagnostic::release_code() {
+  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.Diagnostic.code)
+  if (!_internal_has_code()) {
+    return nullptr;
+  }
+  _has_bits_[0] &= ~0x00000001u;
+  auto* p = code_.Release();
+#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  if (code_.IsDefault()) {
+    code_.Set("", GetArenaForAllocation());
+  }
+#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  return p;
 }
-inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>*
-CompletionItem::mutable_commit_characters() {
-  // @@protoc_insertion_point(field_mutable_list:io.deephaven.proto.backplane.script.grpc.CompletionItem.commit_characters)
-  return &commit_characters_;
+inline void Diagnostic::set_allocated_code(std::string* code) {
+  if (code != nullptr) {
+    _has_bits_[0] |= 0x00000001u;
+  } else {
+    _has_bits_[0] &= ~0x00000001u;
+  }
+  code_.SetAllocated(code, GetArenaForAllocation());
+#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  if (code_.IsDefault()) {
+    code_.Set("", GetArenaForAllocation());
+  }
+#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.Diagnostic.code)
 }
 
-// -------------------------------------------------------------------
-
-// TextEdit
-
-// .io.deephaven.proto.backplane.script.grpc.DocumentRange range = 1;
-inline bool TextEdit::_internal_has_range() const {
-  return this != internal_default_instance() && range_ != nullptr;
+// optional .io.deephaven.proto.backplane.script.grpc.Diagnostic.CodeDescription code_description = 4;
+inline bool Diagnostic::_internal_has_code_description() const {
+  bool value = (_has_bits_[0] & 0x00000008u) != 0;
+  PROTOBUF_ASSUME(!value || code_description_ != nullptr);
+  return value;
 }
-inline bool TextEdit::has_range() const {
-  return _internal_has_range();
+inline bool Diagnostic::has_code_description() const {
+  return _internal_has_code_description();
 }
-inline void TextEdit::clear_range() {
-  if (GetArenaForAllocation() == nullptr && range_ != nullptr) {
-    delete range_;
-  }
-  range_ = nullptr;
+inline void Diagnostic::clear_code_description() {
+  if (code_description_ != nullptr) code_description_->Clear();
+  _has_bits_[0] &= ~0x00000008u;
 }
-inline const ::io::deephaven::proto::backplane::script::grpc::DocumentRange& TextEdit::_internal_range() const {
-  const ::io::deephaven::proto::backplane::script::grpc::DocumentRange* p = range_;
-  return p != nullptr ? *p : reinterpret_cast<const ::io::deephaven::proto::backplane::script::grpc::DocumentRange&>(
-      ::io::deephaven::proto::backplane::script::grpc::_DocumentRange_default_instance_);
+inline const ::io::deephaven::proto::backplane::script::grpc::Diagnostic_CodeDescription& Diagnostic::_internal_code_description() const {
+  const ::io::deephaven::proto::backplane::script::grpc::Diagnostic_CodeDescription* p = code_description_;
+  return p != nullptr ? *p : reinterpret_cast<const ::io::deephaven::proto::backplane::script::grpc::Diagnostic_CodeDescription&>(
+      ::io::deephaven::proto::backplane::script::grpc::_Diagnostic_CodeDescription_default_instance_);
 }
-inline const ::io::deephaven::proto::backplane::script::grpc::DocumentRange& TextEdit::range() const {
-  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.TextEdit.range)
-  return _internal_range();
+inline const ::io::deephaven::proto::backplane::script::grpc::Diagnostic_CodeDescription& Diagnostic::code_description() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.Diagnostic.code_description)
+  return _internal_code_description();
 }
-inline void TextEdit::unsafe_arena_set_allocated_range(
-    ::io::deephaven::proto::backplane::script::grpc::DocumentRange* range) {
+inline void Diagnostic::unsafe_arena_set_allocated_code_description(
+    ::io::deephaven::proto::backplane::script::grpc::Diagnostic_CodeDescription* code_description) {
   if (GetArenaForAllocation() == nullptr) {
-    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(range_);
+    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(code_description_);
   }
-  range_ = range;
-  if (range) {
-    
+  code_description_ = code_description;
+  if (code_description) {
+    _has_bits_[0] |= 0x00000008u;
   } else {
-    
+    _has_bits_[0] &= ~0x00000008u;
   }
-  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:io.deephaven.proto.backplane.script.grpc.TextEdit.range)
+  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:io.deephaven.proto.backplane.script.grpc.Diagnostic.code_description)
 }
-inline ::io::deephaven::proto::backplane::script::grpc::DocumentRange* TextEdit::release_range() {
-  
-  ::io::deephaven::proto::backplane::script::grpc::DocumentRange* temp = range_;
-  range_ = nullptr;
+inline ::io::deephaven::proto::backplane::script::grpc::Diagnostic_CodeDescription* Diagnostic::release_code_description() {
+  _has_bits_[0] &= ~0x00000008u;
+  ::io::deephaven::proto::backplane::script::grpc::Diagnostic_CodeDescription* temp = code_description_;
+  code_description_ = nullptr;
 #ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
   auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
   temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
@@ -13731,94 +19959,273 @@ inline ::io::deephaven::proto::backplane::script::grpc::DocumentRange* TextEdit:
 #endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
   return temp;
 }
-inline ::io::deephaven::proto::backplane::script::grpc::DocumentRange* TextEdit::unsafe_arena_release_range() {
-  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.TextEdit.range)
-  
-  ::io::deephaven::proto::backplane::script::grpc::DocumentRange* temp = range_;
-  range_ = nullptr;
+inline ::io::deephaven::proto::backplane::script::grpc::Diagnostic_CodeDescription* Diagnostic::unsafe_arena_release_code_description() {
+  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.Diagnostic.code_description)
+  _has_bits_[0] &= ~0x00000008u;
+  ::io::deephaven::proto::backplane::script::grpc::Diagnostic_CodeDescription* temp = code_description_;
+  code_description_ = nullptr;
   return temp;
 }
-inline ::io::deephaven::proto::backplane::script::grpc::DocumentRange* TextEdit::_internal_mutable_range() {
-  
-  if (range_ == nullptr) {
-    auto* p = CreateMaybeMessage<::io::deephaven::proto::backplane::script::grpc::DocumentRange>(GetArenaForAllocation());
-    range_ = p;
+inline ::io::deephaven::proto::backplane::script::grpc::Diagnostic_CodeDescription* Diagnostic::_internal_mutable_code_description() {
+  _has_bits_[0] |= 0x00000008u;
+  if (code_description_ == nullptr) {
+    auto* p = CreateMaybeMessage<::io::deephaven::proto::backplane::script::grpc::Diagnostic_CodeDescription>(GetArenaForAllocation());
+    code_description_ = p;
   }
-  return range_;
+  return code_description_;
 }
-inline ::io::deephaven::proto::backplane::script::grpc::DocumentRange* TextEdit::mutable_range() {
-  ::io::deephaven::proto::backplane::script::grpc::DocumentRange* _msg = _internal_mutable_range();
-  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.TextEdit.range)
+inline ::io::deephaven::proto::backplane::script::grpc::Diagnostic_CodeDescription* Diagnostic::mutable_code_description() {
+  ::io::deephaven::proto::backplane::script::grpc::Diagnostic_CodeDescription* _msg = _internal_mutable_code_description();
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.Diagnostic.code_description)
   return _msg;
 }
-inline void TextEdit::set_allocated_range(::io::deephaven::proto::backplane::script::grpc::DocumentRange* range) {
+inline void Diagnostic::set_allocated_code_description(::io::deephaven::proto::backplane::script::grpc::Diagnostic_CodeDescription* code_description) {
   ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
   if (message_arena == nullptr) {
-    delete range_;
+    delete code_description_;
   }
-  if (range) {
+  if (code_description) {
     ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
-        ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(range);
+        ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(code_description);
     if (message_arena != submessage_arena) {
-      range = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
-          message_arena, range, submessage_arena);
+      code_description = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
+          message_arena, code_description, submessage_arena);
     }
-    
+    _has_bits_[0] |= 0x00000008u;
   } else {
-    
+    _has_bits_[0] &= ~0x00000008u;
   }
-  range_ = range;
-  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.TextEdit.range)
+  code_description_ = code_description;
+  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.Diagnostic.code_description)
 }
 
-// string text = 2;
-inline void TextEdit::clear_text() {
-  text_.ClearToEmpty();
+// optional string source = 5;
+inline bool Diagnostic::_internal_has_source() const {
+  bool value = (_has_bits_[0] & 0x00000002u) != 0;
+  return value;
 }
-inline const std::string& TextEdit::text() const {
-  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.TextEdit.text)
-  return _internal_text();
+inline bool Diagnostic::has_source() const {
+  return _internal_has_source();
+}
+inline void Diagnostic::clear_source() {
+  source_.ClearToEmpty();
+  _has_bits_[0] &= ~0x00000002u;
+}
+inline const std::string& Diagnostic::source() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.Diagnostic.source)
+  return _internal_source();
 }
 template <typename ArgT0, typename... ArgT>
 inline PROTOBUF_ALWAYS_INLINE
-void TextEdit::set_text(ArgT0&& arg0, ArgT... args) {
+void Diagnostic::set_source(ArgT0&& arg0, ArgT... args) {
+ _has_bits_[0] |= 0x00000002u;
+ source_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation());
+  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.Diagnostic.source)
+}
+inline std::string* Diagnostic::mutable_source() {
+  std::string* _s = _internal_mutable_source();
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.Diagnostic.source)
+  return _s;
+}
+inline const std::string& Diagnostic::_internal_source() const {
+  return source_.Get();
+}
+inline void Diagnostic::_internal_set_source(const std::string& value) {
+  _has_bits_[0] |= 0x00000002u;
+  source_.Set(value, GetArenaForAllocation());
+}
+inline std::string* Diagnostic::_internal_mutable_source() {
+  _has_bits_[0] |= 0x00000002u;
+  return source_.Mutable(GetArenaForAllocation());
+}
+inline std::string* Diagnostic::release_source() {
+  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.Diagnostic.source)
+  if (!_internal_has_source()) {
+    return nullptr;
+  }
+  _has_bits_[0] &= ~0x00000002u;
+  auto* p = source_.Release();
+#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  if (source_.IsDefault()) {
+    source_.Set("", GetArenaForAllocation());
+  }
+#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  return p;
+}
+inline void Diagnostic::set_allocated_source(std::string* source) {
+  if (source != nullptr) {
+    _has_bits_[0] |= 0x00000002u;
+  } else {
+    _has_bits_[0] &= ~0x00000002u;
+  }
+  source_.SetAllocated(source, GetArenaForAllocation());
+#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  if (source_.IsDefault()) {
+    source_.Set("", GetArenaForAllocation());
+  }
+#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.Diagnostic.source)
+}
+
+// string message = 6;
+inline void Diagnostic::clear_message() {
+  message_.ClearToEmpty();
+}
+inline const std::string& Diagnostic::message() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.Diagnostic.message)
+  return _internal_message();
+}
+template <typename ArgT0, typename... ArgT>
+inline PROTOBUF_ALWAYS_INLINE
+void Diagnostic::set_message(ArgT0&& arg0, ArgT... args) {
  
- text_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation());
-  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.TextEdit.text)
+ message_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation());
+  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.Diagnostic.message)
 }
-inline std::string* TextEdit::mutable_text() {
-  std::string* _s = _internal_mutable_text();
-  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.TextEdit.text)
+inline std::string* Diagnostic::mutable_message() {
+  std::string* _s = _internal_mutable_message();
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.Diagnostic.message)
   return _s;
 }
-inline const std::string& TextEdit::_internal_text() const {
-  return text_.Get();
+inline const std::string& Diagnostic::_internal_message() const {
+  return message_.Get();
 }
-inline void TextEdit::_internal_set_text(const std::string& value) {
+inline void Diagnostic::_internal_set_message(const std::string& value) {
   
-  text_.Set(value, GetArenaForAllocation());
+  message_.Set(value, GetArenaForAllocation());
 }
-inline std::string* TextEdit::_internal_mutable_text() {
+inline std::string* Diagnostic::_internal_mutable_message() {
   
-  return text_.Mutable(GetArenaForAllocation());
+  return message_.Mutable(GetArenaForAllocation());
 }
-inline std::string* TextEdit::release_text() {
-  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.TextEdit.text)
-  return text_.Release();
+inline std::string* Diagnostic::release_message() {
+  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.Diagnostic.message)
+  return message_.Release();
 }
-inline void TextEdit::set_allocated_text(std::string* text) {
-  if (text != nullptr) {
+inline void Diagnostic::set_allocated_message(std::string* message) {
+  if (message != nullptr) {
     
   } else {
     
   }
-  text_.SetAllocated(text, GetArenaForAllocation());
+  message_.SetAllocated(message, GetArenaForAllocation());
 #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
-  if (text_.IsDefault()) {
-    text_.Set("", GetArenaForAllocation());
+  if (message_.IsDefault()) {
+    message_.Set("", GetArenaForAllocation());
   }
 #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
-  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.TextEdit.text)
+  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.Diagnostic.message)
+}
+
+// repeated .io.deephaven.proto.backplane.script.grpc.Diagnostic.DiagnosticTag tags = 7;
+inline int Diagnostic::_internal_tags_size() const {
+  return tags_.size();
+}
+inline int Diagnostic::tags_size() const {
+  return _internal_tags_size();
+}
+inline void Diagnostic::clear_tags() {
+  tags_.Clear();
+}
+inline ::io::deephaven::proto::backplane::script::grpc::Diagnostic_DiagnosticTag Diagnostic::_internal_tags(int index) const {
+  return static_cast< ::io::deephaven::proto::backplane::script::grpc::Diagnostic_DiagnosticTag >(tags_.Get(index));
+}
+inline ::io::deephaven::proto::backplane::script::grpc::Diagnostic_DiagnosticTag Diagnostic::tags(int index) const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.Diagnostic.tags)
+  return _internal_tags(index);
+}
+inline void Diagnostic::set_tags(int index, ::io::deephaven::proto::backplane::script::grpc::Diagnostic_DiagnosticTag value) {
+  tags_.Set(index, value);
+  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.Diagnostic.tags)
+}
+inline void Diagnostic::_internal_add_tags(::io::deephaven::proto::backplane::script::grpc::Diagnostic_DiagnosticTag value) {
+  tags_.Add(value);
+}
+inline void Diagnostic::add_tags(::io::deephaven::proto::backplane::script::grpc::Diagnostic_DiagnosticTag value) {
+  _internal_add_tags(value);
+  // @@protoc_insertion_point(field_add:io.deephaven.proto.backplane.script.grpc.Diagnostic.tags)
+}
+inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField<int>&
+Diagnostic::tags() const {
+  // @@protoc_insertion_point(field_list:io.deephaven.proto.backplane.script.grpc.Diagnostic.tags)
+  return tags_;
+}
+inline ::PROTOBUF_NAMESPACE_ID::RepeatedField<int>*
+Diagnostic::_internal_mutable_tags() {
+  return &tags_;
+}
+inline ::PROTOBUF_NAMESPACE_ID::RepeatedField<int>*
+Diagnostic::mutable_tags() {
+  // @@protoc_insertion_point(field_mutable_list:io.deephaven.proto.backplane.script.grpc.Diagnostic.tags)
+  return _internal_mutable_tags();
+}
+
+// optional bytes data = 9;
+inline bool Diagnostic::_internal_has_data() const {
+  bool value = (_has_bits_[0] & 0x00000004u) != 0;
+  return value;
+}
+inline bool Diagnostic::has_data() const {
+  return _internal_has_data();
+}
+inline void Diagnostic::clear_data() {
+  data_.ClearToEmpty();
+  _has_bits_[0] &= ~0x00000004u;
+}
+inline const std::string& Diagnostic::data() const {
+  // @@protoc_insertion_point(field_get:io.deephaven.proto.backplane.script.grpc.Diagnostic.data)
+  return _internal_data();
+}
+template <typename ArgT0, typename... ArgT>
+inline PROTOBUF_ALWAYS_INLINE
+void Diagnostic::set_data(ArgT0&& arg0, ArgT... args) {
+ _has_bits_[0] |= 0x00000004u;
+ data_.SetBytes(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation());
+  // @@protoc_insertion_point(field_set:io.deephaven.proto.backplane.script.grpc.Diagnostic.data)
+}
+inline std::string* Diagnostic::mutable_data() {
+  std::string* _s = _internal_mutable_data();
+  // @@protoc_insertion_point(field_mutable:io.deephaven.proto.backplane.script.grpc.Diagnostic.data)
+  return _s;
+}
+inline const std::string& Diagnostic::_internal_data() const {
+  return data_.Get();
+}
+inline void Diagnostic::_internal_set_data(const std::string& value) {
+  _has_bits_[0] |= 0x00000004u;
+  data_.Set(value, GetArenaForAllocation());
+}
+inline std::string* Diagnostic::_internal_mutable_data() {
+  _has_bits_[0] |= 0x00000004u;
+  return data_.Mutable(GetArenaForAllocation());
+}
+inline std::string* Diagnostic::release_data() {
+  // @@protoc_insertion_point(field_release:io.deephaven.proto.backplane.script.grpc.Diagnostic.data)
+  if (!_internal_has_data()) {
+    return nullptr;
+  }
+  _has_bits_[0] &= ~0x00000004u;
+  auto* p = data_.Release();
+#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  if (data_.IsDefault()) {
+    data_.Set("", GetArenaForAllocation());
+  }
+#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  return p;
+}
+inline void Diagnostic::set_allocated_data(std::string* data) {
+  if (data != nullptr) {
+    _has_bits_[0] |= 0x00000004u;
+  } else {
+    _has_bits_[0] &= ~0x00000004u;
+  }
+  data_.SetAllocated(data, GetArenaForAllocation());
+#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  if (data_.IsDefault()) {
+    data_.Set("", GetArenaForAllocation());
+  }
+#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  // @@protoc_insertion_point(field_set_allocated:io.deephaven.proto.backplane.script.grpc.Diagnostic.data)
 }
 
 // -------------------------------------------------------------------
@@ -18925,6 +25332,36 @@ FigureDescriptor::mutable_errors() {
 
 // -------------------------------------------------------------------
 
+// -------------------------------------------------------------------
+
+// -------------------------------------------------------------------
+
+// -------------------------------------------------------------------
+
+// -------------------------------------------------------------------
+
+// -------------------------------------------------------------------
+
+// -------------------------------------------------------------------
+
+// -------------------------------------------------------------------
+
+// -------------------------------------------------------------------
+
+// -------------------------------------------------------------------
+
+// -------------------------------------------------------------------
+
+// -------------------------------------------------------------------
+
+// -------------------------------------------------------------------
+
+// -------------------------------------------------------------------
+
+// -------------------------------------------------------------------
+
+// -------------------------------------------------------------------
+
 
 // @@protoc_insertion_point(namespace_scope)
 
@@ -18937,6 +25374,16 @@ FigureDescriptor::mutable_errors() {
 
 PROTOBUF_NAMESPACE_OPEN
 
+template <> struct is_proto_enum< ::io::deephaven::proto::backplane::script::grpc::Diagnostic_DiagnosticSeverity> : ::std::true_type {};
+template <>
+inline const EnumDescriptor* GetEnumDescriptor< ::io::deephaven::proto::backplane::script::grpc::Diagnostic_DiagnosticSeverity>() {
+  return ::io::deephaven::proto::backplane::script::grpc::Diagnostic_DiagnosticSeverity_descriptor();
+}
+template <> struct is_proto_enum< ::io::deephaven::proto::backplane::script::grpc::Diagnostic_DiagnosticTag> : ::std::true_type {};
+template <>
+inline const EnumDescriptor* GetEnumDescriptor< ::io::deephaven::proto::backplane::script::grpc::Diagnostic_DiagnosticTag>() {
+  return ::io::deephaven::proto::backplane::script::grpc::Diagnostic_DiagnosticTag_descriptor();
+}
 template <> struct is_proto_enum< ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_ChartDescriptor_ChartType> : ::std::true_type {};
 template <>
 inline const EnumDescriptor* GetEnumDescriptor< ::io::deephaven::proto::backplane::script::grpc::FigureDescriptor_ChartDescriptor_ChartType>() {
diff --git a/go/internal/proto/console/console.pb.go b/go/internal/proto/console/console.pb.go
index 3342765e068..b411245bac4 100644
--- a/go/internal/proto/console/console.pb.go
+++ b/go/internal/proto/console/console.pb.go
@@ -25,6 +25,110 @@ const (
 	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
 )
 
+type Diagnostic_DiagnosticSeverity int32
+
+const (
+	Diagnostic_NOT_SET_SEVERITY Diagnostic_DiagnosticSeverity = 0
+	Diagnostic_ERROR            Diagnostic_DiagnosticSeverity = 1
+	Diagnostic_WARNING          Diagnostic_DiagnosticSeverity = 2
+	Diagnostic_INFORMATION      Diagnostic_DiagnosticSeverity = 3
+	Diagnostic_HINT             Diagnostic_DiagnosticSeverity = 4
+)
+
+// Enum value maps for Diagnostic_DiagnosticSeverity.
+var (
+	Diagnostic_DiagnosticSeverity_name = map[int32]string{
+		0: "NOT_SET_SEVERITY",
+		1: "ERROR",
+		2: "WARNING",
+		3: "INFORMATION",
+		4: "HINT",
+	}
+	Diagnostic_DiagnosticSeverity_value = map[string]int32{
+		"NOT_SET_SEVERITY": 0,
+		"ERROR":            1,
+		"WARNING":          2,
+		"INFORMATION":      3,
+		"HINT":             4,
+	}
+)
+
+func (x Diagnostic_DiagnosticSeverity) Enum() *Diagnostic_DiagnosticSeverity {
+	p := new(Diagnostic_DiagnosticSeverity)
+	*p = x
+	return p
+}
+
+func (x Diagnostic_DiagnosticSeverity) String() string {
+	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (Diagnostic_DiagnosticSeverity) Descriptor() protoreflect.EnumDescriptor {
+	return file_deephaven_proto_console_proto_enumTypes[0].Descriptor()
+}
+
+func (Diagnostic_DiagnosticSeverity) Type() protoreflect.EnumType {
+	return &file_deephaven_proto_console_proto_enumTypes[0]
+}
+
+func (x Diagnostic_DiagnosticSeverity) Number() protoreflect.EnumNumber {
+	return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use Diagnostic_DiagnosticSeverity.Descriptor instead.
+func (Diagnostic_DiagnosticSeverity) EnumDescriptor() ([]byte, []int) {
+	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{42, 0}
+}
+
+type Diagnostic_DiagnosticTag int32
+
+const (
+	Diagnostic_NOT_SET_TAG Diagnostic_DiagnosticTag = 0
+	Diagnostic_UNNECESSARY Diagnostic_DiagnosticTag = 1
+	Diagnostic_DEPRECATED  Diagnostic_DiagnosticTag = 2
+)
+
+// Enum value maps for Diagnostic_DiagnosticTag.
+var (
+	Diagnostic_DiagnosticTag_name = map[int32]string{
+		0: "NOT_SET_TAG",
+		1: "UNNECESSARY",
+		2: "DEPRECATED",
+	}
+	Diagnostic_DiagnosticTag_value = map[string]int32{
+		"NOT_SET_TAG": 0,
+		"UNNECESSARY": 1,
+		"DEPRECATED":  2,
+	}
+)
+
+func (x Diagnostic_DiagnosticTag) Enum() *Diagnostic_DiagnosticTag {
+	p := new(Diagnostic_DiagnosticTag)
+	*p = x
+	return p
+}
+
+func (x Diagnostic_DiagnosticTag) String() string {
+	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (Diagnostic_DiagnosticTag) Descriptor() protoreflect.EnumDescriptor {
+	return file_deephaven_proto_console_proto_enumTypes[1].Descriptor()
+}
+
+func (Diagnostic_DiagnosticTag) Type() protoreflect.EnumType {
+	return &file_deephaven_proto_console_proto_enumTypes[1]
+}
+
+func (x Diagnostic_DiagnosticTag) Number() protoreflect.EnumNumber {
+	return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use Diagnostic_DiagnosticTag.Descriptor instead.
+func (Diagnostic_DiagnosticTag) EnumDescriptor() ([]byte, []int) {
+	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{42, 1}
+}
+
 type FigureDescriptor_SeriesPlotStyle int32
 
 const (
@@ -85,11 +189,11 @@ func (x FigureDescriptor_SeriesPlotStyle) String() string {
 }
 
 func (FigureDescriptor_SeriesPlotStyle) Descriptor() protoreflect.EnumDescriptor {
-	return file_deephaven_proto_console_proto_enumTypes[0].Descriptor()
+	return file_deephaven_proto_console_proto_enumTypes[2].Descriptor()
 }
 
 func (FigureDescriptor_SeriesPlotStyle) Type() protoreflect.EnumType {
-	return &file_deephaven_proto_console_proto_enumTypes[0]
+	return &file_deephaven_proto_console_proto_enumTypes[2]
 }
 
 func (x FigureDescriptor_SeriesPlotStyle) Number() protoreflect.EnumNumber {
@@ -98,7 +202,7 @@ func (x FigureDescriptor_SeriesPlotStyle) Number() protoreflect.EnumNumber {
 
 // Deprecated: Use FigureDescriptor_SeriesPlotStyle.Descriptor instead.
 func (FigureDescriptor_SeriesPlotStyle) EnumDescriptor() ([]byte, []int) {
-	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{29, 0}
+	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{43, 0}
 }
 
 type FigureDescriptor_SourceType int32
@@ -182,11 +286,11 @@ func (x FigureDescriptor_SourceType) String() string {
 }
 
 func (FigureDescriptor_SourceType) Descriptor() protoreflect.EnumDescriptor {
-	return file_deephaven_proto_console_proto_enumTypes[1].Descriptor()
+	return file_deephaven_proto_console_proto_enumTypes[3].Descriptor()
 }
 
 func (FigureDescriptor_SourceType) Type() protoreflect.EnumType {
-	return &file_deephaven_proto_console_proto_enumTypes[1]
+	return &file_deephaven_proto_console_proto_enumTypes[3]
 }
 
 func (x FigureDescriptor_SourceType) Number() protoreflect.EnumNumber {
@@ -195,7 +299,7 @@ func (x FigureDescriptor_SourceType) Number() protoreflect.EnumNumber {
 
 // Deprecated: Use FigureDescriptor_SourceType.Descriptor instead.
 func (FigureDescriptor_SourceType) EnumDescriptor() ([]byte, []int) {
-	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{29, 1}
+	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{43, 1}
 }
 
 type FigureDescriptor_ChartDescriptor_ChartType int32
@@ -244,11 +348,11 @@ func (x FigureDescriptor_ChartDescriptor_ChartType) String() string {
 }
 
 func (FigureDescriptor_ChartDescriptor_ChartType) Descriptor() protoreflect.EnumDescriptor {
-	return file_deephaven_proto_console_proto_enumTypes[2].Descriptor()
+	return file_deephaven_proto_console_proto_enumTypes[4].Descriptor()
 }
 
 func (FigureDescriptor_ChartDescriptor_ChartType) Type() protoreflect.EnumType {
-	return &file_deephaven_proto_console_proto_enumTypes[2]
+	return &file_deephaven_proto_console_proto_enumTypes[4]
 }
 
 func (x FigureDescriptor_ChartDescriptor_ChartType) Number() protoreflect.EnumNumber {
@@ -257,7 +361,7 @@ func (x FigureDescriptor_ChartDescriptor_ChartType) Number() protoreflect.EnumNu
 
 // Deprecated: Use FigureDescriptor_ChartDescriptor_ChartType.Descriptor instead.
 func (FigureDescriptor_ChartDescriptor_ChartType) EnumDescriptor() ([]byte, []int) {
-	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{29, 0, 0}
+	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{43, 0, 0}
 }
 
 type FigureDescriptor_AxisDescriptor_AxisFormatType int32
@@ -290,11 +394,11 @@ func (x FigureDescriptor_AxisDescriptor_AxisFormatType) String() string {
 }
 
 func (FigureDescriptor_AxisDescriptor_AxisFormatType) Descriptor() protoreflect.EnumDescriptor {
-	return file_deephaven_proto_console_proto_enumTypes[3].Descriptor()
+	return file_deephaven_proto_console_proto_enumTypes[5].Descriptor()
 }
 
 func (FigureDescriptor_AxisDescriptor_AxisFormatType) Type() protoreflect.EnumType {
-	return &file_deephaven_proto_console_proto_enumTypes[3]
+	return &file_deephaven_proto_console_proto_enumTypes[5]
 }
 
 func (x FigureDescriptor_AxisDescriptor_AxisFormatType) Number() protoreflect.EnumNumber {
@@ -303,7 +407,7 @@ func (x FigureDescriptor_AxisDescriptor_AxisFormatType) Number() protoreflect.En
 
 // Deprecated: Use FigureDescriptor_AxisDescriptor_AxisFormatType.Descriptor instead.
 func (FigureDescriptor_AxisDescriptor_AxisFormatType) EnumDescriptor() ([]byte, []int) {
-	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{29, 6, 0}
+	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{43, 6, 0}
 }
 
 type FigureDescriptor_AxisDescriptor_AxisType int32
@@ -348,11 +452,11 @@ func (x FigureDescriptor_AxisDescriptor_AxisType) String() string {
 }
 
 func (FigureDescriptor_AxisDescriptor_AxisType) Descriptor() protoreflect.EnumDescriptor {
-	return file_deephaven_proto_console_proto_enumTypes[4].Descriptor()
+	return file_deephaven_proto_console_proto_enumTypes[6].Descriptor()
 }
 
 func (FigureDescriptor_AxisDescriptor_AxisType) Type() protoreflect.EnumType {
-	return &file_deephaven_proto_console_proto_enumTypes[4]
+	return &file_deephaven_proto_console_proto_enumTypes[6]
 }
 
 func (x FigureDescriptor_AxisDescriptor_AxisType) Number() protoreflect.EnumNumber {
@@ -361,7 +465,7 @@ func (x FigureDescriptor_AxisDescriptor_AxisType) Number() protoreflect.EnumNumb
 
 // Deprecated: Use FigureDescriptor_AxisDescriptor_AxisType.Descriptor instead.
 func (FigureDescriptor_AxisDescriptor_AxisType) EnumDescriptor() ([]byte, []int) {
-	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{29, 6, 1}
+	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{43, 6, 1}
 }
 
 type FigureDescriptor_AxisDescriptor_AxisPosition int32
@@ -403,11 +507,11 @@ func (x FigureDescriptor_AxisDescriptor_AxisPosition) String() string {
 }
 
 func (FigureDescriptor_AxisDescriptor_AxisPosition) Descriptor() protoreflect.EnumDescriptor {
-	return file_deephaven_proto_console_proto_enumTypes[5].Descriptor()
+	return file_deephaven_proto_console_proto_enumTypes[7].Descriptor()
 }
 
 func (FigureDescriptor_AxisDescriptor_AxisPosition) Type() protoreflect.EnumType {
-	return &file_deephaven_proto_console_proto_enumTypes[5]
+	return &file_deephaven_proto_console_proto_enumTypes[7]
 }
 
 func (x FigureDescriptor_AxisDescriptor_AxisPosition) Number() protoreflect.EnumNumber {
@@ -416,7 +520,7 @@ func (x FigureDescriptor_AxisDescriptor_AxisPosition) Number() protoreflect.Enum
 
 // Deprecated: Use FigureDescriptor_AxisDescriptor_AxisPosition.Descriptor instead.
 func (FigureDescriptor_AxisDescriptor_AxisPosition) EnumDescriptor() ([]byte, []int) {
-	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{29, 6, 2}
+	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{43, 6, 2}
 }
 
 type FigureDescriptor_BusinessCalendarDescriptor_DayOfWeek int32
@@ -464,11 +568,11 @@ func (x FigureDescriptor_BusinessCalendarDescriptor_DayOfWeek) String() string {
 }
 
 func (FigureDescriptor_BusinessCalendarDescriptor_DayOfWeek) Descriptor() protoreflect.EnumDescriptor {
-	return file_deephaven_proto_console_proto_enumTypes[6].Descriptor()
+	return file_deephaven_proto_console_proto_enumTypes[8].Descriptor()
 }
 
 func (FigureDescriptor_BusinessCalendarDescriptor_DayOfWeek) Type() protoreflect.EnumType {
-	return &file_deephaven_proto_console_proto_enumTypes[6]
+	return &file_deephaven_proto_console_proto_enumTypes[8]
 }
 
 func (x FigureDescriptor_BusinessCalendarDescriptor_DayOfWeek) Number() protoreflect.EnumNumber {
@@ -477,7 +581,7 @@ func (x FigureDescriptor_BusinessCalendarDescriptor_DayOfWeek) Number() protoref
 
 // Deprecated: Use FigureDescriptor_BusinessCalendarDescriptor_DayOfWeek.Descriptor instead.
 func (FigureDescriptor_BusinessCalendarDescriptor_DayOfWeek) EnumDescriptor() ([]byte, []int) {
-	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{29, 7, 0}
+	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{43, 7, 0}
 }
 
 type GetConsoleTypesRequest struct {
@@ -1201,16 +1305,114 @@ func (*CancelCommandResponse) Descriptor() ([]byte, []int) {
 	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{13}
 }
 
+type CancelAutoCompleteRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	ConsoleId *ticket.Ticket `protobuf:"bytes,1,opt,name=console_id,json=consoleId,proto3" json:"console_id,omitempty"`
+	RequestId int32          `protobuf:"varint,2,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"`
+}
+
+func (x *CancelAutoCompleteRequest) Reset() {
+	*x = CancelAutoCompleteRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_deephaven_proto_console_proto_msgTypes[14]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *CancelAutoCompleteRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*CancelAutoCompleteRequest) ProtoMessage() {}
+
+func (x *CancelAutoCompleteRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_deephaven_proto_console_proto_msgTypes[14]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use CancelAutoCompleteRequest.ProtoReflect.Descriptor instead.
+func (*CancelAutoCompleteRequest) Descriptor() ([]byte, []int) {
+	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{14}
+}
+
+func (x *CancelAutoCompleteRequest) GetConsoleId() *ticket.Ticket {
+	if x != nil {
+		return x.ConsoleId
+	}
+	return nil
+}
+
+func (x *CancelAutoCompleteRequest) GetRequestId() int32 {
+	if x != nil {
+		return x.RequestId
+	}
+	return 0
+}
+
+type CancelAutoCompleteResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+}
+
+func (x *CancelAutoCompleteResponse) Reset() {
+	*x = CancelAutoCompleteResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_deephaven_proto_console_proto_msgTypes[15]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *CancelAutoCompleteResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*CancelAutoCompleteResponse) ProtoMessage() {}
+
+func (x *CancelAutoCompleteResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_deephaven_proto_console_proto_msgTypes[15]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use CancelAutoCompleteResponse.ProtoReflect.Descriptor instead.
+func (*CancelAutoCompleteResponse) Descriptor() ([]byte, []int) {
+	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{15}
+}
+
 type AutoCompleteRequest struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 
+	ConsoleId *ticket.Ticket `protobuf:"bytes,5,opt,name=console_id,json=consoleId,proto3" json:"console_id,omitempty"`
+	RequestId int32          `protobuf:"varint,6,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"`
 	// Types that are assignable to Request:
 	//
 	//	*AutoCompleteRequest_OpenDocument
 	//	*AutoCompleteRequest_ChangeDocument
 	//	*AutoCompleteRequest_GetCompletionItems
+	//	*AutoCompleteRequest_GetSignatureHelp
+	//	*AutoCompleteRequest_GetHover
+	//	*AutoCompleteRequest_GetDiagnostic
 	//	*AutoCompleteRequest_CloseDocument
 	Request isAutoCompleteRequest_Request `protobuf_oneof:"request"`
 }
@@ -1218,7 +1420,7 @@ type AutoCompleteRequest struct {
 func (x *AutoCompleteRequest) Reset() {
 	*x = AutoCompleteRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_deephaven_proto_console_proto_msgTypes[14]
+		mi := &file_deephaven_proto_console_proto_msgTypes[16]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1231,7 +1433,7 @@ func (x *AutoCompleteRequest) String() string {
 func (*AutoCompleteRequest) ProtoMessage() {}
 
 func (x *AutoCompleteRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_deephaven_proto_console_proto_msgTypes[14]
+	mi := &file_deephaven_proto_console_proto_msgTypes[16]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1244,7 +1446,21 @@ func (x *AutoCompleteRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use AutoCompleteRequest.ProtoReflect.Descriptor instead.
 func (*AutoCompleteRequest) Descriptor() ([]byte, []int) {
-	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{14}
+	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{16}
+}
+
+func (x *AutoCompleteRequest) GetConsoleId() *ticket.Ticket {
+	if x != nil {
+		return x.ConsoleId
+	}
+	return nil
+}
+
+func (x *AutoCompleteRequest) GetRequestId() int32 {
+	if x != nil {
+		return x.RequestId
+	}
+	return 0
 }
 
 func (m *AutoCompleteRequest) GetRequest() isAutoCompleteRequest_Request {
@@ -1275,6 +1491,27 @@ func (x *AutoCompleteRequest) GetGetCompletionItems() *GetCompletionItemsRequest
 	return nil
 }
 
+func (x *AutoCompleteRequest) GetGetSignatureHelp() *GetSignatureHelpRequest {
+	if x, ok := x.GetRequest().(*AutoCompleteRequest_GetSignatureHelp); ok {
+		return x.GetSignatureHelp
+	}
+	return nil
+}
+
+func (x *AutoCompleteRequest) GetGetHover() *GetHoverRequest {
+	if x, ok := x.GetRequest().(*AutoCompleteRequest_GetHover); ok {
+		return x.GetHover
+	}
+	return nil
+}
+
+func (x *AutoCompleteRequest) GetGetDiagnostic() *GetDiagnosticRequest {
+	if x, ok := x.GetRequest().(*AutoCompleteRequest_GetDiagnostic); ok {
+		return x.GetDiagnostic
+	}
+	return nil
+}
+
 func (x *AutoCompleteRequest) GetCloseDocument() *CloseDocumentRequest {
 	if x, ok := x.GetRequest().(*AutoCompleteRequest_CloseDocument); ok {
 		return x.CloseDocument
@@ -1301,6 +1538,21 @@ type AutoCompleteRequest_GetCompletionItems struct {
 	GetCompletionItems *GetCompletionItemsRequest `protobuf:"bytes,3,opt,name=get_completion_items,json=getCompletionItems,proto3,oneof"`
 }
 
+type AutoCompleteRequest_GetSignatureHelp struct {
+	// Request for help about the method signature at the cursor
+	GetSignatureHelp *GetSignatureHelpRequest `protobuf:"bytes,7,opt,name=get_signature_help,json=getSignatureHelp,proto3,oneof"`
+}
+
+type AutoCompleteRequest_GetHover struct {
+	// Request for help about what the user is hovering over
+	GetHover *GetHoverRequest `protobuf:"bytes,8,opt,name=get_hover,json=getHover,proto3,oneof"`
+}
+
+type AutoCompleteRequest_GetDiagnostic struct {
+	// Request to perform file diagnostics
+	GetDiagnostic *GetDiagnosticRequest `protobuf:"bytes,9,opt,name=get_diagnostic,json=getDiagnostic,proto3,oneof"`
+}
+
 type AutoCompleteRequest_CloseDocument struct {
 	// Closes the document, indicating that it will not be referenced again
 	CloseDocument *CloseDocumentRequest `protobuf:"bytes,4,opt,name=close_document,json=closeDocument,proto3,oneof"`
@@ -1312,6 +1564,12 @@ func (*AutoCompleteRequest_ChangeDocument) isAutoCompleteRequest_Request() {}
 
 func (*AutoCompleteRequest_GetCompletionItems) isAutoCompleteRequest_Request() {}
 
+func (*AutoCompleteRequest_GetSignatureHelp) isAutoCompleteRequest_Request() {}
+
+func (*AutoCompleteRequest_GetHover) isAutoCompleteRequest_Request() {}
+
+func (*AutoCompleteRequest_GetDiagnostic) isAutoCompleteRequest_Request() {}
+
 func (*AutoCompleteRequest_CloseDocument) isAutoCompleteRequest_Request() {}
 
 type AutoCompleteResponse struct {
@@ -1319,16 +1577,22 @@ type AutoCompleteResponse struct {
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 
+	RequestId int32 `protobuf:"varint,2,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"`
+	Success   bool  `protobuf:"varint,3,opt,name=success,proto3" json:"success,omitempty"`
 	// Types that are assignable to Response:
 	//
 	//	*AutoCompleteResponse_CompletionItems
+	//	*AutoCompleteResponse_Signatures
+	//	*AutoCompleteResponse_Hover
+	//	*AutoCompleteResponse_Diagnostic
+	//	*AutoCompleteResponse_DiagnosticPublish
 	Response isAutoCompleteResponse_Response `protobuf_oneof:"response"`
 }
 
 func (x *AutoCompleteResponse) Reset() {
 	*x = AutoCompleteResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_deephaven_proto_console_proto_msgTypes[15]
+		mi := &file_deephaven_proto_console_proto_msgTypes[17]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1341,7 +1605,7 @@ func (x *AutoCompleteResponse) String() string {
 func (*AutoCompleteResponse) ProtoMessage() {}
 
 func (x *AutoCompleteResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_deephaven_proto_console_proto_msgTypes[15]
+	mi := &file_deephaven_proto_console_proto_msgTypes[17]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1354,7 +1618,21 @@ func (x *AutoCompleteResponse) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use AutoCompleteResponse.ProtoReflect.Descriptor instead.
 func (*AutoCompleteResponse) Descriptor() ([]byte, []int) {
-	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{15}
+	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{17}
+}
+
+func (x *AutoCompleteResponse) GetRequestId() int32 {
+	if x != nil {
+		return x.RequestId
+	}
+	return 0
+}
+
+func (x *AutoCompleteResponse) GetSuccess() bool {
+	if x != nil {
+		return x.Success
+	}
+	return false
 }
 
 func (m *AutoCompleteResponse) GetResponse() isAutoCompleteResponse_Response {
@@ -1371,6 +1649,34 @@ func (x *AutoCompleteResponse) GetCompletionItems() *GetCompletionItemsResponse
 	return nil
 }
 
+func (x *AutoCompleteResponse) GetSignatures() *GetSignatureHelpResponse {
+	if x, ok := x.GetResponse().(*AutoCompleteResponse_Signatures); ok {
+		return x.Signatures
+	}
+	return nil
+}
+
+func (x *AutoCompleteResponse) GetHover() *GetHoverResponse {
+	if x, ok := x.GetResponse().(*AutoCompleteResponse_Hover); ok {
+		return x.Hover
+	}
+	return nil
+}
+
+func (x *AutoCompleteResponse) GetDiagnostic() *GetPullDiagnosticResponse {
+	if x, ok := x.GetResponse().(*AutoCompleteResponse_Diagnostic); ok {
+		return x.Diagnostic
+	}
+	return nil
+}
+
+func (x *AutoCompleteResponse) GetDiagnosticPublish() *GetPublishDiagnosticResponse {
+	if x, ok := x.GetResponse().(*AutoCompleteResponse_DiagnosticPublish); ok {
+		return x.DiagnosticPublish
+	}
+	return nil
+}
+
 type isAutoCompleteResponse_Response interface {
 	isAutoCompleteResponse_Response()
 }
@@ -1379,8 +1685,32 @@ type AutoCompleteResponse_CompletionItems struct {
 	CompletionItems *GetCompletionItemsResponse `protobuf:"bytes,1,opt,name=completion_items,json=completionItems,proto3,oneof"`
 }
 
+type AutoCompleteResponse_Signatures struct {
+	Signatures *GetSignatureHelpResponse `protobuf:"bytes,4,opt,name=signatures,proto3,oneof"`
+}
+
+type AutoCompleteResponse_Hover struct {
+	Hover *GetHoverResponse `protobuf:"bytes,5,opt,name=hover,proto3,oneof"`
+}
+
+type AutoCompleteResponse_Diagnostic struct {
+	Diagnostic *GetPullDiagnosticResponse `protobuf:"bytes,6,opt,name=diagnostic,proto3,oneof"`
+}
+
+type AutoCompleteResponse_DiagnosticPublish struct {
+	DiagnosticPublish *GetPublishDiagnosticResponse `protobuf:"bytes,7,opt,name=diagnostic_publish,json=diagnosticPublish,proto3,oneof"`
+}
+
 func (*AutoCompleteResponse_CompletionItems) isAutoCompleteResponse_Response() {}
 
+func (*AutoCompleteResponse_Signatures) isAutoCompleteResponse_Response() {}
+
+func (*AutoCompleteResponse_Hover) isAutoCompleteResponse_Response() {}
+
+func (*AutoCompleteResponse_Diagnostic) isAutoCompleteResponse_Response() {}
+
+func (*AutoCompleteResponse_DiagnosticPublish) isAutoCompleteResponse_Response() {}
+
 type BrowserNextResponse struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
@@ -1390,7 +1720,7 @@ type BrowserNextResponse struct {
 func (x *BrowserNextResponse) Reset() {
 	*x = BrowserNextResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_deephaven_proto_console_proto_msgTypes[16]
+		mi := &file_deephaven_proto_console_proto_msgTypes[18]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1403,7 +1733,7 @@ func (x *BrowserNextResponse) String() string {
 func (*BrowserNextResponse) ProtoMessage() {}
 
 func (x *BrowserNextResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_deephaven_proto_console_proto_msgTypes[16]
+	mi := &file_deephaven_proto_console_proto_msgTypes[18]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1416,7 +1746,7 @@ func (x *BrowserNextResponse) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use BrowserNextResponse.ProtoReflect.Descriptor instead.
 func (*BrowserNextResponse) Descriptor() ([]byte, []int) {
-	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{16}
+	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{18}
 }
 
 type OpenDocumentRequest struct {
@@ -1424,6 +1754,7 @@ type OpenDocumentRequest struct {
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 
+	// Deprecated: Do not use.
 	ConsoleId    *ticket.Ticket    `protobuf:"bytes,1,opt,name=console_id,json=consoleId,proto3" json:"console_id,omitempty"`
 	TextDocument *TextDocumentItem `protobuf:"bytes,2,opt,name=text_document,json=textDocument,proto3" json:"text_document,omitempty"`
 }
@@ -1431,7 +1762,7 @@ type OpenDocumentRequest struct {
 func (x *OpenDocumentRequest) Reset() {
 	*x = OpenDocumentRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_deephaven_proto_console_proto_msgTypes[17]
+		mi := &file_deephaven_proto_console_proto_msgTypes[19]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1444,7 +1775,7 @@ func (x *OpenDocumentRequest) String() string {
 func (*OpenDocumentRequest) ProtoMessage() {}
 
 func (x *OpenDocumentRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_deephaven_proto_console_proto_msgTypes[17]
+	mi := &file_deephaven_proto_console_proto_msgTypes[19]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1457,9 +1788,10 @@ func (x *OpenDocumentRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use OpenDocumentRequest.ProtoReflect.Descriptor instead.
 func (*OpenDocumentRequest) Descriptor() ([]byte, []int) {
-	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{17}
+	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{19}
 }
 
+// Deprecated: Do not use.
 func (x *OpenDocumentRequest) GetConsoleId() *ticket.Ticket {
 	if x != nil {
 		return x.ConsoleId
@@ -1488,7 +1820,7 @@ type TextDocumentItem struct {
 func (x *TextDocumentItem) Reset() {
 	*x = TextDocumentItem{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_deephaven_proto_console_proto_msgTypes[18]
+		mi := &file_deephaven_proto_console_proto_msgTypes[20]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1501,7 +1833,7 @@ func (x *TextDocumentItem) String() string {
 func (*TextDocumentItem) ProtoMessage() {}
 
 func (x *TextDocumentItem) ProtoReflect() protoreflect.Message {
-	mi := &file_deephaven_proto_console_proto_msgTypes[18]
+	mi := &file_deephaven_proto_console_proto_msgTypes[20]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1514,7 +1846,7 @@ func (x *TextDocumentItem) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use TextDocumentItem.ProtoReflect.Descriptor instead.
 func (*TextDocumentItem) Descriptor() ([]byte, []int) {
-	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{18}
+	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{20}
 }
 
 func (x *TextDocumentItem) GetUri() string {
@@ -1550,14 +1882,15 @@ type CloseDocumentRequest struct {
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 
+	// Deprecated: Do not use.
 	ConsoleId    *ticket.Ticket                   `protobuf:"bytes,1,opt,name=console_id,json=consoleId,proto3" json:"console_id,omitempty"`
-	TextDocument *VersionedTextDocumentIdentifier `protobuf:"bytes,2,opt,name=text_document,json=textDocument,proto3" json:"text_document,omitempty"` //TODO actually just uri?
+	TextDocument *VersionedTextDocumentIdentifier `protobuf:"bytes,2,opt,name=text_document,json=textDocument,proto3" json:"text_document,omitempty"`
 }
 
 func (x *CloseDocumentRequest) Reset() {
 	*x = CloseDocumentRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_deephaven_proto_console_proto_msgTypes[19]
+		mi := &file_deephaven_proto_console_proto_msgTypes[21]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1570,7 +1903,7 @@ func (x *CloseDocumentRequest) String() string {
 func (*CloseDocumentRequest) ProtoMessage() {}
 
 func (x *CloseDocumentRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_deephaven_proto_console_proto_msgTypes[19]
+	mi := &file_deephaven_proto_console_proto_msgTypes[21]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1583,9 +1916,10 @@ func (x *CloseDocumentRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use CloseDocumentRequest.ProtoReflect.Descriptor instead.
 func (*CloseDocumentRequest) Descriptor() ([]byte, []int) {
-	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{19}
+	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{21}
 }
 
+// Deprecated: Do not use.
 func (x *CloseDocumentRequest) GetConsoleId() *ticket.Ticket {
 	if x != nil {
 		return x.ConsoleId
@@ -1605,15 +1939,16 @@ type ChangeDocumentRequest struct {
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 
+	// Deprecated: Do not use.
 	ConsoleId      *ticket.Ticket                                          `protobuf:"bytes,1,opt,name=console_id,json=consoleId,proto3" json:"console_id,omitempty"`
-	TextDocument   *VersionedTextDocumentIdentifier                        `protobuf:"bytes,2,opt,name=text_document,json=textDocument,proto3" json:"text_document,omitempty"` //TODO actually just uri?
+	TextDocument   *VersionedTextDocumentIdentifier                        `protobuf:"bytes,2,opt,name=text_document,json=textDocument,proto3" json:"text_document,omitempty"`
 	ContentChanges []*ChangeDocumentRequest_TextDocumentContentChangeEvent `protobuf:"bytes,3,rep,name=content_changes,json=contentChanges,proto3" json:"content_changes,omitempty"`
 }
 
 func (x *ChangeDocumentRequest) Reset() {
 	*x = ChangeDocumentRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_deephaven_proto_console_proto_msgTypes[20]
+		mi := &file_deephaven_proto_console_proto_msgTypes[22]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1626,7 +1961,7 @@ func (x *ChangeDocumentRequest) String() string {
 func (*ChangeDocumentRequest) ProtoMessage() {}
 
 func (x *ChangeDocumentRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_deephaven_proto_console_proto_msgTypes[20]
+	mi := &file_deephaven_proto_console_proto_msgTypes[22]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1639,9 +1974,10 @@ func (x *ChangeDocumentRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use ChangeDocumentRequest.ProtoReflect.Descriptor instead.
 func (*ChangeDocumentRequest) Descriptor() ([]byte, []int) {
-	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{20}
+	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{22}
 }
 
+// Deprecated: Do not use.
 func (x *ChangeDocumentRequest) GetConsoleId() *ticket.Ticket {
 	if x != nil {
 		return x.ConsoleId
@@ -1675,7 +2011,7 @@ type DocumentRange struct {
 func (x *DocumentRange) Reset() {
 	*x = DocumentRange{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_deephaven_proto_console_proto_msgTypes[21]
+		mi := &file_deephaven_proto_console_proto_msgTypes[23]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1688,7 +2024,7 @@ func (x *DocumentRange) String() string {
 func (*DocumentRange) ProtoMessage() {}
 
 func (x *DocumentRange) ProtoReflect() protoreflect.Message {
-	mi := &file_deephaven_proto_console_proto_msgTypes[21]
+	mi := &file_deephaven_proto_console_proto_msgTypes[23]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1701,7 +2037,7 @@ func (x *DocumentRange) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use DocumentRange.ProtoReflect.Descriptor instead.
 func (*DocumentRange) Descriptor() ([]byte, []int) {
-	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{21}
+	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{23}
 }
 
 func (x *DocumentRange) GetStart() *Position {
@@ -1730,7 +2066,7 @@ type VersionedTextDocumentIdentifier struct {
 func (x *VersionedTextDocumentIdentifier) Reset() {
 	*x = VersionedTextDocumentIdentifier{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_deephaven_proto_console_proto_msgTypes[22]
+		mi := &file_deephaven_proto_console_proto_msgTypes[24]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1743,7 +2079,7 @@ func (x *VersionedTextDocumentIdentifier) String() string {
 func (*VersionedTextDocumentIdentifier) ProtoMessage() {}
 
 func (x *VersionedTextDocumentIdentifier) ProtoReflect() protoreflect.Message {
-	mi := &file_deephaven_proto_console_proto_msgTypes[22]
+	mi := &file_deephaven_proto_console_proto_msgTypes[24]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1756,7 +2092,7 @@ func (x *VersionedTextDocumentIdentifier) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use VersionedTextDocumentIdentifier.ProtoReflect.Descriptor instead.
 func (*VersionedTextDocumentIdentifier) Descriptor() ([]byte, []int) {
-	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{22}
+	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{24}
 }
 
 func (x *VersionedTextDocumentIdentifier) GetUri() string {
@@ -1785,7 +2121,7 @@ type Position struct {
 func (x *Position) Reset() {
 	*x = Position{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_deephaven_proto_console_proto_msgTypes[23]
+		mi := &file_deephaven_proto_console_proto_msgTypes[25]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1798,7 +2134,7 @@ func (x *Position) String() string {
 func (*Position) ProtoMessage() {}
 
 func (x *Position) ProtoReflect() protoreflect.Message {
-	mi := &file_deephaven_proto_console_proto_msgTypes[23]
+	mi := &file_deephaven_proto_console_proto_msgTypes[25]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1811,7 +2147,7 @@ func (x *Position) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use Position.ProtoReflect.Descriptor instead.
 func (*Position) Descriptor() ([]byte, []int) {
-	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{23}
+	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{25}
 }
 
 func (x *Position) GetLine() int32 {
@@ -1828,22 +2164,79 @@ func (x *Position) GetCharacter() int32 {
 	return 0
 }
 
+type MarkupContent struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Kind  string `protobuf:"bytes,1,opt,name=kind,proto3" json:"kind,omitempty"`
+	Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"`
+}
+
+func (x *MarkupContent) Reset() {
+	*x = MarkupContent{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_deephaven_proto_console_proto_msgTypes[26]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *MarkupContent) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*MarkupContent) ProtoMessage() {}
+
+func (x *MarkupContent) ProtoReflect() protoreflect.Message {
+	mi := &file_deephaven_proto_console_proto_msgTypes[26]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use MarkupContent.ProtoReflect.Descriptor instead.
+func (*MarkupContent) Descriptor() ([]byte, []int) {
+	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{26}
+}
+
+func (x *MarkupContent) GetKind() string {
+	if x != nil {
+		return x.Kind
+	}
+	return ""
+}
+
+func (x *MarkupContent) GetValue() string {
+	if x != nil {
+		return x.Value
+	}
+	return ""
+}
+
 type GetCompletionItemsRequest struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 
+	// Deprecated: Do not use.
 	ConsoleId    *ticket.Ticket                   `protobuf:"bytes,1,opt,name=console_id,json=consoleId,proto3" json:"console_id,omitempty"`
 	Context      *CompletionContext               `protobuf:"bytes,2,opt,name=context,proto3" json:"context,omitempty"`
 	TextDocument *VersionedTextDocumentIdentifier `protobuf:"bytes,3,opt,name=text_document,json=textDocument,proto3" json:"text_document,omitempty"`
 	Position     *Position                        `protobuf:"bytes,4,opt,name=position,proto3" json:"position,omitempty"`
-	RequestId    int32                            `protobuf:"varint,5,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"`
+	// Deprecated: Do not use.
+	RequestId int32 `protobuf:"varint,5,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"`
 }
 
 func (x *GetCompletionItemsRequest) Reset() {
 	*x = GetCompletionItemsRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_deephaven_proto_console_proto_msgTypes[24]
+		mi := &file_deephaven_proto_console_proto_msgTypes[27]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1856,7 +2249,7 @@ func (x *GetCompletionItemsRequest) String() string {
 func (*GetCompletionItemsRequest) ProtoMessage() {}
 
 func (x *GetCompletionItemsRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_deephaven_proto_console_proto_msgTypes[24]
+	mi := &file_deephaven_proto_console_proto_msgTypes[27]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1869,9 +2262,10 @@ func (x *GetCompletionItemsRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use GetCompletionItemsRequest.ProtoReflect.Descriptor instead.
 func (*GetCompletionItemsRequest) Descriptor() ([]byte, []int) {
-	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{24}
+	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{27}
 }
 
+// Deprecated: Do not use.
 func (x *GetCompletionItemsRequest) GetConsoleId() *ticket.Ticket {
 	if x != nil {
 		return x.ConsoleId
@@ -1900,6 +2294,7 @@ func (x *GetCompletionItemsRequest) GetPosition() *Position {
 	return nil
 }
 
+// Deprecated: Do not use.
 func (x *GetCompletionItemsRequest) GetRequestId() int32 {
 	if x != nil {
 		return x.RequestId
@@ -1919,7 +2314,7 @@ type CompletionContext struct {
 func (x *CompletionContext) Reset() {
 	*x = CompletionContext{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_deephaven_proto_console_proto_msgTypes[25]
+		mi := &file_deephaven_proto_console_proto_msgTypes[28]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1932,7 +2327,7 @@ func (x *CompletionContext) String() string {
 func (*CompletionContext) ProtoMessage() {}
 
 func (x *CompletionContext) ProtoReflect() protoreflect.Message {
-	mi := &file_deephaven_proto_console_proto_msgTypes[25]
+	mi := &file_deephaven_proto_console_proto_msgTypes[28]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1945,7 +2340,7 @@ func (x *CompletionContext) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use CompletionContext.ProtoReflect.Descriptor instead.
 func (*CompletionContext) Descriptor() ([]byte, []int) {
-	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{25}
+	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{28}
 }
 
 func (x *CompletionContext) GetTriggerKind() int32 {
@@ -1967,15 +2362,21 @@ type GetCompletionItemsResponse struct {
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 
-	Items     []*CompletionItem `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"`
-	RequestId int32             `protobuf:"varint,2,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"`
-	Success   bool              `protobuf:"varint,3,opt,name=success,proto3" json:"success,omitempty"`
+	Items []*CompletionItem `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"`
+	// Maintained for backwards compatibility. Use the same field on AutoCompleteResponse instead
+	//
+	// Deprecated: Do not use.
+	RequestId int32 `protobuf:"varint,2,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"`
+	// Maintained for backwards compatibility. Use the same field on AutoCompleteResponse instead
+	//
+	// Deprecated: Do not use.
+	Success bool `protobuf:"varint,3,opt,name=success,proto3" json:"success,omitempty"`
 }
 
 func (x *GetCompletionItemsResponse) Reset() {
 	*x = GetCompletionItemsResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_deephaven_proto_console_proto_msgTypes[26]
+		mi := &file_deephaven_proto_console_proto_msgTypes[29]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1988,7 +2389,7 @@ func (x *GetCompletionItemsResponse) String() string {
 func (*GetCompletionItemsResponse) ProtoMessage() {}
 
 func (x *GetCompletionItemsResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_deephaven_proto_console_proto_msgTypes[26]
+	mi := &file_deephaven_proto_console_proto_msgTypes[29]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2001,7 +2402,7 @@ func (x *GetCompletionItemsResponse) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use GetCompletionItemsResponse.ProtoReflect.Descriptor instead.
 func (*GetCompletionItemsResponse) Descriptor() ([]byte, []int) {
-	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{26}
+	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{29}
 }
 
 func (x *GetCompletionItemsResponse) GetItems() []*CompletionItem {
@@ -2011,6 +2412,7 @@ func (x *GetCompletionItemsResponse) GetItems() []*CompletionItem {
 	return nil
 }
 
+// Deprecated: Do not use.
 func (x *GetCompletionItemsResponse) GetRequestId() int32 {
 	if x != nil {
 		return x.RequestId
@@ -2018,6 +2420,7 @@ func (x *GetCompletionItemsResponse) GetRequestId() int32 {
 	return 0
 }
 
+// Deprecated: Do not use.
 func (x *GetCompletionItemsResponse) GetSuccess() bool {
 	if x != nil {
 		return x.Success
@@ -2030,26 +2433,26 @@ type CompletionItem struct {
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 
-	Start               int32       `protobuf:"varint,1,opt,name=start,proto3" json:"start,omitempty"`
-	Length              int32       `protobuf:"varint,2,opt,name=length,proto3" json:"length,omitempty"`
-	Label               string      `protobuf:"bytes,3,opt,name=label,proto3" json:"label,omitempty"`
-	Kind                int32       `protobuf:"varint,4,opt,name=kind,proto3" json:"kind,omitempty"`
-	Detail              string      `protobuf:"bytes,5,opt,name=detail,proto3" json:"detail,omitempty"`
-	Documentation       string      `protobuf:"bytes,6,opt,name=documentation,proto3" json:"documentation,omitempty"`
-	Deprecated          bool        `protobuf:"varint,7,opt,name=deprecated,proto3" json:"deprecated,omitempty"`
-	Preselect           bool        `protobuf:"varint,8,opt,name=preselect,proto3" json:"preselect,omitempty"`
-	TextEdit            *TextEdit   `protobuf:"bytes,9,opt,name=text_edit,json=textEdit,proto3" json:"text_edit,omitempty"`
-	SortText            string      `protobuf:"bytes,10,opt,name=sort_text,json=sortText,proto3" json:"sort_text,omitempty"`
-	FilterText          string      `protobuf:"bytes,11,opt,name=filter_text,json=filterText,proto3" json:"filter_text,omitempty"`
-	InsertTextFormat    int32       `protobuf:"varint,12,opt,name=insert_text_format,json=insertTextFormat,proto3" json:"insert_text_format,omitempty"`
-	AdditionalTextEdits []*TextEdit `protobuf:"bytes,13,rep,name=additional_text_edits,json=additionalTextEdits,proto3" json:"additional_text_edits,omitempty"`
-	CommitCharacters    []string    `protobuf:"bytes,14,rep,name=commit_characters,json=commitCharacters,proto3" json:"commit_characters,omitempty"`
+	Start               int32          `protobuf:"varint,1,opt,name=start,proto3" json:"start,omitempty"`
+	Length              int32          `protobuf:"varint,2,opt,name=length,proto3" json:"length,omitempty"`
+	Label               string         `protobuf:"bytes,3,opt,name=label,proto3" json:"label,omitempty"`
+	Kind                int32          `protobuf:"varint,4,opt,name=kind,proto3" json:"kind,omitempty"`
+	Detail              string         `protobuf:"bytes,5,opt,name=detail,proto3" json:"detail,omitempty"`
+	Deprecated          bool           `protobuf:"varint,7,opt,name=deprecated,proto3" json:"deprecated,omitempty"`
+	Preselect           bool           `protobuf:"varint,8,opt,name=preselect,proto3" json:"preselect,omitempty"`
+	TextEdit            *TextEdit      `protobuf:"bytes,9,opt,name=text_edit,json=textEdit,proto3" json:"text_edit,omitempty"`
+	SortText            string         `protobuf:"bytes,10,opt,name=sort_text,json=sortText,proto3" json:"sort_text,omitempty"`
+	FilterText          string         `protobuf:"bytes,11,opt,name=filter_text,json=filterText,proto3" json:"filter_text,omitempty"`
+	InsertTextFormat    int32          `protobuf:"varint,12,opt,name=insert_text_format,json=insertTextFormat,proto3" json:"insert_text_format,omitempty"`
+	AdditionalTextEdits []*TextEdit    `protobuf:"bytes,13,rep,name=additional_text_edits,json=additionalTextEdits,proto3" json:"additional_text_edits,omitempty"`
+	CommitCharacters    []string       `protobuf:"bytes,14,rep,name=commit_characters,json=commitCharacters,proto3" json:"commit_characters,omitempty"`
+	Documentation       *MarkupContent `protobuf:"bytes,15,opt,name=documentation,proto3" json:"documentation,omitempty"`
 }
 
 func (x *CompletionItem) Reset() {
 	*x = CompletionItem{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_deephaven_proto_console_proto_msgTypes[27]
+		mi := &file_deephaven_proto_console_proto_msgTypes[30]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2062,7 +2465,7 @@ func (x *CompletionItem) String() string {
 func (*CompletionItem) ProtoMessage() {}
 
 func (x *CompletionItem) ProtoReflect() protoreflect.Message {
-	mi := &file_deephaven_proto_console_proto_msgTypes[27]
+	mi := &file_deephaven_proto_console_proto_msgTypes[30]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2075,7 +2478,7 @@ func (x *CompletionItem) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use CompletionItem.ProtoReflect.Descriptor instead.
 func (*CompletionItem) Descriptor() ([]byte, []int) {
-	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{27}
+	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{30}
 }
 
 func (x *CompletionItem) GetStart() int32 {
@@ -2113,13 +2516,6 @@ func (x *CompletionItem) GetDetail() string {
 	return ""
 }
 
-func (x *CompletionItem) GetDocumentation() string {
-	if x != nil {
-		return x.Documentation
-	}
-	return ""
-}
-
 func (x *CompletionItem) GetDeprecated() bool {
 	if x != nil {
 		return x.Deprecated
@@ -2176,6 +2572,13 @@ func (x *CompletionItem) GetCommitCharacters() []string {
 	return nil
 }
 
+func (x *CompletionItem) GetDocumentation() *MarkupContent {
+	if x != nil {
+		return x.Documentation
+	}
+	return nil
+}
+
 type TextEdit struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
@@ -2188,7 +2591,7 @@ type TextEdit struct {
 func (x *TextEdit) Reset() {
 	*x = TextEdit{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_deephaven_proto_console_proto_msgTypes[28]
+		mi := &file_deephaven_proto_console_proto_msgTypes[31]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2201,7 +2604,7 @@ func (x *TextEdit) String() string {
 func (*TextEdit) ProtoMessage() {}
 
 func (x *TextEdit) ProtoReflect() protoreflect.Message {
-	mi := &file_deephaven_proto_console_proto_msgTypes[28]
+	mi := &file_deephaven_proto_console_proto_msgTypes[31]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2214,7 +2617,7 @@ func (x *TextEdit) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use TextEdit.ProtoReflect.Descriptor instead.
 func (*TextEdit) Descriptor() ([]byte, []int) {
-	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{28}
+	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{31}
 }
 
 func (x *TextEdit) GetRange() *DocumentRange {
@@ -2231,38 +2634,33 @@ func (x *TextEdit) GetText() string {
 	return ""
 }
 
-type FigureDescriptor struct {
+type GetSignatureHelpRequest struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 
-	Title          *string                             `protobuf:"bytes,1,opt,name=title,proto3,oneof" json:"title,omitempty"`
-	TitleFont      string                              `protobuf:"bytes,2,opt,name=title_font,json=titleFont,proto3" json:"title_font,omitempty"`
-	TitleColor     string                              `protobuf:"bytes,3,opt,name=title_color,json=titleColor,proto3" json:"title_color,omitempty"`
-	UpdateInterval int64                               `protobuf:"varint,7,opt,name=update_interval,json=updateInterval,proto3" json:"update_interval,omitempty"`
-	Cols           int32                               `protobuf:"varint,8,opt,name=cols,proto3" json:"cols,omitempty"`
-	Rows           int32                               `protobuf:"varint,9,opt,name=rows,proto3" json:"rows,omitempty"`
-	Charts         []*FigureDescriptor_ChartDescriptor `protobuf:"bytes,10,rep,name=charts,proto3" json:"charts,omitempty"`
-	Errors         []string                            `protobuf:"bytes,13,rep,name=errors,proto3" json:"errors,omitempty"`
+	Context      *SignatureHelpContext            `protobuf:"bytes,1,opt,name=context,proto3" json:"context,omitempty"`
+	TextDocument *VersionedTextDocumentIdentifier `protobuf:"bytes,2,opt,name=text_document,json=textDocument,proto3" json:"text_document,omitempty"`
+	Position     *Position                        `protobuf:"bytes,3,opt,name=position,proto3" json:"position,omitempty"`
 }
 
-func (x *FigureDescriptor) Reset() {
-	*x = FigureDescriptor{}
+func (x *GetSignatureHelpRequest) Reset() {
+	*x = GetSignatureHelpRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_deephaven_proto_console_proto_msgTypes[29]
+		mi := &file_deephaven_proto_console_proto_msgTypes[32]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
 }
 
-func (x *FigureDescriptor) String() string {
+func (x *GetSignatureHelpRequest) String() string {
 	return protoimpl.X.MessageStringOf(x)
 }
 
-func (*FigureDescriptor) ProtoMessage() {}
+func (*GetSignatureHelpRequest) ProtoMessage() {}
 
-func (x *FigureDescriptor) ProtoReflect() protoreflect.Message {
-	mi := &file_deephaven_proto_console_proto_msgTypes[29]
+func (x *GetSignatureHelpRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_deephaven_proto_console_proto_msgTypes[32]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2273,94 +2671,130 @@ func (x *FigureDescriptor) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use FigureDescriptor.ProtoReflect.Descriptor instead.
-func (*FigureDescriptor) Descriptor() ([]byte, []int) {
-	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{29}
+// Deprecated: Use GetSignatureHelpRequest.ProtoReflect.Descriptor instead.
+func (*GetSignatureHelpRequest) Descriptor() ([]byte, []int) {
+	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{32}
 }
 
-func (x *FigureDescriptor) GetTitle() string {
-	if x != nil && x.Title != nil {
-		return *x.Title
+func (x *GetSignatureHelpRequest) GetContext() *SignatureHelpContext {
+	if x != nil {
+		return x.Context
 	}
-	return ""
+	return nil
 }
 
-func (x *FigureDescriptor) GetTitleFont() string {
+func (x *GetSignatureHelpRequest) GetTextDocument() *VersionedTextDocumentIdentifier {
 	if x != nil {
-		return x.TitleFont
+		return x.TextDocument
 	}
-	return ""
+	return nil
 }
 
-func (x *FigureDescriptor) GetTitleColor() string {
+func (x *GetSignatureHelpRequest) GetPosition() *Position {
 	if x != nil {
-		return x.TitleColor
+		return x.Position
 	}
-	return ""
+	return nil
 }
 
-func (x *FigureDescriptor) GetUpdateInterval() int64 {
-	if x != nil {
-		return x.UpdateInterval
+type SignatureHelpContext struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	TriggerKind         int32                     `protobuf:"varint,1,opt,name=trigger_kind,json=triggerKind,proto3" json:"trigger_kind,omitempty"`
+	TriggerCharacter    *string                   `protobuf:"bytes,2,opt,name=trigger_character,json=triggerCharacter,proto3,oneof" json:"trigger_character,omitempty"`
+	IsRetrigger         bool                      `protobuf:"varint,3,opt,name=is_retrigger,json=isRetrigger,proto3" json:"is_retrigger,omitempty"`
+	ActiveSignatureHelp *GetSignatureHelpResponse `protobuf:"bytes,4,opt,name=active_signature_help,json=activeSignatureHelp,proto3" json:"active_signature_help,omitempty"`
+}
+
+func (x *SignatureHelpContext) Reset() {
+	*x = SignatureHelpContext{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_deephaven_proto_console_proto_msgTypes[33]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
 	}
-	return 0
 }
 
-func (x *FigureDescriptor) GetCols() int32 {
-	if x != nil {
-		return x.Cols
+func (x *SignatureHelpContext) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SignatureHelpContext) ProtoMessage() {}
+
+func (x *SignatureHelpContext) ProtoReflect() protoreflect.Message {
+	mi := &file_deephaven_proto_console_proto_msgTypes[33]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
 	}
-	return 0
+	return mi.MessageOf(x)
 }
 
-func (x *FigureDescriptor) GetRows() int32 {
+// Deprecated: Use SignatureHelpContext.ProtoReflect.Descriptor instead.
+func (*SignatureHelpContext) Descriptor() ([]byte, []int) {
+	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{33}
+}
+
+func (x *SignatureHelpContext) GetTriggerKind() int32 {
 	if x != nil {
-		return x.Rows
+		return x.TriggerKind
 	}
 	return 0
 }
 
-func (x *FigureDescriptor) GetCharts() []*FigureDescriptor_ChartDescriptor {
+func (x *SignatureHelpContext) GetTriggerCharacter() string {
+	if x != nil && x.TriggerCharacter != nil {
+		return *x.TriggerCharacter
+	}
+	return ""
+}
+
+func (x *SignatureHelpContext) GetIsRetrigger() bool {
 	if x != nil {
-		return x.Charts
+		return x.IsRetrigger
 	}
-	return nil
+	return false
 }
 
-func (x *FigureDescriptor) GetErrors() []string {
+func (x *SignatureHelpContext) GetActiveSignatureHelp() *GetSignatureHelpResponse {
 	if x != nil {
-		return x.Errors
+		return x.ActiveSignatureHelp
 	}
 	return nil
 }
 
-type ChangeDocumentRequest_TextDocumentContentChangeEvent struct {
+type GetSignatureHelpResponse struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 
-	Range       *DocumentRange `protobuf:"bytes,1,opt,name=range,proto3" json:"range,omitempty"`
-	RangeLength int32          `protobuf:"varint,2,opt,name=range_length,json=rangeLength,proto3" json:"range_length,omitempty"`
-	Text        string         `protobuf:"bytes,3,opt,name=text,proto3" json:"text,omitempty"`
+	Signatures      []*SignatureInformation `protobuf:"bytes,1,rep,name=signatures,proto3" json:"signatures,omitempty"`
+	ActiveSignature *int32                  `protobuf:"varint,2,opt,name=active_signature,json=activeSignature,proto3,oneof" json:"active_signature,omitempty"`
+	ActiveParameter *int32                  `protobuf:"varint,3,opt,name=active_parameter,json=activeParameter,proto3,oneof" json:"active_parameter,omitempty"`
 }
 
-func (x *ChangeDocumentRequest_TextDocumentContentChangeEvent) Reset() {
-	*x = ChangeDocumentRequest_TextDocumentContentChangeEvent{}
+func (x *GetSignatureHelpResponse) Reset() {
+	*x = GetSignatureHelpResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_deephaven_proto_console_proto_msgTypes[30]
+		mi := &file_deephaven_proto_console_proto_msgTypes[34]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
 }
 
-func (x *ChangeDocumentRequest_TextDocumentContentChangeEvent) String() string {
+func (x *GetSignatureHelpResponse) String() string {
 	return protoimpl.X.MessageStringOf(x)
 }
 
-func (*ChangeDocumentRequest_TextDocumentContentChangeEvent) ProtoMessage() {}
+func (*GetSignatureHelpResponse) ProtoMessage() {}
 
-func (x *ChangeDocumentRequest_TextDocumentContentChangeEvent) ProtoReflect() protoreflect.Message {
-	mi := &file_deephaven_proto_console_proto_msgTypes[30]
+func (x *GetSignatureHelpResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_deephaven_proto_console_proto_msgTypes[34]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2371,71 +2805,60 @@ func (x *ChangeDocumentRequest_TextDocumentContentChangeEvent) ProtoReflect() pr
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use ChangeDocumentRequest_TextDocumentContentChangeEvent.ProtoReflect.Descriptor instead.
-func (*ChangeDocumentRequest_TextDocumentContentChangeEvent) Descriptor() ([]byte, []int) {
-	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{20, 0}
+// Deprecated: Use GetSignatureHelpResponse.ProtoReflect.Descriptor instead.
+func (*GetSignatureHelpResponse) Descriptor() ([]byte, []int) {
+	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{34}
 }
 
-func (x *ChangeDocumentRequest_TextDocumentContentChangeEvent) GetRange() *DocumentRange {
+func (x *GetSignatureHelpResponse) GetSignatures() []*SignatureInformation {
 	if x != nil {
-		return x.Range
+		return x.Signatures
 	}
 	return nil
 }
 
-func (x *ChangeDocumentRequest_TextDocumentContentChangeEvent) GetRangeLength() int32 {
-	if x != nil {
-		return x.RangeLength
+func (x *GetSignatureHelpResponse) GetActiveSignature() int32 {
+	if x != nil && x.ActiveSignature != nil {
+		return *x.ActiveSignature
 	}
 	return 0
 }
 
-func (x *ChangeDocumentRequest_TextDocumentContentChangeEvent) GetText() string {
-	if x != nil {
-		return x.Text
+func (x *GetSignatureHelpResponse) GetActiveParameter() int32 {
+	if x != nil && x.ActiveParameter != nil {
+		return *x.ActiveParameter
 	}
-	return ""
+	return 0
 }
 
-type FigureDescriptor_ChartDescriptor struct {
+type SignatureInformation struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 
-	Colspan     int32                                      `protobuf:"varint,1,opt,name=colspan,proto3" json:"colspan,omitempty"`
-	Rowspan     int32                                      `protobuf:"varint,2,opt,name=rowspan,proto3" json:"rowspan,omitempty"`
-	Series      []*FigureDescriptor_SeriesDescriptor       `protobuf:"bytes,3,rep,name=series,proto3" json:"series,omitempty"`
-	MultiSeries []*FigureDescriptor_MultiSeriesDescriptor  `protobuf:"bytes,4,rep,name=multi_series,json=multiSeries,proto3" json:"multi_series,omitempty"`
-	Axes        []*FigureDescriptor_AxisDescriptor         `protobuf:"bytes,5,rep,name=axes,proto3" json:"axes,omitempty"`
-	ChartType   FigureDescriptor_ChartDescriptor_ChartType `protobuf:"varint,6,opt,name=chart_type,json=chartType,proto3,enum=io.deephaven.proto.backplane.script.grpc.FigureDescriptor_ChartDescriptor_ChartType" json:"chart_type,omitempty"`
-	Title       *string                                    `protobuf:"bytes,7,opt,name=title,proto3,oneof" json:"title,omitempty"`
-	TitleFont   string                                     `protobuf:"bytes,8,opt,name=title_font,json=titleFont,proto3" json:"title_font,omitempty"`
-	TitleColor  string                                     `protobuf:"bytes,9,opt,name=title_color,json=titleColor,proto3" json:"title_color,omitempty"`
-	ShowLegend  bool                                       `protobuf:"varint,10,opt,name=show_legend,json=showLegend,proto3" json:"show_legend,omitempty"`
-	LegendFont  string                                     `protobuf:"bytes,11,opt,name=legend_font,json=legendFont,proto3" json:"legend_font,omitempty"`
-	LegendColor string                                     `protobuf:"bytes,12,opt,name=legend_color,json=legendColor,proto3" json:"legend_color,omitempty"`
-	Is3D        bool                                       `protobuf:"varint,13,opt,name=is3d,proto3" json:"is3d,omitempty"`
-	Column      int32                                      `protobuf:"varint,14,opt,name=column,proto3" json:"column,omitempty"`
-	Row         int32                                      `protobuf:"varint,15,opt,name=row,proto3" json:"row,omitempty"`
+	Label           string                  `protobuf:"bytes,1,opt,name=label,proto3" json:"label,omitempty"`
+	Documentation   *MarkupContent          `protobuf:"bytes,2,opt,name=documentation,proto3" json:"documentation,omitempty"`
+	Parameters      []*ParameterInformation `protobuf:"bytes,3,rep,name=parameters,proto3" json:"parameters,omitempty"`
+	ActiveParameter *int32                  `protobuf:"varint,4,opt,name=active_parameter,json=activeParameter,proto3,oneof" json:"active_parameter,omitempty"`
 }
 
-func (x *FigureDescriptor_ChartDescriptor) Reset() {
-	*x = FigureDescriptor_ChartDescriptor{}
+func (x *SignatureInformation) Reset() {
+	*x = SignatureInformation{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_deephaven_proto_console_proto_msgTypes[31]
+		mi := &file_deephaven_proto_console_proto_msgTypes[35]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
 }
 
-func (x *FigureDescriptor_ChartDescriptor) String() string {
+func (x *SignatureInformation) String() string {
 	return protoimpl.X.MessageStringOf(x)
 }
 
-func (*FigureDescriptor_ChartDescriptor) ProtoMessage() {}
+func (*SignatureInformation) ProtoMessage() {}
 
-func (x *FigureDescriptor_ChartDescriptor) ProtoReflect() protoreflect.Message {
-	mi := &file_deephaven_proto_console_proto_msgTypes[31]
+func (x *SignatureInformation) ProtoReflect() protoreflect.Message {
+	mi := &file_deephaven_proto_console_proto_msgTypes[35]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2446,14 +2869,766 @@ func (x *FigureDescriptor_ChartDescriptor) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use FigureDescriptor_ChartDescriptor.ProtoReflect.Descriptor instead.
-func (*FigureDescriptor_ChartDescriptor) Descriptor() ([]byte, []int) {
-	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{29, 0}
+// Deprecated: Use SignatureInformation.ProtoReflect.Descriptor instead.
+func (*SignatureInformation) Descriptor() ([]byte, []int) {
+	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{35}
 }
 
-func (x *FigureDescriptor_ChartDescriptor) GetColspan() int32 {
+func (x *SignatureInformation) GetLabel() string {
 	if x != nil {
-		return x.Colspan
+		return x.Label
+	}
+	return ""
+}
+
+func (x *SignatureInformation) GetDocumentation() *MarkupContent {
+	if x != nil {
+		return x.Documentation
+	}
+	return nil
+}
+
+func (x *SignatureInformation) GetParameters() []*ParameterInformation {
+	if x != nil {
+		return x.Parameters
+	}
+	return nil
+}
+
+func (x *SignatureInformation) GetActiveParameter() int32 {
+	if x != nil && x.ActiveParameter != nil {
+		return *x.ActiveParameter
+	}
+	return 0
+}
+
+type ParameterInformation struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Label         string         `protobuf:"bytes,1,opt,name=label,proto3" json:"label,omitempty"`
+	Documentation *MarkupContent `protobuf:"bytes,2,opt,name=documentation,proto3" json:"documentation,omitempty"`
+}
+
+func (x *ParameterInformation) Reset() {
+	*x = ParameterInformation{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_deephaven_proto_console_proto_msgTypes[36]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *ParameterInformation) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ParameterInformation) ProtoMessage() {}
+
+func (x *ParameterInformation) ProtoReflect() protoreflect.Message {
+	mi := &file_deephaven_proto_console_proto_msgTypes[36]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use ParameterInformation.ProtoReflect.Descriptor instead.
+func (*ParameterInformation) Descriptor() ([]byte, []int) {
+	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{36}
+}
+
+func (x *ParameterInformation) GetLabel() string {
+	if x != nil {
+		return x.Label
+	}
+	return ""
+}
+
+func (x *ParameterInformation) GetDocumentation() *MarkupContent {
+	if x != nil {
+		return x.Documentation
+	}
+	return nil
+}
+
+type GetHoverRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	TextDocument *VersionedTextDocumentIdentifier `protobuf:"bytes,1,opt,name=text_document,json=textDocument,proto3" json:"text_document,omitempty"`
+	Position     *Position                        `protobuf:"bytes,2,opt,name=position,proto3" json:"position,omitempty"`
+}
+
+func (x *GetHoverRequest) Reset() {
+	*x = GetHoverRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_deephaven_proto_console_proto_msgTypes[37]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GetHoverRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetHoverRequest) ProtoMessage() {}
+
+func (x *GetHoverRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_deephaven_proto_console_proto_msgTypes[37]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GetHoverRequest.ProtoReflect.Descriptor instead.
+func (*GetHoverRequest) Descriptor() ([]byte, []int) {
+	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{37}
+}
+
+func (x *GetHoverRequest) GetTextDocument() *VersionedTextDocumentIdentifier {
+	if x != nil {
+		return x.TextDocument
+	}
+	return nil
+}
+
+func (x *GetHoverRequest) GetPosition() *Position {
+	if x != nil {
+		return x.Position
+	}
+	return nil
+}
+
+type GetHoverResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Contents *MarkupContent `protobuf:"bytes,1,opt,name=contents,proto3" json:"contents,omitempty"`
+	Range    *DocumentRange `protobuf:"bytes,2,opt,name=range,proto3" json:"range,omitempty"`
+}
+
+func (x *GetHoverResponse) Reset() {
+	*x = GetHoverResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_deephaven_proto_console_proto_msgTypes[38]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GetHoverResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetHoverResponse) ProtoMessage() {}
+
+func (x *GetHoverResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_deephaven_proto_console_proto_msgTypes[38]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GetHoverResponse.ProtoReflect.Descriptor instead.
+func (*GetHoverResponse) Descriptor() ([]byte, []int) {
+	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{38}
+}
+
+func (x *GetHoverResponse) GetContents() *MarkupContent {
+	if x != nil {
+		return x.Contents
+	}
+	return nil
+}
+
+func (x *GetHoverResponse) GetRange() *DocumentRange {
+	if x != nil {
+		return x.Range
+	}
+	return nil
+}
+
+type GetDiagnosticRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	TextDocument     *VersionedTextDocumentIdentifier `protobuf:"bytes,1,opt,name=text_document,json=textDocument,proto3" json:"text_document,omitempty"`
+	Identifier       *string                          `protobuf:"bytes,2,opt,name=identifier,proto3,oneof" json:"identifier,omitempty"`
+	PreviousResultId *string                          `protobuf:"bytes,3,opt,name=previous_result_id,json=previousResultId,proto3,oneof" json:"previous_result_id,omitempty"`
+}
+
+func (x *GetDiagnosticRequest) Reset() {
+	*x = GetDiagnosticRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_deephaven_proto_console_proto_msgTypes[39]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GetDiagnosticRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetDiagnosticRequest) ProtoMessage() {}
+
+func (x *GetDiagnosticRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_deephaven_proto_console_proto_msgTypes[39]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GetDiagnosticRequest.ProtoReflect.Descriptor instead.
+func (*GetDiagnosticRequest) Descriptor() ([]byte, []int) {
+	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{39}
+}
+
+func (x *GetDiagnosticRequest) GetTextDocument() *VersionedTextDocumentIdentifier {
+	if x != nil {
+		return x.TextDocument
+	}
+	return nil
+}
+
+func (x *GetDiagnosticRequest) GetIdentifier() string {
+	if x != nil && x.Identifier != nil {
+		return *x.Identifier
+	}
+	return ""
+}
+
+func (x *GetDiagnosticRequest) GetPreviousResultId() string {
+	if x != nil && x.PreviousResultId != nil {
+		return *x.PreviousResultId
+	}
+	return ""
+}
+
+type GetPullDiagnosticResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Kind     string        `protobuf:"bytes,1,opt,name=kind,proto3" json:"kind,omitempty"`
+	ResultId *string       `protobuf:"bytes,2,opt,name=result_id,json=resultId,proto3,oneof" json:"result_id,omitempty"`
+	Items    []*Diagnostic `protobuf:"bytes,3,rep,name=items,proto3" json:"items,omitempty"`
+}
+
+func (x *GetPullDiagnosticResponse) Reset() {
+	*x = GetPullDiagnosticResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_deephaven_proto_console_proto_msgTypes[40]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GetPullDiagnosticResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetPullDiagnosticResponse) ProtoMessage() {}
+
+func (x *GetPullDiagnosticResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_deephaven_proto_console_proto_msgTypes[40]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GetPullDiagnosticResponse.ProtoReflect.Descriptor instead.
+func (*GetPullDiagnosticResponse) Descriptor() ([]byte, []int) {
+	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{40}
+}
+
+func (x *GetPullDiagnosticResponse) GetKind() string {
+	if x != nil {
+		return x.Kind
+	}
+	return ""
+}
+
+func (x *GetPullDiagnosticResponse) GetResultId() string {
+	if x != nil && x.ResultId != nil {
+		return *x.ResultId
+	}
+	return ""
+}
+
+func (x *GetPullDiagnosticResponse) GetItems() []*Diagnostic {
+	if x != nil {
+		return x.Items
+	}
+	return nil
+}
+
+type GetPublishDiagnosticResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Uri         string        `protobuf:"bytes,1,opt,name=uri,proto3" json:"uri,omitempty"`
+	Version     *int32        `protobuf:"varint,2,opt,name=version,proto3,oneof" json:"version,omitempty"`
+	Diagnostics []*Diagnostic `protobuf:"bytes,3,rep,name=diagnostics,proto3" json:"diagnostics,omitempty"`
+}
+
+func (x *GetPublishDiagnosticResponse) Reset() {
+	*x = GetPublishDiagnosticResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_deephaven_proto_console_proto_msgTypes[41]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GetPublishDiagnosticResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetPublishDiagnosticResponse) ProtoMessage() {}
+
+func (x *GetPublishDiagnosticResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_deephaven_proto_console_proto_msgTypes[41]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GetPublishDiagnosticResponse.ProtoReflect.Descriptor instead.
+func (*GetPublishDiagnosticResponse) Descriptor() ([]byte, []int) {
+	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{41}
+}
+
+func (x *GetPublishDiagnosticResponse) GetUri() string {
+	if x != nil {
+		return x.Uri
+	}
+	return ""
+}
+
+func (x *GetPublishDiagnosticResponse) GetVersion() int32 {
+	if x != nil && x.Version != nil {
+		return *x.Version
+	}
+	return 0
+}
+
+func (x *GetPublishDiagnosticResponse) GetDiagnostics() []*Diagnostic {
+	if x != nil {
+		return x.Diagnostics
+	}
+	return nil
+}
+
+type Diagnostic struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Range           *DocumentRange                `protobuf:"bytes,1,opt,name=range,proto3" json:"range,omitempty"`
+	Severity        Diagnostic_DiagnosticSeverity `protobuf:"varint,2,opt,name=severity,proto3,enum=io.deephaven.proto.backplane.script.grpc.Diagnostic_DiagnosticSeverity" json:"severity,omitempty"`
+	Code            *string                       `protobuf:"bytes,3,opt,name=code,proto3,oneof" json:"code,omitempty"`
+	CodeDescription *Diagnostic_CodeDescription   `protobuf:"bytes,4,opt,name=code_description,json=codeDescription,proto3,oneof" json:"code_description,omitempty"`
+	Source          *string                       `protobuf:"bytes,5,opt,name=source,proto3,oneof" json:"source,omitempty"`
+	Message         string                        `protobuf:"bytes,6,opt,name=message,proto3" json:"message,omitempty"`
+	Tags            []Diagnostic_DiagnosticTag    `protobuf:"varint,7,rep,packed,name=tags,proto3,enum=io.deephaven.proto.backplane.script.grpc.Diagnostic_DiagnosticTag" json:"tags,omitempty"`
+	Data            []byte                        `protobuf:"bytes,9,opt,name=data,proto3,oneof" json:"data,omitempty"`
+}
+
+func (x *Diagnostic) Reset() {
+	*x = Diagnostic{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_deephaven_proto_console_proto_msgTypes[42]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *Diagnostic) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Diagnostic) ProtoMessage() {}
+
+func (x *Diagnostic) ProtoReflect() protoreflect.Message {
+	mi := &file_deephaven_proto_console_proto_msgTypes[42]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use Diagnostic.ProtoReflect.Descriptor instead.
+func (*Diagnostic) Descriptor() ([]byte, []int) {
+	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{42}
+}
+
+func (x *Diagnostic) GetRange() *DocumentRange {
+	if x != nil {
+		return x.Range
+	}
+	return nil
+}
+
+func (x *Diagnostic) GetSeverity() Diagnostic_DiagnosticSeverity {
+	if x != nil {
+		return x.Severity
+	}
+	return Diagnostic_NOT_SET_SEVERITY
+}
+
+func (x *Diagnostic) GetCode() string {
+	if x != nil && x.Code != nil {
+		return *x.Code
+	}
+	return ""
+}
+
+func (x *Diagnostic) GetCodeDescription() *Diagnostic_CodeDescription {
+	if x != nil {
+		return x.CodeDescription
+	}
+	return nil
+}
+
+func (x *Diagnostic) GetSource() string {
+	if x != nil && x.Source != nil {
+		return *x.Source
+	}
+	return ""
+}
+
+func (x *Diagnostic) GetMessage() string {
+	if x != nil {
+		return x.Message
+	}
+	return ""
+}
+
+func (x *Diagnostic) GetTags() []Diagnostic_DiagnosticTag {
+	if x != nil {
+		return x.Tags
+	}
+	return nil
+}
+
+func (x *Diagnostic) GetData() []byte {
+	if x != nil {
+		return x.Data
+	}
+	return nil
+}
+
+type FigureDescriptor struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Title          *string                             `protobuf:"bytes,1,opt,name=title,proto3,oneof" json:"title,omitempty"`
+	TitleFont      string                              `protobuf:"bytes,2,opt,name=title_font,json=titleFont,proto3" json:"title_font,omitempty"`
+	TitleColor     string                              `protobuf:"bytes,3,opt,name=title_color,json=titleColor,proto3" json:"title_color,omitempty"`
+	UpdateInterval int64                               `protobuf:"varint,7,opt,name=update_interval,json=updateInterval,proto3" json:"update_interval,omitempty"`
+	Cols           int32                               `protobuf:"varint,8,opt,name=cols,proto3" json:"cols,omitempty"`
+	Rows           int32                               `protobuf:"varint,9,opt,name=rows,proto3" json:"rows,omitempty"`
+	Charts         []*FigureDescriptor_ChartDescriptor `protobuf:"bytes,10,rep,name=charts,proto3" json:"charts,omitempty"`
+	Errors         []string                            `protobuf:"bytes,13,rep,name=errors,proto3" json:"errors,omitempty"`
+}
+
+func (x *FigureDescriptor) Reset() {
+	*x = FigureDescriptor{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_deephaven_proto_console_proto_msgTypes[43]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *FigureDescriptor) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*FigureDescriptor) ProtoMessage() {}
+
+func (x *FigureDescriptor) ProtoReflect() protoreflect.Message {
+	mi := &file_deephaven_proto_console_proto_msgTypes[43]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use FigureDescriptor.ProtoReflect.Descriptor instead.
+func (*FigureDescriptor) Descriptor() ([]byte, []int) {
+	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{43}
+}
+
+func (x *FigureDescriptor) GetTitle() string {
+	if x != nil && x.Title != nil {
+		return *x.Title
+	}
+	return ""
+}
+
+func (x *FigureDescriptor) GetTitleFont() string {
+	if x != nil {
+		return x.TitleFont
+	}
+	return ""
+}
+
+func (x *FigureDescriptor) GetTitleColor() string {
+	if x != nil {
+		return x.TitleColor
+	}
+	return ""
+}
+
+func (x *FigureDescriptor) GetUpdateInterval() int64 {
+	if x != nil {
+		return x.UpdateInterval
+	}
+	return 0
+}
+
+func (x *FigureDescriptor) GetCols() int32 {
+	if x != nil {
+		return x.Cols
+	}
+	return 0
+}
+
+func (x *FigureDescriptor) GetRows() int32 {
+	if x != nil {
+		return x.Rows
+	}
+	return 0
+}
+
+func (x *FigureDescriptor) GetCharts() []*FigureDescriptor_ChartDescriptor {
+	if x != nil {
+		return x.Charts
+	}
+	return nil
+}
+
+func (x *FigureDescriptor) GetErrors() []string {
+	if x != nil {
+		return x.Errors
+	}
+	return nil
+}
+
+type ChangeDocumentRequest_TextDocumentContentChangeEvent struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Range       *DocumentRange `protobuf:"bytes,1,opt,name=range,proto3" json:"range,omitempty"`
+	RangeLength int32          `protobuf:"varint,2,opt,name=range_length,json=rangeLength,proto3" json:"range_length,omitempty"`
+	Text        string         `protobuf:"bytes,3,opt,name=text,proto3" json:"text,omitempty"`
+}
+
+func (x *ChangeDocumentRequest_TextDocumentContentChangeEvent) Reset() {
+	*x = ChangeDocumentRequest_TextDocumentContentChangeEvent{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_deephaven_proto_console_proto_msgTypes[44]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *ChangeDocumentRequest_TextDocumentContentChangeEvent) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ChangeDocumentRequest_TextDocumentContentChangeEvent) ProtoMessage() {}
+
+func (x *ChangeDocumentRequest_TextDocumentContentChangeEvent) ProtoReflect() protoreflect.Message {
+	mi := &file_deephaven_proto_console_proto_msgTypes[44]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use ChangeDocumentRequest_TextDocumentContentChangeEvent.ProtoReflect.Descriptor instead.
+func (*ChangeDocumentRequest_TextDocumentContentChangeEvent) Descriptor() ([]byte, []int) {
+	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{22, 0}
+}
+
+func (x *ChangeDocumentRequest_TextDocumentContentChangeEvent) GetRange() *DocumentRange {
+	if x != nil {
+		return x.Range
+	}
+	return nil
+}
+
+func (x *ChangeDocumentRequest_TextDocumentContentChangeEvent) GetRangeLength() int32 {
+	if x != nil {
+		return x.RangeLength
+	}
+	return 0
+}
+
+func (x *ChangeDocumentRequest_TextDocumentContentChangeEvent) GetText() string {
+	if x != nil {
+		return x.Text
+	}
+	return ""
+}
+
+type Diagnostic_CodeDescription struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Href string `protobuf:"bytes,1,opt,name=href,proto3" json:"href,omitempty"`
+}
+
+func (x *Diagnostic_CodeDescription) Reset() {
+	*x = Diagnostic_CodeDescription{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_deephaven_proto_console_proto_msgTypes[45]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *Diagnostic_CodeDescription) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Diagnostic_CodeDescription) ProtoMessage() {}
+
+func (x *Diagnostic_CodeDescription) ProtoReflect() protoreflect.Message {
+	mi := &file_deephaven_proto_console_proto_msgTypes[45]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use Diagnostic_CodeDescription.ProtoReflect.Descriptor instead.
+func (*Diagnostic_CodeDescription) Descriptor() ([]byte, []int) {
+	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{42, 0}
+}
+
+func (x *Diagnostic_CodeDescription) GetHref() string {
+	if x != nil {
+		return x.Href
+	}
+	return ""
+}
+
+type FigureDescriptor_ChartDescriptor struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Colspan     int32                                      `protobuf:"varint,1,opt,name=colspan,proto3" json:"colspan,omitempty"`
+	Rowspan     int32                                      `protobuf:"varint,2,opt,name=rowspan,proto3" json:"rowspan,omitempty"`
+	Series      []*FigureDescriptor_SeriesDescriptor       `protobuf:"bytes,3,rep,name=series,proto3" json:"series,omitempty"`
+	MultiSeries []*FigureDescriptor_MultiSeriesDescriptor  `protobuf:"bytes,4,rep,name=multi_series,json=multiSeries,proto3" json:"multi_series,omitempty"`
+	Axes        []*FigureDescriptor_AxisDescriptor         `protobuf:"bytes,5,rep,name=axes,proto3" json:"axes,omitempty"`
+	ChartType   FigureDescriptor_ChartDescriptor_ChartType `protobuf:"varint,6,opt,name=chart_type,json=chartType,proto3,enum=io.deephaven.proto.backplane.script.grpc.FigureDescriptor_ChartDescriptor_ChartType" json:"chart_type,omitempty"`
+	Title       *string                                    `protobuf:"bytes,7,opt,name=title,proto3,oneof" json:"title,omitempty"`
+	TitleFont   string                                     `protobuf:"bytes,8,opt,name=title_font,json=titleFont,proto3" json:"title_font,omitempty"`
+	TitleColor  string                                     `protobuf:"bytes,9,opt,name=title_color,json=titleColor,proto3" json:"title_color,omitempty"`
+	ShowLegend  bool                                       `protobuf:"varint,10,opt,name=show_legend,json=showLegend,proto3" json:"show_legend,omitempty"`
+	LegendFont  string                                     `protobuf:"bytes,11,opt,name=legend_font,json=legendFont,proto3" json:"legend_font,omitempty"`
+	LegendColor string                                     `protobuf:"bytes,12,opt,name=legend_color,json=legendColor,proto3" json:"legend_color,omitempty"`
+	Is3D        bool                                       `protobuf:"varint,13,opt,name=is3d,proto3" json:"is3d,omitempty"`
+	Column      int32                                      `protobuf:"varint,14,opt,name=column,proto3" json:"column,omitempty"`
+	Row         int32                                      `protobuf:"varint,15,opt,name=row,proto3" json:"row,omitempty"`
+}
+
+func (x *FigureDescriptor_ChartDescriptor) Reset() {
+	*x = FigureDescriptor_ChartDescriptor{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_deephaven_proto_console_proto_msgTypes[46]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *FigureDescriptor_ChartDescriptor) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*FigureDescriptor_ChartDescriptor) ProtoMessage() {}
+
+func (x *FigureDescriptor_ChartDescriptor) ProtoReflect() protoreflect.Message {
+	mi := &file_deephaven_proto_console_proto_msgTypes[46]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use FigureDescriptor_ChartDescriptor.ProtoReflect.Descriptor instead.
+func (*FigureDescriptor_ChartDescriptor) Descriptor() ([]byte, []int) {
+	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{43, 0}
+}
+
+func (x *FigureDescriptor_ChartDescriptor) GetColspan() int32 {
+	if x != nil {
+		return x.Colspan
 	}
 	return 0
 }
@@ -2580,7 +3755,7 @@ type FigureDescriptor_SeriesDescriptor struct {
 func (x *FigureDescriptor_SeriesDescriptor) Reset() {
 	*x = FigureDescriptor_SeriesDescriptor{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_deephaven_proto_console_proto_msgTypes[32]
+		mi := &file_deephaven_proto_console_proto_msgTypes[47]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2593,7 +3768,7 @@ func (x *FigureDescriptor_SeriesDescriptor) String() string {
 func (*FigureDescriptor_SeriesDescriptor) ProtoMessage() {}
 
 func (x *FigureDescriptor_SeriesDescriptor) ProtoReflect() protoreflect.Message {
-	mi := &file_deephaven_proto_console_proto_msgTypes[32]
+	mi := &file_deephaven_proto_console_proto_msgTypes[47]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2606,7 +3781,7 @@ func (x *FigureDescriptor_SeriesDescriptor) ProtoReflect() protoreflect.Message
 
 // Deprecated: Use FigureDescriptor_SeriesDescriptor.ProtoReflect.Descriptor instead.
 func (*FigureDescriptor_SeriesDescriptor) Descriptor() ([]byte, []int) {
-	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{29, 1}
+	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{43, 1}
 }
 
 func (x *FigureDescriptor_SeriesDescriptor) GetPlotStyle() FigureDescriptor_SeriesPlotStyle {
@@ -2731,7 +3906,7 @@ type FigureDescriptor_MultiSeriesDescriptor struct {
 func (x *FigureDescriptor_MultiSeriesDescriptor) Reset() {
 	*x = FigureDescriptor_MultiSeriesDescriptor{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_deephaven_proto_console_proto_msgTypes[33]
+		mi := &file_deephaven_proto_console_proto_msgTypes[48]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2744,7 +3919,7 @@ func (x *FigureDescriptor_MultiSeriesDescriptor) String() string {
 func (*FigureDescriptor_MultiSeriesDescriptor) ProtoMessage() {}
 
 func (x *FigureDescriptor_MultiSeriesDescriptor) ProtoReflect() protoreflect.Message {
-	mi := &file_deephaven_proto_console_proto_msgTypes[33]
+	mi := &file_deephaven_proto_console_proto_msgTypes[48]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2757,7 +3932,7 @@ func (x *FigureDescriptor_MultiSeriesDescriptor) ProtoReflect() protoreflect.Mes
 
 // Deprecated: Use FigureDescriptor_MultiSeriesDescriptor.ProtoReflect.Descriptor instead.
 func (*FigureDescriptor_MultiSeriesDescriptor) Descriptor() ([]byte, []int) {
-	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{29, 2}
+	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{43, 2}
 }
 
 func (x *FigureDescriptor_MultiSeriesDescriptor) GetPlotStyle() FigureDescriptor_SeriesPlotStyle {
@@ -2871,7 +4046,7 @@ type FigureDescriptor_StringMapWithDefault struct {
 func (x *FigureDescriptor_StringMapWithDefault) Reset() {
 	*x = FigureDescriptor_StringMapWithDefault{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_deephaven_proto_console_proto_msgTypes[34]
+		mi := &file_deephaven_proto_console_proto_msgTypes[49]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2884,7 +4059,7 @@ func (x *FigureDescriptor_StringMapWithDefault) String() string {
 func (*FigureDescriptor_StringMapWithDefault) ProtoMessage() {}
 
 func (x *FigureDescriptor_StringMapWithDefault) ProtoReflect() protoreflect.Message {
-	mi := &file_deephaven_proto_console_proto_msgTypes[34]
+	mi := &file_deephaven_proto_console_proto_msgTypes[49]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2897,7 +4072,7 @@ func (x *FigureDescriptor_StringMapWithDefault) ProtoReflect() protoreflect.Mess
 
 // Deprecated: Use FigureDescriptor_StringMapWithDefault.ProtoReflect.Descriptor instead.
 func (*FigureDescriptor_StringMapWithDefault) Descriptor() ([]byte, []int) {
-	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{29, 3}
+	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{43, 3}
 }
 
 func (x *FigureDescriptor_StringMapWithDefault) GetDefaultString() string {
@@ -2934,7 +4109,7 @@ type FigureDescriptor_DoubleMapWithDefault struct {
 func (x *FigureDescriptor_DoubleMapWithDefault) Reset() {
 	*x = FigureDescriptor_DoubleMapWithDefault{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_deephaven_proto_console_proto_msgTypes[35]
+		mi := &file_deephaven_proto_console_proto_msgTypes[50]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2947,7 +4122,7 @@ func (x *FigureDescriptor_DoubleMapWithDefault) String() string {
 func (*FigureDescriptor_DoubleMapWithDefault) ProtoMessage() {}
 
 func (x *FigureDescriptor_DoubleMapWithDefault) ProtoReflect() protoreflect.Message {
-	mi := &file_deephaven_proto_console_proto_msgTypes[35]
+	mi := &file_deephaven_proto_console_proto_msgTypes[50]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2960,7 +4135,7 @@ func (x *FigureDescriptor_DoubleMapWithDefault) ProtoReflect() protoreflect.Mess
 
 // Deprecated: Use FigureDescriptor_DoubleMapWithDefault.ProtoReflect.Descriptor instead.
 func (*FigureDescriptor_DoubleMapWithDefault) Descriptor() ([]byte, []int) {
-	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{29, 4}
+	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{43, 4}
 }
 
 func (x *FigureDescriptor_DoubleMapWithDefault) GetDefaultDouble() float64 {
@@ -2997,7 +4172,7 @@ type FigureDescriptor_BoolMapWithDefault struct {
 func (x *FigureDescriptor_BoolMapWithDefault) Reset() {
 	*x = FigureDescriptor_BoolMapWithDefault{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_deephaven_proto_console_proto_msgTypes[36]
+		mi := &file_deephaven_proto_console_proto_msgTypes[51]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -3010,7 +4185,7 @@ func (x *FigureDescriptor_BoolMapWithDefault) String() string {
 func (*FigureDescriptor_BoolMapWithDefault) ProtoMessage() {}
 
 func (x *FigureDescriptor_BoolMapWithDefault) ProtoReflect() protoreflect.Message {
-	mi := &file_deephaven_proto_console_proto_msgTypes[36]
+	mi := &file_deephaven_proto_console_proto_msgTypes[51]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -3023,7 +4198,7 @@ func (x *FigureDescriptor_BoolMapWithDefault) ProtoReflect() protoreflect.Messag
 
 // Deprecated: Use FigureDescriptor_BoolMapWithDefault.ProtoReflect.Descriptor instead.
 func (*FigureDescriptor_BoolMapWithDefault) Descriptor() ([]byte, []int) {
-	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{29, 5}
+	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{43, 5}
 }
 
 func (x *FigureDescriptor_BoolMapWithDefault) GetDefaultBool() bool {
@@ -3078,7 +4253,7 @@ type FigureDescriptor_AxisDescriptor struct {
 func (x *FigureDescriptor_AxisDescriptor) Reset() {
 	*x = FigureDescriptor_AxisDescriptor{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_deephaven_proto_console_proto_msgTypes[37]
+		mi := &file_deephaven_proto_console_proto_msgTypes[52]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -3091,7 +4266,7 @@ func (x *FigureDescriptor_AxisDescriptor) String() string {
 func (*FigureDescriptor_AxisDescriptor) ProtoMessage() {}
 
 func (x *FigureDescriptor_AxisDescriptor) ProtoReflect() protoreflect.Message {
-	mi := &file_deephaven_proto_console_proto_msgTypes[37]
+	mi := &file_deephaven_proto_console_proto_msgTypes[52]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -3104,7 +4279,7 @@ func (x *FigureDescriptor_AxisDescriptor) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use FigureDescriptor_AxisDescriptor.ProtoReflect.Descriptor instead.
 func (*FigureDescriptor_AxisDescriptor) Descriptor() ([]byte, []int) {
-	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{29, 6}
+	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{43, 6}
 }
 
 func (x *FigureDescriptor_AxisDescriptor) GetId() string {
@@ -3269,7 +4444,7 @@ type FigureDescriptor_BusinessCalendarDescriptor struct {
 func (x *FigureDescriptor_BusinessCalendarDescriptor) Reset() {
 	*x = FigureDescriptor_BusinessCalendarDescriptor{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_deephaven_proto_console_proto_msgTypes[38]
+		mi := &file_deephaven_proto_console_proto_msgTypes[53]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -3282,7 +4457,7 @@ func (x *FigureDescriptor_BusinessCalendarDescriptor) String() string {
 func (*FigureDescriptor_BusinessCalendarDescriptor) ProtoMessage() {}
 
 func (x *FigureDescriptor_BusinessCalendarDescriptor) ProtoReflect() protoreflect.Message {
-	mi := &file_deephaven_proto_console_proto_msgTypes[38]
+	mi := &file_deephaven_proto_console_proto_msgTypes[53]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -3295,7 +4470,7 @@ func (x *FigureDescriptor_BusinessCalendarDescriptor) ProtoReflect() protoreflec
 
 // Deprecated: Use FigureDescriptor_BusinessCalendarDescriptor.ProtoReflect.Descriptor instead.
 func (*FigureDescriptor_BusinessCalendarDescriptor) Descriptor() ([]byte, []int) {
-	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{29, 7}
+	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{43, 7}
 }
 
 func (x *FigureDescriptor_BusinessCalendarDescriptor) GetName() string {
@@ -3347,7 +4522,7 @@ type FigureDescriptor_MultiSeriesSourceDescriptor struct {
 func (x *FigureDescriptor_MultiSeriesSourceDescriptor) Reset() {
 	*x = FigureDescriptor_MultiSeriesSourceDescriptor{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_deephaven_proto_console_proto_msgTypes[39]
+		mi := &file_deephaven_proto_console_proto_msgTypes[54]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -3360,7 +4535,7 @@ func (x *FigureDescriptor_MultiSeriesSourceDescriptor) String() string {
 func (*FigureDescriptor_MultiSeriesSourceDescriptor) ProtoMessage() {}
 
 func (x *FigureDescriptor_MultiSeriesSourceDescriptor) ProtoReflect() protoreflect.Message {
-	mi := &file_deephaven_proto_console_proto_msgTypes[39]
+	mi := &file_deephaven_proto_console_proto_msgTypes[54]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -3373,7 +4548,7 @@ func (x *FigureDescriptor_MultiSeriesSourceDescriptor) ProtoReflect() protorefle
 
 // Deprecated: Use FigureDescriptor_MultiSeriesSourceDescriptor.ProtoReflect.Descriptor instead.
 func (*FigureDescriptor_MultiSeriesSourceDescriptor) Descriptor() ([]byte, []int) {
-	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{29, 8}
+	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{43, 8}
 }
 
 func (x *FigureDescriptor_MultiSeriesSourceDescriptor) GetAxisId() string {
@@ -3421,7 +4596,7 @@ type FigureDescriptor_SourceDescriptor struct {
 func (x *FigureDescriptor_SourceDescriptor) Reset() {
 	*x = FigureDescriptor_SourceDescriptor{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_deephaven_proto_console_proto_msgTypes[40]
+		mi := &file_deephaven_proto_console_proto_msgTypes[55]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -3434,7 +4609,7 @@ func (x *FigureDescriptor_SourceDescriptor) String() string {
 func (*FigureDescriptor_SourceDescriptor) ProtoMessage() {}
 
 func (x *FigureDescriptor_SourceDescriptor) ProtoReflect() protoreflect.Message {
-	mi := &file_deephaven_proto_console_proto_msgTypes[40]
+	mi := &file_deephaven_proto_console_proto_msgTypes[55]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -3447,7 +4622,7 @@ func (x *FigureDescriptor_SourceDescriptor) ProtoReflect() protoreflect.Message
 
 // Deprecated: Use FigureDescriptor_SourceDescriptor.ProtoReflect.Descriptor instead.
 func (*FigureDescriptor_SourceDescriptor) Descriptor() ([]byte, []int) {
-	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{29, 9}
+	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{43, 9}
 }
 
 func (x *FigureDescriptor_SourceDescriptor) GetAxisId() string {
@@ -3512,7 +4687,7 @@ type FigureDescriptor_OneClickDescriptor struct {
 func (x *FigureDescriptor_OneClickDescriptor) Reset() {
 	*x = FigureDescriptor_OneClickDescriptor{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_deephaven_proto_console_proto_msgTypes[41]
+		mi := &file_deephaven_proto_console_proto_msgTypes[56]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -3525,7 +4700,7 @@ func (x *FigureDescriptor_OneClickDescriptor) String() string {
 func (*FigureDescriptor_OneClickDescriptor) ProtoMessage() {}
 
 func (x *FigureDescriptor_OneClickDescriptor) ProtoReflect() protoreflect.Message {
-	mi := &file_deephaven_proto_console_proto_msgTypes[41]
+	mi := &file_deephaven_proto_console_proto_msgTypes[56]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -3538,7 +4713,7 @@ func (x *FigureDescriptor_OneClickDescriptor) ProtoReflect() protoreflect.Messag
 
 // Deprecated: Use FigureDescriptor_OneClickDescriptor.ProtoReflect.Descriptor instead.
 func (*FigureDescriptor_OneClickDescriptor) Descriptor() ([]byte, []int) {
-	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{29, 10}
+	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{43, 10}
 }
 
 func (x *FigureDescriptor_OneClickDescriptor) GetColumns() []string {
@@ -3574,7 +4749,7 @@ type FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod struct {
 func (x *FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod) Reset() {
 	*x = FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_deephaven_proto_console_proto_msgTypes[42]
+		mi := &file_deephaven_proto_console_proto_msgTypes[57]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -3587,7 +4762,7 @@ func (x *FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod) String() st
 func (*FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod) ProtoMessage() {}
 
 func (x *FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod) ProtoReflect() protoreflect.Message {
-	mi := &file_deephaven_proto_console_proto_msgTypes[42]
+	mi := &file_deephaven_proto_console_proto_msgTypes[57]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -3600,7 +4775,7 @@ func (x *FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod) ProtoReflec
 
 // Deprecated: Use FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod.ProtoReflect.Descriptor instead.
 func (*FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod) Descriptor() ([]byte, []int) {
-	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{29, 7, 0}
+	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{43, 7, 0}
 }
 
 func (x *FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod) GetOpen() string {
@@ -3629,7 +4804,7 @@ type FigureDescriptor_BusinessCalendarDescriptor_Holiday struct {
 func (x *FigureDescriptor_BusinessCalendarDescriptor_Holiday) Reset() {
 	*x = FigureDescriptor_BusinessCalendarDescriptor_Holiday{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_deephaven_proto_console_proto_msgTypes[43]
+		mi := &file_deephaven_proto_console_proto_msgTypes[58]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -3642,7 +4817,7 @@ func (x *FigureDescriptor_BusinessCalendarDescriptor_Holiday) String() string {
 func (*FigureDescriptor_BusinessCalendarDescriptor_Holiday) ProtoMessage() {}
 
 func (x *FigureDescriptor_BusinessCalendarDescriptor_Holiday) ProtoReflect() protoreflect.Message {
-	mi := &file_deephaven_proto_console_proto_msgTypes[43]
+	mi := &file_deephaven_proto_console_proto_msgTypes[58]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -3655,7 +4830,7 @@ func (x *FigureDescriptor_BusinessCalendarDescriptor_Holiday) ProtoReflect() pro
 
 // Deprecated: Use FigureDescriptor_BusinessCalendarDescriptor_Holiday.ProtoReflect.Descriptor instead.
 func (*FigureDescriptor_BusinessCalendarDescriptor_Holiday) Descriptor() ([]byte, []int) {
-	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{29, 7, 1}
+	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{43, 7, 1}
 }
 
 func (x *FigureDescriptor_BusinessCalendarDescriptor_Holiday) GetDate() *FigureDescriptor_BusinessCalendarDescriptor_LocalDate {
@@ -3685,7 +4860,7 @@ type FigureDescriptor_BusinessCalendarDescriptor_LocalDate struct {
 func (x *FigureDescriptor_BusinessCalendarDescriptor_LocalDate) Reset() {
 	*x = FigureDescriptor_BusinessCalendarDescriptor_LocalDate{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_deephaven_proto_console_proto_msgTypes[44]
+		mi := &file_deephaven_proto_console_proto_msgTypes[59]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -3698,7 +4873,7 @@ func (x *FigureDescriptor_BusinessCalendarDescriptor_LocalDate) String() string
 func (*FigureDescriptor_BusinessCalendarDescriptor_LocalDate) ProtoMessage() {}
 
 func (x *FigureDescriptor_BusinessCalendarDescriptor_LocalDate) ProtoReflect() protoreflect.Message {
-	mi := &file_deephaven_proto_console_proto_msgTypes[44]
+	mi := &file_deephaven_proto_console_proto_msgTypes[59]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -3711,7 +4886,7 @@ func (x *FigureDescriptor_BusinessCalendarDescriptor_LocalDate) ProtoReflect() p
 
 // Deprecated: Use FigureDescriptor_BusinessCalendarDescriptor_LocalDate.ProtoReflect.Descriptor instead.
 func (*FigureDescriptor_BusinessCalendarDescriptor_LocalDate) Descriptor() ([]byte, []int) {
-	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{29, 7, 2}
+	return file_deephaven_proto_console_proto_rawDescGZIP(), []int{43, 7, 2}
 }
 
 func (x *FigureDescriptor_BusinessCalendarDescriptor_LocalDate) GetYear() int32 {
@@ -3834,786 +5009,1064 @@ var file_deephaven_proto_console_proto_rawDesc = []byte{
 	0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67,
 	0x72, 0x70, 0x63, 0x2e, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d,
 	0x61, 0x6e, 0x64, 0x49, 0x64, 0x22, 0x17, 0x0a, 0x15, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x43,
-	0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xd4,
-	0x03, 0x0a, 0x13, 0x41, 0x75, 0x74, 0x6f, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x52,
-	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x64, 0x0a, 0x0d, 0x6f, 0x70, 0x65, 0x6e, 0x5f, 0x64,
-	0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e,
+	0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x84,
+	0x01, 0x0a, 0x19, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x41, 0x75, 0x74, 0x6f, 0x43, 0x6f, 0x6d,
+	0x70, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x48, 0x0a, 0x0a,
+	0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,
+	0x32, 0x29, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e,
+	0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x09, 0x63, 0x6f, 0x6e,
+	0x73, 0x6f, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73,
+	0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75,
+	0x65, 0x73, 0x74, 0x49, 0x64, 0x22, 0x1c, 0x0a, 0x1a, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x41,
+	0x75, 0x74, 0x6f, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f,
+	0x6e, 0x73, 0x65, 0x22, 0xf3, 0x06, 0x0a, 0x13, 0x41, 0x75, 0x74, 0x6f, 0x43, 0x6f, 0x6d, 0x70,
+	0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x48, 0x0a, 0x0a, 0x63,
+	0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x29, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67,
+	0x72, 0x70, 0x63, 0x2e, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x73,
+	0x6f, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+	0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65,
+	0x73, 0x74, 0x49, 0x64, 0x12, 0x64, 0x0a, 0x0d, 0x6f, 0x70, 0x65, 0x6e, 0x5f, 0x64, 0x6f, 0x63,
+	0x75, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x69, 0x6f,
+	0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70,
+	0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x44, 0x6f, 0x63, 0x75, 0x6d,
+	0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0c, 0x6f, 0x70,
+	0x65, 0x6e, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x6a, 0x0a, 0x0f, 0x63, 0x68,
+	0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20,
+	0x01, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76,
+	0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61,
+	0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x43,
+	0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71,
+	0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0e, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x6f,
+	0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x77, 0x0a, 0x14, 0x67, 0x65, 0x74, 0x5f, 0x63, 0x6f,
+	0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x03,
+	0x20, 0x01, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61,
+	0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c,
+	0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e,
+	0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x74, 0x65,
+	0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x12, 0x67, 0x65, 0x74,
+	0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12,
+	0x71, 0x0a, 0x12, 0x67, 0x65, 0x74, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65,
+	0x5f, 0x68, 0x65, 0x6c, 0x70, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x69, 0x6f,
+	0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70,
+	0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74,
+	0x75, 0x72, 0x65, 0x48, 0x65, 0x6c, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00,
+	0x52, 0x10, 0x67, 0x65, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x48, 0x65,
+	0x6c, 0x70, 0x12, 0x58, 0x0a, 0x09, 0x67, 0x65, 0x74, 0x5f, 0x68, 0x6f, 0x76, 0x65, 0x72, 0x18,
+	0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68,
+	0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70,
+	0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63,
+	0x2e, 0x47, 0x65, 0x74, 0x48, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+	0x48, 0x00, 0x52, 0x08, 0x67, 0x65, 0x74, 0x48, 0x6f, 0x76, 0x65, 0x72, 0x12, 0x67, 0x0a, 0x0e,
+	0x67, 0x65, 0x74, 0x5f, 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x18, 0x09,
+	0x20, 0x01, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61,
+	0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c,
+	0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e,
+	0x47, 0x65, 0x74, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x52, 0x65, 0x71,
+	0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0d, 0x67, 0x65, 0x74, 0x44, 0x69, 0x61, 0x67, 0x6e,
+	0x6f, 0x73, 0x74, 0x69, 0x63, 0x12, 0x67, 0x0a, 0x0e, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x5f, 0x64,
+	0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3e, 0x2e,
 	0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f,
 	0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72,
-	0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x44, 0x6f, 0x63,
-	0x75, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0c,
-	0x6f, 0x70, 0x65, 0x6e, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x6a, 0x0a, 0x0f,
-	0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x18,
-	0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68,
+	0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x44, 0x6f,
+	0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52,
+	0x0d, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x42, 0x09,
+	0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xe8, 0x04, 0x0a, 0x14, 0x41, 0x75,
+	0x74, 0x6f, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+	0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64,
+	0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49,
+	0x64, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x03, 0x20, 0x01,
+	0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x71, 0x0a, 0x10, 0x63,
+	0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68,
 	0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70,
 	0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63,
-	0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x52,
-	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0e, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65,
-	0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x77, 0x0a, 0x14, 0x67, 0x65, 0x74, 0x5f,
-	0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73,
-	0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70,
-	0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b,
-	0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70,
-	0x63, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x49,
-	0x74, 0x65, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x12, 0x67,
-	0x65, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x74, 0x65, 0x6d,
-	0x73, 0x12, 0x67, 0x0a, 0x0e, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x5f, 0x64, 0x6f, 0x63, 0x75, 0x6d,
-	0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x69, 0x6f, 0x2e, 0x64,
-	0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62,
-	0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e,
-	0x67, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65,
-	0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0d, 0x63, 0x6c, 0x6f,
-	0x73, 0x65, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x42, 0x09, 0x0a, 0x07, 0x72, 0x65,
-	0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x95, 0x01, 0x0a, 0x14, 0x41, 0x75, 0x74, 0x6f, 0x43, 0x6f,
-	0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x71,
-	0x0a, 0x10, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x74, 0x65,
-	0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65,
+	0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x74,
+	0x65, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x0f, 0x63,
+	0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x64,
+	0x0a, 0x0a, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01,
+	0x28, 0x0b, 0x32, 0x42, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65,
+	0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e,
+	0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x47, 0x65,
+	0x74, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x48, 0x65, 0x6c, 0x70, 0x52, 0x65,
+	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x0a, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74,
+	0x75, 0x72, 0x65, 0x73, 0x12, 0x52, 0x0a, 0x05, 0x68, 0x6f, 0x76, 0x65, 0x72, 0x18, 0x05, 0x20,
+	0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76,
+	0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61,
+	0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x47,
+	0x65, 0x74, 0x48, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48,
+	0x00, 0x52, 0x05, 0x68, 0x6f, 0x76, 0x65, 0x72, 0x12, 0x65, 0x0a, 0x0a, 0x64, 0x69, 0x61, 0x67,
+	0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x69,
+	0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69,
+	0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x75, 0x6c, 0x6c, 0x44,
+	0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+	0x65, 0x48, 0x00, 0x52, 0x0a, 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x12,
+	0x77, 0x0a, 0x12, 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x5f, 0x70, 0x75,
+	0x62, 0x6c, 0x69, 0x73, 0x68, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x46, 0x2e, 0x69, 0x6f,
+	0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70,
+	0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73,
+	0x68, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x52, 0x65, 0x73, 0x70, 0x6f,
+	0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x11, 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69,
+	0x63, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x42, 0x0a, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70,
+	0x6f, 0x6e, 0x73, 0x65, 0x22, 0x15, 0x0a, 0x13, 0x42, 0x72, 0x6f, 0x77, 0x73, 0x65, 0x72, 0x4e,
+	0x65, 0x78, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xc4, 0x01, 0x0a, 0x13,
+	0x4f, 0x70, 0x65, 0x6e, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75,
+	0x65, 0x73, 0x74, 0x12, 0x4c, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x5f, 0x69,
+	0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65,
+	0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63,
+	0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x69, 0x63, 0x6b,
+	0x65, 0x74, 0x42, 0x02, 0x18, 0x01, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x49,
+	0x64, 0x12, 0x5f, 0x0a, 0x0d, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65,
+	0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65,
 	0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61,
 	0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67,
-	0x72, 0x70, 0x63, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f,
-	0x6e, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00,
-	0x52, 0x0f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x74, 0x65, 0x6d,
-	0x73, 0x42, 0x0a, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x15, 0x0a,
-	0x13, 0x42, 0x72, 0x6f, 0x77, 0x73, 0x65, 0x72, 0x4e, 0x65, 0x78, 0x74, 0x52, 0x65, 0x73, 0x70,
-	0x6f, 0x6e, 0x73, 0x65, 0x22, 0xc0, 0x01, 0x0a, 0x13, 0x4f, 0x70, 0x65, 0x6e, 0x44, 0x6f, 0x63,
-	0x75, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x48, 0x0a, 0x0a,
-	0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,
-	0x32, 0x29, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e,
+	0x72, 0x70, 0x63, 0x2e, 0x54, 0x65, 0x78, 0x74, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74,
+	0x49, 0x74, 0x65, 0x6d, 0x52, 0x0c, 0x74, 0x65, 0x78, 0x74, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65,
+	0x6e, 0x74, 0x22, 0x73, 0x0a, 0x10, 0x54, 0x65, 0x78, 0x74, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65,
+	0x6e, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, 0x1f, 0x0a, 0x0b, 0x6c, 0x61, 0x6e, 0x67,
+	0x75, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6c,
+	0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72,
+	0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73,
+	0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x22, 0xd4, 0x01, 0x0a, 0x14, 0x43, 0x6c, 0x6f, 0x73,
+	0x65, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+	0x12, 0x4c, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01,
+	0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61,
+	0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c,
+	0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x42,
+	0x02, 0x18, 0x01, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x6e,
+	0x0a, 0x0d, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x18,
+	0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x49, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68,
+	0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70,
+	0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63,
+	0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x64, 0x54, 0x65, 0x78, 0x74, 0x44, 0x6f,
+	0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72,
+	0x52, 0x0c, 0x74, 0x65, 0x78, 0x74, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x88,
+	0x04, 0x0a, 0x15, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e,
+	0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4c, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x73,
+	0x6f, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x69,
+	0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63,
+	0x2e, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x42, 0x02, 0x18, 0x01, 0x52, 0x09, 0x63, 0x6f, 0x6e,
+	0x73, 0x6f, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x6e, 0x0a, 0x0d, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x64,
+	0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x49, 0x2e,
+	0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72,
+	0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e,
+	0x65, 0x64, 0x54, 0x65, 0x78, 0x74, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64,
+	0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x0c, 0x74, 0x65, 0x78, 0x74, 0x44, 0x6f,
+	0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x87, 0x01, 0x0a, 0x0f, 0x63, 0x6f, 0x6e, 0x74, 0x65,
+	0x6e, 0x74, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b,
+	0x32, 0x5e, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e,
 	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e,
-	0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x09, 0x63, 0x6f, 0x6e,
-	0x73, 0x6f, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x5f, 0x0a, 0x0d, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x64,
-	0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e,
+	0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x68, 0x61, 0x6e,
+	0x67, 0x65, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+	0x74, 0x2e, 0x54, 0x65, 0x78, 0x74, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f,
+	0x6e, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74,
+	0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73,
+	0x1a, 0xa6, 0x01, 0x0a, 0x1e, 0x54, 0x65, 0x78, 0x74, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e,
+	0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x45, 0x76,
+	0x65, 0x6e, 0x74, 0x12, 0x4d, 0x0a, 0x05, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x0b, 0x32, 0x37, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65,
+	0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e,
+	0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x44, 0x6f,
+	0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x05, 0x72, 0x61, 0x6e,
+	0x67, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x6c, 0x65, 0x6e, 0x67,
+	0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x4c,
+	0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x03, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x22, 0x9f, 0x01, 0x0a, 0x0d, 0x44, 0x6f,
+	0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x48, 0x0a, 0x05, 0x73,
+	0x74, 0x61, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x69, 0x6f, 0x2e,
+	0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
+	0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74,
+	0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05,
+	0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x44, 0x0a, 0x03, 0x65, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01,
+	0x28, 0x0b, 0x32, 0x32, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65,
+	0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e,
+	0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x50, 0x6f,
+	0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x03, 0x65, 0x6e, 0x64, 0x22, 0x4d, 0x0a, 0x1f, 0x56,
+	0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x64, 0x54, 0x65, 0x78, 0x74, 0x44, 0x6f, 0x63, 0x75,
+	0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x10,
+	0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x69,
+	0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28,
+	0x05, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3c, 0x0a, 0x08, 0x50, 0x6f,
+	0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6c, 0x69, 0x6e, 0x65, 0x18, 0x01,
+	0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x6c, 0x69, 0x6e, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x68,
+	0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x63,
+	0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x22, 0x39, 0x0a, 0x0d, 0x4d, 0x61, 0x72, 0x6b,
+	0x75, 0x70, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6b, 0x69, 0x6e,
+	0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x14, 0x0a,
+	0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61,
+	0x6c, 0x75, 0x65, 0x22, 0xa3, 0x03, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x6c,
+	0x65, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+	0x74, 0x12, 0x4c, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68,
+	0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70,
+	0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74,
+	0x42, 0x02, 0x18, 0x01, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x49, 0x64, 0x12,
+	0x55, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b,
+	0x32, 0x3b, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e,
+	0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x6f, 0x6d, 0x70,
+	0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x07, 0x63,
+	0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x6e, 0x0a, 0x0d, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x64,
+	0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x49, 0x2e,
 	0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f,
 	0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72,
-	0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x65, 0x78, 0x74, 0x44, 0x6f, 0x63,
-	0x75, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x0c, 0x74, 0x65, 0x78, 0x74, 0x44,
-	0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x73, 0x0a, 0x10, 0x54, 0x65, 0x78, 0x74, 0x44,
-	0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x10, 0x0a, 0x03, 0x75,
-	0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, 0x1f, 0x0a,
-	0x0b, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01,
-	0x28, 0x09, 0x52, 0x0a, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x18,
-	0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52,
-	0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74,
-	0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x22, 0xd0, 0x01, 0x0a,
-	0x14, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65,
-	0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x48, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65,
-	0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x69, 0x6f, 0x2e, 0x64,
-	0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62,
-	0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x69,
-	0x63, 0x6b, 0x65, 0x74, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x49, 0x64, 0x12,
-	0x6e, 0x0a, 0x0d, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74,
-	0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x49, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70,
-	0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b,
-	0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70,
-	0x63, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x64, 0x54, 0x65, 0x78, 0x74, 0x44,
-	0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65,
-	0x72, 0x52, 0x0c, 0x74, 0x65, 0x78, 0x74, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x22,
-	0x84, 0x04, 0x0a, 0x15, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65,
-	0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x48, 0x0a, 0x0a, 0x63, 0x6f, 0x6e,
-	0x73, 0x6f, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e,
+	0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e,
+	0x65, 0x64, 0x54, 0x65, 0x78, 0x74, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64,
+	0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x0c, 0x74, 0x65, 0x78, 0x74, 0x44, 0x6f,
+	0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x4e, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69,
+	0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65,
+	0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61,
+	0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67,
+	0x72, 0x70, 0x63, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x70, 0x6f,
+	0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73,
+	0x74, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x42, 0x02, 0x18, 0x01, 0x52, 0x09,
+	0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x22, 0x63, 0x0a, 0x11, 0x43, 0x6f, 0x6d,
+	0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x21,
+	0x0a, 0x0c, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x5f, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x01,
+	0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x4b, 0x69, 0x6e,
+	0x64, 0x12, 0x2b, 0x0a, 0x11, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x5f, 0x63, 0x68, 0x61,
+	0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x74, 0x72,
+	0x69, 0x67, 0x67, 0x65, 0x72, 0x43, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x22, 0xad,
+	0x01, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e,
+	0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4e, 0x0a,
+	0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x69,
+	0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69,
+	0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69,
+	0x6f, 0x6e, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x21, 0x0a,
+	0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28,
+	0x05, 0x42, 0x02, 0x18, 0x01, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64,
+	0x12, 0x1c, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28,
+	0x08, 0x42, 0x02, 0x18, 0x01, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x22, 0xf5,
+	0x04, 0x0a, 0x0e, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x74, 0x65,
+	0x6d, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05,
+	0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74,
+	0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12,
+	0x14, 0x0a, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05,
+	0x6c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x04, 0x20,
+	0x01, 0x28, 0x05, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x65, 0x74,
+	0x61, 0x69, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x65, 0x74, 0x61, 0x69,
+	0x6c, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18,
+	0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65,
+	0x64, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x18, 0x08,
+	0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x12,
+	0x4f, 0x0a, 0x09, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x65, 0x64, 0x69, 0x74, 0x18, 0x09, 0x20, 0x01,
+	0x28, 0x0b, 0x32, 0x32, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65,
+	0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e,
+	0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x65,
+	0x78, 0x74, 0x45, 0x64, 0x69, 0x74, 0x52, 0x08, 0x74, 0x65, 0x78, 0x74, 0x45, 0x64, 0x69, 0x74,
+	0x12, 0x1b, 0x0a, 0x09, 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x0a, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x6f, 0x72, 0x74, 0x54, 0x65, 0x78, 0x74, 0x12, 0x1f, 0x0a,
+	0x0b, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x0b, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x0a, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x54, 0x65, 0x78, 0x74, 0x12, 0x2c,
+	0x0a, 0x12, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x66, 0x6f,
+	0x72, 0x6d, 0x61, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x69, 0x6e, 0x73, 0x65,
+	0x72, 0x74, 0x54, 0x65, 0x78, 0x74, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x66, 0x0a, 0x15,
+	0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x5f,
+	0x65, 0x64, 0x69, 0x74, 0x73, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x69, 0x6f,
+	0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70,
+	0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x65, 0x78, 0x74, 0x45, 0x64, 0x69, 0x74, 0x52,
+	0x13, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x54, 0x65, 0x78, 0x74, 0x45,
+	0x64, 0x69, 0x74, 0x73, 0x12, 0x2b, 0x0a, 0x11, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x63,
+	0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x73, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x09, 0x52,
+	0x10, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x43, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72,
+	0x73, 0x12, 0x5d, 0x0a, 0x0d, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69,
+	0x6f, 0x6e, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65,
+	0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61,
+	0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67,
+	0x72, 0x70, 0x63, 0x2e, 0x4d, 0x61, 0x72, 0x6b, 0x75, 0x70, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e,
+	0x74, 0x52, 0x0d, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+	0x4a, 0x04, 0x08, 0x06, 0x10, 0x07, 0x22, 0x6d, 0x0a, 0x08, 0x54, 0x65, 0x78, 0x74, 0x45, 0x64,
+	0x69, 0x74, 0x12, 0x4d, 0x0a, 0x05, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
+	0x0b, 0x32, 0x37, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e,
+	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65,
+	0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x44, 0x6f, 0x63,
+	0x75, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x05, 0x72, 0x61, 0x6e, 0x67,
+	0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x04, 0x74, 0x65, 0x78, 0x74, 0x22, 0xb3, 0x02, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x53, 0x69, 0x67,
+	0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x48, 0x65, 0x6c, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+	0x74, 0x12, 0x58, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65,
+	0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e,
+	0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x69,
+	0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x48, 0x65, 0x6c, 0x70, 0x43, 0x6f, 0x6e, 0x74, 0x65,
+	0x78, 0x74, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x6e, 0x0a, 0x0d, 0x74,
+	0x65, 0x78, 0x74, 0x5f, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01,
+	0x28, 0x0b, 0x32, 0x49, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65,
+	0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e,
+	0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x56, 0x65,
+	0x72, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x64, 0x54, 0x65, 0x78, 0x74, 0x44, 0x6f, 0x63, 0x75, 0x6d,
+	0x65, 0x6e, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x0c, 0x74,
+	0x65, 0x78, 0x74, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x4e, 0x0a, 0x08, 0x70,
+	0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e,
 	0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f,
-	0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70,
-	0x63, 0x2e, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c,
-	0x65, 0x49, 0x64, 0x12, 0x6e, 0x0a, 0x0d, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x64, 0x6f, 0x63, 0x75,
-	0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x49, 0x2e, 0x69, 0x6f, 0x2e,
+	0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72,
+	0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f,
+	0x6e, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x9c, 0x02, 0x0a, 0x14,
+	0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x48, 0x65, 0x6c, 0x70, 0x43, 0x6f, 0x6e,
+	0x74, 0x65, 0x78, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x5f,
+	0x6b, 0x69, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x74, 0x72, 0x69, 0x67,
+	0x67, 0x65, 0x72, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x30, 0x0a, 0x11, 0x74, 0x72, 0x69, 0x67, 0x67,
+	0x65, 0x72, 0x5f, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01,
+	0x28, 0x09, 0x48, 0x00, 0x52, 0x10, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x43, 0x68, 0x61,
+	0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x88, 0x01, 0x01, 0x12, 0x21, 0x0a, 0x0c, 0x69, 0x73, 0x5f,
+	0x72, 0x65, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52,
+	0x0b, 0x69, 0x73, 0x52, 0x65, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x12, 0x76, 0x0a, 0x15,
+	0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65,
+	0x5f, 0x68, 0x65, 0x6c, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x69, 0x6f,
+	0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70,
+	0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74,
+	0x75, 0x72, 0x65, 0x48, 0x65, 0x6c, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52,
+	0x13, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65,
+	0x48, 0x65, 0x6c, 0x70, 0x42, 0x14, 0x0a, 0x12, 0x5f, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72,
+	0x5f, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x22, 0x84, 0x02, 0x0a, 0x18, 0x47,
+	0x65, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x48, 0x65, 0x6c, 0x70, 0x52,
+	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5e, 0x0a, 0x0a, 0x73, 0x69, 0x67, 0x6e, 0x61,
+	0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x69, 0x6f,
+	0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70,
+	0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65,
+	0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x73, 0x69, 0x67,
+	0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x2e, 0x0a, 0x10, 0x61, 0x63, 0x74, 0x69, 0x76,
+	0x65, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
+	0x05, 0x48, 0x00, 0x52, 0x0f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x53, 0x69, 0x67, 0x6e, 0x61,
+	0x74, 0x75, 0x72, 0x65, 0x88, 0x01, 0x01, 0x12, 0x2e, 0x0a, 0x10, 0x61, 0x63, 0x74, 0x69, 0x76,
+	0x65, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28,
+	0x05, 0x48, 0x01, 0x52, 0x0f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d,
+	0x65, 0x74, 0x65, 0x72, 0x88, 0x01, 0x01, 0x42, 0x13, 0x0a, 0x11, 0x5f, 0x61, 0x63, 0x74, 0x69,
+	0x76, 0x65, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x13, 0x0a, 0x11,
+	0x5f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65,
+	0x72, 0x22, 0xb0, 0x02, 0x0a, 0x14, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49,
+	0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x61,
+	0x62, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c,
+	0x12, 0x5d, 0x0a, 0x0d, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f,
+	0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65,
+	0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63,
+	0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72,
+	0x70, 0x63, 0x2e, 0x4d, 0x61, 0x72, 0x6b, 0x75, 0x70, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74,
+	0x52, 0x0d, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12,
+	0x5e, 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20,
+	0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76,
+	0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61,
+	0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x50,
+	0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74,
+	0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12,
+	0x2e, 0x0a, 0x10, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65,
+	0x74, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x48, 0x00, 0x52, 0x0f, 0x61, 0x63, 0x74,
+	0x69, 0x76, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x88, 0x01, 0x01, 0x42,
+	0x13, 0x0a, 0x11, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d,
+	0x65, 0x74, 0x65, 0x72, 0x22, 0x8b, 0x01, 0x0a, 0x14, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74,
+	0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a,
+	0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6c, 0x61,
+	0x62, 0x65, 0x6c, 0x12, 0x5d, 0x0a, 0x0d, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61,
+	0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x69, 0x6f, 0x2e,
 	0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
 	0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74,
-	0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x64, 0x54,
-	0x65, 0x78, 0x74, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74,
-	0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x0c, 0x74, 0x65, 0x78, 0x74, 0x44, 0x6f, 0x63, 0x75, 0x6d,
-	0x65, 0x6e, 0x74, 0x12, 0x87, 0x01, 0x0a, 0x0f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f,
-	0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x5e, 0x2e,
+	0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x61, 0x72, 0x6b, 0x75, 0x70, 0x43, 0x6f, 0x6e, 0x74,
+	0x65, 0x6e, 0x74, 0x52, 0x0d, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69,
+	0x6f, 0x6e, 0x22, 0xd1, 0x01, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x48, 0x6f, 0x76, 0x65, 0x72, 0x52,
+	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x6e, 0x0a, 0x0d, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x64,
+	0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x49, 0x2e,
 	0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f,
 	0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72,
-	0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44,
-	0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x54,
-	0x65, 0x78, 0x74, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65,
-	0x6e, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x0e, 0x63,
-	0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x1a, 0xa6, 0x01,
-	0x0a, 0x1e, 0x54, 0x65, 0x78, 0x74, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f,
-	0x6e, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74,
-	0x12, 0x4d, 0x0a, 0x05, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e,
+	0x65, 0x64, 0x54, 0x65, 0x78, 0x74, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64,
+	0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x0c, 0x74, 0x65, 0x78, 0x74, 0x44, 0x6f,
+	0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x4e, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69,
+	0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65,
+	0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61,
+	0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67,
+	0x72, 0x70, 0x63, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x70, 0x6f,
+	0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xb6, 0x01, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x48, 0x6f,
+	0x76, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x53, 0x0a, 0x08, 0x63,
+	0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e,
+	0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72,
+	0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x61, 0x72, 0x6b, 0x75, 0x70, 0x43,
+	0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x08, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73,
+	0x12, 0x4d, 0x0a, 0x05, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32,
 	0x37, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70,
 	0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73,
 	0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x44, 0x6f, 0x63, 0x75, 0x6d,
-	0x65, 0x6e, 0x74, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x05, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x12,
-	0x21, 0x0a, 0x0c, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18,
-	0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x4c, 0x65, 0x6e, 0x67,
-	0x74, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09,
-	0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x22, 0x9f, 0x01, 0x0a, 0x0d, 0x44, 0x6f, 0x63, 0x75, 0x6d,
-	0x65, 0x6e, 0x74, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x48, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72,
-	0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65,
-	0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63,
-	0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72,
-	0x70, 0x63, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x73, 0x74, 0x61,
-	0x72, 0x74, 0x12, 0x44, 0x0a, 0x03, 0x65, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32,
-	0x32, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70,
+	0x65, 0x6e, 0x74, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x05, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x22,
+	0x84, 0x02, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69,
+	0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x6e, 0x0a, 0x0d, 0x74, 0x65, 0x78, 0x74,
+	0x5f, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x49, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70,
 	0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73,
-	0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74,
-	0x69, 0x6f, 0x6e, 0x52, 0x03, 0x65, 0x6e, 0x64, 0x22, 0x4d, 0x0a, 0x1f, 0x56, 0x65, 0x72, 0x73,
-	0x69, 0x6f, 0x6e, 0x65, 0x64, 0x54, 0x65, 0x78, 0x74, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e,
-	0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x75,
-	0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, 0x18, 0x0a,
-	0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07,
-	0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3c, 0x0a, 0x08, 0x50, 0x6f, 0x73, 0x69, 0x74,
-	0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6c, 0x69, 0x6e, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
-	0x05, 0x52, 0x04, 0x6c, 0x69, 0x6e, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x68, 0x61, 0x72, 0x61,
-	0x63, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x63, 0x68, 0x61, 0x72,
-	0x61, 0x63, 0x74, 0x65, 0x72, 0x22, 0x9b, 0x03, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d,
-	0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75,
-	0x65, 0x73, 0x74, 0x12, 0x48, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x5f, 0x69,
-	0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65,
-	0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63,
-	0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x69, 0x63, 0x6b,
-	0x65, 0x74, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x55, 0x0a,
-	0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b,
-	0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72,
-	0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63,
-	0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65,
-	0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x07, 0x63, 0x6f, 0x6e,
-	0x74, 0x65, 0x78, 0x74, 0x12, 0x6e, 0x0a, 0x0d, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x64, 0x6f, 0x63,
-	0x75, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x49, 0x2e, 0x69, 0x6f,
+	0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69,
+	0x6f, 0x6e, 0x65, 0x64, 0x54, 0x65, 0x78, 0x74, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74,
+	0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x0c, 0x74, 0x65, 0x78, 0x74,
+	0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x23, 0x0a, 0x0a, 0x69, 0x64, 0x65, 0x6e,
+	0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0a,
+	0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x88, 0x01, 0x01, 0x12, 0x31, 0x0a,
+	0x12, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74,
+	0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x10, 0x70, 0x72, 0x65,
+	0x76, 0x69, 0x6f, 0x75, 0x73, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x49, 0x64, 0x88, 0x01, 0x01,
+	0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x42,
+	0x15, 0x0a, 0x13, 0x5f, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x5f, 0x72, 0x65, 0x73,
+	0x75, 0x6c, 0x74, 0x5f, 0x69, 0x64, 0x22, 0xab, 0x01, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x50, 0x75,
+	0x6c, 0x6c, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x52, 0x65, 0x73, 0x70,
+	0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x20, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x75,
+	0x6c, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x08, 0x72,
+	0x65, 0x73, 0x75, 0x6c, 0x74, 0x49, 0x64, 0x88, 0x01, 0x01, 0x12, 0x4a, 0x0a, 0x05, 0x69, 0x74,
+	0x65, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x69, 0x6f, 0x2e, 0x64,
+	0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62,
+	0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e,
+	0x67, 0x72, 0x70, 0x63, 0x2e, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x52,
+	0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c,
+	0x74, 0x5f, 0x69, 0x64, 0x22, 0xb3, 0x01, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x50, 0x75, 0x62, 0x6c,
+	0x69, 0x73, 0x68, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x52, 0x65, 0x73,
+	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, 0x1d, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69,
+	0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x48, 0x00, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73,
+	0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x56, 0x0a, 0x0b, 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f,
+	0x73, 0x74, 0x69, 0x63, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x69, 0x6f,
 	0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
 	0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70,
-	0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x64,
-	0x54, 0x65, 0x78, 0x74, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x65, 0x6e,
-	0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x0c, 0x74, 0x65, 0x78, 0x74, 0x44, 0x6f, 0x63, 0x75,
-	0x6d, 0x65, 0x6e, 0x74, 0x12, 0x4e, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e,
-	0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70,
-	0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b,
-	0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70,
-	0x63, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69,
-	0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f,
-	0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73,
-	0x74, 0x49, 0x64, 0x22, 0x63, 0x0a, 0x11, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f,
-	0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x72, 0x69, 0x67,
-	0x67, 0x65, 0x72, 0x5f, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b,
-	0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x2b, 0x0a, 0x11, 0x74,
-	0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x5f, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72,
-	0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x43,
-	0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x22, 0xa5, 0x01, 0x0a, 0x1a, 0x47, 0x65, 0x74,
-	0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52,
-	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4e, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73,
-	0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70,
-	0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b,
-	0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70,
-	0x63, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x74, 0x65, 0x6d,
-	0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65,
-	0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x72, 0x65, 0x71,
-	0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73,
-	0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73,
-	0x22, 0xb6, 0x04, 0x0a, 0x0e, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x49,
-	0x74, 0x65, 0x6d, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01,
-	0x28, 0x05, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x65, 0x6e,
-	0x67, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74,
-	0x68, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09,
-	0x52, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18,
-	0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x64,
-	0x65, 0x74, 0x61, 0x69, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x65, 0x74,
-	0x61, 0x69, 0x6c, 0x12, 0x24, 0x0a, 0x0d, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61,
-	0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x64, 0x6f, 0x63, 0x75,
-	0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x65, 0x70,
-	0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x64,
-	0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x65,
-	0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x70, 0x72,
-	0x65, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x12, 0x4f, 0x0a, 0x09, 0x74, 0x65, 0x78, 0x74, 0x5f,
-	0x65, 0x64, 0x69, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x69, 0x6f, 0x2e,
+	0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69,
+	0x63, 0x52, 0x0b, 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x42, 0x0a,
+	0x0a, 0x08, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xf2, 0x05, 0x0a, 0x0a, 0x44,
+	0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x12, 0x4d, 0x0a, 0x05, 0x72, 0x61, 0x6e,
+	0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65,
+	0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61,
+	0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67,
+	0x72, 0x70, 0x63, 0x2e, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x61, 0x6e, 0x67,
+	0x65, 0x52, 0x05, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x63, 0x0a, 0x08, 0x73, 0x65, 0x76, 0x65,
+	0x72, 0x69, 0x74, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x47, 0x2e, 0x69, 0x6f, 0x2e,
 	0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
 	0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74,
-	0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x65, 0x78, 0x74, 0x45, 0x64, 0x69, 0x74, 0x52, 0x08,
-	0x74, 0x65, 0x78, 0x74, 0x45, 0x64, 0x69, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x6f, 0x72, 0x74,
-	0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x6f, 0x72,
-	0x74, 0x54, 0x65, 0x78, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x5f,
-	0x74, 0x65, 0x78, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x66, 0x69, 0x6c, 0x74,
-	0x65, 0x72, 0x54, 0x65, 0x78, 0x74, 0x12, 0x2c, 0x0a, 0x12, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74,
-	0x5f, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x0c, 0x20, 0x01,
-	0x28, 0x05, 0x52, 0x10, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x54, 0x65, 0x78, 0x74, 0x46, 0x6f,
-	0x72, 0x6d, 0x61, 0x74, 0x12, 0x66, 0x0a, 0x15, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e,
-	0x61, 0x6c, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x65, 0x64, 0x69, 0x74, 0x73, 0x18, 0x0d, 0x20,
-	0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76,
-	0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61,
-	0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54,
-	0x65, 0x78, 0x74, 0x45, 0x64, 0x69, 0x74, 0x52, 0x13, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f,
-	0x6e, 0x61, 0x6c, 0x54, 0x65, 0x78, 0x74, 0x45, 0x64, 0x69, 0x74, 0x73, 0x12, 0x2b, 0x0a, 0x11,
-	0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72,
-	0x73, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x43,
-	0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x73, 0x22, 0x6d, 0x0a, 0x08, 0x54, 0x65, 0x78,
-	0x74, 0x45, 0x64, 0x69, 0x74, 0x12, 0x4d, 0x0a, 0x05, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x01,
-	0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61,
+	0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63,
+	0x2e, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x53, 0x65, 0x76, 0x65, 0x72,
+	0x69, 0x74, 0x79, 0x52, 0x08, 0x73, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x12, 0x17, 0x0a,
+	0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x04, 0x63,
+	0x6f, 0x64, 0x65, 0x88, 0x01, 0x01, 0x12, 0x74, 0x0a, 0x10, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x64,
+	0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b,
+	0x32, 0x44, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e,
+	0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x44, 0x69, 0x61, 0x67,
+	0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x2e, 0x43, 0x6f, 0x64, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72,
+	0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x01, 0x52, 0x0f, 0x63, 0x6f, 0x64, 0x65, 0x44, 0x65,
+	0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x1b, 0x0a, 0x06,
+	0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x02, 0x52, 0x06,
+	0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x88, 0x01, 0x01, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73,
+	0x73, 0x61, 0x67, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73,
+	0x61, 0x67, 0x65, 0x12, 0x56, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28,
+	0x0e, 0x32, 0x42, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e,
+	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65,
+	0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x44, 0x69, 0x61,
+	0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x2e, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74,
+	0x69, 0x63, 0x54, 0x61, 0x67, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, 0x17, 0x0a, 0x04, 0x64,
+	0x61, 0x74, 0x61, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x03, 0x52, 0x04, 0x64, 0x61, 0x74,
+	0x61, 0x88, 0x01, 0x01, 0x1a, 0x25, 0x0a, 0x0f, 0x43, 0x6f, 0x64, 0x65, 0x44, 0x65, 0x73, 0x63,
+	0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x72, 0x65, 0x66, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x72, 0x65, 0x66, 0x22, 0x5d, 0x0a, 0x12, 0x44,
+	0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x53, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74,
+	0x79, 0x12, 0x14, 0x0a, 0x10, 0x4e, 0x4f, 0x54, 0x5f, 0x53, 0x45, 0x54, 0x5f, 0x53, 0x45, 0x56,
+	0x45, 0x52, 0x49, 0x54, 0x59, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x52, 0x52, 0x4f, 0x52,
+	0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x57, 0x41, 0x52, 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x12,
+	0x0f, 0x0a, 0x0b, 0x49, 0x4e, 0x46, 0x4f, 0x52, 0x4d, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x03,
+	0x12, 0x08, 0x0a, 0x04, 0x48, 0x49, 0x4e, 0x54, 0x10, 0x04, 0x22, 0x41, 0x0a, 0x0d, 0x44, 0x69,
+	0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x54, 0x61, 0x67, 0x12, 0x0f, 0x0a, 0x0b, 0x4e,
+	0x4f, 0x54, 0x5f, 0x53, 0x45, 0x54, 0x5f, 0x54, 0x41, 0x47, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b,
+	0x55, 0x4e, 0x4e, 0x45, 0x43, 0x45, 0x53, 0x53, 0x41, 0x52, 0x59, 0x10, 0x01, 0x12, 0x0e, 0x0a,
+	0x0a, 0x44, 0x45, 0x50, 0x52, 0x45, 0x43, 0x41, 0x54, 0x45, 0x44, 0x10, 0x02, 0x42, 0x07, 0x0a,
+	0x05, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x42, 0x13, 0x0a, 0x11, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x5f,
+	0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x09, 0x0a, 0x07, 0x5f,
+	0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x22,
+	0xb1, 0x3a, 0x0a, 0x10, 0x46, 0x69, 0x67, 0x75, 0x72, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69,
+	0x70, 0x74, 0x6f, 0x72, 0x12, 0x19, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x01, 0x20,
+	0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x88, 0x01, 0x01, 0x12,
+	0x1d, 0x0a, 0x0a, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x5f, 0x66, 0x6f, 0x6e, 0x74, 0x18, 0x02, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x09, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x46, 0x6f, 0x6e, 0x74, 0x12, 0x1f,
+	0x0a, 0x0b, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x18, 0x03, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x0a, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x12,
+	0x2b, 0x0a, 0x0f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76,
+	0x61, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x42, 0x02, 0x30, 0x01, 0x52, 0x0e, 0x75, 0x70,
+	0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x12, 0x12, 0x0a, 0x04,
+	0x63, 0x6f, 0x6c, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x63, 0x6f, 0x6c, 0x73,
+	0x12, 0x12, 0x0a, 0x04, 0x72, 0x6f, 0x77, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04,
+	0x72, 0x6f, 0x77, 0x73, 0x12, 0x62, 0x0a, 0x06, 0x63, 0x68, 0x61, 0x72, 0x74, 0x73, 0x18, 0x0a,
+	0x20, 0x03, 0x28, 0x0b, 0x32, 0x4a, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61,
 	0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c,
 	0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e,
-	0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x05, 0x72,
-	0x61, 0x6e, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x02, 0x20, 0x01,
-	0x28, 0x09, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x22, 0xb1, 0x3a, 0x0a, 0x10, 0x46, 0x69, 0x67,
-	0x75, 0x72, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x12, 0x19, 0x0a,
-	0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x05,
-	0x74, 0x69, 0x74, 0x6c, 0x65, 0x88, 0x01, 0x01, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x69, 0x74, 0x6c,
-	0x65, 0x5f, 0x66, 0x6f, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x74, 0x69,
-	0x74, 0x6c, 0x65, 0x46, 0x6f, 0x6e, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x69, 0x74, 0x6c, 0x65,
-	0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x74, 0x69,
-	0x74, 0x6c, 0x65, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x12, 0x2b, 0x0a, 0x0f, 0x75, 0x70, 0x64, 0x61,
-	0x74, 0x65, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28,
-	0x03, 0x42, 0x02, 0x30, 0x01, 0x52, 0x0e, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x74,
-	0x65, 0x72, 0x76, 0x61, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x6c, 0x73, 0x18, 0x08, 0x20,
-	0x01, 0x28, 0x05, 0x52, 0x04, 0x63, 0x6f, 0x6c, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x6f, 0x77,
-	0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x72, 0x6f, 0x77, 0x73, 0x12, 0x62, 0x0a,
-	0x06, 0x63, 0x68, 0x61, 0x72, 0x74, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x4a, 0x2e,
-	0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f,
-	0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72,
-	0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x46, 0x69, 0x67, 0x75, 0x72, 0x65, 0x44,
-	0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x43, 0x68, 0x61, 0x72, 0x74, 0x44,
-	0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x52, 0x06, 0x63, 0x68, 0x61, 0x72, 0x74,
-	0x73, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0x0d, 0x20, 0x03, 0x28,
-	0x09, 0x52, 0x06, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x1a, 0xdc, 0x06, 0x0a, 0x0f, 0x43, 0x68,
-	0x61, 0x72, 0x74, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x12, 0x18, 0x0a,
-	0x07, 0x63, 0x6f, 0x6c, 0x73, 0x70, 0x61, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07,
-	0x63, 0x6f, 0x6c, 0x73, 0x70, 0x61, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x6f, 0x77, 0x73, 0x70,
-	0x61, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x72, 0x6f, 0x77, 0x73, 0x70, 0x61,
-	0x6e, 0x12, 0x63, 0x0a, 0x06, 0x73, 0x65, 0x72, 0x69, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28,
-	0x0b, 0x32, 0x4b, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e,
-	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65,
-	0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x46, 0x69, 0x67,
-	0x75, 0x72, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x53, 0x65,
-	0x72, 0x69, 0x65, 0x73, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x52, 0x06,
-	0x73, 0x65, 0x72, 0x69, 0x65, 0x73, 0x12, 0x73, 0x0a, 0x0c, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x5f,
-	0x73, 0x65, 0x72, 0x69, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x50, 0x2e, 0x69,
-	0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74,
-	0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69,
-	0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x46, 0x69, 0x67, 0x75, 0x72, 0x65, 0x44, 0x65,
-	0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x53, 0x65,
-	0x72, 0x69, 0x65, 0x73, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x52, 0x0b,
-	0x6d, 0x75, 0x6c, 0x74, 0x69, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x12, 0x5d, 0x0a, 0x04, 0x61,
-	0x78, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x49, 0x2e, 0x69, 0x6f, 0x2e, 0x64,
-	0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62,
-	0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e,
-	0x67, 0x72, 0x70, 0x63, 0x2e, 0x46, 0x69, 0x67, 0x75, 0x72, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72,
-	0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x41, 0x78, 0x69, 0x73, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69,
-	0x70, 0x74, 0x6f, 0x72, 0x52, 0x04, 0x61, 0x78, 0x65, 0x73, 0x12, 0x73, 0x0a, 0x0a, 0x63, 0x68,
-	0x61, 0x72, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x54,
-	0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72,
-	0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63,
-	0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x46, 0x69, 0x67, 0x75, 0x72, 0x65,
-	0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x43, 0x68, 0x61, 0x72, 0x74,
-	0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x43, 0x68, 0x61, 0x72, 0x74,
-	0x54, 0x79, 0x70, 0x65, 0x52, 0x09, 0x63, 0x68, 0x61, 0x72, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12,
-	0x19, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00,
-	0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x88, 0x01, 0x01, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x69,
-	0x74, 0x6c, 0x65, 0x5f, 0x66, 0x6f, 0x6e, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09,
-	0x74, 0x69, 0x74, 0x6c, 0x65, 0x46, 0x6f, 0x6e, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x69, 0x74,
-	0x6c, 0x65, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a,
-	0x74, 0x69, 0x74, 0x6c, 0x65, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x68,
-	0x6f, 0x77, 0x5f, 0x6c, 0x65, 0x67, 0x65, 0x6e, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52,
-	0x0a, 0x73, 0x68, 0x6f, 0x77, 0x4c, 0x65, 0x67, 0x65, 0x6e, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x6c,
-	0x65, 0x67, 0x65, 0x6e, 0x64, 0x5f, 0x66, 0x6f, 0x6e, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09,
-	0x52, 0x0a, 0x6c, 0x65, 0x67, 0x65, 0x6e, 0x64, 0x46, 0x6f, 0x6e, 0x74, 0x12, 0x21, 0x0a, 0x0c,
-	0x6c, 0x65, 0x67, 0x65, 0x6e, 0x64, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x18, 0x0c, 0x20, 0x01,
-	0x28, 0x09, 0x52, 0x0b, 0x6c, 0x65, 0x67, 0x65, 0x6e, 0x64, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x12,
-	0x12, 0x0a, 0x04, 0x69, 0x73, 0x33, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x69,
-	0x73, 0x33, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x18, 0x0e, 0x20,
-	0x01, 0x28, 0x05, 0x52, 0x06, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x72,
-	0x6f, 0x77, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x72, 0x6f, 0x77, 0x22, 0x5f, 0x0a,
-	0x09, 0x43, 0x68, 0x61, 0x72, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x06, 0x0a, 0x02, 0x58, 0x59,
-	0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x50, 0x49, 0x45, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x04, 0x4f,
-	0x48, 0x4c, 0x43, 0x10, 0x02, 0x1a, 0x02, 0x08, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x43, 0x41, 0x54,
-	0x45, 0x47, 0x4f, 0x52, 0x59, 0x10, 0x03, 0x12, 0x07, 0x0a, 0x03, 0x58, 0x59, 0x5a, 0x10, 0x04,
-	0x12, 0x0f, 0x0a, 0x0b, 0x43, 0x41, 0x54, 0x45, 0x47, 0x4f, 0x52, 0x59, 0x5f, 0x33, 0x44, 0x10,
-	0x05, 0x12, 0x0b, 0x0a, 0x07, 0x54, 0x52, 0x45, 0x45, 0x4d, 0x41, 0x50, 0x10, 0x06, 0x42, 0x08,
-	0x0a, 0x06, 0x5f, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x1a, 0xb3, 0x06, 0x0a, 0x10, 0x53, 0x65, 0x72,
-	0x69, 0x65, 0x73, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x12, 0x69, 0x0a,
-	0x0a, 0x70, 0x6c, 0x6f, 0x74, 0x5f, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
-	0x0e, 0x32, 0x4a, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e,
-	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65,
-	0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x46, 0x69, 0x67,
-	0x75, 0x72, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x53, 0x65,
-	0x72, 0x69, 0x65, 0x73, 0x50, 0x6c, 0x6f, 0x74, 0x53, 0x74, 0x79, 0x6c, 0x65, 0x52, 0x09, 0x70,
-	0x6c, 0x6f, 0x74, 0x53, 0x74, 0x79, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65,
-	0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x0d,
-	0x6c, 0x69, 0x6e, 0x65, 0x73, 0x5f, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x18, 0x03, 0x20,
-	0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x0c, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x56, 0x69, 0x73, 0x69,
-	0x62, 0x6c, 0x65, 0x88, 0x01, 0x01, 0x12, 0x2a, 0x0a, 0x0e, 0x73, 0x68, 0x61, 0x70, 0x65, 0x73,
-	0x5f, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x48, 0x01,
-	0x52, 0x0d, 0x73, 0x68, 0x61, 0x70, 0x65, 0x73, 0x56, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x88,
-	0x01, 0x01, 0x12, 0x29, 0x0a, 0x10, 0x67, 0x72, 0x61, 0x64, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x76,
-	0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x67, 0x72,
-	0x61, 0x64, 0x69, 0x65, 0x6e, 0x74, 0x56, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x1d, 0x0a,
-	0x0a, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28,
-	0x09, 0x52, 0x09, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x12, 0x31, 0x0a, 0x12,
-	0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x5f, 0x66, 0x6f, 0x72, 0x6d,
-	0x61, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x48, 0x02, 0x52, 0x10, 0x70, 0x6f, 0x69, 0x6e,
-	0x74, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x88, 0x01, 0x01, 0x12,
-	0x30, 0x0a, 0x12, 0x78, 0x5f, 0x74, 0x6f, 0x6f, 0x6c, 0x5f, 0x74, 0x69, 0x70, 0x5f, 0x70, 0x61,
-	0x74, 0x74, 0x65, 0x72, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x48, 0x03, 0x52, 0x0f, 0x78,
-	0x54, 0x6f, 0x6f, 0x6c, 0x54, 0x69, 0x70, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x88, 0x01,
-	0x01, 0x12, 0x30, 0x0a, 0x12, 0x79, 0x5f, 0x74, 0x6f, 0x6f, 0x6c, 0x5f, 0x74, 0x69, 0x70, 0x5f,
-	0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x48, 0x04, 0x52,
-	0x0f, 0x79, 0x54, 0x6f, 0x6f, 0x6c, 0x54, 0x69, 0x70, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e,
-	0x88, 0x01, 0x01, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x68, 0x61, 0x70, 0x65, 0x5f, 0x6c, 0x61, 0x62,
-	0x65, 0x6c, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x68, 0x61, 0x70, 0x65, 0x4c,
-	0x61, 0x62, 0x65, 0x6c, 0x12, 0x22, 0x0a, 0x0a, 0x73, 0x68, 0x61, 0x70, 0x65, 0x5f, 0x73, 0x69,
-	0x7a, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x01, 0x48, 0x05, 0x52, 0x09, 0x73, 0x68, 0x61, 0x70,
-	0x65, 0x53, 0x69, 0x7a, 0x65, 0x88, 0x01, 0x01, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x68, 0x61, 0x70,
-	0x65, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73,
-	0x68, 0x61, 0x70, 0x65, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, 0x61,
-	0x70, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x68, 0x61, 0x70, 0x65, 0x12,
-	0x6e, 0x0a, 0x0c, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18,
-	0x0f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x4b, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68,
+	0x46, 0x69, 0x67, 0x75, 0x72, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72,
+	0x2e, 0x43, 0x68, 0x61, 0x72, 0x74, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72,
+	0x52, 0x06, 0x63, 0x68, 0x61, 0x72, 0x74, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x72, 0x72, 0x6f,
+	0x72, 0x73, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73,
+	0x1a, 0xdc, 0x06, 0x0a, 0x0f, 0x43, 0x68, 0x61, 0x72, 0x74, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69,
+	0x70, 0x74, 0x6f, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6c, 0x73, 0x70, 0x61, 0x6e, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x63, 0x6f, 0x6c, 0x73, 0x70, 0x61, 0x6e, 0x12, 0x18,
+	0x0a, 0x07, 0x72, 0x6f, 0x77, 0x73, 0x70, 0x61, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52,
+	0x07, 0x72, 0x6f, 0x77, 0x73, 0x70, 0x61, 0x6e, 0x12, 0x63, 0x0a, 0x06, 0x73, 0x65, 0x72, 0x69,
+	0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x4b, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65,
+	0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61,
+	0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67,
+	0x72, 0x70, 0x63, 0x2e, 0x46, 0x69, 0x67, 0x75, 0x72, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69,
+	0x70, 0x74, 0x6f, 0x72, 0x2e, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x44, 0x65, 0x73, 0x63, 0x72,
+	0x69, 0x70, 0x74, 0x6f, 0x72, 0x52, 0x06, 0x73, 0x65, 0x72, 0x69, 0x65, 0x73, 0x12, 0x73, 0x0a,
+	0x0c, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x5f, 0x73, 0x65, 0x72, 0x69, 0x65, 0x73, 0x18, 0x04, 0x20,
+	0x03, 0x28, 0x0b, 0x32, 0x50, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76,
+	0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61,
+	0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x46,
+	0x69, 0x67, 0x75, 0x72, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e,
+	0x4d, 0x75, 0x6c, 0x74, 0x69, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x44, 0x65, 0x73, 0x63, 0x72,
+	0x69, 0x70, 0x74, 0x6f, 0x72, 0x52, 0x0b, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x53, 0x65, 0x72, 0x69,
+	0x65, 0x73, 0x12, 0x5d, 0x0a, 0x04, 0x61, 0x78, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b,
+	0x32, 0x49, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e,
+	0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x46, 0x69, 0x67, 0x75,
+	0x72, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x41, 0x78, 0x69,
+	0x73, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x52, 0x04, 0x61, 0x78, 0x65,
+	0x73, 0x12, 0x73, 0x0a, 0x0a, 0x63, 0x68, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18,
+	0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x54, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68,
 	0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70,
 	0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63,
 	0x2e, 0x46, 0x69, 0x67, 0x75, 0x72, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f,
-	0x72, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74,
-	0x6f, 0x72, 0x52, 0x0b, 0x64, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x42,
-	0x10, 0x0a, 0x0e, 0x5f, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x5f, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c,
-	0x65, 0x42, 0x11, 0x0a, 0x0f, 0x5f, 0x73, 0x68, 0x61, 0x70, 0x65, 0x73, 0x5f, 0x76, 0x69, 0x73,
-	0x69, 0x62, 0x6c, 0x65, 0x42, 0x15, 0x0a, 0x13, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x6c,
-	0x61, 0x62, 0x65, 0x6c, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x42, 0x15, 0x0a, 0x13, 0x5f,
-	0x78, 0x5f, 0x74, 0x6f, 0x6f, 0x6c, 0x5f, 0x74, 0x69, 0x70, 0x5f, 0x70, 0x61, 0x74, 0x74, 0x65,
-	0x72, 0x6e, 0x42, 0x15, 0x0a, 0x13, 0x5f, 0x79, 0x5f, 0x74, 0x6f, 0x6f, 0x6c, 0x5f, 0x74, 0x69,
-	0x70, 0x5f, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x73, 0x68,
-	0x61, 0x70, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x4a, 0x04, 0x08, 0x07, 0x10, 0x08, 0x1a, 0xa6,
-	0x0c, 0x0a, 0x15, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x44, 0x65,
-	0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x12, 0x69, 0x0a, 0x0a, 0x70, 0x6c, 0x6f, 0x74,
-	0x5f, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x4a, 0x2e, 0x69,
+	0x72, 0x2e, 0x43, 0x68, 0x61, 0x72, 0x74, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f,
+	0x72, 0x2e, 0x43, 0x68, 0x61, 0x72, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x09, 0x63, 0x68, 0x61,
+	0x72, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x19, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18,
+	0x07, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x88, 0x01,
+	0x01, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x5f, 0x66, 0x6f, 0x6e, 0x74, 0x18,
+	0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x46, 0x6f, 0x6e, 0x74,
+	0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x18,
+	0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x43, 0x6f, 0x6c, 0x6f,
+	0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x68, 0x6f, 0x77, 0x5f, 0x6c, 0x65, 0x67, 0x65, 0x6e, 0x64,
+	0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x73, 0x68, 0x6f, 0x77, 0x4c, 0x65, 0x67, 0x65,
+	0x6e, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x6c, 0x65, 0x67, 0x65, 0x6e, 0x64, 0x5f, 0x66, 0x6f, 0x6e,
+	0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6c, 0x65, 0x67, 0x65, 0x6e, 0x64, 0x46,
+	0x6f, 0x6e, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x6c, 0x65, 0x67, 0x65, 0x6e, 0x64, 0x5f, 0x63, 0x6f,
+	0x6c, 0x6f, 0x72, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6c, 0x65, 0x67, 0x65, 0x6e,
+	0x64, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x69, 0x73, 0x33, 0x64, 0x18, 0x0d,
+	0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x69, 0x73, 0x33, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6f,
+	0x6c, 0x75, 0x6d, 0x6e, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x63, 0x6f, 0x6c, 0x75,
+	0x6d, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x72, 0x6f, 0x77, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x05, 0x52,
+	0x03, 0x72, 0x6f, 0x77, 0x22, 0x5f, 0x0a, 0x09, 0x43, 0x68, 0x61, 0x72, 0x74, 0x54, 0x79, 0x70,
+	0x65, 0x12, 0x06, 0x0a, 0x02, 0x58, 0x59, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x50, 0x49, 0x45,
+	0x10, 0x01, 0x12, 0x0c, 0x0a, 0x04, 0x4f, 0x48, 0x4c, 0x43, 0x10, 0x02, 0x1a, 0x02, 0x08, 0x01,
+	0x12, 0x0c, 0x0a, 0x08, 0x43, 0x41, 0x54, 0x45, 0x47, 0x4f, 0x52, 0x59, 0x10, 0x03, 0x12, 0x07,
+	0x0a, 0x03, 0x58, 0x59, 0x5a, 0x10, 0x04, 0x12, 0x0f, 0x0a, 0x0b, 0x43, 0x41, 0x54, 0x45, 0x47,
+	0x4f, 0x52, 0x59, 0x5f, 0x33, 0x44, 0x10, 0x05, 0x12, 0x0b, 0x0a, 0x07, 0x54, 0x52, 0x45, 0x45,
+	0x4d, 0x41, 0x50, 0x10, 0x06, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x1a,
+	0xb3, 0x06, 0x0a, 0x10, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69,
+	0x70, 0x74, 0x6f, 0x72, 0x12, 0x69, 0x0a, 0x0a, 0x70, 0x6c, 0x6f, 0x74, 0x5f, 0x73, 0x74, 0x79,
+	0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x4a, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65,
+	0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61,
+	0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67,
+	0x72, 0x70, 0x63, 0x2e, 0x46, 0x69, 0x67, 0x75, 0x72, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69,
+	0x70, 0x74, 0x6f, 0x72, 0x2e, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x50, 0x6c, 0x6f, 0x74, 0x53,
+	0x74, 0x79, 0x6c, 0x65, 0x52, 0x09, 0x70, 0x6c, 0x6f, 0x74, 0x53, 0x74, 0x79, 0x6c, 0x65, 0x12,
+	0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e,
+	0x61, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x0d, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x5f, 0x76, 0x69, 0x73,
+	0x69, 0x62, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x0c, 0x6c, 0x69,
+	0x6e, 0x65, 0x73, 0x56, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x88, 0x01, 0x01, 0x12, 0x2a, 0x0a,
+	0x0e, 0x73, 0x68, 0x61, 0x70, 0x65, 0x73, 0x5f, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x18,
+	0x04, 0x20, 0x01, 0x28, 0x08, 0x48, 0x01, 0x52, 0x0d, 0x73, 0x68, 0x61, 0x70, 0x65, 0x73, 0x56,
+	0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x88, 0x01, 0x01, 0x12, 0x29, 0x0a, 0x10, 0x67, 0x72, 0x61,
+	0x64, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x18, 0x05, 0x20,
+	0x01, 0x28, 0x08, 0x52, 0x0f, 0x67, 0x72, 0x61, 0x64, 0x69, 0x65, 0x6e, 0x74, 0x56, 0x69, 0x73,
+	0x69, 0x62, 0x6c, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x63, 0x6f, 0x6c,
+	0x6f, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f,
+	0x6c, 0x6f, 0x72, 0x12, 0x31, 0x0a, 0x12, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x6c, 0x61, 0x62,
+	0x65, 0x6c, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x48,
+	0x02, 0x52, 0x10, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x46, 0x6f, 0x72,
+	0x6d, 0x61, 0x74, 0x88, 0x01, 0x01, 0x12, 0x30, 0x0a, 0x12, 0x78, 0x5f, 0x74, 0x6f, 0x6f, 0x6c,
+	0x5f, 0x74, 0x69, 0x70, 0x5f, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x18, 0x09, 0x20, 0x01,
+	0x28, 0x09, 0x48, 0x03, 0x52, 0x0f, 0x78, 0x54, 0x6f, 0x6f, 0x6c, 0x54, 0x69, 0x70, 0x50, 0x61,
+	0x74, 0x74, 0x65, 0x72, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x30, 0x0a, 0x12, 0x79, 0x5f, 0x74, 0x6f,
+	0x6f, 0x6c, 0x5f, 0x74, 0x69, 0x70, 0x5f, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x18, 0x0a,
+	0x20, 0x01, 0x28, 0x09, 0x48, 0x04, 0x52, 0x0f, 0x79, 0x54, 0x6f, 0x6f, 0x6c, 0x54, 0x69, 0x70,
+	0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x68,
+	0x61, 0x70, 0x65, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x0a, 0x73, 0x68, 0x61, 0x70, 0x65, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x22, 0x0a, 0x0a, 0x73,
+	0x68, 0x61, 0x70, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x01, 0x48,
+	0x05, 0x52, 0x09, 0x73, 0x68, 0x61, 0x70, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x88, 0x01, 0x01, 0x12,
+	0x1f, 0x0a, 0x0b, 0x73, 0x68, 0x61, 0x70, 0x65, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x18, 0x0d,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x68, 0x61, 0x70, 0x65, 0x43, 0x6f, 0x6c, 0x6f, 0x72,
+	0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x70, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x05, 0x73, 0x68, 0x61, 0x70, 0x65, 0x12, 0x6e, 0x0a, 0x0c, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x73,
+	0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x4b, 0x2e, 0x69,
 	0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74,
 	0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69,
 	0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x46, 0x69, 0x67, 0x75, 0x72, 0x65, 0x44, 0x65,
-	0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x50,
-	0x6c, 0x6f, 0x74, 0x53, 0x74, 0x79, 0x6c, 0x65, 0x52, 0x09, 0x70, 0x6c, 0x6f, 0x74, 0x53, 0x74,
-	0x79, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
-	0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x6e, 0x0a, 0x0a, 0x6c, 0x69, 0x6e, 0x65, 0x5f,
-	0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4f, 0x2e, 0x69, 0x6f,
-	0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
-	0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70,
-	0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x46, 0x69, 0x67, 0x75, 0x72, 0x65, 0x44, 0x65, 0x73,
-	0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x61,
-	0x70, 0x57, 0x69, 0x74, 0x68, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x09, 0x6c, 0x69,
-	0x6e, 0x65, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x12, 0x70, 0x0a, 0x0b, 0x70, 0x6f, 0x69, 0x6e, 0x74,
-	0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4f, 0x2e, 0x69,
+	0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44,
+	0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x52, 0x0b, 0x64, 0x61, 0x74, 0x61, 0x53,
+	0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x42, 0x10, 0x0a, 0x0e, 0x5f, 0x6c, 0x69, 0x6e, 0x65, 0x73,
+	0x5f, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x42, 0x11, 0x0a, 0x0f, 0x5f, 0x73, 0x68, 0x61,
+	0x70, 0x65, 0x73, 0x5f, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x42, 0x15, 0x0a, 0x13, 0x5f,
+	0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x5f, 0x66, 0x6f, 0x72, 0x6d,
+	0x61, 0x74, 0x42, 0x15, 0x0a, 0x13, 0x5f, 0x78, 0x5f, 0x74, 0x6f, 0x6f, 0x6c, 0x5f, 0x74, 0x69,
+	0x70, 0x5f, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x42, 0x15, 0x0a, 0x13, 0x5f, 0x79, 0x5f,
+	0x74, 0x6f, 0x6f, 0x6c, 0x5f, 0x74, 0x69, 0x70, 0x5f, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e,
+	0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x73, 0x68, 0x61, 0x70, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x4a,
+	0x04, 0x08, 0x07, 0x10, 0x08, 0x1a, 0xa6, 0x0c, 0x0a, 0x15, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x53,
+	0x65, 0x72, 0x69, 0x65, 0x73, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x12,
+	0x69, 0x0a, 0x0a, 0x70, 0x6c, 0x6f, 0x74, 0x5f, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x18, 0x01, 0x20,
+	0x01, 0x28, 0x0e, 0x32, 0x4a, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76,
+	0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61,
+	0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x46,
+	0x69, 0x67, 0x75, 0x72, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e,
+	0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x50, 0x6c, 0x6f, 0x74, 0x53, 0x74, 0x79, 0x6c, 0x65, 0x52,
+	0x09, 0x70, 0x6c, 0x6f, 0x74, 0x53, 0x74, 0x79, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61,
+	0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x6e,
+	0x0a, 0x0a, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01,
+	0x28, 0x0b, 0x32, 0x4f, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65,
+	0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e,
+	0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x46, 0x69,
+	0x67, 0x75, 0x72, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x53,
+	0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x61, 0x70, 0x57, 0x69, 0x74, 0x68, 0x44, 0x65, 0x66, 0x61,
+	0x75, 0x6c, 0x74, 0x52, 0x09, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x12, 0x70,
+	0x0a, 0x0b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x18, 0x04, 0x20,
+	0x01, 0x28, 0x0b, 0x32, 0x4f, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76,
+	0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61,
+	0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x46,
+	0x69, 0x67, 0x75, 0x72, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e,
+	0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x61, 0x70, 0x57, 0x69, 0x74, 0x68, 0x44, 0x65, 0x66,
+	0x61, 0x75, 0x6c, 0x74, 0x52, 0x0a, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x43, 0x6f, 0x6c, 0x6f, 0x72,
+	0x12, 0x72, 0x0a, 0x0d, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x5f, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c,
+	0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4d, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65,
+	0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63,
+	0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72,
+	0x70, 0x63, 0x2e, 0x46, 0x69, 0x67, 0x75, 0x72, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70,
+	0x74, 0x6f, 0x72, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x4d, 0x61, 0x70, 0x57, 0x69, 0x74, 0x68, 0x44,
+	0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x0c, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x56, 0x69, 0x73,
+	0x69, 0x62, 0x6c, 0x65, 0x12, 0x74, 0x0a, 0x0e, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x5f, 0x76,
+	0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4d, 0x2e, 0x69,
 	0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74,
 	0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69,
 	0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x46, 0x69, 0x67, 0x75, 0x72, 0x65, 0x44, 0x65,
-	0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d,
-	0x61, 0x70, 0x57, 0x69, 0x74, 0x68, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x0a, 0x70,
-	0x6f, 0x69, 0x6e, 0x74, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x12, 0x72, 0x0a, 0x0d, 0x6c, 0x69, 0x6e,
-	0x65, 0x73, 0x5f, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b,
-	0x32, 0x4d, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e,
+	0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x4d, 0x61, 0x70,
+	0x57, 0x69, 0x74, 0x68, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x0d, 0x70, 0x6f, 0x69,
+	0x6e, 0x74, 0x73, 0x56, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x78, 0x0a, 0x10, 0x67, 0x72,
+	0x61, 0x64, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x18, 0x07,
+	0x20, 0x01, 0x28, 0x0b, 0x32, 0x4d, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61,
+	0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c,
+	0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e,
+	0x46, 0x69, 0x67, 0x75, 0x72, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72,
+	0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x4d, 0x61, 0x70, 0x57, 0x69, 0x74, 0x68, 0x44, 0x65, 0x66, 0x61,
+	0x75, 0x6c, 0x74, 0x52, 0x0f, 0x67, 0x72, 0x61, 0x64, 0x69, 0x65, 0x6e, 0x74, 0x56, 0x69, 0x73,
+	0x69, 0x62, 0x6c, 0x65, 0x12, 0x7d, 0x0a, 0x12, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x6c, 0x61,
+	0x62, 0x65, 0x6c, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b,
+	0x32, 0x4f, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e,
 	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e,
 	0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x46, 0x69, 0x67, 0x75,
-	0x72, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x42, 0x6f, 0x6f,
-	0x6c, 0x4d, 0x61, 0x70, 0x57, 0x69, 0x74, 0x68, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52,
-	0x0c, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x56, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x74, 0x0a,
-	0x0e, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x5f, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x18,
-	0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4d, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68,
-	0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70,
-	0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63,
-	0x2e, 0x46, 0x69, 0x67, 0x75, 0x72, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f,
-	0x72, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x4d, 0x61, 0x70, 0x57, 0x69, 0x74, 0x68, 0x44, 0x65, 0x66,
-	0x61, 0x75, 0x6c, 0x74, 0x52, 0x0d, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x56, 0x69, 0x73, 0x69,
-	0x62, 0x6c, 0x65, 0x12, 0x78, 0x0a, 0x10, 0x67, 0x72, 0x61, 0x64, 0x69, 0x65, 0x6e, 0x74, 0x5f,
-	0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4d, 0x2e,
+	0x72, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x53, 0x74, 0x72,
+	0x69, 0x6e, 0x67, 0x4d, 0x61, 0x70, 0x57, 0x69, 0x74, 0x68, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c,
+	0x74, 0x52, 0x10, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x46, 0x6f, 0x72,
+	0x6d, 0x61, 0x74, 0x12, 0x7c, 0x0a, 0x12, 0x78, 0x5f, 0x74, 0x6f, 0x6f, 0x6c, 0x5f, 0x74, 0x69,
+	0x70, 0x5f, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x4f, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73,
+	0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x46, 0x69, 0x67, 0x75, 0x72,
+	0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x53, 0x74, 0x72, 0x69,
+	0x6e, 0x67, 0x4d, 0x61, 0x70, 0x57, 0x69, 0x74, 0x68, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74,
+	0x52, 0x0f, 0x78, 0x54, 0x6f, 0x6f, 0x6c, 0x54, 0x69, 0x70, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72,
+	0x6e, 0x12, 0x7c, 0x0a, 0x12, 0x79, 0x5f, 0x74, 0x6f, 0x6f, 0x6c, 0x5f, 0x74, 0x69, 0x70, 0x5f,
+	0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4f, 0x2e,
 	0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f,
 	0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72,
 	0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x46, 0x69, 0x67, 0x75, 0x72, 0x65, 0x44,
-	0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x4d, 0x61,
-	0x70, 0x57, 0x69, 0x74, 0x68, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x0f, 0x67, 0x72,
-	0x61, 0x64, 0x69, 0x65, 0x6e, 0x74, 0x56, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x7d, 0x0a,
-	0x12, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x5f, 0x66, 0x6f, 0x72,
-	0x6d, 0x61, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4f, 0x2e, 0x69, 0x6f, 0x2e, 0x64,
-	0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62,
-	0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e,
-	0x67, 0x72, 0x70, 0x63, 0x2e, 0x46, 0x69, 0x67, 0x75, 0x72, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72,
-	0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x61, 0x70, 0x57,
-	0x69, 0x74, 0x68, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x10, 0x70, 0x6f, 0x69, 0x6e,
-	0x74, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x7c, 0x0a, 0x12,
-	0x78, 0x5f, 0x74, 0x6f, 0x6f, 0x6c, 0x5f, 0x74, 0x69, 0x70, 0x5f, 0x70, 0x61, 0x74, 0x74, 0x65,
-	0x72, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4f, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65,
-	0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61,
-	0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67,
-	0x72, 0x70, 0x63, 0x2e, 0x46, 0x69, 0x67, 0x75, 0x72, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69,
-	0x70, 0x74, 0x6f, 0x72, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x61, 0x70, 0x57, 0x69,
-	0x74, 0x68, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x0f, 0x78, 0x54, 0x6f, 0x6f, 0x6c,
-	0x54, 0x69, 0x70, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x12, 0x7c, 0x0a, 0x12, 0x79, 0x5f,
-	0x74, 0x6f, 0x6f, 0x6c, 0x5f, 0x74, 0x69, 0x70, 0x5f, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e,
-	0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4f, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70,
+	0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67,
+	0x4d, 0x61, 0x70, 0x57, 0x69, 0x74, 0x68, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x0f,
+	0x79, 0x54, 0x6f, 0x6f, 0x6c, 0x54, 0x69, 0x70, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x12,
+	0x70, 0x0a, 0x0b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x0b,
+	0x20, 0x01, 0x28, 0x0b, 0x32, 0x4f, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61,
+	0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c,
+	0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e,
+	0x46, 0x69, 0x67, 0x75, 0x72, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72,
+	0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x61, 0x70, 0x57, 0x69, 0x74, 0x68, 0x44, 0x65,
+	0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x0a, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x4c, 0x61, 0x62, 0x65,
+	0x6c, 0x12, 0x6e, 0x0a, 0x0a, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18,
+	0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4f, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68,
+	0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70,
+	0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63,
+	0x2e, 0x46, 0x69, 0x67, 0x75, 0x72, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f,
+	0x72, 0x2e, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x4d, 0x61, 0x70, 0x57, 0x69, 0x74, 0x68, 0x44,
+	0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x09, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x53, 0x69, 0x7a,
+	0x65, 0x12, 0x70, 0x0a, 0x0b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x73, 0x68, 0x61, 0x70, 0x65,
+	0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4f, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70,
 	0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b,
 	0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70,
 	0x63, 0x2e, 0x46, 0x69, 0x67, 0x75, 0x72, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74,
 	0x6f, 0x72, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x61, 0x70, 0x57, 0x69, 0x74, 0x68,
-	0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x0f, 0x79, 0x54, 0x6f, 0x6f, 0x6c, 0x54, 0x69,
-	0x70, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x12, 0x70, 0x0a, 0x0b, 0x70, 0x6f, 0x69, 0x6e,
-	0x74, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4f, 0x2e,
+	0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x0a, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x53, 0x68,
+	0x61, 0x70, 0x65, 0x12, 0x79, 0x0a, 0x0c, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x73, 0x6f, 0x75, 0x72,
+	0x63, 0x65, 0x73, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x56, 0x2e, 0x69, 0x6f, 0x2e, 0x64,
+	0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62,
+	0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e,
+	0x67, 0x72, 0x70, 0x63, 0x2e, 0x46, 0x69, 0x67, 0x75, 0x72, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72,
+	0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x53, 0x65, 0x72, 0x69, 0x65,
+	0x73, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f,
+	0x72, 0x52, 0x0b, 0x64, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x1a, 0x81,
+	0x01, 0x0a, 0x14, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x61, 0x70, 0x57, 0x69, 0x74, 0x68,
+	0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x2a, 0x0a, 0x0e, 0x64, 0x65, 0x66, 0x61, 0x75,
+	0x6c, 0x74, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48,
+	0x00, 0x52, 0x0d, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67,
+	0x88, 0x01, 0x01, 0x12, 0x12, 0x0a, 0x04, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28,
+	0x09, 0x52, 0x04, 0x6b, 0x65, 0x79, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65,
+	0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x42,
+	0x11, 0x0a, 0x0f, 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x73, 0x74, 0x72, 0x69,
+	0x6e, 0x67, 0x1a, 0x81, 0x01, 0x0a, 0x14, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x4d, 0x61, 0x70,
+	0x57, 0x69, 0x74, 0x68, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x2a, 0x0a, 0x0e, 0x64,
+	0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20,
+	0x01, 0x28, 0x01, 0x48, 0x00, 0x52, 0x0d, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x44, 0x6f,
+	0x75, 0x62, 0x6c, 0x65, 0x88, 0x01, 0x01, 0x12, 0x12, 0x0a, 0x04, 0x6b, 0x65, 0x79, 0x73, 0x18,
+	0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x6b, 0x65, 0x79, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x76,
+	0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x01, 0x52, 0x06, 0x76, 0x61, 0x6c,
+	0x75, 0x65, 0x73, 0x42, 0x11, 0x0a, 0x0f, 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f,
+	0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x1a, 0x79, 0x0a, 0x12, 0x42, 0x6f, 0x6f, 0x6c, 0x4d, 0x61,
+	0x70, 0x57, 0x69, 0x74, 0x68, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x26, 0x0a, 0x0c,
+	0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x08, 0x48, 0x00, 0x52, 0x0b, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x42, 0x6f, 0x6f,
+	0x6c, 0x88, 0x01, 0x01, 0x12, 0x12, 0x0a, 0x04, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x02, 0x20, 0x03,
+	0x28, 0x09, 0x52, 0x04, 0x6b, 0x65, 0x79, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75,
+	0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x08, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73,
+	0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x62, 0x6f, 0x6f,
+	0x6c, 0x1a, 0xb3, 0x0a, 0x0a, 0x0e, 0x41, 0x78, 0x69, 0x73, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69,
+	0x70, 0x74, 0x6f, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x02, 0x69, 0x64, 0x12, 0x79, 0x0a, 0x0b, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x5f, 0x74,
+	0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x58, 0x2e, 0x69, 0x6f, 0x2e, 0x64,
+	0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62,
+	0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e,
+	0x67, 0x72, 0x70, 0x63, 0x2e, 0x46, 0x69, 0x67, 0x75, 0x72, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72,
+	0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x41, 0x78, 0x69, 0x73, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69,
+	0x70, 0x74, 0x6f, 0x72, 0x2e, 0x41, 0x78, 0x69, 0x73, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x54,
+	0x79, 0x70, 0x65, 0x52, 0x0a, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12,
+	0x66, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x52, 0x2e,
 	0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f,
 	0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72,
 	0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x46, 0x69, 0x67, 0x75, 0x72, 0x65, 0x44,
-	0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67,
-	0x4d, 0x61, 0x70, 0x57, 0x69, 0x74, 0x68, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x0a,
-	0x70, 0x6f, 0x69, 0x6e, 0x74, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x6e, 0x0a, 0x0a, 0x70, 0x6f,
-	0x69, 0x6e, 0x74, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4f,
-	0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72,
-	0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63,
-	0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x46, 0x69, 0x67, 0x75, 0x72, 0x65,
-	0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x44, 0x6f, 0x75, 0x62, 0x6c,
-	0x65, 0x4d, 0x61, 0x70, 0x57, 0x69, 0x74, 0x68, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52,
-	0x09, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x70, 0x0a, 0x0b, 0x70, 0x6f,
-	0x69, 0x6e, 0x74, 0x5f, 0x73, 0x68, 0x61, 0x70, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32,
-	0x4f, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70,
+	0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x41, 0x78, 0x69, 0x73, 0x44, 0x65,
+	0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x41, 0x78, 0x69, 0x73, 0x54, 0x79, 0x70,
+	0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x72, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74,
+	0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x56, 0x2e, 0x69, 0x6f, 0x2e, 0x64,
+	0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62,
+	0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e,
+	0x67, 0x72, 0x70, 0x63, 0x2e, 0x46, 0x69, 0x67, 0x75, 0x72, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72,
+	0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x41, 0x78, 0x69, 0x73, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69,
+	0x70, 0x74, 0x6f, 0x72, 0x2e, 0x41, 0x78, 0x69, 0x73, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f,
+	0x6e, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x6c,
+	0x6f, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x6c, 0x6f, 0x67, 0x12, 0x14, 0x0a,
+	0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6c, 0x61,
+	0x62, 0x65, 0x6c, 0x12, 0x1d, 0x0a, 0x0a, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x5f, 0x66, 0x6f, 0x6e,
+	0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x46, 0x6f,
+	0x6e, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x69, 0x63, 0x6b, 0x73, 0x5f, 0x66, 0x6f, 0x6e, 0x74,
+	0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x74, 0x69, 0x63, 0x6b, 0x73, 0x46, 0x6f, 0x6e,
+	0x74, 0x12, 0x2a, 0x0a, 0x0e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x5f, 0x70, 0x61, 0x74, 0x74,
+	0x65, 0x72, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0d, 0x66, 0x6f, 0x72,
+	0x6d, 0x61, 0x74, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x14, 0x0a,
+	0x05, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x63, 0x6f,
+	0x6c, 0x6f, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x69, 0x6e, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65,
+	0x18, 0x0b, 0x20, 0x01, 0x28, 0x01, 0x52, 0x08, 0x6d, 0x69, 0x6e, 0x52, 0x61, 0x6e, 0x67, 0x65,
+	0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x78, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x0c, 0x20,
+	0x01, 0x28, 0x01, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x2e, 0x0a,
+	0x13, 0x6d, 0x69, 0x6e, 0x6f, 0x72, 0x5f, 0x74, 0x69, 0x63, 0x6b, 0x73, 0x5f, 0x76, 0x69, 0x73,
+	0x69, 0x62, 0x6c, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x6d, 0x69, 0x6e, 0x6f,
+	0x72, 0x54, 0x69, 0x63, 0x6b, 0x73, 0x56, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x2e, 0x0a,
+	0x13, 0x6d, 0x61, 0x6a, 0x6f, 0x72, 0x5f, 0x74, 0x69, 0x63, 0x6b, 0x73, 0x5f, 0x76, 0x69, 0x73,
+	0x69, 0x62, 0x6c, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x6d, 0x61, 0x6a, 0x6f,
+	0x72, 0x54, 0x69, 0x63, 0x6b, 0x73, 0x56, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x28, 0x0a,
+	0x10, 0x6d, 0x69, 0x6e, 0x6f, 0x72, 0x5f, 0x74, 0x69, 0x63, 0x6b, 0x5f, 0x63, 0x6f, 0x75, 0x6e,
+	0x74, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x6d, 0x69, 0x6e, 0x6f, 0x72, 0x54, 0x69,
+	0x63, 0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x3a, 0x0a, 0x17, 0x67, 0x61, 0x70, 0x5f, 0x62,
+	0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x5f, 0x6d, 0x61, 0x6a, 0x6f, 0x72, 0x5f, 0x74, 0x69, 0x63,
+	0x6b, 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, 0x01, 0x48, 0x01, 0x52, 0x14, 0x67, 0x61, 0x70, 0x42,
+	0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x4d, 0x61, 0x6a, 0x6f, 0x72, 0x54, 0x69, 0x63, 0x6b, 0x73,
+	0x88, 0x01, 0x01, 0x12, 0x30, 0x0a, 0x14, 0x6d, 0x61, 0x6a, 0x6f, 0x72, 0x5f, 0x74, 0x69, 0x63,
+	0x6b, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x11, 0x20, 0x03, 0x28,
+	0x01, 0x52, 0x12, 0x6d, 0x61, 0x6a, 0x6f, 0x72, 0x54, 0x69, 0x63, 0x6b, 0x4c, 0x6f, 0x63, 0x61,
+	0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x28, 0x0a, 0x10, 0x74, 0x69, 0x63, 0x6b, 0x5f, 0x6c, 0x61,
+	0x62, 0x65, 0x6c, 0x5f, 0x61, 0x6e, 0x67, 0x6c, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x01, 0x52,
+	0x0e, 0x74, 0x69, 0x63, 0x6b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x41, 0x6e, 0x67, 0x6c, 0x65, 0x12,
+	0x16, 0x0a, 0x06, 0x69, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x18, 0x13, 0x20, 0x01, 0x28, 0x08, 0x52,
+	0x06, 0x69, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x12, 0x20, 0x0a, 0x0c, 0x69, 0x73, 0x5f, 0x74, 0x69,
+	0x6d, 0x65, 0x5f, 0x61, 0x78, 0x69, 0x73, 0x18, 0x14, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69,
+	0x73, 0x54, 0x69, 0x6d, 0x65, 0x41, 0x78, 0x69, 0x73, 0x12, 0x97, 0x01, 0x0a, 0x1c, 0x62, 0x75,
+	0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5f, 0x63, 0x61, 0x6c, 0x65, 0x6e, 0x64, 0x61, 0x72, 0x5f,
+	0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b,
+	0x32, 0x55, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e,
+	0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x46, 0x69, 0x67, 0x75,
+	0x72, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x42, 0x75, 0x73,
+	0x69, 0x6e, 0x65, 0x73, 0x73, 0x43, 0x61, 0x6c, 0x65, 0x6e, 0x64, 0x61, 0x72, 0x44, 0x65, 0x73,
+	0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x52, 0x1a, 0x62, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73,
+	0x73, 0x43, 0x61, 0x6c, 0x65, 0x6e, 0x64, 0x61, 0x72, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70,
+	0x74, 0x6f, 0x72, 0x22, 0x2a, 0x0a, 0x0e, 0x41, 0x78, 0x69, 0x73, 0x46, 0x6f, 0x72, 0x6d, 0x61,
+	0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0c, 0x0a, 0x08, 0x43, 0x41, 0x54, 0x45, 0x47, 0x4f, 0x52,
+	0x59, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x4e, 0x55, 0x4d, 0x42, 0x45, 0x52, 0x10, 0x01, 0x22,
+	0x43, 0x0a, 0x08, 0x41, 0x78, 0x69, 0x73, 0x54, 0x79, 0x70, 0x65, 0x12, 0x05, 0x0a, 0x01, 0x58,
+	0x10, 0x00, 0x12, 0x05, 0x0a, 0x01, 0x59, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x53, 0x48, 0x41,
+	0x50, 0x45, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x49, 0x5a, 0x45, 0x10, 0x03, 0x12, 0x09,
+	0x0a, 0x05, 0x4c, 0x41, 0x42, 0x45, 0x4c, 0x10, 0x04, 0x12, 0x09, 0x0a, 0x05, 0x43, 0x4f, 0x4c,
+	0x4f, 0x52, 0x10, 0x05, 0x22, 0x42, 0x0a, 0x0c, 0x41, 0x78, 0x69, 0x73, 0x50, 0x6f, 0x73, 0x69,
+	0x74, 0x69, 0x6f, 0x6e, 0x12, 0x07, 0x0a, 0x03, 0x54, 0x4f, 0x50, 0x10, 0x00, 0x12, 0x0a, 0x0a,
+	0x06, 0x42, 0x4f, 0x54, 0x54, 0x4f, 0x4d, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x4c, 0x45, 0x46,
+	0x54, 0x10, 0x02, 0x12, 0x09, 0x0a, 0x05, 0x52, 0x49, 0x47, 0x48, 0x54, 0x10, 0x03, 0x12, 0x08,
+	0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x04, 0x42, 0x11, 0x0a, 0x0f, 0x5f, 0x66, 0x6f, 0x72,
+	0x6d, 0x61, 0x74, 0x5f, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x42, 0x1a, 0x0a, 0x18, 0x5f,
+	0x67, 0x61, 0x70, 0x5f, 0x62, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x5f, 0x6d, 0x61, 0x6a, 0x6f,
+	0x72, 0x5f, 0x74, 0x69, 0x63, 0x6b, 0x73, 0x1a, 0xe2, 0x07, 0x0a, 0x1a, 0x42, 0x75, 0x73, 0x69,
+	0x6e, 0x65, 0x73, 0x73, 0x43, 0x61, 0x6c, 0x65, 0x6e, 0x64, 0x61, 0x72, 0x44, 0x65, 0x73, 0x63,
+	0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x69,
+	0x6d, 0x65, 0x5f, 0x7a, 0x6f, 0x6e, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74,
+	0x69, 0x6d, 0x65, 0x5a, 0x6f, 0x6e, 0x65, 0x12, 0x84, 0x01, 0x0a, 0x0d, 0x62, 0x75, 0x73, 0x69,
+	0x6e, 0x65, 0x73, 0x73, 0x5f, 0x64, 0x61, 0x79, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0e, 0x32,
+	0x5f, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70,
 	0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73,
 	0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x46, 0x69, 0x67, 0x75, 0x72,
-	0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x53, 0x74, 0x72, 0x69,
-	0x6e, 0x67, 0x4d, 0x61, 0x70, 0x57, 0x69, 0x74, 0x68, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74,
-	0x52, 0x0a, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x53, 0x68, 0x61, 0x70, 0x65, 0x12, 0x79, 0x0a, 0x0c,
-	0x64, 0x61, 0x74, 0x61, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x0e, 0x20, 0x03,
-	0x28, 0x0b, 0x32, 0x56, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65,
-	0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e,
-	0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x46, 0x69,
-	0x67, 0x75, 0x72, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x4d,
-	0x75, 0x6c, 0x74, 0x69, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65,
-	0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x52, 0x0b, 0x64, 0x61, 0x74, 0x61,
-	0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x1a, 0x81, 0x01, 0x0a, 0x14, 0x53, 0x74, 0x72, 0x69,
-	0x6e, 0x67, 0x4d, 0x61, 0x70, 0x57, 0x69, 0x74, 0x68, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74,
-	0x12, 0x2a, 0x0a, 0x0e, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x73, 0x74, 0x72, 0x69,
-	0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0d, 0x64, 0x65, 0x66, 0x61,
-	0x75, 0x6c, 0x74, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x88, 0x01, 0x01, 0x12, 0x12, 0x0a, 0x04,
-	0x6b, 0x65, 0x79, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x6b, 0x65, 0x79, 0x73,
-	0x12, 0x16, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09,
-	0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x42, 0x11, 0x0a, 0x0f, 0x5f, 0x64, 0x65, 0x66,
-	0x61, 0x75, 0x6c, 0x74, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x1a, 0x81, 0x01, 0x0a, 0x14,
-	0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x4d, 0x61, 0x70, 0x57, 0x69, 0x74, 0x68, 0x44, 0x65, 0x66,
-	0x61, 0x75, 0x6c, 0x74, 0x12, 0x2a, 0x0a, 0x0e, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f,
-	0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x01, 0x48, 0x00, 0x52, 0x0d,
-	0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x88, 0x01, 0x01,
-	0x12, 0x12, 0x0a, 0x04, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04,
-	0x6b, 0x65, 0x79, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x03,
-	0x20, 0x03, 0x28, 0x01, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x42, 0x11, 0x0a, 0x0f,
-	0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x1a,
-	0x79, 0x0a, 0x12, 0x42, 0x6f, 0x6f, 0x6c, 0x4d, 0x61, 0x70, 0x57, 0x69, 0x74, 0x68, 0x44, 0x65,
-	0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x26, 0x0a, 0x0c, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74,
-	0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x0b, 0x64,
-	0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x42, 0x6f, 0x6f, 0x6c, 0x88, 0x01, 0x01, 0x12, 0x12, 0x0a,
-	0x04, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x6b, 0x65, 0x79,
-	0x73, 0x12, 0x16, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28,
-	0x08, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x64, 0x65,
-	0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x1a, 0xb3, 0x0a, 0x0a, 0x0e, 0x41,
-	0x78, 0x69, 0x73, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x12, 0x0e, 0x0a,
-	0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x79, 0x0a,
-	0x0b, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01,
-	0x28, 0x0e, 0x32, 0x58, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65,
-	0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e,
-	0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x46, 0x69,
-	0x67, 0x75, 0x72, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x41,
-	0x78, 0x69, 0x73, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x41, 0x78,
-	0x69, 0x73, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x66, 0x6f,
-	0x72, 0x6d, 0x61, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x66, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65,
-	0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x52, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70,
-	0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b,
-	0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70,
-	0x63, 0x2e, 0x46, 0x69, 0x67, 0x75, 0x72, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74,
-	0x6f, 0x72, 0x2e, 0x41, 0x78, 0x69, 0x73, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f,
-	0x72, 0x2e, 0x41, 0x78, 0x69, 0x73, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65,
-	0x12, 0x72, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01,
-	0x28, 0x0e, 0x32, 0x56, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65,
-	0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e,
-	0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x46, 0x69,
-	0x67, 0x75, 0x72, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x41,
-	0x78, 0x69, 0x73, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x41, 0x78,
-	0x69, 0x73, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69,
-	0x74, 0x69, 0x6f, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x6c, 0x6f, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28,
-	0x08, 0x52, 0x03, 0x6c, 0x6f, 0x67, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18,
-	0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x1d, 0x0a, 0x0a,
-	0x6c, 0x61, 0x62, 0x65, 0x6c, 0x5f, 0x66, 0x6f, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09,
-	0x52, 0x09, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x46, 0x6f, 0x6e, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x74,
-	0x69, 0x63, 0x6b, 0x73, 0x5f, 0x66, 0x6f, 0x6e, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52,
-	0x09, 0x74, 0x69, 0x63, 0x6b, 0x73, 0x46, 0x6f, 0x6e, 0x74, 0x12, 0x2a, 0x0a, 0x0e, 0x66, 0x6f,
-	0x72, 0x6d, 0x61, 0x74, 0x5f, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x18, 0x09, 0x20, 0x01,
-	0x28, 0x09, 0x48, 0x00, 0x52, 0x0d, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x50, 0x61, 0x74, 0x74,
-	0x65, 0x72, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x18,
-	0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x12, 0x1b, 0x0a, 0x09,
-	0x6d, 0x69, 0x6e, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x01, 0x52,
-	0x08, 0x6d, 0x69, 0x6e, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x78,
-	0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x01, 0x52, 0x08, 0x6d, 0x61,
-	0x78, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x2e, 0x0a, 0x13, 0x6d, 0x69, 0x6e, 0x6f, 0x72, 0x5f,
-	0x74, 0x69, 0x63, 0x6b, 0x73, 0x5f, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x18, 0x0d, 0x20,
-	0x01, 0x28, 0x08, 0x52, 0x11, 0x6d, 0x69, 0x6e, 0x6f, 0x72, 0x54, 0x69, 0x63, 0x6b, 0x73, 0x56,
-	0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x2e, 0x0a, 0x13, 0x6d, 0x61, 0x6a, 0x6f, 0x72, 0x5f,
-	0x74, 0x69, 0x63, 0x6b, 0x73, 0x5f, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x18, 0x0e, 0x20,
-	0x01, 0x28, 0x08, 0x52, 0x11, 0x6d, 0x61, 0x6a, 0x6f, 0x72, 0x54, 0x69, 0x63, 0x6b, 0x73, 0x56,
-	0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x6d, 0x69, 0x6e, 0x6f, 0x72, 0x5f,
-	0x74, 0x69, 0x63, 0x6b, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x05,
-	0x52, 0x0e, 0x6d, 0x69, 0x6e, 0x6f, 0x72, 0x54, 0x69, 0x63, 0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x74,
-	0x12, 0x3a, 0x0a, 0x17, 0x67, 0x61, 0x70, 0x5f, 0x62, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x5f,
-	0x6d, 0x61, 0x6a, 0x6f, 0x72, 0x5f, 0x74, 0x69, 0x63, 0x6b, 0x73, 0x18, 0x10, 0x20, 0x01, 0x28,
-	0x01, 0x48, 0x01, 0x52, 0x14, 0x67, 0x61, 0x70, 0x42, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x4d,
-	0x61, 0x6a, 0x6f, 0x72, 0x54, 0x69, 0x63, 0x6b, 0x73, 0x88, 0x01, 0x01, 0x12, 0x30, 0x0a, 0x14,
-	0x6d, 0x61, 0x6a, 0x6f, 0x72, 0x5f, 0x74, 0x69, 0x63, 0x6b, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74,
-	0x69, 0x6f, 0x6e, 0x73, 0x18, 0x11, 0x20, 0x03, 0x28, 0x01, 0x52, 0x12, 0x6d, 0x61, 0x6a, 0x6f,
-	0x72, 0x54, 0x69, 0x63, 0x6b, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x28,
-	0x0a, 0x10, 0x74, 0x69, 0x63, 0x6b, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x5f, 0x61, 0x6e, 0x67,
-	0x6c, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0e, 0x74, 0x69, 0x63, 0x6b, 0x4c, 0x61,
-	0x62, 0x65, 0x6c, 0x41, 0x6e, 0x67, 0x6c, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x6e, 0x76, 0x65,
-	0x72, 0x74, 0x18, 0x13, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x69, 0x6e, 0x76, 0x65, 0x72, 0x74,
-	0x12, 0x20, 0x0a, 0x0c, 0x69, 0x73, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x61, 0x78, 0x69, 0x73,
-	0x18, 0x14, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x73, 0x54, 0x69, 0x6d, 0x65, 0x41, 0x78,
-	0x69, 0x73, 0x12, 0x97, 0x01, 0x0a, 0x1c, 0x62, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5f,
-	0x63, 0x61, 0x6c, 0x65, 0x6e, 0x64, 0x61, 0x72, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70,
-	0x74, 0x6f, 0x72, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x55, 0x2e, 0x69, 0x6f, 0x2e, 0x64,
+	0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x42, 0x75, 0x73, 0x69,
+	0x6e, 0x65, 0x73, 0x73, 0x43, 0x61, 0x6c, 0x65, 0x6e, 0x64, 0x61, 0x72, 0x44, 0x65, 0x73, 0x63,
+	0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x44, 0x61, 0x79, 0x4f, 0x66, 0x57, 0x65, 0x65, 0x6b,
+	0x52, 0x0c, 0x62, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x44, 0x61, 0x79, 0x73, 0x12, 0x8f,
+	0x01, 0x0a, 0x10, 0x62, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x69,
+	0x6f, 0x64, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x64, 0x2e, 0x69, 0x6f, 0x2e, 0x64,
 	0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62,
 	0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e,
 	0x67, 0x72, 0x70, 0x63, 0x2e, 0x46, 0x69, 0x67, 0x75, 0x72, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72,
 	0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x43, 0x61,
 	0x6c, 0x65, 0x6e, 0x64, 0x61, 0x72, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72,
-	0x52, 0x1a, 0x62, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x43, 0x61, 0x6c, 0x65, 0x6e, 0x64,
-	0x61, 0x72, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x22, 0x2a, 0x0a, 0x0e,
-	0x41, 0x78, 0x69, 0x73, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0c,
-	0x0a, 0x08, 0x43, 0x41, 0x54, 0x45, 0x47, 0x4f, 0x52, 0x59, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06,
-	0x4e, 0x55, 0x4d, 0x42, 0x45, 0x52, 0x10, 0x01, 0x22, 0x43, 0x0a, 0x08, 0x41, 0x78, 0x69, 0x73,
-	0x54, 0x79, 0x70, 0x65, 0x12, 0x05, 0x0a, 0x01, 0x58, 0x10, 0x00, 0x12, 0x05, 0x0a, 0x01, 0x59,
-	0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x53, 0x48, 0x41, 0x50, 0x45, 0x10, 0x02, 0x12, 0x08, 0x0a,
-	0x04, 0x53, 0x49, 0x5a, 0x45, 0x10, 0x03, 0x12, 0x09, 0x0a, 0x05, 0x4c, 0x41, 0x42, 0x45, 0x4c,
-	0x10, 0x04, 0x12, 0x09, 0x0a, 0x05, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x10, 0x05, 0x22, 0x42, 0x0a,
-	0x0c, 0x41, 0x78, 0x69, 0x73, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x07, 0x0a,
-	0x03, 0x54, 0x4f, 0x50, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x42, 0x4f, 0x54, 0x54, 0x4f, 0x4d,
-	0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x4c, 0x45, 0x46, 0x54, 0x10, 0x02, 0x12, 0x09, 0x0a, 0x05,
-	0x52, 0x49, 0x47, 0x48, 0x54, 0x10, 0x03, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10,
-	0x04, 0x42, 0x11, 0x0a, 0x0f, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x5f, 0x70, 0x61, 0x74,
-	0x74, 0x65, 0x72, 0x6e, 0x42, 0x1a, 0x0a, 0x18, 0x5f, 0x67, 0x61, 0x70, 0x5f, 0x62, 0x65, 0x74,
-	0x77, 0x65, 0x65, 0x6e, 0x5f, 0x6d, 0x61, 0x6a, 0x6f, 0x72, 0x5f, 0x74, 0x69, 0x63, 0x6b, 0x73,
-	0x1a, 0xe2, 0x07, 0x0a, 0x1a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x43, 0x61, 0x6c,
-	0x65, 0x6e, 0x64, 0x61, 0x72, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x12,
-	0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e,
-	0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x7a, 0x6f, 0x6e, 0x65,
-	0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x69, 0x6d, 0x65, 0x5a, 0x6f, 0x6e, 0x65,
-	0x12, 0x84, 0x01, 0x0a, 0x0d, 0x62, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5f, 0x64, 0x61,
-	0x79, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x5f, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65,
-	0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61,
-	0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67,
-	0x72, 0x70, 0x63, 0x2e, 0x46, 0x69, 0x67, 0x75, 0x72, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69,
-	0x70, 0x74, 0x6f, 0x72, 0x2e, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x43, 0x61, 0x6c,
-	0x65, 0x6e, 0x64, 0x61, 0x72, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e,
-	0x44, 0x61, 0x79, 0x4f, 0x66, 0x57, 0x65, 0x65, 0x6b, 0x52, 0x0c, 0x62, 0x75, 0x73, 0x69, 0x6e,
-	0x65, 0x73, 0x73, 0x44, 0x61, 0x79, 0x73, 0x12, 0x8f, 0x01, 0x0a, 0x10, 0x62, 0x75, 0x73, 0x69,
-	0x6e, 0x65, 0x73, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x73, 0x18, 0x04, 0x20, 0x03,
-	0x28, 0x0b, 0x32, 0x64, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65,
+	0x2e, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x52,
+	0x0f, 0x62, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x73,
+	0x12, 0x79, 0x0a, 0x08, 0x68, 0x6f, 0x6c, 0x69, 0x64, 0x61, 0x79, 0x73, 0x18, 0x05, 0x20, 0x03,
+	0x28, 0x0b, 0x32, 0x5d, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65,
 	0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e,
 	0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x46, 0x69,
 	0x67, 0x75, 0x72, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x42,
 	0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x43, 0x61, 0x6c, 0x65, 0x6e, 0x64, 0x61, 0x72, 0x44,
-	0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65,
-	0x73, 0x73, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x52, 0x0f, 0x62, 0x75, 0x73, 0x69, 0x6e, 0x65,
-	0x73, 0x73, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x73, 0x12, 0x79, 0x0a, 0x08, 0x68, 0x6f, 0x6c,
-	0x69, 0x64, 0x61, 0x79, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x5d, 0x2e, 0x69, 0x6f,
-	0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
-	0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70,
-	0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x46, 0x69, 0x67, 0x75, 0x72, 0x65, 0x44, 0x65, 0x73,
-	0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73,
-	0x43, 0x61, 0x6c, 0x65, 0x6e, 0x64, 0x61, 0x72, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74,
-	0x6f, 0x72, 0x2e, 0x48, 0x6f, 0x6c, 0x69, 0x64, 0x61, 0x79, 0x52, 0x08, 0x68, 0x6f, 0x6c, 0x69,
-	0x64, 0x61, 0x79, 0x73, 0x1a, 0x3a, 0x0a, 0x0e, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73,
-	0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6f, 0x70, 0x65, 0x6e, 0x18, 0x01,
-	0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6f, 0x70, 0x65, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6c,
-	0x6f, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x63, 0x6c, 0x6f, 0x73, 0x65,
-	0x1a, 0x90, 0x02, 0x0a, 0x07, 0x48, 0x6f, 0x6c, 0x69, 0x64, 0x61, 0x79, 0x12, 0x73, 0x0a, 0x04,
-	0x64, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x5f, 0x2e, 0x69, 0x6f, 0x2e,
-	0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
-	0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74,
-	0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x46, 0x69, 0x67, 0x75, 0x72, 0x65, 0x44, 0x65, 0x73, 0x63,
-	0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x43,
-	0x61, 0x6c, 0x65, 0x6e, 0x64, 0x61, 0x72, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f,
-	0x72, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x44, 0x61, 0x74, 0x65, 0x52, 0x04, 0x64, 0x61, 0x74,
-	0x65, 0x12, 0x8f, 0x01, 0x0a, 0x10, 0x62, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5f, 0x70,
-	0x65, 0x72, 0x69, 0x6f, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x64, 0x2e, 0x69,
-	0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74,
-	0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69,
-	0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x46, 0x69, 0x67, 0x75, 0x72, 0x65, 0x44, 0x65,
-	0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73,
-	0x73, 0x43, 0x61, 0x6c, 0x65, 0x6e, 0x64, 0x61, 0x72, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70,
-	0x74, 0x6f, 0x72, 0x2e, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x50, 0x65, 0x72, 0x69,
-	0x6f, 0x64, 0x52, 0x0f, 0x62, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x50, 0x65, 0x72, 0x69,
-	0x6f, 0x64, 0x73, 0x1a, 0x47, 0x0a, 0x09, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x44, 0x61, 0x74, 0x65,
-	0x12, 0x12, 0x0a, 0x04, 0x79, 0x65, 0x61, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04,
-	0x79, 0x65, 0x61, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x18, 0x02, 0x20,
-	0x01, 0x28, 0x05, 0x52, 0x05, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x12, 0x10, 0x0a, 0x03, 0x64, 0x61,
-	0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x64, 0x61, 0x79, 0x22, 0x67, 0x0a, 0x09,
-	0x44, 0x61, 0x79, 0x4f, 0x66, 0x57, 0x65, 0x65, 0x6b, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x55, 0x4e,
-	0x44, 0x41, 0x59, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x4d, 0x4f, 0x4e, 0x44, 0x41, 0x59, 0x10,
-	0x01, 0x12, 0x0b, 0x0a, 0x07, 0x54, 0x55, 0x45, 0x53, 0x44, 0x41, 0x59, 0x10, 0x02, 0x12, 0x0d,
-	0x0a, 0x09, 0x57, 0x45, 0x44, 0x4e, 0x45, 0x53, 0x44, 0x41, 0x59, 0x10, 0x03, 0x12, 0x0c, 0x0a,
-	0x08, 0x54, 0x48, 0x55, 0x52, 0x53, 0x44, 0x41, 0x59, 0x10, 0x04, 0x12, 0x0a, 0x0a, 0x06, 0x46,
-	0x52, 0x49, 0x44, 0x41, 0x59, 0x10, 0x05, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x41, 0x54, 0x55, 0x52,
-	0x44, 0x41, 0x59, 0x10, 0x06, 0x1a, 0xe4, 0x01, 0x0a, 0x1b, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x53,
-	0x65, 0x72, 0x69, 0x65, 0x73, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72,
-	0x69, 0x70, 0x74, 0x6f, 0x72, 0x12, 0x17, 0x0a, 0x07, 0x61, 0x78, 0x69, 0x73, 0x5f, 0x69, 0x64,
-	0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x78, 0x69, 0x73, 0x49, 0x64, 0x12, 0x59,
-	0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x45, 0x2e, 0x69,
-	0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74,
-	0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69,
-	0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x46, 0x69, 0x67, 0x75, 0x72, 0x65, 0x44, 0x65,
-	0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54,
-	0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x30, 0x0a, 0x14, 0x70, 0x61, 0x72,
-	0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x65, 0x64, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x69,
-	0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x12, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69,
-	0x6f, 0x6e, 0x65, 0x64, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x63,
-	0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09,
-	0x52, 0x0a, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x1a, 0x81, 0x03, 0x0a,
-	0x10, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f,
-	0x72, 0x12, 0x17, 0x0a, 0x07, 0x61, 0x78, 0x69, 0x73, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01,
-	0x28, 0x09, 0x52, 0x06, 0x61, 0x78, 0x69, 0x73, 0x49, 0x64, 0x12, 0x59, 0x0a, 0x04, 0x74, 0x79,
-	0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x45, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65,
-	0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61,
-	0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67,
-	0x72, 0x70, 0x63, 0x2e, 0x46, 0x69, 0x67, 0x75, 0x72, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69,
-	0x70, 0x74, 0x6f, 0x72, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52,
-	0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x69,
-	0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x49, 0x64,
+	0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x48, 0x6f, 0x6c, 0x69, 0x64, 0x61,
+	0x79, 0x52, 0x08, 0x68, 0x6f, 0x6c, 0x69, 0x64, 0x61, 0x79, 0x73, 0x1a, 0x3a, 0x0a, 0x0e, 0x42,
+	0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x12, 0x12, 0x0a,
+	0x04, 0x6f, 0x70, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6f, 0x70, 0x65,
+	0x6e, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x05, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x1a, 0x90, 0x02, 0x0a, 0x07, 0x48, 0x6f, 0x6c, 0x69,
+	0x64, 0x61, 0x79, 0x12, 0x73, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
+	0x0b, 0x32, 0x5f, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e,
+	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65,
+	0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x46, 0x69, 0x67,
+	0x75, 0x72, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x42, 0x75,
+	0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x43, 0x61, 0x6c, 0x65, 0x6e, 0x64, 0x61, 0x72, 0x44, 0x65,
+	0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x44, 0x61,
+	0x74, 0x65, 0x52, 0x04, 0x64, 0x61, 0x74, 0x65, 0x12, 0x8f, 0x01, 0x0a, 0x10, 0x62, 0x75, 0x73,
+	0x69, 0x6e, 0x65, 0x73, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x73, 0x18, 0x02, 0x20,
+	0x03, 0x28, 0x0b, 0x32, 0x64, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76,
+	0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61,
+	0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x46,
+	0x69, 0x67, 0x75, 0x72, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e,
+	0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x43, 0x61, 0x6c, 0x65, 0x6e, 0x64, 0x61, 0x72,
+	0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x42, 0x75, 0x73, 0x69, 0x6e,
+	0x65, 0x73, 0x73, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x52, 0x0f, 0x62, 0x75, 0x73, 0x69, 0x6e,
+	0x65, 0x73, 0x73, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x73, 0x1a, 0x47, 0x0a, 0x09, 0x4c, 0x6f,
+	0x63, 0x61, 0x6c, 0x44, 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x79, 0x65, 0x61, 0x72, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x79, 0x65, 0x61, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x6d,
+	0x6f, 0x6e, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6d, 0x6f, 0x6e, 0x74,
+	0x68, 0x12, 0x10, 0x0a, 0x03, 0x64, 0x61, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03,
+	0x64, 0x61, 0x79, 0x22, 0x67, 0x0a, 0x09, 0x44, 0x61, 0x79, 0x4f, 0x66, 0x57, 0x65, 0x65, 0x6b,
+	0x12, 0x0a, 0x0a, 0x06, 0x53, 0x55, 0x4e, 0x44, 0x41, 0x59, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06,
+	0x4d, 0x4f, 0x4e, 0x44, 0x41, 0x59, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x54, 0x55, 0x45, 0x53,
+	0x44, 0x41, 0x59, 0x10, 0x02, 0x12, 0x0d, 0x0a, 0x09, 0x57, 0x45, 0x44, 0x4e, 0x45, 0x53, 0x44,
+	0x41, 0x59, 0x10, 0x03, 0x12, 0x0c, 0x0a, 0x08, 0x54, 0x48, 0x55, 0x52, 0x53, 0x44, 0x41, 0x59,
+	0x10, 0x04, 0x12, 0x0a, 0x0a, 0x06, 0x46, 0x52, 0x49, 0x44, 0x41, 0x59, 0x10, 0x05, 0x12, 0x0c,
+	0x0a, 0x08, 0x53, 0x41, 0x54, 0x55, 0x52, 0x44, 0x41, 0x59, 0x10, 0x06, 0x1a, 0xe4, 0x01, 0x0a,
+	0x1b, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x53, 0x6f, 0x75, 0x72,
+	0x63, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x12, 0x17, 0x0a, 0x07,
+	0x61, 0x78, 0x69, 0x73, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61,
+	0x78, 0x69, 0x73, 0x49, 0x64, 0x12, 0x59, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20,
+	0x01, 0x28, 0x0e, 0x32, 0x45, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76,
+	0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61,
+	0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x46,
+	0x69, 0x67, 0x75, 0x72, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e,
+	0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65,
 	0x12, 0x30, 0x0a, 0x14, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x65, 0x64, 0x5f,
-	0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x12,
+	0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x12,
 	0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x65, 0x64, 0x54, 0x61, 0x62, 0x6c, 0x65,
 	0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x6e, 0x61, 0x6d,
-	0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x4e,
-	0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x74, 0x79,
-	0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e,
-	0x54, 0x79, 0x70, 0x65, 0x12, 0x6a, 0x0a, 0x09, 0x6f, 0x6e, 0x65, 0x5f, 0x63, 0x6c, 0x69, 0x63,
-	0x6b, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4d, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65,
-	0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63,
-	0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72,
-	0x70, 0x63, 0x2e, 0x46, 0x69, 0x67, 0x75, 0x72, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70,
-	0x74, 0x6f, 0x72, 0x2e, 0x4f, 0x6e, 0x65, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x44, 0x65, 0x73, 0x63,
-	0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x52, 0x08, 0x6f, 0x6e, 0x65, 0x43, 0x6c, 0x69, 0x63, 0x6b,
-	0x1a, 0x95, 0x01, 0x0a, 0x12, 0x4f, 0x6e, 0x65, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x44, 0x65, 0x73,
-	0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6c, 0x75, 0x6d,
-	0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e,
-	0x73, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65,
-	0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x54,
-	0x79, 0x70, 0x65, 0x73, 0x12, 0x42, 0x0a, 0x1e, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x5f,
-	0x61, 0x6c, 0x6c, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x5f, 0x74, 0x6f, 0x5f, 0x64,
-	0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1a, 0x72, 0x65,
-	0x71, 0x75, 0x69, 0x72, 0x65, 0x41, 0x6c, 0x6c, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x54,
-	0x6f, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x22, 0xa6, 0x01, 0x0a, 0x0f, 0x53, 0x65, 0x72,
-	0x69, 0x65, 0x73, 0x50, 0x6c, 0x6f, 0x74, 0x53, 0x74, 0x79, 0x6c, 0x65, 0x12, 0x07, 0x0a, 0x03,
-	0x42, 0x41, 0x52, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x53, 0x54, 0x41, 0x43, 0x4b, 0x45, 0x44,
-	0x5f, 0x42, 0x41, 0x52, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x4c, 0x49, 0x4e, 0x45, 0x10, 0x02,
-	0x12, 0x08, 0x0a, 0x04, 0x41, 0x52, 0x45, 0x41, 0x10, 0x03, 0x12, 0x10, 0x0a, 0x0c, 0x53, 0x54,
-	0x41, 0x43, 0x4b, 0x45, 0x44, 0x5f, 0x41, 0x52, 0x45, 0x41, 0x10, 0x04, 0x12, 0x07, 0x0a, 0x03,
-	0x50, 0x49, 0x45, 0x10, 0x05, 0x12, 0x0d, 0x0a, 0x09, 0x48, 0x49, 0x53, 0x54, 0x4f, 0x47, 0x52,
-	0x41, 0x4d, 0x10, 0x06, 0x12, 0x08, 0x0a, 0x04, 0x4f, 0x48, 0x4c, 0x43, 0x10, 0x07, 0x12, 0x0b,
-	0x0a, 0x07, 0x53, 0x43, 0x41, 0x54, 0x54, 0x45, 0x52, 0x10, 0x08, 0x12, 0x08, 0x0a, 0x04, 0x53,
-	0x54, 0x45, 0x50, 0x10, 0x09, 0x12, 0x0d, 0x0a, 0x09, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x5f, 0x42,
-	0x41, 0x52, 0x10, 0x0a, 0x12, 0x0b, 0x0a, 0x07, 0x54, 0x52, 0x45, 0x45, 0x4d, 0x41, 0x50, 0x10,
-	0x0b, 0x22, 0xd2, 0x01, 0x0a, 0x0a, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65,
-	0x12, 0x05, 0x0a, 0x01, 0x58, 0x10, 0x00, 0x12, 0x05, 0x0a, 0x01, 0x59, 0x10, 0x01, 0x12, 0x05,
-	0x0a, 0x01, 0x5a, 0x10, 0x02, 0x12, 0x09, 0x0a, 0x05, 0x58, 0x5f, 0x4c, 0x4f, 0x57, 0x10, 0x03,
-	0x12, 0x0a, 0x0a, 0x06, 0x58, 0x5f, 0x48, 0x49, 0x47, 0x48, 0x10, 0x04, 0x12, 0x09, 0x0a, 0x05,
-	0x59, 0x5f, 0x4c, 0x4f, 0x57, 0x10, 0x05, 0x12, 0x0a, 0x0a, 0x06, 0x59, 0x5f, 0x48, 0x49, 0x47,
-	0x48, 0x10, 0x06, 0x12, 0x08, 0x0a, 0x04, 0x54, 0x49, 0x4d, 0x45, 0x10, 0x07, 0x12, 0x08, 0x0a,
-	0x04, 0x4f, 0x50, 0x45, 0x4e, 0x10, 0x08, 0x12, 0x08, 0x0a, 0x04, 0x48, 0x49, 0x47, 0x48, 0x10,
-	0x09, 0x12, 0x07, 0x0a, 0x03, 0x4c, 0x4f, 0x57, 0x10, 0x0a, 0x12, 0x09, 0x0a, 0x05, 0x43, 0x4c,
-	0x4f, 0x53, 0x45, 0x10, 0x0b, 0x12, 0x09, 0x0a, 0x05, 0x53, 0x48, 0x41, 0x50, 0x45, 0x10, 0x0c,
-	0x12, 0x08, 0x0a, 0x04, 0x53, 0x49, 0x5a, 0x45, 0x10, 0x0d, 0x12, 0x09, 0x0a, 0x05, 0x4c, 0x41,
-	0x42, 0x45, 0x4c, 0x10, 0x0e, 0x12, 0x09, 0x0a, 0x05, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x10, 0x0f,
-	0x12, 0x0a, 0x0a, 0x06, 0x50, 0x41, 0x52, 0x45, 0x4e, 0x54, 0x10, 0x10, 0x12, 0x0e, 0x0a, 0x0a,
-	0x48, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x54, 0x45, 0x58, 0x54, 0x10, 0x11, 0x12, 0x08, 0x0a, 0x04,
-	0x54, 0x45, 0x58, 0x54, 0x10, 0x12, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x74, 0x69, 0x74, 0x6c, 0x65,
-	0x4a, 0x04, 0x08, 0x0b, 0x10, 0x0c, 0x4a, 0x04, 0x08, 0x0c, 0x10, 0x0d, 0x32, 0x8e, 0x0c, 0x0a,
-	0x0e, 0x43, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12,
-	0x98, 0x01, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x54, 0x79,
-	0x70, 0x65, 0x73, 0x12, 0x40, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76,
-	0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61,
-	0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x47,
-	0x65, 0x74, 0x43, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x73, 0x52, 0x65,
-	0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x41, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68,
-	0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70,
-	0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63,
-	0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x73,
-	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x8f, 0x01, 0x0a, 0x0c, 0x53,
-	0x74, 0x61, 0x72, 0x74, 0x43, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x12, 0x3d, 0x2e, 0x69, 0x6f,
-	0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
-	0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70,
-	0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x6f, 0x6e, 0x73,
-	0x6f, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3e, 0x2e, 0x69, 0x6f, 0x2e,
+	0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x4e,
+	0x61, 0x6d, 0x65, 0x1a, 0x81, 0x03, 0x0a, 0x10, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x65,
+	0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x12, 0x17, 0x0a, 0x07, 0x61, 0x78, 0x69, 0x73,
+	0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x78, 0x69, 0x73, 0x49,
+	0x64, 0x12, 0x59, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32,
+	0x45, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73,
+	0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x46, 0x69, 0x67, 0x75, 0x72,
+	0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x53, 0x6f, 0x75, 0x72,
+	0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x19, 0x0a, 0x08,
+	0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07,
+	0x74, 0x61, 0x62, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x14, 0x70, 0x61, 0x72, 0x74, 0x69,
+	0x74, 0x69, 0x6f, 0x6e, 0x65, 0x64, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18,
+	0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x12, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e,
+	0x65, 0x64, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6f, 0x6c,
+	0x75, 0x6d, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a,
+	0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6f,
+	0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x0a, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x6a, 0x0a, 0x09, 0x6f,
+	0x6e, 0x65, 0x5f, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4d,
+	0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63,
+	0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x46, 0x69, 0x67, 0x75, 0x72, 0x65,
+	0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x4f, 0x6e, 0x65, 0x43, 0x6c,
+	0x69, 0x63, 0x6b, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x52, 0x08, 0x6f,
+	0x6e, 0x65, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x1a, 0x95, 0x01, 0x0a, 0x12, 0x4f, 0x6e, 0x65, 0x43,
+	0x6c, 0x69, 0x63, 0x6b, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x12, 0x18,
+	0x0a, 0x07, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52,
+	0x07, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6c, 0x75,
+	0x6d, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b,
+	0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x42, 0x0a, 0x1e, 0x72,
+	0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x5f, 0x61, 0x6c, 0x6c, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65,
+	0x72, 0x73, 0x5f, 0x74, 0x6f, 0x5f, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x18, 0x03, 0x20,
+	0x01, 0x28, 0x08, 0x52, 0x1a, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x41, 0x6c, 0x6c, 0x46,
+	0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x54, 0x6f, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x22,
+	0xa6, 0x01, 0x0a, 0x0f, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x50, 0x6c, 0x6f, 0x74, 0x53, 0x74,
+	0x79, 0x6c, 0x65, 0x12, 0x07, 0x0a, 0x03, 0x42, 0x41, 0x52, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b,
+	0x53, 0x54, 0x41, 0x43, 0x4b, 0x45, 0x44, 0x5f, 0x42, 0x41, 0x52, 0x10, 0x01, 0x12, 0x08, 0x0a,
+	0x04, 0x4c, 0x49, 0x4e, 0x45, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x41, 0x52, 0x45, 0x41, 0x10,
+	0x03, 0x12, 0x10, 0x0a, 0x0c, 0x53, 0x54, 0x41, 0x43, 0x4b, 0x45, 0x44, 0x5f, 0x41, 0x52, 0x45,
+	0x41, 0x10, 0x04, 0x12, 0x07, 0x0a, 0x03, 0x50, 0x49, 0x45, 0x10, 0x05, 0x12, 0x0d, 0x0a, 0x09,
+	0x48, 0x49, 0x53, 0x54, 0x4f, 0x47, 0x52, 0x41, 0x4d, 0x10, 0x06, 0x12, 0x08, 0x0a, 0x04, 0x4f,
+	0x48, 0x4c, 0x43, 0x10, 0x07, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x43, 0x41, 0x54, 0x54, 0x45, 0x52,
+	0x10, 0x08, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x54, 0x45, 0x50, 0x10, 0x09, 0x12, 0x0d, 0x0a, 0x09,
+	0x45, 0x52, 0x52, 0x4f, 0x52, 0x5f, 0x42, 0x41, 0x52, 0x10, 0x0a, 0x12, 0x0b, 0x0a, 0x07, 0x54,
+	0x52, 0x45, 0x45, 0x4d, 0x41, 0x50, 0x10, 0x0b, 0x22, 0xd2, 0x01, 0x0a, 0x0a, 0x53, 0x6f, 0x75,
+	0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x05, 0x0a, 0x01, 0x58, 0x10, 0x00, 0x12, 0x05,
+	0x0a, 0x01, 0x59, 0x10, 0x01, 0x12, 0x05, 0x0a, 0x01, 0x5a, 0x10, 0x02, 0x12, 0x09, 0x0a, 0x05,
+	0x58, 0x5f, 0x4c, 0x4f, 0x57, 0x10, 0x03, 0x12, 0x0a, 0x0a, 0x06, 0x58, 0x5f, 0x48, 0x49, 0x47,
+	0x48, 0x10, 0x04, 0x12, 0x09, 0x0a, 0x05, 0x59, 0x5f, 0x4c, 0x4f, 0x57, 0x10, 0x05, 0x12, 0x0a,
+	0x0a, 0x06, 0x59, 0x5f, 0x48, 0x49, 0x47, 0x48, 0x10, 0x06, 0x12, 0x08, 0x0a, 0x04, 0x54, 0x49,
+	0x4d, 0x45, 0x10, 0x07, 0x12, 0x08, 0x0a, 0x04, 0x4f, 0x50, 0x45, 0x4e, 0x10, 0x08, 0x12, 0x08,
+	0x0a, 0x04, 0x48, 0x49, 0x47, 0x48, 0x10, 0x09, 0x12, 0x07, 0x0a, 0x03, 0x4c, 0x4f, 0x57, 0x10,
+	0x0a, 0x12, 0x09, 0x0a, 0x05, 0x43, 0x4c, 0x4f, 0x53, 0x45, 0x10, 0x0b, 0x12, 0x09, 0x0a, 0x05,
+	0x53, 0x48, 0x41, 0x50, 0x45, 0x10, 0x0c, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x49, 0x5a, 0x45, 0x10,
+	0x0d, 0x12, 0x09, 0x0a, 0x05, 0x4c, 0x41, 0x42, 0x45, 0x4c, 0x10, 0x0e, 0x12, 0x09, 0x0a, 0x05,
+	0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x10, 0x0f, 0x12, 0x0a, 0x0a, 0x06, 0x50, 0x41, 0x52, 0x45, 0x4e,
+	0x54, 0x10, 0x10, 0x12, 0x0e, 0x0a, 0x0a, 0x48, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x54, 0x45, 0x58,
+	0x54, 0x10, 0x11, 0x12, 0x08, 0x0a, 0x04, 0x54, 0x45, 0x58, 0x54, 0x10, 0x12, 0x42, 0x08, 0x0a,
+	0x06, 0x5f, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x4a, 0x04, 0x08, 0x0b, 0x10, 0x0c, 0x4a, 0x04, 0x08,
+	0x0c, 0x10, 0x0d, 0x32, 0xb2, 0x0d, 0x0a, 0x0e, 0x43, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x53,
+	0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x98, 0x01, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x43, 0x6f,
+	0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x40, 0x2e, 0x69, 0x6f, 0x2e,
 	0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
 	0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74,
-	0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x6f, 0x6e, 0x73, 0x6f,
-	0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x8c, 0x01, 0x0a,
-	0x0b, 0x47, 0x65, 0x74, 0x48, 0x65, 0x61, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x3c, 0x2e, 0x69,
+	0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65,
+	0x54, 0x79, 0x70, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x41, 0x2e, 0x69,
 	0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74,
-	0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69,
-	0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x47, 0x65, 0x74, 0x48, 0x65, 0x61, 0x70, 0x49,
-	0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3d, 0x2e, 0x69, 0x6f, 0x2e,
-	0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
-	0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74,
-	0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x47, 0x65, 0x74, 0x48, 0x65, 0x61, 0x70, 0x49, 0x6e, 0x66,
-	0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x96, 0x01, 0x0a, 0x0f,
-	0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x54, 0x6f, 0x4c, 0x6f, 0x67, 0x73, 0x12,
-	0x40, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70,
-	0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73,
-	0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x6f, 0x67, 0x53, 0x75,
-	0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+	0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69,
+	0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x73, 0x6f,
+	0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
+	0x00, 0x12, 0x8f, 0x01, 0x0a, 0x0c, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x6f, 0x6e, 0x73, 0x6f,
+	0x6c, 0x65, 0x12, 0x3d, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65,
+	0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e,
+	0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74,
+	0x61, 0x72, 0x74, 0x43, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+	0x74, 0x1a, 0x3e, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e,
+	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65,
+	0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x61,
+	0x72, 0x74, 0x43, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+	0x65, 0x22, 0x00, 0x12, 0x8c, 0x01, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x48, 0x65, 0x61, 0x70, 0x49,
+	0x6e, 0x66, 0x6f, 0x12, 0x3c, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76,
+	0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61,
+	0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x47,
+	0x65, 0x74, 0x48, 0x65, 0x61, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
 	0x74, 0x1a, 0x3d, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e,
 	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65,
-	0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x6f, 0x67,
-	0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61,
-	0x22, 0x00, 0x30, 0x01, 0x12, 0x95, 0x01, 0x0a, 0x0e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65,
-	0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x3f, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65,
-	0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63,
-	0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72,
-	0x70, 0x63, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e,
-	0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x40, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65,
+	0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x47, 0x65, 0x74,
+	0x48, 0x65, 0x61, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+	0x22, 0x00, 0x12, 0x96, 0x01, 0x0a, 0x0f, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65,
+	0x54, 0x6f, 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x40, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70,
+	0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b,
+	0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70,
+	0x63, 0x2e, 0x4c, 0x6f, 0x67, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f,
+	0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3d, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65,
 	0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61,
 	0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67,
-	0x72, 0x70, 0x63, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x61,
-	0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x92, 0x01, 0x0a,
-	0x0d, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x3e,
-	0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72,
-	0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63,
-	0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c,
-	0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3f,
+	0x72, 0x70, 0x63, 0x2e, 0x4c, 0x6f, 0x67, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74,
+	0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x22, 0x00, 0x30, 0x01, 0x12, 0x95, 0x01, 0x0a, 0x0e,
+	0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x3f,
 	0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72,
 	0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63,
-	0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c,
-	0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
-	0x00, 0x12, 0xa4, 0x01, 0x0a, 0x13, 0x42, 0x69, 0x6e, 0x64, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x54,
-	0x6f, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x44, 0x2e, 0x69, 0x6f, 0x2e, 0x64,
+	0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74,
+	0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
+	0x40, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73,
+	0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75,
+	0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+	0x65, 0x22, 0x00, 0x12, 0x92, 0x01, 0x0a, 0x0d, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x43, 0x6f,
+	0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x3e, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68,
+	0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70,
+	0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63,
+	0x2e, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65,
+	0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3f, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68,
+	0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70,
+	0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63,
+	0x2e, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65,
+	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0xa4, 0x01, 0x0a, 0x13, 0x42, 0x69, 0x6e,
+	0x64, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x6f, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65,
+	0x12, 0x44, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e,
+	0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x42, 0x69, 0x6e, 0x64,
+	0x54, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x6f, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52,
+	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x45, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70,
+	0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b,
+	0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70,
+	0x63, 0x2e, 0x42, 0x69, 0x6e, 0x64, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x6f, 0x56, 0x61, 0x72,
+	0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12,
+	0x99, 0x01, 0x0a, 0x12, 0x41, 0x75, 0x74, 0x6f, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65,
+	0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x3d, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70,
+	0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b,
+	0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70,
+	0x63, 0x2e, 0x41, 0x75, 0x74, 0x6f, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65,
+	0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3e, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68,
+	0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70,
+	0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63,
+	0x2e, 0x41, 0x75, 0x74, 0x6f, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73,
+	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, 0x12, 0xa1, 0x01, 0x0a, 0x12,
+	0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x41, 0x75, 0x74, 0x6f, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65,
+	0x74, 0x65, 0x12, 0x43, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65,
+	0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e,
+	0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x61,
+	0x6e, 0x63, 0x65, 0x6c, 0x41, 0x75, 0x74, 0x6f, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65,
+	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x44, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65,
+	0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63,
+	0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72,
+	0x70, 0x63, 0x2e, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x41, 0x75, 0x74, 0x6f, 0x43, 0x6f, 0x6d,
+	0x70, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12,
+	0x9b, 0x01, 0x0a, 0x16, 0x4f, 0x70, 0x65, 0x6e, 0x41, 0x75, 0x74, 0x6f, 0x43, 0x6f, 0x6d, 0x70,
+	0x6c, 0x65, 0x74, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x3d, 0x2e, 0x69, 0x6f, 0x2e,
+	0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
+	0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74,
+	0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x75, 0x74, 0x6f, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65,
+	0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3e, 0x2e, 0x69, 0x6f, 0x2e, 0x64,
 	0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62,
 	0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e,
-	0x67, 0x72, 0x70, 0x63, 0x2e, 0x42, 0x69, 0x6e, 0x64, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x6f,
-	0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
-	0x45, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70,
-	0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73,
-	0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x42, 0x69, 0x6e, 0x64, 0x54,
-	0x61, 0x62, 0x6c, 0x65, 0x54, 0x6f, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65,
-	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x99, 0x01, 0x0a, 0x12, 0x41, 0x75, 0x74,
-	0x6f, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12,
-	0x3d, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70,
-	0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73,
-	0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x75, 0x74, 0x6f, 0x43,
-	0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3e,
-	0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72,
-	0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63,
-	0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x75, 0x74, 0x6f, 0x43, 0x6f,
-	0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00,
-	0x28, 0x01, 0x30, 0x01, 0x12, 0x9b, 0x01, 0x0a, 0x16, 0x4f, 0x70, 0x65, 0x6e, 0x41, 0x75, 0x74,
-	0x6f, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12,
-	0x3d, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70,
-	0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73,
-	0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x75, 0x74, 0x6f, 0x43,
-	0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3e,
-	0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72,
-	0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63,
-	0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x75, 0x74, 0x6f, 0x43, 0x6f,
-	0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00,
-	0x30, 0x01, 0x12, 0x98, 0x01, 0x0a, 0x16, 0x4e, 0x65, 0x78, 0x74, 0x41, 0x75, 0x74, 0x6f, 0x43,
-	0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x3d, 0x2e,
-	0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f,
-	0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72,
-	0x69, 0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x75, 0x74, 0x6f, 0x43, 0x6f, 0x6d,
-	0x70, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3d, 0x2e, 0x69,
-	0x6f, 0x2e, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74,
-	0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69,
-	0x70, 0x74, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x42, 0x72, 0x6f, 0x77, 0x73, 0x65, 0x72, 0x4e,
-	0x65, 0x78, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x43, 0x48,
-	0x01, 0x50, 0x01, 0x5a, 0x3d, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f,
-	0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2f, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61,
-	0x76, 0x65, 0x6e, 0x2d, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x67, 0x6f, 0x2f, 0x69, 0x6e, 0x74, 0x65,
-	0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x63, 0x6f, 0x6e, 0x73, 0x6f,
-	0x6c, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+	0x67, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x75, 0x74, 0x6f, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74,
+	0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x98, 0x01,
+	0x0a, 0x16, 0x4e, 0x65, 0x78, 0x74, 0x41, 0x75, 0x74, 0x6f, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65,
+	0x74, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x3d, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65,
+	0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61,
+	0x63, 0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67,
+	0x72, 0x70, 0x63, 0x2e, 0x41, 0x75, 0x74, 0x6f, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65,
+	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3d, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x65,
+	0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63,
+	0x6b, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x67, 0x72,
+	0x70, 0x63, 0x2e, 0x42, 0x72, 0x6f, 0x77, 0x73, 0x65, 0x72, 0x4e, 0x65, 0x78, 0x74, 0x52, 0x65,
+	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x43, 0x48, 0x01, 0x50, 0x01, 0x5a, 0x3d,
+	0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x64, 0x65, 0x65, 0x70, 0x68,
+	0x61, 0x76, 0x65, 0x6e, 0x2f, 0x64, 0x65, 0x65, 0x70, 0x68, 0x61, 0x76, 0x65, 0x6e, 0x2d, 0x63,
+	0x6f, 0x72, 0x65, 0x2f, 0x67, 0x6f, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x62, 0x06, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x33,
 }
 
 var (
@@ -4628,153 +6081,201 @@ func file_deephaven_proto_console_proto_rawDescGZIP() []byte {
 	return file_deephaven_proto_console_proto_rawDescData
 }
 
-var file_deephaven_proto_console_proto_enumTypes = make([]protoimpl.EnumInfo, 7)
-var file_deephaven_proto_console_proto_msgTypes = make([]protoimpl.MessageInfo, 45)
+var file_deephaven_proto_console_proto_enumTypes = make([]protoimpl.EnumInfo, 9)
+var file_deephaven_proto_console_proto_msgTypes = make([]protoimpl.MessageInfo, 60)
 var file_deephaven_proto_console_proto_goTypes = []interface{}{
-	(FigureDescriptor_SeriesPlotStyle)(0),                              // 0: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.SeriesPlotStyle
-	(FigureDescriptor_SourceType)(0),                                   // 1: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.SourceType
-	(FigureDescriptor_ChartDescriptor_ChartType)(0),                    // 2: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.ChartDescriptor.ChartType
-	(FigureDescriptor_AxisDescriptor_AxisFormatType)(0),                // 3: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.AxisDescriptor.AxisFormatType
-	(FigureDescriptor_AxisDescriptor_AxisType)(0),                      // 4: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.AxisDescriptor.AxisType
-	(FigureDescriptor_AxisDescriptor_AxisPosition)(0),                  // 5: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.AxisDescriptor.AxisPosition
-	(FigureDescriptor_BusinessCalendarDescriptor_DayOfWeek)(0),         // 6: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BusinessCalendarDescriptor.DayOfWeek
-	(*GetConsoleTypesRequest)(nil),                                     // 7: io.deephaven.proto.backplane.script.grpc.GetConsoleTypesRequest
-	(*GetConsoleTypesResponse)(nil),                                    // 8: io.deephaven.proto.backplane.script.grpc.GetConsoleTypesResponse
-	(*StartConsoleRequest)(nil),                                        // 9: io.deephaven.proto.backplane.script.grpc.StartConsoleRequest
-	(*StartConsoleResponse)(nil),                                       // 10: io.deephaven.proto.backplane.script.grpc.StartConsoleResponse
-	(*GetHeapInfoRequest)(nil),                                         // 11: io.deephaven.proto.backplane.script.grpc.GetHeapInfoRequest
-	(*GetHeapInfoResponse)(nil),                                        // 12: io.deephaven.proto.backplane.script.grpc.GetHeapInfoResponse
-	(*LogSubscriptionRequest)(nil),                                     // 13: io.deephaven.proto.backplane.script.grpc.LogSubscriptionRequest
-	(*LogSubscriptionData)(nil),                                        // 14: io.deephaven.proto.backplane.script.grpc.LogSubscriptionData
-	(*ExecuteCommandRequest)(nil),                                      // 15: io.deephaven.proto.backplane.script.grpc.ExecuteCommandRequest
-	(*ExecuteCommandResponse)(nil),                                     // 16: io.deephaven.proto.backplane.script.grpc.ExecuteCommandResponse
-	(*BindTableToVariableRequest)(nil),                                 // 17: io.deephaven.proto.backplane.script.grpc.BindTableToVariableRequest
-	(*BindTableToVariableResponse)(nil),                                // 18: io.deephaven.proto.backplane.script.grpc.BindTableToVariableResponse
-	(*CancelCommandRequest)(nil),                                       // 19: io.deephaven.proto.backplane.script.grpc.CancelCommandRequest
-	(*CancelCommandResponse)(nil),                                      // 20: io.deephaven.proto.backplane.script.grpc.CancelCommandResponse
-	(*AutoCompleteRequest)(nil),                                        // 21: io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest
-	(*AutoCompleteResponse)(nil),                                       // 22: io.deephaven.proto.backplane.script.grpc.AutoCompleteResponse
-	(*BrowserNextResponse)(nil),                                        // 23: io.deephaven.proto.backplane.script.grpc.BrowserNextResponse
-	(*OpenDocumentRequest)(nil),                                        // 24: io.deephaven.proto.backplane.script.grpc.OpenDocumentRequest
-	(*TextDocumentItem)(nil),                                           // 25: io.deephaven.proto.backplane.script.grpc.TextDocumentItem
-	(*CloseDocumentRequest)(nil),                                       // 26: io.deephaven.proto.backplane.script.grpc.CloseDocumentRequest
-	(*ChangeDocumentRequest)(nil),                                      // 27: io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest
-	(*DocumentRange)(nil),                                              // 28: io.deephaven.proto.backplane.script.grpc.DocumentRange
-	(*VersionedTextDocumentIdentifier)(nil),                            // 29: io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier
-	(*Position)(nil),                                                   // 30: io.deephaven.proto.backplane.script.grpc.Position
-	(*GetCompletionItemsRequest)(nil),                                  // 31: io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest
-	(*CompletionContext)(nil),                                          // 32: io.deephaven.proto.backplane.script.grpc.CompletionContext
-	(*GetCompletionItemsResponse)(nil),                                 // 33: io.deephaven.proto.backplane.script.grpc.GetCompletionItemsResponse
-	(*CompletionItem)(nil),                                             // 34: io.deephaven.proto.backplane.script.grpc.CompletionItem
-	(*TextEdit)(nil),                                                   // 35: io.deephaven.proto.backplane.script.grpc.TextEdit
-	(*FigureDescriptor)(nil),                                           // 36: io.deephaven.proto.backplane.script.grpc.FigureDescriptor
-	(*ChangeDocumentRequest_TextDocumentContentChangeEvent)(nil),       // 37: io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.TextDocumentContentChangeEvent
-	(*FigureDescriptor_ChartDescriptor)(nil),                           // 38: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.ChartDescriptor
-	(*FigureDescriptor_SeriesDescriptor)(nil),                          // 39: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.SeriesDescriptor
-	(*FigureDescriptor_MultiSeriesDescriptor)(nil),                     // 40: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.MultiSeriesDescriptor
-	(*FigureDescriptor_StringMapWithDefault)(nil),                      // 41: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.StringMapWithDefault
-	(*FigureDescriptor_DoubleMapWithDefault)(nil),                      // 42: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.DoubleMapWithDefault
-	(*FigureDescriptor_BoolMapWithDefault)(nil),                        // 43: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BoolMapWithDefault
-	(*FigureDescriptor_AxisDescriptor)(nil),                            // 44: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.AxisDescriptor
-	(*FigureDescriptor_BusinessCalendarDescriptor)(nil),                // 45: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BusinessCalendarDescriptor
-	(*FigureDescriptor_MultiSeriesSourceDescriptor)(nil),               // 46: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.MultiSeriesSourceDescriptor
-	(*FigureDescriptor_SourceDescriptor)(nil),                          // 47: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.SourceDescriptor
-	(*FigureDescriptor_OneClickDescriptor)(nil),                        // 48: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.OneClickDescriptor
-	(*FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod)(nil), // 49: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BusinessCalendarDescriptor.BusinessPeriod
-	(*FigureDescriptor_BusinessCalendarDescriptor_Holiday)(nil),        // 50: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BusinessCalendarDescriptor.Holiday
-	(*FigureDescriptor_BusinessCalendarDescriptor_LocalDate)(nil),      // 51: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BusinessCalendarDescriptor.LocalDate
-	(*ticket.Ticket)(nil),                                              // 52: io.deephaven.proto.backplane.grpc.Ticket
-	(*application.FieldsChangeUpdate)(nil),                             // 53: io.deephaven.proto.backplane.grpc.FieldsChangeUpdate
+	(Diagnostic_DiagnosticSeverity)(0),                                 // 0: io.deephaven.proto.backplane.script.grpc.Diagnostic.DiagnosticSeverity
+	(Diagnostic_DiagnosticTag)(0),                                      // 1: io.deephaven.proto.backplane.script.grpc.Diagnostic.DiagnosticTag
+	(FigureDescriptor_SeriesPlotStyle)(0),                              // 2: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.SeriesPlotStyle
+	(FigureDescriptor_SourceType)(0),                                   // 3: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.SourceType
+	(FigureDescriptor_ChartDescriptor_ChartType)(0),                    // 4: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.ChartDescriptor.ChartType
+	(FigureDescriptor_AxisDescriptor_AxisFormatType)(0),                // 5: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.AxisDescriptor.AxisFormatType
+	(FigureDescriptor_AxisDescriptor_AxisType)(0),                      // 6: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.AxisDescriptor.AxisType
+	(FigureDescriptor_AxisDescriptor_AxisPosition)(0),                  // 7: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.AxisDescriptor.AxisPosition
+	(FigureDescriptor_BusinessCalendarDescriptor_DayOfWeek)(0),         // 8: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BusinessCalendarDescriptor.DayOfWeek
+	(*GetConsoleTypesRequest)(nil),                                     // 9: io.deephaven.proto.backplane.script.grpc.GetConsoleTypesRequest
+	(*GetConsoleTypesResponse)(nil),                                    // 10: io.deephaven.proto.backplane.script.grpc.GetConsoleTypesResponse
+	(*StartConsoleRequest)(nil),                                        // 11: io.deephaven.proto.backplane.script.grpc.StartConsoleRequest
+	(*StartConsoleResponse)(nil),                                       // 12: io.deephaven.proto.backplane.script.grpc.StartConsoleResponse
+	(*GetHeapInfoRequest)(nil),                                         // 13: io.deephaven.proto.backplane.script.grpc.GetHeapInfoRequest
+	(*GetHeapInfoResponse)(nil),                                        // 14: io.deephaven.proto.backplane.script.grpc.GetHeapInfoResponse
+	(*LogSubscriptionRequest)(nil),                                     // 15: io.deephaven.proto.backplane.script.grpc.LogSubscriptionRequest
+	(*LogSubscriptionData)(nil),                                        // 16: io.deephaven.proto.backplane.script.grpc.LogSubscriptionData
+	(*ExecuteCommandRequest)(nil),                                      // 17: io.deephaven.proto.backplane.script.grpc.ExecuteCommandRequest
+	(*ExecuteCommandResponse)(nil),                                     // 18: io.deephaven.proto.backplane.script.grpc.ExecuteCommandResponse
+	(*BindTableToVariableRequest)(nil),                                 // 19: io.deephaven.proto.backplane.script.grpc.BindTableToVariableRequest
+	(*BindTableToVariableResponse)(nil),                                // 20: io.deephaven.proto.backplane.script.grpc.BindTableToVariableResponse
+	(*CancelCommandRequest)(nil),                                       // 21: io.deephaven.proto.backplane.script.grpc.CancelCommandRequest
+	(*CancelCommandResponse)(nil),                                      // 22: io.deephaven.proto.backplane.script.grpc.CancelCommandResponse
+	(*CancelAutoCompleteRequest)(nil),                                  // 23: io.deephaven.proto.backplane.script.grpc.CancelAutoCompleteRequest
+	(*CancelAutoCompleteResponse)(nil),                                 // 24: io.deephaven.proto.backplane.script.grpc.CancelAutoCompleteResponse
+	(*AutoCompleteRequest)(nil),                                        // 25: io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest
+	(*AutoCompleteResponse)(nil),                                       // 26: io.deephaven.proto.backplane.script.grpc.AutoCompleteResponse
+	(*BrowserNextResponse)(nil),                                        // 27: io.deephaven.proto.backplane.script.grpc.BrowserNextResponse
+	(*OpenDocumentRequest)(nil),                                        // 28: io.deephaven.proto.backplane.script.grpc.OpenDocumentRequest
+	(*TextDocumentItem)(nil),                                           // 29: io.deephaven.proto.backplane.script.grpc.TextDocumentItem
+	(*CloseDocumentRequest)(nil),                                       // 30: io.deephaven.proto.backplane.script.grpc.CloseDocumentRequest
+	(*ChangeDocumentRequest)(nil),                                      // 31: io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest
+	(*DocumentRange)(nil),                                              // 32: io.deephaven.proto.backplane.script.grpc.DocumentRange
+	(*VersionedTextDocumentIdentifier)(nil),                            // 33: io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier
+	(*Position)(nil),                                                   // 34: io.deephaven.proto.backplane.script.grpc.Position
+	(*MarkupContent)(nil),                                              // 35: io.deephaven.proto.backplane.script.grpc.MarkupContent
+	(*GetCompletionItemsRequest)(nil),                                  // 36: io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest
+	(*CompletionContext)(nil),                                          // 37: io.deephaven.proto.backplane.script.grpc.CompletionContext
+	(*GetCompletionItemsResponse)(nil),                                 // 38: io.deephaven.proto.backplane.script.grpc.GetCompletionItemsResponse
+	(*CompletionItem)(nil),                                             // 39: io.deephaven.proto.backplane.script.grpc.CompletionItem
+	(*TextEdit)(nil),                                                   // 40: io.deephaven.proto.backplane.script.grpc.TextEdit
+	(*GetSignatureHelpRequest)(nil),                                    // 41: io.deephaven.proto.backplane.script.grpc.GetSignatureHelpRequest
+	(*SignatureHelpContext)(nil),                                       // 42: io.deephaven.proto.backplane.script.grpc.SignatureHelpContext
+	(*GetSignatureHelpResponse)(nil),                                   // 43: io.deephaven.proto.backplane.script.grpc.GetSignatureHelpResponse
+	(*SignatureInformation)(nil),                                       // 44: io.deephaven.proto.backplane.script.grpc.SignatureInformation
+	(*ParameterInformation)(nil),                                       // 45: io.deephaven.proto.backplane.script.grpc.ParameterInformation
+	(*GetHoverRequest)(nil),                                            // 46: io.deephaven.proto.backplane.script.grpc.GetHoverRequest
+	(*GetHoverResponse)(nil),                                           // 47: io.deephaven.proto.backplane.script.grpc.GetHoverResponse
+	(*GetDiagnosticRequest)(nil),                                       // 48: io.deephaven.proto.backplane.script.grpc.GetDiagnosticRequest
+	(*GetPullDiagnosticResponse)(nil),                                  // 49: io.deephaven.proto.backplane.script.grpc.GetPullDiagnosticResponse
+	(*GetPublishDiagnosticResponse)(nil),                               // 50: io.deephaven.proto.backplane.script.grpc.GetPublishDiagnosticResponse
+	(*Diagnostic)(nil),                                                 // 51: io.deephaven.proto.backplane.script.grpc.Diagnostic
+	(*FigureDescriptor)(nil),                                           // 52: io.deephaven.proto.backplane.script.grpc.FigureDescriptor
+	(*ChangeDocumentRequest_TextDocumentContentChangeEvent)(nil),       // 53: io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.TextDocumentContentChangeEvent
+	(*Diagnostic_CodeDescription)(nil),                                 // 54: io.deephaven.proto.backplane.script.grpc.Diagnostic.CodeDescription
+	(*FigureDescriptor_ChartDescriptor)(nil),                           // 55: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.ChartDescriptor
+	(*FigureDescriptor_SeriesDescriptor)(nil),                          // 56: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.SeriesDescriptor
+	(*FigureDescriptor_MultiSeriesDescriptor)(nil),                     // 57: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.MultiSeriesDescriptor
+	(*FigureDescriptor_StringMapWithDefault)(nil),                      // 58: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.StringMapWithDefault
+	(*FigureDescriptor_DoubleMapWithDefault)(nil),                      // 59: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.DoubleMapWithDefault
+	(*FigureDescriptor_BoolMapWithDefault)(nil),                        // 60: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BoolMapWithDefault
+	(*FigureDescriptor_AxisDescriptor)(nil),                            // 61: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.AxisDescriptor
+	(*FigureDescriptor_BusinessCalendarDescriptor)(nil),                // 62: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BusinessCalendarDescriptor
+	(*FigureDescriptor_MultiSeriesSourceDescriptor)(nil),               // 63: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.MultiSeriesSourceDescriptor
+	(*FigureDescriptor_SourceDescriptor)(nil),                          // 64: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.SourceDescriptor
+	(*FigureDescriptor_OneClickDescriptor)(nil),                        // 65: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.OneClickDescriptor
+	(*FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod)(nil), // 66: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BusinessCalendarDescriptor.BusinessPeriod
+	(*FigureDescriptor_BusinessCalendarDescriptor_Holiday)(nil),        // 67: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BusinessCalendarDescriptor.Holiday
+	(*FigureDescriptor_BusinessCalendarDescriptor_LocalDate)(nil),      // 68: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BusinessCalendarDescriptor.LocalDate
+	(*ticket.Ticket)(nil),                                              // 69: io.deephaven.proto.backplane.grpc.Ticket
+	(*application.FieldsChangeUpdate)(nil),                             // 70: io.deephaven.proto.backplane.grpc.FieldsChangeUpdate
 }
 var file_deephaven_proto_console_proto_depIdxs = []int32{
-	52, // 0: io.deephaven.proto.backplane.script.grpc.StartConsoleRequest.result_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket
-	52, // 1: io.deephaven.proto.backplane.script.grpc.StartConsoleResponse.result_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket
-	52, // 2: io.deephaven.proto.backplane.script.grpc.ExecuteCommandRequest.console_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket
-	53, // 3: io.deephaven.proto.backplane.script.grpc.ExecuteCommandResponse.changes:type_name -> io.deephaven.proto.backplane.grpc.FieldsChangeUpdate
-	52, // 4: io.deephaven.proto.backplane.script.grpc.BindTableToVariableRequest.console_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket
-	52, // 5: io.deephaven.proto.backplane.script.grpc.BindTableToVariableRequest.table_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket
-	52, // 6: io.deephaven.proto.backplane.script.grpc.CancelCommandRequest.console_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket
-	52, // 7: io.deephaven.proto.backplane.script.grpc.CancelCommandRequest.command_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket
-	24, // 8: io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest.open_document:type_name -> io.deephaven.proto.backplane.script.grpc.OpenDocumentRequest
-	27, // 9: io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest.change_document:type_name -> io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest
-	31, // 10: io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest.get_completion_items:type_name -> io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest
-	26, // 11: io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest.close_document:type_name -> io.deephaven.proto.backplane.script.grpc.CloseDocumentRequest
-	33, // 12: io.deephaven.proto.backplane.script.grpc.AutoCompleteResponse.completion_items:type_name -> io.deephaven.proto.backplane.script.grpc.GetCompletionItemsResponse
-	52, // 13: io.deephaven.proto.backplane.script.grpc.OpenDocumentRequest.console_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket
-	25, // 14: io.deephaven.proto.backplane.script.grpc.OpenDocumentRequest.text_document:type_name -> io.deephaven.proto.backplane.script.grpc.TextDocumentItem
-	52, // 15: io.deephaven.proto.backplane.script.grpc.CloseDocumentRequest.console_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket
-	29, // 16: io.deephaven.proto.backplane.script.grpc.CloseDocumentRequest.text_document:type_name -> io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier
-	52, // 17: io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.console_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket
-	29, // 18: io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.text_document:type_name -> io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier
-	37, // 19: io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.content_changes:type_name -> io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.TextDocumentContentChangeEvent
-	30, // 20: io.deephaven.proto.backplane.script.grpc.DocumentRange.start:type_name -> io.deephaven.proto.backplane.script.grpc.Position
-	30, // 21: io.deephaven.proto.backplane.script.grpc.DocumentRange.end:type_name -> io.deephaven.proto.backplane.script.grpc.Position
-	52, // 22: io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest.console_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket
-	32, // 23: io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest.context:type_name -> io.deephaven.proto.backplane.script.grpc.CompletionContext
-	29, // 24: io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest.text_document:type_name -> io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier
-	30, // 25: io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest.position:type_name -> io.deephaven.proto.backplane.script.grpc.Position
-	34, // 26: io.deephaven.proto.backplane.script.grpc.GetCompletionItemsResponse.items:type_name -> io.deephaven.proto.backplane.script.grpc.CompletionItem
-	35, // 27: io.deephaven.proto.backplane.script.grpc.CompletionItem.text_edit:type_name -> io.deephaven.proto.backplane.script.grpc.TextEdit
-	35, // 28: io.deephaven.proto.backplane.script.grpc.CompletionItem.additional_text_edits:type_name -> io.deephaven.proto.backplane.script.grpc.TextEdit
-	28, // 29: io.deephaven.proto.backplane.script.grpc.TextEdit.range:type_name -> io.deephaven.proto.backplane.script.grpc.DocumentRange
-	38, // 30: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.charts:type_name -> io.deephaven.proto.backplane.script.grpc.FigureDescriptor.ChartDescriptor
-	28, // 31: io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.TextDocumentContentChangeEvent.range:type_name -> io.deephaven.proto.backplane.script.grpc.DocumentRange
-	39, // 32: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.ChartDescriptor.series:type_name -> io.deephaven.proto.backplane.script.grpc.FigureDescriptor.SeriesDescriptor
-	40, // 33: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.ChartDescriptor.multi_series:type_name -> io.deephaven.proto.backplane.script.grpc.FigureDescriptor.MultiSeriesDescriptor
-	44, // 34: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.ChartDescriptor.axes:type_name -> io.deephaven.proto.backplane.script.grpc.FigureDescriptor.AxisDescriptor
-	2,  // 35: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.ChartDescriptor.chart_type:type_name -> io.deephaven.proto.backplane.script.grpc.FigureDescriptor.ChartDescriptor.ChartType
-	0,  // 36: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.SeriesDescriptor.plot_style:type_name -> io.deephaven.proto.backplane.script.grpc.FigureDescriptor.SeriesPlotStyle
-	47, // 37: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.SeriesDescriptor.data_sources:type_name -> io.deephaven.proto.backplane.script.grpc.FigureDescriptor.SourceDescriptor
-	0,  // 38: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.MultiSeriesDescriptor.plot_style:type_name -> io.deephaven.proto.backplane.script.grpc.FigureDescriptor.SeriesPlotStyle
-	41, // 39: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.MultiSeriesDescriptor.line_color:type_name -> io.deephaven.proto.backplane.script.grpc.FigureDescriptor.StringMapWithDefault
-	41, // 40: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.MultiSeriesDescriptor.point_color:type_name -> io.deephaven.proto.backplane.script.grpc.FigureDescriptor.StringMapWithDefault
-	43, // 41: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.MultiSeriesDescriptor.lines_visible:type_name -> io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BoolMapWithDefault
-	43, // 42: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.MultiSeriesDescriptor.points_visible:type_name -> io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BoolMapWithDefault
-	43, // 43: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.MultiSeriesDescriptor.gradient_visible:type_name -> io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BoolMapWithDefault
-	41, // 44: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.MultiSeriesDescriptor.point_label_format:type_name -> io.deephaven.proto.backplane.script.grpc.FigureDescriptor.StringMapWithDefault
-	41, // 45: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.MultiSeriesDescriptor.x_tool_tip_pattern:type_name -> io.deephaven.proto.backplane.script.grpc.FigureDescriptor.StringMapWithDefault
-	41, // 46: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.MultiSeriesDescriptor.y_tool_tip_pattern:type_name -> io.deephaven.proto.backplane.script.grpc.FigureDescriptor.StringMapWithDefault
-	41, // 47: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.MultiSeriesDescriptor.point_label:type_name -> io.deephaven.proto.backplane.script.grpc.FigureDescriptor.StringMapWithDefault
-	42, // 48: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.MultiSeriesDescriptor.point_size:type_name -> io.deephaven.proto.backplane.script.grpc.FigureDescriptor.DoubleMapWithDefault
-	41, // 49: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.MultiSeriesDescriptor.point_shape:type_name -> io.deephaven.proto.backplane.script.grpc.FigureDescriptor.StringMapWithDefault
-	46, // 50: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.MultiSeriesDescriptor.data_sources:type_name -> io.deephaven.proto.backplane.script.grpc.FigureDescriptor.MultiSeriesSourceDescriptor
-	3,  // 51: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.AxisDescriptor.format_type:type_name -> io.deephaven.proto.backplane.script.grpc.FigureDescriptor.AxisDescriptor.AxisFormatType
-	4,  // 52: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.AxisDescriptor.type:type_name -> io.deephaven.proto.backplane.script.grpc.FigureDescriptor.AxisDescriptor.AxisType
-	5,  // 53: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.AxisDescriptor.position:type_name -> io.deephaven.proto.backplane.script.grpc.FigureDescriptor.AxisDescriptor.AxisPosition
-	45, // 54: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.AxisDescriptor.business_calendar_descriptor:type_name -> io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BusinessCalendarDescriptor
-	6,  // 55: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BusinessCalendarDescriptor.business_days:type_name -> io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BusinessCalendarDescriptor.DayOfWeek
-	49, // 56: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BusinessCalendarDescriptor.business_periods:type_name -> io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BusinessCalendarDescriptor.BusinessPeriod
-	50, // 57: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BusinessCalendarDescriptor.holidays:type_name -> io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BusinessCalendarDescriptor.Holiday
-	1,  // 58: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.MultiSeriesSourceDescriptor.type:type_name -> io.deephaven.proto.backplane.script.grpc.FigureDescriptor.SourceType
-	1,  // 59: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.SourceDescriptor.type:type_name -> io.deephaven.proto.backplane.script.grpc.FigureDescriptor.SourceType
-	48, // 60: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.SourceDescriptor.one_click:type_name -> io.deephaven.proto.backplane.script.grpc.FigureDescriptor.OneClickDescriptor
-	51, // 61: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BusinessCalendarDescriptor.Holiday.date:type_name -> io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BusinessCalendarDescriptor.LocalDate
-	49, // 62: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BusinessCalendarDescriptor.Holiday.business_periods:type_name -> io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BusinessCalendarDescriptor.BusinessPeriod
-	7,  // 63: io.deephaven.proto.backplane.script.grpc.ConsoleService.GetConsoleTypes:input_type -> io.deephaven.proto.backplane.script.grpc.GetConsoleTypesRequest
-	9,  // 64: io.deephaven.proto.backplane.script.grpc.ConsoleService.StartConsole:input_type -> io.deephaven.proto.backplane.script.grpc.StartConsoleRequest
-	11, // 65: io.deephaven.proto.backplane.script.grpc.ConsoleService.GetHeapInfo:input_type -> io.deephaven.proto.backplane.script.grpc.GetHeapInfoRequest
-	13, // 66: io.deephaven.proto.backplane.script.grpc.ConsoleService.SubscribeToLogs:input_type -> io.deephaven.proto.backplane.script.grpc.LogSubscriptionRequest
-	15, // 67: io.deephaven.proto.backplane.script.grpc.ConsoleService.ExecuteCommand:input_type -> io.deephaven.proto.backplane.script.grpc.ExecuteCommandRequest
-	19, // 68: io.deephaven.proto.backplane.script.grpc.ConsoleService.CancelCommand:input_type -> io.deephaven.proto.backplane.script.grpc.CancelCommandRequest
-	17, // 69: io.deephaven.proto.backplane.script.grpc.ConsoleService.BindTableToVariable:input_type -> io.deephaven.proto.backplane.script.grpc.BindTableToVariableRequest
-	21, // 70: io.deephaven.proto.backplane.script.grpc.ConsoleService.AutoCompleteStream:input_type -> io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest
-	21, // 71: io.deephaven.proto.backplane.script.grpc.ConsoleService.OpenAutoCompleteStream:input_type -> io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest
-	21, // 72: io.deephaven.proto.backplane.script.grpc.ConsoleService.NextAutoCompleteStream:input_type -> io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest
-	8,  // 73: io.deephaven.proto.backplane.script.grpc.ConsoleService.GetConsoleTypes:output_type -> io.deephaven.proto.backplane.script.grpc.GetConsoleTypesResponse
-	10, // 74: io.deephaven.proto.backplane.script.grpc.ConsoleService.StartConsole:output_type -> io.deephaven.proto.backplane.script.grpc.StartConsoleResponse
-	12, // 75: io.deephaven.proto.backplane.script.grpc.ConsoleService.GetHeapInfo:output_type -> io.deephaven.proto.backplane.script.grpc.GetHeapInfoResponse
-	14, // 76: io.deephaven.proto.backplane.script.grpc.ConsoleService.SubscribeToLogs:output_type -> io.deephaven.proto.backplane.script.grpc.LogSubscriptionData
-	16, // 77: io.deephaven.proto.backplane.script.grpc.ConsoleService.ExecuteCommand:output_type -> io.deephaven.proto.backplane.script.grpc.ExecuteCommandResponse
-	20, // 78: io.deephaven.proto.backplane.script.grpc.ConsoleService.CancelCommand:output_type -> io.deephaven.proto.backplane.script.grpc.CancelCommandResponse
-	18, // 79: io.deephaven.proto.backplane.script.grpc.ConsoleService.BindTableToVariable:output_type -> io.deephaven.proto.backplane.script.grpc.BindTableToVariableResponse
-	22, // 80: io.deephaven.proto.backplane.script.grpc.ConsoleService.AutoCompleteStream:output_type -> io.deephaven.proto.backplane.script.grpc.AutoCompleteResponse
-	22, // 81: io.deephaven.proto.backplane.script.grpc.ConsoleService.OpenAutoCompleteStream:output_type -> io.deephaven.proto.backplane.script.grpc.AutoCompleteResponse
-	23, // 82: io.deephaven.proto.backplane.script.grpc.ConsoleService.NextAutoCompleteStream:output_type -> io.deephaven.proto.backplane.script.grpc.BrowserNextResponse
-	73, // [73:83] is the sub-list for method output_type
-	63, // [63:73] is the sub-list for method input_type
-	63, // [63:63] is the sub-list for extension type_name
-	63, // [63:63] is the sub-list for extension extendee
-	0,  // [0:63] is the sub-list for field type_name
+	69,  // 0: io.deephaven.proto.backplane.script.grpc.StartConsoleRequest.result_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket
+	69,  // 1: io.deephaven.proto.backplane.script.grpc.StartConsoleResponse.result_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket
+	69,  // 2: io.deephaven.proto.backplane.script.grpc.ExecuteCommandRequest.console_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket
+	70,  // 3: io.deephaven.proto.backplane.script.grpc.ExecuteCommandResponse.changes:type_name -> io.deephaven.proto.backplane.grpc.FieldsChangeUpdate
+	69,  // 4: io.deephaven.proto.backplane.script.grpc.BindTableToVariableRequest.console_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket
+	69,  // 5: io.deephaven.proto.backplane.script.grpc.BindTableToVariableRequest.table_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket
+	69,  // 6: io.deephaven.proto.backplane.script.grpc.CancelCommandRequest.console_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket
+	69,  // 7: io.deephaven.proto.backplane.script.grpc.CancelCommandRequest.command_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket
+	69,  // 8: io.deephaven.proto.backplane.script.grpc.CancelAutoCompleteRequest.console_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket
+	69,  // 9: io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest.console_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket
+	28,  // 10: io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest.open_document:type_name -> io.deephaven.proto.backplane.script.grpc.OpenDocumentRequest
+	31,  // 11: io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest.change_document:type_name -> io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest
+	36,  // 12: io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest.get_completion_items:type_name -> io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest
+	41,  // 13: io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest.get_signature_help:type_name -> io.deephaven.proto.backplane.script.grpc.GetSignatureHelpRequest
+	46,  // 14: io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest.get_hover:type_name -> io.deephaven.proto.backplane.script.grpc.GetHoverRequest
+	48,  // 15: io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest.get_diagnostic:type_name -> io.deephaven.proto.backplane.script.grpc.GetDiagnosticRequest
+	30,  // 16: io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest.close_document:type_name -> io.deephaven.proto.backplane.script.grpc.CloseDocumentRequest
+	38,  // 17: io.deephaven.proto.backplane.script.grpc.AutoCompleteResponse.completion_items:type_name -> io.deephaven.proto.backplane.script.grpc.GetCompletionItemsResponse
+	43,  // 18: io.deephaven.proto.backplane.script.grpc.AutoCompleteResponse.signatures:type_name -> io.deephaven.proto.backplane.script.grpc.GetSignatureHelpResponse
+	47,  // 19: io.deephaven.proto.backplane.script.grpc.AutoCompleteResponse.hover:type_name -> io.deephaven.proto.backplane.script.grpc.GetHoverResponse
+	49,  // 20: io.deephaven.proto.backplane.script.grpc.AutoCompleteResponse.diagnostic:type_name -> io.deephaven.proto.backplane.script.grpc.GetPullDiagnosticResponse
+	50,  // 21: io.deephaven.proto.backplane.script.grpc.AutoCompleteResponse.diagnostic_publish:type_name -> io.deephaven.proto.backplane.script.grpc.GetPublishDiagnosticResponse
+	69,  // 22: io.deephaven.proto.backplane.script.grpc.OpenDocumentRequest.console_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket
+	29,  // 23: io.deephaven.proto.backplane.script.grpc.OpenDocumentRequest.text_document:type_name -> io.deephaven.proto.backplane.script.grpc.TextDocumentItem
+	69,  // 24: io.deephaven.proto.backplane.script.grpc.CloseDocumentRequest.console_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket
+	33,  // 25: io.deephaven.proto.backplane.script.grpc.CloseDocumentRequest.text_document:type_name -> io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier
+	69,  // 26: io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.console_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket
+	33,  // 27: io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.text_document:type_name -> io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier
+	53,  // 28: io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.content_changes:type_name -> io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.TextDocumentContentChangeEvent
+	34,  // 29: io.deephaven.proto.backplane.script.grpc.DocumentRange.start:type_name -> io.deephaven.proto.backplane.script.grpc.Position
+	34,  // 30: io.deephaven.proto.backplane.script.grpc.DocumentRange.end:type_name -> io.deephaven.proto.backplane.script.grpc.Position
+	69,  // 31: io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest.console_id:type_name -> io.deephaven.proto.backplane.grpc.Ticket
+	37,  // 32: io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest.context:type_name -> io.deephaven.proto.backplane.script.grpc.CompletionContext
+	33,  // 33: io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest.text_document:type_name -> io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier
+	34,  // 34: io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequest.position:type_name -> io.deephaven.proto.backplane.script.grpc.Position
+	39,  // 35: io.deephaven.proto.backplane.script.grpc.GetCompletionItemsResponse.items:type_name -> io.deephaven.proto.backplane.script.grpc.CompletionItem
+	40,  // 36: io.deephaven.proto.backplane.script.grpc.CompletionItem.text_edit:type_name -> io.deephaven.proto.backplane.script.grpc.TextEdit
+	40,  // 37: io.deephaven.proto.backplane.script.grpc.CompletionItem.additional_text_edits:type_name -> io.deephaven.proto.backplane.script.grpc.TextEdit
+	35,  // 38: io.deephaven.proto.backplane.script.grpc.CompletionItem.documentation:type_name -> io.deephaven.proto.backplane.script.grpc.MarkupContent
+	32,  // 39: io.deephaven.proto.backplane.script.grpc.TextEdit.range:type_name -> io.deephaven.proto.backplane.script.grpc.DocumentRange
+	42,  // 40: io.deephaven.proto.backplane.script.grpc.GetSignatureHelpRequest.context:type_name -> io.deephaven.proto.backplane.script.grpc.SignatureHelpContext
+	33,  // 41: io.deephaven.proto.backplane.script.grpc.GetSignatureHelpRequest.text_document:type_name -> io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier
+	34,  // 42: io.deephaven.proto.backplane.script.grpc.GetSignatureHelpRequest.position:type_name -> io.deephaven.proto.backplane.script.grpc.Position
+	43,  // 43: io.deephaven.proto.backplane.script.grpc.SignatureHelpContext.active_signature_help:type_name -> io.deephaven.proto.backplane.script.grpc.GetSignatureHelpResponse
+	44,  // 44: io.deephaven.proto.backplane.script.grpc.GetSignatureHelpResponse.signatures:type_name -> io.deephaven.proto.backplane.script.grpc.SignatureInformation
+	35,  // 45: io.deephaven.proto.backplane.script.grpc.SignatureInformation.documentation:type_name -> io.deephaven.proto.backplane.script.grpc.MarkupContent
+	45,  // 46: io.deephaven.proto.backplane.script.grpc.SignatureInformation.parameters:type_name -> io.deephaven.proto.backplane.script.grpc.ParameterInformation
+	35,  // 47: io.deephaven.proto.backplane.script.grpc.ParameterInformation.documentation:type_name -> io.deephaven.proto.backplane.script.grpc.MarkupContent
+	33,  // 48: io.deephaven.proto.backplane.script.grpc.GetHoverRequest.text_document:type_name -> io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier
+	34,  // 49: io.deephaven.proto.backplane.script.grpc.GetHoverRequest.position:type_name -> io.deephaven.proto.backplane.script.grpc.Position
+	35,  // 50: io.deephaven.proto.backplane.script.grpc.GetHoverResponse.contents:type_name -> io.deephaven.proto.backplane.script.grpc.MarkupContent
+	32,  // 51: io.deephaven.proto.backplane.script.grpc.GetHoverResponse.range:type_name -> io.deephaven.proto.backplane.script.grpc.DocumentRange
+	33,  // 52: io.deephaven.proto.backplane.script.grpc.GetDiagnosticRequest.text_document:type_name -> io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier
+	51,  // 53: io.deephaven.proto.backplane.script.grpc.GetPullDiagnosticResponse.items:type_name -> io.deephaven.proto.backplane.script.grpc.Diagnostic
+	51,  // 54: io.deephaven.proto.backplane.script.grpc.GetPublishDiagnosticResponse.diagnostics:type_name -> io.deephaven.proto.backplane.script.grpc.Diagnostic
+	32,  // 55: io.deephaven.proto.backplane.script.grpc.Diagnostic.range:type_name -> io.deephaven.proto.backplane.script.grpc.DocumentRange
+	0,   // 56: io.deephaven.proto.backplane.script.grpc.Diagnostic.severity:type_name -> io.deephaven.proto.backplane.script.grpc.Diagnostic.DiagnosticSeverity
+	54,  // 57: io.deephaven.proto.backplane.script.grpc.Diagnostic.code_description:type_name -> io.deephaven.proto.backplane.script.grpc.Diagnostic.CodeDescription
+	1,   // 58: io.deephaven.proto.backplane.script.grpc.Diagnostic.tags:type_name -> io.deephaven.proto.backplane.script.grpc.Diagnostic.DiagnosticTag
+	55,  // 59: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.charts:type_name -> io.deephaven.proto.backplane.script.grpc.FigureDescriptor.ChartDescriptor
+	32,  // 60: io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.TextDocumentContentChangeEvent.range:type_name -> io.deephaven.proto.backplane.script.grpc.DocumentRange
+	56,  // 61: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.ChartDescriptor.series:type_name -> io.deephaven.proto.backplane.script.grpc.FigureDescriptor.SeriesDescriptor
+	57,  // 62: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.ChartDescriptor.multi_series:type_name -> io.deephaven.proto.backplane.script.grpc.FigureDescriptor.MultiSeriesDescriptor
+	61,  // 63: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.ChartDescriptor.axes:type_name -> io.deephaven.proto.backplane.script.grpc.FigureDescriptor.AxisDescriptor
+	4,   // 64: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.ChartDescriptor.chart_type:type_name -> io.deephaven.proto.backplane.script.grpc.FigureDescriptor.ChartDescriptor.ChartType
+	2,   // 65: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.SeriesDescriptor.plot_style:type_name -> io.deephaven.proto.backplane.script.grpc.FigureDescriptor.SeriesPlotStyle
+	64,  // 66: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.SeriesDescriptor.data_sources:type_name -> io.deephaven.proto.backplane.script.grpc.FigureDescriptor.SourceDescriptor
+	2,   // 67: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.MultiSeriesDescriptor.plot_style:type_name -> io.deephaven.proto.backplane.script.grpc.FigureDescriptor.SeriesPlotStyle
+	58,  // 68: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.MultiSeriesDescriptor.line_color:type_name -> io.deephaven.proto.backplane.script.grpc.FigureDescriptor.StringMapWithDefault
+	58,  // 69: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.MultiSeriesDescriptor.point_color:type_name -> io.deephaven.proto.backplane.script.grpc.FigureDescriptor.StringMapWithDefault
+	60,  // 70: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.MultiSeriesDescriptor.lines_visible:type_name -> io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BoolMapWithDefault
+	60,  // 71: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.MultiSeriesDescriptor.points_visible:type_name -> io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BoolMapWithDefault
+	60,  // 72: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.MultiSeriesDescriptor.gradient_visible:type_name -> io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BoolMapWithDefault
+	58,  // 73: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.MultiSeriesDescriptor.point_label_format:type_name -> io.deephaven.proto.backplane.script.grpc.FigureDescriptor.StringMapWithDefault
+	58,  // 74: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.MultiSeriesDescriptor.x_tool_tip_pattern:type_name -> io.deephaven.proto.backplane.script.grpc.FigureDescriptor.StringMapWithDefault
+	58,  // 75: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.MultiSeriesDescriptor.y_tool_tip_pattern:type_name -> io.deephaven.proto.backplane.script.grpc.FigureDescriptor.StringMapWithDefault
+	58,  // 76: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.MultiSeriesDescriptor.point_label:type_name -> io.deephaven.proto.backplane.script.grpc.FigureDescriptor.StringMapWithDefault
+	59,  // 77: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.MultiSeriesDescriptor.point_size:type_name -> io.deephaven.proto.backplane.script.grpc.FigureDescriptor.DoubleMapWithDefault
+	58,  // 78: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.MultiSeriesDescriptor.point_shape:type_name -> io.deephaven.proto.backplane.script.grpc.FigureDescriptor.StringMapWithDefault
+	63,  // 79: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.MultiSeriesDescriptor.data_sources:type_name -> io.deephaven.proto.backplane.script.grpc.FigureDescriptor.MultiSeriesSourceDescriptor
+	5,   // 80: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.AxisDescriptor.format_type:type_name -> io.deephaven.proto.backplane.script.grpc.FigureDescriptor.AxisDescriptor.AxisFormatType
+	6,   // 81: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.AxisDescriptor.type:type_name -> io.deephaven.proto.backplane.script.grpc.FigureDescriptor.AxisDescriptor.AxisType
+	7,   // 82: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.AxisDescriptor.position:type_name -> io.deephaven.proto.backplane.script.grpc.FigureDescriptor.AxisDescriptor.AxisPosition
+	62,  // 83: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.AxisDescriptor.business_calendar_descriptor:type_name -> io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BusinessCalendarDescriptor
+	8,   // 84: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BusinessCalendarDescriptor.business_days:type_name -> io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BusinessCalendarDescriptor.DayOfWeek
+	66,  // 85: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BusinessCalendarDescriptor.business_periods:type_name -> io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BusinessCalendarDescriptor.BusinessPeriod
+	67,  // 86: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BusinessCalendarDescriptor.holidays:type_name -> io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BusinessCalendarDescriptor.Holiday
+	3,   // 87: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.MultiSeriesSourceDescriptor.type:type_name -> io.deephaven.proto.backplane.script.grpc.FigureDescriptor.SourceType
+	3,   // 88: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.SourceDescriptor.type:type_name -> io.deephaven.proto.backplane.script.grpc.FigureDescriptor.SourceType
+	65,  // 89: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.SourceDescriptor.one_click:type_name -> io.deephaven.proto.backplane.script.grpc.FigureDescriptor.OneClickDescriptor
+	68,  // 90: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BusinessCalendarDescriptor.Holiday.date:type_name -> io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BusinessCalendarDescriptor.LocalDate
+	66,  // 91: io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BusinessCalendarDescriptor.Holiday.business_periods:type_name -> io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BusinessCalendarDescriptor.BusinessPeriod
+	9,   // 92: io.deephaven.proto.backplane.script.grpc.ConsoleService.GetConsoleTypes:input_type -> io.deephaven.proto.backplane.script.grpc.GetConsoleTypesRequest
+	11,  // 93: io.deephaven.proto.backplane.script.grpc.ConsoleService.StartConsole:input_type -> io.deephaven.proto.backplane.script.grpc.StartConsoleRequest
+	13,  // 94: io.deephaven.proto.backplane.script.grpc.ConsoleService.GetHeapInfo:input_type -> io.deephaven.proto.backplane.script.grpc.GetHeapInfoRequest
+	15,  // 95: io.deephaven.proto.backplane.script.grpc.ConsoleService.SubscribeToLogs:input_type -> io.deephaven.proto.backplane.script.grpc.LogSubscriptionRequest
+	17,  // 96: io.deephaven.proto.backplane.script.grpc.ConsoleService.ExecuteCommand:input_type -> io.deephaven.proto.backplane.script.grpc.ExecuteCommandRequest
+	21,  // 97: io.deephaven.proto.backplane.script.grpc.ConsoleService.CancelCommand:input_type -> io.deephaven.proto.backplane.script.grpc.CancelCommandRequest
+	19,  // 98: io.deephaven.proto.backplane.script.grpc.ConsoleService.BindTableToVariable:input_type -> io.deephaven.proto.backplane.script.grpc.BindTableToVariableRequest
+	25,  // 99: io.deephaven.proto.backplane.script.grpc.ConsoleService.AutoCompleteStream:input_type -> io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest
+	23,  // 100: io.deephaven.proto.backplane.script.grpc.ConsoleService.CancelAutoComplete:input_type -> io.deephaven.proto.backplane.script.grpc.CancelAutoCompleteRequest
+	25,  // 101: io.deephaven.proto.backplane.script.grpc.ConsoleService.OpenAutoCompleteStream:input_type -> io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest
+	25,  // 102: io.deephaven.proto.backplane.script.grpc.ConsoleService.NextAutoCompleteStream:input_type -> io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest
+	10,  // 103: io.deephaven.proto.backplane.script.grpc.ConsoleService.GetConsoleTypes:output_type -> io.deephaven.proto.backplane.script.grpc.GetConsoleTypesResponse
+	12,  // 104: io.deephaven.proto.backplane.script.grpc.ConsoleService.StartConsole:output_type -> io.deephaven.proto.backplane.script.grpc.StartConsoleResponse
+	14,  // 105: io.deephaven.proto.backplane.script.grpc.ConsoleService.GetHeapInfo:output_type -> io.deephaven.proto.backplane.script.grpc.GetHeapInfoResponse
+	16,  // 106: io.deephaven.proto.backplane.script.grpc.ConsoleService.SubscribeToLogs:output_type -> io.deephaven.proto.backplane.script.grpc.LogSubscriptionData
+	18,  // 107: io.deephaven.proto.backplane.script.grpc.ConsoleService.ExecuteCommand:output_type -> io.deephaven.proto.backplane.script.grpc.ExecuteCommandResponse
+	22,  // 108: io.deephaven.proto.backplane.script.grpc.ConsoleService.CancelCommand:output_type -> io.deephaven.proto.backplane.script.grpc.CancelCommandResponse
+	20,  // 109: io.deephaven.proto.backplane.script.grpc.ConsoleService.BindTableToVariable:output_type -> io.deephaven.proto.backplane.script.grpc.BindTableToVariableResponse
+	26,  // 110: io.deephaven.proto.backplane.script.grpc.ConsoleService.AutoCompleteStream:output_type -> io.deephaven.proto.backplane.script.grpc.AutoCompleteResponse
+	24,  // 111: io.deephaven.proto.backplane.script.grpc.ConsoleService.CancelAutoComplete:output_type -> io.deephaven.proto.backplane.script.grpc.CancelAutoCompleteResponse
+	26,  // 112: io.deephaven.proto.backplane.script.grpc.ConsoleService.OpenAutoCompleteStream:output_type -> io.deephaven.proto.backplane.script.grpc.AutoCompleteResponse
+	27,  // 113: io.deephaven.proto.backplane.script.grpc.ConsoleService.NextAutoCompleteStream:output_type -> io.deephaven.proto.backplane.script.grpc.BrowserNextResponse
+	103, // [103:114] is the sub-list for method output_type
+	92,  // [92:103] is the sub-list for method input_type
+	92,  // [92:92] is the sub-list for extension type_name
+	92,  // [92:92] is the sub-list for extension extendee
+	0,   // [0:92] is the sub-list for field type_name
 }
 
 func init() { file_deephaven_proto_console_proto_init() }
@@ -4952,7 +6453,7 @@ func file_deephaven_proto_console_proto_init() {
 			}
 		}
 		file_deephaven_proto_console_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*AutoCompleteRequest); i {
+			switch v := v.(*CancelAutoCompleteRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -4964,7 +6465,7 @@ func file_deephaven_proto_console_proto_init() {
 			}
 		}
 		file_deephaven_proto_console_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*AutoCompleteResponse); i {
+			switch v := v.(*CancelAutoCompleteResponse); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -4976,7 +6477,7 @@ func file_deephaven_proto_console_proto_init() {
 			}
 		}
 		file_deephaven_proto_console_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*BrowserNextResponse); i {
+			switch v := v.(*AutoCompleteRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -4988,7 +6489,7 @@ func file_deephaven_proto_console_proto_init() {
 			}
 		}
 		file_deephaven_proto_console_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*OpenDocumentRequest); i {
+			switch v := v.(*AutoCompleteResponse); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -5000,7 +6501,7 @@ func file_deephaven_proto_console_proto_init() {
 			}
 		}
 		file_deephaven_proto_console_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*TextDocumentItem); i {
+			switch v := v.(*BrowserNextResponse); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -5012,7 +6513,7 @@ func file_deephaven_proto_console_proto_init() {
 			}
 		}
 		file_deephaven_proto_console_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*CloseDocumentRequest); i {
+			switch v := v.(*OpenDocumentRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -5024,7 +6525,7 @@ func file_deephaven_proto_console_proto_init() {
 			}
 		}
 		file_deephaven_proto_console_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*ChangeDocumentRequest); i {
+			switch v := v.(*TextDocumentItem); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -5036,7 +6537,7 @@ func file_deephaven_proto_console_proto_init() {
 			}
 		}
 		file_deephaven_proto_console_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*DocumentRange); i {
+			switch v := v.(*CloseDocumentRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -5048,7 +6549,7 @@ func file_deephaven_proto_console_proto_init() {
 			}
 		}
 		file_deephaven_proto_console_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*VersionedTextDocumentIdentifier); i {
+			switch v := v.(*ChangeDocumentRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -5060,7 +6561,7 @@ func file_deephaven_proto_console_proto_init() {
 			}
 		}
 		file_deephaven_proto_console_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*Position); i {
+			switch v := v.(*DocumentRange); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -5072,7 +6573,7 @@ func file_deephaven_proto_console_proto_init() {
 			}
 		}
 		file_deephaven_proto_console_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GetCompletionItemsRequest); i {
+			switch v := v.(*VersionedTextDocumentIdentifier); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -5084,7 +6585,7 @@ func file_deephaven_proto_console_proto_init() {
 			}
 		}
 		file_deephaven_proto_console_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*CompletionContext); i {
+			switch v := v.(*Position); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -5096,7 +6597,7 @@ func file_deephaven_proto_console_proto_init() {
 			}
 		}
 		file_deephaven_proto_console_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GetCompletionItemsResponse); i {
+			switch v := v.(*MarkupContent); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -5108,7 +6609,7 @@ func file_deephaven_proto_console_proto_init() {
 			}
 		}
 		file_deephaven_proto_console_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*CompletionItem); i {
+			switch v := v.(*GetCompletionItemsRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -5120,7 +6621,7 @@ func file_deephaven_proto_console_proto_init() {
 			}
 		}
 		file_deephaven_proto_console_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*TextEdit); i {
+			switch v := v.(*CompletionContext); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -5132,7 +6633,7 @@ func file_deephaven_proto_console_proto_init() {
 			}
 		}
 		file_deephaven_proto_console_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*FigureDescriptor); i {
+			switch v := v.(*GetCompletionItemsResponse); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -5144,7 +6645,7 @@ func file_deephaven_proto_console_proto_init() {
 			}
 		}
 		file_deephaven_proto_console_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*ChangeDocumentRequest_TextDocumentContentChangeEvent); i {
+			switch v := v.(*CompletionItem); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -5156,7 +6657,7 @@ func file_deephaven_proto_console_proto_init() {
 			}
 		}
 		file_deephaven_proto_console_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*FigureDescriptor_ChartDescriptor); i {
+			switch v := v.(*TextEdit); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -5168,7 +6669,7 @@ func file_deephaven_proto_console_proto_init() {
 			}
 		}
 		file_deephaven_proto_console_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*FigureDescriptor_SeriesDescriptor); i {
+			switch v := v.(*GetSignatureHelpRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -5180,7 +6681,7 @@ func file_deephaven_proto_console_proto_init() {
 			}
 		}
 		file_deephaven_proto_console_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*FigureDescriptor_MultiSeriesDescriptor); i {
+			switch v := v.(*SignatureHelpContext); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -5192,7 +6693,7 @@ func file_deephaven_proto_console_proto_init() {
 			}
 		}
 		file_deephaven_proto_console_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*FigureDescriptor_StringMapWithDefault); i {
+			switch v := v.(*GetSignatureHelpResponse); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -5204,7 +6705,7 @@ func file_deephaven_proto_console_proto_init() {
 			}
 		}
 		file_deephaven_proto_console_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*FigureDescriptor_DoubleMapWithDefault); i {
+			switch v := v.(*SignatureInformation); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -5216,7 +6717,7 @@ func file_deephaven_proto_console_proto_init() {
 			}
 		}
 		file_deephaven_proto_console_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*FigureDescriptor_BoolMapWithDefault); i {
+			switch v := v.(*ParameterInformation); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -5228,7 +6729,7 @@ func file_deephaven_proto_console_proto_init() {
 			}
 		}
 		file_deephaven_proto_console_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*FigureDescriptor_AxisDescriptor); i {
+			switch v := v.(*GetHoverRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -5240,7 +6741,7 @@ func file_deephaven_proto_console_proto_init() {
 			}
 		}
 		file_deephaven_proto_console_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*FigureDescriptor_BusinessCalendarDescriptor); i {
+			switch v := v.(*GetHoverResponse); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -5252,7 +6753,7 @@ func file_deephaven_proto_console_proto_init() {
 			}
 		}
 		file_deephaven_proto_console_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*FigureDescriptor_MultiSeriesSourceDescriptor); i {
+			switch v := v.(*GetDiagnosticRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -5264,7 +6765,7 @@ func file_deephaven_proto_console_proto_init() {
 			}
 		}
 		file_deephaven_proto_console_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*FigureDescriptor_SourceDescriptor); i {
+			switch v := v.(*GetPullDiagnosticResponse); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -5276,7 +6777,7 @@ func file_deephaven_proto_console_proto_init() {
 			}
 		}
 		file_deephaven_proto_console_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*FigureDescriptor_OneClickDescriptor); i {
+			switch v := v.(*GetPublishDiagnosticResponse); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -5288,7 +6789,7 @@ func file_deephaven_proto_console_proto_init() {
 			}
 		}
 		file_deephaven_proto_console_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod); i {
+			switch v := v.(*Diagnostic); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -5300,7 +6801,7 @@ func file_deephaven_proto_console_proto_init() {
 			}
 		}
 		file_deephaven_proto_console_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*FigureDescriptor_BusinessCalendarDescriptor_Holiday); i {
+			switch v := v.(*FigureDescriptor); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -5312,6 +6813,186 @@ func file_deephaven_proto_console_proto_init() {
 			}
 		}
 		file_deephaven_proto_console_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*ChangeDocumentRequest_TextDocumentContentChangeEvent); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_deephaven_proto_console_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*Diagnostic_CodeDescription); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_deephaven_proto_console_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*FigureDescriptor_ChartDescriptor); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_deephaven_proto_console_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*FigureDescriptor_SeriesDescriptor); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_deephaven_proto_console_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*FigureDescriptor_MultiSeriesDescriptor); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_deephaven_proto_console_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*FigureDescriptor_StringMapWithDefault); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_deephaven_proto_console_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*FigureDescriptor_DoubleMapWithDefault); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_deephaven_proto_console_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*FigureDescriptor_BoolMapWithDefault); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_deephaven_proto_console_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*FigureDescriptor_AxisDescriptor); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_deephaven_proto_console_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*FigureDescriptor_BusinessCalendarDescriptor); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_deephaven_proto_console_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*FigureDescriptor_MultiSeriesSourceDescriptor); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_deephaven_proto_console_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*FigureDescriptor_SourceDescriptor); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_deephaven_proto_console_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*FigureDescriptor_OneClickDescriptor); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_deephaven_proto_console_proto_msgTypes[57].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*FigureDescriptor_BusinessCalendarDescriptor_BusinessPeriod); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_deephaven_proto_console_proto_msgTypes[58].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*FigureDescriptor_BusinessCalendarDescriptor_Holiday); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_deephaven_proto_console_proto_msgTypes[59].Exporter = func(v interface{}, i int) interface{} {
 			switch v := v.(*FigureDescriptor_BusinessCalendarDescriptor_LocalDate); i {
 			case 0:
 				return &v.state
@@ -5324,29 +7005,43 @@ func file_deephaven_proto_console_proto_init() {
 			}
 		}
 	}
-	file_deephaven_proto_console_proto_msgTypes[14].OneofWrappers = []interface{}{
+	file_deephaven_proto_console_proto_msgTypes[16].OneofWrappers = []interface{}{
 		(*AutoCompleteRequest_OpenDocument)(nil),
 		(*AutoCompleteRequest_ChangeDocument)(nil),
 		(*AutoCompleteRequest_GetCompletionItems)(nil),
+		(*AutoCompleteRequest_GetSignatureHelp)(nil),
+		(*AutoCompleteRequest_GetHover)(nil),
+		(*AutoCompleteRequest_GetDiagnostic)(nil),
 		(*AutoCompleteRequest_CloseDocument)(nil),
 	}
-	file_deephaven_proto_console_proto_msgTypes[15].OneofWrappers = []interface{}{
+	file_deephaven_proto_console_proto_msgTypes[17].OneofWrappers = []interface{}{
 		(*AutoCompleteResponse_CompletionItems)(nil),
+		(*AutoCompleteResponse_Signatures)(nil),
+		(*AutoCompleteResponse_Hover)(nil),
+		(*AutoCompleteResponse_Diagnostic)(nil),
+		(*AutoCompleteResponse_DiagnosticPublish)(nil),
 	}
-	file_deephaven_proto_console_proto_msgTypes[29].OneofWrappers = []interface{}{}
-	file_deephaven_proto_console_proto_msgTypes[31].OneofWrappers = []interface{}{}
-	file_deephaven_proto_console_proto_msgTypes[32].OneofWrappers = []interface{}{}
+	file_deephaven_proto_console_proto_msgTypes[33].OneofWrappers = []interface{}{}
 	file_deephaven_proto_console_proto_msgTypes[34].OneofWrappers = []interface{}{}
 	file_deephaven_proto_console_proto_msgTypes[35].OneofWrappers = []interface{}{}
-	file_deephaven_proto_console_proto_msgTypes[36].OneofWrappers = []interface{}{}
-	file_deephaven_proto_console_proto_msgTypes[37].OneofWrappers = []interface{}{}
+	file_deephaven_proto_console_proto_msgTypes[39].OneofWrappers = []interface{}{}
+	file_deephaven_proto_console_proto_msgTypes[40].OneofWrappers = []interface{}{}
+	file_deephaven_proto_console_proto_msgTypes[41].OneofWrappers = []interface{}{}
+	file_deephaven_proto_console_proto_msgTypes[42].OneofWrappers = []interface{}{}
+	file_deephaven_proto_console_proto_msgTypes[43].OneofWrappers = []interface{}{}
+	file_deephaven_proto_console_proto_msgTypes[46].OneofWrappers = []interface{}{}
+	file_deephaven_proto_console_proto_msgTypes[47].OneofWrappers = []interface{}{}
+	file_deephaven_proto_console_proto_msgTypes[49].OneofWrappers = []interface{}{}
+	file_deephaven_proto_console_proto_msgTypes[50].OneofWrappers = []interface{}{}
+	file_deephaven_proto_console_proto_msgTypes[51].OneofWrappers = []interface{}{}
+	file_deephaven_proto_console_proto_msgTypes[52].OneofWrappers = []interface{}{}
 	type x struct{}
 	out := protoimpl.TypeBuilder{
 		File: protoimpl.DescBuilder{
 			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
 			RawDescriptor: file_deephaven_proto_console_proto_rawDesc,
-			NumEnums:      7,
-			NumMessages:   45,
+			NumEnums:      9,
+			NumMessages:   60,
 			NumExtensions: 0,
 			NumServices:   1,
 		},
diff --git a/go/internal/proto/console/console_grpc.pb.go b/go/internal/proto/console/console_grpc.pb.go
index bfe7b49d798..9ca4354940e 100644
--- a/go/internal/proto/console/console_grpc.pb.go
+++ b/go/internal/proto/console/console_grpc.pb.go
@@ -34,6 +34,7 @@ type ConsoleServiceClient interface {
 	// be closed as well. A given document should only be edited within one stream at a
 	// time.
 	AutoCompleteStream(ctx context.Context, opts ...grpc.CallOption) (ConsoleService_AutoCompleteStreamClient, error)
+	CancelAutoComplete(ctx context.Context, in *CancelAutoCompleteRequest, opts ...grpc.CallOption) (*CancelAutoCompleteResponse, error)
 	// Half of the browser-based (browser's can't do bidirectional streams without websockets)
 	// implementation for AutoCompleteStream.
 	OpenAutoCompleteStream(ctx context.Context, in *AutoCompleteRequest, opts ...grpc.CallOption) (ConsoleService_OpenAutoCompleteStreamClient, error)
@@ -166,6 +167,15 @@ func (x *consoleServiceAutoCompleteStreamClient) Recv() (*AutoCompleteResponse,
 	return m, nil
 }
 
+func (c *consoleServiceClient) CancelAutoComplete(ctx context.Context, in *CancelAutoCompleteRequest, opts ...grpc.CallOption) (*CancelAutoCompleteResponse, error) {
+	out := new(CancelAutoCompleteResponse)
+	err := c.cc.Invoke(ctx, "/io.deephaven.proto.backplane.script.grpc.ConsoleService/CancelAutoComplete", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
 func (c *consoleServiceClient) OpenAutoCompleteStream(ctx context.Context, in *AutoCompleteRequest, opts ...grpc.CallOption) (ConsoleService_OpenAutoCompleteStreamClient, error) {
 	stream, err := c.cc.NewStream(ctx, &ConsoleService_ServiceDesc.Streams[2], "/io.deephaven.proto.backplane.script.grpc.ConsoleService/OpenAutoCompleteStream", opts...)
 	if err != nil {
@@ -223,6 +233,7 @@ type ConsoleServiceServer interface {
 	// be closed as well. A given document should only be edited within one stream at a
 	// time.
 	AutoCompleteStream(ConsoleService_AutoCompleteStreamServer) error
+	CancelAutoComplete(context.Context, *CancelAutoCompleteRequest) (*CancelAutoCompleteResponse, error)
 	// Half of the browser-based (browser's can't do bidirectional streams without websockets)
 	// implementation for AutoCompleteStream.
 	OpenAutoCompleteStream(*AutoCompleteRequest, ConsoleService_OpenAutoCompleteStreamServer) error
@@ -259,6 +270,9 @@ func (UnimplementedConsoleServiceServer) BindTableToVariable(context.Context, *B
 func (UnimplementedConsoleServiceServer) AutoCompleteStream(ConsoleService_AutoCompleteStreamServer) error {
 	return status.Errorf(codes.Unimplemented, "method AutoCompleteStream not implemented")
 }
+func (UnimplementedConsoleServiceServer) CancelAutoComplete(context.Context, *CancelAutoCompleteRequest) (*CancelAutoCompleteResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method CancelAutoComplete not implemented")
+}
 func (UnimplementedConsoleServiceServer) OpenAutoCompleteStream(*AutoCompleteRequest, ConsoleService_OpenAutoCompleteStreamServer) error {
 	return status.Errorf(codes.Unimplemented, "method OpenAutoCompleteStream not implemented")
 }
@@ -433,6 +447,24 @@ func (x *consoleServiceAutoCompleteStreamServer) Recv() (*AutoCompleteRequest, e
 	return m, nil
 }
 
+func _ConsoleService_CancelAutoComplete_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(CancelAutoCompleteRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(ConsoleServiceServer).CancelAutoComplete(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/io.deephaven.proto.backplane.script.grpc.ConsoleService/CancelAutoComplete",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(ConsoleServiceServer).CancelAutoComplete(ctx, req.(*CancelAutoCompleteRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
 func _ConsoleService_OpenAutoCompleteStream_Handler(srv interface{}, stream grpc.ServerStream) error {
 	m := new(AutoCompleteRequest)
 	if err := stream.RecvMsg(m); err != nil {
@@ -503,6 +535,10 @@ var ConsoleService_ServiceDesc = grpc.ServiceDesc{
 			MethodName: "BindTableToVariable",
 			Handler:    _ConsoleService_BindTableToVariable_Handler,
 		},
+		{
+			MethodName: "CancelAutoComplete",
+			Handler:    _ConsoleService_CancelAutoComplete_Handler,
+		},
 		{
 			MethodName: "NextAutoCompleteStream",
 			Handler:    _ConsoleService_NextAutoCompleteStream_Handler,
diff --git a/proto/proto-backplane-grpc/src/main/proto/deephaven/proto/console.proto b/proto/proto-backplane-grpc/src/main/proto/deephaven/proto/console.proto
index ba6487acbe6..dafc13bcb9d 100644
--- a/proto/proto-backplane-grpc/src/main/proto/deephaven/proto/console.proto
+++ b/proto/proto-backplane-grpc/src/main/proto/deephaven/proto/console.proto
@@ -34,6 +34,7 @@ service ConsoleService {
      * time.
      */
     rpc AutoCompleteStream(stream AutoCompleteRequest) returns (stream AutoCompleteResponse) {}
+    rpc CancelAutoComplete(CancelAutoCompleteRequest) returns (CancelAutoCompleteResponse) {}
 
     /*
      * Half of the browser-based (browser's can't do bidirectional streams without websockets)
@@ -120,7 +121,18 @@ message CancelCommandResponse {
 
 }
 
+message CancelAutoCompleteRequest {
+    io.deephaven.proto.backplane.grpc.Ticket console_id = 1;
+    int32 request_id = 2;
+}
+
+message CancelAutoCompleteResponse {
+
+}
+
 message AutoCompleteRequest {
+    io.deephaven.proto.backplane.grpc.Ticket console_id = 5;
+    int32 request_id = 6;
     oneof request {
         // Starts a document in a given console - to end, just close the stream, the server will hang up right away
         OpenDocumentRequest open_document = 1;
@@ -131,13 +143,28 @@ message AutoCompleteRequest {
         // Requests that a response be sent back with completion items
         GetCompletionItemsRequest get_completion_items = 3;
 
+        // Request for help about the method signature at the cursor
+        GetSignatureHelpRequest get_signature_help = 7;
+
+        // Request for help about what the user is hovering over
+        GetHoverRequest get_hover = 8;
+
+        // Request to perform file diagnostics
+        GetDiagnosticRequest get_diagnostic = 9;
+
         // Closes the document, indicating that it will not be referenced again
         CloseDocumentRequest close_document = 4;
     }
 }
 message AutoCompleteResponse {
+    int32 request_id = 2;
+    bool success = 3;
     oneof response {
         GetCompletionItemsResponse completion_items = 1;
+        GetSignatureHelpResponse signatures = 4;
+        GetHoverResponse hover = 5;
+        GetPullDiagnosticResponse diagnostic = 6;
+        GetPublishDiagnosticResponse diagnostic_publish = 7;
     }
 }
 
@@ -145,7 +172,7 @@ message BrowserNextResponse {
 }
 
 message OpenDocumentRequest {
-    io.deephaven.proto.backplane.grpc.Ticket console_id = 1;
+    io.deephaven.proto.backplane.grpc.Ticket console_id = 1 [deprecated=true];
     TextDocumentItem text_document = 2;
 }
 message TextDocumentItem {
@@ -156,13 +183,13 @@ message TextDocumentItem {
 }
 
 message CloseDocumentRequest {
-    io.deephaven.proto.backplane.grpc.Ticket console_id = 1;
-    VersionedTextDocumentIdentifier text_document = 2;//TODO actually just uri?
+    io.deephaven.proto.backplane.grpc.Ticket console_id = 1 [deprecated=true];
+    VersionedTextDocumentIdentifier text_document = 2;
 }
 
 message ChangeDocumentRequest {
-    io.deephaven.proto.backplane.grpc.Ticket console_id = 1;
-    VersionedTextDocumentIdentifier text_document = 2;//TODO actually just uri?
+    io.deephaven.proto.backplane.grpc.Ticket console_id = 1 [deprecated=true];
+    VersionedTextDocumentIdentifier text_document = 2;
     repeated TextDocumentContentChangeEvent content_changes = 3;
 
     message TextDocumentContentChangeEvent {
@@ -184,14 +211,19 @@ message Position {
     int32 character = 2;
 }
 
+message MarkupContent {
+    string kind = 1;
+    string value = 2;
+}
+
 message GetCompletionItemsRequest {
-    io.deephaven.proto.backplane.grpc.Ticket console_id = 1;
+    io.deephaven.proto.backplane.grpc.Ticket console_id = 1 [deprecated=true];
 
     CompletionContext context = 2;
     VersionedTextDocumentIdentifier text_document = 3;
     Position position = 4;
 
-    int32 request_id = 5;
+    int32 request_id = 5 [deprecated=true];
 }
 message CompletionContext {
     int32 trigger_kind = 1;
@@ -200,8 +232,10 @@ message CompletionContext {
 message GetCompletionItemsResponse {
     repeated CompletionItem items = 1;
 
-    int32 request_id = 2;
-    bool success = 3;
+    // Maintained for backwards compatibility. Use the same field on AutoCompleteResponse instead
+    int32 request_id = 2 [deprecated=true];
+    // Maintained for backwards compatibility. Use the same field on AutoCompleteResponse instead
+    bool success = 3 [deprecated=true];
 }
 message CompletionItem {
     int32 start = 1;
@@ -209,7 +243,7 @@ message CompletionItem {
     string label = 3;
     int32 kind = 4;
     string detail = 5;
-    string documentation = 6;
+    reserved 6; // Old documentation as a string. Was never used by us
     bool deprecated = 7;
     bool preselect = 8;
     TextEdit text_edit = 9;
@@ -218,12 +252,100 @@ message CompletionItem {
     int32 insert_text_format = 12;
     repeated TextEdit additional_text_edits = 13;
     repeated string commit_characters = 14;
+    MarkupContent documentation = 15;
 }
 message TextEdit {
     DocumentRange range = 1;
     string text = 2;
 }
 
+message GetSignatureHelpRequest {
+    SignatureHelpContext context = 1;
+    VersionedTextDocumentIdentifier text_document = 2;
+    Position position = 3;
+}
+message SignatureHelpContext {
+    int32 trigger_kind = 1;
+    optional string trigger_character = 2;
+    bool is_retrigger = 3;
+    GetSignatureHelpResponse active_signature_help = 4;
+}
+
+message GetSignatureHelpResponse {
+    repeated SignatureInformation signatures = 1;
+    optional int32 active_signature = 2;
+    optional int32 active_parameter = 3;
+}
+
+message SignatureInformation {
+    string label = 1;
+    MarkupContent documentation = 2;
+    repeated ParameterInformation parameters = 3;
+    optional int32 active_parameter = 4;
+}
+
+message ParameterInformation {
+    string label = 1;
+    MarkupContent documentation = 2;
+}
+
+message GetHoverRequest {
+    VersionedTextDocumentIdentifier text_document = 1;
+    Position position = 2;
+}
+
+message GetHoverResponse {
+    MarkupContent contents = 1;
+    DocumentRange range = 2;
+}
+
+message GetDiagnosticRequest {
+    VersionedTextDocumentIdentifier text_document = 1;
+    optional string identifier = 2;
+    optional string previous_result_id = 3;
+}
+
+message GetPullDiagnosticResponse {
+    string kind = 1;
+    optional string result_id = 2;
+    repeated Diagnostic items = 3;
+}
+
+message GetPublishDiagnosticResponse {
+    string uri = 1;
+    optional int32 version = 2;
+    repeated Diagnostic diagnostics = 3;
+}
+
+message Diagnostic {
+    enum DiagnosticSeverity {
+        NOT_SET_SEVERITY = 0;
+        ERROR = 1;
+        WARNING = 2;
+        INFORMATION = 3;
+        HINT = 4;
+    }
+
+    enum DiagnosticTag {
+        NOT_SET_TAG = 0;
+        UNNECESSARY = 1;
+        DEPRECATED = 2;
+    }
+
+    message CodeDescription {
+        string href = 1;
+    }
+
+    DocumentRange range = 1;
+    DiagnosticSeverity severity = 2;
+    optional string code = 3;
+    optional CodeDescription code_description = 4;
+    optional string source = 5;
+    string message = 6;
+    repeated DiagnosticTag tags = 7;
+    optional bytes data = 9;
+}
+
 message FigureDescriptor {
     optional string title = 1;
     string title_font = 2;
diff --git a/py/client/pydeephaven/proto/console_pb2.py b/py/client/pydeephaven/proto/console_pb2.py
index 665db1b815f..18b6880e6fb 100644
--- a/py/client/pydeephaven/proto/console_pb2.py
+++ b/py/client/pydeephaven/proto/console_pb2.py
@@ -15,7 +15,7 @@
 from pydeephaven.proto import application_pb2 as deephaven_dot_proto_dot_application__pb2
 
 
-DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1d\x64\x65\x65phaven/proto/console.proto\x12(io.deephaven.proto.backplane.script.grpc\x1a\x1c\x64\x65\x65phaven/proto/ticket.proto\x1a!deephaven/proto/application.proto\"\x18\n\x16GetConsoleTypesRequest\"0\n\x17GetConsoleTypesResponse\x12\x15\n\rconsole_types\x18\x01 \x03(\t\"i\n\x13StartConsoleRequest\x12<\n\tresult_id\x18\x01 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.Ticket\x12\x14\n\x0csession_type\x18\x02 \x01(\t\"T\n\x14StartConsoleResponse\x12<\n\tresult_id\x18\x01 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.Ticket\"\x14\n\x12GetHeapInfoRequest\"`\n\x13GetHeapInfoResponse\x12\x16\n\nmax_memory\x18\x01 \x01(\x03\x42\x02\x30\x01\x12\x18\n\x0ctotal_memory\x18\x02 \x01(\x03\x42\x02\x30\x01\x12\x17\n\x0b\x66ree_memory\x18\x03 \x01(\x03\x42\x02\x30\x01\"M\n\x16LogSubscriptionRequest\x12#\n\x17last_seen_log_timestamp\x18\x01 \x01(\x03\x42\x02\x30\x01\x12\x0e\n\x06levels\x18\x02 \x03(\t\"S\n\x13LogSubscriptionData\x12\x12\n\x06micros\x18\x01 \x01(\x03\x42\x02\x30\x01\x12\x11\n\tlog_level\x18\x02 \x01(\t\x12\x0f\n\x07message\x18\x03 \x01(\tJ\x04\x08\x04\x10\x05\"j\n\x15\x45xecuteCommandRequest\x12=\n\nconsole_id\x18\x01 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.Ticket\x12\x0c\n\x04\x63ode\x18\x03 \x01(\tJ\x04\x08\x02\x10\x03\"w\n\x16\x45xecuteCommandResponse\x12\x15\n\rerror_message\x18\x01 \x01(\t\x12\x46\n\x07\x63hanges\x18\x02 \x01(\x0b\x32\x35.io.deephaven.proto.backplane.grpc.FieldsChangeUpdate\"\xb5\x01\n\x1a\x42indTableToVariableRequest\x12=\n\nconsole_id\x18\x01 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.Ticket\x12\x15\n\rvariable_name\x18\x03 \x01(\t\x12;\n\x08table_id\x18\x04 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.TicketJ\x04\x08\x02\x10\x03\"\x1d\n\x1b\x42indTableToVariableResponse\"\x94\x01\n\x14\x43\x61ncelCommandRequest\x12=\n\nconsole_id\x18\x01 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.Ticket\x12=\n\ncommand_id\x18\x02 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.Ticket\"\x17\n\x15\x43\x61ncelCommandResponse\"\x93\x03\n\x13\x41utoCompleteRequest\x12V\n\ropen_document\x18\x01 \x01(\x0b\x32=.io.deephaven.proto.backplane.script.grpc.OpenDocumentRequestH\x00\x12Z\n\x0f\x63hange_document\x18\x02 \x01(\x0b\x32?.io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequestH\x00\x12\x63\n\x14get_completion_items\x18\x03 \x01(\x0b\x32\x43.io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequestH\x00\x12X\n\x0e\x63lose_document\x18\x04 \x01(\x0b\x32>.io.deephaven.proto.backplane.script.grpc.CloseDocumentRequestH\x00\x42\t\n\x07request\"\x84\x01\n\x14\x41utoCompleteResponse\x12`\n\x10\x63ompletion_items\x18\x01 \x01(\x0b\x32\x44.io.deephaven.proto.backplane.script.grpc.GetCompletionItemsResponseH\x00\x42\n\n\x08response\"\x15\n\x13\x42rowserNextResponse\"\xa7\x01\n\x13OpenDocumentRequest\x12=\n\nconsole_id\x18\x01 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.Ticket\x12Q\n\rtext_document\x18\x02 \x01(\x0b\x32:.io.deephaven.proto.backplane.script.grpc.TextDocumentItem\"S\n\x10TextDocumentItem\x12\x0b\n\x03uri\x18\x01 \x01(\t\x12\x13\n\x0blanguage_id\x18\x02 \x01(\t\x12\x0f\n\x07version\x18\x03 \x01(\x05\x12\x0c\n\x04text\x18\x04 \x01(\t\"\xb7\x01\n\x14\x43loseDocumentRequest\x12=\n\nconsole_id\x18\x01 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.Ticket\x12`\n\rtext_document\x18\x02 \x01(\x0b\x32I.io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier\"\xc0\x03\n\x15\x43hangeDocumentRequest\x12=\n\nconsole_id\x18\x01 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.Ticket\x12`\n\rtext_document\x18\x02 \x01(\x0b\x32I.io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier\x12w\n\x0f\x63ontent_changes\x18\x03 \x03(\x0b\x32^.io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.TextDocumentContentChangeEvent\x1a\x8c\x01\n\x1eTextDocumentContentChangeEvent\x12\x46\n\x05range\x18\x01 \x01(\x0b\x32\x37.io.deephaven.proto.backplane.script.grpc.DocumentRange\x12\x14\n\x0crange_length\x18\x02 \x01(\x05\x12\x0c\n\x04text\x18\x03 \x01(\t\"\x93\x01\n\rDocumentRange\x12\x41\n\x05start\x18\x01 \x01(\x0b\x32\x32.io.deephaven.proto.backplane.script.grpc.Position\x12?\n\x03\x65nd\x18\x02 \x01(\x0b\x32\x32.io.deephaven.proto.backplane.script.grpc.Position\"?\n\x1fVersionedTextDocumentIdentifier\x12\x0b\n\x03uri\x18\x01 \x01(\t\x12\x0f\n\x07version\x18\x02 \x01(\x05\"+\n\x08Position\x12\x0c\n\x04line\x18\x01 \x01(\x05\x12\x11\n\tcharacter\x18\x02 \x01(\x05\"\xe4\x02\n\x19GetCompletionItemsRequest\x12=\n\nconsole_id\x18\x01 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.Ticket\x12L\n\x07\x63ontext\x18\x02 \x01(\x0b\x32;.io.deephaven.proto.backplane.script.grpc.CompletionContext\x12`\n\rtext_document\x18\x03 \x01(\x0b\x32I.io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier\x12\x44\n\x08position\x18\x04 \x01(\x0b\x32\x32.io.deephaven.proto.backplane.script.grpc.Position\x12\x12\n\nrequest_id\x18\x05 \x01(\x05\"D\n\x11\x43ompletionContext\x12\x14\n\x0ctrigger_kind\x18\x01 \x01(\x05\x12\x19\n\x11trigger_character\x18\x02 \x01(\t\"\x8a\x01\n\x1aGetCompletionItemsResponse\x12G\n\x05items\x18\x01 \x03(\x0b\x32\x38.io.deephaven.proto.backplane.script.grpc.CompletionItem\x12\x12\n\nrequest_id\x18\x02 \x01(\x05\x12\x0f\n\x07success\x18\x03 \x01(\x08\"\x93\x03\n\x0e\x43ompletionItem\x12\r\n\x05start\x18\x01 \x01(\x05\x12\x0e\n\x06length\x18\x02 \x01(\x05\x12\r\n\x05label\x18\x03 \x01(\t\x12\x0c\n\x04kind\x18\x04 \x01(\x05\x12\x0e\n\x06\x64\x65tail\x18\x05 \x01(\t\x12\x15\n\rdocumentation\x18\x06 \x01(\t\x12\x12\n\ndeprecated\x18\x07 \x01(\x08\x12\x11\n\tpreselect\x18\x08 \x01(\x08\x12\x45\n\ttext_edit\x18\t \x01(\x0b\x32\x32.io.deephaven.proto.backplane.script.grpc.TextEdit\x12\x11\n\tsort_text\x18\n \x01(\t\x12\x13\n\x0b\x66ilter_text\x18\x0b \x01(\t\x12\x1a\n\x12insert_text_format\x18\x0c \x01(\x05\x12Q\n\x15\x61\x64\x64itional_text_edits\x18\r \x03(\x0b\x32\x32.io.deephaven.proto.backplane.script.grpc.TextEdit\x12\x19\n\x11\x63ommit_characters\x18\x0e \x03(\t\"`\n\x08TextEdit\x12\x46\n\x05range\x18\x01 \x01(\x0b\x32\x37.io.deephaven.proto.backplane.script.grpc.DocumentRange\x12\x0c\n\x04text\x18\x02 \x01(\t\"\xe6\x30\n\x10\x46igureDescriptor\x12\x12\n\x05title\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x12\n\ntitle_font\x18\x02 \x01(\t\x12\x13\n\x0btitle_color\x18\x03 \x01(\t\x12\x1b\n\x0fupdate_interval\x18\x07 \x01(\x03\x42\x02\x30\x01\x12\x0c\n\x04\x63ols\x18\x08 \x01(\x05\x12\x0c\n\x04rows\x18\t \x01(\x05\x12Z\n\x06\x63harts\x18\n \x03(\x0b\x32J.io.deephaven.proto.backplane.script.grpc.FigureDescriptor.ChartDescriptor\x12\x0e\n\x06\x65rrors\x18\r \x03(\t\x1a\xce\x05\n\x0f\x43hartDescriptor\x12\x0f\n\x07\x63olspan\x18\x01 \x01(\x05\x12\x0f\n\x07rowspan\x18\x02 \x01(\x05\x12[\n\x06series\x18\x03 \x03(\x0b\x32K.io.deephaven.proto.backplane.script.grpc.FigureDescriptor.SeriesDescriptor\x12\x66\n\x0cmulti_series\x18\x04 \x03(\x0b\x32P.io.deephaven.proto.backplane.script.grpc.FigureDescriptor.MultiSeriesDescriptor\x12W\n\x04\x61xes\x18\x05 \x03(\x0b\x32I.io.deephaven.proto.backplane.script.grpc.FigureDescriptor.AxisDescriptor\x12h\n\nchart_type\x18\x06 \x01(\x0e\x32T.io.deephaven.proto.backplane.script.grpc.FigureDescriptor.ChartDescriptor.ChartType\x12\x12\n\x05title\x18\x07 \x01(\tH\x00\x88\x01\x01\x12\x12\n\ntitle_font\x18\x08 \x01(\t\x12\x13\n\x0btitle_color\x18\t \x01(\t\x12\x13\n\x0bshow_legend\x18\n \x01(\x08\x12\x13\n\x0blegend_font\x18\x0b \x01(\t\x12\x14\n\x0clegend_color\x18\x0c \x01(\t\x12\x0c\n\x04is3d\x18\r \x01(\x08\x12\x0e\n\x06\x63olumn\x18\x0e \x01(\x05\x12\x0b\n\x03row\x18\x0f \x01(\x05\"_\n\tChartType\x12\x06\n\x02XY\x10\x00\x12\x07\n\x03PIE\x10\x01\x12\x0c\n\x04OHLC\x10\x02\x1a\x02\x08\x01\x12\x0c\n\x08\x43\x41TEGORY\x10\x03\x12\x07\n\x03XYZ\x10\x04\x12\x0f\n\x0b\x43\x41TEGORY_3D\x10\x05\x12\x0b\n\x07TREEMAP\x10\x06\x42\x08\n\x06_title\x1a\xfe\x04\n\x10SeriesDescriptor\x12^\n\nplot_style\x18\x01 \x01(\x0e\x32J.io.deephaven.proto.backplane.script.grpc.FigureDescriptor.SeriesPlotStyle\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x1a\n\rlines_visible\x18\x03 \x01(\x08H\x00\x88\x01\x01\x12\x1b\n\x0eshapes_visible\x18\x04 \x01(\x08H\x01\x88\x01\x01\x12\x18\n\x10gradient_visible\x18\x05 \x01(\x08\x12\x12\n\nline_color\x18\x06 \x01(\t\x12\x1f\n\x12point_label_format\x18\x08 \x01(\tH\x02\x88\x01\x01\x12\x1f\n\x12x_tool_tip_pattern\x18\t \x01(\tH\x03\x88\x01\x01\x12\x1f\n\x12y_tool_tip_pattern\x18\n \x01(\tH\x04\x88\x01\x01\x12\x13\n\x0bshape_label\x18\x0b \x01(\t\x12\x17\n\nshape_size\x18\x0c \x01(\x01H\x05\x88\x01\x01\x12\x13\n\x0bshape_color\x18\r \x01(\t\x12\r\n\x05shape\x18\x0e \x01(\t\x12\x61\n\x0c\x64\x61ta_sources\x18\x0f \x03(\x0b\x32K.io.deephaven.proto.backplane.script.grpc.FigureDescriptor.SourceDescriptorB\x10\n\x0e_lines_visibleB\x11\n\x0f_shapes_visibleB\x15\n\x13_point_label_formatB\x15\n\x13_x_tool_tip_patternB\x15\n\x13_y_tool_tip_patternB\r\n\x0b_shape_sizeJ\x04\x08\x07\x10\x08\x1a\xec\n\n\x15MultiSeriesDescriptor\x12^\n\nplot_style\x18\x01 \x01(\x0e\x32J.io.deephaven.proto.backplane.script.grpc.FigureDescriptor.SeriesPlotStyle\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x63\n\nline_color\x18\x03 \x01(\x0b\x32O.io.deephaven.proto.backplane.script.grpc.FigureDescriptor.StringMapWithDefault\x12\x64\n\x0bpoint_color\x18\x04 \x01(\x0b\x32O.io.deephaven.proto.backplane.script.grpc.FigureDescriptor.StringMapWithDefault\x12\x64\n\rlines_visible\x18\x05 \x01(\x0b\x32M.io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BoolMapWithDefault\x12\x65\n\x0epoints_visible\x18\x06 \x01(\x0b\x32M.io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BoolMapWithDefault\x12g\n\x10gradient_visible\x18\x07 \x01(\x0b\x32M.io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BoolMapWithDefault\x12k\n\x12point_label_format\x18\x08 \x01(\x0b\x32O.io.deephaven.proto.backplane.script.grpc.FigureDescriptor.StringMapWithDefault\x12k\n\x12x_tool_tip_pattern\x18\t \x01(\x0b\x32O.io.deephaven.proto.backplane.script.grpc.FigureDescriptor.StringMapWithDefault\x12k\n\x12y_tool_tip_pattern\x18\n \x01(\x0b\x32O.io.deephaven.proto.backplane.script.grpc.FigureDescriptor.StringMapWithDefault\x12\x64\n\x0bpoint_label\x18\x0b \x01(\x0b\x32O.io.deephaven.proto.backplane.script.grpc.FigureDescriptor.StringMapWithDefault\x12\x63\n\npoint_size\x18\x0c \x01(\x0b\x32O.io.deephaven.proto.backplane.script.grpc.FigureDescriptor.DoubleMapWithDefault\x12\x64\n\x0bpoint_shape\x18\r \x01(\x0b\x32O.io.deephaven.proto.backplane.script.grpc.FigureDescriptor.StringMapWithDefault\x12l\n\x0c\x64\x61ta_sources\x18\x0e \x03(\x0b\x32V.io.deephaven.proto.backplane.script.grpc.FigureDescriptor.MultiSeriesSourceDescriptor\x1a\x64\n\x14StringMapWithDefault\x12\x1b\n\x0e\x64\x65\x66\x61ult_string\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x0c\n\x04keys\x18\x02 \x03(\t\x12\x0e\n\x06values\x18\x03 \x03(\tB\x11\n\x0f_default_string\x1a\x64\n\x14\x44oubleMapWithDefault\x12\x1b\n\x0e\x64\x65\x66\x61ult_double\x18\x01 \x01(\x01H\x00\x88\x01\x01\x12\x0c\n\x04keys\x18\x02 \x03(\t\x12\x0e\n\x06values\x18\x03 \x03(\x01\x42\x11\n\x0f_default_double\x1a^\n\x12\x42oolMapWithDefault\x12\x19\n\x0c\x64\x65\x66\x61ult_bool\x18\x01 \x01(\x08H\x00\x88\x01\x01\x12\x0c\n\x04keys\x18\x02 \x03(\t\x12\x0e\n\x06values\x18\x03 \x03(\x08\x42\x0f\n\r_default_bool\x1a\xa6\x08\n\x0e\x41xisDescriptor\x12\n\n\x02id\x18\x01 \x01(\t\x12m\n\x0b\x66ormat_type\x18\x02 \x01(\x0e\x32X.io.deephaven.proto.backplane.script.grpc.FigureDescriptor.AxisDescriptor.AxisFormatType\x12`\n\x04type\x18\x03 \x01(\x0e\x32R.io.deephaven.proto.backplane.script.grpc.FigureDescriptor.AxisDescriptor.AxisType\x12h\n\x08position\x18\x04 \x01(\x0e\x32V.io.deephaven.proto.backplane.script.grpc.FigureDescriptor.AxisDescriptor.AxisPosition\x12\x0b\n\x03log\x18\x05 \x01(\x08\x12\r\n\x05label\x18\x06 \x01(\t\x12\x12\n\nlabel_font\x18\x07 \x01(\t\x12\x12\n\nticks_font\x18\x08 \x01(\t\x12\x1b\n\x0e\x66ormat_pattern\x18\t \x01(\tH\x00\x88\x01\x01\x12\r\n\x05\x63olor\x18\n \x01(\t\x12\x11\n\tmin_range\x18\x0b \x01(\x01\x12\x11\n\tmax_range\x18\x0c \x01(\x01\x12\x1b\n\x13minor_ticks_visible\x18\r \x01(\x08\x12\x1b\n\x13major_ticks_visible\x18\x0e \x01(\x08\x12\x18\n\x10minor_tick_count\x18\x0f \x01(\x05\x12$\n\x17gap_between_major_ticks\x18\x10 \x01(\x01H\x01\x88\x01\x01\x12\x1c\n\x14major_tick_locations\x18\x11 \x03(\x01\x12\x18\n\x10tick_label_angle\x18\x12 \x01(\x01\x12\x0e\n\x06invert\x18\x13 \x01(\x08\x12\x14\n\x0cis_time_axis\x18\x14 \x01(\x08\x12{\n\x1c\x62usiness_calendar_descriptor\x18\x15 \x01(\x0b\x32U.io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BusinessCalendarDescriptor\"*\n\x0e\x41xisFormatType\x12\x0c\n\x08\x43\x41TEGORY\x10\x00\x12\n\n\x06NUMBER\x10\x01\"C\n\x08\x41xisType\x12\x05\n\x01X\x10\x00\x12\x05\n\x01Y\x10\x01\x12\t\n\x05SHAPE\x10\x02\x12\x08\n\x04SIZE\x10\x03\x12\t\n\x05LABEL\x10\x04\x12\t\n\x05\x43OLOR\x10\x05\"B\n\x0c\x41xisPosition\x12\x07\n\x03TOP\x10\x00\x12\n\n\x06\x42OTTOM\x10\x01\x12\x08\n\x04LEFT\x10\x02\x12\t\n\x05RIGHT\x10\x03\x12\x08\n\x04NONE\x10\x04\x42\x11\n\x0f_format_patternB\x1a\n\x18_gap_between_major_ticks\x1a\xf0\x06\n\x1a\x42usinessCalendarDescriptor\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x11\n\ttime_zone\x18\x02 \x01(\t\x12v\n\rbusiness_days\x18\x03 \x03(\x0e\x32_.io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BusinessCalendarDescriptor.DayOfWeek\x12~\n\x10\x62usiness_periods\x18\x04 \x03(\x0b\x32\x64.io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BusinessCalendarDescriptor.BusinessPeriod\x12o\n\x08holidays\x18\x05 \x03(\x0b\x32].io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BusinessCalendarDescriptor.Holiday\x1a-\n\x0e\x42usinessPeriod\x12\x0c\n\x04open\x18\x01 \x01(\t\x12\r\n\x05\x63lose\x18\x02 \x01(\t\x1a\xf8\x01\n\x07Holiday\x12m\n\x04\x64\x61te\x18\x01 \x01(\x0b\x32_.io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BusinessCalendarDescriptor.LocalDate\x12~\n\x10\x62usiness_periods\x18\x02 \x03(\x0b\x32\x64.io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BusinessCalendarDescriptor.BusinessPeriod\x1a\x35\n\tLocalDate\x12\x0c\n\x04year\x18\x01 \x01(\x05\x12\r\n\x05month\x18\x02 \x01(\x05\x12\x0b\n\x03\x64\x61y\x18\x03 \x01(\x05\"g\n\tDayOfWeek\x12\n\n\x06SUNDAY\x10\x00\x12\n\n\x06MONDAY\x10\x01\x12\x0b\n\x07TUESDAY\x10\x02\x12\r\n\tWEDNESDAY\x10\x03\x12\x0c\n\x08THURSDAY\x10\x04\x12\n\n\x06\x46RIDAY\x10\x05\x12\x0c\n\x08SATURDAY\x10\x06\x1a\xb6\x01\n\x1bMultiSeriesSourceDescriptor\x12\x0f\n\x07\x61xis_id\x18\x01 \x01(\t\x12S\n\x04type\x18\x02 \x01(\x0e\x32\x45.io.deephaven.proto.backplane.script.grpc.FigureDescriptor.SourceType\x12\x1c\n\x14partitioned_table_id\x18\x03 \x01(\x05\x12\x13\n\x0b\x63olumn_name\x18\x04 \x01(\t\x1a\xb4\x02\n\x10SourceDescriptor\x12\x0f\n\x07\x61xis_id\x18\x01 \x01(\t\x12S\n\x04type\x18\x02 \x01(\x0e\x32\x45.io.deephaven.proto.backplane.script.grpc.FigureDescriptor.SourceType\x12\x10\n\x08table_id\x18\x03 \x01(\x05\x12\x1c\n\x14partitioned_table_id\x18\x04 \x01(\x05\x12\x13\n\x0b\x63olumn_name\x18\x05 \x01(\t\x12\x13\n\x0b\x63olumn_type\x18\x06 \x01(\t\x12`\n\tone_click\x18\x07 \x01(\x0b\x32M.io.deephaven.proto.backplane.script.grpc.FigureDescriptor.OneClickDescriptor\x1a\x63\n\x12OneClickDescriptor\x12\x0f\n\x07\x63olumns\x18\x01 \x03(\t\x12\x14\n\x0c\x63olumn_types\x18\x02 \x03(\t\x12&\n\x1erequire_all_filters_to_display\x18\x03 \x01(\x08\"\xa6\x01\n\x0fSeriesPlotStyle\x12\x07\n\x03\x42\x41R\x10\x00\x12\x0f\n\x0bSTACKED_BAR\x10\x01\x12\x08\n\x04LINE\x10\x02\x12\x08\n\x04\x41REA\x10\x03\x12\x10\n\x0cSTACKED_AREA\x10\x04\x12\x07\n\x03PIE\x10\x05\x12\r\n\tHISTOGRAM\x10\x06\x12\x08\n\x04OHLC\x10\x07\x12\x0b\n\x07SCATTER\x10\x08\x12\x08\n\x04STEP\x10\t\x12\r\n\tERROR_BAR\x10\n\x12\x0b\n\x07TREEMAP\x10\x0b\"\xd2\x01\n\nSourceType\x12\x05\n\x01X\x10\x00\x12\x05\n\x01Y\x10\x01\x12\x05\n\x01Z\x10\x02\x12\t\n\x05X_LOW\x10\x03\x12\n\n\x06X_HIGH\x10\x04\x12\t\n\x05Y_LOW\x10\x05\x12\n\n\x06Y_HIGH\x10\x06\x12\x08\n\x04TIME\x10\x07\x12\x08\n\x04OPEN\x10\x08\x12\x08\n\x04HIGH\x10\t\x12\x07\n\x03LOW\x10\n\x12\t\n\x05\x43LOSE\x10\x0b\x12\t\n\x05SHAPE\x10\x0c\x12\x08\n\x04SIZE\x10\r\x12\t\n\x05LABEL\x10\x0e\x12\t\n\x05\x43OLOR\x10\x0f\x12\n\n\x06PARENT\x10\x10\x12\x0e\n\nHOVER_TEXT\x10\x11\x12\x08\n\x04TEXT\x10\x12\x42\x08\n\x06_titleJ\x04\x08\x0b\x10\x0cJ\x04\x08\x0c\x10\r2\x8e\x0c\n\x0e\x43onsoleService\x12\x98\x01\n\x0fGetConsoleTypes\x12@.io.deephaven.proto.backplane.script.grpc.GetConsoleTypesRequest\x1a\x41.io.deephaven.proto.backplane.script.grpc.GetConsoleTypesResponse\"\x00\x12\x8f\x01\n\x0cStartConsole\x12=.io.deephaven.proto.backplane.script.grpc.StartConsoleRequest\x1a>.io.deephaven.proto.backplane.script.grpc.StartConsoleResponse\"\x00\x12\x8c\x01\n\x0bGetHeapInfo\x12<.io.deephaven.proto.backplane.script.grpc.GetHeapInfoRequest\x1a=.io.deephaven.proto.backplane.script.grpc.GetHeapInfoResponse\"\x00\x12\x96\x01\n\x0fSubscribeToLogs\x12@.io.deephaven.proto.backplane.script.grpc.LogSubscriptionRequest\x1a=.io.deephaven.proto.backplane.script.grpc.LogSubscriptionData\"\x00\x30\x01\x12\x95\x01\n\x0e\x45xecuteCommand\x12?.io.deephaven.proto.backplane.script.grpc.ExecuteCommandRequest\x1a@.io.deephaven.proto.backplane.script.grpc.ExecuteCommandResponse\"\x00\x12\x92\x01\n\rCancelCommand\x12>.io.deephaven.proto.backplane.script.grpc.CancelCommandRequest\x1a?.io.deephaven.proto.backplane.script.grpc.CancelCommandResponse\"\x00\x12\xa4\x01\n\x13\x42indTableToVariable\x12\x44.io.deephaven.proto.backplane.script.grpc.BindTableToVariableRequest\x1a\x45.io.deephaven.proto.backplane.script.grpc.BindTableToVariableResponse\"\x00\x12\x99\x01\n\x12\x41utoCompleteStream\x12=.io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest\x1a>.io.deephaven.proto.backplane.script.grpc.AutoCompleteResponse\"\x00(\x01\x30\x01\x12\x9b\x01\n\x16OpenAutoCompleteStream\x12=.io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest\x1a>.io.deephaven.proto.backplane.script.grpc.AutoCompleteResponse\"\x00\x30\x01\x12\x98\x01\n\x16NextAutoCompleteStream\x12=.io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest\x1a=.io.deephaven.proto.backplane.script.grpc.BrowserNextResponse\"\x00\x42\x43H\x01P\x01Z=github.com/deephaven/deephaven-core/go/internal/proto/consoleb\x06proto3')
+DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1d\x64\x65\x65phaven/proto/console.proto\x12(io.deephaven.proto.backplane.script.grpc\x1a\x1c\x64\x65\x65phaven/proto/ticket.proto\x1a!deephaven/proto/application.proto\"\x18\n\x16GetConsoleTypesRequest\"0\n\x17GetConsoleTypesResponse\x12\x15\n\rconsole_types\x18\x01 \x03(\t\"i\n\x13StartConsoleRequest\x12<\n\tresult_id\x18\x01 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.Ticket\x12\x14\n\x0csession_type\x18\x02 \x01(\t\"T\n\x14StartConsoleResponse\x12<\n\tresult_id\x18\x01 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.Ticket\"\x14\n\x12GetHeapInfoRequest\"`\n\x13GetHeapInfoResponse\x12\x16\n\nmax_memory\x18\x01 \x01(\x03\x42\x02\x30\x01\x12\x18\n\x0ctotal_memory\x18\x02 \x01(\x03\x42\x02\x30\x01\x12\x17\n\x0b\x66ree_memory\x18\x03 \x01(\x03\x42\x02\x30\x01\"M\n\x16LogSubscriptionRequest\x12#\n\x17last_seen_log_timestamp\x18\x01 \x01(\x03\x42\x02\x30\x01\x12\x0e\n\x06levels\x18\x02 \x03(\t\"S\n\x13LogSubscriptionData\x12\x12\n\x06micros\x18\x01 \x01(\x03\x42\x02\x30\x01\x12\x11\n\tlog_level\x18\x02 \x01(\t\x12\x0f\n\x07message\x18\x03 \x01(\tJ\x04\x08\x04\x10\x05\"j\n\x15\x45xecuteCommandRequest\x12=\n\nconsole_id\x18\x01 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.Ticket\x12\x0c\n\x04\x63ode\x18\x03 \x01(\tJ\x04\x08\x02\x10\x03\"w\n\x16\x45xecuteCommandResponse\x12\x15\n\rerror_message\x18\x01 \x01(\t\x12\x46\n\x07\x63hanges\x18\x02 \x01(\x0b\x32\x35.io.deephaven.proto.backplane.grpc.FieldsChangeUpdate\"\xb5\x01\n\x1a\x42indTableToVariableRequest\x12=\n\nconsole_id\x18\x01 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.Ticket\x12\x15\n\rvariable_name\x18\x03 \x01(\t\x12;\n\x08table_id\x18\x04 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.TicketJ\x04\x08\x02\x10\x03\"\x1d\n\x1b\x42indTableToVariableResponse\"\x94\x01\n\x14\x43\x61ncelCommandRequest\x12=\n\nconsole_id\x18\x01 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.Ticket\x12=\n\ncommand_id\x18\x02 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.Ticket\"\x17\n\x15\x43\x61ncelCommandResponse\"n\n\x19\x43\x61ncelAutoCompleteRequest\x12=\n\nconsole_id\x18\x01 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.Ticket\x12\x12\n\nrequest_id\x18\x02 \x01(\x05\"\x1c\n\x1a\x43\x61ncelAutoCompleteResponse\"\xf1\x05\n\x13\x41utoCompleteRequest\x12=\n\nconsole_id\x18\x05 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.Ticket\x12\x12\n\nrequest_id\x18\x06 \x01(\x05\x12V\n\ropen_document\x18\x01 \x01(\x0b\x32=.io.deephaven.proto.backplane.script.grpc.OpenDocumentRequestH\x00\x12Z\n\x0f\x63hange_document\x18\x02 \x01(\x0b\x32?.io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequestH\x00\x12\x63\n\x14get_completion_items\x18\x03 \x01(\x0b\x32\x43.io.deephaven.proto.backplane.script.grpc.GetCompletionItemsRequestH\x00\x12_\n\x12get_signature_help\x18\x07 \x01(\x0b\x32\x41.io.deephaven.proto.backplane.script.grpc.GetSignatureHelpRequestH\x00\x12N\n\tget_hover\x18\x08 \x01(\x0b\x32\x39.io.deephaven.proto.backplane.script.grpc.GetHoverRequestH\x00\x12X\n\x0eget_diagnostic\x18\t \x01(\x0b\x32>.io.deephaven.proto.backplane.script.grpc.GetDiagnosticRequestH\x00\x12X\n\x0e\x63lose_document\x18\x04 \x01(\x0b\x32>.io.deephaven.proto.backplane.script.grpc.CloseDocumentRequestH\x00\x42\t\n\x07request\"\x91\x04\n\x14\x41utoCompleteResponse\x12\x12\n\nrequest_id\x18\x02 \x01(\x05\x12\x0f\n\x07success\x18\x03 \x01(\x08\x12`\n\x10\x63ompletion_items\x18\x01 \x01(\x0b\x32\x44.io.deephaven.proto.backplane.script.grpc.GetCompletionItemsResponseH\x00\x12X\n\nsignatures\x18\x04 \x01(\x0b\x32\x42.io.deephaven.proto.backplane.script.grpc.GetSignatureHelpResponseH\x00\x12K\n\x05hover\x18\x05 \x01(\x0b\x32:.io.deephaven.proto.backplane.script.grpc.GetHoverResponseH\x00\x12Y\n\ndiagnostic\x18\x06 \x01(\x0b\x32\x43.io.deephaven.proto.backplane.script.grpc.GetPullDiagnosticResponseH\x00\x12\x64\n\x12\x64iagnostic_publish\x18\x07 \x01(\x0b\x32\x46.io.deephaven.proto.backplane.script.grpc.GetPublishDiagnosticResponseH\x00\x42\n\n\x08response\"\x15\n\x13\x42rowserNextResponse\"\xab\x01\n\x13OpenDocumentRequest\x12\x41\n\nconsole_id\x18\x01 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.TicketB\x02\x18\x01\x12Q\n\rtext_document\x18\x02 \x01(\x0b\x32:.io.deephaven.proto.backplane.script.grpc.TextDocumentItem\"S\n\x10TextDocumentItem\x12\x0b\n\x03uri\x18\x01 \x01(\t\x12\x13\n\x0blanguage_id\x18\x02 \x01(\t\x12\x0f\n\x07version\x18\x03 \x01(\x05\x12\x0c\n\x04text\x18\x04 \x01(\t\"\xbb\x01\n\x14\x43loseDocumentRequest\x12\x41\n\nconsole_id\x18\x01 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.TicketB\x02\x18\x01\x12`\n\rtext_document\x18\x02 \x01(\x0b\x32I.io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier\"\xc4\x03\n\x15\x43hangeDocumentRequest\x12\x41\n\nconsole_id\x18\x01 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.TicketB\x02\x18\x01\x12`\n\rtext_document\x18\x02 \x01(\x0b\x32I.io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier\x12w\n\x0f\x63ontent_changes\x18\x03 \x03(\x0b\x32^.io.deephaven.proto.backplane.script.grpc.ChangeDocumentRequest.TextDocumentContentChangeEvent\x1a\x8c\x01\n\x1eTextDocumentContentChangeEvent\x12\x46\n\x05range\x18\x01 \x01(\x0b\x32\x37.io.deephaven.proto.backplane.script.grpc.DocumentRange\x12\x14\n\x0crange_length\x18\x02 \x01(\x05\x12\x0c\n\x04text\x18\x03 \x01(\t\"\x93\x01\n\rDocumentRange\x12\x41\n\x05start\x18\x01 \x01(\x0b\x32\x32.io.deephaven.proto.backplane.script.grpc.Position\x12?\n\x03\x65nd\x18\x02 \x01(\x0b\x32\x32.io.deephaven.proto.backplane.script.grpc.Position\"?\n\x1fVersionedTextDocumentIdentifier\x12\x0b\n\x03uri\x18\x01 \x01(\t\x12\x0f\n\x07version\x18\x02 \x01(\x05\"+\n\x08Position\x12\x0c\n\x04line\x18\x01 \x01(\x05\x12\x11\n\tcharacter\x18\x02 \x01(\x05\",\n\rMarkupContent\x12\x0c\n\x04kind\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\"\xec\x02\n\x19GetCompletionItemsRequest\x12\x41\n\nconsole_id\x18\x01 \x01(\x0b\x32).io.deephaven.proto.backplane.grpc.TicketB\x02\x18\x01\x12L\n\x07\x63ontext\x18\x02 \x01(\x0b\x32;.io.deephaven.proto.backplane.script.grpc.CompletionContext\x12`\n\rtext_document\x18\x03 \x01(\x0b\x32I.io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier\x12\x44\n\x08position\x18\x04 \x01(\x0b\x32\x32.io.deephaven.proto.backplane.script.grpc.Position\x12\x16\n\nrequest_id\x18\x05 \x01(\x05\x42\x02\x18\x01\"D\n\x11\x43ompletionContext\x12\x14\n\x0ctrigger_kind\x18\x01 \x01(\x05\x12\x19\n\x11trigger_character\x18\x02 \x01(\t\"\x92\x01\n\x1aGetCompletionItemsResponse\x12G\n\x05items\x18\x01 \x03(\x0b\x32\x38.io.deephaven.proto.backplane.script.grpc.CompletionItem\x12\x16\n\nrequest_id\x18\x02 \x01(\x05\x42\x02\x18\x01\x12\x13\n\x07success\x18\x03 \x01(\x08\x42\x02\x18\x01\"\xd2\x03\n\x0e\x43ompletionItem\x12\r\n\x05start\x18\x01 \x01(\x05\x12\x0e\n\x06length\x18\x02 \x01(\x05\x12\r\n\x05label\x18\x03 \x01(\t\x12\x0c\n\x04kind\x18\x04 \x01(\x05\x12\x0e\n\x06\x64\x65tail\x18\x05 \x01(\t\x12\x12\n\ndeprecated\x18\x07 \x01(\x08\x12\x11\n\tpreselect\x18\x08 \x01(\x08\x12\x45\n\ttext_edit\x18\t \x01(\x0b\x32\x32.io.deephaven.proto.backplane.script.grpc.TextEdit\x12\x11\n\tsort_text\x18\n \x01(\t\x12\x13\n\x0b\x66ilter_text\x18\x0b \x01(\t\x12\x1a\n\x12insert_text_format\x18\x0c \x01(\x05\x12Q\n\x15\x61\x64\x64itional_text_edits\x18\r \x03(\x0b\x32\x32.io.deephaven.proto.backplane.script.grpc.TextEdit\x12\x19\n\x11\x63ommit_characters\x18\x0e \x03(\t\x12N\n\rdocumentation\x18\x0f \x01(\x0b\x32\x37.io.deephaven.proto.backplane.script.grpc.MarkupContentJ\x04\x08\x06\x10\x07\"`\n\x08TextEdit\x12\x46\n\x05range\x18\x01 \x01(\x0b\x32\x37.io.deephaven.proto.backplane.script.grpc.DocumentRange\x12\x0c\n\x04text\x18\x02 \x01(\t\"\x92\x02\n\x17GetSignatureHelpRequest\x12O\n\x07\x63ontext\x18\x01 \x01(\x0b\x32>.io.deephaven.proto.backplane.script.grpc.SignatureHelpContext\x12`\n\rtext_document\x18\x02 \x01(\x0b\x32I.io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier\x12\x44\n\x08position\x18\x03 \x01(\x0b\x32\x32.io.deephaven.proto.backplane.script.grpc.Position\"\xdb\x01\n\x14SignatureHelpContext\x12\x14\n\x0ctrigger_kind\x18\x01 \x01(\x05\x12\x1e\n\x11trigger_character\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x0cis_retrigger\x18\x03 \x01(\x08\x12\x61\n\x15\x61\x63tive_signature_help\x18\x04 \x01(\x0b\x32\x42.io.deephaven.proto.backplane.script.grpc.GetSignatureHelpResponseB\x14\n\x12_trigger_character\"\xd6\x01\n\x18GetSignatureHelpResponse\x12R\n\nsignatures\x18\x01 \x03(\x0b\x32>.io.deephaven.proto.backplane.script.grpc.SignatureInformation\x12\x1d\n\x10\x61\x63tive_signature\x18\x02 \x01(\x05H\x00\x88\x01\x01\x12\x1d\n\x10\x61\x63tive_parameter\x18\x03 \x01(\x05H\x01\x88\x01\x01\x42\x13\n\x11_active_signatureB\x13\n\x11_active_parameter\"\xfd\x01\n\x14SignatureInformation\x12\r\n\x05label\x18\x01 \x01(\t\x12N\n\rdocumentation\x18\x02 \x01(\x0b\x32\x37.io.deephaven.proto.backplane.script.grpc.MarkupContent\x12R\n\nparameters\x18\x03 \x03(\x0b\x32>.io.deephaven.proto.backplane.script.grpc.ParameterInformation\x12\x1d\n\x10\x61\x63tive_parameter\x18\x04 \x01(\x05H\x00\x88\x01\x01\x42\x13\n\x11_active_parameter\"u\n\x14ParameterInformation\x12\r\n\x05label\x18\x01 \x01(\t\x12N\n\rdocumentation\x18\x02 \x01(\x0b\x32\x37.io.deephaven.proto.backplane.script.grpc.MarkupContent\"\xb9\x01\n\x0fGetHoverRequest\x12`\n\rtext_document\x18\x01 \x01(\x0b\x32I.io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier\x12\x44\n\x08position\x18\x02 \x01(\x0b\x32\x32.io.deephaven.proto.backplane.script.grpc.Position\"\xa5\x01\n\x10GetHoverResponse\x12I\n\x08\x63ontents\x18\x01 \x01(\x0b\x32\x37.io.deephaven.proto.backplane.script.grpc.MarkupContent\x12\x46\n\x05range\x18\x02 \x01(\x0b\x32\x37.io.deephaven.proto.backplane.script.grpc.DocumentRange\"\xd8\x01\n\x14GetDiagnosticRequest\x12`\n\rtext_document\x18\x01 \x01(\x0b\x32I.io.deephaven.proto.backplane.script.grpc.VersionedTextDocumentIdentifier\x12\x17\n\nidentifier\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x1f\n\x12previous_result_id\x18\x03 \x01(\tH\x01\x88\x01\x01\x42\r\n\x0b_identifierB\x15\n\x13_previous_result_id\"\x94\x01\n\x19GetPullDiagnosticResponse\x12\x0c\n\x04kind\x18\x01 \x01(\t\x12\x16\n\tresult_id\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x43\n\x05items\x18\x03 \x03(\x0b\x32\x34.io.deephaven.proto.backplane.script.grpc.DiagnosticB\x0c\n\n_result_id\"\x98\x01\n\x1cGetPublishDiagnosticResponse\x12\x0b\n\x03uri\x18\x01 \x01(\t\x12\x14\n\x07version\x18\x02 \x01(\x05H\x00\x88\x01\x01\x12I\n\x0b\x64iagnostics\x18\x03 \x03(\x0b\x32\x34.io.deephaven.proto.backplane.script.grpc.DiagnosticB\n\n\x08_version\"\xa7\x05\n\nDiagnostic\x12\x46\n\x05range\x18\x01 \x01(\x0b\x32\x37.io.deephaven.proto.backplane.script.grpc.DocumentRange\x12Y\n\x08severity\x18\x02 \x01(\x0e\x32G.io.deephaven.proto.backplane.script.grpc.Diagnostic.DiagnosticSeverity\x12\x11\n\x04\x63ode\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x63\n\x10\x63ode_description\x18\x04 \x01(\x0b\x32\x44.io.deephaven.proto.backplane.script.grpc.Diagnostic.CodeDescriptionH\x01\x88\x01\x01\x12\x13\n\x06source\x18\x05 \x01(\tH\x02\x88\x01\x01\x12\x0f\n\x07message\x18\x06 \x01(\t\x12P\n\x04tags\x18\x07 \x03(\x0e\x32\x42.io.deephaven.proto.backplane.script.grpc.Diagnostic.DiagnosticTag\x12\x11\n\x04\x64\x61ta\x18\t \x01(\x0cH\x03\x88\x01\x01\x1a\x1f\n\x0f\x43odeDescription\x12\x0c\n\x04href\x18\x01 \x01(\t\"]\n\x12\x44iagnosticSeverity\x12\x14\n\x10NOT_SET_SEVERITY\x10\x00\x12\t\n\x05\x45RROR\x10\x01\x12\x0b\n\x07WARNING\x10\x02\x12\x0f\n\x0bINFORMATION\x10\x03\x12\x08\n\x04HINT\x10\x04\"A\n\rDiagnosticTag\x12\x0f\n\x0bNOT_SET_TAG\x10\x00\x12\x0f\n\x0bUNNECESSARY\x10\x01\x12\x0e\n\nDEPRECATED\x10\x02\x42\x07\n\x05_codeB\x13\n\x11_code_descriptionB\t\n\x07_sourceB\x07\n\x05_data\"\xe6\x30\n\x10\x46igureDescriptor\x12\x12\n\x05title\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x12\n\ntitle_font\x18\x02 \x01(\t\x12\x13\n\x0btitle_color\x18\x03 \x01(\t\x12\x1b\n\x0fupdate_interval\x18\x07 \x01(\x03\x42\x02\x30\x01\x12\x0c\n\x04\x63ols\x18\x08 \x01(\x05\x12\x0c\n\x04rows\x18\t \x01(\x05\x12Z\n\x06\x63harts\x18\n \x03(\x0b\x32J.io.deephaven.proto.backplane.script.grpc.FigureDescriptor.ChartDescriptor\x12\x0e\n\x06\x65rrors\x18\r \x03(\t\x1a\xce\x05\n\x0f\x43hartDescriptor\x12\x0f\n\x07\x63olspan\x18\x01 \x01(\x05\x12\x0f\n\x07rowspan\x18\x02 \x01(\x05\x12[\n\x06series\x18\x03 \x03(\x0b\x32K.io.deephaven.proto.backplane.script.grpc.FigureDescriptor.SeriesDescriptor\x12\x66\n\x0cmulti_series\x18\x04 \x03(\x0b\x32P.io.deephaven.proto.backplane.script.grpc.FigureDescriptor.MultiSeriesDescriptor\x12W\n\x04\x61xes\x18\x05 \x03(\x0b\x32I.io.deephaven.proto.backplane.script.grpc.FigureDescriptor.AxisDescriptor\x12h\n\nchart_type\x18\x06 \x01(\x0e\x32T.io.deephaven.proto.backplane.script.grpc.FigureDescriptor.ChartDescriptor.ChartType\x12\x12\n\x05title\x18\x07 \x01(\tH\x00\x88\x01\x01\x12\x12\n\ntitle_font\x18\x08 \x01(\t\x12\x13\n\x0btitle_color\x18\t \x01(\t\x12\x13\n\x0bshow_legend\x18\n \x01(\x08\x12\x13\n\x0blegend_font\x18\x0b \x01(\t\x12\x14\n\x0clegend_color\x18\x0c \x01(\t\x12\x0c\n\x04is3d\x18\r \x01(\x08\x12\x0e\n\x06\x63olumn\x18\x0e \x01(\x05\x12\x0b\n\x03row\x18\x0f \x01(\x05\"_\n\tChartType\x12\x06\n\x02XY\x10\x00\x12\x07\n\x03PIE\x10\x01\x12\x0c\n\x04OHLC\x10\x02\x1a\x02\x08\x01\x12\x0c\n\x08\x43\x41TEGORY\x10\x03\x12\x07\n\x03XYZ\x10\x04\x12\x0f\n\x0b\x43\x41TEGORY_3D\x10\x05\x12\x0b\n\x07TREEMAP\x10\x06\x42\x08\n\x06_title\x1a\xfe\x04\n\x10SeriesDescriptor\x12^\n\nplot_style\x18\x01 \x01(\x0e\x32J.io.deephaven.proto.backplane.script.grpc.FigureDescriptor.SeriesPlotStyle\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x1a\n\rlines_visible\x18\x03 \x01(\x08H\x00\x88\x01\x01\x12\x1b\n\x0eshapes_visible\x18\x04 \x01(\x08H\x01\x88\x01\x01\x12\x18\n\x10gradient_visible\x18\x05 \x01(\x08\x12\x12\n\nline_color\x18\x06 \x01(\t\x12\x1f\n\x12point_label_format\x18\x08 \x01(\tH\x02\x88\x01\x01\x12\x1f\n\x12x_tool_tip_pattern\x18\t \x01(\tH\x03\x88\x01\x01\x12\x1f\n\x12y_tool_tip_pattern\x18\n \x01(\tH\x04\x88\x01\x01\x12\x13\n\x0bshape_label\x18\x0b \x01(\t\x12\x17\n\nshape_size\x18\x0c \x01(\x01H\x05\x88\x01\x01\x12\x13\n\x0bshape_color\x18\r \x01(\t\x12\r\n\x05shape\x18\x0e \x01(\t\x12\x61\n\x0c\x64\x61ta_sources\x18\x0f \x03(\x0b\x32K.io.deephaven.proto.backplane.script.grpc.FigureDescriptor.SourceDescriptorB\x10\n\x0e_lines_visibleB\x11\n\x0f_shapes_visibleB\x15\n\x13_point_label_formatB\x15\n\x13_x_tool_tip_patternB\x15\n\x13_y_tool_tip_patternB\r\n\x0b_shape_sizeJ\x04\x08\x07\x10\x08\x1a\xec\n\n\x15MultiSeriesDescriptor\x12^\n\nplot_style\x18\x01 \x01(\x0e\x32J.io.deephaven.proto.backplane.script.grpc.FigureDescriptor.SeriesPlotStyle\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x63\n\nline_color\x18\x03 \x01(\x0b\x32O.io.deephaven.proto.backplane.script.grpc.FigureDescriptor.StringMapWithDefault\x12\x64\n\x0bpoint_color\x18\x04 \x01(\x0b\x32O.io.deephaven.proto.backplane.script.grpc.FigureDescriptor.StringMapWithDefault\x12\x64\n\rlines_visible\x18\x05 \x01(\x0b\x32M.io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BoolMapWithDefault\x12\x65\n\x0epoints_visible\x18\x06 \x01(\x0b\x32M.io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BoolMapWithDefault\x12g\n\x10gradient_visible\x18\x07 \x01(\x0b\x32M.io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BoolMapWithDefault\x12k\n\x12point_label_format\x18\x08 \x01(\x0b\x32O.io.deephaven.proto.backplane.script.grpc.FigureDescriptor.StringMapWithDefault\x12k\n\x12x_tool_tip_pattern\x18\t \x01(\x0b\x32O.io.deephaven.proto.backplane.script.grpc.FigureDescriptor.StringMapWithDefault\x12k\n\x12y_tool_tip_pattern\x18\n \x01(\x0b\x32O.io.deephaven.proto.backplane.script.grpc.FigureDescriptor.StringMapWithDefault\x12\x64\n\x0bpoint_label\x18\x0b \x01(\x0b\x32O.io.deephaven.proto.backplane.script.grpc.FigureDescriptor.StringMapWithDefault\x12\x63\n\npoint_size\x18\x0c \x01(\x0b\x32O.io.deephaven.proto.backplane.script.grpc.FigureDescriptor.DoubleMapWithDefault\x12\x64\n\x0bpoint_shape\x18\r \x01(\x0b\x32O.io.deephaven.proto.backplane.script.grpc.FigureDescriptor.StringMapWithDefault\x12l\n\x0c\x64\x61ta_sources\x18\x0e \x03(\x0b\x32V.io.deephaven.proto.backplane.script.grpc.FigureDescriptor.MultiSeriesSourceDescriptor\x1a\x64\n\x14StringMapWithDefault\x12\x1b\n\x0e\x64\x65\x66\x61ult_string\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x0c\n\x04keys\x18\x02 \x03(\t\x12\x0e\n\x06values\x18\x03 \x03(\tB\x11\n\x0f_default_string\x1a\x64\n\x14\x44oubleMapWithDefault\x12\x1b\n\x0e\x64\x65\x66\x61ult_double\x18\x01 \x01(\x01H\x00\x88\x01\x01\x12\x0c\n\x04keys\x18\x02 \x03(\t\x12\x0e\n\x06values\x18\x03 \x03(\x01\x42\x11\n\x0f_default_double\x1a^\n\x12\x42oolMapWithDefault\x12\x19\n\x0c\x64\x65\x66\x61ult_bool\x18\x01 \x01(\x08H\x00\x88\x01\x01\x12\x0c\n\x04keys\x18\x02 \x03(\t\x12\x0e\n\x06values\x18\x03 \x03(\x08\x42\x0f\n\r_default_bool\x1a\xa6\x08\n\x0e\x41xisDescriptor\x12\n\n\x02id\x18\x01 \x01(\t\x12m\n\x0b\x66ormat_type\x18\x02 \x01(\x0e\x32X.io.deephaven.proto.backplane.script.grpc.FigureDescriptor.AxisDescriptor.AxisFormatType\x12`\n\x04type\x18\x03 \x01(\x0e\x32R.io.deephaven.proto.backplane.script.grpc.FigureDescriptor.AxisDescriptor.AxisType\x12h\n\x08position\x18\x04 \x01(\x0e\x32V.io.deephaven.proto.backplane.script.grpc.FigureDescriptor.AxisDescriptor.AxisPosition\x12\x0b\n\x03log\x18\x05 \x01(\x08\x12\r\n\x05label\x18\x06 \x01(\t\x12\x12\n\nlabel_font\x18\x07 \x01(\t\x12\x12\n\nticks_font\x18\x08 \x01(\t\x12\x1b\n\x0e\x66ormat_pattern\x18\t \x01(\tH\x00\x88\x01\x01\x12\r\n\x05\x63olor\x18\n \x01(\t\x12\x11\n\tmin_range\x18\x0b \x01(\x01\x12\x11\n\tmax_range\x18\x0c \x01(\x01\x12\x1b\n\x13minor_ticks_visible\x18\r \x01(\x08\x12\x1b\n\x13major_ticks_visible\x18\x0e \x01(\x08\x12\x18\n\x10minor_tick_count\x18\x0f \x01(\x05\x12$\n\x17gap_between_major_ticks\x18\x10 \x01(\x01H\x01\x88\x01\x01\x12\x1c\n\x14major_tick_locations\x18\x11 \x03(\x01\x12\x18\n\x10tick_label_angle\x18\x12 \x01(\x01\x12\x0e\n\x06invert\x18\x13 \x01(\x08\x12\x14\n\x0cis_time_axis\x18\x14 \x01(\x08\x12{\n\x1c\x62usiness_calendar_descriptor\x18\x15 \x01(\x0b\x32U.io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BusinessCalendarDescriptor\"*\n\x0e\x41xisFormatType\x12\x0c\n\x08\x43\x41TEGORY\x10\x00\x12\n\n\x06NUMBER\x10\x01\"C\n\x08\x41xisType\x12\x05\n\x01X\x10\x00\x12\x05\n\x01Y\x10\x01\x12\t\n\x05SHAPE\x10\x02\x12\x08\n\x04SIZE\x10\x03\x12\t\n\x05LABEL\x10\x04\x12\t\n\x05\x43OLOR\x10\x05\"B\n\x0c\x41xisPosition\x12\x07\n\x03TOP\x10\x00\x12\n\n\x06\x42OTTOM\x10\x01\x12\x08\n\x04LEFT\x10\x02\x12\t\n\x05RIGHT\x10\x03\x12\x08\n\x04NONE\x10\x04\x42\x11\n\x0f_format_patternB\x1a\n\x18_gap_between_major_ticks\x1a\xf0\x06\n\x1a\x42usinessCalendarDescriptor\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x11\n\ttime_zone\x18\x02 \x01(\t\x12v\n\rbusiness_days\x18\x03 \x03(\x0e\x32_.io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BusinessCalendarDescriptor.DayOfWeek\x12~\n\x10\x62usiness_periods\x18\x04 \x03(\x0b\x32\x64.io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BusinessCalendarDescriptor.BusinessPeriod\x12o\n\x08holidays\x18\x05 \x03(\x0b\x32].io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BusinessCalendarDescriptor.Holiday\x1a-\n\x0e\x42usinessPeriod\x12\x0c\n\x04open\x18\x01 \x01(\t\x12\r\n\x05\x63lose\x18\x02 \x01(\t\x1a\xf8\x01\n\x07Holiday\x12m\n\x04\x64\x61te\x18\x01 \x01(\x0b\x32_.io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BusinessCalendarDescriptor.LocalDate\x12~\n\x10\x62usiness_periods\x18\x02 \x03(\x0b\x32\x64.io.deephaven.proto.backplane.script.grpc.FigureDescriptor.BusinessCalendarDescriptor.BusinessPeriod\x1a\x35\n\tLocalDate\x12\x0c\n\x04year\x18\x01 \x01(\x05\x12\r\n\x05month\x18\x02 \x01(\x05\x12\x0b\n\x03\x64\x61y\x18\x03 \x01(\x05\"g\n\tDayOfWeek\x12\n\n\x06SUNDAY\x10\x00\x12\n\n\x06MONDAY\x10\x01\x12\x0b\n\x07TUESDAY\x10\x02\x12\r\n\tWEDNESDAY\x10\x03\x12\x0c\n\x08THURSDAY\x10\x04\x12\n\n\x06\x46RIDAY\x10\x05\x12\x0c\n\x08SATURDAY\x10\x06\x1a\xb6\x01\n\x1bMultiSeriesSourceDescriptor\x12\x0f\n\x07\x61xis_id\x18\x01 \x01(\t\x12S\n\x04type\x18\x02 \x01(\x0e\x32\x45.io.deephaven.proto.backplane.script.grpc.FigureDescriptor.SourceType\x12\x1c\n\x14partitioned_table_id\x18\x03 \x01(\x05\x12\x13\n\x0b\x63olumn_name\x18\x04 \x01(\t\x1a\xb4\x02\n\x10SourceDescriptor\x12\x0f\n\x07\x61xis_id\x18\x01 \x01(\t\x12S\n\x04type\x18\x02 \x01(\x0e\x32\x45.io.deephaven.proto.backplane.script.grpc.FigureDescriptor.SourceType\x12\x10\n\x08table_id\x18\x03 \x01(\x05\x12\x1c\n\x14partitioned_table_id\x18\x04 \x01(\x05\x12\x13\n\x0b\x63olumn_name\x18\x05 \x01(\t\x12\x13\n\x0b\x63olumn_type\x18\x06 \x01(\t\x12`\n\tone_click\x18\x07 \x01(\x0b\x32M.io.deephaven.proto.backplane.script.grpc.FigureDescriptor.OneClickDescriptor\x1a\x63\n\x12OneClickDescriptor\x12\x0f\n\x07\x63olumns\x18\x01 \x03(\t\x12\x14\n\x0c\x63olumn_types\x18\x02 \x03(\t\x12&\n\x1erequire_all_filters_to_display\x18\x03 \x01(\x08\"\xa6\x01\n\x0fSeriesPlotStyle\x12\x07\n\x03\x42\x41R\x10\x00\x12\x0f\n\x0bSTACKED_BAR\x10\x01\x12\x08\n\x04LINE\x10\x02\x12\x08\n\x04\x41REA\x10\x03\x12\x10\n\x0cSTACKED_AREA\x10\x04\x12\x07\n\x03PIE\x10\x05\x12\r\n\tHISTOGRAM\x10\x06\x12\x08\n\x04OHLC\x10\x07\x12\x0b\n\x07SCATTER\x10\x08\x12\x08\n\x04STEP\x10\t\x12\r\n\tERROR_BAR\x10\n\x12\x0b\n\x07TREEMAP\x10\x0b\"\xd2\x01\n\nSourceType\x12\x05\n\x01X\x10\x00\x12\x05\n\x01Y\x10\x01\x12\x05\n\x01Z\x10\x02\x12\t\n\x05X_LOW\x10\x03\x12\n\n\x06X_HIGH\x10\x04\x12\t\n\x05Y_LOW\x10\x05\x12\n\n\x06Y_HIGH\x10\x06\x12\x08\n\x04TIME\x10\x07\x12\x08\n\x04OPEN\x10\x08\x12\x08\n\x04HIGH\x10\t\x12\x07\n\x03LOW\x10\n\x12\t\n\x05\x43LOSE\x10\x0b\x12\t\n\x05SHAPE\x10\x0c\x12\x08\n\x04SIZE\x10\r\x12\t\n\x05LABEL\x10\x0e\x12\t\n\x05\x43OLOR\x10\x0f\x12\n\n\x06PARENT\x10\x10\x12\x0e\n\nHOVER_TEXT\x10\x11\x12\x08\n\x04TEXT\x10\x12\x42\x08\n\x06_titleJ\x04\x08\x0b\x10\x0cJ\x04\x08\x0c\x10\r2\xb2\r\n\x0e\x43onsoleService\x12\x98\x01\n\x0fGetConsoleTypes\x12@.io.deephaven.proto.backplane.script.grpc.GetConsoleTypesRequest\x1a\x41.io.deephaven.proto.backplane.script.grpc.GetConsoleTypesResponse\"\x00\x12\x8f\x01\n\x0cStartConsole\x12=.io.deephaven.proto.backplane.script.grpc.StartConsoleRequest\x1a>.io.deephaven.proto.backplane.script.grpc.StartConsoleResponse\"\x00\x12\x8c\x01\n\x0bGetHeapInfo\x12<.io.deephaven.proto.backplane.script.grpc.GetHeapInfoRequest\x1a=.io.deephaven.proto.backplane.script.grpc.GetHeapInfoResponse\"\x00\x12\x96\x01\n\x0fSubscribeToLogs\x12@.io.deephaven.proto.backplane.script.grpc.LogSubscriptionRequest\x1a=.io.deephaven.proto.backplane.script.grpc.LogSubscriptionData\"\x00\x30\x01\x12\x95\x01\n\x0e\x45xecuteCommand\x12?.io.deephaven.proto.backplane.script.grpc.ExecuteCommandRequest\x1a@.io.deephaven.proto.backplane.script.grpc.ExecuteCommandResponse\"\x00\x12\x92\x01\n\rCancelCommand\x12>.io.deephaven.proto.backplane.script.grpc.CancelCommandRequest\x1a?.io.deephaven.proto.backplane.script.grpc.CancelCommandResponse\"\x00\x12\xa4\x01\n\x13\x42indTableToVariable\x12\x44.io.deephaven.proto.backplane.script.grpc.BindTableToVariableRequest\x1a\x45.io.deephaven.proto.backplane.script.grpc.BindTableToVariableResponse\"\x00\x12\x99\x01\n\x12\x41utoCompleteStream\x12=.io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest\x1a>.io.deephaven.proto.backplane.script.grpc.AutoCompleteResponse\"\x00(\x01\x30\x01\x12\xa1\x01\n\x12\x43\x61ncelAutoComplete\x12\x43.io.deephaven.proto.backplane.script.grpc.CancelAutoCompleteRequest\x1a\x44.io.deephaven.proto.backplane.script.grpc.CancelAutoCompleteResponse\"\x00\x12\x9b\x01\n\x16OpenAutoCompleteStream\x12=.io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest\x1a>.io.deephaven.proto.backplane.script.grpc.AutoCompleteResponse\"\x00\x30\x01\x12\x98\x01\n\x16NextAutoCompleteStream\x12=.io.deephaven.proto.backplane.script.grpc.AutoCompleteRequest\x1a=.io.deephaven.proto.backplane.script.grpc.BrowserNextResponse\"\x00\x42\x43H\x01P\x01Z=github.com/deephaven/deephaven-core/go/internal/proto/consoleb\x06proto3')
 
 _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
 _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'deephaven.proto.console_pb2', globals())
@@ -33,6 +33,20 @@
   _LOGSUBSCRIPTIONREQUEST.fields_by_name['last_seen_log_timestamp']._serialized_options = b'0\001'
   _LOGSUBSCRIPTIONDATA.fields_by_name['micros']._options = None
   _LOGSUBSCRIPTIONDATA.fields_by_name['micros']._serialized_options = b'0\001'
+  _OPENDOCUMENTREQUEST.fields_by_name['console_id']._options = None
+  _OPENDOCUMENTREQUEST.fields_by_name['console_id']._serialized_options = b'\030\001'
+  _CLOSEDOCUMENTREQUEST.fields_by_name['console_id']._options = None
+  _CLOSEDOCUMENTREQUEST.fields_by_name['console_id']._serialized_options = b'\030\001'
+  _CHANGEDOCUMENTREQUEST.fields_by_name['console_id']._options = None
+  _CHANGEDOCUMENTREQUEST.fields_by_name['console_id']._serialized_options = b'\030\001'
+  _GETCOMPLETIONITEMSREQUEST.fields_by_name['console_id']._options = None
+  _GETCOMPLETIONITEMSREQUEST.fields_by_name['console_id']._serialized_options = b'\030\001'
+  _GETCOMPLETIONITEMSREQUEST.fields_by_name['request_id']._options = None
+  _GETCOMPLETIONITEMSREQUEST.fields_by_name['request_id']._serialized_options = b'\030\001'
+  _GETCOMPLETIONITEMSRESPONSE.fields_by_name['request_id']._options = None
+  _GETCOMPLETIONITEMSRESPONSE.fields_by_name['request_id']._serialized_options = b'\030\001'
+  _GETCOMPLETIONITEMSRESPONSE.fields_by_name['success']._options = None
+  _GETCOMPLETIONITEMSRESPONSE.fields_by_name['success']._serialized_options = b'\030\001'
   _FIGUREDESCRIPTOR_CHARTDESCRIPTOR_CHARTTYPE.values_by_name["OHLC"]._options = None
   _FIGUREDESCRIPTOR_CHARTDESCRIPTOR_CHARTTYPE.values_by_name["OHLC"]._serialized_options = b'\010\001'
   _FIGUREDESCRIPTOR.fields_by_name['update_interval']._options = None
@@ -65,82 +79,116 @@
   _CANCELCOMMANDREQUEST._serialized_end=1286
   _CANCELCOMMANDRESPONSE._serialized_start=1288
   _CANCELCOMMANDRESPONSE._serialized_end=1311
-  _AUTOCOMPLETEREQUEST._serialized_start=1314
-  _AUTOCOMPLETEREQUEST._serialized_end=1717
-  _AUTOCOMPLETERESPONSE._serialized_start=1720
-  _AUTOCOMPLETERESPONSE._serialized_end=1852
-  _BROWSERNEXTRESPONSE._serialized_start=1854
-  _BROWSERNEXTRESPONSE._serialized_end=1875
-  _OPENDOCUMENTREQUEST._serialized_start=1878
-  _OPENDOCUMENTREQUEST._serialized_end=2045
-  _TEXTDOCUMENTITEM._serialized_start=2047
-  _TEXTDOCUMENTITEM._serialized_end=2130
-  _CLOSEDOCUMENTREQUEST._serialized_start=2133
-  _CLOSEDOCUMENTREQUEST._serialized_end=2316
-  _CHANGEDOCUMENTREQUEST._serialized_start=2319
-  _CHANGEDOCUMENTREQUEST._serialized_end=2767
-  _CHANGEDOCUMENTREQUEST_TEXTDOCUMENTCONTENTCHANGEEVENT._serialized_start=2627
-  _CHANGEDOCUMENTREQUEST_TEXTDOCUMENTCONTENTCHANGEEVENT._serialized_end=2767
-  _DOCUMENTRANGE._serialized_start=2770
-  _DOCUMENTRANGE._serialized_end=2917
-  _VERSIONEDTEXTDOCUMENTIDENTIFIER._serialized_start=2919
-  _VERSIONEDTEXTDOCUMENTIDENTIFIER._serialized_end=2982
-  _POSITION._serialized_start=2984
-  _POSITION._serialized_end=3027
-  _GETCOMPLETIONITEMSREQUEST._serialized_start=3030
-  _GETCOMPLETIONITEMSREQUEST._serialized_end=3386
-  _COMPLETIONCONTEXT._serialized_start=3388
-  _COMPLETIONCONTEXT._serialized_end=3456
-  _GETCOMPLETIONITEMSRESPONSE._serialized_start=3459
-  _GETCOMPLETIONITEMSRESPONSE._serialized_end=3597
-  _COMPLETIONITEM._serialized_start=3600
-  _COMPLETIONITEM._serialized_end=4003
-  _TEXTEDIT._serialized_start=4005
-  _TEXTEDIT._serialized_end=4101
-  _FIGUREDESCRIPTOR._serialized_start=4104
-  _FIGUREDESCRIPTOR._serialized_end=10350
-  _FIGUREDESCRIPTOR_CHARTDESCRIPTOR._serialized_start=4351
-  _FIGUREDESCRIPTOR_CHARTDESCRIPTOR._serialized_end=5069
-  _FIGUREDESCRIPTOR_CHARTDESCRIPTOR_CHARTTYPE._serialized_start=4964
-  _FIGUREDESCRIPTOR_CHARTDESCRIPTOR_CHARTTYPE._serialized_end=5059
-  _FIGUREDESCRIPTOR_SERIESDESCRIPTOR._serialized_start=5072
-  _FIGUREDESCRIPTOR_SERIESDESCRIPTOR._serialized_end=5710
-  _FIGUREDESCRIPTOR_MULTISERIESDESCRIPTOR._serialized_start=5713
-  _FIGUREDESCRIPTOR_MULTISERIESDESCRIPTOR._serialized_end=7101
-  _FIGUREDESCRIPTOR_STRINGMAPWITHDEFAULT._serialized_start=7103
-  _FIGUREDESCRIPTOR_STRINGMAPWITHDEFAULT._serialized_end=7203
-  _FIGUREDESCRIPTOR_DOUBLEMAPWITHDEFAULT._serialized_start=7205
-  _FIGUREDESCRIPTOR_DOUBLEMAPWITHDEFAULT._serialized_end=7305
-  _FIGUREDESCRIPTOR_BOOLMAPWITHDEFAULT._serialized_start=7307
-  _FIGUREDESCRIPTOR_BOOLMAPWITHDEFAULT._serialized_end=7401
-  _FIGUREDESCRIPTOR_AXISDESCRIPTOR._serialized_start=7404
-  _FIGUREDESCRIPTOR_AXISDESCRIPTOR._serialized_end=8466
-  _FIGUREDESCRIPTOR_AXISDESCRIPTOR_AXISFORMATTYPE._serialized_start=8240
-  _FIGUREDESCRIPTOR_AXISDESCRIPTOR_AXISFORMATTYPE._serialized_end=8282
-  _FIGUREDESCRIPTOR_AXISDESCRIPTOR_AXISTYPE._serialized_start=8284
-  _FIGUREDESCRIPTOR_AXISDESCRIPTOR_AXISTYPE._serialized_end=8351
-  _FIGUREDESCRIPTOR_AXISDESCRIPTOR_AXISPOSITION._serialized_start=8353
-  _FIGUREDESCRIPTOR_AXISDESCRIPTOR_AXISPOSITION._serialized_end=8419
-  _FIGUREDESCRIPTOR_BUSINESSCALENDARDESCRIPTOR._serialized_start=8469
-  _FIGUREDESCRIPTOR_BUSINESSCALENDARDESCRIPTOR._serialized_end=9349
-  _FIGUREDESCRIPTOR_BUSINESSCALENDARDESCRIPTOR_BUSINESSPERIOD._serialized_start=8893
-  _FIGUREDESCRIPTOR_BUSINESSCALENDARDESCRIPTOR_BUSINESSPERIOD._serialized_end=8938
-  _FIGUREDESCRIPTOR_BUSINESSCALENDARDESCRIPTOR_HOLIDAY._serialized_start=8941
-  _FIGUREDESCRIPTOR_BUSINESSCALENDARDESCRIPTOR_HOLIDAY._serialized_end=9189
-  _FIGUREDESCRIPTOR_BUSINESSCALENDARDESCRIPTOR_LOCALDATE._serialized_start=9191
-  _FIGUREDESCRIPTOR_BUSINESSCALENDARDESCRIPTOR_LOCALDATE._serialized_end=9244
-  _FIGUREDESCRIPTOR_BUSINESSCALENDARDESCRIPTOR_DAYOFWEEK._serialized_start=9246
-  _FIGUREDESCRIPTOR_BUSINESSCALENDARDESCRIPTOR_DAYOFWEEK._serialized_end=9349
-  _FIGUREDESCRIPTOR_MULTISERIESSOURCEDESCRIPTOR._serialized_start=9352
-  _FIGUREDESCRIPTOR_MULTISERIESSOURCEDESCRIPTOR._serialized_end=9534
-  _FIGUREDESCRIPTOR_SOURCEDESCRIPTOR._serialized_start=9537
-  _FIGUREDESCRIPTOR_SOURCEDESCRIPTOR._serialized_end=9845
-  _FIGUREDESCRIPTOR_ONECLICKDESCRIPTOR._serialized_start=9847
-  _FIGUREDESCRIPTOR_ONECLICKDESCRIPTOR._serialized_end=9946
-  _FIGUREDESCRIPTOR_SERIESPLOTSTYLE._serialized_start=9949
-  _FIGUREDESCRIPTOR_SERIESPLOTSTYLE._serialized_end=10115
-  _FIGUREDESCRIPTOR_SOURCETYPE._serialized_start=10118
-  _FIGUREDESCRIPTOR_SOURCETYPE._serialized_end=10328
-  _CONSOLESERVICE._serialized_start=10353
-  _CONSOLESERVICE._serialized_end=11903
+  _CANCELAUTOCOMPLETEREQUEST._serialized_start=1313
+  _CANCELAUTOCOMPLETEREQUEST._serialized_end=1423
+  _CANCELAUTOCOMPLETERESPONSE._serialized_start=1425
+  _CANCELAUTOCOMPLETERESPONSE._serialized_end=1453
+  _AUTOCOMPLETEREQUEST._serialized_start=1456
+  _AUTOCOMPLETEREQUEST._serialized_end=2209
+  _AUTOCOMPLETERESPONSE._serialized_start=2212
+  _AUTOCOMPLETERESPONSE._serialized_end=2741
+  _BROWSERNEXTRESPONSE._serialized_start=2743
+  _BROWSERNEXTRESPONSE._serialized_end=2764
+  _OPENDOCUMENTREQUEST._serialized_start=2767
+  _OPENDOCUMENTREQUEST._serialized_end=2938
+  _TEXTDOCUMENTITEM._serialized_start=2940
+  _TEXTDOCUMENTITEM._serialized_end=3023
+  _CLOSEDOCUMENTREQUEST._serialized_start=3026
+  _CLOSEDOCUMENTREQUEST._serialized_end=3213
+  _CHANGEDOCUMENTREQUEST._serialized_start=3216
+  _CHANGEDOCUMENTREQUEST._serialized_end=3668
+  _CHANGEDOCUMENTREQUEST_TEXTDOCUMENTCONTENTCHANGEEVENT._serialized_start=3528
+  _CHANGEDOCUMENTREQUEST_TEXTDOCUMENTCONTENTCHANGEEVENT._serialized_end=3668
+  _DOCUMENTRANGE._serialized_start=3671
+  _DOCUMENTRANGE._serialized_end=3818
+  _VERSIONEDTEXTDOCUMENTIDENTIFIER._serialized_start=3820
+  _VERSIONEDTEXTDOCUMENTIDENTIFIER._serialized_end=3883
+  _POSITION._serialized_start=3885
+  _POSITION._serialized_end=3928
+  _MARKUPCONTENT._serialized_start=3930
+  _MARKUPCONTENT._serialized_end=3974
+  _GETCOMPLETIONITEMSREQUEST._serialized_start=3977
+  _GETCOMPLETIONITEMSREQUEST._serialized_end=4341
+  _COMPLETIONCONTEXT._serialized_start=4343
+  _COMPLETIONCONTEXT._serialized_end=4411
+  _GETCOMPLETIONITEMSRESPONSE._serialized_start=4414
+  _GETCOMPLETIONITEMSRESPONSE._serialized_end=4560
+  _COMPLETIONITEM._serialized_start=4563
+  _COMPLETIONITEM._serialized_end=5029
+  _TEXTEDIT._serialized_start=5031
+  _TEXTEDIT._serialized_end=5127
+  _GETSIGNATUREHELPREQUEST._serialized_start=5130
+  _GETSIGNATUREHELPREQUEST._serialized_end=5404
+  _SIGNATUREHELPCONTEXT._serialized_start=5407
+  _SIGNATUREHELPCONTEXT._serialized_end=5626
+  _GETSIGNATUREHELPRESPONSE._serialized_start=5629
+  _GETSIGNATUREHELPRESPONSE._serialized_end=5843
+  _SIGNATUREINFORMATION._serialized_start=5846
+  _SIGNATUREINFORMATION._serialized_end=6099
+  _PARAMETERINFORMATION._serialized_start=6101
+  _PARAMETERINFORMATION._serialized_end=6218
+  _GETHOVERREQUEST._serialized_start=6221
+  _GETHOVERREQUEST._serialized_end=6406
+  _GETHOVERRESPONSE._serialized_start=6409
+  _GETHOVERRESPONSE._serialized_end=6574
+  _GETDIAGNOSTICREQUEST._serialized_start=6577
+  _GETDIAGNOSTICREQUEST._serialized_end=6793
+  _GETPULLDIAGNOSTICRESPONSE._serialized_start=6796
+  _GETPULLDIAGNOSTICRESPONSE._serialized_end=6944
+  _GETPUBLISHDIAGNOSTICRESPONSE._serialized_start=6947
+  _GETPUBLISHDIAGNOSTICRESPONSE._serialized_end=7099
+  _DIAGNOSTIC._serialized_start=7102
+  _DIAGNOSTIC._serialized_end=7781
+  _DIAGNOSTIC_CODEDESCRIPTION._serialized_start=7538
+  _DIAGNOSTIC_CODEDESCRIPTION._serialized_end=7569
+  _DIAGNOSTIC_DIAGNOSTICSEVERITY._serialized_start=7571
+  _DIAGNOSTIC_DIAGNOSTICSEVERITY._serialized_end=7664
+  _DIAGNOSTIC_DIAGNOSTICTAG._serialized_start=7666
+  _DIAGNOSTIC_DIAGNOSTICTAG._serialized_end=7731
+  _FIGUREDESCRIPTOR._serialized_start=7784
+  _FIGUREDESCRIPTOR._serialized_end=14030
+  _FIGUREDESCRIPTOR_CHARTDESCRIPTOR._serialized_start=8031
+  _FIGUREDESCRIPTOR_CHARTDESCRIPTOR._serialized_end=8749
+  _FIGUREDESCRIPTOR_CHARTDESCRIPTOR_CHARTTYPE._serialized_start=8644
+  _FIGUREDESCRIPTOR_CHARTDESCRIPTOR_CHARTTYPE._serialized_end=8739
+  _FIGUREDESCRIPTOR_SERIESDESCRIPTOR._serialized_start=8752
+  _FIGUREDESCRIPTOR_SERIESDESCRIPTOR._serialized_end=9390
+  _FIGUREDESCRIPTOR_MULTISERIESDESCRIPTOR._serialized_start=9393
+  _FIGUREDESCRIPTOR_MULTISERIESDESCRIPTOR._serialized_end=10781
+  _FIGUREDESCRIPTOR_STRINGMAPWITHDEFAULT._serialized_start=10783
+  _FIGUREDESCRIPTOR_STRINGMAPWITHDEFAULT._serialized_end=10883
+  _FIGUREDESCRIPTOR_DOUBLEMAPWITHDEFAULT._serialized_start=10885
+  _FIGUREDESCRIPTOR_DOUBLEMAPWITHDEFAULT._serialized_end=10985
+  _FIGUREDESCRIPTOR_BOOLMAPWITHDEFAULT._serialized_start=10987
+  _FIGUREDESCRIPTOR_BOOLMAPWITHDEFAULT._serialized_end=11081
+  _FIGUREDESCRIPTOR_AXISDESCRIPTOR._serialized_start=11084
+  _FIGUREDESCRIPTOR_AXISDESCRIPTOR._serialized_end=12146
+  _FIGUREDESCRIPTOR_AXISDESCRIPTOR_AXISFORMATTYPE._serialized_start=11920
+  _FIGUREDESCRIPTOR_AXISDESCRIPTOR_AXISFORMATTYPE._serialized_end=11962
+  _FIGUREDESCRIPTOR_AXISDESCRIPTOR_AXISTYPE._serialized_start=11964
+  _FIGUREDESCRIPTOR_AXISDESCRIPTOR_AXISTYPE._serialized_end=12031
+  _FIGUREDESCRIPTOR_AXISDESCRIPTOR_AXISPOSITION._serialized_start=12033
+  _FIGUREDESCRIPTOR_AXISDESCRIPTOR_AXISPOSITION._serialized_end=12099
+  _FIGUREDESCRIPTOR_BUSINESSCALENDARDESCRIPTOR._serialized_start=12149
+  _FIGUREDESCRIPTOR_BUSINESSCALENDARDESCRIPTOR._serialized_end=13029
+  _FIGUREDESCRIPTOR_BUSINESSCALENDARDESCRIPTOR_BUSINESSPERIOD._serialized_start=12573
+  _FIGUREDESCRIPTOR_BUSINESSCALENDARDESCRIPTOR_BUSINESSPERIOD._serialized_end=12618
+  _FIGUREDESCRIPTOR_BUSINESSCALENDARDESCRIPTOR_HOLIDAY._serialized_start=12621
+  _FIGUREDESCRIPTOR_BUSINESSCALENDARDESCRIPTOR_HOLIDAY._serialized_end=12869
+  _FIGUREDESCRIPTOR_BUSINESSCALENDARDESCRIPTOR_LOCALDATE._serialized_start=12871
+  _FIGUREDESCRIPTOR_BUSINESSCALENDARDESCRIPTOR_LOCALDATE._serialized_end=12924
+  _FIGUREDESCRIPTOR_BUSINESSCALENDARDESCRIPTOR_DAYOFWEEK._serialized_start=12926
+  _FIGUREDESCRIPTOR_BUSINESSCALENDARDESCRIPTOR_DAYOFWEEK._serialized_end=13029
+  _FIGUREDESCRIPTOR_MULTISERIESSOURCEDESCRIPTOR._serialized_start=13032
+  _FIGUREDESCRIPTOR_MULTISERIESSOURCEDESCRIPTOR._serialized_end=13214
+  _FIGUREDESCRIPTOR_SOURCEDESCRIPTOR._serialized_start=13217
+  _FIGUREDESCRIPTOR_SOURCEDESCRIPTOR._serialized_end=13525
+  _FIGUREDESCRIPTOR_ONECLICKDESCRIPTOR._serialized_start=13527
+  _FIGUREDESCRIPTOR_ONECLICKDESCRIPTOR._serialized_end=13626
+  _FIGUREDESCRIPTOR_SERIESPLOTSTYLE._serialized_start=13629
+  _FIGUREDESCRIPTOR_SERIESPLOTSTYLE._serialized_end=13795
+  _FIGUREDESCRIPTOR_SOURCETYPE._serialized_start=13798
+  _FIGUREDESCRIPTOR_SOURCETYPE._serialized_end=14008
+  _CONSOLESERVICE._serialized_start=14033
+  _CONSOLESERVICE._serialized_end=15747
 # @@protoc_insertion_point(module_scope)
diff --git a/py/client/pydeephaven/proto/console_pb2_grpc.py b/py/client/pydeephaven/proto/console_pb2_grpc.py
index 6b6c77084ce..ae8fca57c07 100644
--- a/py/client/pydeephaven/proto/console_pb2_grpc.py
+++ b/py/client/pydeephaven/proto/console_pb2_grpc.py
@@ -56,6 +56,11 @@ def __init__(self, channel):
                 request_serializer=deephaven_dot_proto_dot_console__pb2.AutoCompleteRequest.SerializeToString,
                 response_deserializer=deephaven_dot_proto_dot_console__pb2.AutoCompleteResponse.FromString,
                 )
+        self.CancelAutoComplete = channel.unary_unary(
+                '/io.deephaven.proto.backplane.script.grpc.ConsoleService/CancelAutoComplete',
+                request_serializer=deephaven_dot_proto_dot_console__pb2.CancelAutoCompleteRequest.SerializeToString,
+                response_deserializer=deephaven_dot_proto_dot_console__pb2.CancelAutoCompleteResponse.FromString,
+                )
         self.OpenAutoCompleteStream = channel.unary_stream(
                 '/io.deephaven.proto.backplane.script.grpc.ConsoleService/OpenAutoCompleteStream',
                 request_serializer=deephaven_dot_proto_dot_console__pb2.AutoCompleteRequest.SerializeToString,
@@ -126,6 +131,12 @@ def AutoCompleteStream(self, request_iterator, context):
         context.set_details('Method not implemented!')
         raise NotImplementedError('Method not implemented!')
 
+    def CancelAutoComplete(self, request, context):
+        """Missing associated documentation comment in .proto file."""
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
     def OpenAutoCompleteStream(self, request, context):
         """
         Half of the browser-based (browser's can't do bidirectional streams without websockets)
@@ -186,6 +197,11 @@ def add_ConsoleServiceServicer_to_server(servicer, server):
                     request_deserializer=deephaven_dot_proto_dot_console__pb2.AutoCompleteRequest.FromString,
                     response_serializer=deephaven_dot_proto_dot_console__pb2.AutoCompleteResponse.SerializeToString,
             ),
+            'CancelAutoComplete': grpc.unary_unary_rpc_method_handler(
+                    servicer.CancelAutoComplete,
+                    request_deserializer=deephaven_dot_proto_dot_console__pb2.CancelAutoCompleteRequest.FromString,
+                    response_serializer=deephaven_dot_proto_dot_console__pb2.CancelAutoCompleteResponse.SerializeToString,
+            ),
             'OpenAutoCompleteStream': grpc.unary_stream_rpc_method_handler(
                     servicer.OpenAutoCompleteStream,
                     request_deserializer=deephaven_dot_proto_dot_console__pb2.AutoCompleteRequest.FromString,
@@ -344,6 +360,23 @@ def AutoCompleteStream(request_iterator,
             options, channel_credentials,
             insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
 
+    @staticmethod
+    def CancelAutoComplete(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            insecure=False,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/io.deephaven.proto.backplane.script.grpc.ConsoleService/CancelAutoComplete',
+            deephaven_dot_proto_dot_console__pb2.CancelAutoCompleteRequest.SerializeToString,
+            deephaven_dot_proto_dot_console__pb2.CancelAutoCompleteResponse.FromString,
+            options, channel_credentials,
+            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+
     @staticmethod
     def OpenAutoCompleteStream(request,
             target,
diff --git a/py/server/deephaven_internal/auto_completer/_completer.py b/py/server/deephaven_internal/auto_completer/_completer.py
index 485be4233e5..8e3ed0de933 100644
--- a/py/server/deephaven_internal/auto_completer/_completer.py
+++ b/py/server/deephaven_internal/auto_completer/_completer.py
@@ -1,8 +1,9 @@
 # only python 3.8 needs this, but it must be the first expression in the file, so we can't predicate it
 from __future__ import annotations
 from enum import Enum
-from typing import Any
+from typing import Any, Union
 from jedi import Interpreter, Script
+from jedi.api.classes import Name, Completion, Signature
 
 
 class Mode(Enum):
@@ -14,7 +15,54 @@ def __str__(self) -> str:
         return self.value
 
 
-class Completer(object):
+"""
+These options are from Jedi LSP implementation and LSP spec
+https://github.com/pappasam/jedi-language-server/blob/6b064bca61a3e56535c27cc8c8b20f45a3fcbe47/jedi_language_server/type_map.py#L8
+https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#completionItemKind
+"""
+_JEDI_COMPLETION_TYPE_MAP = {
+    "module": 9,
+    "class": 7,
+    "instance": 6,
+    "function": 3,
+    "param": 6,
+    "path": 17,
+    "keyword": 14,
+    "property": 10,
+    "statement": 6,
+    "text": 1,
+}
+
+
+def wrap_python(txt: str) -> str:
+    """ Wraps a string in a Python fenced codeblock for markdown
+
+    Args:
+        txt (str): the string to wrap
+
+    Returns:
+        A markdown string wrapping the input in a Python codeblock
+    """
+    if txt:
+        return f"```python\n{txt}\n```"
+    return ''
+
+
+def wrap_plaintext(txt: str) -> str:
+    """ Wraps a string in a Python fenced codeblock for markdown
+
+        Args:
+            txt (str): the string to wrap
+
+        Returns:
+            A markdown string wrapping the input in a Python codeblock
+        """
+    if txt:
+        return f"```plaintext\n{txt}\n```"
+    return ''
+
+
+class Completer:
     def __init__(self):
         self._docs = {}
         self._versions = {}
@@ -70,34 +118,41 @@ def can_jedi(self) -> bool:
     def set_scope(self, scope: dict) -> None:
         self.__scope = scope
 
+    def get_completer(self, uri: str) -> Union[Interpreter, Script]:
+        txt = self.get_doc(uri)
+        if self.__mode == Mode.SAFE:
+            # The Script completer is static analysis only, so we should actually be feeding it a whole document at once
+            return Script(txt)
+        return Interpreter(txt, [self.__scope])
+
     def do_completion(
         self, uri: str, version: int, line: int, col: int
     ) -> list[list[Any]]:
+        """ Gets completion items at the position
+
+        Modeled after Jedi language server
+        https://github.com/pappasam/jedi-language-server/blob/main/jedi_language_server/server.py#L189
+        """
         if not self._versions[uri] == version:
             # if you aren't the newest completion, you get nothing, quickly
             return []
 
-        # run jedi
-        txt = self.get_doc(uri)
-
-        completer = (
-            # The Script completer is static analysis only, so we should actually be feeding it a whole document at once.
-            Script(txt)
-            if self.__mode == Mode.SAFE
-            else Interpreter(txt, [self.__scope])
-        )
-        completions = completer.complete(line, col)
+        completer = self.get_completer(uri)
+        # Path completions don't seem useful with our setup
+        # It also doesn't suggest nested paths/files when the string is a parent path
+        # Might just be a client issue, but either way not useful right now
+        completions = [c for c in completer.complete(line, col) if c.type != "path"]
 
         # for now, a simple sorting based on number of preceding _
         # we may want to apply additional sorting to each list before combining
         results: list = []
         results_: list = []
         results__: list = []
-        for complete in completions:
+        for completion in completions:
             # keep checking the latest version as we run, so updated doc can cancel us
             if not self._versions[uri] == version:
                 return []
-            result: list = self.to_result(complete, col)
+            result: list = self.to_completion_result(completion, col)
             if result[0].startswith("__"):
                 results__.append(result)
             elif result[0].startswith("_"):
@@ -109,9 +164,90 @@ def do_completion(
         return results + results_ + results__
 
     @staticmethod
-    def to_result(complete: Any, col: int) -> list[Any]:
-        name: str = complete.name
-        prefix_length: int = complete.get_completion_prefix_length()
+    def to_completion_result(completion: Completion, col: int) -> list[Any]:
+        name: str = completion.name
+        prefix_length: int = completion.get_completion_prefix_length()
         start: int = col - prefix_length
-        # all java needs to build a grpc response is completion text (name) and where the completion should start
-        return [name, start]
+        signatures: list[Signature] = completion.get_signatures()
+        detail: str = signatures[0].to_string() if len(signatures) > 0 else completion.description
+
+        return [
+            name,
+            start,
+            detail,
+            completion.docstring(raw=True),
+            _JEDI_COMPLETION_TYPE_MAP.get(completion.type, _JEDI_COMPLETION_TYPE_MAP.get('text', 1))
+        ]
+
+    def do_signature_help(
+            self, uri: str, version: int, line: int, col: int
+    ) -> list[list[Any]]:
+        """ Gets signature help at the position
+
+        Modeled after Jedi language server
+        https://github.com/pappasam/jedi-language-server/blob/main/jedi_language_server/server.py#L255
+        """
+        if not self._versions[uri] == version:
+            # if you aren't the newest completion, you get nothing, quickly
+            return []
+
+        completer = self.get_completer(uri)
+        signatures = completer.get_signatures(line, col)
+
+        results: list = []
+        for signature in signatures:
+            # keep checking the latest version as we run, so updated doc can cancel us
+            if not self._versions[uri] == version:
+                return []
+
+            result: list = [
+                signature.to_string(),
+                signature.docstring(raw=True),
+                [[param.to_string().strip(), param.docstring(raw=True).strip()] for param in signature.params],
+                signature.index if signature.index is not None else -1
+            ]
+            results.append(result)
+
+        return results
+
+    def do_hover(
+        self, uri: str, version: int, line: int, col: int
+    ) -> list[str]:
+        """ Gets hover help at the position
+
+        Modeled after Jedi language server
+        https://github.com/pappasam/jedi-language-server/blob/main/jedi_language_server/server.py#L366
+        """
+        if not self._versions[uri] == version:
+            # if you aren't the newest completion, you get nothing, quickly
+            return []
+
+        completer = self.get_completer(uri)
+        hovers = completer.help(line, col)
+        if not hovers or hovers[0].type == "keyword":
+            return ['']
+
+        # LSP doesn't support multiple hovers really. Not sure if/when Jedi would return multiple either
+        hover = hovers[0]
+        signatures = hover.get_signatures()
+        kind = hover.type
+
+        header = ""
+        if signatures:
+            header = f"{'def' if kind == 'function' else kind} {signatures[0].to_string()}"
+        else:
+            if kind == "class":
+                header = f"class {hover.name}()"
+            elif kind == "function":
+                header = f"def {hover.name}()"
+            elif kind == "property":
+                header = f"property {hover.name}"
+            else:
+                header = hover.description
+
+        hoverstring = wrap_python(header)
+        raw_docstring = hover.docstring(raw=True)
+        if raw_docstring:
+            hoverstring += '\n---\n' + wrap_plaintext(raw_docstring)
+
+        return [hoverstring.strip()]
diff --git a/server/src/main/java/io/deephaven/server/console/ConsoleServiceGrpcImpl.java b/server/src/main/java/io/deephaven/server/console/ConsoleServiceGrpcImpl.java
index b9d9bb632b2..4ef9cb97311 100644
--- a/server/src/main/java/io/deephaven/server/console/ConsoleServiceGrpcImpl.java
+++ b/server/src/main/java/io/deephaven/server/console/ConsoleServiceGrpcImpl.java
@@ -296,13 +296,18 @@ public NoopAutoCompleteObserver(SessionState session, StreamObserver<AutoComplet
         @Override
         public void onNext(AutoCompleteRequest value) {
             // This implementation only responds to autocomplete requests with "success, nothing found"
+            AutoCompleteResponse.Builder responseBuilder = AutoCompleteResponse.newBuilder()
+                    .setSuccess(true)
+                    .setRequestId(value.getRequestId());
+
             if (value.getRequestCase() == AutoCompleteRequest.RequestCase.GET_COMPLETION_ITEMS) {
-                safelyOnNext(responseObserver, AutoCompleteResponse.newBuilder()
-                        .setCompletionItems(
-                                GetCompletionItemsResponse.newBuilder().setSuccess(true)
-                                        .setRequestId(value.getGetCompletionItems().getRequestId()))
-                        .build());
+                // For maintaining backwards compatibility
+                responseBuilder.setCompletionItems(
+                        GetCompletionItemsResponse.newBuilder()
+                                .setSuccess(true)
+                                .setRequestId(value.getRequestId()));
             }
+            safelyOnNext(responseObserver, responseBuilder.build());
         }
 
         @Override
@@ -317,6 +322,14 @@ public void onCompleted() {
         }
     }
 
+    @Override
+    public void cancelAutoComplete(
+            @NotNull final CancelAutoCompleteRequest request,
+            @NotNull final StreamObserver<CancelAutoCompleteResponse> responseObserver) {
+        // TODO: Consider autocomplete cancellation
+        super.cancelAutoComplete(request, responseObserver);
+    }
+
     private final class LogsClient implements LogBufferRecordListener, Runnable {
         private final LogSubscriptionRequest request;
         private final ServerCallStreamObserver<LogSubscriptionData> client;
diff --git a/server/src/main/java/io/deephaven/server/console/completer/JavaAutoCompleteObserver.java b/server/src/main/java/io/deephaven/server/console/completer/JavaAutoCompleteObserver.java
index 21d935beacf..ab4f2a93450 100644
--- a/server/src/main/java/io/deephaven/server/console/completer/JavaAutoCompleteObserver.java
+++ b/server/src/main/java/io/deephaven/server/console/completer/JavaAutoCompleteObserver.java
@@ -18,6 +18,7 @@
 import io.deephaven.server.session.SessionState;
 import io.deephaven.util.SafeCloseable;
 import io.grpc.stub.StreamObserver;
+import org.jpy.PyObject;
 
 import java.util.Collection;
 import java.util.Collections;
@@ -73,18 +74,6 @@ public void onNext(AutoCompleteRequest value) {
                         request.getContentChangesList());
                 break;
             }
-            case GET_COMPLETION_ITEMS: {
-                GetCompletionItemsRequest request = value.getGetCompletionItems();
-                SessionState.ExportObject<ScriptSession> exportedConsole =
-                        session.getExport(request.getConsoleId(), "consoleId");
-                session.nonExport()
-                        .require(exportedConsole)
-                        .onError(responseObserver)
-                        .submit(() -> {
-                            getCompletionItems(request, exportedConsole, parser, responseObserver);
-                        });
-                break;
-            }
             case CLOSE_DOCUMENT: {
                 CloseDocumentRequest request = value.getCloseDocument();
                 parser.remove(request.getTextDocument().getUri());
@@ -93,56 +82,72 @@ public void onNext(AutoCompleteRequest value) {
             case REQUEST_NOT_SET: {
                 throw Exceptions.statusRuntimeException(Code.INVALID_ARGUMENT, "Autocomplete command missing request");
             }
+            default: {
+                // Maintain compatibility with older clients
+                // The only autocomplete type supported before the consoleId was moved to the parent request was
+                // GetCompletionItems
+                final io.deephaven.proto.backplane.grpc.Ticket consoleId =
+                        value.hasConsoleId() ? value.getConsoleId() : value.getGetCompletionItems().getConsoleId();
+                SessionState.ExportObject<ScriptSession> exportedConsole = session.getExport(consoleId, "consoleId");
+                session.nonExport()
+                        .require(exportedConsole)
+                        .onError(responseObserver)
+                        .submit(() -> {
+                            handleAutocompleteRequest(value, exportedConsole, responseObserver);
+                        });
+            }
         }
     }
 
-    private void getCompletionItems(GetCompletionItemsRequest request,
-            SessionState.ExportObject<ScriptSession> exportedConsole, CompletionParser parser,
+    private void handleAutocompleteRequest(AutoCompleteRequest request,
+            SessionState.ExportObject<ScriptSession> exportedConsole,
             StreamObserver<AutoCompleteResponse> responseObserver) {
-        final ScriptSession scriptSession = exportedConsole.get();
+        // Maintain compatibility with older clients
+        // The only autocomplete type supported before the consoleId was moved to the parent request was
+        // GetCompletionItems
+        final int requestId =
+                request.getRequestId() > 0 ? request.getRequestId() : request.getGetCompletionItems().getRequestId();
         try {
-            final VariableProvider vars = scriptSession.getVariableProvider();
-            final VersionedTextDocumentIdentifier doc = request.getTextDocument();
-            final CompletionLookups h = CompletionLookups.preload(scriptSession);
-            // The only stateful part of a completer is the CompletionLookups, which are already
-            // once-per-session-cached
-            // so, we'll just create a new completer for each request. No need to hang onto these guys.
-            final ChunkerCompleter completer = new ChunkerCompleter(log, vars, h);
-
-            final ParsedDocument parsed;
-            try {
-                parsed = parser.finish(doc.getUri());
-            } catch (CompletionCancelled exception) {
-                if (log.isTraceEnabled()) {
-                    log.trace().append("Completion canceled").append(exception).endl();
+            AutoCompleteResponse.Builder response = AutoCompleteResponse.newBuilder();
+
+            switch (request.getRequestCase()) {
+                case GET_COMPLETION_ITEMS: {
+                    response.setCompletionItems(getCompletionItems(request.getGetCompletionItems(), exportedConsole,
+                            parser, responseObserver));
+                    break;
+                }
+                case GET_SIGNATURE_HELP: {
+                    // Not implemented. Return empty signature list
+                    response.setSignatures(GetSignatureHelpResponse.getDefaultInstance());
+                    break;
+                }
+                case GET_HOVER: {
+                    // Not implemented. Return empty hover help
+                    response.setHover(
+                            GetHoverResponse.newBuilder().setContents(MarkupContent.getDefaultInstance()).build());
+                    break;
+                }
+                case GET_DIAGNOSTIC: {
+                    // Not implemented. Return empty diagnostics
+                    response.setDiagnostic(GetPullDiagnosticResponse.getDefaultInstance());
+                    break;
                 }
-                safelyOnNext(responseObserver,
-                        AutoCompleteResponse.newBuilder()
-                                .setCompletionItems(GetCompletionItemsResponse.newBuilder()
-                                        .setSuccess(false)
-                                        .setRequestId(request.getRequestId()))
-                                .build());
-                return;
             }
 
-            int offset = LspTools.getOffsetFromPosition(parsed.getSource(),
-                    request.getPosition());
-            final Collection<CompletionItem.Builder> results =
-                    completer.runCompletion(parsed, request.getPosition(), offset);
-            final GetCompletionItemsResponse mangledResults =
-                    GetCompletionItemsResponse.newBuilder()
+            safelyOnNext(responseObserver,
+                    response
                             .setSuccess(true)
-                            .setRequestId(request.getRequestId())
-                            .addAllItems(results.stream().map(
-                                    // insertTextFormat is a default we used to set in constructor; for now, we'll
-                                    // just process the objects before sending back to client
-                                    item -> item.setInsertTextFormat(2).build())
-                                    .collect(Collectors.toSet()))
-                            .build();
+                            .setRequestId(requestId)
+                            .build());
 
+        } catch (CompletionCancelled exception) {
+            if (log.isTraceEnabled()) {
+                log.trace().append("Completion canceled").append(exception).endl();
+            }
             safelyOnNext(responseObserver,
                     AutoCompleteResponse.newBuilder()
-                            .setCompletionItems(mangledResults)
+                            .setSuccess(false)
+                            .setRequestId(request.getRequestId())
                             .build());
         } catch (Exception exception) {
             if (ConsoleServiceGrpcImpl.QUIET_AUTOCOMPLETE_ERRORS) {
@@ -154,13 +159,41 @@ private void getCompletionItems(GetCompletionItemsRequest request,
             }
             safelyOnNext(responseObserver,
                     AutoCompleteResponse.newBuilder()
-                            .setCompletionItems(GetCompletionItemsResponse.newBuilder()
-                                    .setSuccess(false)
-                                    .setRequestId(request.getRequestId()))
+                            .setSuccess(false)
+                            .setRequestId(request.getRequestId())
                             .build());
         }
     }
 
+    private GetCompletionItemsResponse getCompletionItems(GetCompletionItemsRequest request,
+            SessionState.ExportObject<ScriptSession> exportedConsole, CompletionParser parser,
+            StreamObserver<AutoCompleteResponse> responseObserver) {
+        final ScriptSession scriptSession = exportedConsole.get();
+        final VariableProvider vars = scriptSession.getVariableProvider();
+        final VersionedTextDocumentIdentifier doc = request.getTextDocument();
+        final CompletionLookups h = CompletionLookups.preload(scriptSession);
+        // The only stateful part of a completer is the CompletionLookups, which are already
+        // once-per-session-cached
+        // so, we'll just create a new completer for each request. No need to hang onto these guys.
+        final ChunkerCompleter completer = new ChunkerCompleter(log, vars, h);
+
+        final ParsedDocument parsed = parser.finish(doc.getUri());
+
+        int offset = LspTools.getOffsetFromPosition(parsed.getSource(),
+                request.getPosition());
+        final Collection<CompletionItem.Builder> results =
+                completer.runCompletion(parsed, request.getPosition(), offset);
+        return GetCompletionItemsResponse.newBuilder()
+                .setSuccess(true)
+                .setRequestId(request.getRequestId())
+                .addAllItems(results.stream().map(
+                        // insertTextFormat is a default we used to set in constructor; for now, we'll
+                        // just process the objects before sending back to client
+                        item -> item.setInsertTextFormat(2).build())
+                        .collect(Collectors.toSet()))
+                .build();
+    }
+
     @Override
     public void onError(Throwable t) {
         // ignore, client doesn't need us, will be cleaned up later
diff --git a/server/src/main/java/io/deephaven/server/console/completer/PythonAutoCompleteObserver.java b/server/src/main/java/io/deephaven/server/console/completer/PythonAutoCompleteObserver.java
index 2d5aa1dc27c..62412091a12 100644
--- a/server/src/main/java/io/deephaven/server/console/completer/PythonAutoCompleteObserver.java
+++ b/server/src/main/java/io/deephaven/server/console/completer/PythonAutoCompleteObserver.java
@@ -18,6 +18,7 @@
 import javax.inject.Provider;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.stream.Collectors;
 
 import static io.deephaven.extensions.barrage.util.GrpcUtil.safelyComplete;
 import static io.deephaven.extensions.barrage.util.GrpcUtil.safelyOnNext;
@@ -47,8 +48,7 @@ public PythonAutoCompleteObserver(StreamObserver<AutoCompleteResponse> responseO
     public void onNext(AutoCompleteRequest value) {
         switch (value.getRequestCase()) {
             case OPEN_DOCUMENT: {
-                final OpenDocumentRequest openDoc = value.getOpenDocument();
-                final TextDocumentItem doc = openDoc.getTextDocument();
+                final TextDocumentItem doc = value.getOpenDocument().getTextDocument();
                 PyObject completer = (PyObject) scriptSession.get().getVariable("jedi_settings");
                 completer.callMethod("open_doc", doc.getText(), doc.getUri(), doc.getVersion());
                 break;
@@ -70,37 +70,46 @@ public void onNext(AutoCompleteRequest value) {
                 }
 
                 completer.callMethod("update_doc", document, uri, version);
-                break;
-            }
-            case GET_COMPLETION_ITEMS: {
-                GetCompletionItemsRequest request = value.getGetCompletionItems();
-                SessionState.ExportObject<ScriptSession> exportedConsole =
-                        session.getExport(request.getConsoleId(), "consoleId");
-                session.nonExport()
-                        .require(exportedConsole)
-                        .onError(responseObserver)
-                        .submit(() -> {
-                            getCompletionItems(request, exportedConsole, responseObserver);
-                        });
+                // TODO (https://github.com/deephaven/deephaven-core/issues/3614): Add publish diagnostics
+                // responseObserver.onNext(AutoCompleteResponse.newBuilder().setDiagnosticPublish());
                 break;
             }
             case CLOSE_DOCUMENT: {
-                CloseDocumentRequest request = value.getCloseDocument();
                 PyObject completer = (PyObject) scriptSession.get().getVariable("jedi_settings");
+                CloseDocumentRequest request = value.getCloseDocument();
                 completer.callMethod("close_doc", request.getTextDocument().getUri());
                 break;
             }
             case REQUEST_NOT_SET: {
                 throw Exceptions.statusRuntimeException(Code.INVALID_ARGUMENT, "Autocomplete command missing request");
             }
+            default: {
+                // Maintain compatibility with older clients
+                // The only autocomplete type supported before the consoleId was moved to the parent request was
+                // GetCompletionItems
+                final io.deephaven.proto.backplane.grpc.Ticket consoleId =
+                        value.hasConsoleId() ? value.getConsoleId() : value.getGetCompletionItems().getConsoleId();
+                SessionState.ExportObject<ScriptSession> exportedConsole = session.getExport(consoleId, "consoleId");
+                session.nonExport()
+                        .require(exportedConsole)
+                        .onError(responseObserver)
+                        .submit(() -> {
+                            handleAutocompleteRequest(value, exportedConsole, responseObserver);
+                        });
+            }
         }
     }
 
-    private void getCompletionItems(GetCompletionItemsRequest request,
+    private void handleAutocompleteRequest(AutoCompleteRequest request,
             SessionState.ExportObject<ScriptSession> exportedConsole,
             StreamObserver<AutoCompleteResponse> responseObserver) {
-        final ScriptSession scriptSession = exportedConsole.get();
+        // Maintain compatibility with older clients
+        // The only autocomplete type supported before the consoleId was moved to the parent request was
+        // GetCompletionItems
+        final int requestId =
+                request.getRequestId() > 0 ? request.getRequestId() : request.getGetCompletionItems().getRequestId();
         try {
+            final ScriptSession scriptSession = exportedConsole.get();
             PyObject completer = (PyObject) scriptSession.getVariable("jedi_settings");
             boolean canJedi = completer.callMethod("is_enabled").getBooleanValue();
             if (!canJedi) {
@@ -108,90 +117,40 @@ private void getCompletionItems(GetCompletionItemsRequest request,
                 // send back an empty, failed response...
                 safelyOnNext(responseObserver,
                         AutoCompleteResponse.newBuilder()
-                                .setCompletionItems(GetCompletionItemsResponse.newBuilder()
-                                        .setSuccess(false)
-                                        .setRequestId(request.getRequestId()))
+                                .setSuccess(false)
+                                .setRequestId(requestId)
                                 .build());
                 return;
             }
-            final VersionedTextDocumentIdentifier doc = request.getTextDocument();
-            final Position pos = request.getPosition();
-            final long startNano = System.nanoTime();
-
-            if (log.isTraceEnabled()) {
-                String text = completer.call("get_doc", doc.getUri()).getStringValue();
-                log.trace().append("Completion version ").append(doc.getVersion())
-                        .append(" has source code:").append(text).endl();
-            }
-            final PyObject results = completer.callMethod("do_completion", doc.getUri(), doc.getVersion(),
-                    // our java is 0-indexed lines, 1-indexed chars. jedi is 1-indexed-both.
-                    // we'll keep that translation ugliness to the in-java result-processing.
-                    pos.getLine() + 1, pos.getCharacter());
-            if (!results.isList()) {
-                throw new UnsupportedOperationException(
-                        "Expected list from jedi_settings.do_completion, got " + results.call("repr"));
-            }
-            final long nanosJedi = System.nanoTime();
-            // translate from-python list of completion results. For now, each item in the outer list is a [str, int]
-            // which contains the text of the replacement, and the column where is should be inserted.
-            List<CompletionItem> finalItems = new ArrayList<>();
-
-            for (PyObject result : results.asList()) {
-                if (!result.isList()) {
-                    throw new UnsupportedOperationException("Expected list-of-lists from jedi_settings.do_completion, "
-                            +
-                            "got bad result " + result.call("repr") + " from full results: " + results.call("repr"));
-                }
-                // we expect [ "completion text", start_column ] as our result.
-                // in the future we may want to get more interesting info from jedi to pass back to client
-                final List<PyObject> items = result.asList();
-                String completionName = items.get(0).getStringValue();
-                int start = items.get(1).getIntValue();
-                final CompletionItem.Builder item = CompletionItem.newBuilder();
-                final TextEdit.Builder textEdit = item.getTextEditBuilder();
-                textEdit.setText(completionName);
-                final DocumentRange.Builder range = textEdit.getRangeBuilder();
-                item.setStart(start);
-                item.setLabel(completionName);
-                item.setLength(completionName.length());
-                range.getStartBuilder().setLine(pos.getLine()).setCharacter(start);
-                range.getEndBuilder().setLine(pos.getLine()).setCharacter(pos.getCharacter());
-                item.setInsertTextFormat(2);
-                item.setSortText(ChunkerCompleter.sortable(finalItems.size()));
-                finalItems.add(item.build());
-            }
-
-            final long nanosBuiltResponse = System.nanoTime();
 
-            final GetCompletionItemsResponse builtItems = GetCompletionItemsResponse.newBuilder()
-                    .setSuccess(true)
-                    .setRequestId(request.getRequestId())
-                    .addAllItems(finalItems)
-                    .build();
+            AutoCompleteResponse.Builder response = AutoCompleteResponse.newBuilder();
 
-            try {
-                safelyOnNext(responseObserver,
-                        AutoCompleteResponse.newBuilder()
-                                .setCompletionItems(builtItems)
-                                .build());
-            } finally {
-                // let's track how long completions take, as it's known that some
-                // modules like numpy can cause slow completion, and we'll want to know what was causing them
-                final long totalCompletionNanos = nanosBuiltResponse - startNano;
-                final long totalJediNanos = nanosJedi - startNano;
-                final long totalResponseBuildNanos = nanosBuiltResponse - nanosJedi;
-                // only log completions taking more than 100ms
-                if (totalCompletionNanos > HUNDRED_MS_IN_NS && log.isTraceEnabled()) {
-                    log.trace().append("Found ")
-                            .append(finalItems.size())
-                            .append(" jedi completions from doc ")
-                            .append(doc.getVersion())
-                            .append("\tjedi_time=").append(toMillis(totalJediNanos))
-                            .append("\tbuild_response_time=").append(toMillis(totalResponseBuildNanos))
-                            .append("\ttotal_complete_time=").append(toMillis(totalCompletionNanos))
-                            .endl();
+            switch (request.getRequestCase()) {
+                case GET_COMPLETION_ITEMS: {
+                    response.setCompletionItems(getCompletionItems(request.getGetCompletionItems(), completer));
+                    break;
+                }
+                case GET_SIGNATURE_HELP: {
+                    response.setSignatures(getSignatureHelp(request.getGetSignatureHelp(), completer));
+                    break;
+                }
+                case GET_HOVER: {
+                    response.setHover(getHover(request.getGetHover(), completer));
+                    break;
+                }
+                case GET_DIAGNOSTIC: {
+                    // TODO (https://github.com/deephaven/deephaven-core/issues/3614): Add user requested diagnostics
+                    response.setDiagnostic(GetPullDiagnosticResponse.getDefaultInstance());
+                    break;
                 }
             }
+
+            safelyOnNext(responseObserver,
+                    response
+                            .setSuccess(true)
+                            .setRequestId(requestId)
+                            .build());
+
         } catch (Throwable exception) {
             if (ConsoleServiceGrpcImpl.QUIET_AUTOCOMPLETE_ERRORS) {
                 exception.printStackTrace();
@@ -203,9 +162,8 @@ private void getCompletionItems(GetCompletionItemsRequest request,
             }
             safelyOnNext(responseObserver,
                     AutoCompleteResponse.newBuilder()
-                            .setCompletionItems(GetCompletionItemsResponse.newBuilder()
-                                    .setSuccess(false)
-                                    .setRequestId(request.getRequestId()))
+                            .setSuccess(false)
+                            .setRequestId(requestId)
                             .build());
             if (exception instanceof Error) {
                 throw exception;
@@ -213,6 +171,130 @@ private void getCompletionItems(GetCompletionItemsRequest request,
         }
     }
 
+    private GetCompletionItemsResponse getCompletionItems(GetCompletionItemsRequest request, PyObject completer) {
+        final VersionedTextDocumentIdentifier doc = request.getTextDocument();
+        final Position pos = request.getPosition();
+
+        final PyObject results = completer.callMethod("do_completion", doc.getUri(), doc.getVersion(),
+                // our java is 0-indexed lines and chars. jedi is 1-indexed lines and 0-indexed chars
+                // we'll keep that translation ugliness to the in-java result-processing.
+                pos.getLine() + 1, pos.getCharacter());
+        if (!results.isList()) {
+            throw new UnsupportedOperationException(
+                    "Expected list from jedi_settings.do_completion, got " + results.call("repr"));
+        }
+        // translate from-python list of completion results. For now, each item in the outer list is a [str, int]
+        // which contains the text of the replacement, and the column where it should be inserted.
+        List<CompletionItem> finalItems = new ArrayList<>();
+
+        for (PyObject result : results.asList()) {
+            if (!result.isList()) {
+                throw new UnsupportedOperationException("Expected list-of-lists from jedi_settings.do_completion, "
+                        +
+                        "got bad result " + result.call("repr") + " from full results: " + results.call("repr"));
+            }
+            // we expect [ "completion text", start_column, description, docstring, kind ] as our result.
+            // in the future we may want to get more interesting info from jedi to pass back to client
+            final List<PyObject> items = result.asList();
+            String completionName = items.get(0).getStringValue();
+            int start = items.get(1).getIntValue();
+            final CompletionItem.Builder item = CompletionItem.newBuilder();
+            final TextEdit.Builder textEdit = item.getTextEditBuilder();
+            textEdit.setText(completionName);
+            final DocumentRange.Builder range = textEdit.getRangeBuilder();
+            item.setStart(start);
+            item.setLabel(completionName);
+            item.setLength(completionName.length());
+            item.setDetail(items.get(2).getStringValue());
+            item.setDocumentation(
+                    MarkupContent.newBuilder().setValue(items.get(3).getStringValue()).setKind("plaintext").build());
+            item.setKind(items.get(4).getIntValue());
+            range.getStartBuilder().setLine(pos.getLine()).setCharacter(start);
+            range.getEndBuilder().setLine(pos.getLine()).setCharacter(pos.getCharacter());
+            item.setInsertTextFormat(2);
+            item.setSortText(ChunkerCompleter.sortable(finalItems.size()));
+            finalItems.add(item.build());
+        }
+
+        return GetCompletionItemsResponse.newBuilder()
+                .setSuccess(true)
+                .setRequestId(request.getRequestId())
+                .addAllItems(finalItems)
+                .build();
+    }
+
+    private GetSignatureHelpResponse getSignatureHelp(GetSignatureHelpRequest request, PyObject completer) {
+        final VersionedTextDocumentIdentifier doc = request.getTextDocument();
+        final Position pos = request.getPosition();
+
+        final PyObject results = completer.callMethod("do_signature_help", doc.getUri(), doc.getVersion(),
+                // our java is 0-indexed lines and chars. jedi is 1-indexed lines and 0-indexed chars
+                // we'll keep that translation ugliness to the in-java result-processing.
+                pos.getLine() + 1, pos.getCharacter());
+        if (!results.isList()) {
+            throw new UnsupportedOperationException(
+                    "Expected list from jedi_settings.do_signature_help, got " + results.call("repr"));
+        }
+
+        // translate from-python list of completion results. For now, each item in the outer list is a [str, int]
+        // which contains the text of the replacement, and the column where is should be inserted.
+        List<SignatureInformation> finalItems = new ArrayList<>();
+
+        for (PyObject result : results.asList()) {
+            if (!result.isList()) {
+                throw new UnsupportedOperationException("Expected list-of-lists from jedi_settings.do_signature_help, "
+                        +
+                        "got bad result " + result.call("repr") + " from full results: " + results.call("repr"));
+            }
+            // we expect [ label, documentation, [params], active_parameter ] as our result
+            final List<PyObject> signature = result.asList();
+            String label = signature.get(0).getStringValue();
+            String docstring = signature.get(1).getStringValue();
+            int activeParam = signature.get(3).getIntValue();
+
+            final SignatureInformation.Builder item = SignatureInformation.newBuilder();
+            item.setLabel(label);
+            item.setDocumentation(MarkupContent.newBuilder().setValue(docstring).setKind("plaintext").build());
+            item.setActiveParameter(activeParam);
+
+            signature.get(2).asList().forEach(obj -> {
+                final List<PyObject> param = obj.asList();
+                item.addParameters(ParameterInformation.newBuilder().setLabel(param.get(0).getStringValue())
+                        .setDocumentation(MarkupContent.newBuilder().setValue(param.get(1).getStringValue())
+                                .setKind("plaintext").build()));
+            });
+
+            finalItems.add(item.build());
+        }
+
+        return GetSignatureHelpResponse.newBuilder()
+                .addAllSignatures(finalItems)
+                .build();
+    }
+
+    private GetHoverResponse getHover(GetHoverRequest request, PyObject completer) {
+        final VersionedTextDocumentIdentifier doc = request.getTextDocument();
+        final Position pos = request.getPosition();
+
+        final PyObject result = completer.callMethod("do_hover", doc.getUri(), doc.getVersion(),
+                // our java is 0-indexed lines and chars. jedi is 1-indexed lines and 0-indexed chars
+                // we'll keep that translation ugliness to the in-java result-processing.
+                pos.getLine() + 1, pos.getCharacter());
+        if (!result.isList()) {
+            throw new UnsupportedOperationException(
+                    "Expected list from jedi_settings.do_hover, got " + result.call("repr"));
+        }
+
+        // We expect [ contents ] as our result
+        // We don't set the range b/c Jedi doesn't seem to give the word range under the cursor easily
+        // Monaco in the web auto-detects the word range for the hover if not set
+        final List<PyObject> hover = result.asList();
+
+        return GetHoverResponse.newBuilder()
+                .setContents(MarkupContent.newBuilder().setValue(hover.get(0).getStringValue()).setKind("markdown"))
+                .build();
+    }
+
     private String toMillis(final long totalNanos) {
         StringBuilder totalNano = new StringBuilder(Long.toString(totalNanos));
         while (totalNano.length() < 7) {
diff --git a/web/client-api/src/main/java/io/deephaven/web/client/ide/IdeSession.java b/web/client-api/src/main/java/io/deephaven/web/client/ide/IdeSession.java
index c63bca5d196..2f76126d37f 100644
--- a/web/client-api/src/main/java/io/deephaven/web/client/ide/IdeSession.java
+++ b/web/client-api/src/main/java/io/deephaven/web/client/ide/IdeSession.java
@@ -52,7 +52,7 @@ public class IdeSession extends HasEventHandling {
     private final WorkerConnection connection;
     private final JsRunnable closer;
     private int nextAutocompleteRequestId = 0;
-    private Map<Integer, LazyPromise<JsArray<io.deephaven.web.shared.ide.lsp.CompletionItem>>> pendingAutocompleteCalls =
+    private Map<Integer, LazyPromise<AutoCompleteResponse>> pendingAutocompleteCalls =
             new HashMap<>();
 
     private final Supplier<BiDiStream<AutoCompleteRequest, AutoCompleteResponse>> streamFactory;
@@ -204,15 +204,10 @@ private BiDiStream<AutoCompleteRequest, AutoCompleteResponse> ensureStream() {
         }
         currentStream = streamFactory.get();
         currentStream.onData(res -> {
-            LazyPromise<JsArray<io.deephaven.web.shared.ide.lsp.CompletionItem>> pendingPromise =
-                    pendingAutocompleteCalls.remove(res.getCompletionItems().getRequestId());
-            if (pendingPromise == null) {
-                return;
-            }
-            if (res.getCompletionItems().getSuccess()) {
-                pendingPromise.succeed(cleanupItems(res.getCompletionItems().getItemsList()));
+            if (res.getSuccess()) {
+                pendingAutocompleteCalls.remove(res.getRequestId()).succeed(res);
             } else {
-                pendingPromise
+                pendingAutocompleteCalls.remove(res.getRequestId())
                         .fail("Error occurred handling autocomplete on the server, probably request is out of date");
             }
         });
@@ -250,6 +245,7 @@ public void openDocument(Object params) {
 
         JsLog.debug("Opening document for autocomplete ", request);
         AutoCompleteRequest wrapper = new AutoCompleteRequest();
+        wrapper.setConsoleId(result);
         wrapper.setOpenDocument(request);
         ensureStream().send(wrapper);
     }
@@ -283,6 +279,7 @@ public void changeDocument(Object params) {
 
         JsLog.debug("Sending content changes", request);
         AutoCompleteRequest wrapper = new AutoCompleteRequest();
+        wrapper.setConsoleId(result);
         wrapper.setChangeDocument(request);
         ensureStream().send(wrapper);
     }
@@ -303,45 +300,98 @@ private Position toPosition(final Any pos) {
         return result;
     }
 
+    private AutoCompleteRequest getAutoCompleteRequest() {
+        AutoCompleteRequest request = new AutoCompleteRequest();
+        request.setConsoleId(this.result);
+        request.setRequestId(nextAutocompleteRequestId);
+        nextAutocompleteRequestId++;
+        return request;
+    }
+
     public Promise<JsArray<io.deephaven.web.shared.ide.lsp.CompletionItem>> getCompletionItems(Object params) {
         final JsPropertyMap<Object> jsMap = Js.uncheckedCast(params);
-        final GetCompletionItemsRequest request = new GetCompletionItemsRequest();
+        final GetCompletionItemsRequest completionRequest = new GetCompletionItemsRequest();
 
         final VersionedTextDocumentIdentifier textDocument = toVersionedTextDoc(jsMap.getAsAny("textDocument"));
-        request.setTextDocument(textDocument);
-        request.setPosition(toPosition(jsMap.getAsAny("position")));
-        request.setContext(toContext(jsMap.getAsAny("context")));
-        request.setConsoleId(this.result);
-        request.setRequestId(nextAutocompleteRequestId++);
+        completionRequest.setTextDocument(textDocument);
+        completionRequest.setPosition(toPosition(jsMap.getAsAny("position")));
+        completionRequest.setContext(toContext(jsMap.getAsAny("context")));
 
-        LazyPromise<JsArray<io.deephaven.web.shared.ide.lsp.CompletionItem>> promise = new LazyPromise<>();
-        AutoCompleteRequest wrapper = new AutoCompleteRequest();
-        wrapper.setGetCompletionItems(request);
-        ensureStream().send(wrapper);
+        final AutoCompleteRequest request = getAutoCompleteRequest();
+        request.setGetCompletionItems(completionRequest);
+
+        // Set these in case running against an old server implementation
+        completionRequest.setConsoleId(request.getConsoleId());
+        completionRequest.setRequestId(request.getRequestId());
+
+        LazyPromise<AutoCompleteResponse> promise = new LazyPromise<>();
         pendingAutocompleteCalls.put(request.getRequestId(), promise);
+        ensureStream().send(request);
 
         return promise
                 .timeout(JsTable.MAX_BATCH_TIME)
                 .asPromise()
-                .then(Promise::resolve, fail -> {
-                    pendingAutocompleteCalls.remove(request.getRequestId());
-                    // noinspection unchecked, rawtypes
-                    return (Promise<JsArray<io.deephaven.web.shared.ide.lsp.CompletionItem>>) (Promise) Promise
-                            .reject(fail);
-                });
+                .then(res -> Promise.resolve(
+                        res.getCompletionItems().getItemsList().map((item, index, arr) -> LspTranslate.toJs(item))),
+                        fail -> {
+                            // noinspection unchecked, rawtypes
+                            return (Promise<JsArray<io.deephaven.web.shared.ide.lsp.CompletionItem>>) (Promise) Promise
+                                    .reject(fail);
+                        });
     }
 
-    private JsArray<io.deephaven.web.shared.ide.lsp.CompletionItem> cleanupItems(
-            final JsArray<CompletionItem> itemsList) {
-        JsArray<io.deephaven.web.shared.ide.lsp.CompletionItem> cleaned = new JsArray<>();
-        if (itemsList != null) {
-            for (int i = 0; i < itemsList.getLength(); i++) {
-                final CompletionItem item = itemsList.getAt(i);
-                final io.deephaven.web.shared.ide.lsp.CompletionItem copy = LspTranslate.toJs(item);
-                cleaned.push(copy);
-            }
-        }
-        return cleaned;
+
+    public Promise<JsArray<io.deephaven.web.shared.ide.lsp.SignatureInformation>> getSignatureHelp(Object params) {
+        final JsPropertyMap<Object> jsMap = Js.uncheckedCast(params);
+        final GetSignatureHelpRequest signatureHelpRequest = new GetSignatureHelpRequest();
+
+        final VersionedTextDocumentIdentifier textDocument = toVersionedTextDoc(jsMap.getAsAny("textDocument"));
+        signatureHelpRequest.setTextDocument(textDocument);
+        signatureHelpRequest.setPosition(toPosition(jsMap.getAsAny("position")));
+
+        final AutoCompleteRequest request = getAutoCompleteRequest();
+        request.setGetSignatureHelp(signatureHelpRequest);
+
+        LazyPromise<AutoCompleteResponse> promise = new LazyPromise<>();
+        pendingAutocompleteCalls.put(request.getRequestId(), promise);
+        ensureStream().send(request);
+
+        return promise
+                .timeout(JsTable.MAX_BATCH_TIME)
+                .asPromise()
+                .then(res -> Promise.resolve(
+                        res.getSignatures().getSignaturesList().map((item, index, arr) -> LspTranslate.toJs(item))),
+                        fail -> {
+                            // noinspection unchecked, rawtypes
+                            return (Promise<JsArray<io.deephaven.web.shared.ide.lsp.SignatureInformation>>) (Promise) Promise
+                                    .reject(fail);
+                        });
+    }
+
+    public Promise<io.deephaven.web.shared.ide.lsp.Hover> getHover(Object params) {
+        final JsPropertyMap<Object> jsMap = Js.uncheckedCast(params);
+        final GetHoverRequest hoverRequest = new GetHoverRequest();
+
+        final VersionedTextDocumentIdentifier textDocument = toVersionedTextDoc(jsMap.getAsAny("textDocument"));
+        hoverRequest.setTextDocument(textDocument);
+        hoverRequest.setPosition(toPosition(jsMap.getAsAny("position")));
+
+        final AutoCompleteRequest request = getAutoCompleteRequest();
+        request.setGetHover(hoverRequest);
+
+        LazyPromise<AutoCompleteResponse> promise = new LazyPromise<>();
+        pendingAutocompleteCalls.put(request.getRequestId(), promise);
+        ensureStream().send(request);
+
+        return promise
+                .timeout(JsTable.MAX_BATCH_TIME)
+                .asPromise()
+                .then(res -> Promise.resolve(LspTranslate.toJs(res.getHover())),
+                        fail -> {
+                            // noinspection unchecked, rawtypes
+                            return (Promise<io.deephaven.web.shared.ide.lsp.Hover>) (Promise) Promise
+                                    .reject(fail);
+                        });
     }
 
     private CompletionContext toContext(final Any context) {
@@ -364,6 +414,7 @@ public void closeDocument(Object params) {
 
         JsLog.debug("Closing document for autocomplete ", request);
         AutoCompleteRequest wrapper = new AutoCompleteRequest();
+        wrapper.setConsoleId(result);
         wrapper.setCloseDocument(request);
         ensureStream().send(wrapper);
     }
diff --git a/web/client-api/src/main/java/io/deephaven/web/client/ide/LspTranslate.java b/web/client-api/src/main/java/io/deephaven/web/client/ide/LspTranslate.java
index 2357de3eb2b..99f58be079c 100644
--- a/web/client-api/src/main/java/io/deephaven/web/client/ide/LspTranslate.java
+++ b/web/client-api/src/main/java/io/deephaven/web/client/ide/LspTranslate.java
@@ -4,10 +4,7 @@
 package io.deephaven.web.client.ide;
 
 import elemental2.core.JsArray;
-import io.deephaven.web.shared.ide.lsp.CompletionItem;
-import io.deephaven.web.shared.ide.lsp.DocumentRange;
-import io.deephaven.web.shared.ide.lsp.Position;
-import io.deephaven.web.shared.ide.lsp.TextEdit;
+import io.deephaven.web.shared.ide.lsp.*;
 
 /**
  * LspTranslate:
@@ -33,8 +30,8 @@ public static CompletionItem toJs(
         if (!src.getDetail().isEmpty()) {
             item.detail = src.getDetail();
         }
-        if (!src.getDocumentation().isEmpty()) {
-            item.documentation = src.getDocumentation();
+        if (src.hasDocumentation()) {
+            item.documentation = toJs(src.getDocumentation());
         }
         if (!src.getFilterText().isEmpty()) {
             item.filterText = src.getFilterText();
@@ -82,4 +79,56 @@ private static Position toJs(
         item.character = (int) src.getCharacter();
         return item;
     }
+
+    private static MarkupContent toJs(
+            final io.deephaven.javascript.proto.dhinternal.io.deephaven.proto.console_pb.MarkupContent src) {
+        final MarkupContent content = new MarkupContent();
+
+        content.kind = src.getKind();
+        content.value = src.getValue();
+        return content;
+    }
+
+    public static SignatureInformation toJs(
+            io.deephaven.javascript.proto.dhinternal.io.deephaven.proto.console_pb.SignatureInformation src) {
+        final SignatureInformation item = new SignatureInformation();
+        item.label = src.getLabel();
+        if (src.hasDocumentation()) {
+            item.documentation = toJs(src.getDocumentation());
+        }
+        if (src.hasActiveParameter()) {
+            item.activeParameter = src.getActiveParameter();
+        }
+
+        final JsArray<ParameterInformation> params = new JsArray<>();
+        final JsArray<io.deephaven.javascript.proto.dhinternal.io.deephaven.proto.console_pb.ParameterInformation> paramsList =
+                src.getParametersList();
+        for (int i = 0; i < paramsList.getLength(); i++) {
+            params.push(toJs(paramsList.getAt(i)));
+        }
+        item.setParameters(params);
+        return item;
+    }
+
+    private static ParameterInformation toJs(
+            final io.deephaven.javascript.proto.dhinternal.io.deephaven.proto.console_pb.ParameterInformation src) {
+        final ParameterInformation item = new ParameterInformation();
+        item.label = src.getLabel();
+        item.documentation = toJs(src.getDocumentation());
+        return item;
+    }
+
+    public static Hover toJs(
+            final io.deephaven.javascript.proto.dhinternal.io.deephaven.proto.console_pb.GetHoverResponse src) {
+        final Hover item = new Hover();
+
+        if (src.hasContents()) {
+            item.contents = toJs(src.getContents());
+        }
+        if (src.hasRange()) {
+            item.range = toJs(src.getRange());
+        }
+
+        return item;
+    }
 }
diff --git a/web/client-api/src/main/java/io/deephaven/web/shared/ide/lsp/CompletionItem.java b/web/client-api/src/main/java/io/deephaven/web/shared/ide/lsp/CompletionItem.java
index fd78e5adf2c..bf209d4eb34 100644
--- a/web/client-api/src/main/java/io/deephaven/web/shared/ide/lsp/CompletionItem.java
+++ b/web/client-api/src/main/java/io/deephaven/web/shared/ide/lsp/CompletionItem.java
@@ -24,7 +24,7 @@ public class CompletionItem implements Serializable {
     public String label;
     public int kind;
     public String detail;
-    public String documentation;
+    public MarkupContent documentation;
     public boolean deprecated;
     public boolean preselect;
     public TextEdit textEdit;
diff --git a/web/client-api/src/main/java/io/deephaven/web/shared/ide/lsp/Hover.java b/web/client-api/src/main/java/io/deephaven/web/shared/ide/lsp/Hover.java
new file mode 100644
index 00000000000..ab5602d4fee
--- /dev/null
+++ b/web/client-api/src/main/java/io/deephaven/web/shared/ide/lsp/Hover.java
@@ -0,0 +1,24 @@
+/**
+ * Copyright (c) 2016-2022 Deephaven Data Labs and Patent Pending
+ */
+package io.deephaven.web.shared.ide.lsp;
+
+import jsinterop.annotations.JsIgnore;
+import jsinterop.annotations.JsType;
+
+import java.io.Serializable;
+
+@JsType(namespace = "dh.lsp")
+public class Hover implements Serializable {
+    public MarkupContent contents;
+    public DocumentRange range;
+
+    @Override
+    @JsIgnore
+    public String toString() {
+        return "Hover{" +
+                "contents=" + contents +
+                ", range='" + range.toString() + '\'' +
+                '}';
+    }
+}
diff --git a/web/client-api/src/main/java/io/deephaven/web/shared/ide/lsp/MarkupContent.java b/web/client-api/src/main/java/io/deephaven/web/shared/ide/lsp/MarkupContent.java
new file mode 100644
index 00000000000..e5ef5305277
--- /dev/null
+++ b/web/client-api/src/main/java/io/deephaven/web/shared/ide/lsp/MarkupContent.java
@@ -0,0 +1,26 @@
+/**
+ * Copyright (c) 2016-2022 Deephaven Data Labs and Patent Pending
+ */
+package io.deephaven.web.shared.ide.lsp;
+
+import jsinterop.annotations.JsIgnore;
+import jsinterop.annotations.JsType;
+import jsinterop.base.JsPropertyMap;
+
+import java.io.Serializable;
+import java.util.Objects;
+
+@JsType(namespace = "dh.lsp")
+public class MarkupContent implements Serializable {
+    public String kind;
+    public String value;
+
+    @Override
+    @JsIgnore
+    public String toString() {
+        return "MarkupContent{" +
+                "kind=" + kind +
+                ", value=" + value +
+                '}';
+    }
+}
diff --git a/web/client-api/src/main/java/io/deephaven/web/shared/ide/lsp/ParameterInformation.java b/web/client-api/src/main/java/io/deephaven/web/shared/ide/lsp/ParameterInformation.java
new file mode 100644
index 00000000000..439eb16ff1b
--- /dev/null
+++ b/web/client-api/src/main/java/io/deephaven/web/shared/ide/lsp/ParameterInformation.java
@@ -0,0 +1,24 @@
+/**
+ * Copyright (c) 2016-2022 Deephaven Data Labs and Patent Pending
+ */
+package io.deephaven.web.shared.ide.lsp;
+
+import jsinterop.annotations.JsIgnore;
+import jsinterop.annotations.JsType;
+
+import java.io.Serializable;
+
+@JsType(namespace = "dh.lsp")
+public class ParameterInformation implements Serializable {
+    public String label;
+    public MarkupContent documentation;
+
+    @Override
+    @JsIgnore
+    public String toString() {
+        return "ParameterInformation{" +
+                "label=" + label +
+                ", documentation='" + documentation + '\'' +
+                '}';
+    }
+}
diff --git a/web/client-api/src/main/java/io/deephaven/web/shared/ide/lsp/SignatureInformation.java b/web/client-api/src/main/java/io/deephaven/web/shared/ide/lsp/SignatureInformation.java
new file mode 100644
index 00000000000..828d16891c2
--- /dev/null
+++ b/web/client-api/src/main/java/io/deephaven/web/shared/ide/lsp/SignatureInformation.java
@@ -0,0 +1,58 @@
+/**
+ * Copyright (c) 2016-2022 Deephaven Data Labs and Patent Pending
+ */
+package io.deephaven.web.shared.ide.lsp;
+
+import com.google.gwt.core.client.JavaScriptObject;
+import elemental2.core.JsArray;
+import elemental2.core.JsObject;
+import jsinterop.annotations.JsIgnore;
+import jsinterop.annotations.JsProperty;
+import jsinterop.annotations.JsType;
+import jsinterop.base.Js;
+
+import java.io.Serializable;
+import java.lang.reflect.Array;
+import java.util.Arrays;
+import java.util.Objects;
+
+import static io.deephaven.web.shared.fu.JsArrays.setArray;
+
+@JsType(namespace = "dh.lsp")
+public class SignatureInformation implements Serializable {
+    public String label;
+    public MarkupContent documentation;
+    private ParameterInformation[] parameters;
+    public int activeParameter;
+
+    @JsProperty
+    public void setParameters(Object args) {
+        if (args == null || args instanceof ParameterInformation[]) {
+            parameters = (ParameterInformation[]) args;
+        } else if (args instanceof JavaScriptObject) {
+            // this is actually javascript. We can do terrible things here and it's ok
+            final int length = Array.getLength(args);
+            final ParameterInformation[] typed = new ParameterInformation[length];
+            System.arraycopy(args, 0, typed, 0, length);
+            parameters = JsObject.freeze(typed);
+        } else {
+            throw new IllegalArgumentException("Not a ParameterInformation[] or js []" + args);
+        }
+    }
+
+    @JsProperty
+    public Object getParameters() {
+        return parameters;
+    }
+
+    @Override
+    @JsIgnore
+    public String toString() {
+        return "SignatureInformation{" +
+                "label=" + label +
+                ", documentation=" + documentation +
+                ", parameters=" + Arrays.toString(parameters) +
+                ", activeParameter=" + activeParameter +
+                "}\n";
+    }
+}
diff --git a/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/console_pb/AutoCompleteRequest.java b/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/console_pb/AutoCompleteRequest.java
index cc5f3084cb6..b623fc682a1 100644
--- a/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/console_pb/AutoCompleteRequest.java
+++ b/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/console_pb/AutoCompleteRequest.java
@@ -5,6 +5,7 @@
 
 import elemental2.core.JsArray;
 import elemental2.core.Uint8Array;
+import io.deephaven.javascript.proto.dhinternal.io.deephaven.proto.ticket_pb.Ticket;
 import jsinterop.annotations.JsOverlay;
 import jsinterop.annotations.JsPackage;
 import jsinterop.annotations.JsProperty;
@@ -163,6 +164,64 @@ static AutoCompleteRequest.ToObjectReturnType.CloseDocumentFieldType create() {
             void setTextDocument(Object textDocument);
         }
 
+        @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+        public interface ConsoleIdFieldType {
+            @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+            public interface GetTicketUnionType {
+                @JsOverlay
+                static AutoCompleteRequest.ToObjectReturnType.ConsoleIdFieldType.GetTicketUnionType of(
+                        Object o) {
+                    return Js.cast(o);
+                }
+
+                @JsOverlay
+                default String asString() {
+                    return Js.asString(this);
+                }
+
+                @JsOverlay
+                default Uint8Array asUint8Array() {
+                    return Js.cast(this);
+                }
+
+                @JsOverlay
+                default boolean isString() {
+                    return (Object) this instanceof String;
+                }
+
+                @JsOverlay
+                default boolean isUint8Array() {
+                    return (Object) this instanceof Uint8Array;
+                }
+            }
+
+            @JsOverlay
+            static AutoCompleteRequest.ToObjectReturnType.ConsoleIdFieldType create() {
+                return Js.uncheckedCast(JsPropertyMap.of());
+            }
+
+            @JsProperty
+            AutoCompleteRequest.ToObjectReturnType.ConsoleIdFieldType.GetTicketUnionType getTicket();
+
+            @JsProperty
+            void setTicket(
+                    AutoCompleteRequest.ToObjectReturnType.ConsoleIdFieldType.GetTicketUnionType ticket);
+
+            @JsOverlay
+            default void setTicket(String ticket) {
+                setTicket(
+                        Js.<AutoCompleteRequest.ToObjectReturnType.ConsoleIdFieldType.GetTicketUnionType>uncheckedCast(
+                                ticket));
+            }
+
+            @JsOverlay
+            default void setTicket(Uint8Array ticket) {
+                setTicket(
+                        Js.<AutoCompleteRequest.ToObjectReturnType.ConsoleIdFieldType.GetTicketUnionType>uncheckedCast(
+                                ticket));
+            }
+        }
+
         @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
         public interface GetCompletionItemsFieldType {
             @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
@@ -223,65 +282,230 @@ void setContext(
         }
 
         @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
-        public interface OpenDocumentFieldType {
+        public interface GetDiagnosticFieldType {
+            @JsOverlay
+            static AutoCompleteRequest.ToObjectReturnType.GetDiagnosticFieldType create() {
+                return Js.uncheckedCast(JsPropertyMap.of());
+            }
+
+            @JsProperty
+            String getIdentifier();
+
+            @JsProperty
+            String getPreviousResultId();
+
+            @JsProperty
+            Object getTextDocument();
+
+            @JsProperty
+            void setIdentifier(String identifier);
+
+            @JsProperty
+            void setPreviousResultId(String previousResultId);
+
+            @JsProperty
+            void setTextDocument(Object textDocument);
+        }
+
+        @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+        public interface GetHoverFieldType {
+            @JsOverlay
+            static AutoCompleteRequest.ToObjectReturnType.GetHoverFieldType create() {
+                return Js.uncheckedCast(JsPropertyMap.of());
+            }
+
+            @JsProperty
+            Object getPosition();
+
+            @JsProperty
+            Object getTextDocument();
+
+            @JsProperty
+            void setPosition(Object position);
+
+            @JsProperty
+            void setTextDocument(Object textDocument);
+        }
+
+        @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+        public interface GetSignatureHelpFieldType {
             @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
-            public interface ConsoleIdFieldType {
+            public interface ContextFieldType {
                 @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
-                public interface GetTicketUnionType {
-                    @JsOverlay
-                    static AutoCompleteRequest.ToObjectReturnType.OpenDocumentFieldType.ConsoleIdFieldType.GetTicketUnionType of(
-                            Object o) {
-                        return Js.cast(o);
-                    }
+                public interface ActiveSignatureHelpFieldType {
+                    @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+                    public interface SignaturesListFieldType {
+                        @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+                        public interface DocumentationFieldType {
+                            @JsOverlay
+                            static AutoCompleteRequest.ToObjectReturnType.GetSignatureHelpFieldType.ContextFieldType.ActiveSignatureHelpFieldType.SignaturesListFieldType.DocumentationFieldType create() {
+                                return Js.uncheckedCast(JsPropertyMap.of());
+                            }
 
-                    @JsOverlay
-                    default String asString() {
-                        return Js.asString(this);
-                    }
+                            @JsProperty
+                            String getKind();
 
-                    @JsOverlay
-                    default Uint8Array asUint8Array() {
-                        return Js.cast(this);
+                            @JsProperty
+                            String getValue();
+
+                            @JsProperty
+                            void setKind(String kind);
+
+                            @JsProperty
+                            void setValue(String value);
+                        }
+
+                        @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+                        public interface ParametersListFieldType {
+                            @JsOverlay
+                            static AutoCompleteRequest.ToObjectReturnType.GetSignatureHelpFieldType.ContextFieldType.ActiveSignatureHelpFieldType.SignaturesListFieldType.ParametersListFieldType create() {
+                                return Js.uncheckedCast(JsPropertyMap.of());
+                            }
+
+                            @JsProperty
+                            Object getDocumentation();
+
+                            @JsProperty
+                            String getLabel();
+
+                            @JsProperty
+                            void setDocumentation(Object documentation);
+
+                            @JsProperty
+                            void setLabel(String label);
+                        }
+
+                        @JsOverlay
+                        static AutoCompleteRequest.ToObjectReturnType.GetSignatureHelpFieldType.ContextFieldType.ActiveSignatureHelpFieldType.SignaturesListFieldType create() {
+                            return Js.uncheckedCast(JsPropertyMap.of());
+                        }
+
+                        @JsProperty
+                        double getActiveParameter();
+
+                        @JsProperty
+                        AutoCompleteRequest.ToObjectReturnType.GetSignatureHelpFieldType.ContextFieldType.ActiveSignatureHelpFieldType.SignaturesListFieldType.DocumentationFieldType getDocumentation();
+
+                        @JsProperty
+                        String getLabel();
+
+                        @JsProperty
+                        JsArray<AutoCompleteRequest.ToObjectReturnType.GetSignatureHelpFieldType.ContextFieldType.ActiveSignatureHelpFieldType.SignaturesListFieldType.ParametersListFieldType> getParametersList();
+
+                        @JsProperty
+                        void setActiveParameter(double activeParameter);
+
+                        @JsProperty
+                        void setDocumentation(
+                                AutoCompleteRequest.ToObjectReturnType.GetSignatureHelpFieldType.ContextFieldType.ActiveSignatureHelpFieldType.SignaturesListFieldType.DocumentationFieldType documentation);
+
+                        @JsProperty
+                        void setLabel(String label);
+
+                        @JsProperty
+                        void setParametersList(
+                                JsArray<AutoCompleteRequest.ToObjectReturnType.GetSignatureHelpFieldType.ContextFieldType.ActiveSignatureHelpFieldType.SignaturesListFieldType.ParametersListFieldType> parametersList);
+
+                        @JsOverlay
+                        default void setParametersList(
+                                AutoCompleteRequest.ToObjectReturnType.GetSignatureHelpFieldType.ContextFieldType.ActiveSignatureHelpFieldType.SignaturesListFieldType.ParametersListFieldType[] parametersList) {
+                            setParametersList(
+                                    Js.<JsArray<AutoCompleteRequest.ToObjectReturnType.GetSignatureHelpFieldType.ContextFieldType.ActiveSignatureHelpFieldType.SignaturesListFieldType.ParametersListFieldType>>uncheckedCast(
+                                            parametersList));
+                        }
                     }
 
                     @JsOverlay
-                    default boolean isString() {
-                        return (Object) this instanceof String;
+                    static AutoCompleteRequest.ToObjectReturnType.GetSignatureHelpFieldType.ContextFieldType.ActiveSignatureHelpFieldType create() {
+                        return Js.uncheckedCast(JsPropertyMap.of());
                     }
 
+                    @JsProperty
+                    double getActiveParameter();
+
+                    @JsProperty
+                    double getActiveSignature();
+
+                    @JsProperty
+                    JsArray<AutoCompleteRequest.ToObjectReturnType.GetSignatureHelpFieldType.ContextFieldType.ActiveSignatureHelpFieldType.SignaturesListFieldType> getSignaturesList();
+
+                    @JsProperty
+                    void setActiveParameter(double activeParameter);
+
+                    @JsProperty
+                    void setActiveSignature(double activeSignature);
+
+                    @JsProperty
+                    void setSignaturesList(
+                            JsArray<AutoCompleteRequest.ToObjectReturnType.GetSignatureHelpFieldType.ContextFieldType.ActiveSignatureHelpFieldType.SignaturesListFieldType> signaturesList);
+
                     @JsOverlay
-                    default boolean isUint8Array() {
-                        return (Object) this instanceof Uint8Array;
+                    default void setSignaturesList(
+                            AutoCompleteRequest.ToObjectReturnType.GetSignatureHelpFieldType.ContextFieldType.ActiveSignatureHelpFieldType.SignaturesListFieldType[] signaturesList) {
+                        setSignaturesList(
+                                Js.<JsArray<AutoCompleteRequest.ToObjectReturnType.GetSignatureHelpFieldType.ContextFieldType.ActiveSignatureHelpFieldType.SignaturesListFieldType>>uncheckedCast(
+                                        signaturesList));
                     }
                 }
 
                 @JsOverlay
-                static AutoCompleteRequest.ToObjectReturnType.OpenDocumentFieldType.ConsoleIdFieldType create() {
+                static AutoCompleteRequest.ToObjectReturnType.GetSignatureHelpFieldType.ContextFieldType create() {
                     return Js.uncheckedCast(JsPropertyMap.of());
                 }
 
                 @JsProperty
-                AutoCompleteRequest.ToObjectReturnType.OpenDocumentFieldType.ConsoleIdFieldType.GetTicketUnionType getTicket();
+                AutoCompleteRequest.ToObjectReturnType.GetSignatureHelpFieldType.ContextFieldType.ActiveSignatureHelpFieldType getActiveSignatureHelp();
+
+                @JsProperty
+                String getTriggerCharacter();
 
                 @JsProperty
-                void setTicket(
-                        AutoCompleteRequest.ToObjectReturnType.OpenDocumentFieldType.ConsoleIdFieldType.GetTicketUnionType ticket);
+                double getTriggerKind();
 
-                @JsOverlay
-                default void setTicket(String ticket) {
-                    setTicket(
-                            Js.<AutoCompleteRequest.ToObjectReturnType.OpenDocumentFieldType.ConsoleIdFieldType.GetTicketUnionType>uncheckedCast(
-                                    ticket));
-                }
+                @JsProperty
+                boolean isIsRetrigger();
 
-                @JsOverlay
-                default void setTicket(Uint8Array ticket) {
-                    setTicket(
-                            Js.<AutoCompleteRequest.ToObjectReturnType.OpenDocumentFieldType.ConsoleIdFieldType.GetTicketUnionType>uncheckedCast(
-                                    ticket));
-                }
+                @JsProperty
+                void setActiveSignatureHelp(
+                        AutoCompleteRequest.ToObjectReturnType.GetSignatureHelpFieldType.ContextFieldType.ActiveSignatureHelpFieldType activeSignatureHelp);
+
+                @JsProperty
+                void setIsRetrigger(boolean isRetrigger);
+
+                @JsProperty
+                void setTriggerCharacter(String triggerCharacter);
+
+                @JsProperty
+                void setTriggerKind(double triggerKind);
+            }
+
+            @JsOverlay
+            static AutoCompleteRequest.ToObjectReturnType.GetSignatureHelpFieldType create() {
+                return Js.uncheckedCast(JsPropertyMap.of());
             }
 
+            @JsProperty
+            AutoCompleteRequest.ToObjectReturnType.GetSignatureHelpFieldType.ContextFieldType getContext();
+
+            @JsProperty
+            Object getPosition();
+
+            @JsProperty
+            Object getTextDocument();
+
+            @JsProperty
+            void setContext(
+                    AutoCompleteRequest.ToObjectReturnType.GetSignatureHelpFieldType.ContextFieldType context);
+
+            @JsProperty
+            void setPosition(Object position);
+
+            @JsProperty
+            void setTextDocument(Object textDocument);
+        }
+
+        @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+        public interface OpenDocumentFieldType {
             @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
             public interface TextDocumentFieldType {
                 @JsOverlay
@@ -320,14 +544,13 @@ static AutoCompleteRequest.ToObjectReturnType.OpenDocumentFieldType create() {
             }
 
             @JsProperty
-            AutoCompleteRequest.ToObjectReturnType.OpenDocumentFieldType.ConsoleIdFieldType getConsoleId();
+            Object getConsoleId();
 
             @JsProperty
             AutoCompleteRequest.ToObjectReturnType.OpenDocumentFieldType.TextDocumentFieldType getTextDocument();
 
             @JsProperty
-            void setConsoleId(
-                    AutoCompleteRequest.ToObjectReturnType.OpenDocumentFieldType.ConsoleIdFieldType consoleId);
+            void setConsoleId(Object consoleId);
 
             @JsProperty
             void setTextDocument(
@@ -345,12 +568,27 @@ static AutoCompleteRequest.ToObjectReturnType create() {
         @JsProperty
         AutoCompleteRequest.ToObjectReturnType.CloseDocumentFieldType getCloseDocument();
 
+        @JsProperty
+        AutoCompleteRequest.ToObjectReturnType.ConsoleIdFieldType getConsoleId();
+
         @JsProperty
         AutoCompleteRequest.ToObjectReturnType.GetCompletionItemsFieldType getGetCompletionItems();
 
+        @JsProperty
+        AutoCompleteRequest.ToObjectReturnType.GetDiagnosticFieldType getGetDiagnostic();
+
+        @JsProperty
+        AutoCompleteRequest.ToObjectReturnType.GetHoverFieldType getGetHover();
+
+        @JsProperty
+        AutoCompleteRequest.ToObjectReturnType.GetSignatureHelpFieldType getGetSignatureHelp();
+
         @JsProperty
         AutoCompleteRequest.ToObjectReturnType.OpenDocumentFieldType getOpenDocument();
 
+        @JsProperty
+        double getRequestId();
+
         @JsProperty
         void setChangeDocument(
                 AutoCompleteRequest.ToObjectReturnType.ChangeDocumentFieldType changeDocument);
@@ -359,12 +597,29 @@ void setChangeDocument(
         void setCloseDocument(
                 AutoCompleteRequest.ToObjectReturnType.CloseDocumentFieldType closeDocument);
 
+        @JsProperty
+        void setConsoleId(AutoCompleteRequest.ToObjectReturnType.ConsoleIdFieldType consoleId);
+
         @JsProperty
         void setGetCompletionItems(
                 AutoCompleteRequest.ToObjectReturnType.GetCompletionItemsFieldType getCompletionItems);
 
+        @JsProperty
+        void setGetDiagnostic(
+                AutoCompleteRequest.ToObjectReturnType.GetDiagnosticFieldType getDiagnostic);
+
+        @JsProperty
+        void setGetHover(AutoCompleteRequest.ToObjectReturnType.GetHoverFieldType getHover);
+
+        @JsProperty
+        void setGetSignatureHelp(
+                AutoCompleteRequest.ToObjectReturnType.GetSignatureHelpFieldType getSignatureHelp);
+
         @JsProperty
         void setOpenDocument(AutoCompleteRequest.ToObjectReturnType.OpenDocumentFieldType openDocument);
+
+        @JsProperty
+        void setRequestId(double requestId);
     }
 
     @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
@@ -513,6 +768,64 @@ static AutoCompleteRequest.ToObjectReturnType0.CloseDocumentFieldType create() {
             void setTextDocument(Object textDocument);
         }
 
+        @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+        public interface ConsoleIdFieldType {
+            @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+            public interface GetTicketUnionType {
+                @JsOverlay
+                static AutoCompleteRequest.ToObjectReturnType0.ConsoleIdFieldType.GetTicketUnionType of(
+                        Object o) {
+                    return Js.cast(o);
+                }
+
+                @JsOverlay
+                default String asString() {
+                    return Js.asString(this);
+                }
+
+                @JsOverlay
+                default Uint8Array asUint8Array() {
+                    return Js.cast(this);
+                }
+
+                @JsOverlay
+                default boolean isString() {
+                    return (Object) this instanceof String;
+                }
+
+                @JsOverlay
+                default boolean isUint8Array() {
+                    return (Object) this instanceof Uint8Array;
+                }
+            }
+
+            @JsOverlay
+            static AutoCompleteRequest.ToObjectReturnType0.ConsoleIdFieldType create() {
+                return Js.uncheckedCast(JsPropertyMap.of());
+            }
+
+            @JsProperty
+            AutoCompleteRequest.ToObjectReturnType0.ConsoleIdFieldType.GetTicketUnionType getTicket();
+
+            @JsProperty
+            void setTicket(
+                    AutoCompleteRequest.ToObjectReturnType0.ConsoleIdFieldType.GetTicketUnionType ticket);
+
+            @JsOverlay
+            default void setTicket(String ticket) {
+                setTicket(
+                        Js.<AutoCompleteRequest.ToObjectReturnType0.ConsoleIdFieldType.GetTicketUnionType>uncheckedCast(
+                                ticket));
+            }
+
+            @JsOverlay
+            default void setTicket(Uint8Array ticket) {
+                setTicket(
+                        Js.<AutoCompleteRequest.ToObjectReturnType0.ConsoleIdFieldType.GetTicketUnionType>uncheckedCast(
+                                ticket));
+            }
+        }
+
         @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
         public interface GetCompletionItemsFieldType {
             @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
@@ -573,65 +886,230 @@ void setContext(
         }
 
         @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
-        public interface OpenDocumentFieldType {
+        public interface GetDiagnosticFieldType {
+            @JsOverlay
+            static AutoCompleteRequest.ToObjectReturnType0.GetDiagnosticFieldType create() {
+                return Js.uncheckedCast(JsPropertyMap.of());
+            }
+
+            @JsProperty
+            String getIdentifier();
+
+            @JsProperty
+            String getPreviousResultId();
+
+            @JsProperty
+            Object getTextDocument();
+
+            @JsProperty
+            void setIdentifier(String identifier);
+
+            @JsProperty
+            void setPreviousResultId(String previousResultId);
+
+            @JsProperty
+            void setTextDocument(Object textDocument);
+        }
+
+        @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+        public interface GetHoverFieldType {
+            @JsOverlay
+            static AutoCompleteRequest.ToObjectReturnType0.GetHoverFieldType create() {
+                return Js.uncheckedCast(JsPropertyMap.of());
+            }
+
+            @JsProperty
+            Object getPosition();
+
+            @JsProperty
+            Object getTextDocument();
+
+            @JsProperty
+            void setPosition(Object position);
+
+            @JsProperty
+            void setTextDocument(Object textDocument);
+        }
+
+        @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+        public interface GetSignatureHelpFieldType {
             @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
-            public interface ConsoleIdFieldType {
+            public interface ContextFieldType {
                 @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
-                public interface GetTicketUnionType {
-                    @JsOverlay
-                    static AutoCompleteRequest.ToObjectReturnType0.OpenDocumentFieldType.ConsoleIdFieldType.GetTicketUnionType of(
-                            Object o) {
-                        return Js.cast(o);
-                    }
+                public interface ActiveSignatureHelpFieldType {
+                    @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+                    public interface SignaturesListFieldType {
+                        @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+                        public interface DocumentationFieldType {
+                            @JsOverlay
+                            static AutoCompleteRequest.ToObjectReturnType0.GetSignatureHelpFieldType.ContextFieldType.ActiveSignatureHelpFieldType.SignaturesListFieldType.DocumentationFieldType create() {
+                                return Js.uncheckedCast(JsPropertyMap.of());
+                            }
 
-                    @JsOverlay
-                    default String asString() {
-                        return Js.asString(this);
-                    }
+                            @JsProperty
+                            String getKind();
 
-                    @JsOverlay
-                    default Uint8Array asUint8Array() {
-                        return Js.cast(this);
+                            @JsProperty
+                            String getValue();
+
+                            @JsProperty
+                            void setKind(String kind);
+
+                            @JsProperty
+                            void setValue(String value);
+                        }
+
+                        @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+                        public interface ParametersListFieldType {
+                            @JsOverlay
+                            static AutoCompleteRequest.ToObjectReturnType0.GetSignatureHelpFieldType.ContextFieldType.ActiveSignatureHelpFieldType.SignaturesListFieldType.ParametersListFieldType create() {
+                                return Js.uncheckedCast(JsPropertyMap.of());
+                            }
+
+                            @JsProperty
+                            Object getDocumentation();
+
+                            @JsProperty
+                            String getLabel();
+
+                            @JsProperty
+                            void setDocumentation(Object documentation);
+
+                            @JsProperty
+                            void setLabel(String label);
+                        }
+
+                        @JsOverlay
+                        static AutoCompleteRequest.ToObjectReturnType0.GetSignatureHelpFieldType.ContextFieldType.ActiveSignatureHelpFieldType.SignaturesListFieldType create() {
+                            return Js.uncheckedCast(JsPropertyMap.of());
+                        }
+
+                        @JsProperty
+                        double getActiveParameter();
+
+                        @JsProperty
+                        AutoCompleteRequest.ToObjectReturnType0.GetSignatureHelpFieldType.ContextFieldType.ActiveSignatureHelpFieldType.SignaturesListFieldType.DocumentationFieldType getDocumentation();
+
+                        @JsProperty
+                        String getLabel();
+
+                        @JsProperty
+                        JsArray<AutoCompleteRequest.ToObjectReturnType0.GetSignatureHelpFieldType.ContextFieldType.ActiveSignatureHelpFieldType.SignaturesListFieldType.ParametersListFieldType> getParametersList();
+
+                        @JsProperty
+                        void setActiveParameter(double activeParameter);
+
+                        @JsProperty
+                        void setDocumentation(
+                                AutoCompleteRequest.ToObjectReturnType0.GetSignatureHelpFieldType.ContextFieldType.ActiveSignatureHelpFieldType.SignaturesListFieldType.DocumentationFieldType documentation);
+
+                        @JsProperty
+                        void setLabel(String label);
+
+                        @JsProperty
+                        void setParametersList(
+                                JsArray<AutoCompleteRequest.ToObjectReturnType0.GetSignatureHelpFieldType.ContextFieldType.ActiveSignatureHelpFieldType.SignaturesListFieldType.ParametersListFieldType> parametersList);
+
+                        @JsOverlay
+                        default void setParametersList(
+                                AutoCompleteRequest.ToObjectReturnType0.GetSignatureHelpFieldType.ContextFieldType.ActiveSignatureHelpFieldType.SignaturesListFieldType.ParametersListFieldType[] parametersList) {
+                            setParametersList(
+                                    Js.<JsArray<AutoCompleteRequest.ToObjectReturnType0.GetSignatureHelpFieldType.ContextFieldType.ActiveSignatureHelpFieldType.SignaturesListFieldType.ParametersListFieldType>>uncheckedCast(
+                                            parametersList));
+                        }
                     }
 
                     @JsOverlay
-                    default boolean isString() {
-                        return (Object) this instanceof String;
+                    static AutoCompleteRequest.ToObjectReturnType0.GetSignatureHelpFieldType.ContextFieldType.ActiveSignatureHelpFieldType create() {
+                        return Js.uncheckedCast(JsPropertyMap.of());
                     }
 
+                    @JsProperty
+                    double getActiveParameter();
+
+                    @JsProperty
+                    double getActiveSignature();
+
+                    @JsProperty
+                    JsArray<AutoCompleteRequest.ToObjectReturnType0.GetSignatureHelpFieldType.ContextFieldType.ActiveSignatureHelpFieldType.SignaturesListFieldType> getSignaturesList();
+
+                    @JsProperty
+                    void setActiveParameter(double activeParameter);
+
+                    @JsProperty
+                    void setActiveSignature(double activeSignature);
+
+                    @JsProperty
+                    void setSignaturesList(
+                            JsArray<AutoCompleteRequest.ToObjectReturnType0.GetSignatureHelpFieldType.ContextFieldType.ActiveSignatureHelpFieldType.SignaturesListFieldType> signaturesList);
+
                     @JsOverlay
-                    default boolean isUint8Array() {
-                        return (Object) this instanceof Uint8Array;
+                    default void setSignaturesList(
+                            AutoCompleteRequest.ToObjectReturnType0.GetSignatureHelpFieldType.ContextFieldType.ActiveSignatureHelpFieldType.SignaturesListFieldType[] signaturesList) {
+                        setSignaturesList(
+                                Js.<JsArray<AutoCompleteRequest.ToObjectReturnType0.GetSignatureHelpFieldType.ContextFieldType.ActiveSignatureHelpFieldType.SignaturesListFieldType>>uncheckedCast(
+                                        signaturesList));
                     }
                 }
 
                 @JsOverlay
-                static AutoCompleteRequest.ToObjectReturnType0.OpenDocumentFieldType.ConsoleIdFieldType create() {
+                static AutoCompleteRequest.ToObjectReturnType0.GetSignatureHelpFieldType.ContextFieldType create() {
                     return Js.uncheckedCast(JsPropertyMap.of());
                 }
 
                 @JsProperty
-                AutoCompleteRequest.ToObjectReturnType0.OpenDocumentFieldType.ConsoleIdFieldType.GetTicketUnionType getTicket();
+                AutoCompleteRequest.ToObjectReturnType0.GetSignatureHelpFieldType.ContextFieldType.ActiveSignatureHelpFieldType getActiveSignatureHelp();
 
                 @JsProperty
-                void setTicket(
-                        AutoCompleteRequest.ToObjectReturnType0.OpenDocumentFieldType.ConsoleIdFieldType.GetTicketUnionType ticket);
+                String getTriggerCharacter();
 
-                @JsOverlay
-                default void setTicket(String ticket) {
-                    setTicket(
-                            Js.<AutoCompleteRequest.ToObjectReturnType0.OpenDocumentFieldType.ConsoleIdFieldType.GetTicketUnionType>uncheckedCast(
-                                    ticket));
-                }
+                @JsProperty
+                double getTriggerKind();
 
-                @JsOverlay
-                default void setTicket(Uint8Array ticket) {
-                    setTicket(
-                            Js.<AutoCompleteRequest.ToObjectReturnType0.OpenDocumentFieldType.ConsoleIdFieldType.GetTicketUnionType>uncheckedCast(
-                                    ticket));
-                }
+                @JsProperty
+                boolean isIsRetrigger();
+
+                @JsProperty
+                void setActiveSignatureHelp(
+                        AutoCompleteRequest.ToObjectReturnType0.GetSignatureHelpFieldType.ContextFieldType.ActiveSignatureHelpFieldType activeSignatureHelp);
+
+                @JsProperty
+                void setIsRetrigger(boolean isRetrigger);
+
+                @JsProperty
+                void setTriggerCharacter(String triggerCharacter);
+
+                @JsProperty
+                void setTriggerKind(double triggerKind);
             }
 
+            @JsOverlay
+            static AutoCompleteRequest.ToObjectReturnType0.GetSignatureHelpFieldType create() {
+                return Js.uncheckedCast(JsPropertyMap.of());
+            }
+
+            @JsProperty
+            AutoCompleteRequest.ToObjectReturnType0.GetSignatureHelpFieldType.ContextFieldType getContext();
+
+            @JsProperty
+            Object getPosition();
+
+            @JsProperty
+            Object getTextDocument();
+
+            @JsProperty
+            void setContext(
+                    AutoCompleteRequest.ToObjectReturnType0.GetSignatureHelpFieldType.ContextFieldType context);
+
+            @JsProperty
+            void setPosition(Object position);
+
+            @JsProperty
+            void setTextDocument(Object textDocument);
+        }
+
+        @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+        public interface OpenDocumentFieldType {
             @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
             public interface TextDocumentFieldType {
                 @JsOverlay
@@ -670,14 +1148,13 @@ static AutoCompleteRequest.ToObjectReturnType0.OpenDocumentFieldType create() {
             }
 
             @JsProperty
-            AutoCompleteRequest.ToObjectReturnType0.OpenDocumentFieldType.ConsoleIdFieldType getConsoleId();
+            Object getConsoleId();
 
             @JsProperty
             AutoCompleteRequest.ToObjectReturnType0.OpenDocumentFieldType.TextDocumentFieldType getTextDocument();
 
             @JsProperty
-            void setConsoleId(
-                    AutoCompleteRequest.ToObjectReturnType0.OpenDocumentFieldType.ConsoleIdFieldType consoleId);
+            void setConsoleId(Object consoleId);
 
             @JsProperty
             void setTextDocument(
@@ -695,12 +1172,27 @@ static AutoCompleteRequest.ToObjectReturnType0 create() {
         @JsProperty
         AutoCompleteRequest.ToObjectReturnType0.CloseDocumentFieldType getCloseDocument();
 
+        @JsProperty
+        AutoCompleteRequest.ToObjectReturnType0.ConsoleIdFieldType getConsoleId();
+
         @JsProperty
         AutoCompleteRequest.ToObjectReturnType0.GetCompletionItemsFieldType getGetCompletionItems();
 
+        @JsProperty
+        AutoCompleteRequest.ToObjectReturnType0.GetDiagnosticFieldType getGetDiagnostic();
+
+        @JsProperty
+        AutoCompleteRequest.ToObjectReturnType0.GetHoverFieldType getGetHover();
+
+        @JsProperty
+        AutoCompleteRequest.ToObjectReturnType0.GetSignatureHelpFieldType getGetSignatureHelp();
+
         @JsProperty
         AutoCompleteRequest.ToObjectReturnType0.OpenDocumentFieldType getOpenDocument();
 
+        @JsProperty
+        double getRequestId();
+
         @JsProperty
         void setChangeDocument(
                 AutoCompleteRequest.ToObjectReturnType0.ChangeDocumentFieldType changeDocument);
@@ -709,13 +1201,30 @@ void setChangeDocument(
         void setCloseDocument(
                 AutoCompleteRequest.ToObjectReturnType0.CloseDocumentFieldType closeDocument);
 
+        @JsProperty
+        void setConsoleId(AutoCompleteRequest.ToObjectReturnType0.ConsoleIdFieldType consoleId);
+
         @JsProperty
         void setGetCompletionItems(
                 AutoCompleteRequest.ToObjectReturnType0.GetCompletionItemsFieldType getCompletionItems);
 
+        @JsProperty
+        void setGetDiagnostic(
+                AutoCompleteRequest.ToObjectReturnType0.GetDiagnosticFieldType getDiagnostic);
+
+        @JsProperty
+        void setGetHover(AutoCompleteRequest.ToObjectReturnType0.GetHoverFieldType getHover);
+
+        @JsProperty
+        void setGetSignatureHelp(
+                AutoCompleteRequest.ToObjectReturnType0.GetSignatureHelpFieldType getSignatureHelp);
+
         @JsProperty
         void setOpenDocument(
                 AutoCompleteRequest.ToObjectReturnType0.OpenDocumentFieldType openDocument);
+
+        @JsProperty
+        void setRequestId(double requestId);
     }
 
     public static native AutoCompleteRequest deserializeBinary(Uint8Array bytes);
@@ -732,26 +1241,52 @@ public static native AutoCompleteRequest.ToObjectReturnType toObject(
 
     public native void clearCloseDocument();
 
+    public native void clearConsoleId();
+
     public native void clearGetCompletionItems();
 
+    public native void clearGetDiagnostic();
+
+    public native void clearGetHover();
+
+    public native void clearGetSignatureHelp();
+
     public native void clearOpenDocument();
 
     public native ChangeDocumentRequest getChangeDocument();
 
     public native CloseDocumentRequest getCloseDocument();
 
+    public native Ticket getConsoleId();
+
     public native GetCompletionItemsRequest getGetCompletionItems();
 
+    public native GetDiagnosticRequest getGetDiagnostic();
+
+    public native GetHoverRequest getGetHover();
+
+    public native GetSignatureHelpRequest getGetSignatureHelp();
+
     public native OpenDocumentRequest getOpenDocument();
 
     public native int getRequestCase();
 
+    public native int getRequestId();
+
     public native boolean hasChangeDocument();
 
     public native boolean hasCloseDocument();
 
+    public native boolean hasConsoleId();
+
     public native boolean hasGetCompletionItems();
 
+    public native boolean hasGetDiagnostic();
+
+    public native boolean hasGetHover();
+
+    public native boolean hasGetSignatureHelp();
+
     public native boolean hasOpenDocument();
 
     public native Uint8Array serializeBinary();
@@ -764,14 +1299,32 @@ public static native AutoCompleteRequest.ToObjectReturnType toObject(
 
     public native void setCloseDocument(CloseDocumentRequest value);
 
+    public native void setConsoleId();
+
+    public native void setConsoleId(Ticket value);
+
     public native void setGetCompletionItems();
 
     public native void setGetCompletionItems(GetCompletionItemsRequest value);
 
+    public native void setGetDiagnostic();
+
+    public native void setGetDiagnostic(GetDiagnosticRequest value);
+
+    public native void setGetHover();
+
+    public native void setGetHover(GetHoverRequest value);
+
+    public native void setGetSignatureHelp();
+
+    public native void setGetSignatureHelp(GetSignatureHelpRequest value);
+
     public native void setOpenDocument();
 
     public native void setOpenDocument(OpenDocumentRequest value);
 
+    public native void setRequestId(int value);
+
     public native AutoCompleteRequest.ToObjectReturnType0 toObject();
 
     public native AutoCompleteRequest.ToObjectReturnType0 toObject(boolean includeInstance);
diff --git a/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/console_pb/AutoCompleteResponse.java b/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/console_pb/AutoCompleteResponse.java
index b7d7b0c4be4..a55818ea31c 100644
--- a/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/console_pb/AutoCompleteResponse.java
+++ b/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/console_pb/AutoCompleteResponse.java
@@ -23,6 +23,26 @@ public interface ToObjectReturnType {
         public interface CompletionItemsFieldType {
             @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
             public interface ItemsListFieldType {
+                @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+                public interface DocumentationFieldType {
+                    @JsOverlay
+                    static AutoCompleteResponse.ToObjectReturnType.CompletionItemsFieldType.ItemsListFieldType.DocumentationFieldType create() {
+                        return Js.uncheckedCast(JsPropertyMap.of());
+                    }
+
+                    @JsProperty
+                    String getKind();
+
+                    @JsProperty
+                    String getValue();
+
+                    @JsProperty
+                    void setKind(String kind);
+
+                    @JsProperty
+                    void setValue(String value);
+                }
+
                 @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
                 public interface TextEditFieldType {
                     @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
@@ -100,7 +120,7 @@ static AutoCompleteResponse.ToObjectReturnType.CompletionItemsFieldType.ItemsLis
                 String getDetail();
 
                 @JsProperty
-                String getDocumentation();
+                AutoCompleteResponse.ToObjectReturnType.CompletionItemsFieldType.ItemsListFieldType.DocumentationFieldType getDocumentation();
 
                 @JsProperty
                 String getFilterText();
@@ -155,7 +175,8 @@ default void setCommitCharactersList(String[] commitCharactersList) {
                 void setDetail(String detail);
 
                 @JsProperty
-                void setDocumentation(String documentation);
+                void setDocumentation(
+                        AutoCompleteResponse.ToObjectReturnType.CompletionItemsFieldType.ItemsListFieldType.DocumentationFieldType documentation);
 
                 @JsProperty
                 void setFilterText(String filterText);
@@ -219,6 +240,308 @@ void setItemsList(
             void setSuccess(boolean success);
         }
 
+        @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+        public interface DiagnosticFieldType {
+            @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+            public interface ItemsListFieldType {
+                @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+                public interface CodeDescriptionFieldType {
+                    @JsOverlay
+                    static AutoCompleteResponse.ToObjectReturnType.DiagnosticFieldType.ItemsListFieldType.CodeDescriptionFieldType create() {
+                        return Js.uncheckedCast(JsPropertyMap.of());
+                    }
+
+                    @JsProperty
+                    String getHref();
+
+                    @JsProperty
+                    void setHref(String href);
+                }
+
+                @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+                public interface GetDataUnionType {
+                    @JsOverlay
+                    static AutoCompleteResponse.ToObjectReturnType.DiagnosticFieldType.ItemsListFieldType.GetDataUnionType of(
+                            Object o) {
+                        return Js.cast(o);
+                    }
+
+                    @JsOverlay
+                    default String asString() {
+                        return Js.asString(this);
+                    }
+
+                    @JsOverlay
+                    default Uint8Array asUint8Array() {
+                        return Js.cast(this);
+                    }
+
+                    @JsOverlay
+                    default boolean isString() {
+                        return (Object) this instanceof String;
+                    }
+
+                    @JsOverlay
+                    default boolean isUint8Array() {
+                        return (Object) this instanceof Uint8Array;
+                    }
+                }
+
+                @JsOverlay
+                static AutoCompleteResponse.ToObjectReturnType.DiagnosticFieldType.ItemsListFieldType create() {
+                    return Js.uncheckedCast(JsPropertyMap.of());
+                }
+
+                @JsProperty
+                String getCode();
+
+                @JsProperty
+                AutoCompleteResponse.ToObjectReturnType.DiagnosticFieldType.ItemsListFieldType.CodeDescriptionFieldType getCodeDescription();
+
+                @JsProperty
+                AutoCompleteResponse.ToObjectReturnType.DiagnosticFieldType.ItemsListFieldType.GetDataUnionType getData();
+
+                @JsProperty
+                String getMessage();
+
+                @JsProperty
+                Object getRange();
+
+                @JsProperty
+                double getSeverity();
+
+                @JsProperty
+                String getSource();
+
+                @JsProperty
+                JsArray<Double> getTagsList();
+
+                @JsProperty
+                void setCode(String code);
+
+                @JsProperty
+                void setCodeDescription(
+                        AutoCompleteResponse.ToObjectReturnType.DiagnosticFieldType.ItemsListFieldType.CodeDescriptionFieldType codeDescription);
+
+                @JsProperty
+                void setData(
+                        AutoCompleteResponse.ToObjectReturnType.DiagnosticFieldType.ItemsListFieldType.GetDataUnionType data);
+
+                @JsOverlay
+                default void setData(String data) {
+                    setData(
+                            Js.<AutoCompleteResponse.ToObjectReturnType.DiagnosticFieldType.ItemsListFieldType.GetDataUnionType>uncheckedCast(
+                                    data));
+                }
+
+                @JsOverlay
+                default void setData(Uint8Array data) {
+                    setData(
+                            Js.<AutoCompleteResponse.ToObjectReturnType.DiagnosticFieldType.ItemsListFieldType.GetDataUnionType>uncheckedCast(
+                                    data));
+                }
+
+                @JsProperty
+                void setMessage(String message);
+
+                @JsProperty
+                void setRange(Object range);
+
+                @JsProperty
+                void setSeverity(double severity);
+
+                @JsProperty
+                void setSource(String source);
+
+                @JsProperty
+                void setTagsList(JsArray<Double> tagsList);
+
+                @JsOverlay
+                default void setTagsList(double[] tagsList) {
+                    setTagsList(Js.<JsArray<Double>>uncheckedCast(tagsList));
+                }
+            }
+
+            @JsOverlay
+            static AutoCompleteResponse.ToObjectReturnType.DiagnosticFieldType create() {
+                return Js.uncheckedCast(JsPropertyMap.of());
+            }
+
+            @JsProperty
+            JsArray<AutoCompleteResponse.ToObjectReturnType.DiagnosticFieldType.ItemsListFieldType> getItemsList();
+
+            @JsProperty
+            String getKind();
+
+            @JsProperty
+            String getResultId();
+
+            @JsOverlay
+            default void setItemsList(
+                    AutoCompleteResponse.ToObjectReturnType.DiagnosticFieldType.ItemsListFieldType[] itemsList) {
+                setItemsList(
+                        Js.<JsArray<AutoCompleteResponse.ToObjectReturnType.DiagnosticFieldType.ItemsListFieldType>>uncheckedCast(
+                                itemsList));
+            }
+
+            @JsProperty
+            void setItemsList(
+                    JsArray<AutoCompleteResponse.ToObjectReturnType.DiagnosticFieldType.ItemsListFieldType> itemsList);
+
+            @JsProperty
+            void setKind(String kind);
+
+            @JsProperty
+            void setResultId(String resultId);
+        }
+
+        @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+        public interface DiagnosticPublishFieldType {
+            @JsOverlay
+            static AutoCompleteResponse.ToObjectReturnType.DiagnosticPublishFieldType create() {
+                return Js.uncheckedCast(JsPropertyMap.of());
+            }
+
+            @JsProperty
+            JsArray<Object> getDiagnosticsList();
+
+            @JsProperty
+            String getUri();
+
+            @JsProperty
+            double getVersion();
+
+            @JsProperty
+            void setDiagnosticsList(JsArray<Object> diagnosticsList);
+
+            @JsOverlay
+            default void setDiagnosticsList(Object[] diagnosticsList) {
+                setDiagnosticsList(Js.<JsArray<Object>>uncheckedCast(diagnosticsList));
+            }
+
+            @JsProperty
+            void setUri(String uri);
+
+            @JsProperty
+            void setVersion(double version);
+        }
+
+        @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+        public interface HoverFieldType {
+            @JsOverlay
+            static AutoCompleteResponse.ToObjectReturnType.HoverFieldType create() {
+                return Js.uncheckedCast(JsPropertyMap.of());
+            }
+
+            @JsProperty
+            Object getContents();
+
+            @JsProperty
+            Object getRange();
+
+            @JsProperty
+            void setContents(Object contents);
+
+            @JsProperty
+            void setRange(Object range);
+        }
+
+        @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+        public interface SignaturesFieldType {
+            @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+            public interface SignaturesListFieldType {
+                @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+                public interface ParametersListFieldType {
+                    @JsOverlay
+                    static AutoCompleteResponse.ToObjectReturnType.SignaturesFieldType.SignaturesListFieldType.ParametersListFieldType create() {
+                        return Js.uncheckedCast(JsPropertyMap.of());
+                    }
+
+                    @JsProperty
+                    Object getDocumentation();
+
+                    @JsProperty
+                    String getLabel();
+
+                    @JsProperty
+                    void setDocumentation(Object documentation);
+
+                    @JsProperty
+                    void setLabel(String label);
+                }
+
+                @JsOverlay
+                static AutoCompleteResponse.ToObjectReturnType.SignaturesFieldType.SignaturesListFieldType create() {
+                    return Js.uncheckedCast(JsPropertyMap.of());
+                }
+
+                @JsProperty
+                double getActiveParameter();
+
+                @JsProperty
+                Object getDocumentation();
+
+                @JsProperty
+                String getLabel();
+
+                @JsProperty
+                JsArray<AutoCompleteResponse.ToObjectReturnType.SignaturesFieldType.SignaturesListFieldType.ParametersListFieldType> getParametersList();
+
+                @JsProperty
+                void setActiveParameter(double activeParameter);
+
+                @JsProperty
+                void setDocumentation(Object documentation);
+
+                @JsProperty
+                void setLabel(String label);
+
+                @JsProperty
+                void setParametersList(
+                        JsArray<AutoCompleteResponse.ToObjectReturnType.SignaturesFieldType.SignaturesListFieldType.ParametersListFieldType> parametersList);
+
+                @JsOverlay
+                default void setParametersList(
+                        AutoCompleteResponse.ToObjectReturnType.SignaturesFieldType.SignaturesListFieldType.ParametersListFieldType[] parametersList) {
+                    setParametersList(
+                            Js.<JsArray<AutoCompleteResponse.ToObjectReturnType.SignaturesFieldType.SignaturesListFieldType.ParametersListFieldType>>uncheckedCast(
+                                    parametersList));
+                }
+            }
+
+            @JsOverlay
+            static AutoCompleteResponse.ToObjectReturnType.SignaturesFieldType create() {
+                return Js.uncheckedCast(JsPropertyMap.of());
+            }
+
+            @JsProperty
+            double getActiveParameter();
+
+            @JsProperty
+            double getActiveSignature();
+
+            @JsProperty
+            JsArray<AutoCompleteResponse.ToObjectReturnType.SignaturesFieldType.SignaturesListFieldType> getSignaturesList();
+
+            @JsProperty
+            void setActiveParameter(double activeParameter);
+
+            @JsProperty
+            void setActiveSignature(double activeSignature);
+
+            @JsProperty
+            void setSignaturesList(
+                    JsArray<AutoCompleteResponse.ToObjectReturnType.SignaturesFieldType.SignaturesListFieldType> signaturesList);
+
+            @JsOverlay
+            default void setSignaturesList(
+                    AutoCompleteResponse.ToObjectReturnType.SignaturesFieldType.SignaturesListFieldType[] signaturesList) {
+                setSignaturesList(
+                        Js.<JsArray<AutoCompleteResponse.ToObjectReturnType.SignaturesFieldType.SignaturesListFieldType>>uncheckedCast(
+                                signaturesList));
+            }
+        }
+
         @JsOverlay
         static AutoCompleteResponse.ToObjectReturnType create() {
             return Js.uncheckedCast(JsPropertyMap.of());
@@ -227,9 +550,46 @@ static AutoCompleteResponse.ToObjectReturnType create() {
         @JsProperty
         AutoCompleteResponse.ToObjectReturnType.CompletionItemsFieldType getCompletionItems();
 
+        @JsProperty
+        AutoCompleteResponse.ToObjectReturnType.DiagnosticFieldType getDiagnostic();
+
+        @JsProperty
+        AutoCompleteResponse.ToObjectReturnType.DiagnosticPublishFieldType getDiagnosticPublish();
+
+        @JsProperty
+        AutoCompleteResponse.ToObjectReturnType.HoverFieldType getHover();
+
+        @JsProperty
+        double getRequestId();
+
+        @JsProperty
+        AutoCompleteResponse.ToObjectReturnType.SignaturesFieldType getSignatures();
+
+        @JsProperty
+        boolean isSuccess();
+
         @JsProperty
         void setCompletionItems(
                 AutoCompleteResponse.ToObjectReturnType.CompletionItemsFieldType completionItems);
+
+        @JsProperty
+        void setDiagnostic(AutoCompleteResponse.ToObjectReturnType.DiagnosticFieldType diagnostic);
+
+        @JsProperty
+        void setDiagnosticPublish(
+                AutoCompleteResponse.ToObjectReturnType.DiagnosticPublishFieldType diagnosticPublish);
+
+        @JsProperty
+        void setHover(AutoCompleteResponse.ToObjectReturnType.HoverFieldType hover);
+
+        @JsProperty
+        void setRequestId(double requestId);
+
+        @JsProperty
+        void setSignatures(AutoCompleteResponse.ToObjectReturnType.SignaturesFieldType signatures);
+
+        @JsProperty
+        void setSuccess(boolean success);
     }
 
     @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
@@ -238,6 +598,26 @@ public interface ToObjectReturnType0 {
         public interface CompletionItemsFieldType {
             @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
             public interface ItemsListFieldType {
+                @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+                public interface DocumentationFieldType {
+                    @JsOverlay
+                    static AutoCompleteResponse.ToObjectReturnType0.CompletionItemsFieldType.ItemsListFieldType.DocumentationFieldType create() {
+                        return Js.uncheckedCast(JsPropertyMap.of());
+                    }
+
+                    @JsProperty
+                    String getKind();
+
+                    @JsProperty
+                    String getValue();
+
+                    @JsProperty
+                    void setKind(String kind);
+
+                    @JsProperty
+                    void setValue(String value);
+                }
+
                 @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
                 public interface TextEditFieldType {
                     @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
@@ -315,7 +695,7 @@ static AutoCompleteResponse.ToObjectReturnType0.CompletionItemsFieldType.ItemsLi
                 String getDetail();
 
                 @JsProperty
-                String getDocumentation();
+                AutoCompleteResponse.ToObjectReturnType0.CompletionItemsFieldType.ItemsListFieldType.DocumentationFieldType getDocumentation();
 
                 @JsProperty
                 String getFilterText();
@@ -370,7 +750,8 @@ default void setCommitCharactersList(String[] commitCharactersList) {
                 void setDetail(String detail);
 
                 @JsProperty
-                void setDocumentation(String documentation);
+                void setDocumentation(
+                        AutoCompleteResponse.ToObjectReturnType0.CompletionItemsFieldType.ItemsListFieldType.DocumentationFieldType documentation);
 
                 @JsProperty
                 void setFilterText(String filterText);
@@ -434,6 +815,308 @@ void setItemsList(
             void setSuccess(boolean success);
         }
 
+        @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+        public interface DiagnosticFieldType {
+            @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+            public interface ItemsListFieldType {
+                @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+                public interface CodeDescriptionFieldType {
+                    @JsOverlay
+                    static AutoCompleteResponse.ToObjectReturnType0.DiagnosticFieldType.ItemsListFieldType.CodeDescriptionFieldType create() {
+                        return Js.uncheckedCast(JsPropertyMap.of());
+                    }
+
+                    @JsProperty
+                    String getHref();
+
+                    @JsProperty
+                    void setHref(String href);
+                }
+
+                @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+                public interface GetDataUnionType {
+                    @JsOverlay
+                    static AutoCompleteResponse.ToObjectReturnType0.DiagnosticFieldType.ItemsListFieldType.GetDataUnionType of(
+                            Object o) {
+                        return Js.cast(o);
+                    }
+
+                    @JsOverlay
+                    default String asString() {
+                        return Js.asString(this);
+                    }
+
+                    @JsOverlay
+                    default Uint8Array asUint8Array() {
+                        return Js.cast(this);
+                    }
+
+                    @JsOverlay
+                    default boolean isString() {
+                        return (Object) this instanceof String;
+                    }
+
+                    @JsOverlay
+                    default boolean isUint8Array() {
+                        return (Object) this instanceof Uint8Array;
+                    }
+                }
+
+                @JsOverlay
+                static AutoCompleteResponse.ToObjectReturnType0.DiagnosticFieldType.ItemsListFieldType create() {
+                    return Js.uncheckedCast(JsPropertyMap.of());
+                }
+
+                @JsProperty
+                String getCode();
+
+                @JsProperty
+                AutoCompleteResponse.ToObjectReturnType0.DiagnosticFieldType.ItemsListFieldType.CodeDescriptionFieldType getCodeDescription();
+
+                @JsProperty
+                AutoCompleteResponse.ToObjectReturnType0.DiagnosticFieldType.ItemsListFieldType.GetDataUnionType getData();
+
+                @JsProperty
+                String getMessage();
+
+                @JsProperty
+                Object getRange();
+
+                @JsProperty
+                double getSeverity();
+
+                @JsProperty
+                String getSource();
+
+                @JsProperty
+                JsArray<Double> getTagsList();
+
+                @JsProperty
+                void setCode(String code);
+
+                @JsProperty
+                void setCodeDescription(
+                        AutoCompleteResponse.ToObjectReturnType0.DiagnosticFieldType.ItemsListFieldType.CodeDescriptionFieldType codeDescription);
+
+                @JsProperty
+                void setData(
+                        AutoCompleteResponse.ToObjectReturnType0.DiagnosticFieldType.ItemsListFieldType.GetDataUnionType data);
+
+                @JsOverlay
+                default void setData(String data) {
+                    setData(
+                            Js.<AutoCompleteResponse.ToObjectReturnType0.DiagnosticFieldType.ItemsListFieldType.GetDataUnionType>uncheckedCast(
+                                    data));
+                }
+
+                @JsOverlay
+                default void setData(Uint8Array data) {
+                    setData(
+                            Js.<AutoCompleteResponse.ToObjectReturnType0.DiagnosticFieldType.ItemsListFieldType.GetDataUnionType>uncheckedCast(
+                                    data));
+                }
+
+                @JsProperty
+                void setMessage(String message);
+
+                @JsProperty
+                void setRange(Object range);
+
+                @JsProperty
+                void setSeverity(double severity);
+
+                @JsProperty
+                void setSource(String source);
+
+                @JsProperty
+                void setTagsList(JsArray<Double> tagsList);
+
+                @JsOverlay
+                default void setTagsList(double[] tagsList) {
+                    setTagsList(Js.<JsArray<Double>>uncheckedCast(tagsList));
+                }
+            }
+
+            @JsOverlay
+            static AutoCompleteResponse.ToObjectReturnType0.DiagnosticFieldType create() {
+                return Js.uncheckedCast(JsPropertyMap.of());
+            }
+
+            @JsProperty
+            JsArray<AutoCompleteResponse.ToObjectReturnType0.DiagnosticFieldType.ItemsListFieldType> getItemsList();
+
+            @JsProperty
+            String getKind();
+
+            @JsProperty
+            String getResultId();
+
+            @JsOverlay
+            default void setItemsList(
+                    AutoCompleteResponse.ToObjectReturnType0.DiagnosticFieldType.ItemsListFieldType[] itemsList) {
+                setItemsList(
+                        Js.<JsArray<AutoCompleteResponse.ToObjectReturnType0.DiagnosticFieldType.ItemsListFieldType>>uncheckedCast(
+                                itemsList));
+            }
+
+            @JsProperty
+            void setItemsList(
+                    JsArray<AutoCompleteResponse.ToObjectReturnType0.DiagnosticFieldType.ItemsListFieldType> itemsList);
+
+            @JsProperty
+            void setKind(String kind);
+
+            @JsProperty
+            void setResultId(String resultId);
+        }
+
+        @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+        public interface DiagnosticPublishFieldType {
+            @JsOverlay
+            static AutoCompleteResponse.ToObjectReturnType0.DiagnosticPublishFieldType create() {
+                return Js.uncheckedCast(JsPropertyMap.of());
+            }
+
+            @JsProperty
+            JsArray<Object> getDiagnosticsList();
+
+            @JsProperty
+            String getUri();
+
+            @JsProperty
+            double getVersion();
+
+            @JsProperty
+            void setDiagnosticsList(JsArray<Object> diagnosticsList);
+
+            @JsOverlay
+            default void setDiagnosticsList(Object[] diagnosticsList) {
+                setDiagnosticsList(Js.<JsArray<Object>>uncheckedCast(diagnosticsList));
+            }
+
+            @JsProperty
+            void setUri(String uri);
+
+            @JsProperty
+            void setVersion(double version);
+        }
+
+        @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+        public interface HoverFieldType {
+            @JsOverlay
+            static AutoCompleteResponse.ToObjectReturnType0.HoverFieldType create() {
+                return Js.uncheckedCast(JsPropertyMap.of());
+            }
+
+            @JsProperty
+            Object getContents();
+
+            @JsProperty
+            Object getRange();
+
+            @JsProperty
+            void setContents(Object contents);
+
+            @JsProperty
+            void setRange(Object range);
+        }
+
+        @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+        public interface SignaturesFieldType {
+            @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+            public interface SignaturesListFieldType {
+                @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+                public interface ParametersListFieldType {
+                    @JsOverlay
+                    static AutoCompleteResponse.ToObjectReturnType0.SignaturesFieldType.SignaturesListFieldType.ParametersListFieldType create() {
+                        return Js.uncheckedCast(JsPropertyMap.of());
+                    }
+
+                    @JsProperty
+                    Object getDocumentation();
+
+                    @JsProperty
+                    String getLabel();
+
+                    @JsProperty
+                    void setDocumentation(Object documentation);
+
+                    @JsProperty
+                    void setLabel(String label);
+                }
+
+                @JsOverlay
+                static AutoCompleteResponse.ToObjectReturnType0.SignaturesFieldType.SignaturesListFieldType create() {
+                    return Js.uncheckedCast(JsPropertyMap.of());
+                }
+
+                @JsProperty
+                double getActiveParameter();
+
+                @JsProperty
+                Object getDocumentation();
+
+                @JsProperty
+                String getLabel();
+
+                @JsProperty
+                JsArray<AutoCompleteResponse.ToObjectReturnType0.SignaturesFieldType.SignaturesListFieldType.ParametersListFieldType> getParametersList();
+
+                @JsProperty
+                void setActiveParameter(double activeParameter);
+
+                @JsProperty
+                void setDocumentation(Object documentation);
+
+                @JsProperty
+                void setLabel(String label);
+
+                @JsProperty
+                void setParametersList(
+                        JsArray<AutoCompleteResponse.ToObjectReturnType0.SignaturesFieldType.SignaturesListFieldType.ParametersListFieldType> parametersList);
+
+                @JsOverlay
+                default void setParametersList(
+                        AutoCompleteResponse.ToObjectReturnType0.SignaturesFieldType.SignaturesListFieldType.ParametersListFieldType[] parametersList) {
+                    setParametersList(
+                            Js.<JsArray<AutoCompleteResponse.ToObjectReturnType0.SignaturesFieldType.SignaturesListFieldType.ParametersListFieldType>>uncheckedCast(
+                                    parametersList));
+                }
+            }
+
+            @JsOverlay
+            static AutoCompleteResponse.ToObjectReturnType0.SignaturesFieldType create() {
+                return Js.uncheckedCast(JsPropertyMap.of());
+            }
+
+            @JsProperty
+            double getActiveParameter();
+
+            @JsProperty
+            double getActiveSignature();
+
+            @JsProperty
+            JsArray<AutoCompleteResponse.ToObjectReturnType0.SignaturesFieldType.SignaturesListFieldType> getSignaturesList();
+
+            @JsProperty
+            void setActiveParameter(double activeParameter);
+
+            @JsProperty
+            void setActiveSignature(double activeSignature);
+
+            @JsProperty
+            void setSignaturesList(
+                    JsArray<AutoCompleteResponse.ToObjectReturnType0.SignaturesFieldType.SignaturesListFieldType> signaturesList);
+
+            @JsOverlay
+            default void setSignaturesList(
+                    AutoCompleteResponse.ToObjectReturnType0.SignaturesFieldType.SignaturesListFieldType[] signaturesList) {
+                setSignaturesList(
+                        Js.<JsArray<AutoCompleteResponse.ToObjectReturnType0.SignaturesFieldType.SignaturesListFieldType>>uncheckedCast(
+                                signaturesList));
+            }
+        }
+
         @JsOverlay
         static AutoCompleteResponse.ToObjectReturnType0 create() {
             return Js.uncheckedCast(JsPropertyMap.of());
@@ -442,9 +1125,46 @@ static AutoCompleteResponse.ToObjectReturnType0 create() {
         @JsProperty
         AutoCompleteResponse.ToObjectReturnType0.CompletionItemsFieldType getCompletionItems();
 
+        @JsProperty
+        AutoCompleteResponse.ToObjectReturnType0.DiagnosticFieldType getDiagnostic();
+
+        @JsProperty
+        AutoCompleteResponse.ToObjectReturnType0.DiagnosticPublishFieldType getDiagnosticPublish();
+
+        @JsProperty
+        AutoCompleteResponse.ToObjectReturnType0.HoverFieldType getHover();
+
+        @JsProperty
+        double getRequestId();
+
+        @JsProperty
+        AutoCompleteResponse.ToObjectReturnType0.SignaturesFieldType getSignatures();
+
+        @JsProperty
+        boolean isSuccess();
+
         @JsProperty
         void setCompletionItems(
                 AutoCompleteResponse.ToObjectReturnType0.CompletionItemsFieldType completionItems);
+
+        @JsProperty
+        void setDiagnostic(AutoCompleteResponse.ToObjectReturnType0.DiagnosticFieldType diagnostic);
+
+        @JsProperty
+        void setDiagnosticPublish(
+                AutoCompleteResponse.ToObjectReturnType0.DiagnosticPublishFieldType diagnosticPublish);
+
+        @JsProperty
+        void setHover(AutoCompleteResponse.ToObjectReturnType0.HoverFieldType hover);
+
+        @JsProperty
+        void setRequestId(double requestId);
+
+        @JsProperty
+        void setSignatures(AutoCompleteResponse.ToObjectReturnType0.SignaturesFieldType signatures);
+
+        @JsProperty
+        void setSuccess(boolean success);
     }
 
     public static native AutoCompleteResponse deserializeBinary(Uint8Array bytes);
@@ -459,18 +1179,66 @@ public static native AutoCompleteResponse.ToObjectReturnType toObject(
 
     public native void clearCompletionItems();
 
+    public native void clearDiagnostic();
+
+    public native void clearDiagnosticPublish();
+
+    public native void clearHover();
+
+    public native void clearSignatures();
+
     public native GetCompletionItemsResponse getCompletionItems();
 
+    public native GetPullDiagnosticResponse getDiagnostic();
+
+    public native GetPublishDiagnosticResponse getDiagnosticPublish();
+
+    public native GetHoverResponse getHover();
+
+    public native int getRequestId();
+
     public native int getResponseCase();
 
+    public native GetSignatureHelpResponse getSignatures();
+
+    public native boolean getSuccess();
+
     public native boolean hasCompletionItems();
 
+    public native boolean hasDiagnostic();
+
+    public native boolean hasDiagnosticPublish();
+
+    public native boolean hasHover();
+
+    public native boolean hasSignatures();
+
     public native Uint8Array serializeBinary();
 
     public native void setCompletionItems();
 
     public native void setCompletionItems(GetCompletionItemsResponse value);
 
+    public native void setDiagnostic();
+
+    public native void setDiagnostic(GetPullDiagnosticResponse value);
+
+    public native void setDiagnosticPublish();
+
+    public native void setDiagnosticPublish(GetPublishDiagnosticResponse value);
+
+    public native void setHover();
+
+    public native void setHover(GetHoverResponse value);
+
+    public native void setRequestId(int value);
+
+    public native void setSignatures();
+
+    public native void setSignatures(GetSignatureHelpResponse value);
+
+    public native void setSuccess(boolean value);
+
     public native AutoCompleteResponse.ToObjectReturnType0 toObject();
 
     public native AutoCompleteResponse.ToObjectReturnType0 toObject(boolean includeInstance);
diff --git a/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/console_pb/CancelAutoCompleteRequest.java b/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/console_pb/CancelAutoCompleteRequest.java
new file mode 100644
index 00000000000..cc38a680182
--- /dev/null
+++ b/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/console_pb/CancelAutoCompleteRequest.java
@@ -0,0 +1,205 @@
+/**
+ * Copyright (c) 2016-2022 Deephaven Data Labs and Patent Pending
+ */
+package io.deephaven.javascript.proto.dhinternal.io.deephaven.proto.console_pb;
+
+import elemental2.core.Uint8Array;
+import io.deephaven.javascript.proto.dhinternal.io.deephaven.proto.ticket_pb.Ticket;
+import jsinterop.annotations.JsOverlay;
+import jsinterop.annotations.JsPackage;
+import jsinterop.annotations.JsProperty;
+import jsinterop.annotations.JsType;
+import jsinterop.base.Js;
+import jsinterop.base.JsPropertyMap;
+
+@JsType(
+        isNative = true,
+        name = "dhinternal.io.deephaven.proto.console_pb.CancelAutoCompleteRequest",
+        namespace = JsPackage.GLOBAL)
+public class CancelAutoCompleteRequest {
+    @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+    public interface ToObjectReturnType {
+        @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+        public interface ConsoleIdFieldType {
+            @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+            public interface GetTicketUnionType {
+                @JsOverlay
+                static CancelAutoCompleteRequest.ToObjectReturnType.ConsoleIdFieldType.GetTicketUnionType of(Object o) {
+                    return Js.cast(o);
+                }
+
+                @JsOverlay
+                default String asString() {
+                    return Js.asString(this);
+                }
+
+                @JsOverlay
+                default Uint8Array asUint8Array() {
+                    return Js.cast(this);
+                }
+
+                @JsOverlay
+                default boolean isString() {
+                    return (Object) this instanceof String;
+                }
+
+                @JsOverlay
+                default boolean isUint8Array() {
+                    return (Object) this instanceof Uint8Array;
+                }
+            }
+
+            @JsOverlay
+            static CancelAutoCompleteRequest.ToObjectReturnType.ConsoleIdFieldType create() {
+                return Js.uncheckedCast(JsPropertyMap.of());
+            }
+
+            @JsProperty
+            CancelAutoCompleteRequest.ToObjectReturnType.ConsoleIdFieldType.GetTicketUnionType getTicket();
+
+            @JsProperty
+            void setTicket(
+                    CancelAutoCompleteRequest.ToObjectReturnType.ConsoleIdFieldType.GetTicketUnionType ticket);
+
+            @JsOverlay
+            default void setTicket(String ticket) {
+                setTicket(
+                        Js.<CancelAutoCompleteRequest.ToObjectReturnType.ConsoleIdFieldType.GetTicketUnionType>uncheckedCast(
+                                ticket));
+            }
+
+            @JsOverlay
+            default void setTicket(Uint8Array ticket) {
+                setTicket(
+                        Js.<CancelAutoCompleteRequest.ToObjectReturnType.ConsoleIdFieldType.GetTicketUnionType>uncheckedCast(
+                                ticket));
+            }
+        }
+
+        @JsOverlay
+        static CancelAutoCompleteRequest.ToObjectReturnType create() {
+            return Js.uncheckedCast(JsPropertyMap.of());
+        }
+
+        @JsProperty
+        CancelAutoCompleteRequest.ToObjectReturnType.ConsoleIdFieldType getConsoleId();
+
+        @JsProperty
+        double getRequestId();
+
+        @JsProperty
+        void setConsoleId(CancelAutoCompleteRequest.ToObjectReturnType.ConsoleIdFieldType consoleId);
+
+        @JsProperty
+        void setRequestId(double requestId);
+    }
+
+    @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+    public interface ToObjectReturnType0 {
+        @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+        public interface ConsoleIdFieldType {
+            @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+            public interface GetTicketUnionType {
+                @JsOverlay
+                static CancelAutoCompleteRequest.ToObjectReturnType0.ConsoleIdFieldType.GetTicketUnionType of(
+                        Object o) {
+                    return Js.cast(o);
+                }
+
+                @JsOverlay
+                default String asString() {
+                    return Js.asString(this);
+                }
+
+                @JsOverlay
+                default Uint8Array asUint8Array() {
+                    return Js.cast(this);
+                }
+
+                @JsOverlay
+                default boolean isString() {
+                    return (Object) this instanceof String;
+                }
+
+                @JsOverlay
+                default boolean isUint8Array() {
+                    return (Object) this instanceof Uint8Array;
+                }
+            }
+
+            @JsOverlay
+            static CancelAutoCompleteRequest.ToObjectReturnType0.ConsoleIdFieldType create() {
+                return Js.uncheckedCast(JsPropertyMap.of());
+            }
+
+            @JsProperty
+            CancelAutoCompleteRequest.ToObjectReturnType0.ConsoleIdFieldType.GetTicketUnionType getTicket();
+
+            @JsProperty
+            void setTicket(
+                    CancelAutoCompleteRequest.ToObjectReturnType0.ConsoleIdFieldType.GetTicketUnionType ticket);
+
+            @JsOverlay
+            default void setTicket(String ticket) {
+                setTicket(
+                        Js.<CancelAutoCompleteRequest.ToObjectReturnType0.ConsoleIdFieldType.GetTicketUnionType>uncheckedCast(
+                                ticket));
+            }
+
+            @JsOverlay
+            default void setTicket(Uint8Array ticket) {
+                setTicket(
+                        Js.<CancelAutoCompleteRequest.ToObjectReturnType0.ConsoleIdFieldType.GetTicketUnionType>uncheckedCast(
+                                ticket));
+            }
+        }
+
+        @JsOverlay
+        static CancelAutoCompleteRequest.ToObjectReturnType0 create() {
+            return Js.uncheckedCast(JsPropertyMap.of());
+        }
+
+        @JsProperty
+        CancelAutoCompleteRequest.ToObjectReturnType0.ConsoleIdFieldType getConsoleId();
+
+        @JsProperty
+        double getRequestId();
+
+        @JsProperty
+        void setConsoleId(CancelAutoCompleteRequest.ToObjectReturnType0.ConsoleIdFieldType consoleId);
+
+        @JsProperty
+        void setRequestId(double requestId);
+    }
+
+    public static native CancelAutoCompleteRequest deserializeBinary(Uint8Array bytes);
+
+    public static native CancelAutoCompleteRequest deserializeBinaryFromReader(
+            CancelAutoCompleteRequest message, Object reader);
+
+    public static native void serializeBinaryToWriter(
+            CancelAutoCompleteRequest message, Object writer);
+
+    public static native CancelAutoCompleteRequest.ToObjectReturnType toObject(
+            boolean includeInstance, CancelAutoCompleteRequest msg);
+
+    public native void clearConsoleId();
+
+    public native Ticket getConsoleId();
+
+    public native double getRequestId();
+
+    public native boolean hasConsoleId();
+
+    public native Uint8Array serializeBinary();
+
+    public native void setConsoleId();
+
+    public native void setConsoleId(Ticket value);
+
+    public native void setRequestId(double value);
+
+    public native CancelAutoCompleteRequest.ToObjectReturnType0 toObject();
+
+    public native CancelAutoCompleteRequest.ToObjectReturnType0 toObject(boolean includeInstance);
+}
diff --git a/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/console_pb/CancelAutoCompleteResponse.java b/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/console_pb/CancelAutoCompleteResponse.java
new file mode 100644
index 00000000000..b73e9d2dafe
--- /dev/null
+++ b/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/console_pb/CancelAutoCompleteResponse.java
@@ -0,0 +1,30 @@
+/**
+ * Copyright (c) 2016-2022 Deephaven Data Labs and Patent Pending
+ */
+package io.deephaven.javascript.proto.dhinternal.io.deephaven.proto.console_pb;
+
+import elemental2.core.Uint8Array;
+import jsinterop.annotations.JsPackage;
+import jsinterop.annotations.JsType;
+
+@JsType(
+        isNative = true,
+        name = "dhinternal.io.deephaven.proto.console_pb.CancelAutoCompleteResponse",
+        namespace = JsPackage.GLOBAL)
+public class CancelAutoCompleteResponse {
+    public static native CancelAutoCompleteResponse deserializeBinary(Uint8Array bytes);
+
+    public static native CancelAutoCompleteResponse deserializeBinaryFromReader(
+            CancelAutoCompleteResponse message, Object reader);
+
+    public static native void serializeBinaryToWriter(
+            CancelAutoCompleteResponse message, Object writer);
+
+    public static native Object toObject(boolean includeInstance, CancelAutoCompleteResponse msg);
+
+    public native Uint8Array serializeBinary();
+
+    public native Object toObject();
+
+    public native Object toObject(boolean includeInstance);
+}
diff --git a/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/console_pb/CompletionItem.java b/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/console_pb/CompletionItem.java
index 7e7b6533864..b92d607d4c1 100644
--- a/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/console_pb/CompletionItem.java
+++ b/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/console_pb/CompletionItem.java
@@ -19,6 +19,26 @@
 public class CompletionItem {
     @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
     public interface ToObjectReturnType {
+        @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+        public interface DocumentationFieldType {
+            @JsOverlay
+            static CompletionItem.ToObjectReturnType.DocumentationFieldType create() {
+                return Js.uncheckedCast(JsPropertyMap.of());
+            }
+
+            @JsProperty
+            String getKind();
+
+            @JsProperty
+            String getValue();
+
+            @JsProperty
+            void setKind(String kind);
+
+            @JsProperty
+            void setValue(String value);
+        }
+
         @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
         public interface TextEditFieldType {
             @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
@@ -95,7 +115,7 @@ static CompletionItem.ToObjectReturnType create() {
         String getDetail();
 
         @JsProperty
-        String getDocumentation();
+        CompletionItem.ToObjectReturnType.DocumentationFieldType getDocumentation();
 
         @JsProperty
         String getFilterText();
@@ -150,7 +170,7 @@ default void setCommitCharactersList(String[] commitCharactersList) {
         void setDetail(String detail);
 
         @JsProperty
-        void setDocumentation(String documentation);
+        void setDocumentation(CompletionItem.ToObjectReturnType.DocumentationFieldType documentation);
 
         @JsProperty
         void setFilterText(String filterText);
@@ -182,6 +202,26 @@ default void setCommitCharactersList(String[] commitCharactersList) {
 
     @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
     public interface ToObjectReturnType0 {
+        @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+        public interface DocumentationFieldType {
+            @JsOverlay
+            static CompletionItem.ToObjectReturnType0.DocumentationFieldType create() {
+                return Js.uncheckedCast(JsPropertyMap.of());
+            }
+
+            @JsProperty
+            String getKind();
+
+            @JsProperty
+            String getValue();
+
+            @JsProperty
+            void setKind(String kind);
+
+            @JsProperty
+            void setValue(String value);
+        }
+
         @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
         public interface TextEditFieldType {
             @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
@@ -258,7 +298,7 @@ static CompletionItem.ToObjectReturnType0 create() {
         String getDetail();
 
         @JsProperty
-        String getDocumentation();
+        CompletionItem.ToObjectReturnType0.DocumentationFieldType getDocumentation();
 
         @JsProperty
         String getFilterText();
@@ -313,7 +353,7 @@ default void setCommitCharactersList(String[] commitCharactersList) {
         void setDetail(String detail);
 
         @JsProperty
-        void setDocumentation(String documentation);
+        void setDocumentation(CompletionItem.ToObjectReturnType0.DocumentationFieldType documentation);
 
         @JsProperty
         void setFilterText(String filterText);
@@ -367,6 +407,8 @@ public static native CompletionItem.ToObjectReturnType toObject(
 
     public native void clearCommitCharactersList();
 
+    public native void clearDocumentation();
+
     public native void clearTextEdit();
 
     public native JsArray<TextEdit> getAdditionalTextEditsList();
@@ -377,7 +419,7 @@ public static native CompletionItem.ToObjectReturnType toObject(
 
     public native String getDetail();
 
-    public native String getDocumentation();
+    public native MarkupContent getDocumentation();
 
     public native String getFilterText();
 
@@ -397,6 +439,8 @@ public static native CompletionItem.ToObjectReturnType toObject(
 
     public native TextEdit getTextEdit();
 
+    public native boolean hasDocumentation();
+
     public native boolean hasTextEdit();
 
     public native Uint8Array serializeBinary();
@@ -419,7 +463,9 @@ public final void setCommitCharactersList(String[] value) {
 
     public native void setDetail(String value);
 
-    public native void setDocumentation(String value);
+    public native void setDocumentation();
+
+    public native void setDocumentation(MarkupContent value);
 
     public native void setFilterText(String value);
 
diff --git a/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/console_pb/Diagnostic.java b/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/console_pb/Diagnostic.java
new file mode 100644
index 00000000000..348d394b250
--- /dev/null
+++ b/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/console_pb/Diagnostic.java
@@ -0,0 +1,484 @@
+/**
+ * Copyright (c) 2016-2022 Deephaven Data Labs and Patent Pending
+ */
+package io.deephaven.javascript.proto.dhinternal.io.deephaven.proto.console_pb;
+
+import elemental2.core.JsArray;
+import elemental2.core.Uint8Array;
+import io.deephaven.javascript.proto.dhinternal.io.deephaven.proto.console_pb.diagnostic.CodeDescription;
+import io.deephaven.javascript.proto.dhinternal.io.deephaven.proto.console_pb.diagnostic.DiagnosticSeverityMap;
+import io.deephaven.javascript.proto.dhinternal.io.deephaven.proto.console_pb.diagnostic.DiagnosticTagMap;
+import jsinterop.annotations.JsOverlay;
+import jsinterop.annotations.JsPackage;
+import jsinterop.annotations.JsProperty;
+import jsinterop.annotations.JsType;
+import jsinterop.base.Js;
+import jsinterop.base.JsPropertyMap;
+
+@JsType(
+        isNative = true,
+        name = "dhinternal.io.deephaven.proto.console_pb.Diagnostic",
+        namespace = JsPackage.GLOBAL)
+public class Diagnostic {
+    @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+    public interface GetDataUnionType {
+        @JsOverlay
+        static Diagnostic.GetDataUnionType of(Object o) {
+            return Js.cast(o);
+        }
+
+        @JsOverlay
+        default String asString() {
+            return Js.asString(this);
+        }
+
+        @JsOverlay
+        default Uint8Array asUint8Array() {
+            return Js.cast(this);
+        }
+
+        @JsOverlay
+        default boolean isString() {
+            return (Object) this instanceof String;
+        }
+
+        @JsOverlay
+        default boolean isUint8Array() {
+            return (Object) this instanceof Uint8Array;
+        }
+    }
+
+    @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+    public interface SetDataValueUnionType {
+        @JsOverlay
+        static Diagnostic.SetDataValueUnionType of(Object o) {
+            return Js.cast(o);
+        }
+
+        @JsOverlay
+        default String asString() {
+            return Js.asString(this);
+        }
+
+        @JsOverlay
+        default Uint8Array asUint8Array() {
+            return Js.cast(this);
+        }
+
+        @JsOverlay
+        default boolean isString() {
+            return (Object) this instanceof String;
+        }
+
+        @JsOverlay
+        default boolean isUint8Array() {
+            return (Object) this instanceof Uint8Array;
+        }
+    }
+
+    @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+    public interface ToObjectReturnType {
+        @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+        public interface CodeDescriptionFieldType {
+            @JsOverlay
+            static Diagnostic.ToObjectReturnType.CodeDescriptionFieldType create() {
+                return Js.uncheckedCast(JsPropertyMap.of());
+            }
+
+            @JsProperty
+            String getHref();
+
+            @JsProperty
+            void setHref(String href);
+        }
+
+        @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+        public interface GetDataUnionType {
+            @JsOverlay
+            static Diagnostic.ToObjectReturnType.GetDataUnionType of(Object o) {
+                return Js.cast(o);
+            }
+
+            @JsOverlay
+            default String asString() {
+                return Js.asString(this);
+            }
+
+            @JsOverlay
+            default Uint8Array asUint8Array() {
+                return Js.cast(this);
+            }
+
+            @JsOverlay
+            default boolean isString() {
+                return (Object) this instanceof String;
+            }
+
+            @JsOverlay
+            default boolean isUint8Array() {
+                return (Object) this instanceof Uint8Array;
+            }
+        }
+
+        @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+        public interface RangeFieldType {
+            @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+            public interface StartFieldType {
+                @JsOverlay
+                static Diagnostic.ToObjectReturnType.RangeFieldType.StartFieldType create() {
+                    return Js.uncheckedCast(JsPropertyMap.of());
+                }
+
+                @JsProperty
+                double getCharacter();
+
+                @JsProperty
+                double getLine();
+
+                @JsProperty
+                void setCharacter(double character);
+
+                @JsProperty
+                void setLine(double line);
+            }
+
+            @JsOverlay
+            static Diagnostic.ToObjectReturnType.RangeFieldType create() {
+                return Js.uncheckedCast(JsPropertyMap.of());
+            }
+
+            @JsProperty
+            Object getEnd();
+
+            @JsProperty
+            Diagnostic.ToObjectReturnType.RangeFieldType.StartFieldType getStart();
+
+            @JsProperty
+            void setEnd(Object end);
+
+            @JsProperty
+            void setStart(Diagnostic.ToObjectReturnType.RangeFieldType.StartFieldType start);
+        }
+
+        @JsOverlay
+        static Diagnostic.ToObjectReturnType create() {
+            return Js.uncheckedCast(JsPropertyMap.of());
+        }
+
+        @JsProperty
+        String getCode();
+
+        @JsProperty
+        Diagnostic.ToObjectReturnType.CodeDescriptionFieldType getCodeDescription();
+
+        @JsProperty
+        Diagnostic.ToObjectReturnType.GetDataUnionType getData();
+
+        @JsProperty
+        String getMessage();
+
+        @JsProperty
+        Diagnostic.ToObjectReturnType.RangeFieldType getRange();
+
+        @JsProperty
+        double getSeverity();
+
+        @JsProperty
+        String getSource();
+
+        @JsProperty
+        JsArray<Double> getTagsList();
+
+        @JsProperty
+        void setCode(String code);
+
+        @JsProperty
+        void setCodeDescription(Diagnostic.ToObjectReturnType.CodeDescriptionFieldType codeDescription);
+
+        @JsProperty
+        void setData(Diagnostic.ToObjectReturnType.GetDataUnionType data);
+
+        @JsOverlay
+        default void setData(String data) {
+            setData(Js.<Diagnostic.ToObjectReturnType.GetDataUnionType>uncheckedCast(data));
+        }
+
+        @JsOverlay
+        default void setData(Uint8Array data) {
+            setData(Js.<Diagnostic.ToObjectReturnType.GetDataUnionType>uncheckedCast(data));
+        }
+
+        @JsProperty
+        void setMessage(String message);
+
+        @JsProperty
+        void setRange(Diagnostic.ToObjectReturnType.RangeFieldType range);
+
+        @JsProperty
+        void setSeverity(double severity);
+
+        @JsProperty
+        void setSource(String source);
+
+        @JsProperty
+        void setTagsList(JsArray<Double> tagsList);
+
+        @JsOverlay
+        default void setTagsList(double[] tagsList) {
+            setTagsList(Js.<JsArray<Double>>uncheckedCast(tagsList));
+        }
+    }
+
+    @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+    public interface ToObjectReturnType0 {
+        @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+        public interface CodeDescriptionFieldType {
+            @JsOverlay
+            static Diagnostic.ToObjectReturnType0.CodeDescriptionFieldType create() {
+                return Js.uncheckedCast(JsPropertyMap.of());
+            }
+
+            @JsProperty
+            String getHref();
+
+            @JsProperty
+            void setHref(String href);
+        }
+
+        @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+        public interface GetDataUnionType {
+            @JsOverlay
+            static Diagnostic.ToObjectReturnType0.GetDataUnionType of(Object o) {
+                return Js.cast(o);
+            }
+
+            @JsOverlay
+            default String asString() {
+                return Js.asString(this);
+            }
+
+            @JsOverlay
+            default Uint8Array asUint8Array() {
+                return Js.cast(this);
+            }
+
+            @JsOverlay
+            default boolean isString() {
+                return (Object) this instanceof String;
+            }
+
+            @JsOverlay
+            default boolean isUint8Array() {
+                return (Object) this instanceof Uint8Array;
+            }
+        }
+
+        @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+        public interface RangeFieldType {
+            @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+            public interface StartFieldType {
+                @JsOverlay
+                static Diagnostic.ToObjectReturnType0.RangeFieldType.StartFieldType create() {
+                    return Js.uncheckedCast(JsPropertyMap.of());
+                }
+
+                @JsProperty
+                double getCharacter();
+
+                @JsProperty
+                double getLine();
+
+                @JsProperty
+                void setCharacter(double character);
+
+                @JsProperty
+                void setLine(double line);
+            }
+
+            @JsOverlay
+            static Diagnostic.ToObjectReturnType0.RangeFieldType create() {
+                return Js.uncheckedCast(JsPropertyMap.of());
+            }
+
+            @JsProperty
+            Object getEnd();
+
+            @JsProperty
+            Diagnostic.ToObjectReturnType0.RangeFieldType.StartFieldType getStart();
+
+            @JsProperty
+            void setEnd(Object end);
+
+            @JsProperty
+            void setStart(Diagnostic.ToObjectReturnType0.RangeFieldType.StartFieldType start);
+        }
+
+        @JsOverlay
+        static Diagnostic.ToObjectReturnType0 create() {
+            return Js.uncheckedCast(JsPropertyMap.of());
+        }
+
+        @JsProperty
+        String getCode();
+
+        @JsProperty
+        Diagnostic.ToObjectReturnType0.CodeDescriptionFieldType getCodeDescription();
+
+        @JsProperty
+        Diagnostic.ToObjectReturnType0.GetDataUnionType getData();
+
+        @JsProperty
+        String getMessage();
+
+        @JsProperty
+        Diagnostic.ToObjectReturnType0.RangeFieldType getRange();
+
+        @JsProperty
+        double getSeverity();
+
+        @JsProperty
+        String getSource();
+
+        @JsProperty
+        JsArray<Double> getTagsList();
+
+        @JsProperty
+        void setCode(String code);
+
+        @JsProperty
+        void setCodeDescription(
+                Diagnostic.ToObjectReturnType0.CodeDescriptionFieldType codeDescription);
+
+        @JsProperty
+        void setData(Diagnostic.ToObjectReturnType0.GetDataUnionType data);
+
+        @JsOverlay
+        default void setData(String data) {
+            setData(Js.<Diagnostic.ToObjectReturnType0.GetDataUnionType>uncheckedCast(data));
+        }
+
+        @JsOverlay
+        default void setData(Uint8Array data) {
+            setData(Js.<Diagnostic.ToObjectReturnType0.GetDataUnionType>uncheckedCast(data));
+        }
+
+        @JsProperty
+        void setMessage(String message);
+
+        @JsProperty
+        void setRange(Diagnostic.ToObjectReturnType0.RangeFieldType range);
+
+        @JsProperty
+        void setSeverity(double severity);
+
+        @JsProperty
+        void setSource(String source);
+
+        @JsProperty
+        void setTagsList(JsArray<Double> tagsList);
+
+        @JsOverlay
+        default void setTagsList(double[] tagsList) {
+            setTagsList(Js.<JsArray<Double>>uncheckedCast(tagsList));
+        }
+    }
+
+    public static DiagnosticSeverityMap DiagnosticSeverity;
+    public static DiagnosticTagMap DiagnosticTag;
+
+    public static native Diagnostic deserializeBinary(Uint8Array bytes);
+
+    public static native Diagnostic deserializeBinaryFromReader(Diagnostic message, Object reader);
+
+    public static native void serializeBinaryToWriter(Diagnostic message, Object writer);
+
+    public static native Diagnostic.ToObjectReturnType toObject(
+            boolean includeInstance, Diagnostic msg);
+
+    public native double addTags(double value, double index);
+
+    public native double addTags(double value);
+
+    public native void clearCode();
+
+    public native void clearCodeDescription();
+
+    public native void clearData();
+
+    public native void clearRange();
+
+    public native void clearSource();
+
+    public native void clearTagsList();
+
+    public native String getCode();
+
+    public native CodeDescription getCodeDescription();
+
+    public native Diagnostic.GetDataUnionType getData();
+
+    public native String getData_asB64();
+
+    public native Uint8Array getData_asU8();
+
+    public native String getMessage();
+
+    public native DocumentRange getRange();
+
+    public native double getSeverity();
+
+    public native String getSource();
+
+    public native JsArray<Double> getTagsList();
+
+    public native boolean hasCode();
+
+    public native boolean hasCodeDescription();
+
+    public native boolean hasData();
+
+    public native boolean hasRange();
+
+    public native boolean hasSource();
+
+    public native Uint8Array serializeBinary();
+
+    public native void setCode(String value);
+
+    public native void setCodeDescription();
+
+    public native void setCodeDescription(CodeDescription value);
+
+    public native void setData(Diagnostic.SetDataValueUnionType value);
+
+    @JsOverlay
+    public final void setData(String value) {
+        setData(Js.<Diagnostic.SetDataValueUnionType>uncheckedCast(value));
+    }
+
+    @JsOverlay
+    public final void setData(Uint8Array value) {
+        setData(Js.<Diagnostic.SetDataValueUnionType>uncheckedCast(value));
+    }
+
+    public native void setMessage(String value);
+
+    public native void setRange();
+
+    public native void setRange(DocumentRange value);
+
+    public native void setSeverity(double value);
+
+    public native void setSource(String value);
+
+    public native void setTagsList(JsArray<Double> value);
+
+    @JsOverlay
+    public final void setTagsList(double[] value) {
+        setTagsList(Js.<JsArray<Double>>uncheckedCast(value));
+    }
+
+    public native Diagnostic.ToObjectReturnType0 toObject();
+
+    public native Diagnostic.ToObjectReturnType0 toObject(boolean includeInstance);
+}
diff --git a/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/console_pb/GetCompletionItemsResponse.java b/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/console_pb/GetCompletionItemsResponse.java
index e8bcd7887e5..ca26551ebb2 100644
--- a/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/console_pb/GetCompletionItemsResponse.java
+++ b/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/console_pb/GetCompletionItemsResponse.java
@@ -21,6 +21,26 @@ public class GetCompletionItemsResponse {
     public interface ToObjectReturnType {
         @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
         public interface ItemsListFieldType {
+            @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+            public interface DocumentationFieldType {
+                @JsOverlay
+                static GetCompletionItemsResponse.ToObjectReturnType.ItemsListFieldType.DocumentationFieldType create() {
+                    return Js.uncheckedCast(JsPropertyMap.of());
+                }
+
+                @JsProperty
+                String getKind();
+
+                @JsProperty
+                String getValue();
+
+                @JsProperty
+                void setKind(String kind);
+
+                @JsProperty
+                void setValue(String value);
+            }
+
             @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
             public interface TextEditFieldType {
                 @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
@@ -98,7 +118,7 @@ static GetCompletionItemsResponse.ToObjectReturnType.ItemsListFieldType create()
             String getDetail();
 
             @JsProperty
-            String getDocumentation();
+            GetCompletionItemsResponse.ToObjectReturnType.ItemsListFieldType.DocumentationFieldType getDocumentation();
 
             @JsProperty
             String getFilterText();
@@ -153,7 +173,8 @@ default void setCommitCharactersList(String[] commitCharactersList) {
             void setDetail(String detail);
 
             @JsProperty
-            void setDocumentation(String documentation);
+            void setDocumentation(
+                    GetCompletionItemsResponse.ToObjectReturnType.ItemsListFieldType.DocumentationFieldType documentation);
 
             @JsProperty
             void setFilterText(String filterText);
@@ -221,6 +242,26 @@ void setItemsList(
     public interface ToObjectReturnType0 {
         @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
         public interface ItemsListFieldType {
+            @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+            public interface DocumentationFieldType {
+                @JsOverlay
+                static GetCompletionItemsResponse.ToObjectReturnType0.ItemsListFieldType.DocumentationFieldType create() {
+                    return Js.uncheckedCast(JsPropertyMap.of());
+                }
+
+                @JsProperty
+                String getKind();
+
+                @JsProperty
+                String getValue();
+
+                @JsProperty
+                void setKind(String kind);
+
+                @JsProperty
+                void setValue(String value);
+            }
+
             @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
             public interface TextEditFieldType {
                 @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
@@ -298,7 +339,7 @@ static GetCompletionItemsResponse.ToObjectReturnType0.ItemsListFieldType create(
             String getDetail();
 
             @JsProperty
-            String getDocumentation();
+            GetCompletionItemsResponse.ToObjectReturnType0.ItemsListFieldType.DocumentationFieldType getDocumentation();
 
             @JsProperty
             String getFilterText();
@@ -353,7 +394,8 @@ default void setCommitCharactersList(String[] commitCharactersList) {
             void setDetail(String detail);
 
             @JsProperty
-            void setDocumentation(String documentation);
+            void setDocumentation(
+                    GetCompletionItemsResponse.ToObjectReturnType0.ItemsListFieldType.DocumentationFieldType documentation);
 
             @JsProperty
             void setFilterText(String filterText);
diff --git a/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/console_pb/GetDiagnosticRequest.java b/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/console_pb/GetDiagnosticRequest.java
new file mode 100644
index 00000000000..7737f537d1f
--- /dev/null
+++ b/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/console_pb/GetDiagnosticRequest.java
@@ -0,0 +1,154 @@
+/**
+ * Copyright (c) 2016-2022 Deephaven Data Labs and Patent Pending
+ */
+package io.deephaven.javascript.proto.dhinternal.io.deephaven.proto.console_pb;
+
+import elemental2.core.Uint8Array;
+import jsinterop.annotations.JsOverlay;
+import jsinterop.annotations.JsPackage;
+import jsinterop.annotations.JsProperty;
+import jsinterop.annotations.JsType;
+import jsinterop.base.Js;
+import jsinterop.base.JsPropertyMap;
+
+@JsType(
+        isNative = true,
+        name = "dhinternal.io.deephaven.proto.console_pb.GetDiagnosticRequest",
+        namespace = JsPackage.GLOBAL)
+public class GetDiagnosticRequest {
+    @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+    public interface ToObjectReturnType {
+        @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+        public interface TextDocumentFieldType {
+            @JsOverlay
+            static GetDiagnosticRequest.ToObjectReturnType.TextDocumentFieldType create() {
+                return Js.uncheckedCast(JsPropertyMap.of());
+            }
+
+            @JsProperty
+            String getUri();
+
+            @JsProperty
+            double getVersion();
+
+            @JsProperty
+            void setUri(String uri);
+
+            @JsProperty
+            void setVersion(double version);
+        }
+
+        @JsOverlay
+        static GetDiagnosticRequest.ToObjectReturnType create() {
+            return Js.uncheckedCast(JsPropertyMap.of());
+        }
+
+        @JsProperty
+        String getIdentifier();
+
+        @JsProperty
+        String getPreviousResultId();
+
+        @JsProperty
+        GetDiagnosticRequest.ToObjectReturnType.TextDocumentFieldType getTextDocument();
+
+        @JsProperty
+        void setIdentifier(String identifier);
+
+        @JsProperty
+        void setPreviousResultId(String previousResultId);
+
+        @JsProperty
+        void setTextDocument(
+                GetDiagnosticRequest.ToObjectReturnType.TextDocumentFieldType textDocument);
+    }
+
+    @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+    public interface ToObjectReturnType0 {
+        @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+        public interface TextDocumentFieldType {
+            @JsOverlay
+            static GetDiagnosticRequest.ToObjectReturnType0.TextDocumentFieldType create() {
+                return Js.uncheckedCast(JsPropertyMap.of());
+            }
+
+            @JsProperty
+            String getUri();
+
+            @JsProperty
+            double getVersion();
+
+            @JsProperty
+            void setUri(String uri);
+
+            @JsProperty
+            void setVersion(double version);
+        }
+
+        @JsOverlay
+        static GetDiagnosticRequest.ToObjectReturnType0 create() {
+            return Js.uncheckedCast(JsPropertyMap.of());
+        }
+
+        @JsProperty
+        String getIdentifier();
+
+        @JsProperty
+        String getPreviousResultId();
+
+        @JsProperty
+        GetDiagnosticRequest.ToObjectReturnType0.TextDocumentFieldType getTextDocument();
+
+        @JsProperty
+        void setIdentifier(String identifier);
+
+        @JsProperty
+        void setPreviousResultId(String previousResultId);
+
+        @JsProperty
+        void setTextDocument(
+                GetDiagnosticRequest.ToObjectReturnType0.TextDocumentFieldType textDocument);
+    }
+
+    public static native GetDiagnosticRequest deserializeBinary(Uint8Array bytes);
+
+    public static native GetDiagnosticRequest deserializeBinaryFromReader(
+            GetDiagnosticRequest message, Object reader);
+
+    public static native void serializeBinaryToWriter(GetDiagnosticRequest message, Object writer);
+
+    public static native GetDiagnosticRequest.ToObjectReturnType toObject(
+            boolean includeInstance, GetDiagnosticRequest msg);
+
+    public native void clearIdentifier();
+
+    public native void clearPreviousResultId();
+
+    public native void clearTextDocument();
+
+    public native String getIdentifier();
+
+    public native String getPreviousResultId();
+
+    public native VersionedTextDocumentIdentifier getTextDocument();
+
+    public native boolean hasIdentifier();
+
+    public native boolean hasPreviousResultId();
+
+    public native boolean hasTextDocument();
+
+    public native Uint8Array serializeBinary();
+
+    public native void setIdentifier(String value);
+
+    public native void setPreviousResultId(String value);
+
+    public native void setTextDocument();
+
+    public native void setTextDocument(VersionedTextDocumentIdentifier value);
+
+    public native GetDiagnosticRequest.ToObjectReturnType0 toObject();
+
+    public native GetDiagnosticRequest.ToObjectReturnType0 toObject(boolean includeInstance);
+}
diff --git a/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/console_pb/GetHoverRequest.java b/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/console_pb/GetHoverRequest.java
new file mode 100644
index 00000000000..e216e53819d
--- /dev/null
+++ b/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/console_pb/GetHoverRequest.java
@@ -0,0 +1,174 @@
+/**
+ * Copyright (c) 2016-2022 Deephaven Data Labs and Patent Pending
+ */
+package io.deephaven.javascript.proto.dhinternal.io.deephaven.proto.console_pb;
+
+import elemental2.core.Uint8Array;
+import jsinterop.annotations.JsOverlay;
+import jsinterop.annotations.JsPackage;
+import jsinterop.annotations.JsProperty;
+import jsinterop.annotations.JsType;
+import jsinterop.base.Js;
+import jsinterop.base.JsPropertyMap;
+
+@JsType(
+        isNative = true,
+        name = "dhinternal.io.deephaven.proto.console_pb.GetHoverRequest",
+        namespace = JsPackage.GLOBAL)
+public class GetHoverRequest {
+    @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+    public interface ToObjectReturnType {
+        @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+        public interface PositionFieldType {
+            @JsOverlay
+            static GetHoverRequest.ToObjectReturnType.PositionFieldType create() {
+                return Js.uncheckedCast(JsPropertyMap.of());
+            }
+
+            @JsProperty
+            double getCharacter();
+
+            @JsProperty
+            double getLine();
+
+            @JsProperty
+            void setCharacter(double character);
+
+            @JsProperty
+            void setLine(double line);
+        }
+
+        @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+        public interface TextDocumentFieldType {
+            @JsOverlay
+            static GetHoverRequest.ToObjectReturnType.TextDocumentFieldType create() {
+                return Js.uncheckedCast(JsPropertyMap.of());
+            }
+
+            @JsProperty
+            String getUri();
+
+            @JsProperty
+            double getVersion();
+
+            @JsProperty
+            void setUri(String uri);
+
+            @JsProperty
+            void setVersion(double version);
+        }
+
+        @JsOverlay
+        static GetHoverRequest.ToObjectReturnType create() {
+            return Js.uncheckedCast(JsPropertyMap.of());
+        }
+
+        @JsProperty
+        GetHoverRequest.ToObjectReturnType.PositionFieldType getPosition();
+
+        @JsProperty
+        GetHoverRequest.ToObjectReturnType.TextDocumentFieldType getTextDocument();
+
+        @JsProperty
+        void setPosition(GetHoverRequest.ToObjectReturnType.PositionFieldType position);
+
+        @JsProperty
+        void setTextDocument(GetHoverRequest.ToObjectReturnType.TextDocumentFieldType textDocument);
+    }
+
+    @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+    public interface ToObjectReturnType0 {
+        @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+        public interface PositionFieldType {
+            @JsOverlay
+            static GetHoverRequest.ToObjectReturnType0.PositionFieldType create() {
+                return Js.uncheckedCast(JsPropertyMap.of());
+            }
+
+            @JsProperty
+            double getCharacter();
+
+            @JsProperty
+            double getLine();
+
+            @JsProperty
+            void setCharacter(double character);
+
+            @JsProperty
+            void setLine(double line);
+        }
+
+        @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+        public interface TextDocumentFieldType {
+            @JsOverlay
+            static GetHoverRequest.ToObjectReturnType0.TextDocumentFieldType create() {
+                return Js.uncheckedCast(JsPropertyMap.of());
+            }
+
+            @JsProperty
+            String getUri();
+
+            @JsProperty
+            double getVersion();
+
+            @JsProperty
+            void setUri(String uri);
+
+            @JsProperty
+            void setVersion(double version);
+        }
+
+        @JsOverlay
+        static GetHoverRequest.ToObjectReturnType0 create() {
+            return Js.uncheckedCast(JsPropertyMap.of());
+        }
+
+        @JsProperty
+        GetHoverRequest.ToObjectReturnType0.PositionFieldType getPosition();
+
+        @JsProperty
+        GetHoverRequest.ToObjectReturnType0.TextDocumentFieldType getTextDocument();
+
+        @JsProperty
+        void setPosition(GetHoverRequest.ToObjectReturnType0.PositionFieldType position);
+
+        @JsProperty
+        void setTextDocument(GetHoverRequest.ToObjectReturnType0.TextDocumentFieldType textDocument);
+    }
+
+    public static native GetHoverRequest deserializeBinary(Uint8Array bytes);
+
+    public static native GetHoverRequest deserializeBinaryFromReader(
+            GetHoverRequest message, Object reader);
+
+    public static native void serializeBinaryToWriter(GetHoverRequest message, Object writer);
+
+    public static native GetHoverRequest.ToObjectReturnType toObject(
+            boolean includeInstance, GetHoverRequest msg);
+
+    public native void clearPosition();
+
+    public native void clearTextDocument();
+
+    public native Position getPosition();
+
+    public native VersionedTextDocumentIdentifier getTextDocument();
+
+    public native boolean hasPosition();
+
+    public native boolean hasTextDocument();
+
+    public native Uint8Array serializeBinary();
+
+    public native void setPosition();
+
+    public native void setPosition(Position value);
+
+    public native void setTextDocument();
+
+    public native void setTextDocument(VersionedTextDocumentIdentifier value);
+
+    public native GetHoverRequest.ToObjectReturnType0 toObject();
+
+    public native GetHoverRequest.ToObjectReturnType0 toObject(boolean includeInstance);
+}
diff --git a/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/console_pb/GetHoverResponse.java b/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/console_pb/GetHoverResponse.java
new file mode 100644
index 00000000000..ddc6d27d1e5
--- /dev/null
+++ b/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/console_pb/GetHoverResponse.java
@@ -0,0 +1,214 @@
+/**
+ * Copyright (c) 2016-2022 Deephaven Data Labs and Patent Pending
+ */
+package io.deephaven.javascript.proto.dhinternal.io.deephaven.proto.console_pb;
+
+import elemental2.core.Uint8Array;
+import jsinterop.annotations.JsOverlay;
+import jsinterop.annotations.JsPackage;
+import jsinterop.annotations.JsProperty;
+import jsinterop.annotations.JsType;
+import jsinterop.base.Js;
+import jsinterop.base.JsPropertyMap;
+
+@JsType(
+        isNative = true,
+        name = "dhinternal.io.deephaven.proto.console_pb.GetHoverResponse",
+        namespace = JsPackage.GLOBAL)
+public class GetHoverResponse {
+    @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+    public interface ToObjectReturnType {
+        @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+        public interface ContentsFieldType {
+            @JsOverlay
+            static GetHoverResponse.ToObjectReturnType.ContentsFieldType create() {
+                return Js.uncheckedCast(JsPropertyMap.of());
+            }
+
+            @JsProperty
+            String getKind();
+
+            @JsProperty
+            String getValue();
+
+            @JsProperty
+            void setKind(String kind);
+
+            @JsProperty
+            void setValue(String value);
+        }
+
+        @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+        public interface RangeFieldType {
+            @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+            public interface StartFieldType {
+                @JsOverlay
+                static GetHoverResponse.ToObjectReturnType.RangeFieldType.StartFieldType create() {
+                    return Js.uncheckedCast(JsPropertyMap.of());
+                }
+
+                @JsProperty
+                double getCharacter();
+
+                @JsProperty
+                double getLine();
+
+                @JsProperty
+                void setCharacter(double character);
+
+                @JsProperty
+                void setLine(double line);
+            }
+
+            @JsOverlay
+            static GetHoverResponse.ToObjectReturnType.RangeFieldType create() {
+                return Js.uncheckedCast(JsPropertyMap.of());
+            }
+
+            @JsProperty
+            Object getEnd();
+
+            @JsProperty
+            GetHoverResponse.ToObjectReturnType.RangeFieldType.StartFieldType getStart();
+
+            @JsProperty
+            void setEnd(Object end);
+
+            @JsProperty
+            void setStart(GetHoverResponse.ToObjectReturnType.RangeFieldType.StartFieldType start);
+        }
+
+        @JsOverlay
+        static GetHoverResponse.ToObjectReturnType create() {
+            return Js.uncheckedCast(JsPropertyMap.of());
+        }
+
+        @JsProperty
+        GetHoverResponse.ToObjectReturnType.ContentsFieldType getContents();
+
+        @JsProperty
+        GetHoverResponse.ToObjectReturnType.RangeFieldType getRange();
+
+        @JsProperty
+        void setContents(GetHoverResponse.ToObjectReturnType.ContentsFieldType contents);
+
+        @JsProperty
+        void setRange(GetHoverResponse.ToObjectReturnType.RangeFieldType range);
+    }
+
+    @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+    public interface ToObjectReturnType0 {
+        @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+        public interface ContentsFieldType {
+            @JsOverlay
+            static GetHoverResponse.ToObjectReturnType0.ContentsFieldType create() {
+                return Js.uncheckedCast(JsPropertyMap.of());
+            }
+
+            @JsProperty
+            String getKind();
+
+            @JsProperty
+            String getValue();
+
+            @JsProperty
+            void setKind(String kind);
+
+            @JsProperty
+            void setValue(String value);
+        }
+
+        @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+        public interface RangeFieldType {
+            @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+            public interface StartFieldType {
+                @JsOverlay
+                static GetHoverResponse.ToObjectReturnType0.RangeFieldType.StartFieldType create() {
+                    return Js.uncheckedCast(JsPropertyMap.of());
+                }
+
+                @JsProperty
+                double getCharacter();
+
+                @JsProperty
+                double getLine();
+
+                @JsProperty
+                void setCharacter(double character);
+
+                @JsProperty
+                void setLine(double line);
+            }
+
+            @JsOverlay
+            static GetHoverResponse.ToObjectReturnType0.RangeFieldType create() {
+                return Js.uncheckedCast(JsPropertyMap.of());
+            }
+
+            @JsProperty
+            Object getEnd();
+
+            @JsProperty
+            GetHoverResponse.ToObjectReturnType0.RangeFieldType.StartFieldType getStart();
+
+            @JsProperty
+            void setEnd(Object end);
+
+            @JsProperty
+            void setStart(GetHoverResponse.ToObjectReturnType0.RangeFieldType.StartFieldType start);
+        }
+
+        @JsOverlay
+        static GetHoverResponse.ToObjectReturnType0 create() {
+            return Js.uncheckedCast(JsPropertyMap.of());
+        }
+
+        @JsProperty
+        GetHoverResponse.ToObjectReturnType0.ContentsFieldType getContents();
+
+        @JsProperty
+        GetHoverResponse.ToObjectReturnType0.RangeFieldType getRange();
+
+        @JsProperty
+        void setContents(GetHoverResponse.ToObjectReturnType0.ContentsFieldType contents);
+
+        @JsProperty
+        void setRange(GetHoverResponse.ToObjectReturnType0.RangeFieldType range);
+    }
+
+    public static native GetHoverResponse deserializeBinary(Uint8Array bytes);
+
+    public static native GetHoverResponse deserializeBinaryFromReader(
+            GetHoverResponse message, Object reader);
+
+    public static native void serializeBinaryToWriter(GetHoverResponse message, Object writer);
+
+    public static native GetHoverResponse.ToObjectReturnType toObject(
+            boolean includeInstance, GetHoverResponse msg);
+
+    public native void clearContents();
+
+    public native void clearRange();
+
+    public native MarkupContent getContents();
+
+    public native DocumentRange getRange();
+
+    public native boolean hasContents();
+
+    public native boolean hasRange();
+
+    public native Uint8Array serializeBinary();
+
+    public native void setContents();
+
+    public native void setContents(MarkupContent value);
+
+    public native void setRange();
+
+    public native void setRange(DocumentRange value);
+
+    public native GetHoverResponse.ToObjectReturnType0 toObject();
+
+    public native GetHoverResponse.ToObjectReturnType0 toObject(boolean includeInstance);
+}
diff --git a/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/console_pb/GetPublishDiagnosticResponse.java b/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/console_pb/GetPublishDiagnosticResponse.java
new file mode 100644
index 00000000000..ae9fb2cfa88
--- /dev/null
+++ b/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/console_pb/GetPublishDiagnosticResponse.java
@@ -0,0 +1,459 @@
+/**
+ * Copyright (c) 2016-2022 Deephaven Data Labs and Patent Pending
+ */
+package io.deephaven.javascript.proto.dhinternal.io.deephaven.proto.console_pb;
+
+import elemental2.core.JsArray;
+import elemental2.core.Uint8Array;
+import jsinterop.annotations.JsOverlay;
+import jsinterop.annotations.JsPackage;
+import jsinterop.annotations.JsProperty;
+import jsinterop.annotations.JsType;
+import jsinterop.base.Js;
+import jsinterop.base.JsPropertyMap;
+
+@JsType(
+        isNative = true,
+        name = "dhinternal.io.deephaven.proto.console_pb.GetPublishDiagnosticResponse",
+        namespace = JsPackage.GLOBAL)
+public class GetPublishDiagnosticResponse {
+    @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+    public interface ToObjectReturnType {
+        @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+        public interface DiagnosticsListFieldType {
+            @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+            public interface CodeDescriptionFieldType {
+                @JsOverlay
+                static GetPublishDiagnosticResponse.ToObjectReturnType.DiagnosticsListFieldType.CodeDescriptionFieldType create() {
+                    return Js.uncheckedCast(JsPropertyMap.of());
+                }
+
+                @JsProperty
+                String getHref();
+
+                @JsProperty
+                void setHref(String href);
+            }
+
+            @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+            public interface GetDataUnionType {
+                @JsOverlay
+                static GetPublishDiagnosticResponse.ToObjectReturnType.DiagnosticsListFieldType.GetDataUnionType of(
+                        Object o) {
+                    return Js.cast(o);
+                }
+
+                @JsOverlay
+                default String asString() {
+                    return Js.asString(this);
+                }
+
+                @JsOverlay
+                default Uint8Array asUint8Array() {
+                    return Js.cast(this);
+                }
+
+                @JsOverlay
+                default boolean isString() {
+                    return (Object) this instanceof String;
+                }
+
+                @JsOverlay
+                default boolean isUint8Array() {
+                    return (Object) this instanceof Uint8Array;
+                }
+            }
+
+            @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+            public interface RangeFieldType {
+                @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+                public interface StartFieldType {
+                    @JsOverlay
+                    static GetPublishDiagnosticResponse.ToObjectReturnType.DiagnosticsListFieldType.RangeFieldType.StartFieldType create() {
+                        return Js.uncheckedCast(JsPropertyMap.of());
+                    }
+
+                    @JsProperty
+                    double getCharacter();
+
+                    @JsProperty
+                    double getLine();
+
+                    @JsProperty
+                    void setCharacter(double character);
+
+                    @JsProperty
+                    void setLine(double line);
+                }
+
+                @JsOverlay
+                static GetPublishDiagnosticResponse.ToObjectReturnType.DiagnosticsListFieldType.RangeFieldType create() {
+                    return Js.uncheckedCast(JsPropertyMap.of());
+                }
+
+                @JsProperty
+                Object getEnd();
+
+                @JsProperty
+                GetPublishDiagnosticResponse.ToObjectReturnType.DiagnosticsListFieldType.RangeFieldType.StartFieldType getStart();
+
+                @JsProperty
+                void setEnd(Object end);
+
+                @JsProperty
+                void setStart(
+                        GetPublishDiagnosticResponse.ToObjectReturnType.DiagnosticsListFieldType.RangeFieldType.StartFieldType start);
+            }
+
+            @JsOverlay
+            static GetPublishDiagnosticResponse.ToObjectReturnType.DiagnosticsListFieldType create() {
+                return Js.uncheckedCast(JsPropertyMap.of());
+            }
+
+            @JsProperty
+            String getCode();
+
+            @JsProperty
+            GetPublishDiagnosticResponse.ToObjectReturnType.DiagnosticsListFieldType.CodeDescriptionFieldType getCodeDescription();
+
+            @JsProperty
+            GetPublishDiagnosticResponse.ToObjectReturnType.DiagnosticsListFieldType.GetDataUnionType getData();
+
+            @JsProperty
+            String getMessage();
+
+            @JsProperty
+            GetPublishDiagnosticResponse.ToObjectReturnType.DiagnosticsListFieldType.RangeFieldType getRange();
+
+            @JsProperty
+            double getSeverity();
+
+            @JsProperty
+            String getSource();
+
+            @JsProperty
+            JsArray<Double> getTagsList();
+
+            @JsProperty
+            void setCode(String code);
+
+            @JsProperty
+            void setCodeDescription(
+                    GetPublishDiagnosticResponse.ToObjectReturnType.DiagnosticsListFieldType.CodeDescriptionFieldType codeDescription);
+
+            @JsProperty
+            void setData(
+                    GetPublishDiagnosticResponse.ToObjectReturnType.DiagnosticsListFieldType.GetDataUnionType data);
+
+            @JsOverlay
+            default void setData(String data) {
+                setData(
+                        Js.<GetPublishDiagnosticResponse.ToObjectReturnType.DiagnosticsListFieldType.GetDataUnionType>uncheckedCast(
+                                data));
+            }
+
+            @JsOverlay
+            default void setData(Uint8Array data) {
+                setData(
+                        Js.<GetPublishDiagnosticResponse.ToObjectReturnType.DiagnosticsListFieldType.GetDataUnionType>uncheckedCast(
+                                data));
+            }
+
+            @JsProperty
+            void setMessage(String message);
+
+            @JsProperty
+            void setRange(
+                    GetPublishDiagnosticResponse.ToObjectReturnType.DiagnosticsListFieldType.RangeFieldType range);
+
+            @JsProperty
+            void setSeverity(double severity);
+
+            @JsProperty
+            void setSource(String source);
+
+            @JsProperty
+            void setTagsList(JsArray<Double> tagsList);
+
+            @JsOverlay
+            default void setTagsList(double[] tagsList) {
+                setTagsList(Js.<JsArray<Double>>uncheckedCast(tagsList));
+            }
+        }
+
+        @JsOverlay
+        static GetPublishDiagnosticResponse.ToObjectReturnType create() {
+            return Js.uncheckedCast(JsPropertyMap.of());
+        }
+
+        @JsProperty
+        JsArray<GetPublishDiagnosticResponse.ToObjectReturnType.DiagnosticsListFieldType> getDiagnosticsList();
+
+        @JsProperty
+        String getUri();
+
+        @JsProperty
+        double getVersion();
+
+        @JsOverlay
+        default void setDiagnosticsList(
+                GetPublishDiagnosticResponse.ToObjectReturnType.DiagnosticsListFieldType[] diagnosticsList) {
+            setDiagnosticsList(
+                    Js.<JsArray<GetPublishDiagnosticResponse.ToObjectReturnType.DiagnosticsListFieldType>>uncheckedCast(
+                            diagnosticsList));
+        }
+
+        @JsProperty
+        void setDiagnosticsList(
+                JsArray<GetPublishDiagnosticResponse.ToObjectReturnType.DiagnosticsListFieldType> diagnosticsList);
+
+        @JsProperty
+        void setUri(String uri);
+
+        @JsProperty
+        void setVersion(double version);
+    }
+
+    @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+    public interface ToObjectReturnType0 {
+        @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+        public interface DiagnosticsListFieldType {
+            @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+            public interface CodeDescriptionFieldType {
+                @JsOverlay
+                static GetPublishDiagnosticResponse.ToObjectReturnType0.DiagnosticsListFieldType.CodeDescriptionFieldType create() {
+                    return Js.uncheckedCast(JsPropertyMap.of());
+                }
+
+                @JsProperty
+                String getHref();
+
+                @JsProperty
+                void setHref(String href);
+            }
+
+            @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+            public interface GetDataUnionType {
+                @JsOverlay
+                static GetPublishDiagnosticResponse.ToObjectReturnType0.DiagnosticsListFieldType.GetDataUnionType of(
+                        Object o) {
+                    return Js.cast(o);
+                }
+
+                @JsOverlay
+                default String asString() {
+                    return Js.asString(this);
+                }
+
+                @JsOverlay
+                default Uint8Array asUint8Array() {
+                    return Js.cast(this);
+                }
+
+                @JsOverlay
+                default boolean isString() {
+                    return (Object) this instanceof String;
+                }
+
+                @JsOverlay
+                default boolean isUint8Array() {
+                    return (Object) this instanceof Uint8Array;
+                }
+            }
+
+            @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+            public interface RangeFieldType {
+                @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+                public interface StartFieldType {
+                    @JsOverlay
+                    static GetPublishDiagnosticResponse.ToObjectReturnType0.DiagnosticsListFieldType.RangeFieldType.StartFieldType create() {
+                        return Js.uncheckedCast(JsPropertyMap.of());
+                    }
+
+                    @JsProperty
+                    double getCharacter();
+
+                    @JsProperty
+                    double getLine();
+
+                    @JsProperty
+                    void setCharacter(double character);
+
+                    @JsProperty
+                    void setLine(double line);
+                }
+
+                @JsOverlay
+                static GetPublishDiagnosticResponse.ToObjectReturnType0.DiagnosticsListFieldType.RangeFieldType create() {
+                    return Js.uncheckedCast(JsPropertyMap.of());
+                }
+
+                @JsProperty
+                Object getEnd();
+
+                @JsProperty
+                GetPublishDiagnosticResponse.ToObjectReturnType0.DiagnosticsListFieldType.RangeFieldType.StartFieldType getStart();
+
+                @JsProperty
+                void setEnd(Object end);
+
+                @JsProperty
+                void setStart(
+                        GetPublishDiagnosticResponse.ToObjectReturnType0.DiagnosticsListFieldType.RangeFieldType.StartFieldType start);
+            }
+
+            @JsOverlay
+            static GetPublishDiagnosticResponse.ToObjectReturnType0.DiagnosticsListFieldType create() {
+                return Js.uncheckedCast(JsPropertyMap.of());
+            }
+
+            @JsProperty
+            String getCode();
+
+            @JsProperty
+            GetPublishDiagnosticResponse.ToObjectReturnType0.DiagnosticsListFieldType.CodeDescriptionFieldType getCodeDescription();
+
+            @JsProperty
+            GetPublishDiagnosticResponse.ToObjectReturnType0.DiagnosticsListFieldType.GetDataUnionType getData();
+
+            @JsProperty
+            String getMessage();
+
+            @JsProperty
+            GetPublishDiagnosticResponse.ToObjectReturnType0.DiagnosticsListFieldType.RangeFieldType getRange();
+
+            @JsProperty
+            double getSeverity();
+
+            @JsProperty
+            String getSource();
+
+            @JsProperty
+            JsArray<Double> getTagsList();
+
+            @JsProperty
+            void setCode(String code);
+
+            @JsProperty
+            void setCodeDescription(
+                    GetPublishDiagnosticResponse.ToObjectReturnType0.DiagnosticsListFieldType.CodeDescriptionFieldType codeDescription);
+
+            @JsProperty
+            void setData(
+                    GetPublishDiagnosticResponse.ToObjectReturnType0.DiagnosticsListFieldType.GetDataUnionType data);
+
+            @JsOverlay
+            default void setData(String data) {
+                setData(
+                        Js.<GetPublishDiagnosticResponse.ToObjectReturnType0.DiagnosticsListFieldType.GetDataUnionType>uncheckedCast(
+                                data));
+            }
+
+            @JsOverlay
+            default void setData(Uint8Array data) {
+                setData(
+                        Js.<GetPublishDiagnosticResponse.ToObjectReturnType0.DiagnosticsListFieldType.GetDataUnionType>uncheckedCast(
+                                data));
+            }
+
+            @JsProperty
+            void setMessage(String message);
+
+            @JsProperty
+            void setRange(
+                    GetPublishDiagnosticResponse.ToObjectReturnType0.DiagnosticsListFieldType.RangeFieldType range);
+
+            @JsProperty
+            void setSeverity(double severity);
+
+            @JsProperty
+            void setSource(String source);
+
+            @JsProperty
+            void setTagsList(JsArray<Double> tagsList);
+
+            @JsOverlay
+            default void setTagsList(double[] tagsList) {
+                setTagsList(Js.<JsArray<Double>>uncheckedCast(tagsList));
+            }
+        }
+
+        @JsOverlay
+        static GetPublishDiagnosticResponse.ToObjectReturnType0 create() {
+            return Js.uncheckedCast(JsPropertyMap.of());
+        }
+
+        @JsProperty
+        JsArray<GetPublishDiagnosticResponse.ToObjectReturnType0.DiagnosticsListFieldType> getDiagnosticsList();
+
+        @JsProperty
+        String getUri();
+
+        @JsProperty
+        double getVersion();
+
+        @JsOverlay
+        default void setDiagnosticsList(
+                GetPublishDiagnosticResponse.ToObjectReturnType0.DiagnosticsListFieldType[] diagnosticsList) {
+            setDiagnosticsList(
+                    Js.<JsArray<GetPublishDiagnosticResponse.ToObjectReturnType0.DiagnosticsListFieldType>>uncheckedCast(
+                            diagnosticsList));
+        }
+
+        @JsProperty
+        void setDiagnosticsList(
+                JsArray<GetPublishDiagnosticResponse.ToObjectReturnType0.DiagnosticsListFieldType> diagnosticsList);
+
+        @JsProperty
+        void setUri(String uri);
+
+        @JsProperty
+        void setVersion(double version);
+    }
+
+    public static native GetPublishDiagnosticResponse deserializeBinary(Uint8Array bytes);
+
+    public static native GetPublishDiagnosticResponse deserializeBinaryFromReader(
+            GetPublishDiagnosticResponse message, Object reader);
+
+    public static native void serializeBinaryToWriter(
+            GetPublishDiagnosticResponse message, Object writer);
+
+    public static native GetPublishDiagnosticResponse.ToObjectReturnType toObject(
+            boolean includeInstance, GetPublishDiagnosticResponse msg);
+
+    public native Diagnostic addDiagnostics();
+
+    public native Diagnostic addDiagnostics(Diagnostic value, double index);
+
+    public native Diagnostic addDiagnostics(Diagnostic value);
+
+    public native void clearDiagnosticsList();
+
+    public native void clearVersion();
+
+    public native JsArray<Diagnostic> getDiagnosticsList();
+
+    public native String getUri();
+
+    public native double getVersion();
+
+    public native boolean hasVersion();
+
+    public native Uint8Array serializeBinary();
+
+    @JsOverlay
+    public final void setDiagnosticsList(Diagnostic[] value) {
+        setDiagnosticsList(Js.<JsArray<Diagnostic>>uncheckedCast(value));
+    }
+
+    public native void setDiagnosticsList(JsArray<Diagnostic> value);
+
+    public native void setUri(String value);
+
+    public native void setVersion(double value);
+
+    public native GetPublishDiagnosticResponse.ToObjectReturnType0 toObject();
+
+    public native GetPublishDiagnosticResponse.ToObjectReturnType0 toObject(boolean includeInstance);
+}
diff --git a/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/console_pb/GetPullDiagnosticResponse.java b/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/console_pb/GetPullDiagnosticResponse.java
new file mode 100644
index 00000000000..2fcfa20e1d5
--- /dev/null
+++ b/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/console_pb/GetPullDiagnosticResponse.java
@@ -0,0 +1,459 @@
+/**
+ * Copyright (c) 2016-2022 Deephaven Data Labs and Patent Pending
+ */
+package io.deephaven.javascript.proto.dhinternal.io.deephaven.proto.console_pb;
+
+import elemental2.core.JsArray;
+import elemental2.core.Uint8Array;
+import jsinterop.annotations.JsOverlay;
+import jsinterop.annotations.JsPackage;
+import jsinterop.annotations.JsProperty;
+import jsinterop.annotations.JsType;
+import jsinterop.base.Js;
+import jsinterop.base.JsPropertyMap;
+
+@JsType(
+        isNative = true,
+        name = "dhinternal.io.deephaven.proto.console_pb.GetPullDiagnosticResponse",
+        namespace = JsPackage.GLOBAL)
+public class GetPullDiagnosticResponse {
+    @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+    public interface ToObjectReturnType {
+        @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+        public interface ItemsListFieldType {
+            @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+            public interface CodeDescriptionFieldType {
+                @JsOverlay
+                static GetPullDiagnosticResponse.ToObjectReturnType.ItemsListFieldType.CodeDescriptionFieldType create() {
+                    return Js.uncheckedCast(JsPropertyMap.of());
+                }
+
+                @JsProperty
+                String getHref();
+
+                @JsProperty
+                void setHref(String href);
+            }
+
+            @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+            public interface GetDataUnionType {
+                @JsOverlay
+                static GetPullDiagnosticResponse.ToObjectReturnType.ItemsListFieldType.GetDataUnionType of(
+                        Object o) {
+                    return Js.cast(o);
+                }
+
+                @JsOverlay
+                default String asString() {
+                    return Js.asString(this);
+                }
+
+                @JsOverlay
+                default Uint8Array asUint8Array() {
+                    return Js.cast(this);
+                }
+
+                @JsOverlay
+                default boolean isString() {
+                    return (Object) this instanceof String;
+                }
+
+                @JsOverlay
+                default boolean isUint8Array() {
+                    return (Object) this instanceof Uint8Array;
+                }
+            }
+
+            @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+            public interface RangeFieldType {
+                @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+                public interface StartFieldType {
+                    @JsOverlay
+                    static GetPullDiagnosticResponse.ToObjectReturnType.ItemsListFieldType.RangeFieldType.StartFieldType create() {
+                        return Js.uncheckedCast(JsPropertyMap.of());
+                    }
+
+                    @JsProperty
+                    double getCharacter();
+
+                    @JsProperty
+                    double getLine();
+
+                    @JsProperty
+                    void setCharacter(double character);
+
+                    @JsProperty
+                    void setLine(double line);
+                }
+
+                @JsOverlay
+                static GetPullDiagnosticResponse.ToObjectReturnType.ItemsListFieldType.RangeFieldType create() {
+                    return Js.uncheckedCast(JsPropertyMap.of());
+                }
+
+                @JsProperty
+                Object getEnd();
+
+                @JsProperty
+                GetPullDiagnosticResponse.ToObjectReturnType.ItemsListFieldType.RangeFieldType.StartFieldType getStart();
+
+                @JsProperty
+                void setEnd(Object end);
+
+                @JsProperty
+                void setStart(
+                        GetPullDiagnosticResponse.ToObjectReturnType.ItemsListFieldType.RangeFieldType.StartFieldType start);
+            }
+
+            @JsOverlay
+            static GetPullDiagnosticResponse.ToObjectReturnType.ItemsListFieldType create() {
+                return Js.uncheckedCast(JsPropertyMap.of());
+            }
+
+            @JsProperty
+            String getCode();
+
+            @JsProperty
+            GetPullDiagnosticResponse.ToObjectReturnType.ItemsListFieldType.CodeDescriptionFieldType getCodeDescription();
+
+            @JsProperty
+            GetPullDiagnosticResponse.ToObjectReturnType.ItemsListFieldType.GetDataUnionType getData();
+
+            @JsProperty
+            String getMessage();
+
+            @JsProperty
+            GetPullDiagnosticResponse.ToObjectReturnType.ItemsListFieldType.RangeFieldType getRange();
+
+            @JsProperty
+            double getSeverity();
+
+            @JsProperty
+            String getSource();
+
+            @JsProperty
+            JsArray<Double> getTagsList();
+
+            @JsProperty
+            void setCode(String code);
+
+            @JsProperty
+            void setCodeDescription(
+                    GetPullDiagnosticResponse.ToObjectReturnType.ItemsListFieldType.CodeDescriptionFieldType codeDescription);
+
+            @JsProperty
+            void setData(
+                    GetPullDiagnosticResponse.ToObjectReturnType.ItemsListFieldType.GetDataUnionType data);
+
+            @JsOverlay
+            default void setData(String data) {
+                setData(
+                        Js.<GetPullDiagnosticResponse.ToObjectReturnType.ItemsListFieldType.GetDataUnionType>uncheckedCast(
+                                data));
+            }
+
+            @JsOverlay
+            default void setData(Uint8Array data) {
+                setData(
+                        Js.<GetPullDiagnosticResponse.ToObjectReturnType.ItemsListFieldType.GetDataUnionType>uncheckedCast(
+                                data));
+            }
+
+            @JsProperty
+            void setMessage(String message);
+
+            @JsProperty
+            void setRange(
+                    GetPullDiagnosticResponse.ToObjectReturnType.ItemsListFieldType.RangeFieldType range);
+
+            @JsProperty
+            void setSeverity(double severity);
+
+            @JsProperty
+            void setSource(String source);
+
+            @JsProperty
+            void setTagsList(JsArray<Double> tagsList);
+
+            @JsOverlay
+            default void setTagsList(double[] tagsList) {
+                setTagsList(Js.<JsArray<Double>>uncheckedCast(tagsList));
+            }
+        }
+
+        @JsOverlay
+        static GetPullDiagnosticResponse.ToObjectReturnType create() {
+            return Js.uncheckedCast(JsPropertyMap.of());
+        }
+
+        @JsProperty
+        JsArray<GetPullDiagnosticResponse.ToObjectReturnType.ItemsListFieldType> getItemsList();
+
+        @JsProperty
+        String getKind();
+
+        @JsProperty
+        String getResultId();
+
+        @JsOverlay
+        default void setItemsList(
+                GetPullDiagnosticResponse.ToObjectReturnType.ItemsListFieldType[] itemsList) {
+            setItemsList(
+                    Js.<JsArray<GetPullDiagnosticResponse.ToObjectReturnType.ItemsListFieldType>>uncheckedCast(
+                            itemsList));
+        }
+
+        @JsProperty
+        void setItemsList(
+                JsArray<GetPullDiagnosticResponse.ToObjectReturnType.ItemsListFieldType> itemsList);
+
+        @JsProperty
+        void setKind(String kind);
+
+        @JsProperty
+        void setResultId(String resultId);
+    }
+
+    @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+    public interface ToObjectReturnType0 {
+        @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+        public interface ItemsListFieldType {
+            @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+            public interface CodeDescriptionFieldType {
+                @JsOverlay
+                static GetPullDiagnosticResponse.ToObjectReturnType0.ItemsListFieldType.CodeDescriptionFieldType create() {
+                    return Js.uncheckedCast(JsPropertyMap.of());
+                }
+
+                @JsProperty
+                String getHref();
+
+                @JsProperty
+                void setHref(String href);
+            }
+
+            @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+            public interface GetDataUnionType {
+                @JsOverlay
+                static GetPullDiagnosticResponse.ToObjectReturnType0.ItemsListFieldType.GetDataUnionType of(
+                        Object o) {
+                    return Js.cast(o);
+                }
+
+                @JsOverlay
+                default String asString() {
+                    return Js.asString(this);
+                }
+
+                @JsOverlay
+                default Uint8Array asUint8Array() {
+                    return Js.cast(this);
+                }
+
+                @JsOverlay
+                default boolean isString() {
+                    return (Object) this instanceof String;
+                }
+
+                @JsOverlay
+                default boolean isUint8Array() {
+                    return (Object) this instanceof Uint8Array;
+                }
+            }
+
+            @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+            public interface RangeFieldType {
+                @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+                public interface StartFieldType {
+                    @JsOverlay
+                    static GetPullDiagnosticResponse.ToObjectReturnType0.ItemsListFieldType.RangeFieldType.StartFieldType create() {
+                        return Js.uncheckedCast(JsPropertyMap.of());
+                    }
+
+                    @JsProperty
+                    double getCharacter();
+
+                    @JsProperty
+                    double getLine();
+
+                    @JsProperty
+                    void setCharacter(double character);
+
+                    @JsProperty
+                    void setLine(double line);
+                }
+
+                @JsOverlay
+                static GetPullDiagnosticResponse.ToObjectReturnType0.ItemsListFieldType.RangeFieldType create() {
+                    return Js.uncheckedCast(JsPropertyMap.of());
+                }
+
+                @JsProperty
+                Object getEnd();
+
+                @JsProperty
+                GetPullDiagnosticResponse.ToObjectReturnType0.ItemsListFieldType.RangeFieldType.StartFieldType getStart();
+
+                @JsProperty
+                void setEnd(Object end);
+
+                @JsProperty
+                void setStart(
+                        GetPullDiagnosticResponse.ToObjectReturnType0.ItemsListFieldType.RangeFieldType.StartFieldType start);
+            }
+
+            @JsOverlay
+            static GetPullDiagnosticResponse.ToObjectReturnType0.ItemsListFieldType create() {
+                return Js.uncheckedCast(JsPropertyMap.of());
+            }
+
+            @JsProperty
+            String getCode();
+
+            @JsProperty
+            GetPullDiagnosticResponse.ToObjectReturnType0.ItemsListFieldType.CodeDescriptionFieldType getCodeDescription();
+
+            @JsProperty
+            GetPullDiagnosticResponse.ToObjectReturnType0.ItemsListFieldType.GetDataUnionType getData();
+
+            @JsProperty
+            String getMessage();
+
+            @JsProperty
+            GetPullDiagnosticResponse.ToObjectReturnType0.ItemsListFieldType.RangeFieldType getRange();
+
+            @JsProperty
+            double getSeverity();
+
+            @JsProperty
+            String getSource();
+
+            @JsProperty
+            JsArray<Double> getTagsList();
+
+            @JsProperty
+            void setCode(String code);
+
+            @JsProperty
+            void setCodeDescription(
+                    GetPullDiagnosticResponse.ToObjectReturnType0.ItemsListFieldType.CodeDescriptionFieldType codeDescription);
+
+            @JsProperty
+            void setData(
+                    GetPullDiagnosticResponse.ToObjectReturnType0.ItemsListFieldType.GetDataUnionType data);
+
+            @JsOverlay
+            default void setData(String data) {
+                setData(
+                        Js.<GetPullDiagnosticResponse.ToObjectReturnType0.ItemsListFieldType.GetDataUnionType>uncheckedCast(
+                                data));
+            }
+
+            @JsOverlay
+            default void setData(Uint8Array data) {
+                setData(
+                        Js.<GetPullDiagnosticResponse.ToObjectReturnType0.ItemsListFieldType.GetDataUnionType>uncheckedCast(
+                                data));
+            }
+
+            @JsProperty
+            void setMessage(String message);
+
+            @JsProperty
+            void setRange(
+                    GetPullDiagnosticResponse.ToObjectReturnType0.ItemsListFieldType.RangeFieldType range);
+
+            @JsProperty
+            void setSeverity(double severity);
+
+            @JsProperty
+            void setSource(String source);
+
+            @JsProperty
+            void setTagsList(JsArray<Double> tagsList);
+
+            @JsOverlay
+            default void setTagsList(double[] tagsList) {
+                setTagsList(Js.<JsArray<Double>>uncheckedCast(tagsList));
+            }
+        }
+
+        @JsOverlay
+        static GetPullDiagnosticResponse.ToObjectReturnType0 create() {
+            return Js.uncheckedCast(JsPropertyMap.of());
+        }
+
+        @JsProperty
+        JsArray<GetPullDiagnosticResponse.ToObjectReturnType0.ItemsListFieldType> getItemsList();
+
+        @JsProperty
+        String getKind();
+
+        @JsProperty
+        String getResultId();
+
+        @JsOverlay
+        default void setItemsList(
+                GetPullDiagnosticResponse.ToObjectReturnType0.ItemsListFieldType[] itemsList) {
+            setItemsList(
+                    Js.<JsArray<GetPullDiagnosticResponse.ToObjectReturnType0.ItemsListFieldType>>uncheckedCast(
+                            itemsList));
+        }
+
+        @JsProperty
+        void setItemsList(
+                JsArray<GetPullDiagnosticResponse.ToObjectReturnType0.ItemsListFieldType> itemsList);
+
+        @JsProperty
+        void setKind(String kind);
+
+        @JsProperty
+        void setResultId(String resultId);
+    }
+
+    public static native GetPullDiagnosticResponse deserializeBinary(Uint8Array bytes);
+
+    public static native GetPullDiagnosticResponse deserializeBinaryFromReader(
+            GetPullDiagnosticResponse message, Object reader);
+
+    public static native void serializeBinaryToWriter(
+            GetPullDiagnosticResponse message, Object writer);
+
+    public static native GetPullDiagnosticResponse.ToObjectReturnType toObject(
+            boolean includeInstance, GetPullDiagnosticResponse msg);
+
+    public native Diagnostic addItems();
+
+    public native Diagnostic addItems(Diagnostic value, double index);
+
+    public native Diagnostic addItems(Diagnostic value);
+
+    public native void clearItemsList();
+
+    public native void clearResultId();
+
+    public native JsArray<Diagnostic> getItemsList();
+
+    public native String getKind();
+
+    public native String getResultId();
+
+    public native boolean hasResultId();
+
+    public native Uint8Array serializeBinary();
+
+    @JsOverlay
+    public final void setItemsList(Diagnostic[] value) {
+        setItemsList(Js.<JsArray<Diagnostic>>uncheckedCast(value));
+    }
+
+    public native void setItemsList(JsArray<Diagnostic> value);
+
+    public native void setKind(String value);
+
+    public native void setResultId(String value);
+
+    public native GetPullDiagnosticResponse.ToObjectReturnType0 toObject();
+
+    public native GetPullDiagnosticResponse.ToObjectReturnType0 toObject(boolean includeInstance);
+}
diff --git a/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/console_pb/GetSignatureHelpRequest.java b/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/console_pb/GetSignatureHelpRequest.java
new file mode 100644
index 00000000000..1e746519b48
--- /dev/null
+++ b/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/console_pb/GetSignatureHelpRequest.java
@@ -0,0 +1,499 @@
+/**
+ * Copyright (c) 2016-2022 Deephaven Data Labs and Patent Pending
+ */
+package io.deephaven.javascript.proto.dhinternal.io.deephaven.proto.console_pb;
+
+import elemental2.core.JsArray;
+import elemental2.core.Uint8Array;
+import jsinterop.annotations.JsOverlay;
+import jsinterop.annotations.JsPackage;
+import jsinterop.annotations.JsProperty;
+import jsinterop.annotations.JsType;
+import jsinterop.base.Js;
+import jsinterop.base.JsPropertyMap;
+
+@JsType(
+        isNative = true,
+        name = "dhinternal.io.deephaven.proto.console_pb.GetSignatureHelpRequest",
+        namespace = JsPackage.GLOBAL)
+public class GetSignatureHelpRequest {
+    @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+    public interface ToObjectReturnType {
+        @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+        public interface ContextFieldType {
+            @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+            public interface ActiveSignatureHelpFieldType {
+                @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+                public interface SignaturesListFieldType {
+                    @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+                    public interface DocumentationFieldType {
+                        @JsOverlay
+                        static GetSignatureHelpRequest.ToObjectReturnType.ContextFieldType.ActiveSignatureHelpFieldType.SignaturesListFieldType.DocumentationFieldType create() {
+                            return Js.uncheckedCast(JsPropertyMap.of());
+                        }
+
+                        @JsProperty
+                        String getKind();
+
+                        @JsProperty
+                        String getValue();
+
+                        @JsProperty
+                        void setKind(String kind);
+
+                        @JsProperty
+                        void setValue(String value);
+                    }
+
+                    @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+                    public interface ParametersListFieldType {
+                        @JsOverlay
+                        static GetSignatureHelpRequest.ToObjectReturnType.ContextFieldType.ActiveSignatureHelpFieldType.SignaturesListFieldType.ParametersListFieldType create() {
+                            return Js.uncheckedCast(JsPropertyMap.of());
+                        }
+
+                        @JsProperty
+                        Object getDocumentation();
+
+                        @JsProperty
+                        String getLabel();
+
+                        @JsProperty
+                        void setDocumentation(Object documentation);
+
+                        @JsProperty
+                        void setLabel(String label);
+                    }
+
+                    @JsOverlay
+                    static GetSignatureHelpRequest.ToObjectReturnType.ContextFieldType.ActiveSignatureHelpFieldType.SignaturesListFieldType create() {
+                        return Js.uncheckedCast(JsPropertyMap.of());
+                    }
+
+                    @JsProperty
+                    double getActiveParameter();
+
+                    @JsProperty
+                    GetSignatureHelpRequest.ToObjectReturnType.ContextFieldType.ActiveSignatureHelpFieldType.SignaturesListFieldType.DocumentationFieldType getDocumentation();
+
+                    @JsProperty
+                    String getLabel();
+
+                    @JsProperty
+                    JsArray<GetSignatureHelpRequest.ToObjectReturnType.ContextFieldType.ActiveSignatureHelpFieldType.SignaturesListFieldType.ParametersListFieldType> getParametersList();
+
+                    @JsProperty
+                    void setActiveParameter(double activeParameter);
+
+                    @JsProperty
+                    void setDocumentation(
+                            GetSignatureHelpRequest.ToObjectReturnType.ContextFieldType.ActiveSignatureHelpFieldType.SignaturesListFieldType.DocumentationFieldType documentation);
+
+                    @JsProperty
+                    void setLabel(String label);
+
+                    @JsProperty
+                    void setParametersList(
+                            JsArray<GetSignatureHelpRequest.ToObjectReturnType.ContextFieldType.ActiveSignatureHelpFieldType.SignaturesListFieldType.ParametersListFieldType> parametersList);
+
+                    @JsOverlay
+                    default void setParametersList(
+                            GetSignatureHelpRequest.ToObjectReturnType.ContextFieldType.ActiveSignatureHelpFieldType.SignaturesListFieldType.ParametersListFieldType[] parametersList) {
+                        setParametersList(
+                                Js.<JsArray<GetSignatureHelpRequest.ToObjectReturnType.ContextFieldType.ActiveSignatureHelpFieldType.SignaturesListFieldType.ParametersListFieldType>>uncheckedCast(
+                                        parametersList));
+                    }
+                }
+
+                @JsOverlay
+                static GetSignatureHelpRequest.ToObjectReturnType.ContextFieldType.ActiveSignatureHelpFieldType create() {
+                    return Js.uncheckedCast(JsPropertyMap.of());
+                }
+
+                @JsProperty
+                double getActiveParameter();
+
+                @JsProperty
+                double getActiveSignature();
+
+                @JsProperty
+                JsArray<GetSignatureHelpRequest.ToObjectReturnType.ContextFieldType.ActiveSignatureHelpFieldType.SignaturesListFieldType> getSignaturesList();
+
+                @JsProperty
+                void setActiveParameter(double activeParameter);
+
+                @JsProperty
+                void setActiveSignature(double activeSignature);
+
+                @JsProperty
+                void setSignaturesList(
+                        JsArray<GetSignatureHelpRequest.ToObjectReturnType.ContextFieldType.ActiveSignatureHelpFieldType.SignaturesListFieldType> signaturesList);
+
+                @JsOverlay
+                default void setSignaturesList(
+                        GetSignatureHelpRequest.ToObjectReturnType.ContextFieldType.ActiveSignatureHelpFieldType.SignaturesListFieldType[] signaturesList) {
+                    setSignaturesList(
+                            Js.<JsArray<GetSignatureHelpRequest.ToObjectReturnType.ContextFieldType.ActiveSignatureHelpFieldType.SignaturesListFieldType>>uncheckedCast(
+                                    signaturesList));
+                }
+            }
+
+            @JsOverlay
+            static GetSignatureHelpRequest.ToObjectReturnType.ContextFieldType create() {
+                return Js.uncheckedCast(JsPropertyMap.of());
+            }
+
+            @JsProperty
+            GetSignatureHelpRequest.ToObjectReturnType.ContextFieldType.ActiveSignatureHelpFieldType getActiveSignatureHelp();
+
+            @JsProperty
+            String getTriggerCharacter();
+
+            @JsProperty
+            double getTriggerKind();
+
+            @JsProperty
+            boolean isIsRetrigger();
+
+            @JsProperty
+            void setActiveSignatureHelp(
+                    GetSignatureHelpRequest.ToObjectReturnType.ContextFieldType.ActiveSignatureHelpFieldType activeSignatureHelp);
+
+            @JsProperty
+            void setIsRetrigger(boolean isRetrigger);
+
+            @JsProperty
+            void setTriggerCharacter(String triggerCharacter);
+
+            @JsProperty
+            void setTriggerKind(double triggerKind);
+        }
+
+        @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+        public interface PositionFieldType {
+            @JsOverlay
+            static GetSignatureHelpRequest.ToObjectReturnType.PositionFieldType create() {
+                return Js.uncheckedCast(JsPropertyMap.of());
+            }
+
+            @JsProperty
+            double getCharacter();
+
+            @JsProperty
+            double getLine();
+
+            @JsProperty
+            void setCharacter(double character);
+
+            @JsProperty
+            void setLine(double line);
+        }
+
+        @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+        public interface TextDocumentFieldType {
+            @JsOverlay
+            static GetSignatureHelpRequest.ToObjectReturnType.TextDocumentFieldType create() {
+                return Js.uncheckedCast(JsPropertyMap.of());
+            }
+
+            @JsProperty
+            String getUri();
+
+            @JsProperty
+            double getVersion();
+
+            @JsProperty
+            void setUri(String uri);
+
+            @JsProperty
+            void setVersion(double version);
+        }
+
+        @JsOverlay
+        static GetSignatureHelpRequest.ToObjectReturnType create() {
+            return Js.uncheckedCast(JsPropertyMap.of());
+        }
+
+        @JsProperty
+        GetSignatureHelpRequest.ToObjectReturnType.ContextFieldType getContext();
+
+        @JsProperty
+        GetSignatureHelpRequest.ToObjectReturnType.PositionFieldType getPosition();
+
+        @JsProperty
+        GetSignatureHelpRequest.ToObjectReturnType.TextDocumentFieldType getTextDocument();
+
+        @JsProperty
+        void setContext(GetSignatureHelpRequest.ToObjectReturnType.ContextFieldType context);
+
+        @JsProperty
+        void setPosition(GetSignatureHelpRequest.ToObjectReturnType.PositionFieldType position);
+
+        @JsProperty
+        void setTextDocument(
+                GetSignatureHelpRequest.ToObjectReturnType.TextDocumentFieldType textDocument);
+    }
+
+    @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+    public interface ToObjectReturnType0 {
+        @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+        public interface ContextFieldType {
+            @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+            public interface ActiveSignatureHelpFieldType {
+                @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+                public interface SignaturesListFieldType {
+                    @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+                    public interface DocumentationFieldType {
+                        @JsOverlay
+                        static GetSignatureHelpRequest.ToObjectReturnType0.ContextFieldType.ActiveSignatureHelpFieldType.SignaturesListFieldType.DocumentationFieldType create() {
+                            return Js.uncheckedCast(JsPropertyMap.of());
+                        }
+
+                        @JsProperty
+                        String getKind();
+
+                        @JsProperty
+                        String getValue();
+
+                        @JsProperty
+                        void setKind(String kind);
+
+                        @JsProperty
+                        void setValue(String value);
+                    }
+
+                    @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+                    public interface ParametersListFieldType {
+                        @JsOverlay
+                        static GetSignatureHelpRequest.ToObjectReturnType0.ContextFieldType.ActiveSignatureHelpFieldType.SignaturesListFieldType.ParametersListFieldType create() {
+                            return Js.uncheckedCast(JsPropertyMap.of());
+                        }
+
+                        @JsProperty
+                        Object getDocumentation();
+
+                        @JsProperty
+                        String getLabel();
+
+                        @JsProperty
+                        void setDocumentation(Object documentation);
+
+                        @JsProperty
+                        void setLabel(String label);
+                    }
+
+                    @JsOverlay
+                    static GetSignatureHelpRequest.ToObjectReturnType0.ContextFieldType.ActiveSignatureHelpFieldType.SignaturesListFieldType create() {
+                        return Js.uncheckedCast(JsPropertyMap.of());
+                    }
+
+                    @JsProperty
+                    double getActiveParameter();
+
+                    @JsProperty
+                    GetSignatureHelpRequest.ToObjectReturnType0.ContextFieldType.ActiveSignatureHelpFieldType.SignaturesListFieldType.DocumentationFieldType getDocumentation();
+
+                    @JsProperty
+                    String getLabel();
+
+                    @JsProperty
+                    JsArray<GetSignatureHelpRequest.ToObjectReturnType0.ContextFieldType.ActiveSignatureHelpFieldType.SignaturesListFieldType.ParametersListFieldType> getParametersList();
+
+                    @JsProperty
+                    void setActiveParameter(double activeParameter);
+
+                    @JsProperty
+                    void setDocumentation(
+                            GetSignatureHelpRequest.ToObjectReturnType0.ContextFieldType.ActiveSignatureHelpFieldType.SignaturesListFieldType.DocumentationFieldType documentation);
+
+                    @JsProperty
+                    void setLabel(String label);
+
+                    @JsProperty
+                    void setParametersList(
+                            JsArray<GetSignatureHelpRequest.ToObjectReturnType0.ContextFieldType.ActiveSignatureHelpFieldType.SignaturesListFieldType.ParametersListFieldType> parametersList);
+
+                    @JsOverlay
+                    default void setParametersList(
+                            GetSignatureHelpRequest.ToObjectReturnType0.ContextFieldType.ActiveSignatureHelpFieldType.SignaturesListFieldType.ParametersListFieldType[] parametersList) {
+                        setParametersList(
+                                Js.<JsArray<GetSignatureHelpRequest.ToObjectReturnType0.ContextFieldType.ActiveSignatureHelpFieldType.SignaturesListFieldType.ParametersListFieldType>>uncheckedCast(
+                                        parametersList));
+                    }
+                }
+
+                @JsOverlay
+                static GetSignatureHelpRequest.ToObjectReturnType0.ContextFieldType.ActiveSignatureHelpFieldType create() {
+                    return Js.uncheckedCast(JsPropertyMap.of());
+                }
+
+                @JsProperty
+                double getActiveParameter();
+
+                @JsProperty
+                double getActiveSignature();
+
+                @JsProperty
+                JsArray<GetSignatureHelpRequest.ToObjectReturnType0.ContextFieldType.ActiveSignatureHelpFieldType.SignaturesListFieldType> getSignaturesList();
+
+                @JsProperty
+                void setActiveParameter(double activeParameter);
+
+                @JsProperty
+                void setActiveSignature(double activeSignature);
+
+                @JsProperty
+                void setSignaturesList(
+                        JsArray<GetSignatureHelpRequest.ToObjectReturnType0.ContextFieldType.ActiveSignatureHelpFieldType.SignaturesListFieldType> signaturesList);
+
+                @JsOverlay
+                default void setSignaturesList(
+                        GetSignatureHelpRequest.ToObjectReturnType0.ContextFieldType.ActiveSignatureHelpFieldType.SignaturesListFieldType[] signaturesList) {
+                    setSignaturesList(
+                            Js.<JsArray<GetSignatureHelpRequest.ToObjectReturnType0.ContextFieldType.ActiveSignatureHelpFieldType.SignaturesListFieldType>>uncheckedCast(
+                                    signaturesList));
+                }
+            }
+
+            @JsOverlay
+            static GetSignatureHelpRequest.ToObjectReturnType0.ContextFieldType create() {
+                return Js.uncheckedCast(JsPropertyMap.of());
+            }
+
+            @JsProperty
+            GetSignatureHelpRequest.ToObjectReturnType0.ContextFieldType.ActiveSignatureHelpFieldType getActiveSignatureHelp();
+
+            @JsProperty
+            String getTriggerCharacter();
+
+            @JsProperty
+            double getTriggerKind();
+
+            @JsProperty
+            boolean isIsRetrigger();
+
+            @JsProperty
+            void setActiveSignatureHelp(
+                    GetSignatureHelpRequest.ToObjectReturnType0.ContextFieldType.ActiveSignatureHelpFieldType activeSignatureHelp);
+
+            @JsProperty
+            void setIsRetrigger(boolean isRetrigger);
+
+            @JsProperty
+            void setTriggerCharacter(String triggerCharacter);
+
+            @JsProperty
+            void setTriggerKind(double triggerKind);
+        }
+
+        @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+        public interface PositionFieldType {
+            @JsOverlay
+            static GetSignatureHelpRequest.ToObjectReturnType0.PositionFieldType create() {
+                return Js.uncheckedCast(JsPropertyMap.of());
+            }
+
+            @JsProperty
+            double getCharacter();
+
+            @JsProperty
+            double getLine();
+
+            @JsProperty
+            void setCharacter(double character);
+
+            @JsProperty
+            void setLine(double line);
+        }
+
+        @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+        public interface TextDocumentFieldType {
+            @JsOverlay
+            static GetSignatureHelpRequest.ToObjectReturnType0.TextDocumentFieldType create() {
+                return Js.uncheckedCast(JsPropertyMap.of());
+            }
+
+            @JsProperty
+            String getUri();
+
+            @JsProperty
+            double getVersion();
+
+            @JsProperty
+            void setUri(String uri);
+
+            @JsProperty
+            void setVersion(double version);
+        }
+
+        @JsOverlay
+        static GetSignatureHelpRequest.ToObjectReturnType0 create() {
+            return Js.uncheckedCast(JsPropertyMap.of());
+        }
+
+        @JsProperty
+        GetSignatureHelpRequest.ToObjectReturnType0.ContextFieldType getContext();
+
+        @JsProperty
+        GetSignatureHelpRequest.ToObjectReturnType0.PositionFieldType getPosition();
+
+        @JsProperty
+        GetSignatureHelpRequest.ToObjectReturnType0.TextDocumentFieldType getTextDocument();
+
+        @JsProperty
+        void setContext(GetSignatureHelpRequest.ToObjectReturnType0.ContextFieldType context);
+
+        @JsProperty
+        void setPosition(GetSignatureHelpRequest.ToObjectReturnType0.PositionFieldType position);
+
+        @JsProperty
+        void setTextDocument(
+                GetSignatureHelpRequest.ToObjectReturnType0.TextDocumentFieldType textDocument);
+    }
+
+    public static native GetSignatureHelpRequest deserializeBinary(Uint8Array bytes);
+
+    public static native GetSignatureHelpRequest deserializeBinaryFromReader(
+            GetSignatureHelpRequest message, Object reader);
+
+    public static native void serializeBinaryToWriter(GetSignatureHelpRequest message, Object writer);
+
+    public static native GetSignatureHelpRequest.ToObjectReturnType toObject(
+            boolean includeInstance, GetSignatureHelpRequest msg);
+
+    public native void clearContext();
+
+    public native void clearPosition();
+
+    public native void clearTextDocument();
+
+    public native SignatureHelpContext getContext();
+
+    public native Position getPosition();
+
+    public native VersionedTextDocumentIdentifier getTextDocument();
+
+    public native boolean hasContext();
+
+    public native boolean hasPosition();
+
+    public native boolean hasTextDocument();
+
+    public native Uint8Array serializeBinary();
+
+    public native void setContext();
+
+    public native void setContext(SignatureHelpContext value);
+
+    public native void setPosition();
+
+    public native void setPosition(Position value);
+
+    public native void setTextDocument();
+
+    public native void setTextDocument(VersionedTextDocumentIdentifier value);
+
+    public native GetSignatureHelpRequest.ToObjectReturnType0 toObject();
+
+    public native GetSignatureHelpRequest.ToObjectReturnType0 toObject(boolean includeInstance);
+}
diff --git a/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/console_pb/GetSignatureHelpResponse.java b/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/console_pb/GetSignatureHelpResponse.java
new file mode 100644
index 00000000000..d9d1a236cbc
--- /dev/null
+++ b/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/console_pb/GetSignatureHelpResponse.java
@@ -0,0 +1,303 @@
+/**
+ * Copyright (c) 2016-2022 Deephaven Data Labs and Patent Pending
+ */
+package io.deephaven.javascript.proto.dhinternal.io.deephaven.proto.console_pb;
+
+import elemental2.core.JsArray;
+import elemental2.core.Uint8Array;
+import jsinterop.annotations.JsOverlay;
+import jsinterop.annotations.JsPackage;
+import jsinterop.annotations.JsProperty;
+import jsinterop.annotations.JsType;
+import jsinterop.base.Js;
+import jsinterop.base.JsPropertyMap;
+
+@JsType(
+        isNative = true,
+        name = "dhinternal.io.deephaven.proto.console_pb.GetSignatureHelpResponse",
+        namespace = JsPackage.GLOBAL)
+public class GetSignatureHelpResponse {
+    @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+    public interface ToObjectReturnType {
+        @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+        public interface SignaturesListFieldType {
+            @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+            public interface DocumentationFieldType {
+                @JsOverlay
+                static GetSignatureHelpResponse.ToObjectReturnType.SignaturesListFieldType.DocumentationFieldType create() {
+                    return Js.uncheckedCast(JsPropertyMap.of());
+                }
+
+                @JsProperty
+                String getKind();
+
+                @JsProperty
+                String getValue();
+
+                @JsProperty
+                void setKind(String kind);
+
+                @JsProperty
+                void setValue(String value);
+            }
+
+            @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+            public interface ParametersListFieldType {
+                @JsOverlay
+                static GetSignatureHelpResponse.ToObjectReturnType.SignaturesListFieldType.ParametersListFieldType create() {
+                    return Js.uncheckedCast(JsPropertyMap.of());
+                }
+
+                @JsProperty
+                Object getDocumentation();
+
+                @JsProperty
+                String getLabel();
+
+                @JsProperty
+                void setDocumentation(Object documentation);
+
+                @JsProperty
+                void setLabel(String label);
+            }
+
+            @JsOverlay
+            static GetSignatureHelpResponse.ToObjectReturnType.SignaturesListFieldType create() {
+                return Js.uncheckedCast(JsPropertyMap.of());
+            }
+
+            @JsProperty
+            double getActiveParameter();
+
+            @JsProperty
+            GetSignatureHelpResponse.ToObjectReturnType.SignaturesListFieldType.DocumentationFieldType getDocumentation();
+
+            @JsProperty
+            String getLabel();
+
+            @JsProperty
+            JsArray<GetSignatureHelpResponse.ToObjectReturnType.SignaturesListFieldType.ParametersListFieldType> getParametersList();
+
+            @JsProperty
+            void setActiveParameter(double activeParameter);
+
+            @JsProperty
+            void setDocumentation(
+                    GetSignatureHelpResponse.ToObjectReturnType.SignaturesListFieldType.DocumentationFieldType documentation);
+
+            @JsProperty
+            void setLabel(String label);
+
+            @JsProperty
+            void setParametersList(
+                    JsArray<GetSignatureHelpResponse.ToObjectReturnType.SignaturesListFieldType.ParametersListFieldType> parametersList);
+
+            @JsOverlay
+            default void setParametersList(
+                    GetSignatureHelpResponse.ToObjectReturnType.SignaturesListFieldType.ParametersListFieldType[] parametersList) {
+                setParametersList(
+                        Js.<JsArray<GetSignatureHelpResponse.ToObjectReturnType.SignaturesListFieldType.ParametersListFieldType>>uncheckedCast(
+                                parametersList));
+            }
+        }
+
+        @JsOverlay
+        static GetSignatureHelpResponse.ToObjectReturnType create() {
+            return Js.uncheckedCast(JsPropertyMap.of());
+        }
+
+        @JsProperty
+        double getActiveParameter();
+
+        @JsProperty
+        double getActiveSignature();
+
+        @JsProperty
+        JsArray<GetSignatureHelpResponse.ToObjectReturnType.SignaturesListFieldType> getSignaturesList();
+
+        @JsProperty
+        void setActiveParameter(double activeParameter);
+
+        @JsProperty
+        void setActiveSignature(double activeSignature);
+
+        @JsProperty
+        void setSignaturesList(
+                JsArray<GetSignatureHelpResponse.ToObjectReturnType.SignaturesListFieldType> signaturesList);
+
+        @JsOverlay
+        default void setSignaturesList(
+                GetSignatureHelpResponse.ToObjectReturnType.SignaturesListFieldType[] signaturesList) {
+            setSignaturesList(
+                    Js.<JsArray<GetSignatureHelpResponse.ToObjectReturnType.SignaturesListFieldType>>uncheckedCast(
+                            signaturesList));
+        }
+    }
+
+    @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+    public interface ToObjectReturnType0 {
+        @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+        public interface SignaturesListFieldType {
+            @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+            public interface DocumentationFieldType {
+                @JsOverlay
+                static GetSignatureHelpResponse.ToObjectReturnType0.SignaturesListFieldType.DocumentationFieldType create() {
+                    return Js.uncheckedCast(JsPropertyMap.of());
+                }
+
+                @JsProperty
+                String getKind();
+
+                @JsProperty
+                String getValue();
+
+                @JsProperty
+                void setKind(String kind);
+
+                @JsProperty
+                void setValue(String value);
+            }
+
+            @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+            public interface ParametersListFieldType {
+                @JsOverlay
+                static GetSignatureHelpResponse.ToObjectReturnType0.SignaturesListFieldType.ParametersListFieldType create() {
+                    return Js.uncheckedCast(JsPropertyMap.of());
+                }
+
+                @JsProperty
+                Object getDocumentation();
+
+                @JsProperty
+                String getLabel();
+
+                @JsProperty
+                void setDocumentation(Object documentation);
+
+                @JsProperty
+                void setLabel(String label);
+            }
+
+            @JsOverlay
+            static GetSignatureHelpResponse.ToObjectReturnType0.SignaturesListFieldType create() {
+                return Js.uncheckedCast(JsPropertyMap.of());
+            }
+
+            @JsProperty
+            double getActiveParameter();
+
+            @JsProperty
+            GetSignatureHelpResponse.ToObjectReturnType0.SignaturesListFieldType.DocumentationFieldType getDocumentation();
+
+            @JsProperty
+            String getLabel();
+
+            @JsProperty
+            JsArray<GetSignatureHelpResponse.ToObjectReturnType0.SignaturesListFieldType.ParametersListFieldType> getParametersList();
+
+            @JsProperty
+            void setActiveParameter(double activeParameter);
+
+            @JsProperty
+            void setDocumentation(
+                    GetSignatureHelpResponse.ToObjectReturnType0.SignaturesListFieldType.DocumentationFieldType documentation);
+
+            @JsProperty
+            void setLabel(String label);
+
+            @JsProperty
+            void setParametersList(
+                    JsArray<GetSignatureHelpResponse.ToObjectReturnType0.SignaturesListFieldType.ParametersListFieldType> parametersList);
+
+            @JsOverlay
+            default void setParametersList(
+                    GetSignatureHelpResponse.ToObjectReturnType0.SignaturesListFieldType.ParametersListFieldType[] parametersList) {
+                setParametersList(
+                        Js.<JsArray<GetSignatureHelpResponse.ToObjectReturnType0.SignaturesListFieldType.ParametersListFieldType>>uncheckedCast(
+                                parametersList));
+            }
+        }
+
+        @JsOverlay
+        static GetSignatureHelpResponse.ToObjectReturnType0 create() {
+            return Js.uncheckedCast(JsPropertyMap.of());
+        }
+
+        @JsProperty
+        double getActiveParameter();
+
+        @JsProperty
+        double getActiveSignature();
+
+        @JsProperty
+        JsArray<GetSignatureHelpResponse.ToObjectReturnType0.SignaturesListFieldType> getSignaturesList();
+
+        @JsProperty
+        void setActiveParameter(double activeParameter);
+
+        @JsProperty
+        void setActiveSignature(double activeSignature);
+
+        @JsProperty
+        void setSignaturesList(
+                JsArray<GetSignatureHelpResponse.ToObjectReturnType0.SignaturesListFieldType> signaturesList);
+
+        @JsOverlay
+        default void setSignaturesList(
+                GetSignatureHelpResponse.ToObjectReturnType0.SignaturesListFieldType[] signaturesList) {
+            setSignaturesList(
+                    Js.<JsArray<GetSignatureHelpResponse.ToObjectReturnType0.SignaturesListFieldType>>uncheckedCast(
+                            signaturesList));
+        }
+    }
+
+    public static native GetSignatureHelpResponse deserializeBinary(Uint8Array bytes);
+
+    public static native GetSignatureHelpResponse deserializeBinaryFromReader(
+            GetSignatureHelpResponse message, Object reader);
+
+    public static native void serializeBinaryToWriter(
+            GetSignatureHelpResponse message, Object writer);
+
+    public static native GetSignatureHelpResponse.ToObjectReturnType toObject(
+            boolean includeInstance, GetSignatureHelpResponse msg);
+
+    public native SignatureInformation addSignatures();
+
+    public native SignatureInformation addSignatures(SignatureInformation value, double index);
+
+    public native SignatureInformation addSignatures(SignatureInformation value);
+
+    public native void clearActiveParameter();
+
+    public native void clearActiveSignature();
+
+    public native void clearSignaturesList();
+
+    public native int getActiveParameter();
+
+    public native int getActiveSignature();
+
+    public native JsArray<SignatureInformation> getSignaturesList();
+
+    public native boolean hasActiveParameter();
+
+    public native boolean hasActiveSignature();
+
+    public native Uint8Array serializeBinary();
+
+    public native void setActiveParameter(int value);
+
+    public native void setActiveSignature(int value);
+
+    public native void setSignaturesList(JsArray<SignatureInformation> value);
+
+    @JsOverlay
+    public final void setSignaturesList(SignatureInformation[] value) {
+        setSignaturesList(Js.<JsArray<SignatureInformation>>uncheckedCast(value));
+    }
+
+    public native GetSignatureHelpResponse.ToObjectReturnType0 toObject();
+
+    public native GetSignatureHelpResponse.ToObjectReturnType0 toObject(boolean includeInstance);
+}
diff --git a/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/console_pb/MarkupContent.java b/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/console_pb/MarkupContent.java
new file mode 100644
index 00000000000..e469f920c80
--- /dev/null
+++ b/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/console_pb/MarkupContent.java
@@ -0,0 +1,82 @@
+/**
+ * Copyright (c) 2016-2022 Deephaven Data Labs and Patent Pending
+ */
+package io.deephaven.javascript.proto.dhinternal.io.deephaven.proto.console_pb;
+
+import elemental2.core.Uint8Array;
+import jsinterop.annotations.JsOverlay;
+import jsinterop.annotations.JsPackage;
+import jsinterop.annotations.JsProperty;
+import jsinterop.annotations.JsType;
+import jsinterop.base.Js;
+import jsinterop.base.JsPropertyMap;
+
+@JsType(
+        isNative = true,
+        name = "dhinternal.io.deephaven.proto.console_pb.MarkupContent",
+        namespace = JsPackage.GLOBAL)
+public class MarkupContent {
+    @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+    public interface ToObjectReturnType {
+        @JsOverlay
+        static MarkupContent.ToObjectReturnType create() {
+            return Js.uncheckedCast(JsPropertyMap.of());
+        }
+
+        @JsProperty
+        String getKind();
+
+        @JsProperty
+        String getValue();
+
+        @JsProperty
+        void setKind(String kind);
+
+        @JsProperty
+        void setValue(String value);
+    }
+
+    @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+    public interface ToObjectReturnType0 {
+        @JsOverlay
+        static MarkupContent.ToObjectReturnType0 create() {
+            return Js.uncheckedCast(JsPropertyMap.of());
+        }
+
+        @JsProperty
+        String getKind();
+
+        @JsProperty
+        String getValue();
+
+        @JsProperty
+        void setKind(String kind);
+
+        @JsProperty
+        void setValue(String value);
+    }
+
+    public static native MarkupContent deserializeBinary(Uint8Array bytes);
+
+    public static native MarkupContent deserializeBinaryFromReader(
+            MarkupContent message, Object reader);
+
+    public static native void serializeBinaryToWriter(MarkupContent message, Object writer);
+
+    public static native MarkupContent.ToObjectReturnType toObject(
+            boolean includeInstance, MarkupContent msg);
+
+    public native String getKind();
+
+    public native String getValue();
+
+    public native Uint8Array serializeBinary();
+
+    public native void setKind(String value);
+
+    public native void setValue(String value);
+
+    public native MarkupContent.ToObjectReturnType0 toObject();
+
+    public native MarkupContent.ToObjectReturnType0 toObject(boolean includeInstance);
+}
diff --git a/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/console_pb/ParameterInformation.java b/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/console_pb/ParameterInformation.java
new file mode 100644
index 00000000000..1070ecdf1b4
--- /dev/null
+++ b/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/console_pb/ParameterInformation.java
@@ -0,0 +1,130 @@
+/**
+ * Copyright (c) 2016-2022 Deephaven Data Labs and Patent Pending
+ */
+package io.deephaven.javascript.proto.dhinternal.io.deephaven.proto.console_pb;
+
+import elemental2.core.Uint8Array;
+import jsinterop.annotations.JsOverlay;
+import jsinterop.annotations.JsPackage;
+import jsinterop.annotations.JsProperty;
+import jsinterop.annotations.JsType;
+import jsinterop.base.Js;
+import jsinterop.base.JsPropertyMap;
+
+@JsType(
+        isNative = true,
+        name = "dhinternal.io.deephaven.proto.console_pb.ParameterInformation",
+        namespace = JsPackage.GLOBAL)
+public class ParameterInformation {
+    @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+    public interface ToObjectReturnType {
+        @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+        public interface DocumentationFieldType {
+            @JsOverlay
+            static ParameterInformation.ToObjectReturnType.DocumentationFieldType create() {
+                return Js.uncheckedCast(JsPropertyMap.of());
+            }
+
+            @JsProperty
+            String getKind();
+
+            @JsProperty
+            String getValue();
+
+            @JsProperty
+            void setKind(String kind);
+
+            @JsProperty
+            void setValue(String value);
+        }
+
+        @JsOverlay
+        static ParameterInformation.ToObjectReturnType create() {
+            return Js.uncheckedCast(JsPropertyMap.of());
+        }
+
+        @JsProperty
+        ParameterInformation.ToObjectReturnType.DocumentationFieldType getDocumentation();
+
+        @JsProperty
+        String getLabel();
+
+        @JsProperty
+        void setDocumentation(
+                ParameterInformation.ToObjectReturnType.DocumentationFieldType documentation);
+
+        @JsProperty
+        void setLabel(String label);
+    }
+
+    @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+    public interface ToObjectReturnType0 {
+        @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+        public interface DocumentationFieldType {
+            @JsOverlay
+            static ParameterInformation.ToObjectReturnType0.DocumentationFieldType create() {
+                return Js.uncheckedCast(JsPropertyMap.of());
+            }
+
+            @JsProperty
+            String getKind();
+
+            @JsProperty
+            String getValue();
+
+            @JsProperty
+            void setKind(String kind);
+
+            @JsProperty
+            void setValue(String value);
+        }
+
+        @JsOverlay
+        static ParameterInformation.ToObjectReturnType0 create() {
+            return Js.uncheckedCast(JsPropertyMap.of());
+        }
+
+        @JsProperty
+        ParameterInformation.ToObjectReturnType0.DocumentationFieldType getDocumentation();
+
+        @JsProperty
+        String getLabel();
+
+        @JsProperty
+        void setDocumentation(
+                ParameterInformation.ToObjectReturnType0.DocumentationFieldType documentation);
+
+        @JsProperty
+        void setLabel(String label);
+    }
+
+    public static native ParameterInformation deserializeBinary(Uint8Array bytes);
+
+    public static native ParameterInformation deserializeBinaryFromReader(
+            ParameterInformation message, Object reader);
+
+    public static native void serializeBinaryToWriter(ParameterInformation message, Object writer);
+
+    public static native ParameterInformation.ToObjectReturnType toObject(
+            boolean includeInstance, ParameterInformation msg);
+
+    public native void clearDocumentation();
+
+    public native MarkupContent getDocumentation();
+
+    public native String getLabel();
+
+    public native boolean hasDocumentation();
+
+    public native Uint8Array serializeBinary();
+
+    public native void setDocumentation();
+
+    public native void setDocumentation(MarkupContent value);
+
+    public native void setLabel(String value);
+
+    public native ParameterInformation.ToObjectReturnType0 toObject();
+
+    public native ParameterInformation.ToObjectReturnType0 toObject(boolean includeInstance);
+}
diff --git a/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/console_pb/SignatureHelpContext.java b/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/console_pb/SignatureHelpContext.java
new file mode 100644
index 00000000000..6ec0224842a
--- /dev/null
+++ b/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/console_pb/SignatureHelpContext.java
@@ -0,0 +1,361 @@
+/**
+ * Copyright (c) 2016-2022 Deephaven Data Labs and Patent Pending
+ */
+package io.deephaven.javascript.proto.dhinternal.io.deephaven.proto.console_pb;
+
+import elemental2.core.JsArray;
+import elemental2.core.Uint8Array;
+import jsinterop.annotations.JsOverlay;
+import jsinterop.annotations.JsPackage;
+import jsinterop.annotations.JsProperty;
+import jsinterop.annotations.JsType;
+import jsinterop.base.Js;
+import jsinterop.base.JsPropertyMap;
+
+@JsType(
+        isNative = true,
+        name = "dhinternal.io.deephaven.proto.console_pb.SignatureHelpContext",
+        namespace = JsPackage.GLOBAL)
+public class SignatureHelpContext {
+    @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+    public interface ToObjectReturnType {
+        @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+        public interface ActiveSignatureHelpFieldType {
+            @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+            public interface SignaturesListFieldType {
+                @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+                public interface DocumentationFieldType {
+                    @JsOverlay
+                    static SignatureHelpContext.ToObjectReturnType.ActiveSignatureHelpFieldType.SignaturesListFieldType.DocumentationFieldType create() {
+                        return Js.uncheckedCast(JsPropertyMap.of());
+                    }
+
+                    @JsProperty
+                    String getKind();
+
+                    @JsProperty
+                    String getValue();
+
+                    @JsProperty
+                    void setKind(String kind);
+
+                    @JsProperty
+                    void setValue(String value);
+                }
+
+                @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+                public interface ParametersListFieldType {
+                    @JsOverlay
+                    static SignatureHelpContext.ToObjectReturnType.ActiveSignatureHelpFieldType.SignaturesListFieldType.ParametersListFieldType create() {
+                        return Js.uncheckedCast(JsPropertyMap.of());
+                    }
+
+                    @JsProperty
+                    Object getDocumentation();
+
+                    @JsProperty
+                    String getLabel();
+
+                    @JsProperty
+                    void setDocumentation(Object documentation);
+
+                    @JsProperty
+                    void setLabel(String label);
+                }
+
+                @JsOverlay
+                static SignatureHelpContext.ToObjectReturnType.ActiveSignatureHelpFieldType.SignaturesListFieldType create() {
+                    return Js.uncheckedCast(JsPropertyMap.of());
+                }
+
+                @JsProperty
+                double getActiveParameter();
+
+                @JsProperty
+                SignatureHelpContext.ToObjectReturnType.ActiveSignatureHelpFieldType.SignaturesListFieldType.DocumentationFieldType getDocumentation();
+
+                @JsProperty
+                String getLabel();
+
+                @JsProperty
+                JsArray<SignatureHelpContext.ToObjectReturnType.ActiveSignatureHelpFieldType.SignaturesListFieldType.ParametersListFieldType> getParametersList();
+
+                @JsProperty
+                void setActiveParameter(double activeParameter);
+
+                @JsProperty
+                void setDocumentation(
+                        SignatureHelpContext.ToObjectReturnType.ActiveSignatureHelpFieldType.SignaturesListFieldType.DocumentationFieldType documentation);
+
+                @JsProperty
+                void setLabel(String label);
+
+                @JsProperty
+                void setParametersList(
+                        JsArray<SignatureHelpContext.ToObjectReturnType.ActiveSignatureHelpFieldType.SignaturesListFieldType.ParametersListFieldType> parametersList);
+
+                @JsOverlay
+                default void setParametersList(
+                        SignatureHelpContext.ToObjectReturnType.ActiveSignatureHelpFieldType.SignaturesListFieldType.ParametersListFieldType[] parametersList) {
+                    setParametersList(
+                            Js.<JsArray<SignatureHelpContext.ToObjectReturnType.ActiveSignatureHelpFieldType.SignaturesListFieldType.ParametersListFieldType>>uncheckedCast(
+                                    parametersList));
+                }
+            }
+
+            @JsOverlay
+            static SignatureHelpContext.ToObjectReturnType.ActiveSignatureHelpFieldType create() {
+                return Js.uncheckedCast(JsPropertyMap.of());
+            }
+
+            @JsProperty
+            double getActiveParameter();
+
+            @JsProperty
+            double getActiveSignature();
+
+            @JsProperty
+            JsArray<SignatureHelpContext.ToObjectReturnType.ActiveSignatureHelpFieldType.SignaturesListFieldType> getSignaturesList();
+
+            @JsProperty
+            void setActiveParameter(double activeParameter);
+
+            @JsProperty
+            void setActiveSignature(double activeSignature);
+
+            @JsProperty
+            void setSignaturesList(
+                    JsArray<SignatureHelpContext.ToObjectReturnType.ActiveSignatureHelpFieldType.SignaturesListFieldType> signaturesList);
+
+            @JsOverlay
+            default void setSignaturesList(
+                    SignatureHelpContext.ToObjectReturnType.ActiveSignatureHelpFieldType.SignaturesListFieldType[] signaturesList) {
+                setSignaturesList(
+                        Js.<JsArray<SignatureHelpContext.ToObjectReturnType.ActiveSignatureHelpFieldType.SignaturesListFieldType>>uncheckedCast(
+                                signaturesList));
+            }
+        }
+
+        @JsOverlay
+        static SignatureHelpContext.ToObjectReturnType create() {
+            return Js.uncheckedCast(JsPropertyMap.of());
+        }
+
+        @JsProperty
+        SignatureHelpContext.ToObjectReturnType.ActiveSignatureHelpFieldType getActiveSignatureHelp();
+
+        @JsProperty
+        String getTriggerCharacter();
+
+        @JsProperty
+        double getTriggerKind();
+
+        @JsProperty
+        boolean isIsRetrigger();
+
+        @JsProperty
+        void setActiveSignatureHelp(
+                SignatureHelpContext.ToObjectReturnType.ActiveSignatureHelpFieldType activeSignatureHelp);
+
+        @JsProperty
+        void setIsRetrigger(boolean isRetrigger);
+
+        @JsProperty
+        void setTriggerCharacter(String triggerCharacter);
+
+        @JsProperty
+        void setTriggerKind(double triggerKind);
+    }
+
+    @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+    public interface ToObjectReturnType0 {
+        @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+        public interface ActiveSignatureHelpFieldType {
+            @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+            public interface SignaturesListFieldType {
+                @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+                public interface DocumentationFieldType {
+                    @JsOverlay
+                    static SignatureHelpContext.ToObjectReturnType0.ActiveSignatureHelpFieldType.SignaturesListFieldType.DocumentationFieldType create() {
+                        return Js.uncheckedCast(JsPropertyMap.of());
+                    }
+
+                    @JsProperty
+                    String getKind();
+
+                    @JsProperty
+                    String getValue();
+
+                    @JsProperty
+                    void setKind(String kind);
+
+                    @JsProperty
+                    void setValue(String value);
+                }
+
+                @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+                public interface ParametersListFieldType {
+                    @JsOverlay
+                    static SignatureHelpContext.ToObjectReturnType0.ActiveSignatureHelpFieldType.SignaturesListFieldType.ParametersListFieldType create() {
+                        return Js.uncheckedCast(JsPropertyMap.of());
+                    }
+
+                    @JsProperty
+                    Object getDocumentation();
+
+                    @JsProperty
+                    String getLabel();
+
+                    @JsProperty
+                    void setDocumentation(Object documentation);
+
+                    @JsProperty
+                    void setLabel(String label);
+                }
+
+                @JsOverlay
+                static SignatureHelpContext.ToObjectReturnType0.ActiveSignatureHelpFieldType.SignaturesListFieldType create() {
+                    return Js.uncheckedCast(JsPropertyMap.of());
+                }
+
+                @JsProperty
+                double getActiveParameter();
+
+                @JsProperty
+                SignatureHelpContext.ToObjectReturnType0.ActiveSignatureHelpFieldType.SignaturesListFieldType.DocumentationFieldType getDocumentation();
+
+                @JsProperty
+                String getLabel();
+
+                @JsProperty
+                JsArray<SignatureHelpContext.ToObjectReturnType0.ActiveSignatureHelpFieldType.SignaturesListFieldType.ParametersListFieldType> getParametersList();
+
+                @JsProperty
+                void setActiveParameter(double activeParameter);
+
+                @JsProperty
+                void setDocumentation(
+                        SignatureHelpContext.ToObjectReturnType0.ActiveSignatureHelpFieldType.SignaturesListFieldType.DocumentationFieldType documentation);
+
+                @JsProperty
+                void setLabel(String label);
+
+                @JsProperty
+                void setParametersList(
+                        JsArray<SignatureHelpContext.ToObjectReturnType0.ActiveSignatureHelpFieldType.SignaturesListFieldType.ParametersListFieldType> parametersList);
+
+                @JsOverlay
+                default void setParametersList(
+                        SignatureHelpContext.ToObjectReturnType0.ActiveSignatureHelpFieldType.SignaturesListFieldType.ParametersListFieldType[] parametersList) {
+                    setParametersList(
+                            Js.<JsArray<SignatureHelpContext.ToObjectReturnType0.ActiveSignatureHelpFieldType.SignaturesListFieldType.ParametersListFieldType>>uncheckedCast(
+                                    parametersList));
+                }
+            }
+
+            @JsOverlay
+            static SignatureHelpContext.ToObjectReturnType0.ActiveSignatureHelpFieldType create() {
+                return Js.uncheckedCast(JsPropertyMap.of());
+            }
+
+            @JsProperty
+            double getActiveParameter();
+
+            @JsProperty
+            double getActiveSignature();
+
+            @JsProperty
+            JsArray<SignatureHelpContext.ToObjectReturnType0.ActiveSignatureHelpFieldType.SignaturesListFieldType> getSignaturesList();
+
+            @JsProperty
+            void setActiveParameter(double activeParameter);
+
+            @JsProperty
+            void setActiveSignature(double activeSignature);
+
+            @JsProperty
+            void setSignaturesList(
+                    JsArray<SignatureHelpContext.ToObjectReturnType0.ActiveSignatureHelpFieldType.SignaturesListFieldType> signaturesList);
+
+            @JsOverlay
+            default void setSignaturesList(
+                    SignatureHelpContext.ToObjectReturnType0.ActiveSignatureHelpFieldType.SignaturesListFieldType[] signaturesList) {
+                setSignaturesList(
+                        Js.<JsArray<SignatureHelpContext.ToObjectReturnType0.ActiveSignatureHelpFieldType.SignaturesListFieldType>>uncheckedCast(
+                                signaturesList));
+            }
+        }
+
+        @JsOverlay
+        static SignatureHelpContext.ToObjectReturnType0 create() {
+            return Js.uncheckedCast(JsPropertyMap.of());
+        }
+
+        @JsProperty
+        SignatureHelpContext.ToObjectReturnType0.ActiveSignatureHelpFieldType getActiveSignatureHelp();
+
+        @JsProperty
+        String getTriggerCharacter();
+
+        @JsProperty
+        double getTriggerKind();
+
+        @JsProperty
+        boolean isIsRetrigger();
+
+        @JsProperty
+        void setActiveSignatureHelp(
+                SignatureHelpContext.ToObjectReturnType0.ActiveSignatureHelpFieldType activeSignatureHelp);
+
+        @JsProperty
+        void setIsRetrigger(boolean isRetrigger);
+
+        @JsProperty
+        void setTriggerCharacter(String triggerCharacter);
+
+        @JsProperty
+        void setTriggerKind(double triggerKind);
+    }
+
+    public static native SignatureHelpContext deserializeBinary(Uint8Array bytes);
+
+    public static native SignatureHelpContext deserializeBinaryFromReader(
+            SignatureHelpContext message, Object reader);
+
+    public static native void serializeBinaryToWriter(SignatureHelpContext message, Object writer);
+
+    public static native SignatureHelpContext.ToObjectReturnType toObject(
+            boolean includeInstance, SignatureHelpContext msg);
+
+    public native void clearActiveSignatureHelp();
+
+    public native void clearTriggerCharacter();
+
+    public native GetSignatureHelpResponse getActiveSignatureHelp();
+
+    public native boolean getIsRetrigger();
+
+    public native String getTriggerCharacter();
+
+    public native int getTriggerKind();
+
+    public native boolean hasActiveSignatureHelp();
+
+    public native boolean hasTriggerCharacter();
+
+    public native Uint8Array serializeBinary();
+
+    public native void setActiveSignatureHelp();
+
+    public native void setActiveSignatureHelp(GetSignatureHelpResponse value);
+
+    public native void setIsRetrigger(boolean value);
+
+    public native void setTriggerCharacter(String value);
+
+    public native void setTriggerKind(int value);
+
+    public native SignatureHelpContext.ToObjectReturnType0 toObject();
+
+    public native SignatureHelpContext.ToObjectReturnType0 toObject(boolean includeInstance);
+}
diff --git a/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/console_pb/SignatureInformation.java b/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/console_pb/SignatureInformation.java
new file mode 100644
index 00000000000..19915e6ed71
--- /dev/null
+++ b/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/console_pb/SignatureInformation.java
@@ -0,0 +1,238 @@
+/**
+ * Copyright (c) 2016-2022 Deephaven Data Labs and Patent Pending
+ */
+package io.deephaven.javascript.proto.dhinternal.io.deephaven.proto.console_pb;
+
+import elemental2.core.JsArray;
+import elemental2.core.Uint8Array;
+import jsinterop.annotations.JsOverlay;
+import jsinterop.annotations.JsPackage;
+import jsinterop.annotations.JsProperty;
+import jsinterop.annotations.JsType;
+import jsinterop.base.Js;
+import jsinterop.base.JsPropertyMap;
+
+@JsType(
+        isNative = true,
+        name = "dhinternal.io.deephaven.proto.console_pb.SignatureInformation",
+        namespace = JsPackage.GLOBAL)
+public class SignatureInformation {
+    @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+    public interface ToObjectReturnType {
+        @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+        public interface DocumentationFieldType {
+            @JsOverlay
+            static SignatureInformation.ToObjectReturnType.DocumentationFieldType create() {
+                return Js.uncheckedCast(JsPropertyMap.of());
+            }
+
+            @JsProperty
+            String getKind();
+
+            @JsProperty
+            String getValue();
+
+            @JsProperty
+            void setKind(String kind);
+
+            @JsProperty
+            void setValue(String value);
+        }
+
+        @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+        public interface ParametersListFieldType {
+            @JsOverlay
+            static SignatureInformation.ToObjectReturnType.ParametersListFieldType create() {
+                return Js.uncheckedCast(JsPropertyMap.of());
+            }
+
+            @JsProperty
+            Object getDocumentation();
+
+            @JsProperty
+            String getLabel();
+
+            @JsProperty
+            void setDocumentation(Object documentation);
+
+            @JsProperty
+            void setLabel(String label);
+        }
+
+        @JsOverlay
+        static SignatureInformation.ToObjectReturnType create() {
+            return Js.uncheckedCast(JsPropertyMap.of());
+        }
+
+        @JsProperty
+        double getActiveParameter();
+
+        @JsProperty
+        SignatureInformation.ToObjectReturnType.DocumentationFieldType getDocumentation();
+
+        @JsProperty
+        String getLabel();
+
+        @JsProperty
+        JsArray<SignatureInformation.ToObjectReturnType.ParametersListFieldType> getParametersList();
+
+        @JsProperty
+        void setActiveParameter(double activeParameter);
+
+        @JsProperty
+        void setDocumentation(
+                SignatureInformation.ToObjectReturnType.DocumentationFieldType documentation);
+
+        @JsProperty
+        void setLabel(String label);
+
+        @JsProperty
+        void setParametersList(
+                JsArray<SignatureInformation.ToObjectReturnType.ParametersListFieldType> parametersList);
+
+        @JsOverlay
+        default void setParametersList(
+                SignatureInformation.ToObjectReturnType.ParametersListFieldType[] parametersList) {
+            setParametersList(
+                    Js.<JsArray<SignatureInformation.ToObjectReturnType.ParametersListFieldType>>uncheckedCast(
+                            parametersList));
+        }
+    }
+
+    @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+    public interface ToObjectReturnType0 {
+        @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+        public interface DocumentationFieldType {
+            @JsOverlay
+            static SignatureInformation.ToObjectReturnType0.DocumentationFieldType create() {
+                return Js.uncheckedCast(JsPropertyMap.of());
+            }
+
+            @JsProperty
+            String getKind();
+
+            @JsProperty
+            String getValue();
+
+            @JsProperty
+            void setKind(String kind);
+
+            @JsProperty
+            void setValue(String value);
+        }
+
+        @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+        public interface ParametersListFieldType {
+            @JsOverlay
+            static SignatureInformation.ToObjectReturnType0.ParametersListFieldType create() {
+                return Js.uncheckedCast(JsPropertyMap.of());
+            }
+
+            @JsProperty
+            Object getDocumentation();
+
+            @JsProperty
+            String getLabel();
+
+            @JsProperty
+            void setDocumentation(Object documentation);
+
+            @JsProperty
+            void setLabel(String label);
+        }
+
+        @JsOverlay
+        static SignatureInformation.ToObjectReturnType0 create() {
+            return Js.uncheckedCast(JsPropertyMap.of());
+        }
+
+        @JsProperty
+        double getActiveParameter();
+
+        @JsProperty
+        SignatureInformation.ToObjectReturnType0.DocumentationFieldType getDocumentation();
+
+        @JsProperty
+        String getLabel();
+
+        @JsProperty
+        JsArray<SignatureInformation.ToObjectReturnType0.ParametersListFieldType> getParametersList();
+
+        @JsProperty
+        void setActiveParameter(double activeParameter);
+
+        @JsProperty
+        void setDocumentation(
+                SignatureInformation.ToObjectReturnType0.DocumentationFieldType documentation);
+
+        @JsProperty
+        void setLabel(String label);
+
+        @JsProperty
+        void setParametersList(
+                JsArray<SignatureInformation.ToObjectReturnType0.ParametersListFieldType> parametersList);
+
+        @JsOverlay
+        default void setParametersList(
+                SignatureInformation.ToObjectReturnType0.ParametersListFieldType[] parametersList) {
+            setParametersList(
+                    Js.<JsArray<SignatureInformation.ToObjectReturnType0.ParametersListFieldType>>uncheckedCast(
+                            parametersList));
+        }
+    }
+
+    public static native SignatureInformation deserializeBinary(Uint8Array bytes);
+
+    public static native SignatureInformation deserializeBinaryFromReader(
+            SignatureInformation message, Object reader);
+
+    public static native void serializeBinaryToWriter(SignatureInformation message, Object writer);
+
+    public static native SignatureInformation.ToObjectReturnType toObject(
+            boolean includeInstance, SignatureInformation msg);
+
+    public native ParameterInformation addParameters();
+
+    public native ParameterInformation addParameters(ParameterInformation value, double index);
+
+    public native ParameterInformation addParameters(ParameterInformation value);
+
+    public native void clearActiveParameter();
+
+    public native void clearDocumentation();
+
+    public native void clearParametersList();
+
+    public native int getActiveParameter();
+
+    public native MarkupContent getDocumentation();
+
+    public native String getLabel();
+
+    public native JsArray<ParameterInformation> getParametersList();
+
+    public native boolean hasActiveParameter();
+
+    public native boolean hasDocumentation();
+
+    public native Uint8Array serializeBinary();
+
+    public native void setActiveParameter(int value);
+
+    public native void setDocumentation();
+
+    public native void setDocumentation(MarkupContent value);
+
+    public native void setLabel(String value);
+
+    public native void setParametersList(JsArray<ParameterInformation> value);
+
+    @JsOverlay
+    public final void setParametersList(ParameterInformation[] value) {
+        setParametersList(Js.<JsArray<ParameterInformation>>uncheckedCast(value));
+    }
+
+    public native SignatureInformation.ToObjectReturnType0 toObject();
+
+    public native SignatureInformation.ToObjectReturnType0 toObject(boolean includeInstance);
+}
diff --git a/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/console_pb/autocompleterequest/RequestCase.java b/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/console_pb/autocompleterequest/RequestCase.java
index 9465bf082a8..dbf1bb22dc2 100644
--- a/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/console_pb/autocompleterequest/RequestCase.java
+++ b/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/console_pb/autocompleterequest/RequestCase.java
@@ -14,6 +14,9 @@ public class RequestCase {
     public static int CHANGE_DOCUMENT,
             CLOSE_DOCUMENT,
             GET_COMPLETION_ITEMS,
+            GET_DIAGNOSTIC,
+            GET_HOVER,
+            GET_SIGNATURE_HELP,
             OPEN_DOCUMENT,
             REQUEST_NOT_SET;
 }
diff --git a/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/console_pb/autocompleteresponse/ResponseCase.java b/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/console_pb/autocompleteresponse/ResponseCase.java
index 0e549c62063..4ea37ec46e9 100644
--- a/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/console_pb/autocompleteresponse/ResponseCase.java
+++ b/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/console_pb/autocompleteresponse/ResponseCase.java
@@ -12,5 +12,9 @@
         namespace = JsPackage.GLOBAL)
 public class ResponseCase {
     public static int COMPLETION_ITEMS,
-            RESPONSE_NOT_SET;
+            DIAGNOSTIC,
+            DIAGNOSTIC_PUBLISH,
+            HOVER,
+            RESPONSE_NOT_SET,
+            SIGNATURES;
 }
diff --git a/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/console_pb/diagnostic/CodeDescription.java b/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/console_pb/diagnostic/CodeDescription.java
new file mode 100644
index 00000000000..148dfa07a24
--- /dev/null
+++ b/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/console_pb/diagnostic/CodeDescription.java
@@ -0,0 +1,66 @@
+/**
+ * Copyright (c) 2016-2022 Deephaven Data Labs and Patent Pending
+ */
+package io.deephaven.javascript.proto.dhinternal.io.deephaven.proto.console_pb.diagnostic;
+
+import elemental2.core.Uint8Array;
+import jsinterop.annotations.JsOverlay;
+import jsinterop.annotations.JsPackage;
+import jsinterop.annotations.JsProperty;
+import jsinterop.annotations.JsType;
+import jsinterop.base.Js;
+import jsinterop.base.JsPropertyMap;
+
+@JsType(
+        isNative = true,
+        name = "dhinternal.io.deephaven.proto.console_pb.Diagnostic.CodeDescription",
+        namespace = JsPackage.GLOBAL)
+public class CodeDescription {
+    @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+    public interface ToObjectReturnType {
+        @JsOverlay
+        static CodeDescription.ToObjectReturnType create() {
+            return Js.uncheckedCast(JsPropertyMap.of());
+        }
+
+        @JsProperty
+        String getHref();
+
+        @JsProperty
+        void setHref(String href);
+    }
+
+    @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+    public interface ToObjectReturnType0 {
+        @JsOverlay
+        static CodeDescription.ToObjectReturnType0 create() {
+            return Js.uncheckedCast(JsPropertyMap.of());
+        }
+
+        @JsProperty
+        String getHref();
+
+        @JsProperty
+        void setHref(String href);
+    }
+
+    public static native CodeDescription deserializeBinary(Uint8Array bytes);
+
+    public static native CodeDescription deserializeBinaryFromReader(
+            CodeDescription message, Object reader);
+
+    public static native void serializeBinaryToWriter(CodeDescription message, Object writer);
+
+    public static native CodeDescription.ToObjectReturnType toObject(
+            boolean includeInstance, CodeDescription msg);
+
+    public native String getHref();
+
+    public native Uint8Array serializeBinary();
+
+    public native void setHref(String value);
+
+    public native CodeDescription.ToObjectReturnType0 toObject();
+
+    public native CodeDescription.ToObjectReturnType0 toObject(boolean includeInstance);
+}
diff --git a/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/console_pb/diagnostic/DiagnosticSeverityMap.java b/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/console_pb/diagnostic/DiagnosticSeverityMap.java
new file mode 100644
index 00000000000..5bdd8267ef9
--- /dev/null
+++ b/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/console_pb/diagnostic/DiagnosticSeverityMap.java
@@ -0,0 +1,52 @@
+/**
+ * Copyright (c) 2016-2022 Deephaven Data Labs and Patent Pending
+ */
+package io.deephaven.javascript.proto.dhinternal.io.deephaven.proto.console_pb.diagnostic;
+
+import jsinterop.annotations.JsOverlay;
+import jsinterop.annotations.JsPackage;
+import jsinterop.annotations.JsProperty;
+import jsinterop.annotations.JsType;
+import jsinterop.base.Js;
+import jsinterop.base.JsPropertyMap;
+
+@JsType(
+        isNative = true,
+        name = "dhinternal.io.deephaven.proto.console_pb.Diagnostic.DiagnosticSeverityMap",
+        namespace = JsPackage.GLOBAL)
+public interface DiagnosticSeverityMap {
+    @JsOverlay
+    static DiagnosticSeverityMap create() {
+        return Js.uncheckedCast(JsPropertyMap.of());
+    }
+
+    @JsProperty(name = "ERROR")
+    int getERROR();
+
+    @JsProperty(name = "HINT")
+    int getHINT();
+
+    @JsProperty(name = "INFORMATION")
+    int getINFORMATION();
+
+    @JsProperty(name = "NOT_SET_SEVERITY")
+    int getNOT_SET_SEVERITY();
+
+    @JsProperty(name = "WARNING")
+    int getWARNING();
+
+    @JsProperty(name = "ERROR")
+    void setERROR(int ERROR);
+
+    @JsProperty(name = "HINT")
+    void setHINT(int HINT);
+
+    @JsProperty(name = "INFORMATION")
+    void setINFORMATION(int INFORMATION);
+
+    @JsProperty(name = "NOT_SET_SEVERITY")
+    void setNOT_SET_SEVERITY(int NOT_SET_SEVERITY);
+
+    @JsProperty(name = "WARNING")
+    void setWARNING(int WARNING);
+}
diff --git a/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/console_pb/diagnostic/DiagnosticTagMap.java b/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/console_pb/diagnostic/DiagnosticTagMap.java
new file mode 100644
index 00000000000..fd8f51d1593
--- /dev/null
+++ b/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/console_pb/diagnostic/DiagnosticTagMap.java
@@ -0,0 +1,40 @@
+/**
+ * Copyright (c) 2016-2022 Deephaven Data Labs and Patent Pending
+ */
+package io.deephaven.javascript.proto.dhinternal.io.deephaven.proto.console_pb.diagnostic;
+
+import jsinterop.annotations.JsOverlay;
+import jsinterop.annotations.JsPackage;
+import jsinterop.annotations.JsProperty;
+import jsinterop.annotations.JsType;
+import jsinterop.base.Js;
+import jsinterop.base.JsPropertyMap;
+
+@JsType(
+        isNative = true,
+        name = "dhinternal.io.deephaven.proto.console_pb.Diagnostic.DiagnosticTagMap",
+        namespace = JsPackage.GLOBAL)
+public interface DiagnosticTagMap {
+    @JsOverlay
+    static DiagnosticTagMap create() {
+        return Js.uncheckedCast(JsPropertyMap.of());
+    }
+
+    @JsProperty(name = "DEPRECATED")
+    int getDEPRECATED();
+
+    @JsProperty(name = "NOT_SET_TAG")
+    int getNOT_SET_TAG();
+
+    @JsProperty(name = "UNNECESSARY")
+    int getUNNECESSARY();
+
+    @JsProperty(name = "DEPRECATED")
+    void setDEPRECATED(int DEPRECATED);
+
+    @JsProperty(name = "NOT_SET_TAG")
+    void setNOT_SET_TAG(int NOT_SET_TAG);
+
+    @JsProperty(name = "UNNECESSARY")
+    void setUNNECESSARY(int UNNECESSARY);
+}
diff --git a/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/console_pb_service/ConsoleService.java b/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/console_pb_service/ConsoleService.java
index 19fba352238..53ecd9023c5 100644
--- a/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/console_pb_service/ConsoleService.java
+++ b/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/console_pb_service/ConsoleService.java
@@ -103,6 +103,50 @@ static ConsoleService.BindTableToVariableType create() {
         void setService(Object service);
     }
 
+    @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+    public interface CancelAutoCompleteType {
+        @JsOverlay
+        static ConsoleService.CancelAutoCompleteType create() {
+            return Js.uncheckedCast(JsPropertyMap.of());
+        }
+
+        @JsProperty
+        String getMethodName();
+
+        @JsProperty
+        Object getRequestType();
+
+        @JsProperty
+        Object getResponseType();
+
+        @JsProperty
+        Object getService();
+
+        @JsProperty
+        boolean isRequestStream();
+
+        @JsProperty
+        boolean isResponseStream();
+
+        @JsProperty
+        void setMethodName(String methodName);
+
+        @JsProperty
+        void setRequestStream(boolean requestStream);
+
+        @JsProperty
+        void setRequestType(Object requestType);
+
+        @JsProperty
+        void setResponseStream(boolean responseStream);
+
+        @JsProperty
+        void setResponseType(Object responseType);
+
+        @JsProperty
+        void setService(Object service);
+    }
+
     @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
     public interface CancelCommandType {
         @JsOverlay
@@ -457,6 +501,7 @@ static ConsoleService.SubscribeToLogsType create() {
 
     public static ConsoleService.AutoCompleteStreamType AutoCompleteStream;
     public static ConsoleService.BindTableToVariableType BindTableToVariable;
+    public static ConsoleService.CancelAutoCompleteType CancelAutoComplete;
     public static ConsoleService.CancelCommandType CancelCommand;
     public static ConsoleService.ExecuteCommandType ExecuteCommand;
     public static ConsoleService.GetConsoleTypesType GetConsoleTypes;
diff --git a/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/console_pb_service/ConsoleServiceClient.java b/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/console_pb_service/ConsoleServiceClient.java
index d6ce3a304bd..6f733b0e111 100644
--- a/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/console_pb_service/ConsoleServiceClient.java
+++ b/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/console_pb_service/ConsoleServiceClient.java
@@ -9,6 +9,8 @@
 import io.deephaven.javascript.proto.dhinternal.io.deephaven.proto.console_pb.BindTableToVariableRequest;
 import io.deephaven.javascript.proto.dhinternal.io.deephaven.proto.console_pb.BindTableToVariableResponse;
 import io.deephaven.javascript.proto.dhinternal.io.deephaven.proto.console_pb.BrowserNextResponse;
+import io.deephaven.javascript.proto.dhinternal.io.deephaven.proto.console_pb.CancelAutoCompleteRequest;
+import io.deephaven.javascript.proto.dhinternal.io.deephaven.proto.console_pb.CancelAutoCompleteResponse;
 import io.deephaven.javascript.proto.dhinternal.io.deephaven.proto.console_pb.CancelCommandRequest;
 import io.deephaven.javascript.proto.dhinternal.io.deephaven.proto.console_pb.CancelCommandResponse;
 import io.deephaven.javascript.proto.dhinternal.io.deephaven.proto.console_pb.ExecuteCommandRequest;
@@ -128,6 +130,99 @@ default boolean isBrowserHeaders() {
         }
     }
 
+    @JsFunction
+    public interface CancelAutoCompleteCallbackFn {
+        @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+        public interface P0Type {
+            @JsOverlay
+            static ConsoleServiceClient.CancelAutoCompleteCallbackFn.P0Type create() {
+                return Js.uncheckedCast(JsPropertyMap.of());
+            }
+
+            @JsProperty
+            double getCode();
+
+            @JsProperty
+            String getMessage();
+
+            @JsProperty
+            BrowserHeaders getMetadata();
+
+            @JsProperty
+            void setCode(double code);
+
+            @JsProperty
+            void setMessage(String message);
+
+            @JsProperty
+            void setMetadata(BrowserHeaders metadata);
+        }
+
+        void onInvoke(
+                ConsoleServiceClient.CancelAutoCompleteCallbackFn.P0Type p0, CancelAutoCompleteResponse p1);
+    }
+
+    @JsFunction
+    public interface CancelAutoCompleteMetadata_or_callbackFn {
+        @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+        public interface P0Type {
+            @JsOverlay
+            static ConsoleServiceClient.CancelAutoCompleteMetadata_or_callbackFn.P0Type create() {
+                return Js.uncheckedCast(JsPropertyMap.of());
+            }
+
+            @JsProperty
+            double getCode();
+
+            @JsProperty
+            String getMessage();
+
+            @JsProperty
+            BrowserHeaders getMetadata();
+
+            @JsProperty
+            void setCode(double code);
+
+            @JsProperty
+            void setMessage(String message);
+
+            @JsProperty
+            void setMetadata(BrowserHeaders metadata);
+        }
+
+        void onInvoke(
+                ConsoleServiceClient.CancelAutoCompleteMetadata_or_callbackFn.P0Type p0,
+                CancelAutoCompleteResponse p1);
+    }
+
+    @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
+    public interface CancelAutoCompleteMetadata_or_callbackUnionType {
+        @JsOverlay
+        static ConsoleServiceClient.CancelAutoCompleteMetadata_or_callbackUnionType of(Object o) {
+            return Js.cast(o);
+        }
+
+        @JsOverlay
+        default BrowserHeaders asBrowserHeaders() {
+            return Js.cast(this);
+        }
+
+        @JsOverlay
+        default ConsoleServiceClient.CancelAutoCompleteMetadata_or_callbackFn asCancelAutoCompleteMetadata_or_callbackFn() {
+            return Js.cast(this);
+        }
+
+        @JsOverlay
+        default boolean isBrowserHeaders() {
+            return (Object) this instanceof BrowserHeaders;
+        }
+
+        @JsOverlay
+        default boolean isCancelAutoCompleteMetadata_or_callbackFn() {
+            return (Object) this instanceof ConsoleServiceClient.CancelAutoCompleteMetadata_or_callbackFn;
+        }
+    }
+
     @JsFunction
     public interface CancelCommandCallbackFn {
         @JsType(isNative = true, name = "?", namespace = JsPackage.GLOBAL)
@@ -744,6 +839,58 @@ public final UnaryResponse bindTableToVariable(
                         metadata_or_callback));
     }
 
+    @JsOverlay
+    public final UnaryResponse cancelAutoComplete(
+            CancelAutoCompleteRequest requestMessage,
+            BrowserHeaders metadata_or_callback,
+            ConsoleServiceClient.CancelAutoCompleteCallbackFn callback) {
+        return cancelAutoComplete(
+                requestMessage,
+                Js.<ConsoleServiceClient.CancelAutoCompleteMetadata_or_callbackUnionType>uncheckedCast(
+                        metadata_or_callback),
+                callback);
+    }
+
+    @JsOverlay
+    public final UnaryResponse cancelAutoComplete(
+            CancelAutoCompleteRequest requestMessage, BrowserHeaders metadata_or_callback) {
+        return cancelAutoComplete(
+                requestMessage,
+                Js.<ConsoleServiceClient.CancelAutoCompleteMetadata_or_callbackUnionType>uncheckedCast(
+                        metadata_or_callback));
+    }
+
+    @JsOverlay
+    public final UnaryResponse cancelAutoComplete(
+            CancelAutoCompleteRequest requestMessage,
+            ConsoleServiceClient.CancelAutoCompleteMetadata_or_callbackFn metadata_or_callback,
+            ConsoleServiceClient.CancelAutoCompleteCallbackFn callback) {
+        return cancelAutoComplete(
+                requestMessage,
+                Js.<ConsoleServiceClient.CancelAutoCompleteMetadata_or_callbackUnionType>uncheckedCast(
+                        metadata_or_callback),
+                callback);
+    }
+
+    @JsOverlay
+    public final UnaryResponse cancelAutoComplete(
+            CancelAutoCompleteRequest requestMessage,
+            ConsoleServiceClient.CancelAutoCompleteMetadata_or_callbackFn metadata_or_callback) {
+        return cancelAutoComplete(
+                requestMessage,
+                Js.<ConsoleServiceClient.CancelAutoCompleteMetadata_or_callbackUnionType>uncheckedCast(
+                        metadata_or_callback));
+    }
+
+    public native UnaryResponse cancelAutoComplete(
+            CancelAutoCompleteRequest requestMessage,
+            ConsoleServiceClient.CancelAutoCompleteMetadata_or_callbackUnionType metadata_or_callback,
+            ConsoleServiceClient.CancelAutoCompleteCallbackFn callback);
+
+    public native UnaryResponse cancelAutoComplete(
+            CancelAutoCompleteRequest requestMessage,
+            ConsoleServiceClient.CancelAutoCompleteMetadata_or_callbackUnionType metadata_or_callback);
+
     @JsOverlay
     public final UnaryResponse cancelCommand(
             CancelCommandRequest requestMessage,
diff --git a/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/table_pb/SeekRowRequest.java b/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/table_pb/SeekRowRequest.java
index cf1cc9fb6a4..406b185902b 100644
--- a/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/table_pb/SeekRowRequest.java
+++ b/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/table_pb/SeekRowRequest.java
@@ -1,3 +1,6 @@
+/**
+ * Copyright (c) 2016-2022 Deephaven Data Labs and Patent Pending
+ */
 package io.deephaven.javascript.proto.dhinternal.io.deephaven.proto.table_pb;
 
 import elemental2.core.Uint8Array;
diff --git a/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/table_pb/SeekRowResponse.java b/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/table_pb/SeekRowResponse.java
index 8f5a5aaba8c..ee68f42ff1f 100644
--- a/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/table_pb/SeekRowResponse.java
+++ b/web/client-backplane/src/main/java/io/deephaven/javascript/proto/dhinternal/io/deephaven/proto/table_pb/SeekRowResponse.java
@@ -1,3 +1,6 @@
+/**
+ * Copyright (c) 2016-2022 Deephaven Data Labs and Patent Pending
+ */
 package io.deephaven.javascript.proto.dhinternal.io.deephaven.proto.table_pb;
 
 import elemental2.core.Uint8Array;