From c3f0685b6c046f39afc6599011afe32e0ce08eaf Mon Sep 17 00:00:00 2001
From: Iaroslav Ciupin <iaroslav@union.ai>
Date: Wed, 24 Jan 2024 09:56:37 +0200
Subject: [PATCH] refactoring

Signed-off-by: Iaroslav Ciupin <iaroslav@union.ai>
---
 .../manager/impl/node_execution_manager.go    |   43 +-
 .../impl/node_execution_manager_test.go       |    2 +-
 .../flyteidl/admin/node_execution.pb.cc       |  664 ++++++++-
 .../pb-cpp/flyteidl/admin/node_execution.pb.h |  342 ++++-
 .../gen/pb-cpp/flyteidl/admin/workflow.pb.cc  |  665 +--------
 .../gen/pb-cpp/flyteidl/admin/workflow.pb.h   |  342 +----
 .../pb-go/flyteidl/admin/node_execution.pb.go |  236 +++-
 .../gen/pb-go/flyteidl/admin/workflow.pb.go   |  159 +--
 .../admin/NodeExecutionOuterClass.java        | 1244 ++++++++++++++++-
 .../flyteidl/admin/WorkflowOuterClass.java    | 1244 +----------------
 flyteidl/gen/pb-js/flyteidl.d.ts              |  208 +--
 flyteidl/gen/pb-js/flyteidl.js                |  448 +++---
 .../flyteidl/admin/node_execution_pb2.py      |    6 +-
 .../flyteidl/admin/node_execution_pb2.pyi     |   12 +
 .../pb_python/flyteidl/admin/workflow_pb2.py  |    6 +-
 .../pb_python/flyteidl/admin/workflow_pb2.pyi |   12 -
 .../flyteidl/service/admin_pb2_grpc.py        |   12 +-
 flyteidl/gen/pb_rust/flyteidl.admin.rs        |   24 +-
 .../flyteidl/admin/node_execution.proto       |    8 +
 flyteidl/protos/flyteidl/admin/workflow.proto |    8 -
 20 files changed, 2843 insertions(+), 2842 deletions(-)

diff --git a/flyteadmin/pkg/manager/impl/node_execution_manager.go b/flyteadmin/pkg/manager/impl/node_execution_manager.go
index 702d613d39..d618a1784f 100644
--- a/flyteadmin/pkg/manager/impl/node_execution_manager.go
+++ b/flyteadmin/pkg/manager/impl/node_execution_manager.go
@@ -314,13 +314,9 @@ func (m *NodeExecutionManager) GetDynamicNodeWorkflow(ctx context.Context, reque
 		return &admin.DynamicNodeWorkflowResponse{}, errors.NewFlyteAdminErrorf(codes.NotFound, "node does not contain dynamic workflow")
 	}
 
-	closure := &core.CompiledWorkflowClosure{}
-	location := nodeExecutionModel.DynamicWorkflowRemoteClosureReference
-	err = m.storageClient.ReadProtobuf(ctx, storage.DataReference(location), closure)
+	closure, err := m.fetchDynamicWorkflowClosure(ctx, nodeExecutionModel.DynamicWorkflowRemoteClosureReference)
 	if err != nil {
-		logger.Errorf(ctx, "unable to read workflow_closure from location %s: %v", location, err)
-		return nil, errors.NewFlyteAdminErrorf(codes.Internal,
-			"unable to read workflow_closure from location %s : %v", location, err)
+		return nil, err
 	}
 
 	return &admin.DynamicNodeWorkflowResponse{CompiledWorkflow: closure}, nil
@@ -545,23 +541,15 @@ func (m *NodeExecutionManager) GetNodeExecutionData(
 	}
 
 	if len(nodeExecutionModel.DynamicWorkflowRemoteClosureReference) > 0 {
-		closure := &core.CompiledWorkflowClosure{}
-		err := m.storageClient.ReadProtobuf(ctx, storage.DataReference(nodeExecutionModel.DynamicWorkflowRemoteClosureReference), closure)
+		closure, err := m.fetchDynamicWorkflowClosure(ctx, nodeExecutionModel.DynamicWorkflowRemoteClosureReference)
 		if err != nil {
-			return nil, errors.NewFlyteAdminErrorf(codes.Internal,
-				"Unable to read WorkflowClosure from location %s : %v", nodeExecutionModel.DynamicWorkflowRemoteClosureReference, err)
+			return nil, err
 		}
 
-		if wf := closure.Primary; wf == nil {
-			return nil, errors.NewFlyteAdminErrorf(codes.Internal, "Empty primary workflow definition in loaded dynamic workflow model.")
-		} else if template := wf.Template; template == nil {
-			return nil, errors.NewFlyteAdminErrorf(codes.Internal, "Empty primary workflow template in loaded dynamic workflow model.")
-		} else {
-			response.DynamicWorkflow = &admin.DynamicWorkflowNodeMetadata{
-				Id:                closure.Primary.Template.Id,
-				CompiledWorkflow:  closure,
-				DynamicJobSpecUri: nodeExecution.Closure.DynamicJobSpecUri,
-			}
+		response.DynamicWorkflow = &admin.DynamicWorkflowNodeMetadata{
+			Id:                closure.Primary.Template.Id,
+			CompiledWorkflow:  closure,
+			DynamicJobSpecUri: nodeExecution.Closure.DynamicJobSpecUri,
 		}
 	}
 
@@ -575,6 +563,21 @@ func (m *NodeExecutionManager) GetNodeExecutionData(
 	return response, nil
 }
 
+func (m *NodeExecutionManager) fetchDynamicWorkflowClosure(ctx context.Context, ref string) (*core.CompiledWorkflowClosure, error) {
+	closure := &core.CompiledWorkflowClosure{}
+	err := m.storageClient.ReadProtobuf(ctx, storage.DataReference(ref), closure)
+	if err != nil {
+		return nil, errors.NewFlyteAdminErrorf(codes.Internal, "Unable to read WorkflowClosure from location %s : %v", ref, err)
+	}
+
+	if wf := closure.Primary; wf == nil {
+		return nil, errors.NewFlyteAdminErrorf(codes.Internal, "Empty primary workflow definition in loaded dynamic workflow model.")
+	} else if template := wf.Template; template == nil {
+		return nil, errors.NewFlyteAdminErrorf(codes.Internal, "Empty primary workflow template in loaded dynamic workflow model.")
+	}
+	return closure, nil
+}
+
 func NewNodeExecutionManager(db repoInterfaces.Repository, config runtimeInterfaces.Configuration,
 	storagePrefix []string, storageClient *storage.DataStore, scope promutils.Scope, urlData dataInterfaces.RemoteURLInterface,
 	eventPublisher notificationInterfaces.Publisher, cloudEventPublisher cloudeventInterfaces.Publisher,
diff --git a/flyteadmin/pkg/manager/impl/node_execution_manager_test.go b/flyteadmin/pkg/manager/impl/node_execution_manager_test.go
index bbbe6c90e9..821a3c8ca1 100644
--- a/flyteadmin/pkg/manager/impl/node_execution_manager_test.go
+++ b/flyteadmin/pkg/manager/impl/node_execution_manager_test.go
@@ -1463,6 +1463,6 @@ func Test_GetDynamicNodeWorkflow_StorageError(t *testing.T) {
 	st, ok := status.FromError(err)
 	assert.True(t, ok)
 	assert.Equal(t, codes.Internal, st.Code())
-	assert.Equal(t, "unable to read workflow_closure from location s3://flyte/metadata/admin/remote closure id : failure", st.Message())
+	assert.Equal(t, "Unable to read WorkflowClosure from location s3://flyte/metadata/admin/remote closure id : failure", st.Message())
 	assert.Empty(t, resp)
 }
diff --git a/flyteidl/gen/pb-cpp/flyteidl/admin/node_execution.pb.cc b/flyteidl/gen/pb-cpp/flyteidl/admin/node_execution.pb.cc
index 09fc0a5e20..94d514ae08 100644
--- a/flyteidl/gen/pb-cpp/flyteidl/admin/node_execution.pb.cc
+++ b/flyteidl/gen/pb-cpp/flyteidl/admin/node_execution.pb.cc
@@ -90,6 +90,14 @@ class NodeExecutionGetDataResponseDefaultTypeInternal {
  public:
   ::google::protobuf::internal::ExplicitlyConstructed<NodeExecutionGetDataResponse> _instance;
 } _NodeExecutionGetDataResponse_default_instance_;
+class GetDynamicNodeWorkflowRequestDefaultTypeInternal {
+ public:
+  ::google::protobuf::internal::ExplicitlyConstructed<GetDynamicNodeWorkflowRequest> _instance;
+} _GetDynamicNodeWorkflowRequest_default_instance_;
+class DynamicNodeWorkflowResponseDefaultTypeInternal {
+ public:
+  ::google::protobuf::internal::ExplicitlyConstructed<DynamicNodeWorkflowResponse> _instance;
+} _DynamicNodeWorkflowResponse_default_instance_;
 }  // namespace admin
 }  // namespace flyteidl
 static void InitDefaultsNodeExecutionGetRequest_flyteidl_2fadmin_2fnode_5fexecution_2eproto() {
@@ -284,6 +292,36 @@ ::google::protobuf::internal::SCCInfo<4> scc_info_NodeExecutionGetDataResponse_f
       &scc_info_DynamicWorkflowNodeMetadata_flyteidl_2fadmin_2fnode_5fexecution_2eproto.base,
       &scc_info_FlyteURLs_flyteidl_2fadmin_2fcommon_2eproto.base,}};
 
+static void InitDefaultsGetDynamicNodeWorkflowRequest_flyteidl_2fadmin_2fnode_5fexecution_2eproto() {
+  GOOGLE_PROTOBUF_VERIFY_VERSION;
+
+  {
+    void* ptr = &::flyteidl::admin::_GetDynamicNodeWorkflowRequest_default_instance_;
+    new (ptr) ::flyteidl::admin::GetDynamicNodeWorkflowRequest();
+    ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
+  }
+  ::flyteidl::admin::GetDynamicNodeWorkflowRequest::InitAsDefaultInstance();
+}
+
+::google::protobuf::internal::SCCInfo<1> scc_info_GetDynamicNodeWorkflowRequest_flyteidl_2fadmin_2fnode_5fexecution_2eproto =
+    {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 1, InitDefaultsGetDynamicNodeWorkflowRequest_flyteidl_2fadmin_2fnode_5fexecution_2eproto}, {
+      &scc_info_NodeExecutionIdentifier_flyteidl_2fcore_2fidentifier_2eproto.base,}};
+
+static void InitDefaultsDynamicNodeWorkflowResponse_flyteidl_2fadmin_2fnode_5fexecution_2eproto() {
+  GOOGLE_PROTOBUF_VERIFY_VERSION;
+
+  {
+    void* ptr = &::flyteidl::admin::_DynamicNodeWorkflowResponse_default_instance_;
+    new (ptr) ::flyteidl::admin::DynamicNodeWorkflowResponse();
+    ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
+  }
+  ::flyteidl::admin::DynamicNodeWorkflowResponse::InitAsDefaultInstance();
+}
+
+::google::protobuf::internal::SCCInfo<1> scc_info_DynamicNodeWorkflowResponse_flyteidl_2fadmin_2fnode_5fexecution_2eproto =
+    {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 1, InitDefaultsDynamicNodeWorkflowResponse_flyteidl_2fadmin_2fnode_5fexecution_2eproto}, {
+      &scc_info_CompiledWorkflowClosure_flyteidl_2fcore_2fcompiler_2eproto.base,}};
+
 void InitDefaults_flyteidl_2fadmin_2fnode_5fexecution_2eproto() {
   ::google::protobuf::internal::InitSCC(&scc_info_NodeExecutionGetRequest_flyteidl_2fadmin_2fnode_5fexecution_2eproto.base);
   ::google::protobuf::internal::InitSCC(&scc_info_NodeExecutionListRequest_flyteidl_2fadmin_2fnode_5fexecution_2eproto.base);
@@ -297,9 +335,11 @@ void InitDefaults_flyteidl_2fadmin_2fnode_5fexecution_2eproto() {
   ::google::protobuf::internal::InitSCC(&scc_info_DynamicWorkflowNodeMetadata_flyteidl_2fadmin_2fnode_5fexecution_2eproto.base);
   ::google::protobuf::internal::InitSCC(&scc_info_NodeExecutionGetDataRequest_flyteidl_2fadmin_2fnode_5fexecution_2eproto.base);
   ::google::protobuf::internal::InitSCC(&scc_info_NodeExecutionGetDataResponse_flyteidl_2fadmin_2fnode_5fexecution_2eproto.base);
+  ::google::protobuf::internal::InitSCC(&scc_info_GetDynamicNodeWorkflowRequest_flyteidl_2fadmin_2fnode_5fexecution_2eproto.base);
+  ::google::protobuf::internal::InitSCC(&scc_info_DynamicNodeWorkflowResponse_flyteidl_2fadmin_2fnode_5fexecution_2eproto.base);
 }
 
-::google::protobuf::Metadata file_level_metadata_flyteidl_2fadmin_2fnode_5fexecution_2eproto[12];
+::google::protobuf::Metadata file_level_metadata_flyteidl_2fadmin_2fnode_5fexecution_2eproto[14];
 constexpr ::google::protobuf::EnumDescriptor const** file_level_enum_descriptors_flyteidl_2fadmin_2fnode_5fexecution_2eproto = nullptr;
 constexpr ::google::protobuf::ServiceDescriptor const** file_level_service_descriptors_flyteidl_2fadmin_2fnode_5fexecution_2eproto = nullptr;
 
@@ -415,6 +455,18 @@ const ::google::protobuf::uint32 TableStruct_flyteidl_2fadmin_2fnode_5fexecution
   PROTOBUF_FIELD_OFFSET(::flyteidl::admin::NodeExecutionGetDataResponse, full_outputs_),
   PROTOBUF_FIELD_OFFSET(::flyteidl::admin::NodeExecutionGetDataResponse, dynamic_workflow_),
   PROTOBUF_FIELD_OFFSET(::flyteidl::admin::NodeExecutionGetDataResponse, flyte_urls_),
+  ~0u,  // no _has_bits_
+  PROTOBUF_FIELD_OFFSET(::flyteidl::admin::GetDynamicNodeWorkflowRequest, _internal_metadata_),
+  ~0u,  // no _extensions_
+  ~0u,  // no _oneof_case_
+  ~0u,  // no _weak_field_map_
+  PROTOBUF_FIELD_OFFSET(::flyteidl::admin::GetDynamicNodeWorkflowRequest, id_),
+  ~0u,  // no _has_bits_
+  PROTOBUF_FIELD_OFFSET(::flyteidl::admin::DynamicNodeWorkflowResponse, _internal_metadata_),
+  ~0u,  // no _extensions_
+  ~0u,  // no _oneof_case_
+  ~0u,  // no _weak_field_map_
+  PROTOBUF_FIELD_OFFSET(::flyteidl::admin::DynamicNodeWorkflowResponse, compiled_workflow_),
 };
 static const ::google::protobuf::internal::MigrationSchema schemas[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = {
   { 0, -1, sizeof(::flyteidl::admin::NodeExecutionGetRequest)},
@@ -429,6 +481,8 @@ static const ::google::protobuf::internal::MigrationSchema schemas[] PROTOBUF_SE
   { 86, -1, sizeof(::flyteidl::admin::DynamicWorkflowNodeMetadata)},
   { 94, -1, sizeof(::flyteidl::admin::NodeExecutionGetDataRequest)},
   { 100, -1, sizeof(::flyteidl::admin::NodeExecutionGetDataResponse)},
+  { 111, -1, sizeof(::flyteidl::admin::GetDynamicNodeWorkflowRequest)},
+  { 117, -1, sizeof(::flyteidl::admin::DynamicNodeWorkflowResponse)},
 };
 
 static ::google::protobuf::Message const * const file_default_instances[] = {
@@ -444,12 +498,14 @@ static ::google::protobuf::Message const * const file_default_instances[] = {
   reinterpret_cast<const ::google::protobuf::Message*>(&::flyteidl::admin::_DynamicWorkflowNodeMetadata_default_instance_),
   reinterpret_cast<const ::google::protobuf::Message*>(&::flyteidl::admin::_NodeExecutionGetDataRequest_default_instance_),
   reinterpret_cast<const ::google::protobuf::Message*>(&::flyteidl::admin::_NodeExecutionGetDataResponse_default_instance_),
+  reinterpret_cast<const ::google::protobuf::Message*>(&::flyteidl::admin::_GetDynamicNodeWorkflowRequest_default_instance_),
+  reinterpret_cast<const ::google::protobuf::Message*>(&::flyteidl::admin::_DynamicNodeWorkflowResponse_default_instance_),
 };
 
 ::google::protobuf::internal::AssignDescriptorsTable assign_descriptors_table_flyteidl_2fadmin_2fnode_5fexecution_2eproto = {
   {}, AddDescriptors_flyteidl_2fadmin_2fnode_5fexecution_2eproto, "flyteidl/admin/node_execution.proto", schemas,
   file_default_instances, TableStruct_flyteidl_2fadmin_2fnode_5fexecution_2eproto::offsets,
-  file_level_metadata_flyteidl_2fadmin_2fnode_5fexecution_2eproto, 12, file_level_enum_descriptors_flyteidl_2fadmin_2fnode_5fexecution_2eproto, file_level_service_descriptors_flyteidl_2fadmin_2fnode_5fexecution_2eproto,
+  file_level_metadata_flyteidl_2fadmin_2fnode_5fexecution_2eproto, 14, file_level_enum_descriptors_flyteidl_2fadmin_2fnode_5fexecution_2eproto, file_level_service_descriptors_flyteidl_2fadmin_2fnode_5fexecution_2eproto,
 };
 
 const char descriptor_table_protodef_flyteidl_2fadmin_2fnode_5fexecution_2eproto[] =
@@ -519,14 +575,18 @@ const char descriptor_table_protodef_flyteidl_2fadmin_2fnode_5fexecution_2eproto
   ".core.LiteralMap\022E\n\020dynamic_workflow\030\020 \001"
   "(\0132+.flyteidl.admin.DynamicWorkflowNodeM"
   "etadata\022-\n\nflyte_urls\030\021 \001(\0132\031.flyteidl.a"
-  "dmin.FlyteURLsB=Z;github.com/flyteorg/fl"
-  "yte/flyteidl/gen/pb-go/flyteidl/adminb\006p"
-  "roto3"
+  "dmin.FlyteURLs\"S\n\035GetDynamicNodeWorkflow"
+  "Request\0222\n\002id\030\001 \001(\0132&.flyteidl.core.Node"
+  "ExecutionIdentifier\"`\n\033DynamicNodeWorkfl"
+  "owResponse\022A\n\021compiled_workflow\030\001 \001(\0132&."
+  "flyteidl.core.CompiledWorkflowClosureB=Z"
+  ";github.com/flyteorg/flyte/flyteidl/gen/"
+  "pb-go/flyteidl/adminb\006proto3"
   ;
 ::google::protobuf::internal::DescriptorTable descriptor_table_flyteidl_2fadmin_2fnode_5fexecution_2eproto = {
   false, InitDefaults_flyteidl_2fadmin_2fnode_5fexecution_2eproto, 
   descriptor_table_protodef_flyteidl_2fadmin_2fnode_5fexecution_2eproto,
-  "flyteidl/admin/node_execution.proto", &assign_descriptors_table_flyteidl_2fadmin_2fnode_5fexecution_2eproto, 2725,
+  "flyteidl/admin/node_execution.proto", &assign_descriptors_table_flyteidl_2fadmin_2fnode_5fexecution_2eproto, 2908,
 };
 
 void AddDescriptors_flyteidl_2fadmin_2fnode_5fexecution_2eproto() {
@@ -6668,6 +6728,592 @@ ::google::protobuf::Metadata NodeExecutionGetDataResponse::GetMetadata() const {
 }
 
 
+// ===================================================================
+
+void GetDynamicNodeWorkflowRequest::InitAsDefaultInstance() {
+  ::flyteidl::admin::_GetDynamicNodeWorkflowRequest_default_instance_._instance.get_mutable()->id_ = const_cast< ::flyteidl::core::NodeExecutionIdentifier*>(
+      ::flyteidl::core::NodeExecutionIdentifier::internal_default_instance());
+}
+class GetDynamicNodeWorkflowRequest::HasBitSetters {
+ public:
+  static const ::flyteidl::core::NodeExecutionIdentifier& id(const GetDynamicNodeWorkflowRequest* msg);
+};
+
+const ::flyteidl::core::NodeExecutionIdentifier&
+GetDynamicNodeWorkflowRequest::HasBitSetters::id(const GetDynamicNodeWorkflowRequest* msg) {
+  return *msg->id_;
+}
+void GetDynamicNodeWorkflowRequest::clear_id() {
+  if (GetArenaNoVirtual() == nullptr && id_ != nullptr) {
+    delete id_;
+  }
+  id_ = nullptr;
+}
+#if !defined(_MSC_VER) || _MSC_VER >= 1900
+const int GetDynamicNodeWorkflowRequest::kIdFieldNumber;
+#endif  // !defined(_MSC_VER) || _MSC_VER >= 1900
+
+GetDynamicNodeWorkflowRequest::GetDynamicNodeWorkflowRequest()
+  : ::google::protobuf::Message(), _internal_metadata_(nullptr) {
+  SharedCtor();
+  // @@protoc_insertion_point(constructor:flyteidl.admin.GetDynamicNodeWorkflowRequest)
+}
+GetDynamicNodeWorkflowRequest::GetDynamicNodeWorkflowRequest(const GetDynamicNodeWorkflowRequest& from)
+  : ::google::protobuf::Message(),
+      _internal_metadata_(nullptr) {
+  _internal_metadata_.MergeFrom(from._internal_metadata_);
+  if (from.has_id()) {
+    id_ = new ::flyteidl::core::NodeExecutionIdentifier(*from.id_);
+  } else {
+    id_ = nullptr;
+  }
+  // @@protoc_insertion_point(copy_constructor:flyteidl.admin.GetDynamicNodeWorkflowRequest)
+}
+
+void GetDynamicNodeWorkflowRequest::SharedCtor() {
+  ::google::protobuf::internal::InitSCC(
+      &scc_info_GetDynamicNodeWorkflowRequest_flyteidl_2fadmin_2fnode_5fexecution_2eproto.base);
+  id_ = nullptr;
+}
+
+GetDynamicNodeWorkflowRequest::~GetDynamicNodeWorkflowRequest() {
+  // @@protoc_insertion_point(destructor:flyteidl.admin.GetDynamicNodeWorkflowRequest)
+  SharedDtor();
+}
+
+void GetDynamicNodeWorkflowRequest::SharedDtor() {
+  if (this != internal_default_instance()) delete id_;
+}
+
+void GetDynamicNodeWorkflowRequest::SetCachedSize(int size) const {
+  _cached_size_.Set(size);
+}
+const GetDynamicNodeWorkflowRequest& GetDynamicNodeWorkflowRequest::default_instance() {
+  ::google::protobuf::internal::InitSCC(&::scc_info_GetDynamicNodeWorkflowRequest_flyteidl_2fadmin_2fnode_5fexecution_2eproto.base);
+  return *internal_default_instance();
+}
+
+
+void GetDynamicNodeWorkflowRequest::Clear() {
+// @@protoc_insertion_point(message_clear_start:flyteidl.admin.GetDynamicNodeWorkflowRequest)
+  ::google::protobuf::uint32 cached_has_bits = 0;
+  // Prevent compiler warnings about cached_has_bits being unused
+  (void) cached_has_bits;
+
+  if (GetArenaNoVirtual() == nullptr && id_ != nullptr) {
+    delete id_;
+  }
+  id_ = nullptr;
+  _internal_metadata_.Clear();
+}
+
+#if GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
+const char* GetDynamicNodeWorkflowRequest::_InternalParse(const char* begin, const char* end, void* object,
+                  ::google::protobuf::internal::ParseContext* ctx) {
+  auto msg = static_cast<GetDynamicNodeWorkflowRequest*>(object);
+  ::google::protobuf::int32 size; (void)size;
+  int depth; (void)depth;
+  ::google::protobuf::uint32 tag;
+  ::google::protobuf::internal::ParseFunc parser_till_end; (void)parser_till_end;
+  auto ptr = begin;
+  while (ptr < end) {
+    ptr = ::google::protobuf::io::Parse32(ptr, &tag);
+    GOOGLE_PROTOBUF_PARSER_ASSERT(ptr);
+    switch (tag >> 3) {
+      // .flyteidl.core.NodeExecutionIdentifier id = 1;
+      case 1: {
+        if (static_cast<::google::protobuf::uint8>(tag) != 10) goto handle_unusual;
+        ptr = ::google::protobuf::io::ReadSize(ptr, &size);
+        GOOGLE_PROTOBUF_PARSER_ASSERT(ptr);
+        parser_till_end = ::flyteidl::core::NodeExecutionIdentifier::_InternalParse;
+        object = msg->mutable_id();
+        if (size > end - ptr) goto len_delim_till_end;
+        ptr += size;
+        GOOGLE_PROTOBUF_PARSER_ASSERT(ctx->ParseExactRange(
+            {parser_till_end, object}, ptr - size, ptr));
+        break;
+      }
+      default: {
+      handle_unusual:
+        if ((tag & 7) == 4 || tag == 0) {
+          ctx->EndGroup(tag);
+          return ptr;
+        }
+        auto res = UnknownFieldParse(tag, {_InternalParse, msg},
+          ptr, end, msg->_internal_metadata_.mutable_unknown_fields(), ctx);
+        ptr = res.first;
+        GOOGLE_PROTOBUF_PARSER_ASSERT(ptr != nullptr);
+        if (res.second) return ptr;
+      }
+    }  // switch
+  }  // while
+  return ptr;
+len_delim_till_end:
+  return ctx->StoreAndTailCall(ptr, end, {_InternalParse, msg},
+                               {parser_till_end, object}, size);
+}
+#else  // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
+bool GetDynamicNodeWorkflowRequest::MergePartialFromCodedStream(
+    ::google::protobuf::io::CodedInputStream* input) {
+#define DO_(EXPRESSION) if (!PROTOBUF_PREDICT_TRUE(EXPRESSION)) goto failure
+  ::google::protobuf::uint32 tag;
+  // @@protoc_insertion_point(parse_start:flyteidl.admin.GetDynamicNodeWorkflowRequest)
+  for (;;) {
+    ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
+    tag = p.first;
+    if (!p.second) goto handle_unusual;
+    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
+      // .flyteidl.core.NodeExecutionIdentifier id = 1;
+      case 1: {
+        if (static_cast< ::google::protobuf::uint8>(tag) == (10 & 0xFF)) {
+          DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
+               input, mutable_id()));
+        } else {
+          goto handle_unusual;
+        }
+        break;
+      }
+
+      default: {
+      handle_unusual:
+        if (tag == 0) {
+          goto success;
+        }
+        DO_(::google::protobuf::internal::WireFormat::SkipField(
+              input, tag, _internal_metadata_.mutable_unknown_fields()));
+        break;
+      }
+    }
+  }
+success:
+  // @@protoc_insertion_point(parse_success:flyteidl.admin.GetDynamicNodeWorkflowRequest)
+  return true;
+failure:
+  // @@protoc_insertion_point(parse_failure:flyteidl.admin.GetDynamicNodeWorkflowRequest)
+  return false;
+#undef DO_
+}
+#endif  // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
+
+void GetDynamicNodeWorkflowRequest::SerializeWithCachedSizes(
+    ::google::protobuf::io::CodedOutputStream* output) const {
+  // @@protoc_insertion_point(serialize_start:flyteidl.admin.GetDynamicNodeWorkflowRequest)
+  ::google::protobuf::uint32 cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  // .flyteidl.core.NodeExecutionIdentifier id = 1;
+  if (this->has_id()) {
+    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
+      1, HasBitSetters::id(this), output);
+  }
+
+  if (_internal_metadata_.have_unknown_fields()) {
+    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
+        _internal_metadata_.unknown_fields(), output);
+  }
+  // @@protoc_insertion_point(serialize_end:flyteidl.admin.GetDynamicNodeWorkflowRequest)
+}
+
+::google::protobuf::uint8* GetDynamicNodeWorkflowRequest::InternalSerializeWithCachedSizesToArray(
+    ::google::protobuf::uint8* target) const {
+  // @@protoc_insertion_point(serialize_to_array_start:flyteidl.admin.GetDynamicNodeWorkflowRequest)
+  ::google::protobuf::uint32 cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  // .flyteidl.core.NodeExecutionIdentifier id = 1;
+  if (this->has_id()) {
+    target = ::google::protobuf::internal::WireFormatLite::
+      InternalWriteMessageToArray(
+        1, HasBitSetters::id(this), target);
+  }
+
+  if (_internal_metadata_.have_unknown_fields()) {
+    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
+        _internal_metadata_.unknown_fields(), target);
+  }
+  // @@protoc_insertion_point(serialize_to_array_end:flyteidl.admin.GetDynamicNodeWorkflowRequest)
+  return target;
+}
+
+size_t GetDynamicNodeWorkflowRequest::ByteSizeLong() const {
+// @@protoc_insertion_point(message_byte_size_start:flyteidl.admin.GetDynamicNodeWorkflowRequest)
+  size_t total_size = 0;
+
+  if (_internal_metadata_.have_unknown_fields()) {
+    total_size +=
+      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
+        _internal_metadata_.unknown_fields());
+  }
+  ::google::protobuf::uint32 cached_has_bits = 0;
+  // Prevent compiler warnings about cached_has_bits being unused
+  (void) cached_has_bits;
+
+  // .flyteidl.core.NodeExecutionIdentifier id = 1;
+  if (this->has_id()) {
+    total_size += 1 +
+      ::google::protobuf::internal::WireFormatLite::MessageSize(
+        *id_);
+  }
+
+  int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
+  SetCachedSize(cached_size);
+  return total_size;
+}
+
+void GetDynamicNodeWorkflowRequest::MergeFrom(const ::google::protobuf::Message& from) {
+// @@protoc_insertion_point(generalized_merge_from_start:flyteidl.admin.GetDynamicNodeWorkflowRequest)
+  GOOGLE_DCHECK_NE(&from, this);
+  const GetDynamicNodeWorkflowRequest* source =
+      ::google::protobuf::DynamicCastToGenerated<GetDynamicNodeWorkflowRequest>(
+          &from);
+  if (source == nullptr) {
+  // @@protoc_insertion_point(generalized_merge_from_cast_fail:flyteidl.admin.GetDynamicNodeWorkflowRequest)
+    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
+  } else {
+  // @@protoc_insertion_point(generalized_merge_from_cast_success:flyteidl.admin.GetDynamicNodeWorkflowRequest)
+    MergeFrom(*source);
+  }
+}
+
+void GetDynamicNodeWorkflowRequest::MergeFrom(const GetDynamicNodeWorkflowRequest& from) {
+// @@protoc_insertion_point(class_specific_merge_from_start:flyteidl.admin.GetDynamicNodeWorkflowRequest)
+  GOOGLE_DCHECK_NE(&from, this);
+  _internal_metadata_.MergeFrom(from._internal_metadata_);
+  ::google::protobuf::uint32 cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  if (from.has_id()) {
+    mutable_id()->::flyteidl::core::NodeExecutionIdentifier::MergeFrom(from.id());
+  }
+}
+
+void GetDynamicNodeWorkflowRequest::CopyFrom(const ::google::protobuf::Message& from) {
+// @@protoc_insertion_point(generalized_copy_from_start:flyteidl.admin.GetDynamicNodeWorkflowRequest)
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+void GetDynamicNodeWorkflowRequest::CopyFrom(const GetDynamicNodeWorkflowRequest& from) {
+// @@protoc_insertion_point(class_specific_copy_from_start:flyteidl.admin.GetDynamicNodeWorkflowRequest)
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+bool GetDynamicNodeWorkflowRequest::IsInitialized() const {
+  return true;
+}
+
+void GetDynamicNodeWorkflowRequest::Swap(GetDynamicNodeWorkflowRequest* other) {
+  if (other == this) return;
+  InternalSwap(other);
+}
+void GetDynamicNodeWorkflowRequest::InternalSwap(GetDynamicNodeWorkflowRequest* other) {
+  using std::swap;
+  _internal_metadata_.Swap(&other->_internal_metadata_);
+  swap(id_, other->id_);
+}
+
+::google::protobuf::Metadata GetDynamicNodeWorkflowRequest::GetMetadata() const {
+  ::google::protobuf::internal::AssignDescriptors(&::assign_descriptors_table_flyteidl_2fadmin_2fnode_5fexecution_2eproto);
+  return ::file_level_metadata_flyteidl_2fadmin_2fnode_5fexecution_2eproto[kIndexInFileMessages];
+}
+
+
+// ===================================================================
+
+void DynamicNodeWorkflowResponse::InitAsDefaultInstance() {
+  ::flyteidl::admin::_DynamicNodeWorkflowResponse_default_instance_._instance.get_mutable()->compiled_workflow_ = const_cast< ::flyteidl::core::CompiledWorkflowClosure*>(
+      ::flyteidl::core::CompiledWorkflowClosure::internal_default_instance());
+}
+class DynamicNodeWorkflowResponse::HasBitSetters {
+ public:
+  static const ::flyteidl::core::CompiledWorkflowClosure& compiled_workflow(const DynamicNodeWorkflowResponse* msg);
+};
+
+const ::flyteidl::core::CompiledWorkflowClosure&
+DynamicNodeWorkflowResponse::HasBitSetters::compiled_workflow(const DynamicNodeWorkflowResponse* msg) {
+  return *msg->compiled_workflow_;
+}
+void DynamicNodeWorkflowResponse::clear_compiled_workflow() {
+  if (GetArenaNoVirtual() == nullptr && compiled_workflow_ != nullptr) {
+    delete compiled_workflow_;
+  }
+  compiled_workflow_ = nullptr;
+}
+#if !defined(_MSC_VER) || _MSC_VER >= 1900
+const int DynamicNodeWorkflowResponse::kCompiledWorkflowFieldNumber;
+#endif  // !defined(_MSC_VER) || _MSC_VER >= 1900
+
+DynamicNodeWorkflowResponse::DynamicNodeWorkflowResponse()
+  : ::google::protobuf::Message(), _internal_metadata_(nullptr) {
+  SharedCtor();
+  // @@protoc_insertion_point(constructor:flyteidl.admin.DynamicNodeWorkflowResponse)
+}
+DynamicNodeWorkflowResponse::DynamicNodeWorkflowResponse(const DynamicNodeWorkflowResponse& from)
+  : ::google::protobuf::Message(),
+      _internal_metadata_(nullptr) {
+  _internal_metadata_.MergeFrom(from._internal_metadata_);
+  if (from.has_compiled_workflow()) {
+    compiled_workflow_ = new ::flyteidl::core::CompiledWorkflowClosure(*from.compiled_workflow_);
+  } else {
+    compiled_workflow_ = nullptr;
+  }
+  // @@protoc_insertion_point(copy_constructor:flyteidl.admin.DynamicNodeWorkflowResponse)
+}
+
+void DynamicNodeWorkflowResponse::SharedCtor() {
+  ::google::protobuf::internal::InitSCC(
+      &scc_info_DynamicNodeWorkflowResponse_flyteidl_2fadmin_2fnode_5fexecution_2eproto.base);
+  compiled_workflow_ = nullptr;
+}
+
+DynamicNodeWorkflowResponse::~DynamicNodeWorkflowResponse() {
+  // @@protoc_insertion_point(destructor:flyteidl.admin.DynamicNodeWorkflowResponse)
+  SharedDtor();
+}
+
+void DynamicNodeWorkflowResponse::SharedDtor() {
+  if (this != internal_default_instance()) delete compiled_workflow_;
+}
+
+void DynamicNodeWorkflowResponse::SetCachedSize(int size) const {
+  _cached_size_.Set(size);
+}
+const DynamicNodeWorkflowResponse& DynamicNodeWorkflowResponse::default_instance() {
+  ::google::protobuf::internal::InitSCC(&::scc_info_DynamicNodeWorkflowResponse_flyteidl_2fadmin_2fnode_5fexecution_2eproto.base);
+  return *internal_default_instance();
+}
+
+
+void DynamicNodeWorkflowResponse::Clear() {
+// @@protoc_insertion_point(message_clear_start:flyteidl.admin.DynamicNodeWorkflowResponse)
+  ::google::protobuf::uint32 cached_has_bits = 0;
+  // Prevent compiler warnings about cached_has_bits being unused
+  (void) cached_has_bits;
+
+  if (GetArenaNoVirtual() == nullptr && compiled_workflow_ != nullptr) {
+    delete compiled_workflow_;
+  }
+  compiled_workflow_ = nullptr;
+  _internal_metadata_.Clear();
+}
+
+#if GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
+const char* DynamicNodeWorkflowResponse::_InternalParse(const char* begin, const char* end, void* object,
+                  ::google::protobuf::internal::ParseContext* ctx) {
+  auto msg = static_cast<DynamicNodeWorkflowResponse*>(object);
+  ::google::protobuf::int32 size; (void)size;
+  int depth; (void)depth;
+  ::google::protobuf::uint32 tag;
+  ::google::protobuf::internal::ParseFunc parser_till_end; (void)parser_till_end;
+  auto ptr = begin;
+  while (ptr < end) {
+    ptr = ::google::protobuf::io::Parse32(ptr, &tag);
+    GOOGLE_PROTOBUF_PARSER_ASSERT(ptr);
+    switch (tag >> 3) {
+      // .flyteidl.core.CompiledWorkflowClosure compiled_workflow = 1;
+      case 1: {
+        if (static_cast<::google::protobuf::uint8>(tag) != 10) goto handle_unusual;
+        ptr = ::google::protobuf::io::ReadSize(ptr, &size);
+        GOOGLE_PROTOBUF_PARSER_ASSERT(ptr);
+        parser_till_end = ::flyteidl::core::CompiledWorkflowClosure::_InternalParse;
+        object = msg->mutable_compiled_workflow();
+        if (size > end - ptr) goto len_delim_till_end;
+        ptr += size;
+        GOOGLE_PROTOBUF_PARSER_ASSERT(ctx->ParseExactRange(
+            {parser_till_end, object}, ptr - size, ptr));
+        break;
+      }
+      default: {
+      handle_unusual:
+        if ((tag & 7) == 4 || tag == 0) {
+          ctx->EndGroup(tag);
+          return ptr;
+        }
+        auto res = UnknownFieldParse(tag, {_InternalParse, msg},
+          ptr, end, msg->_internal_metadata_.mutable_unknown_fields(), ctx);
+        ptr = res.first;
+        GOOGLE_PROTOBUF_PARSER_ASSERT(ptr != nullptr);
+        if (res.second) return ptr;
+      }
+    }  // switch
+  }  // while
+  return ptr;
+len_delim_till_end:
+  return ctx->StoreAndTailCall(ptr, end, {_InternalParse, msg},
+                               {parser_till_end, object}, size);
+}
+#else  // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
+bool DynamicNodeWorkflowResponse::MergePartialFromCodedStream(
+    ::google::protobuf::io::CodedInputStream* input) {
+#define DO_(EXPRESSION) if (!PROTOBUF_PREDICT_TRUE(EXPRESSION)) goto failure
+  ::google::protobuf::uint32 tag;
+  // @@protoc_insertion_point(parse_start:flyteidl.admin.DynamicNodeWorkflowResponse)
+  for (;;) {
+    ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
+    tag = p.first;
+    if (!p.second) goto handle_unusual;
+    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
+      // .flyteidl.core.CompiledWorkflowClosure compiled_workflow = 1;
+      case 1: {
+        if (static_cast< ::google::protobuf::uint8>(tag) == (10 & 0xFF)) {
+          DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
+               input, mutable_compiled_workflow()));
+        } else {
+          goto handle_unusual;
+        }
+        break;
+      }
+
+      default: {
+      handle_unusual:
+        if (tag == 0) {
+          goto success;
+        }
+        DO_(::google::protobuf::internal::WireFormat::SkipField(
+              input, tag, _internal_metadata_.mutable_unknown_fields()));
+        break;
+      }
+    }
+  }
+success:
+  // @@protoc_insertion_point(parse_success:flyteidl.admin.DynamicNodeWorkflowResponse)
+  return true;
+failure:
+  // @@protoc_insertion_point(parse_failure:flyteidl.admin.DynamicNodeWorkflowResponse)
+  return false;
+#undef DO_
+}
+#endif  // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
+
+void DynamicNodeWorkflowResponse::SerializeWithCachedSizes(
+    ::google::protobuf::io::CodedOutputStream* output) const {
+  // @@protoc_insertion_point(serialize_start:flyteidl.admin.DynamicNodeWorkflowResponse)
+  ::google::protobuf::uint32 cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  // .flyteidl.core.CompiledWorkflowClosure compiled_workflow = 1;
+  if (this->has_compiled_workflow()) {
+    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
+      1, HasBitSetters::compiled_workflow(this), output);
+  }
+
+  if (_internal_metadata_.have_unknown_fields()) {
+    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
+        _internal_metadata_.unknown_fields(), output);
+  }
+  // @@protoc_insertion_point(serialize_end:flyteidl.admin.DynamicNodeWorkflowResponse)
+}
+
+::google::protobuf::uint8* DynamicNodeWorkflowResponse::InternalSerializeWithCachedSizesToArray(
+    ::google::protobuf::uint8* target) const {
+  // @@protoc_insertion_point(serialize_to_array_start:flyteidl.admin.DynamicNodeWorkflowResponse)
+  ::google::protobuf::uint32 cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  // .flyteidl.core.CompiledWorkflowClosure compiled_workflow = 1;
+  if (this->has_compiled_workflow()) {
+    target = ::google::protobuf::internal::WireFormatLite::
+      InternalWriteMessageToArray(
+        1, HasBitSetters::compiled_workflow(this), target);
+  }
+
+  if (_internal_metadata_.have_unknown_fields()) {
+    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
+        _internal_metadata_.unknown_fields(), target);
+  }
+  // @@protoc_insertion_point(serialize_to_array_end:flyteidl.admin.DynamicNodeWorkflowResponse)
+  return target;
+}
+
+size_t DynamicNodeWorkflowResponse::ByteSizeLong() const {
+// @@protoc_insertion_point(message_byte_size_start:flyteidl.admin.DynamicNodeWorkflowResponse)
+  size_t total_size = 0;
+
+  if (_internal_metadata_.have_unknown_fields()) {
+    total_size +=
+      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
+        _internal_metadata_.unknown_fields());
+  }
+  ::google::protobuf::uint32 cached_has_bits = 0;
+  // Prevent compiler warnings about cached_has_bits being unused
+  (void) cached_has_bits;
+
+  // .flyteidl.core.CompiledWorkflowClosure compiled_workflow = 1;
+  if (this->has_compiled_workflow()) {
+    total_size += 1 +
+      ::google::protobuf::internal::WireFormatLite::MessageSize(
+        *compiled_workflow_);
+  }
+
+  int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
+  SetCachedSize(cached_size);
+  return total_size;
+}
+
+void DynamicNodeWorkflowResponse::MergeFrom(const ::google::protobuf::Message& from) {
+// @@protoc_insertion_point(generalized_merge_from_start:flyteidl.admin.DynamicNodeWorkflowResponse)
+  GOOGLE_DCHECK_NE(&from, this);
+  const DynamicNodeWorkflowResponse* source =
+      ::google::protobuf::DynamicCastToGenerated<DynamicNodeWorkflowResponse>(
+          &from);
+  if (source == nullptr) {
+  // @@protoc_insertion_point(generalized_merge_from_cast_fail:flyteidl.admin.DynamicNodeWorkflowResponse)
+    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
+  } else {
+  // @@protoc_insertion_point(generalized_merge_from_cast_success:flyteidl.admin.DynamicNodeWorkflowResponse)
+    MergeFrom(*source);
+  }
+}
+
+void DynamicNodeWorkflowResponse::MergeFrom(const DynamicNodeWorkflowResponse& from) {
+// @@protoc_insertion_point(class_specific_merge_from_start:flyteidl.admin.DynamicNodeWorkflowResponse)
+  GOOGLE_DCHECK_NE(&from, this);
+  _internal_metadata_.MergeFrom(from._internal_metadata_);
+  ::google::protobuf::uint32 cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  if (from.has_compiled_workflow()) {
+    mutable_compiled_workflow()->::flyteidl::core::CompiledWorkflowClosure::MergeFrom(from.compiled_workflow());
+  }
+}
+
+void DynamicNodeWorkflowResponse::CopyFrom(const ::google::protobuf::Message& from) {
+// @@protoc_insertion_point(generalized_copy_from_start:flyteidl.admin.DynamicNodeWorkflowResponse)
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+void DynamicNodeWorkflowResponse::CopyFrom(const DynamicNodeWorkflowResponse& from) {
+// @@protoc_insertion_point(class_specific_copy_from_start:flyteidl.admin.DynamicNodeWorkflowResponse)
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+bool DynamicNodeWorkflowResponse::IsInitialized() const {
+  return true;
+}
+
+void DynamicNodeWorkflowResponse::Swap(DynamicNodeWorkflowResponse* other) {
+  if (other == this) return;
+  InternalSwap(other);
+}
+void DynamicNodeWorkflowResponse::InternalSwap(DynamicNodeWorkflowResponse* other) {
+  using std::swap;
+  _internal_metadata_.Swap(&other->_internal_metadata_);
+  swap(compiled_workflow_, other->compiled_workflow_);
+}
+
+::google::protobuf::Metadata DynamicNodeWorkflowResponse::GetMetadata() const {
+  ::google::protobuf::internal::AssignDescriptors(&::assign_descriptors_table_flyteidl_2fadmin_2fnode_5fexecution_2eproto);
+  return ::file_level_metadata_flyteidl_2fadmin_2fnode_5fexecution_2eproto[kIndexInFileMessages];
+}
+
+
 // @@protoc_insertion_point(namespace_scope)
 }  // namespace admin
 }  // namespace flyteidl
@@ -6709,6 +7355,12 @@ template<> PROTOBUF_NOINLINE ::flyteidl::admin::NodeExecutionGetDataRequest* Are
 template<> PROTOBUF_NOINLINE ::flyteidl::admin::NodeExecutionGetDataResponse* Arena::CreateMaybeMessage< ::flyteidl::admin::NodeExecutionGetDataResponse >(Arena* arena) {
   return Arena::CreateInternal< ::flyteidl::admin::NodeExecutionGetDataResponse >(arena);
 }
+template<> PROTOBUF_NOINLINE ::flyteidl::admin::GetDynamicNodeWorkflowRequest* Arena::CreateMaybeMessage< ::flyteidl::admin::GetDynamicNodeWorkflowRequest >(Arena* arena) {
+  return Arena::CreateInternal< ::flyteidl::admin::GetDynamicNodeWorkflowRequest >(arena);
+}
+template<> PROTOBUF_NOINLINE ::flyteidl::admin::DynamicNodeWorkflowResponse* Arena::CreateMaybeMessage< ::flyteidl::admin::DynamicNodeWorkflowResponse >(Arena* arena) {
+  return Arena::CreateInternal< ::flyteidl::admin::DynamicNodeWorkflowResponse >(arena);
+}
 }  // namespace protobuf
 }  // namespace google
 
diff --git a/flyteidl/gen/pb-cpp/flyteidl/admin/node_execution.pb.h b/flyteidl/gen/pb-cpp/flyteidl/admin/node_execution.pb.h
index 88da7e3612..15e691830c 100644
--- a/flyteidl/gen/pb-cpp/flyteidl/admin/node_execution.pb.h
+++ b/flyteidl/gen/pb-cpp/flyteidl/admin/node_execution.pb.h
@@ -49,7 +49,7 @@ struct TableStruct_flyteidl_2fadmin_2fnode_5fexecution_2eproto {
     PROTOBUF_SECTION_VARIABLE(protodesc_cold);
   static const ::google::protobuf::internal::AuxillaryParseTableField aux[]
     PROTOBUF_SECTION_VARIABLE(protodesc_cold);
-  static const ::google::protobuf::internal::ParseTable schema[12]
+  static const ::google::protobuf::internal::ParseTable schema[14]
     PROTOBUF_SECTION_VARIABLE(protodesc_cold);
   static const ::google::protobuf::internal::FieldMetadata field_metadata[];
   static const ::google::protobuf::internal::SerializationTable serialization_table[];
@@ -58,9 +58,15 @@ struct TableStruct_flyteidl_2fadmin_2fnode_5fexecution_2eproto {
 void AddDescriptors_flyteidl_2fadmin_2fnode_5fexecution_2eproto();
 namespace flyteidl {
 namespace admin {
+class DynamicNodeWorkflowResponse;
+class DynamicNodeWorkflowResponseDefaultTypeInternal;
+extern DynamicNodeWorkflowResponseDefaultTypeInternal _DynamicNodeWorkflowResponse_default_instance_;
 class DynamicWorkflowNodeMetadata;
 class DynamicWorkflowNodeMetadataDefaultTypeInternal;
 extern DynamicWorkflowNodeMetadataDefaultTypeInternal _DynamicWorkflowNodeMetadata_default_instance_;
+class GetDynamicNodeWorkflowRequest;
+class GetDynamicNodeWorkflowRequestDefaultTypeInternal;
+extern GetDynamicNodeWorkflowRequestDefaultTypeInternal _GetDynamicNodeWorkflowRequest_default_instance_;
 class NodeExecution;
 class NodeExecutionDefaultTypeInternal;
 extern NodeExecutionDefaultTypeInternal _NodeExecution_default_instance_;
@@ -98,7 +104,9 @@ extern WorkflowNodeMetadataDefaultTypeInternal _WorkflowNodeMetadata_default_ins
 }  // namespace flyteidl
 namespace google {
 namespace protobuf {
+template<> ::flyteidl::admin::DynamicNodeWorkflowResponse* Arena::CreateMaybeMessage<::flyteidl::admin::DynamicNodeWorkflowResponse>(Arena*);
 template<> ::flyteidl::admin::DynamicWorkflowNodeMetadata* Arena::CreateMaybeMessage<::flyteidl::admin::DynamicWorkflowNodeMetadata>(Arena*);
+template<> ::flyteidl::admin::GetDynamicNodeWorkflowRequest* Arena::CreateMaybeMessage<::flyteidl::admin::GetDynamicNodeWorkflowRequest>(Arena*);
 template<> ::flyteidl::admin::NodeExecution* Arena::CreateMaybeMessage<::flyteidl::admin::NodeExecution>(Arena*);
 template<> ::flyteidl::admin::NodeExecutionClosure* Arena::CreateMaybeMessage<::flyteidl::admin::NodeExecutionClosure>(Arena*);
 template<> ::flyteidl::admin::NodeExecutionForTaskListRequest* Arena::CreateMaybeMessage<::flyteidl::admin::NodeExecutionForTaskListRequest>(Arena*);
@@ -1956,6 +1964,236 @@ class NodeExecutionGetDataResponse final :
   mutable ::google::protobuf::internal::CachedSize _cached_size_;
   friend struct ::TableStruct_flyteidl_2fadmin_2fnode_5fexecution_2eproto;
 };
+// -------------------------------------------------------------------
+
+class GetDynamicNodeWorkflowRequest final :
+    public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:flyteidl.admin.GetDynamicNodeWorkflowRequest) */ {
+ public:
+  GetDynamicNodeWorkflowRequest();
+  virtual ~GetDynamicNodeWorkflowRequest();
+
+  GetDynamicNodeWorkflowRequest(const GetDynamicNodeWorkflowRequest& from);
+
+  inline GetDynamicNodeWorkflowRequest& operator=(const GetDynamicNodeWorkflowRequest& from) {
+    CopyFrom(from);
+    return *this;
+  }
+  #if LANG_CXX11
+  GetDynamicNodeWorkflowRequest(GetDynamicNodeWorkflowRequest&& from) noexcept
+    : GetDynamicNodeWorkflowRequest() {
+    *this = ::std::move(from);
+  }
+
+  inline GetDynamicNodeWorkflowRequest& operator=(GetDynamicNodeWorkflowRequest&& from) noexcept {
+    if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) {
+      if (this != &from) InternalSwap(&from);
+    } else {
+      CopyFrom(from);
+    }
+    return *this;
+  }
+  #endif
+  static const ::google::protobuf::Descriptor* descriptor() {
+    return default_instance().GetDescriptor();
+  }
+  static const GetDynamicNodeWorkflowRequest& default_instance();
+
+  static void InitAsDefaultInstance();  // FOR INTERNAL USE ONLY
+  static inline const GetDynamicNodeWorkflowRequest* internal_default_instance() {
+    return reinterpret_cast<const GetDynamicNodeWorkflowRequest*>(
+               &_GetDynamicNodeWorkflowRequest_default_instance_);
+  }
+  static constexpr int kIndexInFileMessages =
+    12;
+
+  void Swap(GetDynamicNodeWorkflowRequest* other);
+  friend void swap(GetDynamicNodeWorkflowRequest& a, GetDynamicNodeWorkflowRequest& b) {
+    a.Swap(&b);
+  }
+
+  // implements Message ----------------------------------------------
+
+  inline GetDynamicNodeWorkflowRequest* New() const final {
+    return CreateMaybeMessage<GetDynamicNodeWorkflowRequest>(nullptr);
+  }
+
+  GetDynamicNodeWorkflowRequest* New(::google::protobuf::Arena* arena) const final {
+    return CreateMaybeMessage<GetDynamicNodeWorkflowRequest>(arena);
+  }
+  void CopyFrom(const ::google::protobuf::Message& from) final;
+  void MergeFrom(const ::google::protobuf::Message& from) final;
+  void CopyFrom(const GetDynamicNodeWorkflowRequest& from);
+  void MergeFrom(const GetDynamicNodeWorkflowRequest& from);
+  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
+  bool IsInitialized() const final;
+
+  size_t ByteSizeLong() const final;
+  #if GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
+  static const char* _InternalParse(const char* begin, const char* end, void* object, ::google::protobuf::internal::ParseContext* ctx);
+  ::google::protobuf::internal::ParseFunc _ParseFunc() const final { return _InternalParse; }
+  #else
+  bool MergePartialFromCodedStream(
+      ::google::protobuf::io::CodedInputStream* input) final;
+  #endif  // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
+  void SerializeWithCachedSizes(
+      ::google::protobuf::io::CodedOutputStream* output) const final;
+  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
+      ::google::protobuf::uint8* target) const final;
+  int GetCachedSize() const final { return _cached_size_.Get(); }
+
+  private:
+  void SharedCtor();
+  void SharedDtor();
+  void SetCachedSize(int size) const final;
+  void InternalSwap(GetDynamicNodeWorkflowRequest* other);
+  private:
+  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
+    return nullptr;
+  }
+  inline void* MaybeArenaPtr() const {
+    return nullptr;
+  }
+  public:
+
+  ::google::protobuf::Metadata GetMetadata() const final;
+
+  // nested types ----------------------------------------------------
+
+  // accessors -------------------------------------------------------
+
+  // .flyteidl.core.NodeExecutionIdentifier id = 1;
+  bool has_id() const;
+  void clear_id();
+  static const int kIdFieldNumber = 1;
+  const ::flyteidl::core::NodeExecutionIdentifier& id() const;
+  ::flyteidl::core::NodeExecutionIdentifier* release_id();
+  ::flyteidl::core::NodeExecutionIdentifier* mutable_id();
+  void set_allocated_id(::flyteidl::core::NodeExecutionIdentifier* id);
+
+  // @@protoc_insertion_point(class_scope:flyteidl.admin.GetDynamicNodeWorkflowRequest)
+ private:
+  class HasBitSetters;
+
+  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
+  ::flyteidl::core::NodeExecutionIdentifier* id_;
+  mutable ::google::protobuf::internal::CachedSize _cached_size_;
+  friend struct ::TableStruct_flyteidl_2fadmin_2fnode_5fexecution_2eproto;
+};
+// -------------------------------------------------------------------
+
+class DynamicNodeWorkflowResponse final :
+    public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:flyteidl.admin.DynamicNodeWorkflowResponse) */ {
+ public:
+  DynamicNodeWorkflowResponse();
+  virtual ~DynamicNodeWorkflowResponse();
+
+  DynamicNodeWorkflowResponse(const DynamicNodeWorkflowResponse& from);
+
+  inline DynamicNodeWorkflowResponse& operator=(const DynamicNodeWorkflowResponse& from) {
+    CopyFrom(from);
+    return *this;
+  }
+  #if LANG_CXX11
+  DynamicNodeWorkflowResponse(DynamicNodeWorkflowResponse&& from) noexcept
+    : DynamicNodeWorkflowResponse() {
+    *this = ::std::move(from);
+  }
+
+  inline DynamicNodeWorkflowResponse& operator=(DynamicNodeWorkflowResponse&& from) noexcept {
+    if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) {
+      if (this != &from) InternalSwap(&from);
+    } else {
+      CopyFrom(from);
+    }
+    return *this;
+  }
+  #endif
+  static const ::google::protobuf::Descriptor* descriptor() {
+    return default_instance().GetDescriptor();
+  }
+  static const DynamicNodeWorkflowResponse& default_instance();
+
+  static void InitAsDefaultInstance();  // FOR INTERNAL USE ONLY
+  static inline const DynamicNodeWorkflowResponse* internal_default_instance() {
+    return reinterpret_cast<const DynamicNodeWorkflowResponse*>(
+               &_DynamicNodeWorkflowResponse_default_instance_);
+  }
+  static constexpr int kIndexInFileMessages =
+    13;
+
+  void Swap(DynamicNodeWorkflowResponse* other);
+  friend void swap(DynamicNodeWorkflowResponse& a, DynamicNodeWorkflowResponse& b) {
+    a.Swap(&b);
+  }
+
+  // implements Message ----------------------------------------------
+
+  inline DynamicNodeWorkflowResponse* New() const final {
+    return CreateMaybeMessage<DynamicNodeWorkflowResponse>(nullptr);
+  }
+
+  DynamicNodeWorkflowResponse* New(::google::protobuf::Arena* arena) const final {
+    return CreateMaybeMessage<DynamicNodeWorkflowResponse>(arena);
+  }
+  void CopyFrom(const ::google::protobuf::Message& from) final;
+  void MergeFrom(const ::google::protobuf::Message& from) final;
+  void CopyFrom(const DynamicNodeWorkflowResponse& from);
+  void MergeFrom(const DynamicNodeWorkflowResponse& from);
+  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
+  bool IsInitialized() const final;
+
+  size_t ByteSizeLong() const final;
+  #if GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
+  static const char* _InternalParse(const char* begin, const char* end, void* object, ::google::protobuf::internal::ParseContext* ctx);
+  ::google::protobuf::internal::ParseFunc _ParseFunc() const final { return _InternalParse; }
+  #else
+  bool MergePartialFromCodedStream(
+      ::google::protobuf::io::CodedInputStream* input) final;
+  #endif  // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
+  void SerializeWithCachedSizes(
+      ::google::protobuf::io::CodedOutputStream* output) const final;
+  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
+      ::google::protobuf::uint8* target) const final;
+  int GetCachedSize() const final { return _cached_size_.Get(); }
+
+  private:
+  void SharedCtor();
+  void SharedDtor();
+  void SetCachedSize(int size) const final;
+  void InternalSwap(DynamicNodeWorkflowResponse* other);
+  private:
+  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
+    return nullptr;
+  }
+  inline void* MaybeArenaPtr() const {
+    return nullptr;
+  }
+  public:
+
+  ::google::protobuf::Metadata GetMetadata() const final;
+
+  // nested types ----------------------------------------------------
+
+  // accessors -------------------------------------------------------
+
+  // .flyteidl.core.CompiledWorkflowClosure compiled_workflow = 1;
+  bool has_compiled_workflow() const;
+  void clear_compiled_workflow();
+  static const int kCompiledWorkflowFieldNumber = 1;
+  const ::flyteidl::core::CompiledWorkflowClosure& compiled_workflow() const;
+  ::flyteidl::core::CompiledWorkflowClosure* release_compiled_workflow();
+  ::flyteidl::core::CompiledWorkflowClosure* mutable_compiled_workflow();
+  void set_allocated_compiled_workflow(::flyteidl::core::CompiledWorkflowClosure* compiled_workflow);
+
+  // @@protoc_insertion_point(class_scope:flyteidl.admin.DynamicNodeWorkflowResponse)
+ private:
+  class HasBitSetters;
+
+  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
+  ::flyteidl::core::CompiledWorkflowClosure* compiled_workflow_;
+  mutable ::google::protobuf::internal::CachedSize _cached_size_;
+  friend struct ::TableStruct_flyteidl_2fadmin_2fnode_5fexecution_2eproto;
+};
 // ===================================================================
 
 
@@ -4147,6 +4385,104 @@ inline void NodeExecutionGetDataResponse::set_allocated_flyte_urls(::flyteidl::a
   // @@protoc_insertion_point(field_set_allocated:flyteidl.admin.NodeExecutionGetDataResponse.flyte_urls)
 }
 
+// -------------------------------------------------------------------
+
+// GetDynamicNodeWorkflowRequest
+
+// .flyteidl.core.NodeExecutionIdentifier id = 1;
+inline bool GetDynamicNodeWorkflowRequest::has_id() const {
+  return this != internal_default_instance() && id_ != nullptr;
+}
+inline const ::flyteidl::core::NodeExecutionIdentifier& GetDynamicNodeWorkflowRequest::id() const {
+  const ::flyteidl::core::NodeExecutionIdentifier* p = id_;
+  // @@protoc_insertion_point(field_get:flyteidl.admin.GetDynamicNodeWorkflowRequest.id)
+  return p != nullptr ? *p : *reinterpret_cast<const ::flyteidl::core::NodeExecutionIdentifier*>(
+      &::flyteidl::core::_NodeExecutionIdentifier_default_instance_);
+}
+inline ::flyteidl::core::NodeExecutionIdentifier* GetDynamicNodeWorkflowRequest::release_id() {
+  // @@protoc_insertion_point(field_release:flyteidl.admin.GetDynamicNodeWorkflowRequest.id)
+  
+  ::flyteidl::core::NodeExecutionIdentifier* temp = id_;
+  id_ = nullptr;
+  return temp;
+}
+inline ::flyteidl::core::NodeExecutionIdentifier* GetDynamicNodeWorkflowRequest::mutable_id() {
+  
+  if (id_ == nullptr) {
+    auto* p = CreateMaybeMessage<::flyteidl::core::NodeExecutionIdentifier>(GetArenaNoVirtual());
+    id_ = p;
+  }
+  // @@protoc_insertion_point(field_mutable:flyteidl.admin.GetDynamicNodeWorkflowRequest.id)
+  return id_;
+}
+inline void GetDynamicNodeWorkflowRequest::set_allocated_id(::flyteidl::core::NodeExecutionIdentifier* id) {
+  ::google::protobuf::Arena* message_arena = GetArenaNoVirtual();
+  if (message_arena == nullptr) {
+    delete reinterpret_cast< ::google::protobuf::MessageLite*>(id_);
+  }
+  if (id) {
+    ::google::protobuf::Arena* submessage_arena = nullptr;
+    if (message_arena != submessage_arena) {
+      id = ::google::protobuf::internal::GetOwnedMessage(
+          message_arena, id, submessage_arena);
+    }
+    
+  } else {
+    
+  }
+  id_ = id;
+  // @@protoc_insertion_point(field_set_allocated:flyteidl.admin.GetDynamicNodeWorkflowRequest.id)
+}
+
+// -------------------------------------------------------------------
+
+// DynamicNodeWorkflowResponse
+
+// .flyteidl.core.CompiledWorkflowClosure compiled_workflow = 1;
+inline bool DynamicNodeWorkflowResponse::has_compiled_workflow() const {
+  return this != internal_default_instance() && compiled_workflow_ != nullptr;
+}
+inline const ::flyteidl::core::CompiledWorkflowClosure& DynamicNodeWorkflowResponse::compiled_workflow() const {
+  const ::flyteidl::core::CompiledWorkflowClosure* p = compiled_workflow_;
+  // @@protoc_insertion_point(field_get:flyteidl.admin.DynamicNodeWorkflowResponse.compiled_workflow)
+  return p != nullptr ? *p : *reinterpret_cast<const ::flyteidl::core::CompiledWorkflowClosure*>(
+      &::flyteidl::core::_CompiledWorkflowClosure_default_instance_);
+}
+inline ::flyteidl::core::CompiledWorkflowClosure* DynamicNodeWorkflowResponse::release_compiled_workflow() {
+  // @@protoc_insertion_point(field_release:flyteidl.admin.DynamicNodeWorkflowResponse.compiled_workflow)
+  
+  ::flyteidl::core::CompiledWorkflowClosure* temp = compiled_workflow_;
+  compiled_workflow_ = nullptr;
+  return temp;
+}
+inline ::flyteidl::core::CompiledWorkflowClosure* DynamicNodeWorkflowResponse::mutable_compiled_workflow() {
+  
+  if (compiled_workflow_ == nullptr) {
+    auto* p = CreateMaybeMessage<::flyteidl::core::CompiledWorkflowClosure>(GetArenaNoVirtual());
+    compiled_workflow_ = p;
+  }
+  // @@protoc_insertion_point(field_mutable:flyteidl.admin.DynamicNodeWorkflowResponse.compiled_workflow)
+  return compiled_workflow_;
+}
+inline void DynamicNodeWorkflowResponse::set_allocated_compiled_workflow(::flyteidl::core::CompiledWorkflowClosure* compiled_workflow) {
+  ::google::protobuf::Arena* message_arena = GetArenaNoVirtual();
+  if (message_arena == nullptr) {
+    delete reinterpret_cast< ::google::protobuf::MessageLite*>(compiled_workflow_);
+  }
+  if (compiled_workflow) {
+    ::google::protobuf::Arena* submessage_arena = nullptr;
+    if (message_arena != submessage_arena) {
+      compiled_workflow = ::google::protobuf::internal::GetOwnedMessage(
+          message_arena, compiled_workflow, submessage_arena);
+    }
+    
+  } else {
+    
+  }
+  compiled_workflow_ = compiled_workflow;
+  // @@protoc_insertion_point(field_set_allocated:flyteidl.admin.DynamicNodeWorkflowResponse.compiled_workflow)
+}
+
 #ifdef __GNUC__
   #pragma GCC diagnostic pop
 #endif  // __GNUC__
@@ -4172,6 +4508,10 @@ inline void NodeExecutionGetDataResponse::set_allocated_flyte_urls(::flyteidl::a
 
 // -------------------------------------------------------------------
 
+// -------------------------------------------------------------------
+
+// -------------------------------------------------------------------
+
 
 // @@protoc_insertion_point(namespace_scope)
 
diff --git a/flyteidl/gen/pb-cpp/flyteidl/admin/workflow.pb.cc b/flyteidl/gen/pb-cpp/flyteidl/admin/workflow.pb.cc
index 3d29d9a897..f3b09dede9 100644
--- a/flyteidl/gen/pb-cpp/flyteidl/admin/workflow.pb.cc
+++ b/flyteidl/gen/pb-cpp/flyteidl/admin/workflow.pb.cc
@@ -24,7 +24,6 @@ extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fadmin_2fworkflow_2eproto ::google::pr
 extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fadmin_2fworkflow_2eproto ::google::protobuf::internal::SCCInfo<2> scc_info_Workflow_flyteidl_2fadmin_2fworkflow_2eproto;
 extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2fcompiler_2eproto ::google::protobuf::internal::SCCInfo<2> scc_info_CompiledWorkflowClosure_flyteidl_2fcore_2fcompiler_2eproto;
 extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2fidentifier_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_Identifier_flyteidl_2fcore_2fidentifier_2eproto;
-extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2fidentifier_2eproto ::google::protobuf::internal::SCCInfo<1> scc_info_NodeExecutionIdentifier_flyteidl_2fcore_2fidentifier_2eproto;
 extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2fworkflow_2eproto ::google::protobuf::internal::SCCInfo<6> scc_info_WorkflowTemplate_flyteidl_2fcore_2fworkflow_2eproto;
 extern PROTOBUF_INTERNAL_EXPORT_google_2fprotobuf_2ftimestamp_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_Timestamp_google_2fprotobuf_2ftimestamp_2eproto;
 namespace flyteidl {
@@ -67,14 +66,6 @@ class CreateWorkflowFailureReasonDefaultTypeInternal {
   const ::flyteidl::admin::WorkflowErrorExistsDifferentStructure* exists_different_structure_;
   const ::flyteidl::admin::WorkflowErrorExistsIdenticalStructure* exists_identical_structure_;
 } _CreateWorkflowFailureReason_default_instance_;
-class GetDynamicNodeWorkflowRequestDefaultTypeInternal {
- public:
-  ::google::protobuf::internal::ExplicitlyConstructed<GetDynamicNodeWorkflowRequest> _instance;
-} _GetDynamicNodeWorkflowRequest_default_instance_;
-class DynamicNodeWorkflowResponseDefaultTypeInternal {
- public:
-  ::google::protobuf::internal::ExplicitlyConstructed<DynamicNodeWorkflowResponse> _instance;
-} _DynamicNodeWorkflowResponse_default_instance_;
 }  // namespace admin
 }  // namespace flyteidl
 static void InitDefaultsWorkflowCreateRequest_flyteidl_2fadmin_2fworkflow_2eproto() {
@@ -216,36 +207,6 @@ ::google::protobuf::internal::SCCInfo<2> scc_info_CreateWorkflowFailureReason_fl
       &scc_info_WorkflowErrorExistsDifferentStructure_flyteidl_2fadmin_2fworkflow_2eproto.base,
       &scc_info_WorkflowErrorExistsIdenticalStructure_flyteidl_2fadmin_2fworkflow_2eproto.base,}};
 
-static void InitDefaultsGetDynamicNodeWorkflowRequest_flyteidl_2fadmin_2fworkflow_2eproto() {
-  GOOGLE_PROTOBUF_VERIFY_VERSION;
-
-  {
-    void* ptr = &::flyteidl::admin::_GetDynamicNodeWorkflowRequest_default_instance_;
-    new (ptr) ::flyteidl::admin::GetDynamicNodeWorkflowRequest();
-    ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
-  }
-  ::flyteidl::admin::GetDynamicNodeWorkflowRequest::InitAsDefaultInstance();
-}
-
-::google::protobuf::internal::SCCInfo<1> scc_info_GetDynamicNodeWorkflowRequest_flyteidl_2fadmin_2fworkflow_2eproto =
-    {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 1, InitDefaultsGetDynamicNodeWorkflowRequest_flyteidl_2fadmin_2fworkflow_2eproto}, {
-      &scc_info_NodeExecutionIdentifier_flyteidl_2fcore_2fidentifier_2eproto.base,}};
-
-static void InitDefaultsDynamicNodeWorkflowResponse_flyteidl_2fadmin_2fworkflow_2eproto() {
-  GOOGLE_PROTOBUF_VERIFY_VERSION;
-
-  {
-    void* ptr = &::flyteidl::admin::_DynamicNodeWorkflowResponse_default_instance_;
-    new (ptr) ::flyteidl::admin::DynamicNodeWorkflowResponse();
-    ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
-  }
-  ::flyteidl::admin::DynamicNodeWorkflowResponse::InitAsDefaultInstance();
-}
-
-::google::protobuf::internal::SCCInfo<1> scc_info_DynamicNodeWorkflowResponse_flyteidl_2fadmin_2fworkflow_2eproto =
-    {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 1, InitDefaultsDynamicNodeWorkflowResponse_flyteidl_2fadmin_2fworkflow_2eproto}, {
-      &scc_info_CompiledWorkflowClosure_flyteidl_2fcore_2fcompiler_2eproto.base,}};
-
 void InitDefaults_flyteidl_2fadmin_2fworkflow_2eproto() {
   ::google::protobuf::internal::InitSCC(&scc_info_WorkflowCreateRequest_flyteidl_2fadmin_2fworkflow_2eproto.base);
   ::google::protobuf::internal::InitSCC(&scc_info_WorkflowCreateResponse_flyteidl_2fadmin_2fworkflow_2eproto.base);
@@ -256,11 +217,9 @@ void InitDefaults_flyteidl_2fadmin_2fworkflow_2eproto() {
   ::google::protobuf::internal::InitSCC(&scc_info_WorkflowErrorExistsDifferentStructure_flyteidl_2fadmin_2fworkflow_2eproto.base);
   ::google::protobuf::internal::InitSCC(&scc_info_WorkflowErrorExistsIdenticalStructure_flyteidl_2fadmin_2fworkflow_2eproto.base);
   ::google::protobuf::internal::InitSCC(&scc_info_CreateWorkflowFailureReason_flyteidl_2fadmin_2fworkflow_2eproto.base);
-  ::google::protobuf::internal::InitSCC(&scc_info_GetDynamicNodeWorkflowRequest_flyteidl_2fadmin_2fworkflow_2eproto.base);
-  ::google::protobuf::internal::InitSCC(&scc_info_DynamicNodeWorkflowResponse_flyteidl_2fadmin_2fworkflow_2eproto.base);
 }
 
-::google::protobuf::Metadata file_level_metadata_flyteidl_2fadmin_2fworkflow_2eproto[11];
+::google::protobuf::Metadata file_level_metadata_flyteidl_2fadmin_2fworkflow_2eproto[9];
 constexpr ::google::protobuf::EnumDescriptor const** file_level_enum_descriptors_flyteidl_2fadmin_2fworkflow_2eproto = nullptr;
 constexpr ::google::protobuf::ServiceDescriptor const** file_level_service_descriptors_flyteidl_2fadmin_2fworkflow_2eproto = nullptr;
 
@@ -327,18 +286,6 @@ const ::google::protobuf::uint32 TableStruct_flyteidl_2fadmin_2fworkflow_2eproto
   offsetof(::flyteidl::admin::CreateWorkflowFailureReasonDefaultTypeInternal, exists_different_structure_),
   offsetof(::flyteidl::admin::CreateWorkflowFailureReasonDefaultTypeInternal, exists_identical_structure_),
   PROTOBUF_FIELD_OFFSET(::flyteidl::admin::CreateWorkflowFailureReason, reason_),
-  ~0u,  // no _has_bits_
-  PROTOBUF_FIELD_OFFSET(::flyteidl::admin::GetDynamicNodeWorkflowRequest, _internal_metadata_),
-  ~0u,  // no _extensions_
-  ~0u,  // no _oneof_case_
-  ~0u,  // no _weak_field_map_
-  PROTOBUF_FIELD_OFFSET(::flyteidl::admin::GetDynamicNodeWorkflowRequest, id_),
-  ~0u,  // no _has_bits_
-  PROTOBUF_FIELD_OFFSET(::flyteidl::admin::DynamicNodeWorkflowResponse, _internal_metadata_),
-  ~0u,  // no _extensions_
-  ~0u,  // no _oneof_case_
-  ~0u,  // no _weak_field_map_
-  PROTOBUF_FIELD_OFFSET(::flyteidl::admin::DynamicNodeWorkflowResponse, compiled_workflow_),
 };
 static const ::google::protobuf::internal::MigrationSchema schemas[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = {
   { 0, -1, sizeof(::flyteidl::admin::WorkflowCreateRequest)},
@@ -350,8 +297,6 @@ static const ::google::protobuf::internal::MigrationSchema schemas[] PROTOBUF_SE
   { 42, -1, sizeof(::flyteidl::admin::WorkflowErrorExistsDifferentStructure)},
   { 48, -1, sizeof(::flyteidl::admin::WorkflowErrorExistsIdenticalStructure)},
   { 54, -1, sizeof(::flyteidl::admin::CreateWorkflowFailureReason)},
-  { 62, -1, sizeof(::flyteidl::admin::GetDynamicNodeWorkflowRequest)},
-  { 68, -1, sizeof(::flyteidl::admin::DynamicNodeWorkflowResponse)},
 };
 
 static ::google::protobuf::Message const * const file_default_instances[] = {
@@ -364,14 +309,12 @@ static ::google::protobuf::Message const * const file_default_instances[] = {
   reinterpret_cast<const ::google::protobuf::Message*>(&::flyteidl::admin::_WorkflowErrorExistsDifferentStructure_default_instance_),
   reinterpret_cast<const ::google::protobuf::Message*>(&::flyteidl::admin::_WorkflowErrorExistsIdenticalStructure_default_instance_),
   reinterpret_cast<const ::google::protobuf::Message*>(&::flyteidl::admin::_CreateWorkflowFailureReason_default_instance_),
-  reinterpret_cast<const ::google::protobuf::Message*>(&::flyteidl::admin::_GetDynamicNodeWorkflowRequest_default_instance_),
-  reinterpret_cast<const ::google::protobuf::Message*>(&::flyteidl::admin::_DynamicNodeWorkflowResponse_default_instance_),
 };
 
 ::google::protobuf::internal::AssignDescriptorsTable assign_descriptors_table_flyteidl_2fadmin_2fworkflow_2eproto = {
   {}, AddDescriptors_flyteidl_2fadmin_2fworkflow_2eproto, "flyteidl/admin/workflow.proto", schemas,
   file_default_instances, TableStruct_flyteidl_2fadmin_2fworkflow_2eproto::offsets,
-  file_level_metadata_flyteidl_2fadmin_2fworkflow_2eproto, 11, file_level_enum_descriptors_flyteidl_2fadmin_2fworkflow_2eproto, file_level_service_descriptors_flyteidl_2fadmin_2fworkflow_2eproto,
+  file_level_metadata_flyteidl_2fadmin_2fworkflow_2eproto, 9, file_level_enum_descriptors_flyteidl_2fadmin_2fworkflow_2eproto, file_level_service_descriptors_flyteidl_2fadmin_2fworkflow_2eproto,
 };
 
 const char descriptor_table_protodef_flyteidl_2fadmin_2fworkflow_2eproto[] =
@@ -406,18 +349,14 @@ const char descriptor_table_protodef_flyteidl_2fadmin_2fworkflow_2eproto[] =
   "ErrorExistsDifferentStructureH\000\022[\n\032exist"
   "s_identical_structure\030\002 \001(\01325.flyteidl.a"
   "dmin.WorkflowErrorExistsIdenticalStructu"
-  "reH\000B\010\n\006reason\"S\n\035GetDynamicNodeWorkflow"
-  "Request\0222\n\002id\030\001 \001(\0132&.flyteidl.core.Node"
-  "ExecutionIdentifier\"`\n\033DynamicNodeWorkfl"
-  "owResponse\022A\n\021compiled_workflow\030\001 \001(\0132&."
-  "flyteidl.core.CompiledWorkflowClosureB=Z"
-  ";github.com/flyteorg/flyte/flyteidl/gen/"
-  "pb-go/flyteidl/adminb\006proto3"
+  "reH\000B\010\n\006reasonB=Z;github.com/flyteorg/fl"
+  "yte/flyteidl/gen/pb-go/flyteidl/adminb\006p"
+  "roto3"
   ;
 ::google::protobuf::internal::DescriptorTable descriptor_table_flyteidl_2fadmin_2fworkflow_2eproto = {
   false, InitDefaults_flyteidl_2fadmin_2fworkflow_2eproto, 
   descriptor_table_protodef_flyteidl_2fadmin_2fworkflow_2eproto,
-  "flyteidl/admin/workflow.proto", &assign_descriptors_table_flyteidl_2fadmin_2fworkflow_2eproto, 1508,
+  "flyteidl/admin/workflow.proto", &assign_descriptors_table_flyteidl_2fadmin_2fworkflow_2eproto, 1325,
 };
 
 void AddDescriptors_flyteidl_2fadmin_2fworkflow_2eproto() {
@@ -3595,592 +3534,6 @@ ::google::protobuf::Metadata CreateWorkflowFailureReason::GetMetadata() const {
 }
 
 
-// ===================================================================
-
-void GetDynamicNodeWorkflowRequest::InitAsDefaultInstance() {
-  ::flyteidl::admin::_GetDynamicNodeWorkflowRequest_default_instance_._instance.get_mutable()->id_ = const_cast< ::flyteidl::core::NodeExecutionIdentifier*>(
-      ::flyteidl::core::NodeExecutionIdentifier::internal_default_instance());
-}
-class GetDynamicNodeWorkflowRequest::HasBitSetters {
- public:
-  static const ::flyteidl::core::NodeExecutionIdentifier& id(const GetDynamicNodeWorkflowRequest* msg);
-};
-
-const ::flyteidl::core::NodeExecutionIdentifier&
-GetDynamicNodeWorkflowRequest::HasBitSetters::id(const GetDynamicNodeWorkflowRequest* msg) {
-  return *msg->id_;
-}
-void GetDynamicNodeWorkflowRequest::clear_id() {
-  if (GetArenaNoVirtual() == nullptr && id_ != nullptr) {
-    delete id_;
-  }
-  id_ = nullptr;
-}
-#if !defined(_MSC_VER) || _MSC_VER >= 1900
-const int GetDynamicNodeWorkflowRequest::kIdFieldNumber;
-#endif  // !defined(_MSC_VER) || _MSC_VER >= 1900
-
-GetDynamicNodeWorkflowRequest::GetDynamicNodeWorkflowRequest()
-  : ::google::protobuf::Message(), _internal_metadata_(nullptr) {
-  SharedCtor();
-  // @@protoc_insertion_point(constructor:flyteidl.admin.GetDynamicNodeWorkflowRequest)
-}
-GetDynamicNodeWorkflowRequest::GetDynamicNodeWorkflowRequest(const GetDynamicNodeWorkflowRequest& from)
-  : ::google::protobuf::Message(),
-      _internal_metadata_(nullptr) {
-  _internal_metadata_.MergeFrom(from._internal_metadata_);
-  if (from.has_id()) {
-    id_ = new ::flyteidl::core::NodeExecutionIdentifier(*from.id_);
-  } else {
-    id_ = nullptr;
-  }
-  // @@protoc_insertion_point(copy_constructor:flyteidl.admin.GetDynamicNodeWorkflowRequest)
-}
-
-void GetDynamicNodeWorkflowRequest::SharedCtor() {
-  ::google::protobuf::internal::InitSCC(
-      &scc_info_GetDynamicNodeWorkflowRequest_flyteidl_2fadmin_2fworkflow_2eproto.base);
-  id_ = nullptr;
-}
-
-GetDynamicNodeWorkflowRequest::~GetDynamicNodeWorkflowRequest() {
-  // @@protoc_insertion_point(destructor:flyteidl.admin.GetDynamicNodeWorkflowRequest)
-  SharedDtor();
-}
-
-void GetDynamicNodeWorkflowRequest::SharedDtor() {
-  if (this != internal_default_instance()) delete id_;
-}
-
-void GetDynamicNodeWorkflowRequest::SetCachedSize(int size) const {
-  _cached_size_.Set(size);
-}
-const GetDynamicNodeWorkflowRequest& GetDynamicNodeWorkflowRequest::default_instance() {
-  ::google::protobuf::internal::InitSCC(&::scc_info_GetDynamicNodeWorkflowRequest_flyteidl_2fadmin_2fworkflow_2eproto.base);
-  return *internal_default_instance();
-}
-
-
-void GetDynamicNodeWorkflowRequest::Clear() {
-// @@protoc_insertion_point(message_clear_start:flyteidl.admin.GetDynamicNodeWorkflowRequest)
-  ::google::protobuf::uint32 cached_has_bits = 0;
-  // Prevent compiler warnings about cached_has_bits being unused
-  (void) cached_has_bits;
-
-  if (GetArenaNoVirtual() == nullptr && id_ != nullptr) {
-    delete id_;
-  }
-  id_ = nullptr;
-  _internal_metadata_.Clear();
-}
-
-#if GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
-const char* GetDynamicNodeWorkflowRequest::_InternalParse(const char* begin, const char* end, void* object,
-                  ::google::protobuf::internal::ParseContext* ctx) {
-  auto msg = static_cast<GetDynamicNodeWorkflowRequest*>(object);
-  ::google::protobuf::int32 size; (void)size;
-  int depth; (void)depth;
-  ::google::protobuf::uint32 tag;
-  ::google::protobuf::internal::ParseFunc parser_till_end; (void)parser_till_end;
-  auto ptr = begin;
-  while (ptr < end) {
-    ptr = ::google::protobuf::io::Parse32(ptr, &tag);
-    GOOGLE_PROTOBUF_PARSER_ASSERT(ptr);
-    switch (tag >> 3) {
-      // .flyteidl.core.NodeExecutionIdentifier id = 1;
-      case 1: {
-        if (static_cast<::google::protobuf::uint8>(tag) != 10) goto handle_unusual;
-        ptr = ::google::protobuf::io::ReadSize(ptr, &size);
-        GOOGLE_PROTOBUF_PARSER_ASSERT(ptr);
-        parser_till_end = ::flyteidl::core::NodeExecutionIdentifier::_InternalParse;
-        object = msg->mutable_id();
-        if (size > end - ptr) goto len_delim_till_end;
-        ptr += size;
-        GOOGLE_PROTOBUF_PARSER_ASSERT(ctx->ParseExactRange(
-            {parser_till_end, object}, ptr - size, ptr));
-        break;
-      }
-      default: {
-      handle_unusual:
-        if ((tag & 7) == 4 || tag == 0) {
-          ctx->EndGroup(tag);
-          return ptr;
-        }
-        auto res = UnknownFieldParse(tag, {_InternalParse, msg},
-          ptr, end, msg->_internal_metadata_.mutable_unknown_fields(), ctx);
-        ptr = res.first;
-        GOOGLE_PROTOBUF_PARSER_ASSERT(ptr != nullptr);
-        if (res.second) return ptr;
-      }
-    }  // switch
-  }  // while
-  return ptr;
-len_delim_till_end:
-  return ctx->StoreAndTailCall(ptr, end, {_InternalParse, msg},
-                               {parser_till_end, object}, size);
-}
-#else  // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
-bool GetDynamicNodeWorkflowRequest::MergePartialFromCodedStream(
-    ::google::protobuf::io::CodedInputStream* input) {
-#define DO_(EXPRESSION) if (!PROTOBUF_PREDICT_TRUE(EXPRESSION)) goto failure
-  ::google::protobuf::uint32 tag;
-  // @@protoc_insertion_point(parse_start:flyteidl.admin.GetDynamicNodeWorkflowRequest)
-  for (;;) {
-    ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
-    tag = p.first;
-    if (!p.second) goto handle_unusual;
-    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
-      // .flyteidl.core.NodeExecutionIdentifier id = 1;
-      case 1: {
-        if (static_cast< ::google::protobuf::uint8>(tag) == (10 & 0xFF)) {
-          DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
-               input, mutable_id()));
-        } else {
-          goto handle_unusual;
-        }
-        break;
-      }
-
-      default: {
-      handle_unusual:
-        if (tag == 0) {
-          goto success;
-        }
-        DO_(::google::protobuf::internal::WireFormat::SkipField(
-              input, tag, _internal_metadata_.mutable_unknown_fields()));
-        break;
-      }
-    }
-  }
-success:
-  // @@protoc_insertion_point(parse_success:flyteidl.admin.GetDynamicNodeWorkflowRequest)
-  return true;
-failure:
-  // @@protoc_insertion_point(parse_failure:flyteidl.admin.GetDynamicNodeWorkflowRequest)
-  return false;
-#undef DO_
-}
-#endif  // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
-
-void GetDynamicNodeWorkflowRequest::SerializeWithCachedSizes(
-    ::google::protobuf::io::CodedOutputStream* output) const {
-  // @@protoc_insertion_point(serialize_start:flyteidl.admin.GetDynamicNodeWorkflowRequest)
-  ::google::protobuf::uint32 cached_has_bits = 0;
-  (void) cached_has_bits;
-
-  // .flyteidl.core.NodeExecutionIdentifier id = 1;
-  if (this->has_id()) {
-    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
-      1, HasBitSetters::id(this), output);
-  }
-
-  if (_internal_metadata_.have_unknown_fields()) {
-    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
-        _internal_metadata_.unknown_fields(), output);
-  }
-  // @@protoc_insertion_point(serialize_end:flyteidl.admin.GetDynamicNodeWorkflowRequest)
-}
-
-::google::protobuf::uint8* GetDynamicNodeWorkflowRequest::InternalSerializeWithCachedSizesToArray(
-    ::google::protobuf::uint8* target) const {
-  // @@protoc_insertion_point(serialize_to_array_start:flyteidl.admin.GetDynamicNodeWorkflowRequest)
-  ::google::protobuf::uint32 cached_has_bits = 0;
-  (void) cached_has_bits;
-
-  // .flyteidl.core.NodeExecutionIdentifier id = 1;
-  if (this->has_id()) {
-    target = ::google::protobuf::internal::WireFormatLite::
-      InternalWriteMessageToArray(
-        1, HasBitSetters::id(this), target);
-  }
-
-  if (_internal_metadata_.have_unknown_fields()) {
-    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
-        _internal_metadata_.unknown_fields(), target);
-  }
-  // @@protoc_insertion_point(serialize_to_array_end:flyteidl.admin.GetDynamicNodeWorkflowRequest)
-  return target;
-}
-
-size_t GetDynamicNodeWorkflowRequest::ByteSizeLong() const {
-// @@protoc_insertion_point(message_byte_size_start:flyteidl.admin.GetDynamicNodeWorkflowRequest)
-  size_t total_size = 0;
-
-  if (_internal_metadata_.have_unknown_fields()) {
-    total_size +=
-      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
-        _internal_metadata_.unknown_fields());
-  }
-  ::google::protobuf::uint32 cached_has_bits = 0;
-  // Prevent compiler warnings about cached_has_bits being unused
-  (void) cached_has_bits;
-
-  // .flyteidl.core.NodeExecutionIdentifier id = 1;
-  if (this->has_id()) {
-    total_size += 1 +
-      ::google::protobuf::internal::WireFormatLite::MessageSize(
-        *id_);
-  }
-
-  int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
-  SetCachedSize(cached_size);
-  return total_size;
-}
-
-void GetDynamicNodeWorkflowRequest::MergeFrom(const ::google::protobuf::Message& from) {
-// @@protoc_insertion_point(generalized_merge_from_start:flyteidl.admin.GetDynamicNodeWorkflowRequest)
-  GOOGLE_DCHECK_NE(&from, this);
-  const GetDynamicNodeWorkflowRequest* source =
-      ::google::protobuf::DynamicCastToGenerated<GetDynamicNodeWorkflowRequest>(
-          &from);
-  if (source == nullptr) {
-  // @@protoc_insertion_point(generalized_merge_from_cast_fail:flyteidl.admin.GetDynamicNodeWorkflowRequest)
-    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
-  } else {
-  // @@protoc_insertion_point(generalized_merge_from_cast_success:flyteidl.admin.GetDynamicNodeWorkflowRequest)
-    MergeFrom(*source);
-  }
-}
-
-void GetDynamicNodeWorkflowRequest::MergeFrom(const GetDynamicNodeWorkflowRequest& from) {
-// @@protoc_insertion_point(class_specific_merge_from_start:flyteidl.admin.GetDynamicNodeWorkflowRequest)
-  GOOGLE_DCHECK_NE(&from, this);
-  _internal_metadata_.MergeFrom(from._internal_metadata_);
-  ::google::protobuf::uint32 cached_has_bits = 0;
-  (void) cached_has_bits;
-
-  if (from.has_id()) {
-    mutable_id()->::flyteidl::core::NodeExecutionIdentifier::MergeFrom(from.id());
-  }
-}
-
-void GetDynamicNodeWorkflowRequest::CopyFrom(const ::google::protobuf::Message& from) {
-// @@protoc_insertion_point(generalized_copy_from_start:flyteidl.admin.GetDynamicNodeWorkflowRequest)
-  if (&from == this) return;
-  Clear();
-  MergeFrom(from);
-}
-
-void GetDynamicNodeWorkflowRequest::CopyFrom(const GetDynamicNodeWorkflowRequest& from) {
-// @@protoc_insertion_point(class_specific_copy_from_start:flyteidl.admin.GetDynamicNodeWorkflowRequest)
-  if (&from == this) return;
-  Clear();
-  MergeFrom(from);
-}
-
-bool GetDynamicNodeWorkflowRequest::IsInitialized() const {
-  return true;
-}
-
-void GetDynamicNodeWorkflowRequest::Swap(GetDynamicNodeWorkflowRequest* other) {
-  if (other == this) return;
-  InternalSwap(other);
-}
-void GetDynamicNodeWorkflowRequest::InternalSwap(GetDynamicNodeWorkflowRequest* other) {
-  using std::swap;
-  _internal_metadata_.Swap(&other->_internal_metadata_);
-  swap(id_, other->id_);
-}
-
-::google::protobuf::Metadata GetDynamicNodeWorkflowRequest::GetMetadata() const {
-  ::google::protobuf::internal::AssignDescriptors(&::assign_descriptors_table_flyteidl_2fadmin_2fworkflow_2eproto);
-  return ::file_level_metadata_flyteidl_2fadmin_2fworkflow_2eproto[kIndexInFileMessages];
-}
-
-
-// ===================================================================
-
-void DynamicNodeWorkflowResponse::InitAsDefaultInstance() {
-  ::flyteidl::admin::_DynamicNodeWorkflowResponse_default_instance_._instance.get_mutable()->compiled_workflow_ = const_cast< ::flyteidl::core::CompiledWorkflowClosure*>(
-      ::flyteidl::core::CompiledWorkflowClosure::internal_default_instance());
-}
-class DynamicNodeWorkflowResponse::HasBitSetters {
- public:
-  static const ::flyteidl::core::CompiledWorkflowClosure& compiled_workflow(const DynamicNodeWorkflowResponse* msg);
-};
-
-const ::flyteidl::core::CompiledWorkflowClosure&
-DynamicNodeWorkflowResponse::HasBitSetters::compiled_workflow(const DynamicNodeWorkflowResponse* msg) {
-  return *msg->compiled_workflow_;
-}
-void DynamicNodeWorkflowResponse::clear_compiled_workflow() {
-  if (GetArenaNoVirtual() == nullptr && compiled_workflow_ != nullptr) {
-    delete compiled_workflow_;
-  }
-  compiled_workflow_ = nullptr;
-}
-#if !defined(_MSC_VER) || _MSC_VER >= 1900
-const int DynamicNodeWorkflowResponse::kCompiledWorkflowFieldNumber;
-#endif  // !defined(_MSC_VER) || _MSC_VER >= 1900
-
-DynamicNodeWorkflowResponse::DynamicNodeWorkflowResponse()
-  : ::google::protobuf::Message(), _internal_metadata_(nullptr) {
-  SharedCtor();
-  // @@protoc_insertion_point(constructor:flyteidl.admin.DynamicNodeWorkflowResponse)
-}
-DynamicNodeWorkflowResponse::DynamicNodeWorkflowResponse(const DynamicNodeWorkflowResponse& from)
-  : ::google::protobuf::Message(),
-      _internal_metadata_(nullptr) {
-  _internal_metadata_.MergeFrom(from._internal_metadata_);
-  if (from.has_compiled_workflow()) {
-    compiled_workflow_ = new ::flyteidl::core::CompiledWorkflowClosure(*from.compiled_workflow_);
-  } else {
-    compiled_workflow_ = nullptr;
-  }
-  // @@protoc_insertion_point(copy_constructor:flyteidl.admin.DynamicNodeWorkflowResponse)
-}
-
-void DynamicNodeWorkflowResponse::SharedCtor() {
-  ::google::protobuf::internal::InitSCC(
-      &scc_info_DynamicNodeWorkflowResponse_flyteidl_2fadmin_2fworkflow_2eproto.base);
-  compiled_workflow_ = nullptr;
-}
-
-DynamicNodeWorkflowResponse::~DynamicNodeWorkflowResponse() {
-  // @@protoc_insertion_point(destructor:flyteidl.admin.DynamicNodeWorkflowResponse)
-  SharedDtor();
-}
-
-void DynamicNodeWorkflowResponse::SharedDtor() {
-  if (this != internal_default_instance()) delete compiled_workflow_;
-}
-
-void DynamicNodeWorkflowResponse::SetCachedSize(int size) const {
-  _cached_size_.Set(size);
-}
-const DynamicNodeWorkflowResponse& DynamicNodeWorkflowResponse::default_instance() {
-  ::google::protobuf::internal::InitSCC(&::scc_info_DynamicNodeWorkflowResponse_flyteidl_2fadmin_2fworkflow_2eproto.base);
-  return *internal_default_instance();
-}
-
-
-void DynamicNodeWorkflowResponse::Clear() {
-// @@protoc_insertion_point(message_clear_start:flyteidl.admin.DynamicNodeWorkflowResponse)
-  ::google::protobuf::uint32 cached_has_bits = 0;
-  // Prevent compiler warnings about cached_has_bits being unused
-  (void) cached_has_bits;
-
-  if (GetArenaNoVirtual() == nullptr && compiled_workflow_ != nullptr) {
-    delete compiled_workflow_;
-  }
-  compiled_workflow_ = nullptr;
-  _internal_metadata_.Clear();
-}
-
-#if GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
-const char* DynamicNodeWorkflowResponse::_InternalParse(const char* begin, const char* end, void* object,
-                  ::google::protobuf::internal::ParseContext* ctx) {
-  auto msg = static_cast<DynamicNodeWorkflowResponse*>(object);
-  ::google::protobuf::int32 size; (void)size;
-  int depth; (void)depth;
-  ::google::protobuf::uint32 tag;
-  ::google::protobuf::internal::ParseFunc parser_till_end; (void)parser_till_end;
-  auto ptr = begin;
-  while (ptr < end) {
-    ptr = ::google::protobuf::io::Parse32(ptr, &tag);
-    GOOGLE_PROTOBUF_PARSER_ASSERT(ptr);
-    switch (tag >> 3) {
-      // .flyteidl.core.CompiledWorkflowClosure compiled_workflow = 1;
-      case 1: {
-        if (static_cast<::google::protobuf::uint8>(tag) != 10) goto handle_unusual;
-        ptr = ::google::protobuf::io::ReadSize(ptr, &size);
-        GOOGLE_PROTOBUF_PARSER_ASSERT(ptr);
-        parser_till_end = ::flyteidl::core::CompiledWorkflowClosure::_InternalParse;
-        object = msg->mutable_compiled_workflow();
-        if (size > end - ptr) goto len_delim_till_end;
-        ptr += size;
-        GOOGLE_PROTOBUF_PARSER_ASSERT(ctx->ParseExactRange(
-            {parser_till_end, object}, ptr - size, ptr));
-        break;
-      }
-      default: {
-      handle_unusual:
-        if ((tag & 7) == 4 || tag == 0) {
-          ctx->EndGroup(tag);
-          return ptr;
-        }
-        auto res = UnknownFieldParse(tag, {_InternalParse, msg},
-          ptr, end, msg->_internal_metadata_.mutable_unknown_fields(), ctx);
-        ptr = res.first;
-        GOOGLE_PROTOBUF_PARSER_ASSERT(ptr != nullptr);
-        if (res.second) return ptr;
-      }
-    }  // switch
-  }  // while
-  return ptr;
-len_delim_till_end:
-  return ctx->StoreAndTailCall(ptr, end, {_InternalParse, msg},
-                               {parser_till_end, object}, size);
-}
-#else  // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
-bool DynamicNodeWorkflowResponse::MergePartialFromCodedStream(
-    ::google::protobuf::io::CodedInputStream* input) {
-#define DO_(EXPRESSION) if (!PROTOBUF_PREDICT_TRUE(EXPRESSION)) goto failure
-  ::google::protobuf::uint32 tag;
-  // @@protoc_insertion_point(parse_start:flyteidl.admin.DynamicNodeWorkflowResponse)
-  for (;;) {
-    ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
-    tag = p.first;
-    if (!p.second) goto handle_unusual;
-    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
-      // .flyteidl.core.CompiledWorkflowClosure compiled_workflow = 1;
-      case 1: {
-        if (static_cast< ::google::protobuf::uint8>(tag) == (10 & 0xFF)) {
-          DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
-               input, mutable_compiled_workflow()));
-        } else {
-          goto handle_unusual;
-        }
-        break;
-      }
-
-      default: {
-      handle_unusual:
-        if (tag == 0) {
-          goto success;
-        }
-        DO_(::google::protobuf::internal::WireFormat::SkipField(
-              input, tag, _internal_metadata_.mutable_unknown_fields()));
-        break;
-      }
-    }
-  }
-success:
-  // @@protoc_insertion_point(parse_success:flyteidl.admin.DynamicNodeWorkflowResponse)
-  return true;
-failure:
-  // @@protoc_insertion_point(parse_failure:flyteidl.admin.DynamicNodeWorkflowResponse)
-  return false;
-#undef DO_
-}
-#endif  // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
-
-void DynamicNodeWorkflowResponse::SerializeWithCachedSizes(
-    ::google::protobuf::io::CodedOutputStream* output) const {
-  // @@protoc_insertion_point(serialize_start:flyteidl.admin.DynamicNodeWorkflowResponse)
-  ::google::protobuf::uint32 cached_has_bits = 0;
-  (void) cached_has_bits;
-
-  // .flyteidl.core.CompiledWorkflowClosure compiled_workflow = 1;
-  if (this->has_compiled_workflow()) {
-    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
-      1, HasBitSetters::compiled_workflow(this), output);
-  }
-
-  if (_internal_metadata_.have_unknown_fields()) {
-    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
-        _internal_metadata_.unknown_fields(), output);
-  }
-  // @@protoc_insertion_point(serialize_end:flyteidl.admin.DynamicNodeWorkflowResponse)
-}
-
-::google::protobuf::uint8* DynamicNodeWorkflowResponse::InternalSerializeWithCachedSizesToArray(
-    ::google::protobuf::uint8* target) const {
-  // @@protoc_insertion_point(serialize_to_array_start:flyteidl.admin.DynamicNodeWorkflowResponse)
-  ::google::protobuf::uint32 cached_has_bits = 0;
-  (void) cached_has_bits;
-
-  // .flyteidl.core.CompiledWorkflowClosure compiled_workflow = 1;
-  if (this->has_compiled_workflow()) {
-    target = ::google::protobuf::internal::WireFormatLite::
-      InternalWriteMessageToArray(
-        1, HasBitSetters::compiled_workflow(this), target);
-  }
-
-  if (_internal_metadata_.have_unknown_fields()) {
-    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
-        _internal_metadata_.unknown_fields(), target);
-  }
-  // @@protoc_insertion_point(serialize_to_array_end:flyteidl.admin.DynamicNodeWorkflowResponse)
-  return target;
-}
-
-size_t DynamicNodeWorkflowResponse::ByteSizeLong() const {
-// @@protoc_insertion_point(message_byte_size_start:flyteidl.admin.DynamicNodeWorkflowResponse)
-  size_t total_size = 0;
-
-  if (_internal_metadata_.have_unknown_fields()) {
-    total_size +=
-      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
-        _internal_metadata_.unknown_fields());
-  }
-  ::google::protobuf::uint32 cached_has_bits = 0;
-  // Prevent compiler warnings about cached_has_bits being unused
-  (void) cached_has_bits;
-
-  // .flyteidl.core.CompiledWorkflowClosure compiled_workflow = 1;
-  if (this->has_compiled_workflow()) {
-    total_size += 1 +
-      ::google::protobuf::internal::WireFormatLite::MessageSize(
-        *compiled_workflow_);
-  }
-
-  int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
-  SetCachedSize(cached_size);
-  return total_size;
-}
-
-void DynamicNodeWorkflowResponse::MergeFrom(const ::google::protobuf::Message& from) {
-// @@protoc_insertion_point(generalized_merge_from_start:flyteidl.admin.DynamicNodeWorkflowResponse)
-  GOOGLE_DCHECK_NE(&from, this);
-  const DynamicNodeWorkflowResponse* source =
-      ::google::protobuf::DynamicCastToGenerated<DynamicNodeWorkflowResponse>(
-          &from);
-  if (source == nullptr) {
-  // @@protoc_insertion_point(generalized_merge_from_cast_fail:flyteidl.admin.DynamicNodeWorkflowResponse)
-    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
-  } else {
-  // @@protoc_insertion_point(generalized_merge_from_cast_success:flyteidl.admin.DynamicNodeWorkflowResponse)
-    MergeFrom(*source);
-  }
-}
-
-void DynamicNodeWorkflowResponse::MergeFrom(const DynamicNodeWorkflowResponse& from) {
-// @@protoc_insertion_point(class_specific_merge_from_start:flyteidl.admin.DynamicNodeWorkflowResponse)
-  GOOGLE_DCHECK_NE(&from, this);
-  _internal_metadata_.MergeFrom(from._internal_metadata_);
-  ::google::protobuf::uint32 cached_has_bits = 0;
-  (void) cached_has_bits;
-
-  if (from.has_compiled_workflow()) {
-    mutable_compiled_workflow()->::flyteidl::core::CompiledWorkflowClosure::MergeFrom(from.compiled_workflow());
-  }
-}
-
-void DynamicNodeWorkflowResponse::CopyFrom(const ::google::protobuf::Message& from) {
-// @@protoc_insertion_point(generalized_copy_from_start:flyteidl.admin.DynamicNodeWorkflowResponse)
-  if (&from == this) return;
-  Clear();
-  MergeFrom(from);
-}
-
-void DynamicNodeWorkflowResponse::CopyFrom(const DynamicNodeWorkflowResponse& from) {
-// @@protoc_insertion_point(class_specific_copy_from_start:flyteidl.admin.DynamicNodeWorkflowResponse)
-  if (&from == this) return;
-  Clear();
-  MergeFrom(from);
-}
-
-bool DynamicNodeWorkflowResponse::IsInitialized() const {
-  return true;
-}
-
-void DynamicNodeWorkflowResponse::Swap(DynamicNodeWorkflowResponse* other) {
-  if (other == this) return;
-  InternalSwap(other);
-}
-void DynamicNodeWorkflowResponse::InternalSwap(DynamicNodeWorkflowResponse* other) {
-  using std::swap;
-  _internal_metadata_.Swap(&other->_internal_metadata_);
-  swap(compiled_workflow_, other->compiled_workflow_);
-}
-
-::google::protobuf::Metadata DynamicNodeWorkflowResponse::GetMetadata() const {
-  ::google::protobuf::internal::AssignDescriptors(&::assign_descriptors_table_flyteidl_2fadmin_2fworkflow_2eproto);
-  return ::file_level_metadata_flyteidl_2fadmin_2fworkflow_2eproto[kIndexInFileMessages];
-}
-
-
 // @@protoc_insertion_point(namespace_scope)
 }  // namespace admin
 }  // namespace flyteidl
@@ -4213,12 +3566,6 @@ template<> PROTOBUF_NOINLINE ::flyteidl::admin::WorkflowErrorExistsIdenticalStru
 template<> PROTOBUF_NOINLINE ::flyteidl::admin::CreateWorkflowFailureReason* Arena::CreateMaybeMessage< ::flyteidl::admin::CreateWorkflowFailureReason >(Arena* arena) {
   return Arena::CreateInternal< ::flyteidl::admin::CreateWorkflowFailureReason >(arena);
 }
-template<> PROTOBUF_NOINLINE ::flyteidl::admin::GetDynamicNodeWorkflowRequest* Arena::CreateMaybeMessage< ::flyteidl::admin::GetDynamicNodeWorkflowRequest >(Arena* arena) {
-  return Arena::CreateInternal< ::flyteidl::admin::GetDynamicNodeWorkflowRequest >(arena);
-}
-template<> PROTOBUF_NOINLINE ::flyteidl::admin::DynamicNodeWorkflowResponse* Arena::CreateMaybeMessage< ::flyteidl::admin::DynamicNodeWorkflowResponse >(Arena* arena) {
-  return Arena::CreateInternal< ::flyteidl::admin::DynamicNodeWorkflowResponse >(arena);
-}
 }  // namespace protobuf
 }  // namespace google
 
diff --git a/flyteidl/gen/pb-cpp/flyteidl/admin/workflow.pb.h b/flyteidl/gen/pb-cpp/flyteidl/admin/workflow.pb.h
index f4b6211017..ffed86790b 100644
--- a/flyteidl/gen/pb-cpp/flyteidl/admin/workflow.pb.h
+++ b/flyteidl/gen/pb-cpp/flyteidl/admin/workflow.pb.h
@@ -46,7 +46,7 @@ struct TableStruct_flyteidl_2fadmin_2fworkflow_2eproto {
     PROTOBUF_SECTION_VARIABLE(protodesc_cold);
   static const ::google::protobuf::internal::AuxillaryParseTableField aux[]
     PROTOBUF_SECTION_VARIABLE(protodesc_cold);
-  static const ::google::protobuf::internal::ParseTable schema[11]
+  static const ::google::protobuf::internal::ParseTable schema[9]
     PROTOBUF_SECTION_VARIABLE(protodesc_cold);
   static const ::google::protobuf::internal::FieldMetadata field_metadata[];
   static const ::google::protobuf::internal::SerializationTable serialization_table[];
@@ -58,12 +58,6 @@ namespace admin {
 class CreateWorkflowFailureReason;
 class CreateWorkflowFailureReasonDefaultTypeInternal;
 extern CreateWorkflowFailureReasonDefaultTypeInternal _CreateWorkflowFailureReason_default_instance_;
-class DynamicNodeWorkflowResponse;
-class DynamicNodeWorkflowResponseDefaultTypeInternal;
-extern DynamicNodeWorkflowResponseDefaultTypeInternal _DynamicNodeWorkflowResponse_default_instance_;
-class GetDynamicNodeWorkflowRequest;
-class GetDynamicNodeWorkflowRequestDefaultTypeInternal;
-extern GetDynamicNodeWorkflowRequestDefaultTypeInternal _GetDynamicNodeWorkflowRequest_default_instance_;
 class Workflow;
 class WorkflowDefaultTypeInternal;
 extern WorkflowDefaultTypeInternal _Workflow_default_instance_;
@@ -93,8 +87,6 @@ extern WorkflowSpecDefaultTypeInternal _WorkflowSpec_default_instance_;
 namespace google {
 namespace protobuf {
 template<> ::flyteidl::admin::CreateWorkflowFailureReason* Arena::CreateMaybeMessage<::flyteidl::admin::CreateWorkflowFailureReason>(Arena*);
-template<> ::flyteidl::admin::DynamicNodeWorkflowResponse* Arena::CreateMaybeMessage<::flyteidl::admin::DynamicNodeWorkflowResponse>(Arena*);
-template<> ::flyteidl::admin::GetDynamicNodeWorkflowRequest* Arena::CreateMaybeMessage<::flyteidl::admin::GetDynamicNodeWorkflowRequest>(Arena*);
 template<> ::flyteidl::admin::Workflow* Arena::CreateMaybeMessage<::flyteidl::admin::Workflow>(Arena*);
 template<> ::flyteidl::admin::WorkflowClosure* Arena::CreateMaybeMessage<::flyteidl::admin::WorkflowClosure>(Arena*);
 template<> ::flyteidl::admin::WorkflowCreateRequest* Arena::CreateMaybeMessage<::flyteidl::admin::WorkflowCreateRequest>(Arena*);
@@ -1247,236 +1239,6 @@ class CreateWorkflowFailureReason final :
 
   friend struct ::TableStruct_flyteidl_2fadmin_2fworkflow_2eproto;
 };
-// -------------------------------------------------------------------
-
-class GetDynamicNodeWorkflowRequest final :
-    public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:flyteidl.admin.GetDynamicNodeWorkflowRequest) */ {
- public:
-  GetDynamicNodeWorkflowRequest();
-  virtual ~GetDynamicNodeWorkflowRequest();
-
-  GetDynamicNodeWorkflowRequest(const GetDynamicNodeWorkflowRequest& from);
-
-  inline GetDynamicNodeWorkflowRequest& operator=(const GetDynamicNodeWorkflowRequest& from) {
-    CopyFrom(from);
-    return *this;
-  }
-  #if LANG_CXX11
-  GetDynamicNodeWorkflowRequest(GetDynamicNodeWorkflowRequest&& from) noexcept
-    : GetDynamicNodeWorkflowRequest() {
-    *this = ::std::move(from);
-  }
-
-  inline GetDynamicNodeWorkflowRequest& operator=(GetDynamicNodeWorkflowRequest&& from) noexcept {
-    if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) {
-      if (this != &from) InternalSwap(&from);
-    } else {
-      CopyFrom(from);
-    }
-    return *this;
-  }
-  #endif
-  static const ::google::protobuf::Descriptor* descriptor() {
-    return default_instance().GetDescriptor();
-  }
-  static const GetDynamicNodeWorkflowRequest& default_instance();
-
-  static void InitAsDefaultInstance();  // FOR INTERNAL USE ONLY
-  static inline const GetDynamicNodeWorkflowRequest* internal_default_instance() {
-    return reinterpret_cast<const GetDynamicNodeWorkflowRequest*>(
-               &_GetDynamicNodeWorkflowRequest_default_instance_);
-  }
-  static constexpr int kIndexInFileMessages =
-    9;
-
-  void Swap(GetDynamicNodeWorkflowRequest* other);
-  friend void swap(GetDynamicNodeWorkflowRequest& a, GetDynamicNodeWorkflowRequest& b) {
-    a.Swap(&b);
-  }
-
-  // implements Message ----------------------------------------------
-
-  inline GetDynamicNodeWorkflowRequest* New() const final {
-    return CreateMaybeMessage<GetDynamicNodeWorkflowRequest>(nullptr);
-  }
-
-  GetDynamicNodeWorkflowRequest* New(::google::protobuf::Arena* arena) const final {
-    return CreateMaybeMessage<GetDynamicNodeWorkflowRequest>(arena);
-  }
-  void CopyFrom(const ::google::protobuf::Message& from) final;
-  void MergeFrom(const ::google::protobuf::Message& from) final;
-  void CopyFrom(const GetDynamicNodeWorkflowRequest& from);
-  void MergeFrom(const GetDynamicNodeWorkflowRequest& from);
-  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
-  bool IsInitialized() const final;
-
-  size_t ByteSizeLong() const final;
-  #if GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
-  static const char* _InternalParse(const char* begin, const char* end, void* object, ::google::protobuf::internal::ParseContext* ctx);
-  ::google::protobuf::internal::ParseFunc _ParseFunc() const final { return _InternalParse; }
-  #else
-  bool MergePartialFromCodedStream(
-      ::google::protobuf::io::CodedInputStream* input) final;
-  #endif  // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
-  void SerializeWithCachedSizes(
-      ::google::protobuf::io::CodedOutputStream* output) const final;
-  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
-      ::google::protobuf::uint8* target) const final;
-  int GetCachedSize() const final { return _cached_size_.Get(); }
-
-  private:
-  void SharedCtor();
-  void SharedDtor();
-  void SetCachedSize(int size) const final;
-  void InternalSwap(GetDynamicNodeWorkflowRequest* other);
-  private:
-  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
-    return nullptr;
-  }
-  inline void* MaybeArenaPtr() const {
-    return nullptr;
-  }
-  public:
-
-  ::google::protobuf::Metadata GetMetadata() const final;
-
-  // nested types ----------------------------------------------------
-
-  // accessors -------------------------------------------------------
-
-  // .flyteidl.core.NodeExecutionIdentifier id = 1;
-  bool has_id() const;
-  void clear_id();
-  static const int kIdFieldNumber = 1;
-  const ::flyteidl::core::NodeExecutionIdentifier& id() const;
-  ::flyteidl::core::NodeExecutionIdentifier* release_id();
-  ::flyteidl::core::NodeExecutionIdentifier* mutable_id();
-  void set_allocated_id(::flyteidl::core::NodeExecutionIdentifier* id);
-
-  // @@protoc_insertion_point(class_scope:flyteidl.admin.GetDynamicNodeWorkflowRequest)
- private:
-  class HasBitSetters;
-
-  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
-  ::flyteidl::core::NodeExecutionIdentifier* id_;
-  mutable ::google::protobuf::internal::CachedSize _cached_size_;
-  friend struct ::TableStruct_flyteidl_2fadmin_2fworkflow_2eproto;
-};
-// -------------------------------------------------------------------
-
-class DynamicNodeWorkflowResponse final :
-    public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:flyteidl.admin.DynamicNodeWorkflowResponse) */ {
- public:
-  DynamicNodeWorkflowResponse();
-  virtual ~DynamicNodeWorkflowResponse();
-
-  DynamicNodeWorkflowResponse(const DynamicNodeWorkflowResponse& from);
-
-  inline DynamicNodeWorkflowResponse& operator=(const DynamicNodeWorkflowResponse& from) {
-    CopyFrom(from);
-    return *this;
-  }
-  #if LANG_CXX11
-  DynamicNodeWorkflowResponse(DynamicNodeWorkflowResponse&& from) noexcept
-    : DynamicNodeWorkflowResponse() {
-    *this = ::std::move(from);
-  }
-
-  inline DynamicNodeWorkflowResponse& operator=(DynamicNodeWorkflowResponse&& from) noexcept {
-    if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) {
-      if (this != &from) InternalSwap(&from);
-    } else {
-      CopyFrom(from);
-    }
-    return *this;
-  }
-  #endif
-  static const ::google::protobuf::Descriptor* descriptor() {
-    return default_instance().GetDescriptor();
-  }
-  static const DynamicNodeWorkflowResponse& default_instance();
-
-  static void InitAsDefaultInstance();  // FOR INTERNAL USE ONLY
-  static inline const DynamicNodeWorkflowResponse* internal_default_instance() {
-    return reinterpret_cast<const DynamicNodeWorkflowResponse*>(
-               &_DynamicNodeWorkflowResponse_default_instance_);
-  }
-  static constexpr int kIndexInFileMessages =
-    10;
-
-  void Swap(DynamicNodeWorkflowResponse* other);
-  friend void swap(DynamicNodeWorkflowResponse& a, DynamicNodeWorkflowResponse& b) {
-    a.Swap(&b);
-  }
-
-  // implements Message ----------------------------------------------
-
-  inline DynamicNodeWorkflowResponse* New() const final {
-    return CreateMaybeMessage<DynamicNodeWorkflowResponse>(nullptr);
-  }
-
-  DynamicNodeWorkflowResponse* New(::google::protobuf::Arena* arena) const final {
-    return CreateMaybeMessage<DynamicNodeWorkflowResponse>(arena);
-  }
-  void CopyFrom(const ::google::protobuf::Message& from) final;
-  void MergeFrom(const ::google::protobuf::Message& from) final;
-  void CopyFrom(const DynamicNodeWorkflowResponse& from);
-  void MergeFrom(const DynamicNodeWorkflowResponse& from);
-  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
-  bool IsInitialized() const final;
-
-  size_t ByteSizeLong() const final;
-  #if GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
-  static const char* _InternalParse(const char* begin, const char* end, void* object, ::google::protobuf::internal::ParseContext* ctx);
-  ::google::protobuf::internal::ParseFunc _ParseFunc() const final { return _InternalParse; }
-  #else
-  bool MergePartialFromCodedStream(
-      ::google::protobuf::io::CodedInputStream* input) final;
-  #endif  // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
-  void SerializeWithCachedSizes(
-      ::google::protobuf::io::CodedOutputStream* output) const final;
-  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
-      ::google::protobuf::uint8* target) const final;
-  int GetCachedSize() const final { return _cached_size_.Get(); }
-
-  private:
-  void SharedCtor();
-  void SharedDtor();
-  void SetCachedSize(int size) const final;
-  void InternalSwap(DynamicNodeWorkflowResponse* other);
-  private:
-  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
-    return nullptr;
-  }
-  inline void* MaybeArenaPtr() const {
-    return nullptr;
-  }
-  public:
-
-  ::google::protobuf::Metadata GetMetadata() const final;
-
-  // nested types ----------------------------------------------------
-
-  // accessors -------------------------------------------------------
-
-  // .flyteidl.core.CompiledWorkflowClosure compiled_workflow = 1;
-  bool has_compiled_workflow() const;
-  void clear_compiled_workflow();
-  static const int kCompiledWorkflowFieldNumber = 1;
-  const ::flyteidl::core::CompiledWorkflowClosure& compiled_workflow() const;
-  ::flyteidl::core::CompiledWorkflowClosure* release_compiled_workflow();
-  ::flyteidl::core::CompiledWorkflowClosure* mutable_compiled_workflow();
-  void set_allocated_compiled_workflow(::flyteidl::core::CompiledWorkflowClosure* compiled_workflow);
-
-  // @@protoc_insertion_point(class_scope:flyteidl.admin.DynamicNodeWorkflowResponse)
- private:
-  class HasBitSetters;
-
-  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
-  ::flyteidl::core::CompiledWorkflowClosure* compiled_workflow_;
-  mutable ::google::protobuf::internal::CachedSize _cached_size_;
-  friend struct ::TableStruct_flyteidl_2fadmin_2fworkflow_2eproto;
-};
 // ===================================================================
 
 
@@ -2237,104 +1999,6 @@ inline void CreateWorkflowFailureReason::clear_has_reason() {
 inline CreateWorkflowFailureReason::ReasonCase CreateWorkflowFailureReason::reason_case() const {
   return CreateWorkflowFailureReason::ReasonCase(_oneof_case_[0]);
 }
-// -------------------------------------------------------------------
-
-// GetDynamicNodeWorkflowRequest
-
-// .flyteidl.core.NodeExecutionIdentifier id = 1;
-inline bool GetDynamicNodeWorkflowRequest::has_id() const {
-  return this != internal_default_instance() && id_ != nullptr;
-}
-inline const ::flyteidl::core::NodeExecutionIdentifier& GetDynamicNodeWorkflowRequest::id() const {
-  const ::flyteidl::core::NodeExecutionIdentifier* p = id_;
-  // @@protoc_insertion_point(field_get:flyteidl.admin.GetDynamicNodeWorkflowRequest.id)
-  return p != nullptr ? *p : *reinterpret_cast<const ::flyteidl::core::NodeExecutionIdentifier*>(
-      &::flyteidl::core::_NodeExecutionIdentifier_default_instance_);
-}
-inline ::flyteidl::core::NodeExecutionIdentifier* GetDynamicNodeWorkflowRequest::release_id() {
-  // @@protoc_insertion_point(field_release:flyteidl.admin.GetDynamicNodeWorkflowRequest.id)
-  
-  ::flyteidl::core::NodeExecutionIdentifier* temp = id_;
-  id_ = nullptr;
-  return temp;
-}
-inline ::flyteidl::core::NodeExecutionIdentifier* GetDynamicNodeWorkflowRequest::mutable_id() {
-  
-  if (id_ == nullptr) {
-    auto* p = CreateMaybeMessage<::flyteidl::core::NodeExecutionIdentifier>(GetArenaNoVirtual());
-    id_ = p;
-  }
-  // @@protoc_insertion_point(field_mutable:flyteidl.admin.GetDynamicNodeWorkflowRequest.id)
-  return id_;
-}
-inline void GetDynamicNodeWorkflowRequest::set_allocated_id(::flyteidl::core::NodeExecutionIdentifier* id) {
-  ::google::protobuf::Arena* message_arena = GetArenaNoVirtual();
-  if (message_arena == nullptr) {
-    delete reinterpret_cast< ::google::protobuf::MessageLite*>(id_);
-  }
-  if (id) {
-    ::google::protobuf::Arena* submessage_arena = nullptr;
-    if (message_arena != submessage_arena) {
-      id = ::google::protobuf::internal::GetOwnedMessage(
-          message_arena, id, submessage_arena);
-    }
-    
-  } else {
-    
-  }
-  id_ = id;
-  // @@protoc_insertion_point(field_set_allocated:flyteidl.admin.GetDynamicNodeWorkflowRequest.id)
-}
-
-// -------------------------------------------------------------------
-
-// DynamicNodeWorkflowResponse
-
-// .flyteidl.core.CompiledWorkflowClosure compiled_workflow = 1;
-inline bool DynamicNodeWorkflowResponse::has_compiled_workflow() const {
-  return this != internal_default_instance() && compiled_workflow_ != nullptr;
-}
-inline const ::flyteidl::core::CompiledWorkflowClosure& DynamicNodeWorkflowResponse::compiled_workflow() const {
-  const ::flyteidl::core::CompiledWorkflowClosure* p = compiled_workflow_;
-  // @@protoc_insertion_point(field_get:flyteidl.admin.DynamicNodeWorkflowResponse.compiled_workflow)
-  return p != nullptr ? *p : *reinterpret_cast<const ::flyteidl::core::CompiledWorkflowClosure*>(
-      &::flyteidl::core::_CompiledWorkflowClosure_default_instance_);
-}
-inline ::flyteidl::core::CompiledWorkflowClosure* DynamicNodeWorkflowResponse::release_compiled_workflow() {
-  // @@protoc_insertion_point(field_release:flyteidl.admin.DynamicNodeWorkflowResponse.compiled_workflow)
-  
-  ::flyteidl::core::CompiledWorkflowClosure* temp = compiled_workflow_;
-  compiled_workflow_ = nullptr;
-  return temp;
-}
-inline ::flyteidl::core::CompiledWorkflowClosure* DynamicNodeWorkflowResponse::mutable_compiled_workflow() {
-  
-  if (compiled_workflow_ == nullptr) {
-    auto* p = CreateMaybeMessage<::flyteidl::core::CompiledWorkflowClosure>(GetArenaNoVirtual());
-    compiled_workflow_ = p;
-  }
-  // @@protoc_insertion_point(field_mutable:flyteidl.admin.DynamicNodeWorkflowResponse.compiled_workflow)
-  return compiled_workflow_;
-}
-inline void DynamicNodeWorkflowResponse::set_allocated_compiled_workflow(::flyteidl::core::CompiledWorkflowClosure* compiled_workflow) {
-  ::google::protobuf::Arena* message_arena = GetArenaNoVirtual();
-  if (message_arena == nullptr) {
-    delete reinterpret_cast< ::google::protobuf::MessageLite*>(compiled_workflow_);
-  }
-  if (compiled_workflow) {
-    ::google::protobuf::Arena* submessage_arena = nullptr;
-    if (message_arena != submessage_arena) {
-      compiled_workflow = ::google::protobuf::internal::GetOwnedMessage(
-          message_arena, compiled_workflow, submessage_arena);
-    }
-    
-  } else {
-    
-  }
-  compiled_workflow_ = compiled_workflow;
-  // @@protoc_insertion_point(field_set_allocated:flyteidl.admin.DynamicNodeWorkflowResponse.compiled_workflow)
-}
-
 #ifdef __GNUC__
   #pragma GCC diagnostic pop
 #endif  // __GNUC__
@@ -2354,10 +2018,6 @@ inline void DynamicNodeWorkflowResponse::set_allocated_compiled_workflow(::flyte
 
 // -------------------------------------------------------------------
 
-// -------------------------------------------------------------------
-
-// -------------------------------------------------------------------
-
 
 // @@protoc_insertion_point(namespace_scope)
 
diff --git a/flyteidl/gen/pb-go/flyteidl/admin/node_execution.pb.go b/flyteidl/gen/pb-go/flyteidl/admin/node_execution.pb.go
index f1e7505a38..0e19a4af16 100644
--- a/flyteidl/gen/pb-go/flyteidl/admin/node_execution.pb.go
+++ b/flyteidl/gen/pb-go/flyteidl/admin/node_execution.pb.go
@@ -950,6 +950,84 @@ func (m *NodeExecutionGetDataResponse) GetFlyteUrls() *FlyteURLs {
 	return nil
 }
 
+type GetDynamicNodeWorkflowRequest struct {
+	Id                   *core.NodeExecutionIdentifier `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                      `json:"-"`
+	XXX_unrecognized     []byte                        `json:"-"`
+	XXX_sizecache        int32                         `json:"-"`
+}
+
+func (m *GetDynamicNodeWorkflowRequest) Reset()         { *m = GetDynamicNodeWorkflowRequest{} }
+func (m *GetDynamicNodeWorkflowRequest) String() string { return proto.CompactTextString(m) }
+func (*GetDynamicNodeWorkflowRequest) ProtoMessage()    {}
+func (*GetDynamicNodeWorkflowRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f73b3eae493fd736, []int{12}
+}
+
+func (m *GetDynamicNodeWorkflowRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetDynamicNodeWorkflowRequest.Unmarshal(m, b)
+}
+func (m *GetDynamicNodeWorkflowRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetDynamicNodeWorkflowRequest.Marshal(b, m, deterministic)
+}
+func (m *GetDynamicNodeWorkflowRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetDynamicNodeWorkflowRequest.Merge(m, src)
+}
+func (m *GetDynamicNodeWorkflowRequest) XXX_Size() int {
+	return xxx_messageInfo_GetDynamicNodeWorkflowRequest.Size(m)
+}
+func (m *GetDynamicNodeWorkflowRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetDynamicNodeWorkflowRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetDynamicNodeWorkflowRequest proto.InternalMessageInfo
+
+func (m *GetDynamicNodeWorkflowRequest) GetId() *core.NodeExecutionIdentifier {
+	if m != nil {
+		return m.Id
+	}
+	return nil
+}
+
+type DynamicNodeWorkflowResponse struct {
+	CompiledWorkflow     *core.CompiledWorkflowClosure `protobuf:"bytes,1,opt,name=compiled_workflow,json=compiledWorkflow,proto3" json:"compiled_workflow,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                      `json:"-"`
+	XXX_unrecognized     []byte                        `json:"-"`
+	XXX_sizecache        int32                         `json:"-"`
+}
+
+func (m *DynamicNodeWorkflowResponse) Reset()         { *m = DynamicNodeWorkflowResponse{} }
+func (m *DynamicNodeWorkflowResponse) String() string { return proto.CompactTextString(m) }
+func (*DynamicNodeWorkflowResponse) ProtoMessage()    {}
+func (*DynamicNodeWorkflowResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f73b3eae493fd736, []int{13}
+}
+
+func (m *DynamicNodeWorkflowResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DynamicNodeWorkflowResponse.Unmarshal(m, b)
+}
+func (m *DynamicNodeWorkflowResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DynamicNodeWorkflowResponse.Marshal(b, m, deterministic)
+}
+func (m *DynamicNodeWorkflowResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DynamicNodeWorkflowResponse.Merge(m, src)
+}
+func (m *DynamicNodeWorkflowResponse) XXX_Size() int {
+	return xxx_messageInfo_DynamicNodeWorkflowResponse.Size(m)
+}
+func (m *DynamicNodeWorkflowResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_DynamicNodeWorkflowResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DynamicNodeWorkflowResponse proto.InternalMessageInfo
+
+func (m *DynamicNodeWorkflowResponse) GetCompiledWorkflow() *core.CompiledWorkflowClosure {
+	if m != nil {
+		return m.CompiledWorkflow
+	}
+	return nil
+}
+
 func init() {
 	proto.RegisterType((*NodeExecutionGetRequest)(nil), "flyteidl.admin.NodeExecutionGetRequest")
 	proto.RegisterType((*NodeExecutionListRequest)(nil), "flyteidl.admin.NodeExecutionListRequest")
@@ -963,6 +1041,8 @@ func init() {
 	proto.RegisterType((*DynamicWorkflowNodeMetadata)(nil), "flyteidl.admin.DynamicWorkflowNodeMetadata")
 	proto.RegisterType((*NodeExecutionGetDataRequest)(nil), "flyteidl.admin.NodeExecutionGetDataRequest")
 	proto.RegisterType((*NodeExecutionGetDataResponse)(nil), "flyteidl.admin.NodeExecutionGetDataResponse")
+	proto.RegisterType((*GetDynamicNodeWorkflowRequest)(nil), "flyteidl.admin.GetDynamicNodeWorkflowRequest")
+	proto.RegisterType((*DynamicNodeWorkflowResponse)(nil), "flyteidl.admin.DynamicNodeWorkflowResponse")
 }
 
 func init() {
@@ -970,81 +1050,83 @@ func init() {
 }
 
 var fileDescriptor_f73b3eae493fd736 = []byte{
-	// 1208 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x57, 0x6d, 0x6f, 0x1b, 0xc5,
-	0x13, 0xef, 0x25, 0x4d, 0x62, 0x8f, 0x13, 0x27, 0xd9, 0xbf, 0xfb, 0xaf, 0xdb, 0xf4, 0xc1, 0x5c,
-	0x5b, 0x14, 0x40, 0xb5, 0x25, 0x57, 0x45, 0xe5, 0x99, 0x38, 0xe9, 0x43, 0x20, 0x85, 0xb2, 0xa9,
-	0x41, 0x42, 0x88, 0xd3, 0xfa, 0x6e, 0xed, 0x2c, 0x3e, 0xdf, 0x5e, 0x77, 0xf7, 0x14, 0xfc, 0x45,
-	0x90, 0xf8, 0x2a, 0xbc, 0xe2, 0x13, 0xf0, 0x35, 0x90, 0xf8, 0x00, 0xbc, 0x46, 0xbb, 0xb7, 0x77,
-	0xf6, 0x5d, 0xdc, 0x44, 0x2a, 0x2f, 0x78, 0xe7, 0x9d, 0xf9, 0xcd, 0xcc, 0xce, 0xcc, 0x6f, 0x66,
-	0xcf, 0x70, 0x67, 0x18, 0x4e, 0x15, 0x65, 0x41, 0xd8, 0x21, 0xc1, 0x84, 0x45, 0x9d, 0x88, 0x07,
-	0xd4, 0xa3, 0x3f, 0x53, 0x3f, 0x51, 0x8c, 0x47, 0xed, 0x58, 0x70, 0xc5, 0x51, 0x3d, 0x03, 0xb5,
-	0x0d, 0xe8, 0xfa, 0x4e, 0xc9, 0xc8, 0xe7, 0x93, 0x49, 0x06, 0xbe, 0x7e, 0x33, 0x57, 0xfa, 0x5c,
-	0xd0, 0x4e, 0xc9, 0xd7, 0x9c, 0xad, 0x51, 0xfb, 0x44, 0x91, 0x90, 0x8f, 0xac, 0xf2, 0x46, 0x49,
-	0xc9, 0x27, 0x31, 0x0b, 0xa9, 0xb0, 0xda, 0x5b, 0x45, 0x2d, 0x0b, 0x68, 0xa4, 0xd8, 0x90, 0xe5,
-	0xfa, 0x92, 0x75, 0xc8, 0x14, 0x15, 0x24, 0x94, 0x56, 0x7b, 0x7b, 0xc4, 0xf9, 0x28, 0xa4, 0x1d,
-	0x73, 0x1a, 0x24, 0xc3, 0x8e, 0x62, 0x13, 0x2a, 0x15, 0x99, 0xc4, 0x99, 0xfb, 0x32, 0x20, 0x48,
-	0x04, 0x99, 0xdd, 0xdc, 0xfd, 0x06, 0xae, 0x7e, 0xc5, 0x03, 0xfa, 0x38, 0x4b, 0xe8, 0x29, 0x55,
-	0x98, 0xbe, 0x4a, 0xa8, 0x54, 0xe8, 0x7d, 0x58, 0x62, 0x41, 0xd3, 0x69, 0x39, 0xbb, 0xb5, 0xee,
-	0xdb, 0xed, 0xbc, 0x5a, 0xfa, 0x1a, 0xed, 0x82, 0xcd, 0x61, 0x7e, 0x67, 0xbc, 0xc4, 0x02, 0xf7,
-	0xd7, 0x25, 0x68, 0x16, 0xf4, 0x47, 0x4c, 0xe6, 0x4e, 0x7f, 0x84, 0x2b, 0xa7, 0x5c, 0x8c, 0x87,
-	0x21, 0x3f, 0x9d, 0x75, 0xc4, 0xcb, 0xe3, 0xbc, 0x5b, 0x8a, 0xf3, 0x9d, 0xc5, 0x2e, 0x8a, 0xf5,
-	0xbf, 0xd3, 0xb3, 0x4a, 0xd4, 0x80, 0x95, 0x90, 0x4d, 0x98, 0x6a, 0x2e, 0xb5, 0x9c, 0xdd, 0x0d,
-	0x9c, 0x1e, 0xb4, 0x54, 0xf1, 0x31, 0x8d, 0x9a, 0xcb, 0x2d, 0x67, 0xb7, 0x8a, 0xd3, 0x03, 0x6a,
-	0xc2, 0xda, 0x90, 0x85, 0x8a, 0x0a, 0xd9, 0xbc, 0x6c, 0xe4, 0xd9, 0x11, 0xdd, 0x87, 0x35, 0xc9,
-	0x85, 0xf2, 0x06, 0xd3, 0xe6, 0x8a, 0xb9, 0x57, 0xa3, 0x5d, 0x64, 0x4b, 0xfb, 0x98, 0x0b, 0x85,
-	0x57, 0x35, 0xa8, 0x37, 0x45, 0xbb, 0xb0, 0x95, 0x44, 0xec, 0x55, 0x42, 0xbd, 0x98, 0x08, 0x1a,
-	0x29, 0x9d, 0xcf, 0xaa, 0xf1, 0x58, 0x4f, 0xe5, 0x2f, 0x8c, 0xf8, 0x30, 0x70, 0xff, 0x72, 0xe0,
-	0x76, 0xa1, 0x36, 0x4f, 0xb8, 0x78, 0x49, 0xe4, 0x78, 0xbe, 0x44, 0x18, 0xb6, 0x15, 0x91, 0xe3,
-	0x45, 0xe5, 0x29, 0xb7, 0x41, 0x9b, 0x2e, 0x2a, 0xcd, 0xa6, 0x2a, 0x2a, 0xfe, 0x93, 0xb2, 0xb8,
-	0x7f, 0x3a, 0xb0, 0x51, 0x48, 0xf6, 0x4d, 0x29, 0x85, 0x76, 0xa0, 0xca, 0xa2, 0x38, 0x51, 0x5e,
-	0x22, 0x98, 0x49, 0xa1, 0x8a, 0x2b, 0x46, 0xd0, 0x17, 0x0c, 0x7d, 0x0a, 0x6b, 0x7e, 0xc8, 0x65,
-	0x22, 0xa8, 0xc9, 0xa3, 0xd6, 0xbd, 0x5b, 0xbe, 0x55, 0xc1, 0xf5, 0x7e, 0x8a, 0xc5, 0x99, 0x11,
-	0xda, 0x83, 0xca, 0x84, 0x2a, 0x12, 0x10, 0x45, 0x4c, 0xc2, 0xb5, 0xee, 0xbd, 0x73, 0x1d, 0x3c,
-	0xa7, 0x8a, 0x1c, 0x10, 0x45, 0x70, 0x6e, 0xe6, 0xfe, 0xe6, 0xc0, 0x95, 0x85, 0x18, 0x74, 0x1b,
-	0x6a, 0x82, 0x2a, 0x31, 0xf5, 0x46, 0x82, 0x27, 0xb1, 0x49, 0xbd, 0x8a, 0xc1, 0x88, 0x9e, 0x6a,
-	0x09, 0xba, 0x0b, 0x75, 0x26, 0x33, 0xde, 0xe8, 0x45, 0x65, 0xf2, 0xab, 0xe0, 0x75, 0x26, 0x53,
-	0xd6, 0x68, 0xbf, 0xa8, 0x05, 0xeb, 0x32, 0xa6, 0xbe, 0x01, 0x68, 0x3a, 0xa4, 0x0d, 0x03, 0x2d,
-	0xd3, 0xfa, 0xc3, 0x00, 0xdd, 0x04, 0x60, 0xd2, 0x0b, 0xa6, 0x11, 0x99, 0x30, 0xdf, 0xe4, 0x51,
-	0xc1, 0x55, 0x26, 0x0f, 0x52, 0x01, 0xba, 0x06, 0x15, 0x26, 0x3d, 0x22, 0x04, 0x49, 0x7b, 0x57,
-	0xc1, 0x6b, 0x4c, 0xee, 0xe9, 0xa3, 0xfb, 0x0a, 0xb6, 0xcf, 0x8c, 0x2b, 0x7a, 0x02, 0x9b, 0xc5,
-	0xad, 0x29, 0x9b, 0x4e, 0x6b, 0x79, 0xb7, 0xd6, 0xbd, 0x79, 0x6e, 0x6d, 0x70, 0x3d, 0x9a, 0x3f,
-	0xca, 0x19, 0xc5, 0x96, 0xe6, 0x28, 0xe6, 0xfe, 0xbd, 0x02, 0x8d, 0x45, 0x4d, 0x41, 0x77, 0x00,
-	0x78, 0xa2, 0xb2, 0x4e, 0x9b, 0x6a, 0xf5, 0x96, 0x9a, 0xce, 0xb3, 0x4b, 0xb8, 0x9a, 0xca, 0x75,
-	0xc3, 0x1f, 0xc2, 0x0a, 0x15, 0x82, 0x0b, 0xe3, 0xb3, 0x70, 0x23, 0x43, 0xa4, 0xdc, 0xe9, 0x63,
-	0x0d, 0x7a, 0x76, 0x09, 0xa7, 0x68, 0xf4, 0x39, 0xd4, 0xac, 0x6f, 0xd3, 0x6a, 0x30, 0xc6, 0xd7,
-	0x4a, 0xc6, 0x47, 0xe9, 0x7e, 0x7d, 0x4e, 0x62, 0x1b, 0xd7, 0xde, 0xc7, 0x34, 0xf3, 0x11, 0xac,
-	0xc4, 0x27, 0x44, 0xa6, 0x3c, 0xab, 0x77, 0xdd, 0xf3, 0x18, 0xdc, 0x7e, 0xa1, 0x91, 0x38, 0x35,
-	0x40, 0x1f, 0x00, 0x48, 0x45, 0x84, 0xa2, 0x81, 0x47, 0x94, 0x65, 0xd9, 0xf5, 0x76, 0xba, 0x9b,
-	0xdb, 0xd9, 0x6e, 0x6e, 0xbf, 0xcc, 0x96, 0x37, 0xae, 0x5a, 0xf4, 0x9e, 0x42, 0x0f, 0xa1, 0x92,
-	0xed, 0x6c, 0x3b, 0x75, 0xd7, 0xce, 0x18, 0x1e, 0x58, 0x00, 0xce, 0xa1, 0x3a, 0xa2, 0x2f, 0x28,
-	0xb1, 0x11, 0x57, 0x2f, 0x8e, 0x68, 0xd1, 0x7b, 0x4a, 0x9b, 0x26, 0x71, 0x90, 0x99, 0xae, 0x5d,
-	0x6c, 0x6a, 0xd1, 0x7b, 0x0a, 0xfd, 0x00, 0xff, 0xcf, 0xd7, 0xbb, 0xe1, 0x4f, 0x3e, 0x59, 0x95,
-	0xc5, 0xa3, 0x99, 0x2d, 0x78, 0x5d, 0xbb, 0xe7, 0x16, 0xfb, 0xcc, 0xc1, 0x8d, 0xd3, 0x05, 0x72,
-	0xf4, 0x02, 0x90, 0xd9, 0x8c, 0x45, 0xcf, 0x55, 0xe3, 0xb9, 0x55, 0xf6, 0xac, 0x77, 0x63, 0xc9,
-	0xeb, 0x96, 0x2a, 0xc9, 0xf4, 0x58, 0x04, 0xd4, 0x1f, 0x1b, 0xb6, 0xd5, 0xd2, 0x65, 0xa7, 0xcf,
-	0x9a, 0x65, 0x1d, 0x68, 0xd8, 0x69, 0xf2, 0x7e, 0xe2, 0x03, 0xcf, 0x8c, 0x9f, 0x86, 0xad, 0x1b,
-	0xd8, 0xb6, 0xd5, 0x7d, 0xc1, 0x07, 0xc7, 0x31, 0xf5, 0xfb, 0x82, 0xf5, 0x36, 0x61, 0xc3, 0xf2,
-	0x4b, 0x50, 0x99, 0x84, 0xaa, 0xb7, 0x0d, 0x9b, 0x8a, 0x88, 0x11, 0x55, 0xf9, 0x5d, 0xdd, 0x00,
-	0x1a, 0x8b, 0x32, 0x46, 0x47, 0x50, 0xa3, 0xb3, 0xdd, 0xf7, 0x06, 0x8f, 0xe1, 0xbc, 0xb9, 0xfb,
-	0xbb, 0x03, 0x5b, 0xe5, 0xf4, 0xd1, 0x01, 0xac, 0xfb, 0xc4, 0x3f, 0xa1, 0x9e, 0x54, 0x44, 0x25,
-	0xd2, 0xc4, 0xa8, 0x77, 0xdf, 0x2a, 0xc5, 0xd8, 0x4f, 0x3f, 0x5d, 0xf6, 0x35, 0xf2, 0xd8, 0x00,
-	0x71, 0xcd, 0x9f, 0x1d, 0xd0, 0x67, 0x50, 0xb3, 0x5f, 0x37, 0xde, 0x98, 0x4e, 0xed, 0x04, 0xde,
-	0x5a, 0xec, 0x24, 0x0b, 0x8d, 0xc1, 0x9a, 0x7c, 0x49, 0xa7, 0xe8, 0x1e, 0xd4, 0xfd, 0x13, 0xea,
-	0x8f, 0x63, 0xce, 0xa2, 0x74, 0xca, 0xd3, 0x47, 0x66, 0x63, 0x26, 0xed, 0x0b, 0xe6, 0xfe, 0xe1,
-	0xc0, 0x8e, 0xdd, 0x5d, 0x0b, 0x0b, 0xf6, 0xce, 0xdc, 0x4b, 0x52, 0x9e, 0xe1, 0xd2, 0xe3, 0x71,
-	0x0c, 0xdb, 0xf6, 0x9b, 0x2b, 0xf0, 0x32, 0x5a, 0xd9, 0x8b, 0x97, 0xdf, 0xa0, 0x7d, 0x8b, 0xcb,
-	0x42, 0x66, 0x6f, 0xc5, 0x96, 0x5f, 0x52, 0xbc, 0x96, 0x1d, 0xcb, 0xaf, 0x61, 0x87, 0xdb, 0x87,
-	0x9d, 0xf2, 0x87, 0x96, 0x79, 0x44, 0xfe, 0xe5, 0xc7, 0xd6, 0x2f, 0xcb, 0x70, 0x63, 0xb1, 0x5f,
-	0x19, 0xf3, 0x48, 0x52, 0xf4, 0x00, 0x56, 0xcd, 0x4b, 0x29, 0xad, 0xf3, 0xab, 0xe5, 0x39, 0xe9,
-	0x8b, 0xb0, 0x17, 0xf2, 0x81, 0x5e, 0x77, 0xd8, 0x42, 0xd1, 0x43, 0x58, 0x4b, 0xa9, 0x2c, 0x6d,
-	0xa1, 0xce, 0xb5, 0xca, 0xb0, 0xe8, 0x43, 0xa8, 0x0d, 0x93, 0x30, 0xf4, 0x6c, 0xc0, 0xe5, 0x0b,
-	0x36, 0x2c, 0x06, 0x8d, 0x3e, 0x4c, 0x43, 0x7e, 0x0c, 0xeb, 0xc6, 0x36, 0x8b, 0x7b, 0xf9, 0x22,
-	0x63, 0x13, 0xea, 0x6b, 0x1b, 0xf9, 0x5b, 0xd8, 0xca, 0xda, 0x91, 0xb7, 0x78, 0xcb, 0x78, 0x78,
-	0xaf, 0x7c, 0xf3, 0x73, 0x58, 0x85, 0x37, 0x83, 0xa2, 0x12, 0x3d, 0x02, 0x30, 0xe6, 0x5e, 0x22,
-	0x42, 0xd9, 0xdc, 0x2e, 0xdf, 0x29, 0xf5, 0xf8, 0x44, 0x1f, 0xfb, 0xf8, 0x48, 0xe2, 0xaa, 0xd1,
-	0xf4, 0x45, 0x28, 0x7b, 0x9f, 0x7c, 0xff, 0xd1, 0x88, 0xa9, 0x93, 0x64, 0xd0, 0xf6, 0xf9, 0xa4,
-	0x63, 0xe4, 0x5c, 0x8c, 0xd2, 0x1f, 0x9d, 0xfc, 0x9b, 0x7e, 0x44, 0xa3, 0x4e, 0x3c, 0xb8, 0x3f,
-	0xe2, 0x9d, 0xe2, 0xbf, 0x8f, 0xc1, 0xaa, 0xd9, 0xb3, 0x0f, 0xfe, 0x09, 0x00, 0x00, 0xff, 0xff,
-	0xe3, 0xde, 0x8f, 0xda, 0xcb, 0x0c, 0x00, 0x00,
+	// 1236 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x57, 0xdf, 0x6e, 0xdb, 0xb6,
+	0x17, 0xae, 0x92, 0x26, 0xb1, 0x8f, 0x13, 0x27, 0xe1, 0x2f, 0xfd, 0xd5, 0x6d, 0x9a, 0x36, 0x53,
+	0xdb, 0x21, 0xdb, 0x50, 0x1b, 0x48, 0xd1, 0xa1, 0xfb, 0xbf, 0x38, 0xe9, 0x9f, 0x6c, 0xe9, 0xd6,
+	0x31, 0xf5, 0x0a, 0x0c, 0xc3, 0x04, 0x5a, 0xa2, 0x1d, 0xce, 0xb2, 0xa8, 0x92, 0x14, 0x32, 0xbf,
+	0xc8, 0x80, 0xbd, 0xca, 0xae, 0xf6, 0x04, 0x7b, 0x8d, 0x01, 0x7b, 0x80, 0x5d, 0x0f, 0xa4, 0x28,
+	0xd9, 0x52, 0xd5, 0x04, 0x68, 0x2e, 0x76, 0x67, 0x9e, 0xf3, 0x9d, 0xef, 0x90, 0x3c, 0xdf, 0x39,
+	0x94, 0xe1, 0xf6, 0x20, 0x9c, 0x28, 0xca, 0x82, 0xb0, 0x43, 0x82, 0x31, 0x8b, 0x3a, 0x11, 0x0f,
+	0xa8, 0x47, 0x7f, 0xa1, 0x7e, 0xa2, 0x18, 0x8f, 0xda, 0xb1, 0xe0, 0x8a, 0xa3, 0x66, 0x06, 0x6a,
+	0x1b, 0xd0, 0xf5, 0xcd, 0x52, 0x90, 0xcf, 0xc7, 0xe3, 0x0c, 0x7c, 0x7d, 0x2b, 0x77, 0xfa, 0x5c,
+	0xd0, 0x4e, 0x89, 0x6b, 0x26, 0xd6, 0xb8, 0x7d, 0xa2, 0x48, 0xc8, 0x87, 0xd6, 0x79, 0xa3, 0xe4,
+	0xe4, 0xe3, 0x98, 0x85, 0x54, 0x58, 0xef, 0xcd, 0xa2, 0x97, 0x05, 0x34, 0x52, 0x6c, 0xc0, 0x72,
+	0x7f, 0x29, 0x3a, 0x64, 0x8a, 0x0a, 0x12, 0x4a, 0xeb, 0xbd, 0x35, 0xe4, 0x7c, 0x18, 0xd2, 0x8e,
+	0x59, 0xf5, 0x93, 0x41, 0x47, 0xb1, 0x31, 0x95, 0x8a, 0x8c, 0xe3, 0x8c, 0xbe, 0x0c, 0x08, 0x12,
+	0x41, 0xa6, 0x3b, 0x77, 0xbf, 0x83, 0xab, 0xdf, 0xf0, 0x80, 0x3e, 0xca, 0x0e, 0xf4, 0x84, 0x2a,
+	0x4c, 0x5f, 0x25, 0x54, 0x2a, 0xf4, 0x21, 0xcc, 0xb1, 0xa0, 0xe5, 0x6c, 0x3b, 0x3b, 0x8d, 0xdd,
+	0x77, 0xdb, 0xf9, 0x6d, 0xe9, 0x6d, 0xb4, 0x0b, 0x31, 0x87, 0xf9, 0x9e, 0xf1, 0x1c, 0x0b, 0xdc,
+	0xdf, 0xe6, 0xa0, 0x55, 0xf0, 0x1f, 0x31, 0x99, 0x93, 0xfe, 0x04, 0x57, 0x4e, 0xb9, 0x18, 0x0d,
+	0x42, 0x7e, 0x3a, 0xad, 0x88, 0x97, 0xe7, 0x79, 0xbf, 0x94, 0xe7, 0xa5, 0xc5, 0x56, 0xe5, 0xfa,
+	0xdf, 0xe9, 0xeb, 0x4e, 0xb4, 0x01, 0x0b, 0x21, 0x1b, 0x33, 0xd5, 0x9a, 0xdb, 0x76, 0x76, 0x56,
+	0x70, 0xba, 0xd0, 0x56, 0xc5, 0x47, 0x34, 0x6a, 0xcd, 0x6f, 0x3b, 0x3b, 0x75, 0x9c, 0x2e, 0x50,
+	0x0b, 0x96, 0x06, 0x2c, 0x54, 0x54, 0xc8, 0xd6, 0x65, 0x63, 0xcf, 0x96, 0xe8, 0x1e, 0x2c, 0x49,
+	0x2e, 0x94, 0xd7, 0x9f, 0xb4, 0x16, 0xcc, 0xbe, 0x36, 0xda, 0x45, 0xb5, 0xb4, 0x8f, 0xb9, 0x50,
+	0x78, 0x51, 0x83, 0xba, 0x13, 0xb4, 0x03, 0x6b, 0x49, 0xc4, 0x5e, 0x25, 0xd4, 0x8b, 0x89, 0xa0,
+	0x91, 0xd2, 0xe7, 0x59, 0x34, 0x8c, 0xcd, 0xd4, 0xfe, 0xdc, 0x98, 0x0f, 0x03, 0xf7, 0x6f, 0x07,
+	0x6e, 0x15, 0xee, 0xe6, 0x31, 0x17, 0x2f, 0x88, 0x1c, 0xcd, 0x5e, 0x11, 0x86, 0x75, 0x45, 0xe4,
+	0xa8, 0xea, 0x7a, 0xca, 0x65, 0xd0, 0xa1, 0x55, 0x57, 0xb3, 0xaa, 0x8a, 0x8e, 0xff, 0xe4, 0x5a,
+	0xdc, 0xbf, 0x1c, 0x58, 0x29, 0x1c, 0xf6, 0x6d, 0x25, 0x85, 0x36, 0xa1, 0xce, 0xa2, 0x38, 0x51,
+	0x5e, 0x22, 0x98, 0x39, 0x42, 0x1d, 0xd7, 0x8c, 0xa1, 0x27, 0x18, 0xfa, 0x1c, 0x96, 0xfc, 0x90,
+	0xcb, 0x44, 0x50, 0x73, 0x8e, 0xc6, 0xee, 0x9d, 0xf2, 0xae, 0x0a, 0xd4, 0xfb, 0x29, 0x16, 0x67,
+	0x41, 0x68, 0x0f, 0x6a, 0x63, 0xaa, 0x48, 0x40, 0x14, 0x31, 0x07, 0x6e, 0xec, 0xde, 0x3d, 0x93,
+	0xe0, 0x19, 0x55, 0xe4, 0x80, 0x28, 0x82, 0xf3, 0x30, 0xf7, 0x77, 0x07, 0xae, 0x54, 0x62, 0xd0,
+	0x2d, 0x68, 0x08, 0xaa, 0xc4, 0xc4, 0x1b, 0x0a, 0x9e, 0xc4, 0xe6, 0xe8, 0x75, 0x0c, 0xc6, 0xf4,
+	0x44, 0x5b, 0xd0, 0x1d, 0x68, 0x32, 0x99, 0xe9, 0x46, 0x0f, 0x2a, 0x73, 0xbe, 0x1a, 0x5e, 0x66,
+	0x32, 0x55, 0x8d, 0xe6, 0x45, 0xdb, 0xb0, 0x2c, 0x63, 0xea, 0x1b, 0x80, 0x96, 0x43, 0x5a, 0x30,
+	0xd0, 0x36, 0xed, 0x3f, 0x0c, 0xd0, 0x16, 0x00, 0x93, 0x5e, 0x30, 0x89, 0xc8, 0x98, 0xf9, 0xe6,
+	0x1c, 0x35, 0x5c, 0x67, 0xf2, 0x20, 0x35, 0xa0, 0x6b, 0x50, 0x63, 0xd2, 0x23, 0x42, 0x90, 0xb4,
+	0x76, 0x35, 0xbc, 0xc4, 0xe4, 0x9e, 0x5e, 0xba, 0xaf, 0x60, 0xfd, 0xb5, 0x76, 0x45, 0x8f, 0x61,
+	0xb5, 0x38, 0x35, 0x65, 0xcb, 0xd9, 0x9e, 0xdf, 0x69, 0xec, 0x6e, 0x9d, 0x79, 0x37, 0xb8, 0x19,
+	0xcd, 0x2e, 0xe5, 0x54, 0x62, 0x73, 0x33, 0x12, 0x73, 0xff, 0x59, 0x80, 0x8d, 0xaa, 0xa2, 0xa0,
+	0xdb, 0x00, 0x3c, 0x51, 0x59, 0xa5, 0xcd, 0x6d, 0x75, 0xe7, 0x5a, 0xce, 0xd3, 0x4b, 0xb8, 0x9e,
+	0xda, 0x75, 0xc1, 0x1f, 0xc0, 0x02, 0x15, 0x82, 0x0b, 0xc3, 0x59, 0xd8, 0x91, 0x11, 0x52, 0x4e,
+	0xfa, 0x48, 0x83, 0x9e, 0x5e, 0xc2, 0x29, 0x1a, 0x7d, 0x09, 0x0d, 0xcb, 0x6d, 0x4a, 0x0d, 0x26,
+	0xf8, 0x5a, 0x29, 0xf8, 0x28, 0x9d, 0xaf, 0xcf, 0x48, 0x6c, 0xf3, 0xda, 0xfd, 0x98, 0x62, 0x3e,
+	0x84, 0x85, 0xf8, 0x84, 0xc8, 0x54, 0x67, 0xcd, 0x5d, 0xf7, 0x2c, 0x05, 0xb7, 0x9f, 0x6b, 0x24,
+	0x4e, 0x03, 0xd0, 0x47, 0x00, 0x52, 0x11, 0xa1, 0x68, 0xe0, 0x11, 0x65, 0x55, 0x76, 0xbd, 0x9d,
+	0xce, 0xe6, 0x76, 0x36, 0x9b, 0xdb, 0x2f, 0xb2, 0xe1, 0x8d, 0xeb, 0x16, 0xbd, 0xa7, 0xd0, 0x03,
+	0xa8, 0x65, 0x33, 0xdb, 0x76, 0xdd, 0xb5, 0xd7, 0x02, 0x0f, 0x2c, 0x00, 0xe7, 0x50, 0x9d, 0xd1,
+	0x17, 0x94, 0xd8, 0x8c, 0x8b, 0xe7, 0x67, 0xb4, 0xe8, 0x3d, 0xa5, 0x43, 0x93, 0x38, 0xc8, 0x42,
+	0x97, 0xce, 0x0f, 0xb5, 0xe8, 0x3d, 0x85, 0x7e, 0x84, 0xff, 0xe7, 0xe3, 0xdd, 0xe8, 0x27, 0xef,
+	0xac, 0x5a, 0x75, 0x6b, 0x66, 0x03, 0x5e, 0xdf, 0xdd, 0x33, 0x8b, 0x7d, 0xea, 0xe0, 0x8d, 0xd3,
+	0x0a, 0x3b, 0x7a, 0x0e, 0xc8, 0x4c, 0xc6, 0x22, 0x73, 0xdd, 0x30, 0x6f, 0x97, 0x99, 0xf5, 0x6c,
+	0x2c, 0xb1, 0xae, 0xa9, 0x92, 0x4d, 0xb7, 0x45, 0x40, 0xfd, 0x91, 0x51, 0x5b, 0x23, 0x1d, 0x76,
+	0x7a, 0xad, 0x55, 0xd6, 0x81, 0x0d, 0xdb, 0x4d, 0xde, 0xcf, 0xbc, 0xef, 0x99, 0xf6, 0xd3, 0xb0,
+	0x65, 0x03, 0x5b, 0xb7, 0xbe, 0xaf, 0x78, 0xff, 0x38, 0xa6, 0x7e, 0x4f, 0xb0, 0xee, 0x2a, 0xac,
+	0x58, 0x7d, 0x09, 0x2a, 0x93, 0x50, 0x75, 0xd7, 0x61, 0x55, 0x11, 0x31, 0xa4, 0x2a, 0xdf, 0xab,
+	0x1b, 0xc0, 0x46, 0xd5, 0x89, 0xd1, 0x11, 0x34, 0xe8, 0x74, 0xf6, 0xbd, 0xc5, 0x63, 0x38, 0x1b,
+	0xee, 0xfe, 0xe1, 0xc0, 0x5a, 0xf9, 0xf8, 0xe8, 0x00, 0x96, 0x7d, 0xe2, 0x9f, 0x50, 0x4f, 0x2a,
+	0xa2, 0x12, 0x69, 0x72, 0x34, 0x77, 0xdf, 0x29, 0xe5, 0xd8, 0x4f, 0x3f, 0x5d, 0xf6, 0x35, 0xf2,
+	0xd8, 0x00, 0x71, 0xc3, 0x9f, 0x2e, 0xd0, 0x17, 0xd0, 0xb0, 0x5f, 0x37, 0xde, 0x88, 0x4e, 0x6c,
+	0x07, 0xde, 0xac, 0x26, 0xc9, 0x52, 0x63, 0xb0, 0x21, 0x5f, 0xd3, 0x09, 0xba, 0x0b, 0x4d, 0xff,
+	0x84, 0xfa, 0xa3, 0x98, 0xb3, 0x28, 0xed, 0xf2, 0xf4, 0x91, 0x59, 0x99, 0x5a, 0x7b, 0x82, 0xb9,
+	0x7f, 0x3a, 0xb0, 0x69, 0x67, 0x57, 0xe5, 0x85, 0xbd, 0x37, 0xf3, 0x92, 0x94, 0x7b, 0xb8, 0xf4,
+	0x78, 0x1c, 0xc3, 0xba, 0xfd, 0xe6, 0x0a, 0xbc, 0x4c, 0x56, 0x76, 0xe3, 0xe5, 0x37, 0x68, 0xdf,
+	0xe2, 0xb2, 0x94, 0xd9, 0x5b, 0xb1, 0xe6, 0x97, 0x1c, 0x6f, 0x54, 0xc7, 0xfc, 0x1b, 0xd4, 0xe1,
+	0xf6, 0x60, 0xb3, 0xfc, 0xa1, 0x65, 0x1e, 0x91, 0x0b, 0x7e, 0x6c, 0xfd, 0x3a, 0x0f, 0x37, 0xaa,
+	0x79, 0x65, 0xcc, 0x23, 0x49, 0xd1, 0x7d, 0x58, 0x34, 0x2f, 0xa5, 0xb4, 0xe4, 0x57, 0xcb, 0x7d,
+	0xd2, 0x13, 0x61, 0x37, 0xe4, 0x7d, 0x3d, 0xee, 0xb0, 0x85, 0xa2, 0x07, 0xb0, 0x94, 0x4a, 0x59,
+	0xda, 0x8b, 0x3a, 0x33, 0x2a, 0xc3, 0xa2, 0x8f, 0xa1, 0x31, 0x48, 0xc2, 0xd0, 0xb3, 0x09, 0xe7,
+	0xcf, 0x99, 0xb0, 0x18, 0x34, 0xfa, 0x30, 0x4d, 0xf9, 0x29, 0x2c, 0x9b, 0xd8, 0x2c, 0xef, 0xe5,
+	0xf3, 0x82, 0x4d, 0xaa, 0x6f, 0x6d, 0xe6, 0xef, 0x61, 0x2d, 0x2b, 0x47, 0x5e, 0xe2, 0x35, 0xc3,
+	0xf0, 0x41, 0x79, 0xe7, 0x67, 0xa8, 0x0a, 0xaf, 0x06, 0x45, 0x27, 0x7a, 0x08, 0x60, 0xc2, 0xbd,
+	0x44, 0x84, 0xb2, 0xb5, 0x5e, 0xde, 0x53, 0xca, 0xf8, 0x58, 0x2f, 0x7b, 0xf8, 0x48, 0xe2, 0xba,
+	0xf1, 0xf4, 0x44, 0x28, 0xdd, 0x97, 0xb0, 0xa5, 0x4b, 0x91, 0xf2, 0xe9, 0x24, 0x19, 0xe7, 0x45,
+	0x2b, 0x2e, 0xf2, 0xc6, 0x28, 0xb2, 0xda, 0x7a, 0x57, 0xaa, 0xdd, 0xb9, 0x98, 0xda, 0xbb, 0x9f,
+	0xfd, 0xf0, 0xc9, 0x90, 0xa9, 0x93, 0xa4, 0xdf, 0xf6, 0xf9, 0xb8, 0x63, 0x58, 0xb8, 0x18, 0xa6,
+	0x3f, 0x3a, 0xf9, 0x1f, 0x94, 0x21, 0x8d, 0x3a, 0x71, 0xff, 0xde, 0x90, 0x77, 0x8a, 0x7f, 0xa5,
+	0xfa, 0x8b, 0xe6, 0xd1, 0xb8, 0xff, 0x6f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x75, 0xb4, 0x2b, 0xe9,
+	0x98, 0x0d, 0x00, 0x00,
 }
diff --git a/flyteidl/gen/pb-go/flyteidl/admin/workflow.pb.go b/flyteidl/gen/pb-go/flyteidl/admin/workflow.pb.go
index a7ee768c9a..0297513f72 100644
--- a/flyteidl/gen/pb-go/flyteidl/admin/workflow.pb.go
+++ b/flyteidl/gen/pb-go/flyteidl/admin/workflow.pb.go
@@ -491,84 +491,6 @@ func (*CreateWorkflowFailureReason) XXX_OneofWrappers() []interface{} {
 	}
 }
 
-type GetDynamicNodeWorkflowRequest struct {
-	Id                   *core.NodeExecutionIdentifier `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
-	XXX_NoUnkeyedLiteral struct{}                      `json:"-"`
-	XXX_unrecognized     []byte                        `json:"-"`
-	XXX_sizecache        int32                         `json:"-"`
-}
-
-func (m *GetDynamicNodeWorkflowRequest) Reset()         { *m = GetDynamicNodeWorkflowRequest{} }
-func (m *GetDynamicNodeWorkflowRequest) String() string { return proto.CompactTextString(m) }
-func (*GetDynamicNodeWorkflowRequest) ProtoMessage()    {}
-func (*GetDynamicNodeWorkflowRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_827ade3f2372dc85, []int{9}
-}
-
-func (m *GetDynamicNodeWorkflowRequest) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_GetDynamicNodeWorkflowRequest.Unmarshal(m, b)
-}
-func (m *GetDynamicNodeWorkflowRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_GetDynamicNodeWorkflowRequest.Marshal(b, m, deterministic)
-}
-func (m *GetDynamicNodeWorkflowRequest) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_GetDynamicNodeWorkflowRequest.Merge(m, src)
-}
-func (m *GetDynamicNodeWorkflowRequest) XXX_Size() int {
-	return xxx_messageInfo_GetDynamicNodeWorkflowRequest.Size(m)
-}
-func (m *GetDynamicNodeWorkflowRequest) XXX_DiscardUnknown() {
-	xxx_messageInfo_GetDynamicNodeWorkflowRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_GetDynamicNodeWorkflowRequest proto.InternalMessageInfo
-
-func (m *GetDynamicNodeWorkflowRequest) GetId() *core.NodeExecutionIdentifier {
-	if m != nil {
-		return m.Id
-	}
-	return nil
-}
-
-type DynamicNodeWorkflowResponse struct {
-	CompiledWorkflow     *core.CompiledWorkflowClosure `protobuf:"bytes,1,opt,name=compiled_workflow,json=compiledWorkflow,proto3" json:"compiled_workflow,omitempty"`
-	XXX_NoUnkeyedLiteral struct{}                      `json:"-"`
-	XXX_unrecognized     []byte                        `json:"-"`
-	XXX_sizecache        int32                         `json:"-"`
-}
-
-func (m *DynamicNodeWorkflowResponse) Reset()         { *m = DynamicNodeWorkflowResponse{} }
-func (m *DynamicNodeWorkflowResponse) String() string { return proto.CompactTextString(m) }
-func (*DynamicNodeWorkflowResponse) ProtoMessage()    {}
-func (*DynamicNodeWorkflowResponse) Descriptor() ([]byte, []int) {
-	return fileDescriptor_827ade3f2372dc85, []int{10}
-}
-
-func (m *DynamicNodeWorkflowResponse) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_DynamicNodeWorkflowResponse.Unmarshal(m, b)
-}
-func (m *DynamicNodeWorkflowResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_DynamicNodeWorkflowResponse.Marshal(b, m, deterministic)
-}
-func (m *DynamicNodeWorkflowResponse) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_DynamicNodeWorkflowResponse.Merge(m, src)
-}
-func (m *DynamicNodeWorkflowResponse) XXX_Size() int {
-	return xxx_messageInfo_DynamicNodeWorkflowResponse.Size(m)
-}
-func (m *DynamicNodeWorkflowResponse) XXX_DiscardUnknown() {
-	xxx_messageInfo_DynamicNodeWorkflowResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_DynamicNodeWorkflowResponse proto.InternalMessageInfo
-
-func (m *DynamicNodeWorkflowResponse) GetCompiledWorkflow() *core.CompiledWorkflowClosure {
-	if m != nil {
-		return m.CompiledWorkflow
-	}
-	return nil
-}
-
 func init() {
 	proto.RegisterType((*WorkflowCreateRequest)(nil), "flyteidl.admin.WorkflowCreateRequest")
 	proto.RegisterType((*WorkflowCreateResponse)(nil), "flyteidl.admin.WorkflowCreateResponse")
@@ -579,52 +501,47 @@ func init() {
 	proto.RegisterType((*WorkflowErrorExistsDifferentStructure)(nil), "flyteidl.admin.WorkflowErrorExistsDifferentStructure")
 	proto.RegisterType((*WorkflowErrorExistsIdenticalStructure)(nil), "flyteidl.admin.WorkflowErrorExistsIdenticalStructure")
 	proto.RegisterType((*CreateWorkflowFailureReason)(nil), "flyteidl.admin.CreateWorkflowFailureReason")
-	proto.RegisterType((*GetDynamicNodeWorkflowRequest)(nil), "flyteidl.admin.GetDynamicNodeWorkflowRequest")
-	proto.RegisterType((*DynamicNodeWorkflowResponse)(nil), "flyteidl.admin.DynamicNodeWorkflowResponse")
 }
 
 func init() { proto.RegisterFile("flyteidl/admin/workflow.proto", fileDescriptor_827ade3f2372dc85) }
 
 var fileDescriptor_827ade3f2372dc85 = []byte{
-	// 640 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x55, 0x5d, 0x6f, 0xd3, 0x30,
-	0x14, 0x25, 0x1d, 0x8c, 0xf5, 0x76, 0xc0, 0x16, 0x01, 0x0a, 0xdd, 0xc6, 0x46, 0x24, 0x60, 0x08,
-	0x91, 0xa0, 0x21, 0x26, 0x4d, 0x13, 0x0f, 0xac, 0x2d, 0x1f, 0x12, 0xe2, 0x21, 0x9b, 0x34, 0x09,
-	0x21, 0x55, 0xa9, 0x73, 0xdb, 0x59, 0x4b, 0xe2, 0x60, 0x3b, 0xda, 0xfa, 0x43, 0x78, 0xe4, 0x81,
-	0x3f, 0xc5, 0xef, 0x41, 0x71, 0xe2, 0xb4, 0xf5, 0x28, 0x0c, 0x24, 0xde, 0x96, 0xdd, 0xe3, 0x73,
-	0xce, 0x3d, 0xbe, 0xd7, 0x85, 0x8d, 0x61, 0x3c, 0x96, 0x48, 0xa3, 0xd8, 0x0f, 0xa3, 0x84, 0xa6,
-	0xfe, 0x19, 0xe3, 0xa7, 0xc3, 0x98, 0x9d, 0x79, 0x19, 0x67, 0x92, 0xd9, 0x37, 0x75, 0xd9, 0x53,
-	0xe5, 0xf6, 0x7a, 0x0d, 0x27, 0x8c, 0xa3, 0x4f, 0x58, 0x92, 0xd1, 0x18, 0x79, 0x89, 0x6e, 0xdf,
-	0x9f, 0xad, 0xd2, 0x08, 0x53, 0x49, 0x87, 0xb4, 0xae, 0x1b, 0xa7, 0x67, 0xb5, 0xda, 0x8f, 0x0d,
-	0x2b, 0x11, 0x0a, 0xc2, 0x69, 0x26, 0x29, 0x4b, 0xfb, 0x05, 0x91, 0x1c, 0x57, 0xc0, 0xcd, 0x11,
-	0x63, 0xa3, 0x18, 0x7d, 0xf5, 0x35, 0xc8, 0x87, 0xbe, 0xa4, 0x09, 0x0a, 0x19, 0x26, 0x59, 0x09,
-	0x70, 0x25, 0xdc, 0x39, 0xae, 0xb8, 0x3b, 0x1c, 0x43, 0x89, 0x01, 0x7e, 0xc9, 0x51, 0x48, 0xfb,
-	0x09, 0x34, 0x68, 0xe4, 0x58, 0x5b, 0xd6, 0x76, 0x6b, 0xe7, 0x9e, 0x57, 0xf7, 0x56, 0xb8, 0xf1,
-	0xde, 0xd7, 0x6e, 0x83, 0x06, 0x8d, 0xec, 0xe7, 0x70, 0x55, 0x64, 0x48, 0x9c, 0x86, 0x02, 0xaf,
-	0x7b, 0xb3, 0x41, 0x78, 0x9a, 0xff, 0x30, 0x43, 0x12, 0x28, 0xa4, 0xeb, 0xc0, 0x5d, 0x53, 0x55,
-	0x64, 0x2c, 0x15, 0xe8, 0x7e, 0xb3, 0x60, 0x49, 0x97, 0xfe, 0xc6, 0xc3, 0x1e, 0x5c, 0x27, 0x31,
-	0x13, 0x39, 0xc7, 0xca, 0xc6, 0xe6, 0x3c, 0x1b, 0x9d, 0x12, 0x16, 0x68, 0xbc, 0xfd, 0x14, 0x56,
-	0xc5, 0x09, 0xe3, 0xb2, 0x3f, 0x95, 0xa2, 0xb3, 0xb0, 0x65, 0x6d, 0x37, 0x83, 0x15, 0x55, 0xe8,
-	0x4e, 0xfe, 0xef, 0x7e, 0x86, 0x65, 0x4d, 0xf4, 0x81, 0x0a, 0x69, 0xef, 0x42, 0x53, 0xdf, 0x8d,
-	0x70, 0xac, 0xad, 0x85, 0xed, 0xd6, 0x8e, 0x33, 0x4f, 0x39, 0x98, 0x40, 0xed, 0xdb, 0x70, 0x4d,
-	0xb2, 0x53, 0x4c, 0x95, 0xdb, 0x66, 0x50, 0x7e, 0xb8, 0x3f, 0xac, 0x09, 0x7d, 0x11, 0x97, 0xbd,
-	0x0f, 0x4b, 0x12, 0x93, 0x2c, 0x0e, 0x25, 0x56, 0x39, 0x6c, 0x1a, 0x39, 0x68, 0xf8, 0x51, 0x05,
-	0x0b, 0xea, 0x03, 0x76, 0x17, 0x6e, 0x88, 0x7c, 0xd0, 0x9f, 0xf8, 0x6b, 0x28, 0x7f, 0x7f, 0x64,
-	0x58, 0x16, 0xf9, 0xe0, 0xb8, 0x76, 0xda, 0x81, 0x96, 0x19, 0x4c, 0x6b, 0xe7, 0x81, 0xd9, 0xe3,
-	0x54, 0x46, 0x3d, 0x35, 0x80, 0xc1, 0xf4, 0x29, 0xf7, 0xbb, 0x05, 0xb7, 0x8c, 0x0b, 0xb0, 0x0f,
-	0x61, 0xb5, 0x5a, 0x8a, 0xa8, 0xf6, 0x58, 0x35, 0xf9, 0xc8, 0xb0, 0xd8, 0xa9, 0x70, 0xe6, 0x1d,
-	0xae, 0x10, 0xa3, 0x60, 0xef, 0x01, 0x10, 0x35, 0x51, 0x51, 0x3f, 0x94, 0xd5, 0x28, 0xb4, 0xbd,
-	0x72, 0x0b, 0x3c, 0xbd, 0x05, 0xde, 0x91, 0xde, 0x82, 0xa0, 0x59, 0xa1, 0x5f, 0x4b, 0x37, 0x80,
-	0x87, 0x9a, 0xa6, 0xc7, 0x39, 0xe3, 0xbd, 0x73, 0x2a, 0xa4, 0xe8, 0xd2, 0xe1, 0x10, 0x39, 0xa6,
-	0xf2, 0x50, 0xf2, 0x9c, 0xc8, 0xc2, 0xf8, 0xe5, 0xc7, 0x72, 0x0e, 0x67, 0x09, 0x22, 0x61, 0xfc,
-	0x4f, 0x9c, 0x5f, 0x1b, 0xb0, 0x56, 0x6e, 0x8d, 0xa6, 0x7e, 0x13, 0xd2, 0xb8, 0x88, 0x03, 0x43,
-	0xc1, 0x52, 0x3b, 0x87, 0x36, 0x2a, 0x99, 0x7e, 0xa4, 0xbd, 0xf7, 0x85, 0x16, 0xaa, 0x24, 0x5e,
-	0xce, 0x9b, 0xd1, 0xdf, 0x76, 0xfe, 0xee, 0x4a, 0xe0, 0xe0, 0xbc, 0x54, 0x26, 0xb2, 0x54, 0xb7,
-	0x37, 0x25, 0xdb, 0xb8, 0xb4, 0xec, 0xc5, 0x70, 0x26, 0xb2, 0x17, 0x6b, 0x07, 0x4b, 0xb0, 0xc8,
-	0x55, 0xdf, 0xee, 0x31, 0x6c, 0xbc, 0x45, 0xd9, 0x1d, 0xa7, 0x61, 0x42, 0xc9, 0x47, 0x16, 0xd5,
-	0xf1, 0xe8, 0x27, 0x6d, 0x77, 0x2a, 0x63, 0x73, 0xc2, 0x0a, 0x7c, 0xef, 0x1c, 0x49, 0x5e, 0x8c,
-	0xab, 0x11, 0x38, 0x87, 0xb5, 0x5f, 0xb2, 0x96, 0x4f, 0xd6, 0x7f, 0x99, 0xe3, 0x83, 0x57, 0x9f,
-	0xf6, 0x47, 0x54, 0x9e, 0xe4, 0x03, 0x8f, 0xb0, 0xc4, 0x57, 0x2c, 0x8c, 0x8f, 0xca, 0x3f, 0xfc,
-	0xfa, 0xf5, 0x1f, 0x61, 0xea, 0x67, 0x83, 0x67, 0x23, 0xe6, 0xcf, 0xfe, 0x20, 0x0c, 0x16, 0xd5,
-	0xa8, 0xbf, 0xf8, 0x19, 0x00, 0x00, 0xff, 0xff, 0x95, 0x9f, 0x73, 0xd0, 0xb4, 0x06, 0x00, 0x00,
+	// 592 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x54, 0x5d, 0x6f, 0xd3, 0x30,
+	0x14, 0x25, 0x19, 0x8c, 0xd5, 0x1d, 0xb0, 0x45, 0x80, 0x42, 0x19, 0x6c, 0x44, 0x02, 0x8a, 0x10,
+	0x09, 0x2a, 0x02, 0x69, 0x9a, 0x78, 0x60, 0x6d, 0x11, 0x48, 0x3c, 0xb9, 0x93, 0x26, 0x21, 0xa4,
+	0x28, 0x1f, 0x37, 0x99, 0xb5, 0x24, 0x0e, 0xb6, 0xa3, 0xb1, 0x1f, 0xc2, 0x23, 0x0f, 0xfc, 0x29,
+	0x7e, 0x0f, 0xaa, 0x63, 0x27, 0x6d, 0xa6, 0xc2, 0xe0, 0xad, 0xe9, 0x3d, 0x3e, 0xe7, 0xdc, 0xe3,
+	0x7b, 0x8d, 0x1e, 0x24, 0xd9, 0xb9, 0x00, 0x12, 0x67, 0x5e, 0x10, 0xe7, 0xa4, 0xf0, 0xce, 0x28,
+	0x3b, 0x4d, 0x32, 0x7a, 0xe6, 0x96, 0x8c, 0x0a, 0x6a, 0xdd, 0xd4, 0x65, 0x57, 0x96, 0x07, 0x3b,
+	0x0d, 0x3c, 0xa2, 0x0c, 0xbc, 0x88, 0xe6, 0x25, 0xc9, 0x80, 0xd5, 0xe8, 0xc1, 0xc3, 0xe5, 0x2a,
+	0x89, 0xa1, 0x10, 0x24, 0x21, 0x4d, 0xbd, 0x73, 0x7a, 0x59, 0x6b, 0xf0, 0xb4, 0x63, 0x25, 0x06,
+	0x1e, 0x31, 0x52, 0x0a, 0x42, 0x0b, 0x7f, 0x4e, 0x24, 0xce, 0x15, 0x70, 0x37, 0xa5, 0x34, 0xcd,
+	0xc0, 0x93, 0x5f, 0x61, 0x95, 0x78, 0x82, 0xe4, 0xc0, 0x45, 0x90, 0x97, 0x35, 0xc0, 0x11, 0xe8,
+	0xce, 0xb1, 0xe2, 0x1e, 0x33, 0x08, 0x04, 0x60, 0xf8, 0x5a, 0x01, 0x17, 0xd6, 0x33, 0x64, 0x92,
+	0xd8, 0x36, 0xf6, 0x8c, 0x61, 0x7f, 0x74, 0xcf, 0x6d, 0x7a, 0x9b, 0xbb, 0x71, 0x3f, 0x36, 0x6e,
+	0xb1, 0x49, 0x62, 0xeb, 0x25, 0xba, 0xca, 0x4b, 0x88, 0x6c, 0x53, 0x82, 0x77, 0xdc, 0xe5, 0x20,
+	0x5c, 0xcd, 0x3f, 0x2b, 0x21, 0xc2, 0x12, 0xe9, 0xd8, 0xe8, 0x6e, 0x57, 0x95, 0x97, 0xb4, 0xe0,
+	0xe0, 0xfc, 0x30, 0xd0, 0x86, 0x2e, 0xfd, 0x8b, 0x87, 0x7d, 0x74, 0x3d, 0xca, 0x28, 0xaf, 0x18,
+	0x28, 0x1b, 0xbb, 0xab, 0x6c, 0x8c, 0x6b, 0x18, 0xd6, 0x78, 0xeb, 0x39, 0xda, 0xe6, 0x27, 0x94,
+	0x09, 0x7f, 0x21, 0x45, 0x7b, 0x6d, 0xcf, 0x18, 0xf6, 0xf0, 0x96, 0x2c, 0x4c, 0xda, 0xff, 0x9d,
+	0x2f, 0x68, 0x53, 0x13, 0x7d, 0x22, 0x5c, 0x58, 0x6f, 0x50, 0x4f, 0xdf, 0x0d, 0xb7, 0x8d, 0xbd,
+	0xb5, 0x61, 0x7f, 0x64, 0xaf, 0x52, 0xc6, 0x2d, 0xd4, 0xba, 0x8d, 0xae, 0x09, 0x7a, 0x0a, 0x85,
+	0x74, 0xdb, 0xc3, 0xf5, 0x87, 0xf3, 0xcb, 0x68, 0xe9, 0xe7, 0x71, 0x59, 0x07, 0x68, 0x43, 0x40,
+	0x5e, 0x66, 0x81, 0x00, 0x95, 0xc3, 0x6e, 0x27, 0x07, 0x0d, 0x3f, 0x52, 0x30, 0xdc, 0x1c, 0xb0,
+	0x26, 0xe8, 0x06, 0xaf, 0x42, 0xbf, 0xf5, 0x67, 0x4a, 0x7f, 0x7f, 0x65, 0xd8, 0xe4, 0x55, 0x78,
+	0xdc, 0x38, 0x1d, 0xa3, 0x7e, 0x37, 0x98, 0xfe, 0xe8, 0x51, 0xb7, 0xc7, 0x85, 0x8c, 0xa6, 0x72,
+	0x00, 0xf1, 0xe2, 0x29, 0xe7, 0xa7, 0x81, 0x6e, 0x75, 0x2e, 0xc0, 0x9a, 0xa1, 0x6d, 0xb5, 0x14,
+	0x71, 0xe3, 0x51, 0x35, 0xf9, 0xa4, 0x63, 0x71, 0xac, 0x70, 0xdd, 0x3b, 0xdc, 0x8a, 0x3a, 0x05,
+	0x6b, 0x1f, 0xa1, 0x48, 0x4e, 0x54, 0xec, 0x07, 0x42, 0x8d, 0xc2, 0xc0, 0xad, 0xb7, 0xc0, 0xd5,
+	0x5b, 0xe0, 0x1e, 0xe9, 0x2d, 0xc0, 0x3d, 0x85, 0x7e, 0x27, 0x1c, 0x8c, 0x1e, 0x6b, 0x9a, 0x29,
+	0x63, 0x94, 0x4d, 0xbf, 0x11, 0x2e, 0xf8, 0x84, 0x24, 0x09, 0x30, 0x28, 0xc4, 0x4c, 0xb0, 0x2a,
+	0x12, 0x73, 0xe3, 0x97, 0x1f, 0xcb, 0x15, 0x9c, 0x35, 0x28, 0x0a, 0xb2, 0xff, 0xe2, 0xfc, 0x6e,
+	0xa2, 0xfb, 0xf5, 0xd6, 0x68, 0xea, 0xf7, 0x01, 0xc9, 0xe6, 0x71, 0x40, 0xc0, 0x69, 0x61, 0x55,
+	0x68, 0x00, 0x52, 0xc6, 0x8f, 0xb5, 0x77, 0x9f, 0x6b, 0x21, 0x25, 0xf1, 0x7a, 0xd5, 0x8c, 0xfe,
+	0xb1, 0xf3, 0x0f, 0x57, 0xb0, 0x0d, 0xab, 0x52, 0x69, 0x65, 0x89, 0x6e, 0x6f, 0x41, 0xd6, 0xbc,
+	0xb4, 0xec, 0xc5, 0x70, 0x5a, 0xd9, 0x8b, 0xb5, 0xc3, 0x0d, 0xb4, 0xce, 0x64, 0xdf, 0x87, 0x6f,
+	0x3f, 0x1f, 0xa4, 0x44, 0x9c, 0x54, 0xa1, 0x1b, 0xd1, 0xdc, 0x93, 0x42, 0x94, 0xa5, 0xf5, 0x0f,
+	0xaf, 0x79, 0x30, 0x53, 0x28, 0xbc, 0x32, 0x7c, 0x91, 0x52, 0x6f, 0xf9, 0x0d, 0x0d, 0xd7, 0xe5,
+	0x74, 0xbc, 0xfa, 0x1d, 0x00, 0x00, 0xff, 0xff, 0x31, 0xff, 0x42, 0x9e, 0xe7, 0x05, 0x00, 0x00,
 }
diff --git a/flyteidl/gen/pb-java/flyteidl/admin/NodeExecutionOuterClass.java b/flyteidl/gen/pb-java/flyteidl/admin/NodeExecutionOuterClass.java
index b1301715d6..da63f51ffc 100644
--- a/flyteidl/gen/pb-java/flyteidl/admin/NodeExecutionOuterClass.java
+++ b/flyteidl/gen/pb-java/flyteidl/admin/NodeExecutionOuterClass.java
@@ -15710,6 +15710,1218 @@ public flyteidl.admin.NodeExecutionOuterClass.NodeExecutionGetDataResponse getDe
 
   }
 
+  public interface GetDynamicNodeWorkflowRequestOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:flyteidl.admin.GetDynamicNodeWorkflowRequest)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>.flyteidl.core.NodeExecutionIdentifier id = 1;</code>
+     */
+    boolean hasId();
+    /**
+     * <code>.flyteidl.core.NodeExecutionIdentifier id = 1;</code>
+     */
+    flyteidl.core.IdentifierOuterClass.NodeExecutionIdentifier getId();
+    /**
+     * <code>.flyteidl.core.NodeExecutionIdentifier id = 1;</code>
+     */
+    flyteidl.core.IdentifierOuterClass.NodeExecutionIdentifierOrBuilder getIdOrBuilder();
+  }
+  /**
+   * Protobuf type {@code flyteidl.admin.GetDynamicNodeWorkflowRequest}
+   */
+  public  static final class GetDynamicNodeWorkflowRequest extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:flyteidl.admin.GetDynamicNodeWorkflowRequest)
+      GetDynamicNodeWorkflowRequestOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use GetDynamicNodeWorkflowRequest.newBuilder() to construct.
+    private GetDynamicNodeWorkflowRequest(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private GetDynamicNodeWorkflowRequest() {
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private GetDynamicNodeWorkflowRequest(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              flyteidl.core.IdentifierOuterClass.NodeExecutionIdentifier.Builder subBuilder = null;
+              if (id_ != null) {
+                subBuilder = id_.toBuilder();
+              }
+              id_ = input.readMessage(flyteidl.core.IdentifierOuterClass.NodeExecutionIdentifier.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(id_);
+                id_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return flyteidl.admin.NodeExecutionOuterClass.internal_static_flyteidl_admin_GetDynamicNodeWorkflowRequest_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return flyteidl.admin.NodeExecutionOuterClass.internal_static_flyteidl_admin_GetDynamicNodeWorkflowRequest_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              flyteidl.admin.NodeExecutionOuterClass.GetDynamicNodeWorkflowRequest.class, flyteidl.admin.NodeExecutionOuterClass.GetDynamicNodeWorkflowRequest.Builder.class);
+    }
+
+    public static final int ID_FIELD_NUMBER = 1;
+    private flyteidl.core.IdentifierOuterClass.NodeExecutionIdentifier id_;
+    /**
+     * <code>.flyteidl.core.NodeExecutionIdentifier id = 1;</code>
+     */
+    public boolean hasId() {
+      return id_ != null;
+    }
+    /**
+     * <code>.flyteidl.core.NodeExecutionIdentifier id = 1;</code>
+     */
+    public flyteidl.core.IdentifierOuterClass.NodeExecutionIdentifier getId() {
+      return id_ == null ? flyteidl.core.IdentifierOuterClass.NodeExecutionIdentifier.getDefaultInstance() : id_;
+    }
+    /**
+     * <code>.flyteidl.core.NodeExecutionIdentifier id = 1;</code>
+     */
+    public flyteidl.core.IdentifierOuterClass.NodeExecutionIdentifierOrBuilder getIdOrBuilder() {
+      return getId();
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (id_ != null) {
+        output.writeMessage(1, getId());
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (id_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getId());
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof flyteidl.admin.NodeExecutionOuterClass.GetDynamicNodeWorkflowRequest)) {
+        return super.equals(obj);
+      }
+      flyteidl.admin.NodeExecutionOuterClass.GetDynamicNodeWorkflowRequest other = (flyteidl.admin.NodeExecutionOuterClass.GetDynamicNodeWorkflowRequest) obj;
+
+      if (hasId() != other.hasId()) return false;
+      if (hasId()) {
+        if (!getId()
+            .equals(other.getId())) return false;
+      }
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (hasId()) {
+        hash = (37 * hash) + ID_FIELD_NUMBER;
+        hash = (53 * hash) + getId().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static flyteidl.admin.NodeExecutionOuterClass.GetDynamicNodeWorkflowRequest parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static flyteidl.admin.NodeExecutionOuterClass.GetDynamicNodeWorkflowRequest parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static flyteidl.admin.NodeExecutionOuterClass.GetDynamicNodeWorkflowRequest parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static flyteidl.admin.NodeExecutionOuterClass.GetDynamicNodeWorkflowRequest parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static flyteidl.admin.NodeExecutionOuterClass.GetDynamicNodeWorkflowRequest parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static flyteidl.admin.NodeExecutionOuterClass.GetDynamicNodeWorkflowRequest parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static flyteidl.admin.NodeExecutionOuterClass.GetDynamicNodeWorkflowRequest parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static flyteidl.admin.NodeExecutionOuterClass.GetDynamicNodeWorkflowRequest parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static flyteidl.admin.NodeExecutionOuterClass.GetDynamicNodeWorkflowRequest parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static flyteidl.admin.NodeExecutionOuterClass.GetDynamicNodeWorkflowRequest parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static flyteidl.admin.NodeExecutionOuterClass.GetDynamicNodeWorkflowRequest parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static flyteidl.admin.NodeExecutionOuterClass.GetDynamicNodeWorkflowRequest parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(flyteidl.admin.NodeExecutionOuterClass.GetDynamicNodeWorkflowRequest prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code flyteidl.admin.GetDynamicNodeWorkflowRequest}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:flyteidl.admin.GetDynamicNodeWorkflowRequest)
+        flyteidl.admin.NodeExecutionOuterClass.GetDynamicNodeWorkflowRequestOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return flyteidl.admin.NodeExecutionOuterClass.internal_static_flyteidl_admin_GetDynamicNodeWorkflowRequest_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return flyteidl.admin.NodeExecutionOuterClass.internal_static_flyteidl_admin_GetDynamicNodeWorkflowRequest_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                flyteidl.admin.NodeExecutionOuterClass.GetDynamicNodeWorkflowRequest.class, flyteidl.admin.NodeExecutionOuterClass.GetDynamicNodeWorkflowRequest.Builder.class);
+      }
+
+      // Construct using flyteidl.admin.NodeExecutionOuterClass.GetDynamicNodeWorkflowRequest.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (idBuilder_ == null) {
+          id_ = null;
+        } else {
+          id_ = null;
+          idBuilder_ = null;
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return flyteidl.admin.NodeExecutionOuterClass.internal_static_flyteidl_admin_GetDynamicNodeWorkflowRequest_descriptor;
+      }
+
+      @java.lang.Override
+      public flyteidl.admin.NodeExecutionOuterClass.GetDynamicNodeWorkflowRequest getDefaultInstanceForType() {
+        return flyteidl.admin.NodeExecutionOuterClass.GetDynamicNodeWorkflowRequest.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public flyteidl.admin.NodeExecutionOuterClass.GetDynamicNodeWorkflowRequest build() {
+        flyteidl.admin.NodeExecutionOuterClass.GetDynamicNodeWorkflowRequest result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public flyteidl.admin.NodeExecutionOuterClass.GetDynamicNodeWorkflowRequest buildPartial() {
+        flyteidl.admin.NodeExecutionOuterClass.GetDynamicNodeWorkflowRequest result = new flyteidl.admin.NodeExecutionOuterClass.GetDynamicNodeWorkflowRequest(this);
+        if (idBuilder_ == null) {
+          result.id_ = id_;
+        } else {
+          result.id_ = idBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof flyteidl.admin.NodeExecutionOuterClass.GetDynamicNodeWorkflowRequest) {
+          return mergeFrom((flyteidl.admin.NodeExecutionOuterClass.GetDynamicNodeWorkflowRequest)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(flyteidl.admin.NodeExecutionOuterClass.GetDynamicNodeWorkflowRequest other) {
+        if (other == flyteidl.admin.NodeExecutionOuterClass.GetDynamicNodeWorkflowRequest.getDefaultInstance()) return this;
+        if (other.hasId()) {
+          mergeId(other.getId());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        flyteidl.admin.NodeExecutionOuterClass.GetDynamicNodeWorkflowRequest parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (flyteidl.admin.NodeExecutionOuterClass.GetDynamicNodeWorkflowRequest) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private flyteidl.core.IdentifierOuterClass.NodeExecutionIdentifier id_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          flyteidl.core.IdentifierOuterClass.NodeExecutionIdentifier, flyteidl.core.IdentifierOuterClass.NodeExecutionIdentifier.Builder, flyteidl.core.IdentifierOuterClass.NodeExecutionIdentifierOrBuilder> idBuilder_;
+      /**
+       * <code>.flyteidl.core.NodeExecutionIdentifier id = 1;</code>
+       */
+      public boolean hasId() {
+        return idBuilder_ != null || id_ != null;
+      }
+      /**
+       * <code>.flyteidl.core.NodeExecutionIdentifier id = 1;</code>
+       */
+      public flyteidl.core.IdentifierOuterClass.NodeExecutionIdentifier getId() {
+        if (idBuilder_ == null) {
+          return id_ == null ? flyteidl.core.IdentifierOuterClass.NodeExecutionIdentifier.getDefaultInstance() : id_;
+        } else {
+          return idBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.flyteidl.core.NodeExecutionIdentifier id = 1;</code>
+       */
+      public Builder setId(flyteidl.core.IdentifierOuterClass.NodeExecutionIdentifier value) {
+        if (idBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          id_ = value;
+          onChanged();
+        } else {
+          idBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.flyteidl.core.NodeExecutionIdentifier id = 1;</code>
+       */
+      public Builder setId(
+          flyteidl.core.IdentifierOuterClass.NodeExecutionIdentifier.Builder builderForValue) {
+        if (idBuilder_ == null) {
+          id_ = builderForValue.build();
+          onChanged();
+        } else {
+          idBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.flyteidl.core.NodeExecutionIdentifier id = 1;</code>
+       */
+      public Builder mergeId(flyteidl.core.IdentifierOuterClass.NodeExecutionIdentifier value) {
+        if (idBuilder_ == null) {
+          if (id_ != null) {
+            id_ =
+              flyteidl.core.IdentifierOuterClass.NodeExecutionIdentifier.newBuilder(id_).mergeFrom(value).buildPartial();
+          } else {
+            id_ = value;
+          }
+          onChanged();
+        } else {
+          idBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.flyteidl.core.NodeExecutionIdentifier id = 1;</code>
+       */
+      public Builder clearId() {
+        if (idBuilder_ == null) {
+          id_ = null;
+          onChanged();
+        } else {
+          id_ = null;
+          idBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.flyteidl.core.NodeExecutionIdentifier id = 1;</code>
+       */
+      public flyteidl.core.IdentifierOuterClass.NodeExecutionIdentifier.Builder getIdBuilder() {
+        
+        onChanged();
+        return getIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.flyteidl.core.NodeExecutionIdentifier id = 1;</code>
+       */
+      public flyteidl.core.IdentifierOuterClass.NodeExecutionIdentifierOrBuilder getIdOrBuilder() {
+        if (idBuilder_ != null) {
+          return idBuilder_.getMessageOrBuilder();
+        } else {
+          return id_ == null ?
+              flyteidl.core.IdentifierOuterClass.NodeExecutionIdentifier.getDefaultInstance() : id_;
+        }
+      }
+      /**
+       * <code>.flyteidl.core.NodeExecutionIdentifier id = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          flyteidl.core.IdentifierOuterClass.NodeExecutionIdentifier, flyteidl.core.IdentifierOuterClass.NodeExecutionIdentifier.Builder, flyteidl.core.IdentifierOuterClass.NodeExecutionIdentifierOrBuilder> 
+          getIdFieldBuilder() {
+        if (idBuilder_ == null) {
+          idBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              flyteidl.core.IdentifierOuterClass.NodeExecutionIdentifier, flyteidl.core.IdentifierOuterClass.NodeExecutionIdentifier.Builder, flyteidl.core.IdentifierOuterClass.NodeExecutionIdentifierOrBuilder>(
+                  getId(),
+                  getParentForChildren(),
+                  isClean());
+          id_ = null;
+        }
+        return idBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:flyteidl.admin.GetDynamicNodeWorkflowRequest)
+    }
+
+    // @@protoc_insertion_point(class_scope:flyteidl.admin.GetDynamicNodeWorkflowRequest)
+    private static final flyteidl.admin.NodeExecutionOuterClass.GetDynamicNodeWorkflowRequest DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new flyteidl.admin.NodeExecutionOuterClass.GetDynamicNodeWorkflowRequest();
+    }
+
+    public static flyteidl.admin.NodeExecutionOuterClass.GetDynamicNodeWorkflowRequest getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<GetDynamicNodeWorkflowRequest>
+        PARSER = new com.google.protobuf.AbstractParser<GetDynamicNodeWorkflowRequest>() {
+      @java.lang.Override
+      public GetDynamicNodeWorkflowRequest parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new GetDynamicNodeWorkflowRequest(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<GetDynamicNodeWorkflowRequest> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<GetDynamicNodeWorkflowRequest> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public flyteidl.admin.NodeExecutionOuterClass.GetDynamicNodeWorkflowRequest getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface DynamicNodeWorkflowResponseOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:flyteidl.admin.DynamicNodeWorkflowResponse)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>.flyteidl.core.CompiledWorkflowClosure compiled_workflow = 1;</code>
+     */
+    boolean hasCompiledWorkflow();
+    /**
+     * <code>.flyteidl.core.CompiledWorkflowClosure compiled_workflow = 1;</code>
+     */
+    flyteidl.core.Compiler.CompiledWorkflowClosure getCompiledWorkflow();
+    /**
+     * <code>.flyteidl.core.CompiledWorkflowClosure compiled_workflow = 1;</code>
+     */
+    flyteidl.core.Compiler.CompiledWorkflowClosureOrBuilder getCompiledWorkflowOrBuilder();
+  }
+  /**
+   * Protobuf type {@code flyteidl.admin.DynamicNodeWorkflowResponse}
+   */
+  public  static final class DynamicNodeWorkflowResponse extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:flyteidl.admin.DynamicNodeWorkflowResponse)
+      DynamicNodeWorkflowResponseOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use DynamicNodeWorkflowResponse.newBuilder() to construct.
+    private DynamicNodeWorkflowResponse(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private DynamicNodeWorkflowResponse() {
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private DynamicNodeWorkflowResponse(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              flyteidl.core.Compiler.CompiledWorkflowClosure.Builder subBuilder = null;
+              if (compiledWorkflow_ != null) {
+                subBuilder = compiledWorkflow_.toBuilder();
+              }
+              compiledWorkflow_ = input.readMessage(flyteidl.core.Compiler.CompiledWorkflowClosure.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(compiledWorkflow_);
+                compiledWorkflow_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return flyteidl.admin.NodeExecutionOuterClass.internal_static_flyteidl_admin_DynamicNodeWorkflowResponse_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return flyteidl.admin.NodeExecutionOuterClass.internal_static_flyteidl_admin_DynamicNodeWorkflowResponse_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              flyteidl.admin.NodeExecutionOuterClass.DynamicNodeWorkflowResponse.class, flyteidl.admin.NodeExecutionOuterClass.DynamicNodeWorkflowResponse.Builder.class);
+    }
+
+    public static final int COMPILED_WORKFLOW_FIELD_NUMBER = 1;
+    private flyteidl.core.Compiler.CompiledWorkflowClosure compiledWorkflow_;
+    /**
+     * <code>.flyteidl.core.CompiledWorkflowClosure compiled_workflow = 1;</code>
+     */
+    public boolean hasCompiledWorkflow() {
+      return compiledWorkflow_ != null;
+    }
+    /**
+     * <code>.flyteidl.core.CompiledWorkflowClosure compiled_workflow = 1;</code>
+     */
+    public flyteidl.core.Compiler.CompiledWorkflowClosure getCompiledWorkflow() {
+      return compiledWorkflow_ == null ? flyteidl.core.Compiler.CompiledWorkflowClosure.getDefaultInstance() : compiledWorkflow_;
+    }
+    /**
+     * <code>.flyteidl.core.CompiledWorkflowClosure compiled_workflow = 1;</code>
+     */
+    public flyteidl.core.Compiler.CompiledWorkflowClosureOrBuilder getCompiledWorkflowOrBuilder() {
+      return getCompiledWorkflow();
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (compiledWorkflow_ != null) {
+        output.writeMessage(1, getCompiledWorkflow());
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (compiledWorkflow_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getCompiledWorkflow());
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof flyteidl.admin.NodeExecutionOuterClass.DynamicNodeWorkflowResponse)) {
+        return super.equals(obj);
+      }
+      flyteidl.admin.NodeExecutionOuterClass.DynamicNodeWorkflowResponse other = (flyteidl.admin.NodeExecutionOuterClass.DynamicNodeWorkflowResponse) obj;
+
+      if (hasCompiledWorkflow() != other.hasCompiledWorkflow()) return false;
+      if (hasCompiledWorkflow()) {
+        if (!getCompiledWorkflow()
+            .equals(other.getCompiledWorkflow())) return false;
+      }
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (hasCompiledWorkflow()) {
+        hash = (37 * hash) + COMPILED_WORKFLOW_FIELD_NUMBER;
+        hash = (53 * hash) + getCompiledWorkflow().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static flyteidl.admin.NodeExecutionOuterClass.DynamicNodeWorkflowResponse parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static flyteidl.admin.NodeExecutionOuterClass.DynamicNodeWorkflowResponse parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static flyteidl.admin.NodeExecutionOuterClass.DynamicNodeWorkflowResponse parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static flyteidl.admin.NodeExecutionOuterClass.DynamicNodeWorkflowResponse parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static flyteidl.admin.NodeExecutionOuterClass.DynamicNodeWorkflowResponse parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static flyteidl.admin.NodeExecutionOuterClass.DynamicNodeWorkflowResponse parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static flyteidl.admin.NodeExecutionOuterClass.DynamicNodeWorkflowResponse parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static flyteidl.admin.NodeExecutionOuterClass.DynamicNodeWorkflowResponse parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static flyteidl.admin.NodeExecutionOuterClass.DynamicNodeWorkflowResponse parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static flyteidl.admin.NodeExecutionOuterClass.DynamicNodeWorkflowResponse parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static flyteidl.admin.NodeExecutionOuterClass.DynamicNodeWorkflowResponse parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static flyteidl.admin.NodeExecutionOuterClass.DynamicNodeWorkflowResponse parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(flyteidl.admin.NodeExecutionOuterClass.DynamicNodeWorkflowResponse prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code flyteidl.admin.DynamicNodeWorkflowResponse}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:flyteidl.admin.DynamicNodeWorkflowResponse)
+        flyteidl.admin.NodeExecutionOuterClass.DynamicNodeWorkflowResponseOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return flyteidl.admin.NodeExecutionOuterClass.internal_static_flyteidl_admin_DynamicNodeWorkflowResponse_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return flyteidl.admin.NodeExecutionOuterClass.internal_static_flyteidl_admin_DynamicNodeWorkflowResponse_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                flyteidl.admin.NodeExecutionOuterClass.DynamicNodeWorkflowResponse.class, flyteidl.admin.NodeExecutionOuterClass.DynamicNodeWorkflowResponse.Builder.class);
+      }
+
+      // Construct using flyteidl.admin.NodeExecutionOuterClass.DynamicNodeWorkflowResponse.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (compiledWorkflowBuilder_ == null) {
+          compiledWorkflow_ = null;
+        } else {
+          compiledWorkflow_ = null;
+          compiledWorkflowBuilder_ = null;
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return flyteidl.admin.NodeExecutionOuterClass.internal_static_flyteidl_admin_DynamicNodeWorkflowResponse_descriptor;
+      }
+
+      @java.lang.Override
+      public flyteidl.admin.NodeExecutionOuterClass.DynamicNodeWorkflowResponse getDefaultInstanceForType() {
+        return flyteidl.admin.NodeExecutionOuterClass.DynamicNodeWorkflowResponse.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public flyteidl.admin.NodeExecutionOuterClass.DynamicNodeWorkflowResponse build() {
+        flyteidl.admin.NodeExecutionOuterClass.DynamicNodeWorkflowResponse result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public flyteidl.admin.NodeExecutionOuterClass.DynamicNodeWorkflowResponse buildPartial() {
+        flyteidl.admin.NodeExecutionOuterClass.DynamicNodeWorkflowResponse result = new flyteidl.admin.NodeExecutionOuterClass.DynamicNodeWorkflowResponse(this);
+        if (compiledWorkflowBuilder_ == null) {
+          result.compiledWorkflow_ = compiledWorkflow_;
+        } else {
+          result.compiledWorkflow_ = compiledWorkflowBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof flyteidl.admin.NodeExecutionOuterClass.DynamicNodeWorkflowResponse) {
+          return mergeFrom((flyteidl.admin.NodeExecutionOuterClass.DynamicNodeWorkflowResponse)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(flyteidl.admin.NodeExecutionOuterClass.DynamicNodeWorkflowResponse other) {
+        if (other == flyteidl.admin.NodeExecutionOuterClass.DynamicNodeWorkflowResponse.getDefaultInstance()) return this;
+        if (other.hasCompiledWorkflow()) {
+          mergeCompiledWorkflow(other.getCompiledWorkflow());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        flyteidl.admin.NodeExecutionOuterClass.DynamicNodeWorkflowResponse parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (flyteidl.admin.NodeExecutionOuterClass.DynamicNodeWorkflowResponse) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private flyteidl.core.Compiler.CompiledWorkflowClosure compiledWorkflow_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          flyteidl.core.Compiler.CompiledWorkflowClosure, flyteidl.core.Compiler.CompiledWorkflowClosure.Builder, flyteidl.core.Compiler.CompiledWorkflowClosureOrBuilder> compiledWorkflowBuilder_;
+      /**
+       * <code>.flyteidl.core.CompiledWorkflowClosure compiled_workflow = 1;</code>
+       */
+      public boolean hasCompiledWorkflow() {
+        return compiledWorkflowBuilder_ != null || compiledWorkflow_ != null;
+      }
+      /**
+       * <code>.flyteidl.core.CompiledWorkflowClosure compiled_workflow = 1;</code>
+       */
+      public flyteidl.core.Compiler.CompiledWorkflowClosure getCompiledWorkflow() {
+        if (compiledWorkflowBuilder_ == null) {
+          return compiledWorkflow_ == null ? flyteidl.core.Compiler.CompiledWorkflowClosure.getDefaultInstance() : compiledWorkflow_;
+        } else {
+          return compiledWorkflowBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.flyteidl.core.CompiledWorkflowClosure compiled_workflow = 1;</code>
+       */
+      public Builder setCompiledWorkflow(flyteidl.core.Compiler.CompiledWorkflowClosure value) {
+        if (compiledWorkflowBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          compiledWorkflow_ = value;
+          onChanged();
+        } else {
+          compiledWorkflowBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.flyteidl.core.CompiledWorkflowClosure compiled_workflow = 1;</code>
+       */
+      public Builder setCompiledWorkflow(
+          flyteidl.core.Compiler.CompiledWorkflowClosure.Builder builderForValue) {
+        if (compiledWorkflowBuilder_ == null) {
+          compiledWorkflow_ = builderForValue.build();
+          onChanged();
+        } else {
+          compiledWorkflowBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.flyteidl.core.CompiledWorkflowClosure compiled_workflow = 1;</code>
+       */
+      public Builder mergeCompiledWorkflow(flyteidl.core.Compiler.CompiledWorkflowClosure value) {
+        if (compiledWorkflowBuilder_ == null) {
+          if (compiledWorkflow_ != null) {
+            compiledWorkflow_ =
+              flyteidl.core.Compiler.CompiledWorkflowClosure.newBuilder(compiledWorkflow_).mergeFrom(value).buildPartial();
+          } else {
+            compiledWorkflow_ = value;
+          }
+          onChanged();
+        } else {
+          compiledWorkflowBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.flyteidl.core.CompiledWorkflowClosure compiled_workflow = 1;</code>
+       */
+      public Builder clearCompiledWorkflow() {
+        if (compiledWorkflowBuilder_ == null) {
+          compiledWorkflow_ = null;
+          onChanged();
+        } else {
+          compiledWorkflow_ = null;
+          compiledWorkflowBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.flyteidl.core.CompiledWorkflowClosure compiled_workflow = 1;</code>
+       */
+      public flyteidl.core.Compiler.CompiledWorkflowClosure.Builder getCompiledWorkflowBuilder() {
+        
+        onChanged();
+        return getCompiledWorkflowFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.flyteidl.core.CompiledWorkflowClosure compiled_workflow = 1;</code>
+       */
+      public flyteidl.core.Compiler.CompiledWorkflowClosureOrBuilder getCompiledWorkflowOrBuilder() {
+        if (compiledWorkflowBuilder_ != null) {
+          return compiledWorkflowBuilder_.getMessageOrBuilder();
+        } else {
+          return compiledWorkflow_ == null ?
+              flyteidl.core.Compiler.CompiledWorkflowClosure.getDefaultInstance() : compiledWorkflow_;
+        }
+      }
+      /**
+       * <code>.flyteidl.core.CompiledWorkflowClosure compiled_workflow = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          flyteidl.core.Compiler.CompiledWorkflowClosure, flyteidl.core.Compiler.CompiledWorkflowClosure.Builder, flyteidl.core.Compiler.CompiledWorkflowClosureOrBuilder> 
+          getCompiledWorkflowFieldBuilder() {
+        if (compiledWorkflowBuilder_ == null) {
+          compiledWorkflowBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              flyteidl.core.Compiler.CompiledWorkflowClosure, flyteidl.core.Compiler.CompiledWorkflowClosure.Builder, flyteidl.core.Compiler.CompiledWorkflowClosureOrBuilder>(
+                  getCompiledWorkflow(),
+                  getParentForChildren(),
+                  isClean());
+          compiledWorkflow_ = null;
+        }
+        return compiledWorkflowBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:flyteidl.admin.DynamicNodeWorkflowResponse)
+    }
+
+    // @@protoc_insertion_point(class_scope:flyteidl.admin.DynamicNodeWorkflowResponse)
+    private static final flyteidl.admin.NodeExecutionOuterClass.DynamicNodeWorkflowResponse DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new flyteidl.admin.NodeExecutionOuterClass.DynamicNodeWorkflowResponse();
+    }
+
+    public static flyteidl.admin.NodeExecutionOuterClass.DynamicNodeWorkflowResponse getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<DynamicNodeWorkflowResponse>
+        PARSER = new com.google.protobuf.AbstractParser<DynamicNodeWorkflowResponse>() {
+      @java.lang.Override
+      public DynamicNodeWorkflowResponse parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new DynamicNodeWorkflowResponse(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<DynamicNodeWorkflowResponse> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<DynamicNodeWorkflowResponse> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public flyteidl.admin.NodeExecutionOuterClass.DynamicNodeWorkflowResponse getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
   private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_flyteidl_admin_NodeExecutionGetRequest_descriptor;
   private static final 
@@ -15770,6 +16982,16 @@ public flyteidl.admin.NodeExecutionOuterClass.NodeExecutionGetDataResponse getDe
   private static final 
     com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
       internal_static_flyteidl_admin_NodeExecutionGetDataResponse_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_flyteidl_admin_GetDynamicNodeWorkflowRequest_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_flyteidl_admin_GetDynamicNodeWorkflowRequest_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_flyteidl_admin_DynamicNodeWorkflowResponse_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_flyteidl_admin_DynamicNodeWorkflowResponse_fieldAccessorTable;
 
   public static com.google.protobuf.Descriptors.FileDescriptor
       getDescriptor() {
@@ -15845,9 +17067,13 @@ public flyteidl.admin.NodeExecutionOuterClass.NodeExecutionGetDataResponse getDe
       ".core.LiteralMap\022E\n\020dynamic_workflow\030\020 \001" +
       "(\0132+.flyteidl.admin.DynamicWorkflowNodeM" +
       "etadata\022-\n\nflyte_urls\030\021 \001(\0132\031.flyteidl.a" +
-      "dmin.FlyteURLsB=Z;github.com/flyteorg/fl" +
-      "yte/flyteidl/gen/pb-go/flyteidl/adminb\006p" +
-      "roto3"
+      "dmin.FlyteURLs\"S\n\035GetDynamicNodeWorkflow" +
+      "Request\0222\n\002id\030\001 \001(\0132&.flyteidl.core.Node" +
+      "ExecutionIdentifier\"`\n\033DynamicNodeWorkfl" +
+      "owResponse\022A\n\021compiled_workflow\030\001 \001(\0132&." +
+      "flyteidl.core.CompiledWorkflowClosureB=Z" +
+      ";github.com/flyteorg/flyte/flyteidl/gen/" +
+      "pb-go/flyteidl/adminb\006proto3"
     };
     com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
         new com.google.protobuf.Descriptors.FileDescriptor.    InternalDescriptorAssigner() {
@@ -15941,6 +17167,18 @@ public com.google.protobuf.ExtensionRegistry assignDescriptors(
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_flyteidl_admin_NodeExecutionGetDataResponse_descriptor,
         new java.lang.String[] { "Inputs", "Outputs", "FullInputs", "FullOutputs", "DynamicWorkflow", "FlyteUrls", });
+    internal_static_flyteidl_admin_GetDynamicNodeWorkflowRequest_descriptor =
+      getDescriptor().getMessageTypes().get(12);
+    internal_static_flyteidl_admin_GetDynamicNodeWorkflowRequest_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_flyteidl_admin_GetDynamicNodeWorkflowRequest_descriptor,
+        new java.lang.String[] { "Id", });
+    internal_static_flyteidl_admin_DynamicNodeWorkflowResponse_descriptor =
+      getDescriptor().getMessageTypes().get(13);
+    internal_static_flyteidl_admin_DynamicNodeWorkflowResponse_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_flyteidl_admin_DynamicNodeWorkflowResponse_descriptor,
+        new java.lang.String[] { "CompiledWorkflow", });
     flyteidl.admin.Common.getDescriptor();
     flyteidl.core.Execution.getDescriptor();
     flyteidl.core.Catalog.getDescriptor();
diff --git a/flyteidl/gen/pb-java/flyteidl/admin/WorkflowOuterClass.java b/flyteidl/gen/pb-java/flyteidl/admin/WorkflowOuterClass.java
index 4146ffb97c..9def14e8f1 100644
--- a/flyteidl/gen/pb-java/flyteidl/admin/WorkflowOuterClass.java
+++ b/flyteidl/gen/pb-java/flyteidl/admin/WorkflowOuterClass.java
@@ -8132,1218 +8132,6 @@ public flyteidl.admin.WorkflowOuterClass.CreateWorkflowFailureReason getDefaultI
 
   }
 
-  public interface GetDynamicNodeWorkflowRequestOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:flyteidl.admin.GetDynamicNodeWorkflowRequest)
-      com.google.protobuf.MessageOrBuilder {
-
-    /**
-     * <code>.flyteidl.core.NodeExecutionIdentifier id = 1;</code>
-     */
-    boolean hasId();
-    /**
-     * <code>.flyteidl.core.NodeExecutionIdentifier id = 1;</code>
-     */
-    flyteidl.core.IdentifierOuterClass.NodeExecutionIdentifier getId();
-    /**
-     * <code>.flyteidl.core.NodeExecutionIdentifier id = 1;</code>
-     */
-    flyteidl.core.IdentifierOuterClass.NodeExecutionIdentifierOrBuilder getIdOrBuilder();
-  }
-  /**
-   * Protobuf type {@code flyteidl.admin.GetDynamicNodeWorkflowRequest}
-   */
-  public  static final class GetDynamicNodeWorkflowRequest extends
-      com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:flyteidl.admin.GetDynamicNodeWorkflowRequest)
-      GetDynamicNodeWorkflowRequestOrBuilder {
-  private static final long serialVersionUID = 0L;
-    // Use GetDynamicNodeWorkflowRequest.newBuilder() to construct.
-    private GetDynamicNodeWorkflowRequest(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
-      super(builder);
-    }
-    private GetDynamicNodeWorkflowRequest() {
-    }
-
-    @java.lang.Override
-    public final com.google.protobuf.UnknownFieldSet
-    getUnknownFields() {
-      return this.unknownFields;
-    }
-    private GetDynamicNodeWorkflowRequest(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      this();
-      if (extensionRegistry == null) {
-        throw new java.lang.NullPointerException();
-      }
-      int mutable_bitField0_ = 0;
-      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
-          com.google.protobuf.UnknownFieldSet.newBuilder();
-      try {
-        boolean done = false;
-        while (!done) {
-          int tag = input.readTag();
-          switch (tag) {
-            case 0:
-              done = true;
-              break;
-            case 10: {
-              flyteidl.core.IdentifierOuterClass.NodeExecutionIdentifier.Builder subBuilder = null;
-              if (id_ != null) {
-                subBuilder = id_.toBuilder();
-              }
-              id_ = input.readMessage(flyteidl.core.IdentifierOuterClass.NodeExecutionIdentifier.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(id_);
-                id_ = subBuilder.buildPartial();
-              }
-
-              break;
-            }
-            default: {
-              if (!parseUnknownField(
-                  input, unknownFields, extensionRegistry, tag)) {
-                done = true;
-              }
-              break;
-            }
-          }
-        }
-      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw e.setUnfinishedMessage(this);
-      } catch (java.io.IOException e) {
-        throw new com.google.protobuf.InvalidProtocolBufferException(
-            e).setUnfinishedMessage(this);
-      } finally {
-        this.unknownFields = unknownFields.build();
-        makeExtensionsImmutable();
-      }
-    }
-    public static final com.google.protobuf.Descriptors.Descriptor
-        getDescriptor() {
-      return flyteidl.admin.WorkflowOuterClass.internal_static_flyteidl_admin_GetDynamicNodeWorkflowRequest_descriptor;
-    }
-
-    @java.lang.Override
-    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-        internalGetFieldAccessorTable() {
-      return flyteidl.admin.WorkflowOuterClass.internal_static_flyteidl_admin_GetDynamicNodeWorkflowRequest_fieldAccessorTable
-          .ensureFieldAccessorsInitialized(
-              flyteidl.admin.WorkflowOuterClass.GetDynamicNodeWorkflowRequest.class, flyteidl.admin.WorkflowOuterClass.GetDynamicNodeWorkflowRequest.Builder.class);
-    }
-
-    public static final int ID_FIELD_NUMBER = 1;
-    private flyteidl.core.IdentifierOuterClass.NodeExecutionIdentifier id_;
-    /**
-     * <code>.flyteidl.core.NodeExecutionIdentifier id = 1;</code>
-     */
-    public boolean hasId() {
-      return id_ != null;
-    }
-    /**
-     * <code>.flyteidl.core.NodeExecutionIdentifier id = 1;</code>
-     */
-    public flyteidl.core.IdentifierOuterClass.NodeExecutionIdentifier getId() {
-      return id_ == null ? flyteidl.core.IdentifierOuterClass.NodeExecutionIdentifier.getDefaultInstance() : id_;
-    }
-    /**
-     * <code>.flyteidl.core.NodeExecutionIdentifier id = 1;</code>
-     */
-    public flyteidl.core.IdentifierOuterClass.NodeExecutionIdentifierOrBuilder getIdOrBuilder() {
-      return getId();
-    }
-
-    private byte memoizedIsInitialized = -1;
-    @java.lang.Override
-    public final boolean isInitialized() {
-      byte isInitialized = memoizedIsInitialized;
-      if (isInitialized == 1) return true;
-      if (isInitialized == 0) return false;
-
-      memoizedIsInitialized = 1;
-      return true;
-    }
-
-    @java.lang.Override
-    public void writeTo(com.google.protobuf.CodedOutputStream output)
-                        throws java.io.IOException {
-      if (id_ != null) {
-        output.writeMessage(1, getId());
-      }
-      unknownFields.writeTo(output);
-    }
-
-    @java.lang.Override
-    public int getSerializedSize() {
-      int size = memoizedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (id_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getId());
-      }
-      size += unknownFields.getSerializedSize();
-      memoizedSize = size;
-      return size;
-    }
-
-    @java.lang.Override
-    public boolean equals(final java.lang.Object obj) {
-      if (obj == this) {
-       return true;
-      }
-      if (!(obj instanceof flyteidl.admin.WorkflowOuterClass.GetDynamicNodeWorkflowRequest)) {
-        return super.equals(obj);
-      }
-      flyteidl.admin.WorkflowOuterClass.GetDynamicNodeWorkflowRequest other = (flyteidl.admin.WorkflowOuterClass.GetDynamicNodeWorkflowRequest) obj;
-
-      if (hasId() != other.hasId()) return false;
-      if (hasId()) {
-        if (!getId()
-            .equals(other.getId())) return false;
-      }
-      if (!unknownFields.equals(other.unknownFields)) return false;
-      return true;
-    }
-
-    @java.lang.Override
-    public int hashCode() {
-      if (memoizedHashCode != 0) {
-        return memoizedHashCode;
-      }
-      int hash = 41;
-      hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasId()) {
-        hash = (37 * hash) + ID_FIELD_NUMBER;
-        hash = (53 * hash) + getId().hashCode();
-      }
-      hash = (29 * hash) + unknownFields.hashCode();
-      memoizedHashCode = hash;
-      return hash;
-    }
-
-    public static flyteidl.admin.WorkflowOuterClass.GetDynamicNodeWorkflowRequest parseFrom(
-        java.nio.ByteBuffer data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static flyteidl.admin.WorkflowOuterClass.GetDynamicNodeWorkflowRequest parseFrom(
-        java.nio.ByteBuffer data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static flyteidl.admin.WorkflowOuterClass.GetDynamicNodeWorkflowRequest parseFrom(
-        com.google.protobuf.ByteString data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static flyteidl.admin.WorkflowOuterClass.GetDynamicNodeWorkflowRequest parseFrom(
-        com.google.protobuf.ByteString data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static flyteidl.admin.WorkflowOuterClass.GetDynamicNodeWorkflowRequest parseFrom(byte[] data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static flyteidl.admin.WorkflowOuterClass.GetDynamicNodeWorkflowRequest parseFrom(
-        byte[] data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static flyteidl.admin.WorkflowOuterClass.GetDynamicNodeWorkflowRequest parseFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static flyteidl.admin.WorkflowOuterClass.GetDynamicNodeWorkflowRequest parseFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input, extensionRegistry);
-    }
-    public static flyteidl.admin.WorkflowOuterClass.GetDynamicNodeWorkflowRequest parseDelimitedFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseDelimitedWithIOException(PARSER, input);
-    }
-    public static flyteidl.admin.WorkflowOuterClass.GetDynamicNodeWorkflowRequest parseDelimitedFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
-    }
-    public static flyteidl.admin.WorkflowOuterClass.GetDynamicNodeWorkflowRequest parseFrom(
-        com.google.protobuf.CodedInputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static flyteidl.admin.WorkflowOuterClass.GetDynamicNodeWorkflowRequest parseFrom(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input, extensionRegistry);
-    }
-
-    @java.lang.Override
-    public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder() {
-      return DEFAULT_INSTANCE.toBuilder();
-    }
-    public static Builder newBuilder(flyteidl.admin.WorkflowOuterClass.GetDynamicNodeWorkflowRequest prototype) {
-      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
-    }
-    @java.lang.Override
-    public Builder toBuilder() {
-      return this == DEFAULT_INSTANCE
-          ? new Builder() : new Builder().mergeFrom(this);
-    }
-
-    @java.lang.Override
-    protected Builder newBuilderForType(
-        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-      Builder builder = new Builder(parent);
-      return builder;
-    }
-    /**
-     * Protobuf type {@code flyteidl.admin.GetDynamicNodeWorkflowRequest}
-     */
-    public static final class Builder extends
-        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:flyteidl.admin.GetDynamicNodeWorkflowRequest)
-        flyteidl.admin.WorkflowOuterClass.GetDynamicNodeWorkflowRequestOrBuilder {
-      public static final com.google.protobuf.Descriptors.Descriptor
-          getDescriptor() {
-        return flyteidl.admin.WorkflowOuterClass.internal_static_flyteidl_admin_GetDynamicNodeWorkflowRequest_descriptor;
-      }
-
-      @java.lang.Override
-      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-          internalGetFieldAccessorTable() {
-        return flyteidl.admin.WorkflowOuterClass.internal_static_flyteidl_admin_GetDynamicNodeWorkflowRequest_fieldAccessorTable
-            .ensureFieldAccessorsInitialized(
-                flyteidl.admin.WorkflowOuterClass.GetDynamicNodeWorkflowRequest.class, flyteidl.admin.WorkflowOuterClass.GetDynamicNodeWorkflowRequest.Builder.class);
-      }
-
-      // Construct using flyteidl.admin.WorkflowOuterClass.GetDynamicNodeWorkflowRequest.newBuilder()
-      private Builder() {
-        maybeForceBuilderInitialization();
-      }
-
-      private Builder(
-          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-        super(parent);
-        maybeForceBuilderInitialization();
-      }
-      private void maybeForceBuilderInitialization() {
-        if (com.google.protobuf.GeneratedMessageV3
-                .alwaysUseFieldBuilders) {
-        }
-      }
-      @java.lang.Override
-      public Builder clear() {
-        super.clear();
-        if (idBuilder_ == null) {
-          id_ = null;
-        } else {
-          id_ = null;
-          idBuilder_ = null;
-        }
-        return this;
-      }
-
-      @java.lang.Override
-      public com.google.protobuf.Descriptors.Descriptor
-          getDescriptorForType() {
-        return flyteidl.admin.WorkflowOuterClass.internal_static_flyteidl_admin_GetDynamicNodeWorkflowRequest_descriptor;
-      }
-
-      @java.lang.Override
-      public flyteidl.admin.WorkflowOuterClass.GetDynamicNodeWorkflowRequest getDefaultInstanceForType() {
-        return flyteidl.admin.WorkflowOuterClass.GetDynamicNodeWorkflowRequest.getDefaultInstance();
-      }
-
-      @java.lang.Override
-      public flyteidl.admin.WorkflowOuterClass.GetDynamicNodeWorkflowRequest build() {
-        flyteidl.admin.WorkflowOuterClass.GetDynamicNodeWorkflowRequest result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(result);
-        }
-        return result;
-      }
-
-      @java.lang.Override
-      public flyteidl.admin.WorkflowOuterClass.GetDynamicNodeWorkflowRequest buildPartial() {
-        flyteidl.admin.WorkflowOuterClass.GetDynamicNodeWorkflowRequest result = new flyteidl.admin.WorkflowOuterClass.GetDynamicNodeWorkflowRequest(this);
-        if (idBuilder_ == null) {
-          result.id_ = id_;
-        } else {
-          result.id_ = idBuilder_.build();
-        }
-        onBuilt();
-        return result;
-      }
-
-      @java.lang.Override
-      public Builder clone() {
-        return super.clone();
-      }
-      @java.lang.Override
-      public Builder setField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.setField(field, value);
-      }
-      @java.lang.Override
-      public Builder clearField(
-          com.google.protobuf.Descriptors.FieldDescriptor field) {
-        return super.clearField(field);
-      }
-      @java.lang.Override
-      public Builder clearOneof(
-          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
-        return super.clearOneof(oneof);
-      }
-      @java.lang.Override
-      public Builder setRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          int index, java.lang.Object value) {
-        return super.setRepeatedField(field, index, value);
-      }
-      @java.lang.Override
-      public Builder addRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.addRepeatedField(field, value);
-      }
-      @java.lang.Override
-      public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof flyteidl.admin.WorkflowOuterClass.GetDynamicNodeWorkflowRequest) {
-          return mergeFrom((flyteidl.admin.WorkflowOuterClass.GetDynamicNodeWorkflowRequest)other);
-        } else {
-          super.mergeFrom(other);
-          return this;
-        }
-      }
-
-      public Builder mergeFrom(flyteidl.admin.WorkflowOuterClass.GetDynamicNodeWorkflowRequest other) {
-        if (other == flyteidl.admin.WorkflowOuterClass.GetDynamicNodeWorkflowRequest.getDefaultInstance()) return this;
-        if (other.hasId()) {
-          mergeId(other.getId());
-        }
-        this.mergeUnknownFields(other.unknownFields);
-        onChanged();
-        return this;
-      }
-
-      @java.lang.Override
-      public final boolean isInitialized() {
-        return true;
-      }
-
-      @java.lang.Override
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        flyteidl.admin.WorkflowOuterClass.GetDynamicNodeWorkflowRequest parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (flyteidl.admin.WorkflowOuterClass.GetDynamicNodeWorkflowRequest) e.getUnfinishedMessage();
-          throw e.unwrapIOException();
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
-          }
-        }
-        return this;
-      }
-
-      private flyteidl.core.IdentifierOuterClass.NodeExecutionIdentifier id_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          flyteidl.core.IdentifierOuterClass.NodeExecutionIdentifier, flyteidl.core.IdentifierOuterClass.NodeExecutionIdentifier.Builder, flyteidl.core.IdentifierOuterClass.NodeExecutionIdentifierOrBuilder> idBuilder_;
-      /**
-       * <code>.flyteidl.core.NodeExecutionIdentifier id = 1;</code>
-       */
-      public boolean hasId() {
-        return idBuilder_ != null || id_ != null;
-      }
-      /**
-       * <code>.flyteidl.core.NodeExecutionIdentifier id = 1;</code>
-       */
-      public flyteidl.core.IdentifierOuterClass.NodeExecutionIdentifier getId() {
-        if (idBuilder_ == null) {
-          return id_ == null ? flyteidl.core.IdentifierOuterClass.NodeExecutionIdentifier.getDefaultInstance() : id_;
-        } else {
-          return idBuilder_.getMessage();
-        }
-      }
-      /**
-       * <code>.flyteidl.core.NodeExecutionIdentifier id = 1;</code>
-       */
-      public Builder setId(flyteidl.core.IdentifierOuterClass.NodeExecutionIdentifier value) {
-        if (idBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          id_ = value;
-          onChanged();
-        } else {
-          idBuilder_.setMessage(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.flyteidl.core.NodeExecutionIdentifier id = 1;</code>
-       */
-      public Builder setId(
-          flyteidl.core.IdentifierOuterClass.NodeExecutionIdentifier.Builder builderForValue) {
-        if (idBuilder_ == null) {
-          id_ = builderForValue.build();
-          onChanged();
-        } else {
-          idBuilder_.setMessage(builderForValue.build());
-        }
-
-        return this;
-      }
-      /**
-       * <code>.flyteidl.core.NodeExecutionIdentifier id = 1;</code>
-       */
-      public Builder mergeId(flyteidl.core.IdentifierOuterClass.NodeExecutionIdentifier value) {
-        if (idBuilder_ == null) {
-          if (id_ != null) {
-            id_ =
-              flyteidl.core.IdentifierOuterClass.NodeExecutionIdentifier.newBuilder(id_).mergeFrom(value).buildPartial();
-          } else {
-            id_ = value;
-          }
-          onChanged();
-        } else {
-          idBuilder_.mergeFrom(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.flyteidl.core.NodeExecutionIdentifier id = 1;</code>
-       */
-      public Builder clearId() {
-        if (idBuilder_ == null) {
-          id_ = null;
-          onChanged();
-        } else {
-          id_ = null;
-          idBuilder_ = null;
-        }
-
-        return this;
-      }
-      /**
-       * <code>.flyteidl.core.NodeExecutionIdentifier id = 1;</code>
-       */
-      public flyteidl.core.IdentifierOuterClass.NodeExecutionIdentifier.Builder getIdBuilder() {
-        
-        onChanged();
-        return getIdFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.flyteidl.core.NodeExecutionIdentifier id = 1;</code>
-       */
-      public flyteidl.core.IdentifierOuterClass.NodeExecutionIdentifierOrBuilder getIdOrBuilder() {
-        if (idBuilder_ != null) {
-          return idBuilder_.getMessageOrBuilder();
-        } else {
-          return id_ == null ?
-              flyteidl.core.IdentifierOuterClass.NodeExecutionIdentifier.getDefaultInstance() : id_;
-        }
-      }
-      /**
-       * <code>.flyteidl.core.NodeExecutionIdentifier id = 1;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          flyteidl.core.IdentifierOuterClass.NodeExecutionIdentifier, flyteidl.core.IdentifierOuterClass.NodeExecutionIdentifier.Builder, flyteidl.core.IdentifierOuterClass.NodeExecutionIdentifierOrBuilder> 
-          getIdFieldBuilder() {
-        if (idBuilder_ == null) {
-          idBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              flyteidl.core.IdentifierOuterClass.NodeExecutionIdentifier, flyteidl.core.IdentifierOuterClass.NodeExecutionIdentifier.Builder, flyteidl.core.IdentifierOuterClass.NodeExecutionIdentifierOrBuilder>(
-                  getId(),
-                  getParentForChildren(),
-                  isClean());
-          id_ = null;
-        }
-        return idBuilder_;
-      }
-      @java.lang.Override
-      public final Builder setUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.setUnknownFields(unknownFields);
-      }
-
-      @java.lang.Override
-      public final Builder mergeUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.mergeUnknownFields(unknownFields);
-      }
-
-
-      // @@protoc_insertion_point(builder_scope:flyteidl.admin.GetDynamicNodeWorkflowRequest)
-    }
-
-    // @@protoc_insertion_point(class_scope:flyteidl.admin.GetDynamicNodeWorkflowRequest)
-    private static final flyteidl.admin.WorkflowOuterClass.GetDynamicNodeWorkflowRequest DEFAULT_INSTANCE;
-    static {
-      DEFAULT_INSTANCE = new flyteidl.admin.WorkflowOuterClass.GetDynamicNodeWorkflowRequest();
-    }
-
-    public static flyteidl.admin.WorkflowOuterClass.GetDynamicNodeWorkflowRequest getDefaultInstance() {
-      return DEFAULT_INSTANCE;
-    }
-
-    private static final com.google.protobuf.Parser<GetDynamicNodeWorkflowRequest>
-        PARSER = new com.google.protobuf.AbstractParser<GetDynamicNodeWorkflowRequest>() {
-      @java.lang.Override
-      public GetDynamicNodeWorkflowRequest parsePartialFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        return new GetDynamicNodeWorkflowRequest(input, extensionRegistry);
-      }
-    };
-
-    public static com.google.protobuf.Parser<GetDynamicNodeWorkflowRequest> parser() {
-      return PARSER;
-    }
-
-    @java.lang.Override
-    public com.google.protobuf.Parser<GetDynamicNodeWorkflowRequest> getParserForType() {
-      return PARSER;
-    }
-
-    @java.lang.Override
-    public flyteidl.admin.WorkflowOuterClass.GetDynamicNodeWorkflowRequest getDefaultInstanceForType() {
-      return DEFAULT_INSTANCE;
-    }
-
-  }
-
-  public interface DynamicNodeWorkflowResponseOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:flyteidl.admin.DynamicNodeWorkflowResponse)
-      com.google.protobuf.MessageOrBuilder {
-
-    /**
-     * <code>.flyteidl.core.CompiledWorkflowClosure compiled_workflow = 1;</code>
-     */
-    boolean hasCompiledWorkflow();
-    /**
-     * <code>.flyteidl.core.CompiledWorkflowClosure compiled_workflow = 1;</code>
-     */
-    flyteidl.core.Compiler.CompiledWorkflowClosure getCompiledWorkflow();
-    /**
-     * <code>.flyteidl.core.CompiledWorkflowClosure compiled_workflow = 1;</code>
-     */
-    flyteidl.core.Compiler.CompiledWorkflowClosureOrBuilder getCompiledWorkflowOrBuilder();
-  }
-  /**
-   * Protobuf type {@code flyteidl.admin.DynamicNodeWorkflowResponse}
-   */
-  public  static final class DynamicNodeWorkflowResponse extends
-      com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:flyteidl.admin.DynamicNodeWorkflowResponse)
-      DynamicNodeWorkflowResponseOrBuilder {
-  private static final long serialVersionUID = 0L;
-    // Use DynamicNodeWorkflowResponse.newBuilder() to construct.
-    private DynamicNodeWorkflowResponse(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
-      super(builder);
-    }
-    private DynamicNodeWorkflowResponse() {
-    }
-
-    @java.lang.Override
-    public final com.google.protobuf.UnknownFieldSet
-    getUnknownFields() {
-      return this.unknownFields;
-    }
-    private DynamicNodeWorkflowResponse(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      this();
-      if (extensionRegistry == null) {
-        throw new java.lang.NullPointerException();
-      }
-      int mutable_bitField0_ = 0;
-      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
-          com.google.protobuf.UnknownFieldSet.newBuilder();
-      try {
-        boolean done = false;
-        while (!done) {
-          int tag = input.readTag();
-          switch (tag) {
-            case 0:
-              done = true;
-              break;
-            case 10: {
-              flyteidl.core.Compiler.CompiledWorkflowClosure.Builder subBuilder = null;
-              if (compiledWorkflow_ != null) {
-                subBuilder = compiledWorkflow_.toBuilder();
-              }
-              compiledWorkflow_ = input.readMessage(flyteidl.core.Compiler.CompiledWorkflowClosure.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(compiledWorkflow_);
-                compiledWorkflow_ = subBuilder.buildPartial();
-              }
-
-              break;
-            }
-            default: {
-              if (!parseUnknownField(
-                  input, unknownFields, extensionRegistry, tag)) {
-                done = true;
-              }
-              break;
-            }
-          }
-        }
-      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw e.setUnfinishedMessage(this);
-      } catch (java.io.IOException e) {
-        throw new com.google.protobuf.InvalidProtocolBufferException(
-            e).setUnfinishedMessage(this);
-      } finally {
-        this.unknownFields = unknownFields.build();
-        makeExtensionsImmutable();
-      }
-    }
-    public static final com.google.protobuf.Descriptors.Descriptor
-        getDescriptor() {
-      return flyteidl.admin.WorkflowOuterClass.internal_static_flyteidl_admin_DynamicNodeWorkflowResponse_descriptor;
-    }
-
-    @java.lang.Override
-    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-        internalGetFieldAccessorTable() {
-      return flyteidl.admin.WorkflowOuterClass.internal_static_flyteidl_admin_DynamicNodeWorkflowResponse_fieldAccessorTable
-          .ensureFieldAccessorsInitialized(
-              flyteidl.admin.WorkflowOuterClass.DynamicNodeWorkflowResponse.class, flyteidl.admin.WorkflowOuterClass.DynamicNodeWorkflowResponse.Builder.class);
-    }
-
-    public static final int COMPILED_WORKFLOW_FIELD_NUMBER = 1;
-    private flyteidl.core.Compiler.CompiledWorkflowClosure compiledWorkflow_;
-    /**
-     * <code>.flyteidl.core.CompiledWorkflowClosure compiled_workflow = 1;</code>
-     */
-    public boolean hasCompiledWorkflow() {
-      return compiledWorkflow_ != null;
-    }
-    /**
-     * <code>.flyteidl.core.CompiledWorkflowClosure compiled_workflow = 1;</code>
-     */
-    public flyteidl.core.Compiler.CompiledWorkflowClosure getCompiledWorkflow() {
-      return compiledWorkflow_ == null ? flyteidl.core.Compiler.CompiledWorkflowClosure.getDefaultInstance() : compiledWorkflow_;
-    }
-    /**
-     * <code>.flyteidl.core.CompiledWorkflowClosure compiled_workflow = 1;</code>
-     */
-    public flyteidl.core.Compiler.CompiledWorkflowClosureOrBuilder getCompiledWorkflowOrBuilder() {
-      return getCompiledWorkflow();
-    }
-
-    private byte memoizedIsInitialized = -1;
-    @java.lang.Override
-    public final boolean isInitialized() {
-      byte isInitialized = memoizedIsInitialized;
-      if (isInitialized == 1) return true;
-      if (isInitialized == 0) return false;
-
-      memoizedIsInitialized = 1;
-      return true;
-    }
-
-    @java.lang.Override
-    public void writeTo(com.google.protobuf.CodedOutputStream output)
-                        throws java.io.IOException {
-      if (compiledWorkflow_ != null) {
-        output.writeMessage(1, getCompiledWorkflow());
-      }
-      unknownFields.writeTo(output);
-    }
-
-    @java.lang.Override
-    public int getSerializedSize() {
-      int size = memoizedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (compiledWorkflow_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getCompiledWorkflow());
-      }
-      size += unknownFields.getSerializedSize();
-      memoizedSize = size;
-      return size;
-    }
-
-    @java.lang.Override
-    public boolean equals(final java.lang.Object obj) {
-      if (obj == this) {
-       return true;
-      }
-      if (!(obj instanceof flyteidl.admin.WorkflowOuterClass.DynamicNodeWorkflowResponse)) {
-        return super.equals(obj);
-      }
-      flyteidl.admin.WorkflowOuterClass.DynamicNodeWorkflowResponse other = (flyteidl.admin.WorkflowOuterClass.DynamicNodeWorkflowResponse) obj;
-
-      if (hasCompiledWorkflow() != other.hasCompiledWorkflow()) return false;
-      if (hasCompiledWorkflow()) {
-        if (!getCompiledWorkflow()
-            .equals(other.getCompiledWorkflow())) return false;
-      }
-      if (!unknownFields.equals(other.unknownFields)) return false;
-      return true;
-    }
-
-    @java.lang.Override
-    public int hashCode() {
-      if (memoizedHashCode != 0) {
-        return memoizedHashCode;
-      }
-      int hash = 41;
-      hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasCompiledWorkflow()) {
-        hash = (37 * hash) + COMPILED_WORKFLOW_FIELD_NUMBER;
-        hash = (53 * hash) + getCompiledWorkflow().hashCode();
-      }
-      hash = (29 * hash) + unknownFields.hashCode();
-      memoizedHashCode = hash;
-      return hash;
-    }
-
-    public static flyteidl.admin.WorkflowOuterClass.DynamicNodeWorkflowResponse parseFrom(
-        java.nio.ByteBuffer data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static flyteidl.admin.WorkflowOuterClass.DynamicNodeWorkflowResponse parseFrom(
-        java.nio.ByteBuffer data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static flyteidl.admin.WorkflowOuterClass.DynamicNodeWorkflowResponse parseFrom(
-        com.google.protobuf.ByteString data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static flyteidl.admin.WorkflowOuterClass.DynamicNodeWorkflowResponse parseFrom(
-        com.google.protobuf.ByteString data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static flyteidl.admin.WorkflowOuterClass.DynamicNodeWorkflowResponse parseFrom(byte[] data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static flyteidl.admin.WorkflowOuterClass.DynamicNodeWorkflowResponse parseFrom(
-        byte[] data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static flyteidl.admin.WorkflowOuterClass.DynamicNodeWorkflowResponse parseFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static flyteidl.admin.WorkflowOuterClass.DynamicNodeWorkflowResponse parseFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input, extensionRegistry);
-    }
-    public static flyteidl.admin.WorkflowOuterClass.DynamicNodeWorkflowResponse parseDelimitedFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseDelimitedWithIOException(PARSER, input);
-    }
-    public static flyteidl.admin.WorkflowOuterClass.DynamicNodeWorkflowResponse parseDelimitedFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
-    }
-    public static flyteidl.admin.WorkflowOuterClass.DynamicNodeWorkflowResponse parseFrom(
-        com.google.protobuf.CodedInputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static flyteidl.admin.WorkflowOuterClass.DynamicNodeWorkflowResponse parseFrom(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input, extensionRegistry);
-    }
-
-    @java.lang.Override
-    public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder() {
-      return DEFAULT_INSTANCE.toBuilder();
-    }
-    public static Builder newBuilder(flyteidl.admin.WorkflowOuterClass.DynamicNodeWorkflowResponse prototype) {
-      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
-    }
-    @java.lang.Override
-    public Builder toBuilder() {
-      return this == DEFAULT_INSTANCE
-          ? new Builder() : new Builder().mergeFrom(this);
-    }
-
-    @java.lang.Override
-    protected Builder newBuilderForType(
-        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-      Builder builder = new Builder(parent);
-      return builder;
-    }
-    /**
-     * Protobuf type {@code flyteidl.admin.DynamicNodeWorkflowResponse}
-     */
-    public static final class Builder extends
-        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:flyteidl.admin.DynamicNodeWorkflowResponse)
-        flyteidl.admin.WorkflowOuterClass.DynamicNodeWorkflowResponseOrBuilder {
-      public static final com.google.protobuf.Descriptors.Descriptor
-          getDescriptor() {
-        return flyteidl.admin.WorkflowOuterClass.internal_static_flyteidl_admin_DynamicNodeWorkflowResponse_descriptor;
-      }
-
-      @java.lang.Override
-      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-          internalGetFieldAccessorTable() {
-        return flyteidl.admin.WorkflowOuterClass.internal_static_flyteidl_admin_DynamicNodeWorkflowResponse_fieldAccessorTable
-            .ensureFieldAccessorsInitialized(
-                flyteidl.admin.WorkflowOuterClass.DynamicNodeWorkflowResponse.class, flyteidl.admin.WorkflowOuterClass.DynamicNodeWorkflowResponse.Builder.class);
-      }
-
-      // Construct using flyteidl.admin.WorkflowOuterClass.DynamicNodeWorkflowResponse.newBuilder()
-      private Builder() {
-        maybeForceBuilderInitialization();
-      }
-
-      private Builder(
-          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-        super(parent);
-        maybeForceBuilderInitialization();
-      }
-      private void maybeForceBuilderInitialization() {
-        if (com.google.protobuf.GeneratedMessageV3
-                .alwaysUseFieldBuilders) {
-        }
-      }
-      @java.lang.Override
-      public Builder clear() {
-        super.clear();
-        if (compiledWorkflowBuilder_ == null) {
-          compiledWorkflow_ = null;
-        } else {
-          compiledWorkflow_ = null;
-          compiledWorkflowBuilder_ = null;
-        }
-        return this;
-      }
-
-      @java.lang.Override
-      public com.google.protobuf.Descriptors.Descriptor
-          getDescriptorForType() {
-        return flyteidl.admin.WorkflowOuterClass.internal_static_flyteidl_admin_DynamicNodeWorkflowResponse_descriptor;
-      }
-
-      @java.lang.Override
-      public flyteidl.admin.WorkflowOuterClass.DynamicNodeWorkflowResponse getDefaultInstanceForType() {
-        return flyteidl.admin.WorkflowOuterClass.DynamicNodeWorkflowResponse.getDefaultInstance();
-      }
-
-      @java.lang.Override
-      public flyteidl.admin.WorkflowOuterClass.DynamicNodeWorkflowResponse build() {
-        flyteidl.admin.WorkflowOuterClass.DynamicNodeWorkflowResponse result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(result);
-        }
-        return result;
-      }
-
-      @java.lang.Override
-      public flyteidl.admin.WorkflowOuterClass.DynamicNodeWorkflowResponse buildPartial() {
-        flyteidl.admin.WorkflowOuterClass.DynamicNodeWorkflowResponse result = new flyteidl.admin.WorkflowOuterClass.DynamicNodeWorkflowResponse(this);
-        if (compiledWorkflowBuilder_ == null) {
-          result.compiledWorkflow_ = compiledWorkflow_;
-        } else {
-          result.compiledWorkflow_ = compiledWorkflowBuilder_.build();
-        }
-        onBuilt();
-        return result;
-      }
-
-      @java.lang.Override
-      public Builder clone() {
-        return super.clone();
-      }
-      @java.lang.Override
-      public Builder setField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.setField(field, value);
-      }
-      @java.lang.Override
-      public Builder clearField(
-          com.google.protobuf.Descriptors.FieldDescriptor field) {
-        return super.clearField(field);
-      }
-      @java.lang.Override
-      public Builder clearOneof(
-          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
-        return super.clearOneof(oneof);
-      }
-      @java.lang.Override
-      public Builder setRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          int index, java.lang.Object value) {
-        return super.setRepeatedField(field, index, value);
-      }
-      @java.lang.Override
-      public Builder addRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.addRepeatedField(field, value);
-      }
-      @java.lang.Override
-      public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof flyteidl.admin.WorkflowOuterClass.DynamicNodeWorkflowResponse) {
-          return mergeFrom((flyteidl.admin.WorkflowOuterClass.DynamicNodeWorkflowResponse)other);
-        } else {
-          super.mergeFrom(other);
-          return this;
-        }
-      }
-
-      public Builder mergeFrom(flyteidl.admin.WorkflowOuterClass.DynamicNodeWorkflowResponse other) {
-        if (other == flyteidl.admin.WorkflowOuterClass.DynamicNodeWorkflowResponse.getDefaultInstance()) return this;
-        if (other.hasCompiledWorkflow()) {
-          mergeCompiledWorkflow(other.getCompiledWorkflow());
-        }
-        this.mergeUnknownFields(other.unknownFields);
-        onChanged();
-        return this;
-      }
-
-      @java.lang.Override
-      public final boolean isInitialized() {
-        return true;
-      }
-
-      @java.lang.Override
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        flyteidl.admin.WorkflowOuterClass.DynamicNodeWorkflowResponse parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (flyteidl.admin.WorkflowOuterClass.DynamicNodeWorkflowResponse) e.getUnfinishedMessage();
-          throw e.unwrapIOException();
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
-          }
-        }
-        return this;
-      }
-
-      private flyteidl.core.Compiler.CompiledWorkflowClosure compiledWorkflow_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          flyteidl.core.Compiler.CompiledWorkflowClosure, flyteidl.core.Compiler.CompiledWorkflowClosure.Builder, flyteidl.core.Compiler.CompiledWorkflowClosureOrBuilder> compiledWorkflowBuilder_;
-      /**
-       * <code>.flyteidl.core.CompiledWorkflowClosure compiled_workflow = 1;</code>
-       */
-      public boolean hasCompiledWorkflow() {
-        return compiledWorkflowBuilder_ != null || compiledWorkflow_ != null;
-      }
-      /**
-       * <code>.flyteidl.core.CompiledWorkflowClosure compiled_workflow = 1;</code>
-       */
-      public flyteidl.core.Compiler.CompiledWorkflowClosure getCompiledWorkflow() {
-        if (compiledWorkflowBuilder_ == null) {
-          return compiledWorkflow_ == null ? flyteidl.core.Compiler.CompiledWorkflowClosure.getDefaultInstance() : compiledWorkflow_;
-        } else {
-          return compiledWorkflowBuilder_.getMessage();
-        }
-      }
-      /**
-       * <code>.flyteidl.core.CompiledWorkflowClosure compiled_workflow = 1;</code>
-       */
-      public Builder setCompiledWorkflow(flyteidl.core.Compiler.CompiledWorkflowClosure value) {
-        if (compiledWorkflowBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          compiledWorkflow_ = value;
-          onChanged();
-        } else {
-          compiledWorkflowBuilder_.setMessage(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.flyteidl.core.CompiledWorkflowClosure compiled_workflow = 1;</code>
-       */
-      public Builder setCompiledWorkflow(
-          flyteidl.core.Compiler.CompiledWorkflowClosure.Builder builderForValue) {
-        if (compiledWorkflowBuilder_ == null) {
-          compiledWorkflow_ = builderForValue.build();
-          onChanged();
-        } else {
-          compiledWorkflowBuilder_.setMessage(builderForValue.build());
-        }
-
-        return this;
-      }
-      /**
-       * <code>.flyteidl.core.CompiledWorkflowClosure compiled_workflow = 1;</code>
-       */
-      public Builder mergeCompiledWorkflow(flyteidl.core.Compiler.CompiledWorkflowClosure value) {
-        if (compiledWorkflowBuilder_ == null) {
-          if (compiledWorkflow_ != null) {
-            compiledWorkflow_ =
-              flyteidl.core.Compiler.CompiledWorkflowClosure.newBuilder(compiledWorkflow_).mergeFrom(value).buildPartial();
-          } else {
-            compiledWorkflow_ = value;
-          }
-          onChanged();
-        } else {
-          compiledWorkflowBuilder_.mergeFrom(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.flyteidl.core.CompiledWorkflowClosure compiled_workflow = 1;</code>
-       */
-      public Builder clearCompiledWorkflow() {
-        if (compiledWorkflowBuilder_ == null) {
-          compiledWorkflow_ = null;
-          onChanged();
-        } else {
-          compiledWorkflow_ = null;
-          compiledWorkflowBuilder_ = null;
-        }
-
-        return this;
-      }
-      /**
-       * <code>.flyteidl.core.CompiledWorkflowClosure compiled_workflow = 1;</code>
-       */
-      public flyteidl.core.Compiler.CompiledWorkflowClosure.Builder getCompiledWorkflowBuilder() {
-        
-        onChanged();
-        return getCompiledWorkflowFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.flyteidl.core.CompiledWorkflowClosure compiled_workflow = 1;</code>
-       */
-      public flyteidl.core.Compiler.CompiledWorkflowClosureOrBuilder getCompiledWorkflowOrBuilder() {
-        if (compiledWorkflowBuilder_ != null) {
-          return compiledWorkflowBuilder_.getMessageOrBuilder();
-        } else {
-          return compiledWorkflow_ == null ?
-              flyteidl.core.Compiler.CompiledWorkflowClosure.getDefaultInstance() : compiledWorkflow_;
-        }
-      }
-      /**
-       * <code>.flyteidl.core.CompiledWorkflowClosure compiled_workflow = 1;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          flyteidl.core.Compiler.CompiledWorkflowClosure, flyteidl.core.Compiler.CompiledWorkflowClosure.Builder, flyteidl.core.Compiler.CompiledWorkflowClosureOrBuilder> 
-          getCompiledWorkflowFieldBuilder() {
-        if (compiledWorkflowBuilder_ == null) {
-          compiledWorkflowBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              flyteidl.core.Compiler.CompiledWorkflowClosure, flyteidl.core.Compiler.CompiledWorkflowClosure.Builder, flyteidl.core.Compiler.CompiledWorkflowClosureOrBuilder>(
-                  getCompiledWorkflow(),
-                  getParentForChildren(),
-                  isClean());
-          compiledWorkflow_ = null;
-        }
-        return compiledWorkflowBuilder_;
-      }
-      @java.lang.Override
-      public final Builder setUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.setUnknownFields(unknownFields);
-      }
-
-      @java.lang.Override
-      public final Builder mergeUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.mergeUnknownFields(unknownFields);
-      }
-
-
-      // @@protoc_insertion_point(builder_scope:flyteidl.admin.DynamicNodeWorkflowResponse)
-    }
-
-    // @@protoc_insertion_point(class_scope:flyteidl.admin.DynamicNodeWorkflowResponse)
-    private static final flyteidl.admin.WorkflowOuterClass.DynamicNodeWorkflowResponse DEFAULT_INSTANCE;
-    static {
-      DEFAULT_INSTANCE = new flyteidl.admin.WorkflowOuterClass.DynamicNodeWorkflowResponse();
-    }
-
-    public static flyteidl.admin.WorkflowOuterClass.DynamicNodeWorkflowResponse getDefaultInstance() {
-      return DEFAULT_INSTANCE;
-    }
-
-    private static final com.google.protobuf.Parser<DynamicNodeWorkflowResponse>
-        PARSER = new com.google.protobuf.AbstractParser<DynamicNodeWorkflowResponse>() {
-      @java.lang.Override
-      public DynamicNodeWorkflowResponse parsePartialFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        return new DynamicNodeWorkflowResponse(input, extensionRegistry);
-      }
-    };
-
-    public static com.google.protobuf.Parser<DynamicNodeWorkflowResponse> parser() {
-      return PARSER;
-    }
-
-    @java.lang.Override
-    public com.google.protobuf.Parser<DynamicNodeWorkflowResponse> getParserForType() {
-      return PARSER;
-    }
-
-    @java.lang.Override
-    public flyteidl.admin.WorkflowOuterClass.DynamicNodeWorkflowResponse getDefaultInstanceForType() {
-      return DEFAULT_INSTANCE;
-    }
-
-  }
-
   private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_flyteidl_admin_WorkflowCreateRequest_descriptor;
   private static final 
@@ -9389,16 +8177,6 @@ public flyteidl.admin.WorkflowOuterClass.DynamicNodeWorkflowResponse getDefaultI
   private static final 
     com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
       internal_static_flyteidl_admin_CreateWorkflowFailureReason_fieldAccessorTable;
-  private static final com.google.protobuf.Descriptors.Descriptor
-    internal_static_flyteidl_admin_GetDynamicNodeWorkflowRequest_descriptor;
-  private static final 
-    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-      internal_static_flyteidl_admin_GetDynamicNodeWorkflowRequest_fieldAccessorTable;
-  private static final com.google.protobuf.Descriptors.Descriptor
-    internal_static_flyteidl_admin_DynamicNodeWorkflowResponse_descriptor;
-  private static final 
-    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-      internal_static_flyteidl_admin_DynamicNodeWorkflowResponse_fieldAccessorTable;
 
   public static com.google.protobuf.Descriptors.FileDescriptor
       getDescriptor() {
@@ -9439,13 +8217,9 @@ public flyteidl.admin.WorkflowOuterClass.DynamicNodeWorkflowResponse getDefaultI
       "ErrorExistsDifferentStructureH\000\022[\n\032exist" +
       "s_identical_structure\030\002 \001(\01325.flyteidl.a" +
       "dmin.WorkflowErrorExistsIdenticalStructu" +
-      "reH\000B\010\n\006reason\"S\n\035GetDynamicNodeWorkflow" +
-      "Request\0222\n\002id\030\001 \001(\0132&.flyteidl.core.Node" +
-      "ExecutionIdentifier\"`\n\033DynamicNodeWorkfl" +
-      "owResponse\022A\n\021compiled_workflow\030\001 \001(\0132&." +
-      "flyteidl.core.CompiledWorkflowClosureB=Z" +
-      ";github.com/flyteorg/flyte/flyteidl/gen/" +
-      "pb-go/flyteidl/adminb\006proto3"
+      "reH\000B\010\n\006reasonB=Z;github.com/flyteorg/fl" +
+      "yte/flyteidl/gen/pb-go/flyteidl/adminb\006p" +
+      "roto3"
     };
     com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
         new com.google.protobuf.Descriptors.FileDescriptor.    InternalDescriptorAssigner() {
@@ -9518,18 +8292,6 @@ public com.google.protobuf.ExtensionRegistry assignDescriptors(
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_flyteidl_admin_CreateWorkflowFailureReason_descriptor,
         new java.lang.String[] { "ExistsDifferentStructure", "ExistsIdenticalStructure", "Reason", });
-    internal_static_flyteidl_admin_GetDynamicNodeWorkflowRequest_descriptor =
-      getDescriptor().getMessageTypes().get(9);
-    internal_static_flyteidl_admin_GetDynamicNodeWorkflowRequest_fieldAccessorTable = new
-      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
-        internal_static_flyteidl_admin_GetDynamicNodeWorkflowRequest_descriptor,
-        new java.lang.String[] { "Id", });
-    internal_static_flyteidl_admin_DynamicNodeWorkflowResponse_descriptor =
-      getDescriptor().getMessageTypes().get(10);
-    internal_static_flyteidl_admin_DynamicNodeWorkflowResponse_fieldAccessorTable = new
-      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
-        internal_static_flyteidl_admin_DynamicNodeWorkflowResponse_descriptor,
-        new java.lang.String[] { "CompiledWorkflow", });
     flyteidl.core.Compiler.getDescriptor();
     flyteidl.core.IdentifierOuterClass.getDescriptor();
     flyteidl.core.Workflow.getDescriptor();
diff --git a/flyteidl/gen/pb-js/flyteidl.d.ts b/flyteidl/gen/pb-js/flyteidl.d.ts
index 49f4300db2..5379ab1f3b 100644
--- a/flyteidl/gen/pb-js/flyteidl.d.ts
+++ b/flyteidl/gen/pb-js/flyteidl.d.ts
@@ -16439,6 +16439,110 @@ export namespace flyteidl {
             public static verify(message: { [k: string]: any }): (string|null);
         }
 
+        /** Properties of a GetDynamicNodeWorkflowRequest. */
+        interface IGetDynamicNodeWorkflowRequest {
+
+            /** GetDynamicNodeWorkflowRequest id */
+            id?: (flyteidl.core.INodeExecutionIdentifier|null);
+        }
+
+        /** Represents a GetDynamicNodeWorkflowRequest. */
+        class GetDynamicNodeWorkflowRequest implements IGetDynamicNodeWorkflowRequest {
+
+            /**
+             * Constructs a new GetDynamicNodeWorkflowRequest.
+             * @param [properties] Properties to set
+             */
+            constructor(properties?: flyteidl.admin.IGetDynamicNodeWorkflowRequest);
+
+            /** GetDynamicNodeWorkflowRequest id. */
+            public id?: (flyteidl.core.INodeExecutionIdentifier|null);
+
+            /**
+             * Creates a new GetDynamicNodeWorkflowRequest instance using the specified properties.
+             * @param [properties] Properties to set
+             * @returns GetDynamicNodeWorkflowRequest instance
+             */
+            public static create(properties?: flyteidl.admin.IGetDynamicNodeWorkflowRequest): flyteidl.admin.GetDynamicNodeWorkflowRequest;
+
+            /**
+             * Encodes the specified GetDynamicNodeWorkflowRequest message. Does not implicitly {@link flyteidl.admin.GetDynamicNodeWorkflowRequest.verify|verify} messages.
+             * @param message GetDynamicNodeWorkflowRequest message or plain object to encode
+             * @param [writer] Writer to encode to
+             * @returns Writer
+             */
+            public static encode(message: flyteidl.admin.IGetDynamicNodeWorkflowRequest, writer?: $protobuf.Writer): $protobuf.Writer;
+
+            /**
+             * Decodes a GetDynamicNodeWorkflowRequest message from the specified reader or buffer.
+             * @param reader Reader or buffer to decode from
+             * @param [length] Message length if known beforehand
+             * @returns GetDynamicNodeWorkflowRequest
+             * @throws {Error} If the payload is not a reader or valid buffer
+             * @throws {$protobuf.util.ProtocolError} If required fields are missing
+             */
+            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): flyteidl.admin.GetDynamicNodeWorkflowRequest;
+
+            /**
+             * Verifies a GetDynamicNodeWorkflowRequest message.
+             * @param message Plain object to verify
+             * @returns `null` if valid, otherwise the reason why it is not
+             */
+            public static verify(message: { [k: string]: any }): (string|null);
+        }
+
+        /** Properties of a DynamicNodeWorkflowResponse. */
+        interface IDynamicNodeWorkflowResponse {
+
+            /** DynamicNodeWorkflowResponse compiledWorkflow */
+            compiledWorkflow?: (flyteidl.core.ICompiledWorkflowClosure|null);
+        }
+
+        /** Represents a DynamicNodeWorkflowResponse. */
+        class DynamicNodeWorkflowResponse implements IDynamicNodeWorkflowResponse {
+
+            /**
+             * Constructs a new DynamicNodeWorkflowResponse.
+             * @param [properties] Properties to set
+             */
+            constructor(properties?: flyteidl.admin.IDynamicNodeWorkflowResponse);
+
+            /** DynamicNodeWorkflowResponse compiledWorkflow. */
+            public compiledWorkflow?: (flyteidl.core.ICompiledWorkflowClosure|null);
+
+            /**
+             * Creates a new DynamicNodeWorkflowResponse instance using the specified properties.
+             * @param [properties] Properties to set
+             * @returns DynamicNodeWorkflowResponse instance
+             */
+            public static create(properties?: flyteidl.admin.IDynamicNodeWorkflowResponse): flyteidl.admin.DynamicNodeWorkflowResponse;
+
+            /**
+             * Encodes the specified DynamicNodeWorkflowResponse message. Does not implicitly {@link flyteidl.admin.DynamicNodeWorkflowResponse.verify|verify} messages.
+             * @param message DynamicNodeWorkflowResponse message or plain object to encode
+             * @param [writer] Writer to encode to
+             * @returns Writer
+             */
+            public static encode(message: flyteidl.admin.IDynamicNodeWorkflowResponse, writer?: $protobuf.Writer): $protobuf.Writer;
+
+            /**
+             * Decodes a DynamicNodeWorkflowResponse message from the specified reader or buffer.
+             * @param reader Reader or buffer to decode from
+             * @param [length] Message length if known beforehand
+             * @returns DynamicNodeWorkflowResponse
+             * @throws {Error} If the payload is not a reader or valid buffer
+             * @throws {$protobuf.util.ProtocolError} If required fields are missing
+             */
+            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): flyteidl.admin.DynamicNodeWorkflowResponse;
+
+            /**
+             * Verifies a DynamicNodeWorkflowResponse message.
+             * @param message Plain object to verify
+             * @returns `null` if valid, otherwise the reason why it is not
+             */
+            public static verify(message: { [k: string]: any }): (string|null);
+        }
+
         /** Properties of an EmailMessage. */
         interface IEmailMessage {
 
@@ -19695,110 +19799,6 @@ export namespace flyteidl {
             public static verify(message: { [k: string]: any }): (string|null);
         }
 
-        /** Properties of a GetDynamicNodeWorkflowRequest. */
-        interface IGetDynamicNodeWorkflowRequest {
-
-            /** GetDynamicNodeWorkflowRequest id */
-            id?: (flyteidl.core.INodeExecutionIdentifier|null);
-        }
-
-        /** Represents a GetDynamicNodeWorkflowRequest. */
-        class GetDynamicNodeWorkflowRequest implements IGetDynamicNodeWorkflowRequest {
-
-            /**
-             * Constructs a new GetDynamicNodeWorkflowRequest.
-             * @param [properties] Properties to set
-             */
-            constructor(properties?: flyteidl.admin.IGetDynamicNodeWorkflowRequest);
-
-            /** GetDynamicNodeWorkflowRequest id. */
-            public id?: (flyteidl.core.INodeExecutionIdentifier|null);
-
-            /**
-             * Creates a new GetDynamicNodeWorkflowRequest instance using the specified properties.
-             * @param [properties] Properties to set
-             * @returns GetDynamicNodeWorkflowRequest instance
-             */
-            public static create(properties?: flyteidl.admin.IGetDynamicNodeWorkflowRequest): flyteidl.admin.GetDynamicNodeWorkflowRequest;
-
-            /**
-             * Encodes the specified GetDynamicNodeWorkflowRequest message. Does not implicitly {@link flyteidl.admin.GetDynamicNodeWorkflowRequest.verify|verify} messages.
-             * @param message GetDynamicNodeWorkflowRequest message or plain object to encode
-             * @param [writer] Writer to encode to
-             * @returns Writer
-             */
-            public static encode(message: flyteidl.admin.IGetDynamicNodeWorkflowRequest, writer?: $protobuf.Writer): $protobuf.Writer;
-
-            /**
-             * Decodes a GetDynamicNodeWorkflowRequest message from the specified reader or buffer.
-             * @param reader Reader or buffer to decode from
-             * @param [length] Message length if known beforehand
-             * @returns GetDynamicNodeWorkflowRequest
-             * @throws {Error} If the payload is not a reader or valid buffer
-             * @throws {$protobuf.util.ProtocolError} If required fields are missing
-             */
-            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): flyteidl.admin.GetDynamicNodeWorkflowRequest;
-
-            /**
-             * Verifies a GetDynamicNodeWorkflowRequest message.
-             * @param message Plain object to verify
-             * @returns `null` if valid, otherwise the reason why it is not
-             */
-            public static verify(message: { [k: string]: any }): (string|null);
-        }
-
-        /** Properties of a DynamicNodeWorkflowResponse. */
-        interface IDynamicNodeWorkflowResponse {
-
-            /** DynamicNodeWorkflowResponse compiledWorkflow */
-            compiledWorkflow?: (flyteidl.core.ICompiledWorkflowClosure|null);
-        }
-
-        /** Represents a DynamicNodeWorkflowResponse. */
-        class DynamicNodeWorkflowResponse implements IDynamicNodeWorkflowResponse {
-
-            /**
-             * Constructs a new DynamicNodeWorkflowResponse.
-             * @param [properties] Properties to set
-             */
-            constructor(properties?: flyteidl.admin.IDynamicNodeWorkflowResponse);
-
-            /** DynamicNodeWorkflowResponse compiledWorkflow. */
-            public compiledWorkflow?: (flyteidl.core.ICompiledWorkflowClosure|null);
-
-            /**
-             * Creates a new DynamicNodeWorkflowResponse instance using the specified properties.
-             * @param [properties] Properties to set
-             * @returns DynamicNodeWorkflowResponse instance
-             */
-            public static create(properties?: flyteidl.admin.IDynamicNodeWorkflowResponse): flyteidl.admin.DynamicNodeWorkflowResponse;
-
-            /**
-             * Encodes the specified DynamicNodeWorkflowResponse message. Does not implicitly {@link flyteidl.admin.DynamicNodeWorkflowResponse.verify|verify} messages.
-             * @param message DynamicNodeWorkflowResponse message or plain object to encode
-             * @param [writer] Writer to encode to
-             * @returns Writer
-             */
-            public static encode(message: flyteidl.admin.IDynamicNodeWorkflowResponse, writer?: $protobuf.Writer): $protobuf.Writer;
-
-            /**
-             * Decodes a DynamicNodeWorkflowResponse message from the specified reader or buffer.
-             * @param reader Reader or buffer to decode from
-             * @param [length] Message length if known beforehand
-             * @returns DynamicNodeWorkflowResponse
-             * @throws {Error} If the payload is not a reader or valid buffer
-             * @throws {$protobuf.util.ProtocolError} If required fields are missing
-             */
-            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): flyteidl.admin.DynamicNodeWorkflowResponse;
-
-            /**
-             * Verifies a DynamicNodeWorkflowResponse message.
-             * @param message Plain object to verify
-             * @returns `null` if valid, otherwise the reason why it is not
-             */
-            public static verify(message: { [k: string]: any }): (string|null);
-        }
-
         /** Properties of a WorkflowAttributes. */
         interface IWorkflowAttributes {
 
diff --git a/flyteidl/gen/pb-js/flyteidl.js b/flyteidl/gen/pb-js/flyteidl.js
index 2bf354734c..3cd10753fe 100644
--- a/flyteidl/gen/pb-js/flyteidl.js
+++ b/flyteidl/gen/pb-js/flyteidl.js
@@ -39758,6 +39758,230 @@
                 return NodeExecutionGetDataResponse;
             })();
     
+            admin.GetDynamicNodeWorkflowRequest = (function() {
+    
+                /**
+                 * Properties of a GetDynamicNodeWorkflowRequest.
+                 * @memberof flyteidl.admin
+                 * @interface IGetDynamicNodeWorkflowRequest
+                 * @property {flyteidl.core.INodeExecutionIdentifier|null} [id] GetDynamicNodeWorkflowRequest id
+                 */
+    
+                /**
+                 * Constructs a new GetDynamicNodeWorkflowRequest.
+                 * @memberof flyteidl.admin
+                 * @classdesc Represents a GetDynamicNodeWorkflowRequest.
+                 * @implements IGetDynamicNodeWorkflowRequest
+                 * @constructor
+                 * @param {flyteidl.admin.IGetDynamicNodeWorkflowRequest=} [properties] Properties to set
+                 */
+                function GetDynamicNodeWorkflowRequest(properties) {
+                    if (properties)
+                        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+                            if (properties[keys[i]] != null)
+                                this[keys[i]] = properties[keys[i]];
+                }
+    
+                /**
+                 * GetDynamicNodeWorkflowRequest id.
+                 * @member {flyteidl.core.INodeExecutionIdentifier|null|undefined} id
+                 * @memberof flyteidl.admin.GetDynamicNodeWorkflowRequest
+                 * @instance
+                 */
+                GetDynamicNodeWorkflowRequest.prototype.id = null;
+    
+                /**
+                 * Creates a new GetDynamicNodeWorkflowRequest instance using the specified properties.
+                 * @function create
+                 * @memberof flyteidl.admin.GetDynamicNodeWorkflowRequest
+                 * @static
+                 * @param {flyteidl.admin.IGetDynamicNodeWorkflowRequest=} [properties] Properties to set
+                 * @returns {flyteidl.admin.GetDynamicNodeWorkflowRequest} GetDynamicNodeWorkflowRequest instance
+                 */
+                GetDynamicNodeWorkflowRequest.create = function create(properties) {
+                    return new GetDynamicNodeWorkflowRequest(properties);
+                };
+    
+                /**
+                 * Encodes the specified GetDynamicNodeWorkflowRequest message. Does not implicitly {@link flyteidl.admin.GetDynamicNodeWorkflowRequest.verify|verify} messages.
+                 * @function encode
+                 * @memberof flyteidl.admin.GetDynamicNodeWorkflowRequest
+                 * @static
+                 * @param {flyteidl.admin.IGetDynamicNodeWorkflowRequest} message GetDynamicNodeWorkflowRequest message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                GetDynamicNodeWorkflowRequest.encode = function encode(message, writer) {
+                    if (!writer)
+                        writer = $Writer.create();
+                    if (message.id != null && message.hasOwnProperty("id"))
+                        $root.flyteidl.core.NodeExecutionIdentifier.encode(message.id, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();
+                    return writer;
+                };
+    
+                /**
+                 * Decodes a GetDynamicNodeWorkflowRequest message from the specified reader or buffer.
+                 * @function decode
+                 * @memberof flyteidl.admin.GetDynamicNodeWorkflowRequest
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @param {number} [length] Message length if known beforehand
+                 * @returns {flyteidl.admin.GetDynamicNodeWorkflowRequest} GetDynamicNodeWorkflowRequest
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                GetDynamicNodeWorkflowRequest.decode = function decode(reader, length) {
+                    if (!(reader instanceof $Reader))
+                        reader = $Reader.create(reader);
+                    var end = length === undefined ? reader.len : reader.pos + length, message = new $root.flyteidl.admin.GetDynamicNodeWorkflowRequest();
+                    while (reader.pos < end) {
+                        var tag = reader.uint32();
+                        switch (tag >>> 3) {
+                        case 1:
+                            message.id = $root.flyteidl.core.NodeExecutionIdentifier.decode(reader, reader.uint32());
+                            break;
+                        default:
+                            reader.skipType(tag & 7);
+                            break;
+                        }
+                    }
+                    return message;
+                };
+    
+                /**
+                 * Verifies a GetDynamicNodeWorkflowRequest message.
+                 * @function verify
+                 * @memberof flyteidl.admin.GetDynamicNodeWorkflowRequest
+                 * @static
+                 * @param {Object.<string,*>} message Plain object to verify
+                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
+                 */
+                GetDynamicNodeWorkflowRequest.verify = function verify(message) {
+                    if (typeof message !== "object" || message === null)
+                        return "object expected";
+                    if (message.id != null && message.hasOwnProperty("id")) {
+                        var error = $root.flyteidl.core.NodeExecutionIdentifier.verify(message.id);
+                        if (error)
+                            return "id." + error;
+                    }
+                    return null;
+                };
+    
+                return GetDynamicNodeWorkflowRequest;
+            })();
+    
+            admin.DynamicNodeWorkflowResponse = (function() {
+    
+                /**
+                 * Properties of a DynamicNodeWorkflowResponse.
+                 * @memberof flyteidl.admin
+                 * @interface IDynamicNodeWorkflowResponse
+                 * @property {flyteidl.core.ICompiledWorkflowClosure|null} [compiledWorkflow] DynamicNodeWorkflowResponse compiledWorkflow
+                 */
+    
+                /**
+                 * Constructs a new DynamicNodeWorkflowResponse.
+                 * @memberof flyteidl.admin
+                 * @classdesc Represents a DynamicNodeWorkflowResponse.
+                 * @implements IDynamicNodeWorkflowResponse
+                 * @constructor
+                 * @param {flyteidl.admin.IDynamicNodeWorkflowResponse=} [properties] Properties to set
+                 */
+                function DynamicNodeWorkflowResponse(properties) {
+                    if (properties)
+                        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+                            if (properties[keys[i]] != null)
+                                this[keys[i]] = properties[keys[i]];
+                }
+    
+                /**
+                 * DynamicNodeWorkflowResponse compiledWorkflow.
+                 * @member {flyteidl.core.ICompiledWorkflowClosure|null|undefined} compiledWorkflow
+                 * @memberof flyteidl.admin.DynamicNodeWorkflowResponse
+                 * @instance
+                 */
+                DynamicNodeWorkflowResponse.prototype.compiledWorkflow = null;
+    
+                /**
+                 * Creates a new DynamicNodeWorkflowResponse instance using the specified properties.
+                 * @function create
+                 * @memberof flyteidl.admin.DynamicNodeWorkflowResponse
+                 * @static
+                 * @param {flyteidl.admin.IDynamicNodeWorkflowResponse=} [properties] Properties to set
+                 * @returns {flyteidl.admin.DynamicNodeWorkflowResponse} DynamicNodeWorkflowResponse instance
+                 */
+                DynamicNodeWorkflowResponse.create = function create(properties) {
+                    return new DynamicNodeWorkflowResponse(properties);
+                };
+    
+                /**
+                 * Encodes the specified DynamicNodeWorkflowResponse message. Does not implicitly {@link flyteidl.admin.DynamicNodeWorkflowResponse.verify|verify} messages.
+                 * @function encode
+                 * @memberof flyteidl.admin.DynamicNodeWorkflowResponse
+                 * @static
+                 * @param {flyteidl.admin.IDynamicNodeWorkflowResponse} message DynamicNodeWorkflowResponse message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                DynamicNodeWorkflowResponse.encode = function encode(message, writer) {
+                    if (!writer)
+                        writer = $Writer.create();
+                    if (message.compiledWorkflow != null && message.hasOwnProperty("compiledWorkflow"))
+                        $root.flyteidl.core.CompiledWorkflowClosure.encode(message.compiledWorkflow, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();
+                    return writer;
+                };
+    
+                /**
+                 * Decodes a DynamicNodeWorkflowResponse message from the specified reader or buffer.
+                 * @function decode
+                 * @memberof flyteidl.admin.DynamicNodeWorkflowResponse
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @param {number} [length] Message length if known beforehand
+                 * @returns {flyteidl.admin.DynamicNodeWorkflowResponse} DynamicNodeWorkflowResponse
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                DynamicNodeWorkflowResponse.decode = function decode(reader, length) {
+                    if (!(reader instanceof $Reader))
+                        reader = $Reader.create(reader);
+                    var end = length === undefined ? reader.len : reader.pos + length, message = new $root.flyteidl.admin.DynamicNodeWorkflowResponse();
+                    while (reader.pos < end) {
+                        var tag = reader.uint32();
+                        switch (tag >>> 3) {
+                        case 1:
+                            message.compiledWorkflow = $root.flyteidl.core.CompiledWorkflowClosure.decode(reader, reader.uint32());
+                            break;
+                        default:
+                            reader.skipType(tag & 7);
+                            break;
+                        }
+                    }
+                    return message;
+                };
+    
+                /**
+                 * Verifies a DynamicNodeWorkflowResponse message.
+                 * @function verify
+                 * @memberof flyteidl.admin.DynamicNodeWorkflowResponse
+                 * @static
+                 * @param {Object.<string,*>} message Plain object to verify
+                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
+                 */
+                DynamicNodeWorkflowResponse.verify = function verify(message) {
+                    if (typeof message !== "object" || message === null)
+                        return "object expected";
+                    if (message.compiledWorkflow != null && message.hasOwnProperty("compiledWorkflow")) {
+                        var error = $root.flyteidl.core.CompiledWorkflowClosure.verify(message.compiledWorkflow);
+                        if (error)
+                            return "compiledWorkflow." + error;
+                    }
+                    return null;
+                };
+    
+                return DynamicNodeWorkflowResponse;
+            })();
+    
             admin.EmailMessage = (function() {
     
                 /**
@@ -47265,230 +47489,6 @@
                 return CreateWorkflowFailureReason;
             })();
     
-            admin.GetDynamicNodeWorkflowRequest = (function() {
-    
-                /**
-                 * Properties of a GetDynamicNodeWorkflowRequest.
-                 * @memberof flyteidl.admin
-                 * @interface IGetDynamicNodeWorkflowRequest
-                 * @property {flyteidl.core.INodeExecutionIdentifier|null} [id] GetDynamicNodeWorkflowRequest id
-                 */
-    
-                /**
-                 * Constructs a new GetDynamicNodeWorkflowRequest.
-                 * @memberof flyteidl.admin
-                 * @classdesc Represents a GetDynamicNodeWorkflowRequest.
-                 * @implements IGetDynamicNodeWorkflowRequest
-                 * @constructor
-                 * @param {flyteidl.admin.IGetDynamicNodeWorkflowRequest=} [properties] Properties to set
-                 */
-                function GetDynamicNodeWorkflowRequest(properties) {
-                    if (properties)
-                        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
-                                this[keys[i]] = properties[keys[i]];
-                }
-    
-                /**
-                 * GetDynamicNodeWorkflowRequest id.
-                 * @member {flyteidl.core.INodeExecutionIdentifier|null|undefined} id
-                 * @memberof flyteidl.admin.GetDynamicNodeWorkflowRequest
-                 * @instance
-                 */
-                GetDynamicNodeWorkflowRequest.prototype.id = null;
-    
-                /**
-                 * Creates a new GetDynamicNodeWorkflowRequest instance using the specified properties.
-                 * @function create
-                 * @memberof flyteidl.admin.GetDynamicNodeWorkflowRequest
-                 * @static
-                 * @param {flyteidl.admin.IGetDynamicNodeWorkflowRequest=} [properties] Properties to set
-                 * @returns {flyteidl.admin.GetDynamicNodeWorkflowRequest} GetDynamicNodeWorkflowRequest instance
-                 */
-                GetDynamicNodeWorkflowRequest.create = function create(properties) {
-                    return new GetDynamicNodeWorkflowRequest(properties);
-                };
-    
-                /**
-                 * Encodes the specified GetDynamicNodeWorkflowRequest message. Does not implicitly {@link flyteidl.admin.GetDynamicNodeWorkflowRequest.verify|verify} messages.
-                 * @function encode
-                 * @memberof flyteidl.admin.GetDynamicNodeWorkflowRequest
-                 * @static
-                 * @param {flyteidl.admin.IGetDynamicNodeWorkflowRequest} message GetDynamicNodeWorkflowRequest message or plain object to encode
-                 * @param {$protobuf.Writer} [writer] Writer to encode to
-                 * @returns {$protobuf.Writer} Writer
-                 */
-                GetDynamicNodeWorkflowRequest.encode = function encode(message, writer) {
-                    if (!writer)
-                        writer = $Writer.create();
-                    if (message.id != null && message.hasOwnProperty("id"))
-                        $root.flyteidl.core.NodeExecutionIdentifier.encode(message.id, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();
-                    return writer;
-                };
-    
-                /**
-                 * Decodes a GetDynamicNodeWorkflowRequest message from the specified reader or buffer.
-                 * @function decode
-                 * @memberof flyteidl.admin.GetDynamicNodeWorkflowRequest
-                 * @static
-                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
-                 * @param {number} [length] Message length if known beforehand
-                 * @returns {flyteidl.admin.GetDynamicNodeWorkflowRequest} GetDynamicNodeWorkflowRequest
-                 * @throws {Error} If the payload is not a reader or valid buffer
-                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
-                 */
-                GetDynamicNodeWorkflowRequest.decode = function decode(reader, length) {
-                    if (!(reader instanceof $Reader))
-                        reader = $Reader.create(reader);
-                    var end = length === undefined ? reader.len : reader.pos + length, message = new $root.flyteidl.admin.GetDynamicNodeWorkflowRequest();
-                    while (reader.pos < end) {
-                        var tag = reader.uint32();
-                        switch (tag >>> 3) {
-                        case 1:
-                            message.id = $root.flyteidl.core.NodeExecutionIdentifier.decode(reader, reader.uint32());
-                            break;
-                        default:
-                            reader.skipType(tag & 7);
-                            break;
-                        }
-                    }
-                    return message;
-                };
-    
-                /**
-                 * Verifies a GetDynamicNodeWorkflowRequest message.
-                 * @function verify
-                 * @memberof flyteidl.admin.GetDynamicNodeWorkflowRequest
-                 * @static
-                 * @param {Object.<string,*>} message Plain object to verify
-                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
-                 */
-                GetDynamicNodeWorkflowRequest.verify = function verify(message) {
-                    if (typeof message !== "object" || message === null)
-                        return "object expected";
-                    if (message.id != null && message.hasOwnProperty("id")) {
-                        var error = $root.flyteidl.core.NodeExecutionIdentifier.verify(message.id);
-                        if (error)
-                            return "id." + error;
-                    }
-                    return null;
-                };
-    
-                return GetDynamicNodeWorkflowRequest;
-            })();
-    
-            admin.DynamicNodeWorkflowResponse = (function() {
-    
-                /**
-                 * Properties of a DynamicNodeWorkflowResponse.
-                 * @memberof flyteidl.admin
-                 * @interface IDynamicNodeWorkflowResponse
-                 * @property {flyteidl.core.ICompiledWorkflowClosure|null} [compiledWorkflow] DynamicNodeWorkflowResponse compiledWorkflow
-                 */
-    
-                /**
-                 * Constructs a new DynamicNodeWorkflowResponse.
-                 * @memberof flyteidl.admin
-                 * @classdesc Represents a DynamicNodeWorkflowResponse.
-                 * @implements IDynamicNodeWorkflowResponse
-                 * @constructor
-                 * @param {flyteidl.admin.IDynamicNodeWorkflowResponse=} [properties] Properties to set
-                 */
-                function DynamicNodeWorkflowResponse(properties) {
-                    if (properties)
-                        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
-                            if (properties[keys[i]] != null)
-                                this[keys[i]] = properties[keys[i]];
-                }
-    
-                /**
-                 * DynamicNodeWorkflowResponse compiledWorkflow.
-                 * @member {flyteidl.core.ICompiledWorkflowClosure|null|undefined} compiledWorkflow
-                 * @memberof flyteidl.admin.DynamicNodeWorkflowResponse
-                 * @instance
-                 */
-                DynamicNodeWorkflowResponse.prototype.compiledWorkflow = null;
-    
-                /**
-                 * Creates a new DynamicNodeWorkflowResponse instance using the specified properties.
-                 * @function create
-                 * @memberof flyteidl.admin.DynamicNodeWorkflowResponse
-                 * @static
-                 * @param {flyteidl.admin.IDynamicNodeWorkflowResponse=} [properties] Properties to set
-                 * @returns {flyteidl.admin.DynamicNodeWorkflowResponse} DynamicNodeWorkflowResponse instance
-                 */
-                DynamicNodeWorkflowResponse.create = function create(properties) {
-                    return new DynamicNodeWorkflowResponse(properties);
-                };
-    
-                /**
-                 * Encodes the specified DynamicNodeWorkflowResponse message. Does not implicitly {@link flyteidl.admin.DynamicNodeWorkflowResponse.verify|verify} messages.
-                 * @function encode
-                 * @memberof flyteidl.admin.DynamicNodeWorkflowResponse
-                 * @static
-                 * @param {flyteidl.admin.IDynamicNodeWorkflowResponse} message DynamicNodeWorkflowResponse message or plain object to encode
-                 * @param {$protobuf.Writer} [writer] Writer to encode to
-                 * @returns {$protobuf.Writer} Writer
-                 */
-                DynamicNodeWorkflowResponse.encode = function encode(message, writer) {
-                    if (!writer)
-                        writer = $Writer.create();
-                    if (message.compiledWorkflow != null && message.hasOwnProperty("compiledWorkflow"))
-                        $root.flyteidl.core.CompiledWorkflowClosure.encode(message.compiledWorkflow, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();
-                    return writer;
-                };
-    
-                /**
-                 * Decodes a DynamicNodeWorkflowResponse message from the specified reader or buffer.
-                 * @function decode
-                 * @memberof flyteidl.admin.DynamicNodeWorkflowResponse
-                 * @static
-                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
-                 * @param {number} [length] Message length if known beforehand
-                 * @returns {flyteidl.admin.DynamicNodeWorkflowResponse} DynamicNodeWorkflowResponse
-                 * @throws {Error} If the payload is not a reader or valid buffer
-                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
-                 */
-                DynamicNodeWorkflowResponse.decode = function decode(reader, length) {
-                    if (!(reader instanceof $Reader))
-                        reader = $Reader.create(reader);
-                    var end = length === undefined ? reader.len : reader.pos + length, message = new $root.flyteidl.admin.DynamicNodeWorkflowResponse();
-                    while (reader.pos < end) {
-                        var tag = reader.uint32();
-                        switch (tag >>> 3) {
-                        case 1:
-                            message.compiledWorkflow = $root.flyteidl.core.CompiledWorkflowClosure.decode(reader, reader.uint32());
-                            break;
-                        default:
-                            reader.skipType(tag & 7);
-                            break;
-                        }
-                    }
-                    return message;
-                };
-    
-                /**
-                 * Verifies a DynamicNodeWorkflowResponse message.
-                 * @function verify
-                 * @memberof flyteidl.admin.DynamicNodeWorkflowResponse
-                 * @static
-                 * @param {Object.<string,*>} message Plain object to verify
-                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
-                 */
-                DynamicNodeWorkflowResponse.verify = function verify(message) {
-                    if (typeof message !== "object" || message === null)
-                        return "object expected";
-                    if (message.compiledWorkflow != null && message.hasOwnProperty("compiledWorkflow")) {
-                        var error = $root.flyteidl.core.CompiledWorkflowClosure.verify(message.compiledWorkflow);
-                        if (error)
-                            return "compiledWorkflow." + error;
-                    }
-                    return null;
-                };
-    
-                return DynamicNodeWorkflowResponse;
-            })();
-    
             admin.WorkflowAttributes = (function() {
     
                 /**
diff --git a/flyteidl/gen/pb_python/flyteidl/admin/node_execution_pb2.py b/flyteidl/gen/pb_python/flyteidl/admin/node_execution_pb2.py
index 17e5cbd652..93a29df4d6 100644
--- a/flyteidl/gen/pb_python/flyteidl/admin/node_execution_pb2.py
+++ b/flyteidl/gen/pb_python/flyteidl/admin/node_execution_pb2.py
@@ -21,7 +21,7 @@
 from google.protobuf import duration_pb2 as google_dot_protobuf_dot_duration__pb2
 
 
-DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n#flyteidl/admin/node_execution.proto\x12\x0e\x66lyteidl.admin\x1a\x1b\x66lyteidl/admin/common.proto\x1a\x1d\x66lyteidl/core/execution.proto\x1a\x1b\x66lyteidl/core/catalog.proto\x1a\x1c\x66lyteidl/core/compiler.proto\x1a\x1e\x66lyteidl/core/identifier.proto\x1a\x1c\x66lyteidl/core/literals.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/duration.proto\"Q\n\x17NodeExecutionGetRequest\x12\x36\n\x02id\x18\x01 \x01(\x0b\x32&.flyteidl.core.NodeExecutionIdentifierR\x02id\"\x99\x02\n\x18NodeExecutionListRequest\x12^\n\x15workflow_execution_id\x18\x01 \x01(\x0b\x32*.flyteidl.core.WorkflowExecutionIdentifierR\x13workflowExecutionId\x12\x14\n\x05limit\x18\x02 \x01(\rR\x05limit\x12\x14\n\x05token\x18\x03 \x01(\tR\x05token\x12\x18\n\x07\x66ilters\x18\x04 \x01(\tR\x07\x66ilters\x12-\n\x07sort_by\x18\x05 \x01(\x0b\x32\x14.flyteidl.admin.SortR\x06sortBy\x12(\n\x10unique_parent_id\x18\x06 \x01(\tR\x0euniqueParentId\"\xea\x01\n\x1fNodeExecutionForTaskListRequest\x12R\n\x11task_execution_id\x18\x01 \x01(\x0b\x32&.flyteidl.core.TaskExecutionIdentifierR\x0ftaskExecutionId\x12\x14\n\x05limit\x18\x02 \x01(\rR\x05limit\x12\x14\n\x05token\x18\x03 \x01(\tR\x05token\x12\x18\n\x07\x66ilters\x18\x04 \x01(\tR\x07\x66ilters\x12-\n\x07sort_by\x18\x05 \x01(\x0b\x32\x14.flyteidl.admin.SortR\x06sortBy\"\xe7\x01\n\rNodeExecution\x12\x36\n\x02id\x18\x01 \x01(\x0b\x32&.flyteidl.core.NodeExecutionIdentifierR\x02id\x12\x1b\n\tinput_uri\x18\x02 \x01(\tR\x08inputUri\x12>\n\x07\x63losure\x18\x03 \x01(\x0b\x32$.flyteidl.admin.NodeExecutionClosureR\x07\x63losure\x12\x41\n\x08metadata\x18\x04 \x01(\x0b\x32%.flyteidl.admin.NodeExecutionMetaDataR\x08metadata\"\xba\x01\n\x15NodeExecutionMetaData\x12\x1f\n\x0bretry_group\x18\x01 \x01(\tR\nretryGroup\x12$\n\x0eis_parent_node\x18\x02 \x01(\x08R\x0cisParentNode\x12 \n\x0cspec_node_id\x18\x03 \x01(\tR\nspecNodeId\x12\x1d\n\nis_dynamic\x18\x04 \x01(\x08R\tisDynamic\x12\x19\n\x08is_array\x18\x05 \x01(\x08R\x07isArray\"q\n\x11NodeExecutionList\x12\x46\n\x0fnode_executions\x18\x01 \x03(\x0b\x32\x1d.flyteidl.admin.NodeExecutionR\x0enodeExecutions\x12\x14\n\x05token\x18\x02 \x01(\tR\x05token\"\xf6\x05\n\x14NodeExecutionClosure\x12#\n\noutput_uri\x18\x01 \x01(\tB\x02\x18\x01H\x00R\toutputUri\x12\x35\n\x05\x65rror\x18\x02 \x01(\x0b\x32\x1d.flyteidl.core.ExecutionErrorH\x00R\x05\x65rror\x12@\n\x0boutput_data\x18\n \x01(\x0b\x32\x19.flyteidl.core.LiteralMapB\x02\x18\x01H\x00R\noutputData\x12\x38\n\x05phase\x18\x03 \x01(\x0e\x32\".flyteidl.core.NodeExecution.PhaseR\x05phase\x12\x39\n\nstarted_at\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tstartedAt\x12\x35\n\x08\x64uration\x18\x05 \x01(\x0b\x32\x19.google.protobuf.DurationR\x08\x64uration\x12\x39\n\ncreated_at\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tcreatedAt\x12\x39\n\nupdated_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tupdatedAt\x12\\\n\x16workflow_node_metadata\x18\x08 \x01(\x0b\x32$.flyteidl.admin.WorkflowNodeMetadataH\x01R\x14workflowNodeMetadata\x12P\n\x12task_node_metadata\x18\t \x01(\x0b\x32 .flyteidl.admin.TaskNodeMetadataH\x01R\x10taskNodeMetadata\x12\x19\n\x08\x64\x65\x63k_uri\x18\x0b \x01(\tR\x07\x64\x65\x63kUri\x12/\n\x14\x64ynamic_job_spec_uri\x18\x0c \x01(\tR\x11\x64ynamicJobSpecUriB\x0f\n\routput_resultB\x11\n\x0ftarget_metadata\"d\n\x14WorkflowNodeMetadata\x12L\n\x0b\x65xecutionId\x18\x01 \x01(\x0b\x32*.flyteidl.core.WorkflowExecutionIdentifierR\x0b\x65xecutionId\"\xc0\x01\n\x10TaskNodeMetadata\x12\x44\n\x0c\x63\x61\x63he_status\x18\x01 \x01(\x0e\x32!.flyteidl.core.CatalogCacheStatusR\x0b\x63\x61\x63heStatus\x12?\n\x0b\x63\x61talog_key\x18\x02 \x01(\x0b\x32\x1e.flyteidl.core.CatalogMetadataR\ncatalogKey\x12%\n\x0e\x63heckpoint_uri\x18\x04 \x01(\tR\rcheckpointUri\"\xce\x01\n\x1b\x44ynamicWorkflowNodeMetadata\x12)\n\x02id\x18\x01 \x01(\x0b\x32\x19.flyteidl.core.IdentifierR\x02id\x12S\n\x11\x63ompiled_workflow\x18\x02 \x01(\x0b\x32&.flyteidl.core.CompiledWorkflowClosureR\x10\x63ompiledWorkflow\x12/\n\x14\x64ynamic_job_spec_uri\x18\x03 \x01(\tR\x11\x64ynamicJobSpecUri\"U\n\x1bNodeExecutionGetDataRequest\x12\x36\n\x02id\x18\x01 \x01(\x0b\x32&.flyteidl.core.NodeExecutionIdentifierR\x02id\"\x96\x03\n\x1cNodeExecutionGetDataResponse\x12\x33\n\x06inputs\x18\x01 \x01(\x0b\x32\x17.flyteidl.admin.UrlBlobB\x02\x18\x01R\x06inputs\x12\x35\n\x07outputs\x18\x02 \x01(\x0b\x32\x17.flyteidl.admin.UrlBlobB\x02\x18\x01R\x07outputs\x12:\n\x0b\x66ull_inputs\x18\x03 \x01(\x0b\x32\x19.flyteidl.core.LiteralMapR\nfullInputs\x12<\n\x0c\x66ull_outputs\x18\x04 \x01(\x0b\x32\x19.flyteidl.core.LiteralMapR\x0b\x66ullOutputs\x12V\n\x10\x64ynamic_workflow\x18\x10 \x01(\x0b\x32+.flyteidl.admin.DynamicWorkflowNodeMetadataR\x0f\x64ynamicWorkflow\x12\x38\n\nflyte_urls\x18\x11 \x01(\x0b\x32\x19.flyteidl.admin.FlyteURLsR\tflyteUrlsB\xbe\x01\n\x12\x63om.flyteidl.adminB\x12NodeExecutionProtoP\x01Z;github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/admin\xa2\x02\x03\x46\x41X\xaa\x02\x0e\x46lyteidl.Admin\xca\x02\x0e\x46lyteidl\\Admin\xe2\x02\x1a\x46lyteidl\\Admin\\GPBMetadata\xea\x02\x0f\x46lyteidl::Adminb\x06proto3')
+DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n#flyteidl/admin/node_execution.proto\x12\x0e\x66lyteidl.admin\x1a\x1b\x66lyteidl/admin/common.proto\x1a\x1d\x66lyteidl/core/execution.proto\x1a\x1b\x66lyteidl/core/catalog.proto\x1a\x1c\x66lyteidl/core/compiler.proto\x1a\x1e\x66lyteidl/core/identifier.proto\x1a\x1c\x66lyteidl/core/literals.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/duration.proto\"Q\n\x17NodeExecutionGetRequest\x12\x36\n\x02id\x18\x01 \x01(\x0b\x32&.flyteidl.core.NodeExecutionIdentifierR\x02id\"\x99\x02\n\x18NodeExecutionListRequest\x12^\n\x15workflow_execution_id\x18\x01 \x01(\x0b\x32*.flyteidl.core.WorkflowExecutionIdentifierR\x13workflowExecutionId\x12\x14\n\x05limit\x18\x02 \x01(\rR\x05limit\x12\x14\n\x05token\x18\x03 \x01(\tR\x05token\x12\x18\n\x07\x66ilters\x18\x04 \x01(\tR\x07\x66ilters\x12-\n\x07sort_by\x18\x05 \x01(\x0b\x32\x14.flyteidl.admin.SortR\x06sortBy\x12(\n\x10unique_parent_id\x18\x06 \x01(\tR\x0euniqueParentId\"\xea\x01\n\x1fNodeExecutionForTaskListRequest\x12R\n\x11task_execution_id\x18\x01 \x01(\x0b\x32&.flyteidl.core.TaskExecutionIdentifierR\x0ftaskExecutionId\x12\x14\n\x05limit\x18\x02 \x01(\rR\x05limit\x12\x14\n\x05token\x18\x03 \x01(\tR\x05token\x12\x18\n\x07\x66ilters\x18\x04 \x01(\tR\x07\x66ilters\x12-\n\x07sort_by\x18\x05 \x01(\x0b\x32\x14.flyteidl.admin.SortR\x06sortBy\"\xe7\x01\n\rNodeExecution\x12\x36\n\x02id\x18\x01 \x01(\x0b\x32&.flyteidl.core.NodeExecutionIdentifierR\x02id\x12\x1b\n\tinput_uri\x18\x02 \x01(\tR\x08inputUri\x12>\n\x07\x63losure\x18\x03 \x01(\x0b\x32$.flyteidl.admin.NodeExecutionClosureR\x07\x63losure\x12\x41\n\x08metadata\x18\x04 \x01(\x0b\x32%.flyteidl.admin.NodeExecutionMetaDataR\x08metadata\"\xba\x01\n\x15NodeExecutionMetaData\x12\x1f\n\x0bretry_group\x18\x01 \x01(\tR\nretryGroup\x12$\n\x0eis_parent_node\x18\x02 \x01(\x08R\x0cisParentNode\x12 \n\x0cspec_node_id\x18\x03 \x01(\tR\nspecNodeId\x12\x1d\n\nis_dynamic\x18\x04 \x01(\x08R\tisDynamic\x12\x19\n\x08is_array\x18\x05 \x01(\x08R\x07isArray\"q\n\x11NodeExecutionList\x12\x46\n\x0fnode_executions\x18\x01 \x03(\x0b\x32\x1d.flyteidl.admin.NodeExecutionR\x0enodeExecutions\x12\x14\n\x05token\x18\x02 \x01(\tR\x05token\"\xf6\x05\n\x14NodeExecutionClosure\x12#\n\noutput_uri\x18\x01 \x01(\tB\x02\x18\x01H\x00R\toutputUri\x12\x35\n\x05\x65rror\x18\x02 \x01(\x0b\x32\x1d.flyteidl.core.ExecutionErrorH\x00R\x05\x65rror\x12@\n\x0boutput_data\x18\n \x01(\x0b\x32\x19.flyteidl.core.LiteralMapB\x02\x18\x01H\x00R\noutputData\x12\x38\n\x05phase\x18\x03 \x01(\x0e\x32\".flyteidl.core.NodeExecution.PhaseR\x05phase\x12\x39\n\nstarted_at\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tstartedAt\x12\x35\n\x08\x64uration\x18\x05 \x01(\x0b\x32\x19.google.protobuf.DurationR\x08\x64uration\x12\x39\n\ncreated_at\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tcreatedAt\x12\x39\n\nupdated_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tupdatedAt\x12\\\n\x16workflow_node_metadata\x18\x08 \x01(\x0b\x32$.flyteidl.admin.WorkflowNodeMetadataH\x01R\x14workflowNodeMetadata\x12P\n\x12task_node_metadata\x18\t \x01(\x0b\x32 .flyteidl.admin.TaskNodeMetadataH\x01R\x10taskNodeMetadata\x12\x19\n\x08\x64\x65\x63k_uri\x18\x0b \x01(\tR\x07\x64\x65\x63kUri\x12/\n\x14\x64ynamic_job_spec_uri\x18\x0c \x01(\tR\x11\x64ynamicJobSpecUriB\x0f\n\routput_resultB\x11\n\x0ftarget_metadata\"d\n\x14WorkflowNodeMetadata\x12L\n\x0b\x65xecutionId\x18\x01 \x01(\x0b\x32*.flyteidl.core.WorkflowExecutionIdentifierR\x0b\x65xecutionId\"\xc0\x01\n\x10TaskNodeMetadata\x12\x44\n\x0c\x63\x61\x63he_status\x18\x01 \x01(\x0e\x32!.flyteidl.core.CatalogCacheStatusR\x0b\x63\x61\x63heStatus\x12?\n\x0b\x63\x61talog_key\x18\x02 \x01(\x0b\x32\x1e.flyteidl.core.CatalogMetadataR\ncatalogKey\x12%\n\x0e\x63heckpoint_uri\x18\x04 \x01(\tR\rcheckpointUri\"\xce\x01\n\x1b\x44ynamicWorkflowNodeMetadata\x12)\n\x02id\x18\x01 \x01(\x0b\x32\x19.flyteidl.core.IdentifierR\x02id\x12S\n\x11\x63ompiled_workflow\x18\x02 \x01(\x0b\x32&.flyteidl.core.CompiledWorkflowClosureR\x10\x63ompiledWorkflow\x12/\n\x14\x64ynamic_job_spec_uri\x18\x03 \x01(\tR\x11\x64ynamicJobSpecUri\"U\n\x1bNodeExecutionGetDataRequest\x12\x36\n\x02id\x18\x01 \x01(\x0b\x32&.flyteidl.core.NodeExecutionIdentifierR\x02id\"\x96\x03\n\x1cNodeExecutionGetDataResponse\x12\x33\n\x06inputs\x18\x01 \x01(\x0b\x32\x17.flyteidl.admin.UrlBlobB\x02\x18\x01R\x06inputs\x12\x35\n\x07outputs\x18\x02 \x01(\x0b\x32\x17.flyteidl.admin.UrlBlobB\x02\x18\x01R\x07outputs\x12:\n\x0b\x66ull_inputs\x18\x03 \x01(\x0b\x32\x19.flyteidl.core.LiteralMapR\nfullInputs\x12<\n\x0c\x66ull_outputs\x18\x04 \x01(\x0b\x32\x19.flyteidl.core.LiteralMapR\x0b\x66ullOutputs\x12V\n\x10\x64ynamic_workflow\x18\x10 \x01(\x0b\x32+.flyteidl.admin.DynamicWorkflowNodeMetadataR\x0f\x64ynamicWorkflow\x12\x38\n\nflyte_urls\x18\x11 \x01(\x0b\x32\x19.flyteidl.admin.FlyteURLsR\tflyteUrls\"W\n\x1dGetDynamicNodeWorkflowRequest\x12\x36\n\x02id\x18\x01 \x01(\x0b\x32&.flyteidl.core.NodeExecutionIdentifierR\x02id\"r\n\x1b\x44ynamicNodeWorkflowResponse\x12S\n\x11\x63ompiled_workflow\x18\x01 \x01(\x0b\x32&.flyteidl.core.CompiledWorkflowClosureR\x10\x63ompiledWorkflowB\xbe\x01\n\x12\x63om.flyteidl.adminB\x12NodeExecutionProtoP\x01Z;github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/admin\xa2\x02\x03\x46\x41X\xaa\x02\x0e\x46lyteidl.Admin\xca\x02\x0e\x46lyteidl\\Admin\xe2\x02\x1a\x46lyteidl\\Admin\\GPBMetadata\xea\x02\x0f\x46lyteidl::Adminb\x06proto3')
 
 _globals = globals()
 _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
@@ -62,4 +62,8 @@
   _globals['_NODEEXECUTIONGETDATAREQUEST']._serialized_end=2795
   _globals['_NODEEXECUTIONGETDATARESPONSE']._serialized_start=2798
   _globals['_NODEEXECUTIONGETDATARESPONSE']._serialized_end=3204
+  _globals['_GETDYNAMICNODEWORKFLOWREQUEST']._serialized_start=3206
+  _globals['_GETDYNAMICNODEWORKFLOWREQUEST']._serialized_end=3293
+  _globals['_DYNAMICNODEWORKFLOWRESPONSE']._serialized_start=3295
+  _globals['_DYNAMICNODEWORKFLOWRESPONSE']._serialized_end=3409
 # @@protoc_insertion_point(module_scope)
diff --git a/flyteidl/gen/pb_python/flyteidl/admin/node_execution_pb2.pyi b/flyteidl/gen/pb_python/flyteidl/admin/node_execution_pb2.pyi
index 8cbb708f01..9bf601847d 100644
--- a/flyteidl/gen/pb_python/flyteidl/admin/node_execution_pb2.pyi
+++ b/flyteidl/gen/pb_python/flyteidl/admin/node_execution_pb2.pyi
@@ -158,3 +158,15 @@ class NodeExecutionGetDataResponse(_message.Message):
     dynamic_workflow: DynamicWorkflowNodeMetadata
     flyte_urls: _common_pb2.FlyteURLs
     def __init__(self, inputs: _Optional[_Union[_common_pb2.UrlBlob, _Mapping]] = ..., outputs: _Optional[_Union[_common_pb2.UrlBlob, _Mapping]] = ..., full_inputs: _Optional[_Union[_literals_pb2.LiteralMap, _Mapping]] = ..., full_outputs: _Optional[_Union[_literals_pb2.LiteralMap, _Mapping]] = ..., dynamic_workflow: _Optional[_Union[DynamicWorkflowNodeMetadata, _Mapping]] = ..., flyte_urls: _Optional[_Union[_common_pb2.FlyteURLs, _Mapping]] = ...) -> None: ...
+
+class GetDynamicNodeWorkflowRequest(_message.Message):
+    __slots__ = ["id"]
+    ID_FIELD_NUMBER: _ClassVar[int]
+    id: _identifier_pb2.NodeExecutionIdentifier
+    def __init__(self, id: _Optional[_Union[_identifier_pb2.NodeExecutionIdentifier, _Mapping]] = ...) -> None: ...
+
+class DynamicNodeWorkflowResponse(_message.Message):
+    __slots__ = ["compiled_workflow"]
+    COMPILED_WORKFLOW_FIELD_NUMBER: _ClassVar[int]
+    compiled_workflow: _compiler_pb2.CompiledWorkflowClosure
+    def __init__(self, compiled_workflow: _Optional[_Union[_compiler_pb2.CompiledWorkflowClosure, _Mapping]] = ...) -> None: ...
diff --git a/flyteidl/gen/pb_python/flyteidl/admin/workflow_pb2.py b/flyteidl/gen/pb_python/flyteidl/admin/workflow_pb2.py
index 72e5288beb..360e634029 100644
--- a/flyteidl/gen/pb_python/flyteidl/admin/workflow_pb2.py
+++ b/flyteidl/gen/pb_python/flyteidl/admin/workflow_pb2.py
@@ -18,7 +18,7 @@
 from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2
 
 
-DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1d\x66lyteidl/admin/workflow.proto\x12\x0e\x66lyteidl.admin\x1a\x1c\x66lyteidl/core/compiler.proto\x1a\x1e\x66lyteidl/core/identifier.proto\x1a\x1c\x66lyteidl/core/workflow.proto\x1a\'flyteidl/admin/description_entity.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"t\n\x15WorkflowCreateRequest\x12)\n\x02id\x18\x01 \x01(\x0b\x32\x19.flyteidl.core.IdentifierR\x02id\x12\x30\n\x04spec\x18\x02 \x01(\x0b\x32\x1c.flyteidl.admin.WorkflowSpecR\x04spec\"\x18\n\x16WorkflowCreateResponse\"\x9d\x01\n\x08Workflow\x12)\n\x02id\x18\x01 \x01(\x0b\x32\x19.flyteidl.core.IdentifierR\x02id\x12\x39\n\x07\x63losure\x18\x02 \x01(\x0b\x32\x1f.flyteidl.admin.WorkflowClosureR\x07\x63losure\x12+\n\x11short_description\x18\x03 \x01(\tR\x10shortDescription\"\\\n\x0cWorkflowList\x12\x36\n\tworkflows\x18\x01 \x03(\x0b\x32\x18.flyteidl.admin.WorkflowR\tworkflows\x12\x14\n\x05token\x18\x02 \x01(\tR\x05token\"\xd6\x01\n\x0cWorkflowSpec\x12;\n\x08template\x18\x01 \x01(\x0b\x32\x1f.flyteidl.core.WorkflowTemplateR\x08template\x12\x44\n\rsub_workflows\x18\x02 \x03(\x0b\x32\x1f.flyteidl.core.WorkflowTemplateR\x0csubWorkflows\x12\x43\n\x0b\x64\x65scription\x18\x03 \x01(\x0b\x32!.flyteidl.admin.DescriptionEntityR\x0b\x64\x65scription\"\xa1\x01\n\x0fWorkflowClosure\x12S\n\x11\x63ompiled_workflow\x18\x01 \x01(\x0b\x32&.flyteidl.core.CompiledWorkflowClosureR\x10\x63ompiledWorkflow\x12\x39\n\ncreated_at\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tcreatedAt\"R\n%WorkflowErrorExistsDifferentStructure\x12)\n\x02id\x18\x01 \x01(\x0b\x32\x19.flyteidl.core.IdentifierR\x02id\"R\n%WorkflowErrorExistsIdenticalStructure\x12)\n\x02id\x18\x01 \x01(\x0b\x32\x19.flyteidl.core.IdentifierR\x02id\"\x95\x02\n\x1b\x43reateWorkflowFailureReason\x12u\n\x1a\x65xists_different_structure\x18\x01 \x01(\x0b\x32\x35.flyteidl.admin.WorkflowErrorExistsDifferentStructureH\x00R\x18\x65xistsDifferentStructure\x12u\n\x1a\x65xists_identical_structure\x18\x02 \x01(\x0b\x32\x35.flyteidl.admin.WorkflowErrorExistsIdenticalStructureH\x00R\x18\x65xistsIdenticalStructureB\x08\n\x06reason\"W\n\x1dGetDynamicNodeWorkflowRequest\x12\x36\n\x02id\x18\x01 \x01(\x0b\x32&.flyteidl.core.NodeExecutionIdentifierR\x02id\"r\n\x1b\x44ynamicNodeWorkflowResponse\x12S\n\x11\x63ompiled_workflow\x18\x01 \x01(\x0b\x32&.flyteidl.core.CompiledWorkflowClosureR\x10\x63ompiledWorkflowB\xb9\x01\n\x12\x63om.flyteidl.adminB\rWorkflowProtoP\x01Z;github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/admin\xa2\x02\x03\x46\x41X\xaa\x02\x0e\x46lyteidl.Admin\xca\x02\x0e\x46lyteidl\\Admin\xe2\x02\x1a\x46lyteidl\\Admin\\GPBMetadata\xea\x02\x0f\x46lyteidl::Adminb\x06proto3')
+DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1d\x66lyteidl/admin/workflow.proto\x12\x0e\x66lyteidl.admin\x1a\x1c\x66lyteidl/core/compiler.proto\x1a\x1e\x66lyteidl/core/identifier.proto\x1a\x1c\x66lyteidl/core/workflow.proto\x1a\'flyteidl/admin/description_entity.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"t\n\x15WorkflowCreateRequest\x12)\n\x02id\x18\x01 \x01(\x0b\x32\x19.flyteidl.core.IdentifierR\x02id\x12\x30\n\x04spec\x18\x02 \x01(\x0b\x32\x1c.flyteidl.admin.WorkflowSpecR\x04spec\"\x18\n\x16WorkflowCreateResponse\"\x9d\x01\n\x08Workflow\x12)\n\x02id\x18\x01 \x01(\x0b\x32\x19.flyteidl.core.IdentifierR\x02id\x12\x39\n\x07\x63losure\x18\x02 \x01(\x0b\x32\x1f.flyteidl.admin.WorkflowClosureR\x07\x63losure\x12+\n\x11short_description\x18\x03 \x01(\tR\x10shortDescription\"\\\n\x0cWorkflowList\x12\x36\n\tworkflows\x18\x01 \x03(\x0b\x32\x18.flyteidl.admin.WorkflowR\tworkflows\x12\x14\n\x05token\x18\x02 \x01(\tR\x05token\"\xd6\x01\n\x0cWorkflowSpec\x12;\n\x08template\x18\x01 \x01(\x0b\x32\x1f.flyteidl.core.WorkflowTemplateR\x08template\x12\x44\n\rsub_workflows\x18\x02 \x03(\x0b\x32\x1f.flyteidl.core.WorkflowTemplateR\x0csubWorkflows\x12\x43\n\x0b\x64\x65scription\x18\x03 \x01(\x0b\x32!.flyteidl.admin.DescriptionEntityR\x0b\x64\x65scription\"\xa1\x01\n\x0fWorkflowClosure\x12S\n\x11\x63ompiled_workflow\x18\x01 \x01(\x0b\x32&.flyteidl.core.CompiledWorkflowClosureR\x10\x63ompiledWorkflow\x12\x39\n\ncreated_at\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tcreatedAt\"R\n%WorkflowErrorExistsDifferentStructure\x12)\n\x02id\x18\x01 \x01(\x0b\x32\x19.flyteidl.core.IdentifierR\x02id\"R\n%WorkflowErrorExistsIdenticalStructure\x12)\n\x02id\x18\x01 \x01(\x0b\x32\x19.flyteidl.core.IdentifierR\x02id\"\x95\x02\n\x1b\x43reateWorkflowFailureReason\x12u\n\x1a\x65xists_different_structure\x18\x01 \x01(\x0b\x32\x35.flyteidl.admin.WorkflowErrorExistsDifferentStructureH\x00R\x18\x65xistsDifferentStructure\x12u\n\x1a\x65xists_identical_structure\x18\x02 \x01(\x0b\x32\x35.flyteidl.admin.WorkflowErrorExistsIdenticalStructureH\x00R\x18\x65xistsIdenticalStructureB\x08\n\x06reasonB\xb9\x01\n\x12\x63om.flyteidl.adminB\rWorkflowProtoP\x01Z;github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/admin\xa2\x02\x03\x46\x41X\xaa\x02\x0e\x46lyteidl.Admin\xca\x02\x0e\x46lyteidl\\Admin\xe2\x02\x1a\x46lyteidl\\Admin\\GPBMetadata\xea\x02\x0f\x46lyteidl::Adminb\x06proto3')
 
 _globals = globals()
 _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
@@ -45,8 +45,4 @@
   _globals['_WORKFLOWERROREXISTSIDENTICALSTRUCTURE']._serialized_end=1160
   _globals['_CREATEWORKFLOWFAILUREREASON']._serialized_start=1163
   _globals['_CREATEWORKFLOWFAILUREREASON']._serialized_end=1440
-  _globals['_GETDYNAMICNODEWORKFLOWREQUEST']._serialized_start=1442
-  _globals['_GETDYNAMICNODEWORKFLOWREQUEST']._serialized_end=1529
-  _globals['_DYNAMICNODEWORKFLOWRESPONSE']._serialized_start=1531
-  _globals['_DYNAMICNODEWORKFLOWRESPONSE']._serialized_end=1645
 # @@protoc_insertion_point(module_scope)
diff --git a/flyteidl/gen/pb_python/flyteidl/admin/workflow_pb2.pyi b/flyteidl/gen/pb_python/flyteidl/admin/workflow_pb2.pyi
index 6d8cdb6205..294d595855 100644
--- a/flyteidl/gen/pb_python/flyteidl/admin/workflow_pb2.pyi
+++ b/flyteidl/gen/pb_python/flyteidl/admin/workflow_pb2.pyi
@@ -77,15 +77,3 @@ class CreateWorkflowFailureReason(_message.Message):
     exists_different_structure: WorkflowErrorExistsDifferentStructure
     exists_identical_structure: WorkflowErrorExistsIdenticalStructure
     def __init__(self, exists_different_structure: _Optional[_Union[WorkflowErrorExistsDifferentStructure, _Mapping]] = ..., exists_identical_structure: _Optional[_Union[WorkflowErrorExistsIdenticalStructure, _Mapping]] = ...) -> None: ...
-
-class GetDynamicNodeWorkflowRequest(_message.Message):
-    __slots__ = ["id"]
-    ID_FIELD_NUMBER: _ClassVar[int]
-    id: _identifier_pb2.NodeExecutionIdentifier
-    def __init__(self, id: _Optional[_Union[_identifier_pb2.NodeExecutionIdentifier, _Mapping]] = ...) -> None: ...
-
-class DynamicNodeWorkflowResponse(_message.Message):
-    __slots__ = ["compiled_workflow"]
-    COMPILED_WORKFLOW_FIELD_NUMBER: _ClassVar[int]
-    compiled_workflow: _compiler_pb2.CompiledWorkflowClosure
-    def __init__(self, compiled_workflow: _Optional[_Union[_compiler_pb2.CompiledWorkflowClosure, _Mapping]] = ...) -> None: ...
diff --git a/flyteidl/gen/pb_python/flyteidl/service/admin_pb2_grpc.py b/flyteidl/gen/pb_python/flyteidl/service/admin_pb2_grpc.py
index deaa7e10eb..5bb1baac60 100644
--- a/flyteidl/gen/pb_python/flyteidl/service/admin_pb2_grpc.py
+++ b/flyteidl/gen/pb_python/flyteidl/service/admin_pb2_grpc.py
@@ -152,8 +152,8 @@ def __init__(self, channel):
                 )
         self.GetDynamicNodeWorkflow = channel.unary_unary(
                 '/flyteidl.service.AdminService/GetDynamicNodeWorkflow',
-                request_serializer=flyteidl_dot_admin_dot_workflow__pb2.GetDynamicNodeWorkflowRequest.SerializeToString,
-                response_deserializer=flyteidl_dot_admin_dot_workflow__pb2.DynamicNodeWorkflowResponse.FromString,
+                request_serializer=flyteidl_dot_admin_dot_node__execution__pb2.GetDynamicNodeWorkflowRequest.SerializeToString,
+                response_deserializer=flyteidl_dot_admin_dot_node__execution__pb2.DynamicNodeWorkflowResponse.FromString,
                 )
         self.ListNodeExecutions = channel.unary_unary(
                 '/flyteidl.service.AdminService/ListNodeExecutions',
@@ -815,8 +815,8 @@ def add_AdminServiceServicer_to_server(servicer, server):
             ),
             'GetDynamicNodeWorkflow': grpc.unary_unary_rpc_method_handler(
                     servicer.GetDynamicNodeWorkflow,
-                    request_deserializer=flyteidl_dot_admin_dot_workflow__pb2.GetDynamicNodeWorkflowRequest.FromString,
-                    response_serializer=flyteidl_dot_admin_dot_workflow__pb2.DynamicNodeWorkflowResponse.SerializeToString,
+                    request_deserializer=flyteidl_dot_admin_dot_node__execution__pb2.GetDynamicNodeWorkflowRequest.FromString,
+                    response_serializer=flyteidl_dot_admin_dot_node__execution__pb2.DynamicNodeWorkflowResponse.SerializeToString,
             ),
             'ListNodeExecutions': grpc.unary_unary_rpc_method_handler(
                     servicer.ListNodeExecutions,
@@ -1395,8 +1395,8 @@ def GetDynamicNodeWorkflow(request,
             timeout=None,
             metadata=None):
         return grpc.experimental.unary_unary(request, target, '/flyteidl.service.AdminService/GetDynamicNodeWorkflow',
-            flyteidl_dot_admin_dot_workflow__pb2.GetDynamicNodeWorkflowRequest.SerializeToString,
-            flyteidl_dot_admin_dot_workflow__pb2.DynamicNodeWorkflowResponse.FromString,
+            flyteidl_dot_admin_dot_node__execution__pb2.GetDynamicNodeWorkflowRequest.SerializeToString,
+            flyteidl_dot_admin_dot_node__execution__pb2.DynamicNodeWorkflowResponse.FromString,
             options, channel_credentials,
             insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
 
diff --git a/flyteidl/gen/pb_rust/flyteidl.admin.rs b/flyteidl/gen/pb_rust/flyteidl.admin.rs
index 280c578194..7159073a8e 100644
--- a/flyteidl/gen/pb_rust/flyteidl.admin.rs
+++ b/flyteidl/gen/pb_rust/flyteidl.admin.rs
@@ -2276,6 +2276,18 @@ pub struct NodeExecutionGetDataResponse {
     #[prost(message, optional, tag="17")]
     pub flyte_urls: ::core::option::Option<FlyteUrLs>,
 }
+#[allow(clippy::derive_partial_eq_without_eq)]
+#[derive(Clone, PartialEq, ::prost::Message)]
+pub struct GetDynamicNodeWorkflowRequest {
+    #[prost(message, optional, tag="1")]
+    pub id: ::core::option::Option<super::core::NodeExecutionIdentifier>,
+}
+#[allow(clippy::derive_partial_eq_without_eq)]
+#[derive(Clone, PartialEq, ::prost::Message)]
+pub struct DynamicNodeWorkflowResponse {
+    #[prost(message, optional, tag="1")]
+    pub compiled_workflow: ::core::option::Option<super::core::CompiledWorkflowClosure>,
+}
 /// Represents the Email object that is sent to a publisher/subscriber
 /// to forward the notification.
 /// Note: This is internal to Admin and doesn't need to be exposed to other components.
@@ -3068,18 +3080,6 @@ pub mod create_workflow_failure_reason {
         ExistsIdenticalStructure(super::WorkflowErrorExistsIdenticalStructure),
     }
 }
-#[allow(clippy::derive_partial_eq_without_eq)]
-#[derive(Clone, PartialEq, ::prost::Message)]
-pub struct GetDynamicNodeWorkflowRequest {
-    #[prost(message, optional, tag="1")]
-    pub id: ::core::option::Option<super::core::NodeExecutionIdentifier>,
-}
-#[allow(clippy::derive_partial_eq_without_eq)]
-#[derive(Clone, PartialEq, ::prost::Message)]
-pub struct DynamicNodeWorkflowResponse {
-    #[prost(message, optional, tag="1")]
-    pub compiled_workflow: ::core::option::Option<super::core::CompiledWorkflowClosure>,
-}
 /// Defines a set of custom matching attributes which defines resource defaults for a project, domain and workflow.
 /// For more info on matchable attributes, see :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration`
 #[allow(clippy::derive_partial_eq_without_eq)]
diff --git a/flyteidl/protos/flyteidl/admin/node_execution.proto b/flyteidl/protos/flyteidl/admin/node_execution.proto
index 9c80e22efe..411201ea45 100644
--- a/flyteidl/protos/flyteidl/admin/node_execution.proto
+++ b/flyteidl/protos/flyteidl/admin/node_execution.proto
@@ -235,3 +235,11 @@ message NodeExecutionGetDataResponse {
     FlyteURLs flyte_urls = 17;
 
 }
+
+message GetDynamicNodeWorkflowRequest {
+    core.NodeExecutionIdentifier id = 1;
+}
+
+message DynamicNodeWorkflowResponse {
+    core.CompiledWorkflowClosure compiled_workflow = 1;
+}
diff --git a/flyteidl/protos/flyteidl/admin/workflow.proto b/flyteidl/protos/flyteidl/admin/workflow.proto
index b8dae82885..d522d65b73 100644
--- a/flyteidl/protos/flyteidl/admin/workflow.proto
+++ b/flyteidl/protos/flyteidl/admin/workflow.proto
@@ -90,11 +90,3 @@ message CreateWorkflowFailureReason {
         WorkflowErrorExistsIdenticalStructure exists_identical_structure = 2;
     }
 }
-
-message GetDynamicNodeWorkflowRequest {
-    core.NodeExecutionIdentifier id = 1;
-}
-
-message DynamicNodeWorkflowResponse {
-    core.CompiledWorkflowClosure compiled_workflow = 1;
-}