This is an automated email from the ASF dual-hosted git repository. dimuthuupe pushed a commit to branch cybershuttle-staging in repository https://gitbox.apache.org/repos/asf/airavata.git
commit 38b64e7c38802c5b1ca9f99cdff6e27a4473e471 Author: yasith <[email protected]> AuthorDate: Thu Apr 3 08:14:55 2025 -0400 add kernel restart functionality to agent service and agent --- .../service/controllers/AgentController.java | 21 + .../service/handlers/AgentConnectionHandler.java | 53 ++ .../service/models/AgentKernelRestartAck.java | 4 + .../service/models/AgentKernelRestartRequest.java | 23 + .../service/models/AgentKernelRestartResponse.java | 32 ++ modules/agent-framework/airavata-agent/agent.go | 127 +++-- .../protos/agent-communication.pb.go | 626 ++++++++++++++------- .../proto/agent-communication.proto | 20 +- 8 files changed, 646 insertions(+), 260 deletions(-) diff --git a/modules/agent-framework/agent-service/src/main/java/org/apache/airavata/agent/connection/service/controllers/AgentController.java b/modules/agent-framework/agent-service/src/main/java/org/apache/airavata/agent/connection/service/controllers/AgentController.java index 8cdc790b48..f223264c92 100644 --- a/modules/agent-framework/agent-service/src/main/java/org/apache/airavata/agent/connection/service/controllers/AgentController.java +++ b/modules/agent-framework/agent-service/src/main/java/org/apache/airavata/agent/connection/service/controllers/AgentController.java @@ -13,6 +13,9 @@ import org.apache.airavata.agent.connection.service.models.AgentInfoResponse; import org.apache.airavata.agent.connection.service.models.AgentJupyterExecutionAck; import org.apache.airavata.agent.connection.service.models.AgentJupyterExecutionRequest; import org.apache.airavata.agent.connection.service.models.AgentJupyterExecutionResponse; +import org.apache.airavata.agent.connection.service.models.AgentKernelRestartAck; +import org.apache.airavata.agent.connection.service.models.AgentKernelRestartRequest; +import org.apache.airavata.agent.connection.service.models.AgentKernelRestartResponse; import org.apache.airavata.agent.connection.service.models.AgentPythonExecutionAck; import org.apache.airavata.agent.connection.service.models.AgentPythonExecutionRequest; import org.apache.airavata.agent.connection.service.models.AgentPythonExecutionResponse; @@ -67,6 +70,24 @@ public class AgentController { return ResponseEntity.accepted().body(agentConnectionHandler.getEnvSetupResponse(executionId)); } + @PostMapping("/setup/restart") + public ResponseEntity<AgentKernelRestartAck> runKernelRestartOnAgent(@Valid @RequestBody AgentKernelRestartRequest kernelRestartRequest) { + logger.info("Received kernel restart request to run on agent {}", kernelRestartRequest.getAgentId()); + if (agentConnectionHandler.isAgentUp(kernelRestartRequest.getAgentId()).isAgentUp()) { + return ResponseEntity.accepted().body(agentConnectionHandler.runKernelRestartOnAgent(kernelRestartRequest)); + } else { + logger.warn("No agent is available to run on agent {}", kernelRestartRequest.getAgentId()); + AgentKernelRestartAck ack = new AgentKernelRestartAck(); + ack.setError("Agent not found"); + return ResponseEntity.accepted().body(ack); + } + } + + @GetMapping("/setup/restart/{executionId}") + public ResponseEntity<AgentKernelRestartResponse> getKernelRestartResponse(@PathVariable("executionId") String executionId) { + return ResponseEntity.accepted().body(agentConnectionHandler.getKernelRestartResponse(executionId)); + } + @PostMapping("/execute/shell") public ResponseEntity<AgentCommandExecutionAck> runCommandOnAgent(@Valid @RequestBody AgentCommandExecutionRequest commandRequest) { logger.info("Received command request to run on agent {}", commandRequest.getAgentId()); diff --git a/modules/agent-framework/agent-service/src/main/java/org/apache/airavata/agent/connection/service/handlers/AgentConnectionHandler.java b/modules/agent-framework/agent-service/src/main/java/org/apache/airavata/agent/connection/service/handlers/AgentConnectionHandler.java index 9ce52d4fe7..b809cf4db4 100644 --- a/modules/agent-framework/agent-service/src/main/java/org/apache/airavata/agent/connection/service/handlers/AgentConnectionHandler.java +++ b/modules/agent-framework/agent-service/src/main/java/org/apache/airavata/agent/connection/service/handlers/AgentConnectionHandler.java @@ -1,5 +1,6 @@ package org.apache.airavata.agent.connection.service.handlers; +import java.awt.image.Kernel; import java.util.Map; import java.util.Optional; import java.util.UUID; @@ -12,6 +13,8 @@ import org.apache.airavata.agent.CommandExecutionRequest; import org.apache.airavata.agent.CommandExecutionResponse; import org.apache.airavata.agent.EnvSetupResponse; import org.apache.airavata.agent.JupyterExecutionResponse; +import org.apache.airavata.agent.KernelRestartRequest; +import org.apache.airavata.agent.KernelRestartResponse; import org.apache.airavata.agent.PythonExecutionRequest; import org.apache.airavata.agent.PythonExecutionResponse; import org.apache.airavata.agent.ServerMessage; @@ -26,6 +29,9 @@ import org.apache.airavata.agent.connection.service.models.AgentInfoResponse; import org.apache.airavata.agent.connection.service.models.AgentJupyterExecutionAck; import org.apache.airavata.agent.connection.service.models.AgentJupyterExecutionRequest; import org.apache.airavata.agent.connection.service.models.AgentJupyterExecutionResponse; +import org.apache.airavata.agent.connection.service.models.AgentKernelRestartAck; +import org.apache.airavata.agent.connection.service.models.AgentKernelRestartRequest; +import org.apache.airavata.agent.connection.service.models.AgentKernelRestartResponse; import org.apache.airavata.agent.connection.service.models.AgentPythonExecutionAck; import org.apache.airavata.agent.connection.service.models.AgentPythonExecutionRequest; import org.apache.airavata.agent.connection.service.models.AgentPythonExecutionResponse; @@ -52,6 +58,7 @@ public class AgentConnectionHandler extends AgentCommunicationServiceGrpc.AgentC private final Map<String, EnvSetupResponse> ENV_SETUP_RESPONSE_CACHE = new ConcurrentHashMap<>(); private final Map<String, CommandExecutionResponse> COMMAND_EXECUTION_RESPONSE_CACHE = new ConcurrentHashMap<>(); private final Map<String, JupyterExecutionResponse> JUPYTER_EXECUTION_RESPONSE_CACHE = new ConcurrentHashMap<>(); + private final Map<String, KernelRestartResponse> KERNEL_RESTART_RESPONSE_CACHE = new ConcurrentHashMap<>(); private final Map<String, PythonExecutionResponse> PYTHON_EXECUTION_RESPONSE_CACHE = new ConcurrentHashMap<>(); // response handling @@ -103,6 +110,19 @@ public class AgentConnectionHandler extends AgentCommunicationServiceGrpc.AgentC return executionResponse; } + public AgentKernelRestartResponse getKernelRestartResponse(String executionId) { + AgentKernelRestartResponse kernelRestartResponse = new AgentKernelRestartResponse(); + if (KERNEL_RESTART_RESPONSE_CACHE.containsKey(executionId)) { + kernelRestartResponse.setStatus(KERNEL_RESTART_RESPONSE_CACHE.get(executionId).getStatus()); + kernelRestartResponse.setExecutionId(executionId); + kernelRestartResponse.setRestarted(true); + KERNEL_RESTART_RESPONSE_CACHE.remove(executionId); + } else { + kernelRestartResponse.setRestarted(false); + } + return kernelRestartResponse; + } + public AgentPythonExecutionResponse getPythonExecutionResponse(String executionId) { AgentPythonExecutionResponse runResponse = new AgentPythonExecutionResponse(); if (PYTHON_EXECUTION_RESPONSE_CACHE.containsKey(executionId)) { @@ -269,6 +289,31 @@ public class AgentConnectionHandler extends AgentCommunicationServiceGrpc.AgentC return ack; } + public AgentKernelRestartAck runKernelRestartOnAgent(AgentKernelRestartRequest kernelRestartRequest) { + String executionId = UUID.randomUUID().toString(); + AgentKernelRestartAck ack = new AgentKernelRestartAck(); + ack.setExecutionId(executionId); + Optional<StreamObserver<ServerMessage>> agentStreamObserver = getAgentStreamObserver(kernelRestartRequest.getAgentId()); + if (agentStreamObserver.isPresent()) { + try { + logger.info("restarting kernel on env {}...", kernelRestartRequest.getEnvName()); + agentStreamObserver.get().onNext(ServerMessage.newBuilder().setKernelRestartRequest( + KernelRestartRequest.newBuilder() + .setExecutionId(executionId) + .setEnvName(kernelRestartRequest.getEnvName()) + .build() + ).build()); + } catch (Exception e) { + logger.error("{} Failed to restart kernel on env {}!", executionId, kernelRestartRequest.getEnvName(), e); + ack.setError(e.getMessage()); + } + } else { + logger.warn("No agent found to run the kernel restart on agent {}", kernelRestartRequest.getAgentId()); + ack.setError("No agent found to run the kernel restart on agent " + kernelRestartRequest.getAgentId()); + } + return ack; + } + // internal handlers private void handleAgentPing(AgentPing agentPing, String streamId) { logger.info("Received agent ping for agent id {}", agentPing.getAgentId()); @@ -290,6 +335,11 @@ public class AgentConnectionHandler extends AgentCommunicationServiceGrpc.AgentC JUPYTER_EXECUTION_RESPONSE_CACHE.put(executionResponse.getExecutionId(), executionResponse); } + private void handleKernelRestartResponse(KernelRestartResponse kernelRestartResponse) { + logger.info("Received kernel restart response for execution id {}", kernelRestartResponse.getExecutionId()); + KERNEL_RESTART_RESPONSE_CACHE.put(kernelRestartResponse.getExecutionId(), kernelRestartResponse); + } + private void handlePythonExecutionResponse(PythonExecutionResponse executionResponse) { logger.info("Received python execution response for execution id {}", executionResponse.getExecutionId()); PYTHON_EXECUTION_RESPONSE_CACHE.put(executionResponse.getExecutionId(), executionResponse); @@ -327,6 +377,9 @@ public class AgentConnectionHandler extends AgentCommunicationServiceGrpc.AgentC case JUPYTEREXECUTIONRESPONSE -> { handleJupyterExecutionResponse(request.getJupyterExecutionResponse()); } + case KERNELRESTARTRESPONSE -> { + handleKernelRestartResponse(request.getKernelRestartResponse()); + } case PYTHONEXECUTIONRESPONSE -> { handlePythonExecutionResponse(request.getPythonExecutionResponse()); } diff --git a/modules/agent-framework/agent-service/src/main/java/org/apache/airavata/agent/connection/service/models/AgentKernelRestartAck.java b/modules/agent-framework/agent-service/src/main/java/org/apache/airavata/agent/connection/service/models/AgentKernelRestartAck.java new file mode 100644 index 0000000000..0854e068b7 --- /dev/null +++ b/modules/agent-framework/agent-service/src/main/java/org/apache/airavata/agent/connection/service/models/AgentKernelRestartAck.java @@ -0,0 +1,4 @@ +package org.apache.airavata.agent.connection.service.models; + +public class AgentKernelRestartAck extends AgentCommandExecutionAck { +} diff --git a/modules/agent-framework/agent-service/src/main/java/org/apache/airavata/agent/connection/service/models/AgentKernelRestartRequest.java b/modules/agent-framework/agent-service/src/main/java/org/apache/airavata/agent/connection/service/models/AgentKernelRestartRequest.java new file mode 100644 index 0000000000..aff821df7e --- /dev/null +++ b/modules/agent-framework/agent-service/src/main/java/org/apache/airavata/agent/connection/service/models/AgentKernelRestartRequest.java @@ -0,0 +1,23 @@ +package org.apache.airavata.agent.connection.service.models; + +public class AgentKernelRestartRequest { + + private String agentId; + private String envName; + + public String getAgentId() { + return agentId; + } + + public void setAgentId(String agentId) { + this.agentId = agentId; + } + + public String getEnvName() { + return envName; + } + + public void setEnvName(String envName) { + this.envName = envName; + } +} diff --git a/modules/agent-framework/agent-service/src/main/java/org/apache/airavata/agent/connection/service/models/AgentKernelRestartResponse.java b/modules/agent-framework/agent-service/src/main/java/org/apache/airavata/agent/connection/service/models/AgentKernelRestartResponse.java new file mode 100644 index 0000000000..4a2e632076 --- /dev/null +++ b/modules/agent-framework/agent-service/src/main/java/org/apache/airavata/agent/connection/service/models/AgentKernelRestartResponse.java @@ -0,0 +1,32 @@ +package org.apache.airavata.agent.connection.service.models; + +public class AgentKernelRestartResponse { + + private String executionId; + private String status; + private boolean restarted; + + public String getExecutionId() { + return executionId; + } + + public void setExecutionId(String executionId) { + this.executionId = executionId; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public boolean getRestarted() { + return restarted; + } + + public void setRestarted(boolean restarted) { + this.restarted = restarted; + } +} diff --git a/modules/agent-framework/airavata-agent/agent.go b/modules/agent-framework/airavata-agent/agent.go index 3b8000aea9..1519d92454 100644 --- a/modules/agent-framework/airavata-agent/agent.go +++ b/modules/agent-framework/airavata-agent/agent.go @@ -15,6 +15,7 @@ import ( "os" "os/exec" "strings" + "time" "golang.org/x/crypto/ssh" "google.golang.org/grpc" @@ -23,11 +24,13 @@ import ( type Stream = grpc.BidiStreamingClient[protos.AgentMessage, protos.ServerMessage] +var pidMap = make(map[string]int) + func main() { // get CLI args - serverUrl := os.Args[0] - agentId := os.Args[1] + serverUrl := os.Args[1] + agentId := os.Args[2] conn, err := grpc.NewClient(serverUrl, grpc.WithTransportCredentials(insecure.NewCredentials())) if err != nil { @@ -115,6 +118,12 @@ func startInterceptor(stream Stream, grpcStreamChannel chan struct{}) { code := x.JupyterExecutionRequest.Code go executeJupyter(stream, executionId, envName, code) + case *protos.ServerMessage_KernelRestartRequest: + log.Printf("[agent.go] Recived a kernel restart request\n") + executionId := x.KernelRestartRequest.ExecutionId + envName = x.KernelRestartRequest.EnvName + go restartKernel(stream, executionId, envName) + case *protos.ServerMessage_TunnelCreationRequest: log.Printf("[agent.go] Received a tunnel creation request\n") executionId := x.TunnelCreationRequest.ExecutionId @@ -133,32 +142,42 @@ func createEnv(stream Stream, executionId string, envName string, envLibs []stri log.Printf("[agent.go] createEnv() Env name %s\n", envName) log.Printf("[agent.go] createEnv() Env libs %s\n", envLibs) log.Printf("[agent.go] createEnv() Env pip %s\n", envPip) + // cleanup previous kernel if exists + if pid, exists := pidMap[envName]; exists { + cmd := exec.Command("kill", fmt.Sprintf("%d", pid)) + if err := cmd.Run(); err != nil { + log.Printf("[agent.go] createEnv() Failed to kill existing process with PID %d: %v\n", pid, err) + } else { + log.Printf("[agent.go] createEnv() Successfully killed existing process with PID %d\n", pid) + } + delete(pidMap, envName) + } // create environment if envName != "base" { createEnvCmd := exec.Command("micromamba", "create", "-n", envName, "--yes", "--quiet") - if err := createEnvCmd.Wait(); err != nil { + if err := createEnvCmd.Run(); err != nil { log.Printf("[agent.go] createEnv() Error creating environment: %v\n", err) return } log.Printf("[agent.go] createEnv() Environment created: %s\n", envName) } - - if len(envLibs) > 0 { - installDepsCmd := exec.Command("micromamba", "install", "-n", envName, "--yes", "--quiet", strings.Join(envLibs, " ")) - if err := installDepsCmd.Wait(); err != nil { - log.Printf("[agent.go] createEnv() Error waiting for command: %v\n", err) - return - } + envLibs = append(envLibs, "python<3.12", "pip", "ipykernel", "git", "flask", "jupyter_client") + installDepsCmd := exec.Command("micromamba", "install", "-n", envName, "--yes") + installDepsCmd.Args = append(installDepsCmd.Args, envLibs...) + if err := installDepsCmd.Run(); err != nil { + log.Printf("[agent.go] createEnv() Error waiting for command: %v\n", err) + return } if len(envPip) > 0 { - installPipCmd := exec.Command("micromamba", "run", "-n", envName, "pip", "install", strings.Join(envLibs, " ")) - if err := installPipCmd.Wait(); err != nil { + installPipCmd := exec.Command("micromamba", "run", "-n", envName, "pip", "install") + installPipCmd.Args = append(installPipCmd.Args, envPip...) + if err := installPipCmd.Run(); err != nil { log.Printf("[agent.go] createEnv() Error waiting for command: %v\n", err) return } } - // start python server - go startPythonServer(envName) + // start kernel in new environment + pidMap[envName] = startJupyterKernel(envName) msg := &protos.AgentMessage{ Message: &protos.AgentMessage_EnvSetupResponse{ EnvSetupResponse: &protos.EnvSetupResponse{ @@ -174,42 +193,44 @@ func createEnv(stream Stream, executionId string, envName string, envLibs []stri } } -func startPythonServer(envName string) { - log.Printf("[agent.go] startPythonServer() Starting python server in env: %s...\n", envName) +func startJupyterKernel(envName string) int { + log.Printf("[agent.go] startJupyterKernel() Starting python server in env: %s...\n", envName) // Run command cmd := exec.Command("micromamba", "run", "-n", envName, "python", "/opt/jupyter/kernel.py") stdout, err := cmd.StdoutPipe() if err != nil { - log.Printf("[agent.go] startPythonServer() Error creating StdoutPipe for cmd: %v\n", err) - return + log.Printf("[agent.go] startJupyterKernel() Error creating StdoutPipe for cmd: %v\n", err) + return 0 } stderr, err := cmd.StderrPipe() if err != nil { - log.Printf("[agent.go] startPythonServer() Error creating StderrPipe for cmd: %v\n", err) - return + log.Printf("[agent.go] startJupyterKernel() Error creating StderrPipe for cmd: %v\n", err) + return 0 } if err := cmd.Start(); err != nil { - log.Printf("[agent.go] startPythonServer() Error during start: %v\n", err) - return + log.Printf("[agent.go] startJupyterKernel() Error during start: %v\n", err) + return 0 } - log.Printf("[agent.go] startPythonServer() Started python server.\n") + log.Printf("[agent.go] startJupyterKernel() Started python server.\n") go func() { stdoutScanner := bufio.NewScanner(stdout) for stdoutScanner.Scan() { - log.Printf("[agent.go] startPythonServer() stdout: %s\n", stdoutScanner.Text()) + log.Printf("[agent.go] startJupyterKernel() stdout: %s\n", stdoutScanner.Text()) } }() go func() { stderrScanner := bufio.NewScanner(stderr) for stderrScanner.Scan() { - log.Printf("[agent.go] startPythonServer() stderr: %s\n", stderrScanner.Text()) + log.Printf("[agent.go] startJupyterKernel() stderr: %s\n", stderrScanner.Text()) } }() - if err := cmd.Wait(); err != nil { - log.Printf("[agent.go] startPythonServer() Error waiting for command: %v\n", err) - return - } - log.Printf("[agent.go] startPythonServer() Command finished.\n") + go func() { + if err := cmd.Wait(); err != nil { + log.Printf("[agent.go] startJupyterKernel() Error waiting for command: %v\n", err) + } + }() + log.Printf("[agent.go] startJupyterKernel() Command finished.\n") + return cmd.Process.Pid } func executePython(stream Stream, executionId string, envName string, workingDir string, code string) { @@ -218,16 +239,13 @@ func executePython(stream Stream, executionId string, envName string, workingDir log.Printf("[agent.go] executePython() Working Dir %s\n", workingDir) log.Printf("[agent.go] executePython() Code %s\n", code) // Run command - cmd := exec.Command("micromamba", "run", "-n", envName, "python", "-c") + cmd := exec.Command("micromamba", "run", "-n", envName, "python", "-c", code) cmd.Dir = workingDir - cmd.Stdin = strings.NewReader(code) output, err := cmd.CombinedOutput() - var responseString string + responseString := string(output) if err != nil { - responseString = fmt.Sprintf("Error: %v", err) log.Printf("[agent.go] executePython() error: %v\n", err) } else { - responseString = string(output) log.Printf("[agent.go] executePython() completed: %s\n", responseString) } msg := &protos.AgentMessage{ @@ -250,15 +268,13 @@ func executeShell(stream Stream, executionId string, envName string, workingDir log.Printf("[agent.go] executeShell() Env name %s\n", envName) log.Printf("[agent.go] executeShell() Exec args %s\n", execArgs) // Run command - cmd := exec.Command("micromamba", "run", "-n", envName, strings.Join(execArgs, " ")) + cmd := exec.Command("micromamba", "run", "-n", envName, "bash", "-c", strings.Join(execArgs, " ")) cmd.Dir = workingDir output, err := cmd.CombinedOutput() - var responseString string + responseString := string(output) if err != nil { - responseString = fmt.Sprintf("Error: %v", err) log.Printf("[agent.go] executeShell() %s failed: %v\n", executionId, err) } else { - responseString = string(output) log.Printf("[agent.go] executeShell() %s done: %s\n", executionId, responseString) } msg := &protos.AgentMessage{ @@ -277,6 +293,11 @@ func executeShell(stream Stream, executionId string, envName string, workingDir } func executeJupyter(stream Stream, executionId string, envName string, code string) { + if _, exists := pidMap[envName]; !exists { + log.Printf("[agent.go] executeJupyter() Starting python server in env: %s...\n", envName) + pidMap[envName] = startJupyterKernel(envName) + time.Sleep(5 * time.Second) + } log.Printf("[agent.go] executeJupyter() Execution ID: %s, Env: %s, Code: %s\n", executionId, envName, code) unixSock := os.Getenv("KERNEL_SOCK") client := &http.Client{ @@ -351,6 +372,34 @@ func executeJupyter(stream Stream, executionId string, envName string, code stri sendResponse(jupyterResponse, nil) } +func restartKernel(stream Stream, executionId string, envName string) { + log.Printf("[agent.go] restartKernel() Execution id %s\n", executionId) + log.Printf("[agent.go] restartKernel() Env name %s\n", envName) + if pid, exists := pidMap[envName]; exists { + cmd := exec.Command("kill", fmt.Sprintf("%d", pid)) + if err := cmd.Run(); err != nil { + log.Printf("[agent.go] restartKernel() Failed to kill existing process with PID %d: %v\n", pid, err) + } else { + log.Printf("[agent.go] restartKernel() Successfully killed existing process with PID %d\n", pid) + } + delete(pidMap, envName) + } + pidMap[envName] = startJupyterKernel(envName) + msg := &protos.AgentMessage{ + Message: &protos.AgentMessage_KernelRestartResponse{ + KernelRestartResponse: &protos.KernelRestartResponse{ + ExecutionId: executionId, + Status: "OK", + }, + }, + } + if err := stream.Send(msg); err != nil { + log.Printf("[agent.go] restartKernel() failed to send result to server: %v\n", err) + } else { + log.Printf("[agent.go] restartKernel() sent result to server\n") + } +} + func openRemoteTunnel(stream Stream, executionId string, destHost string, destPort string, localPort string, sshUser string, sshKeyFile string) { log.Printf("[agent.go] openRemoteTunnel() rhost: %s, rport: %s, lport: %s, user: %s, keyfile: %s\n", destHost, destPort, localPort, sshUser, sshKeyFile) key, err := os.ReadFile(sshKeyFile) diff --git a/modules/agent-framework/airavata-agent/protos/agent-communication.pb.go b/modules/agent-framework/airavata-agent/protos/agent-communication.pb.go index f602f05030..0e3aa9f7cc 100644 --- a/modules/agent-framework/airavata-agent/protos/agent-communication.pb.go +++ b/modules/agent-framework/airavata-agent/protos/agent-communication.pb.go @@ -878,6 +878,117 @@ func (x *JupyterExecutionResponse) GetResponseString() string { return "" } +// server requesting the agent to restart a jupyter kernel +type KernelRestartRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ExecutionId string `protobuf:"bytes,1,opt,name=executionId,proto3" json:"executionId,omitempty"` + EnvName string `protobuf:"bytes,2,opt,name=envName,proto3" json:"envName,omitempty"` +} + +func (x *KernelRestartRequest) Reset() { + *x = KernelRestartRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_agent_communication_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *KernelRestartRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*KernelRestartRequest) ProtoMessage() {} + +func (x *KernelRestartRequest) ProtoReflect() protoreflect.Message { + mi := &file_agent_communication_proto_msgTypes[14] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use KernelRestartRequest.ProtoReflect.Descriptor instead. +func (*KernelRestartRequest) Descriptor() ([]byte, []int) { + return file_agent_communication_proto_rawDescGZIP(), []int{14} +} + +func (x *KernelRestartRequest) GetExecutionId() string { + if x != nil { + return x.ExecutionId + } + return "" +} + +func (x *KernelRestartRequest) GetEnvName() string { + if x != nil { + return x.EnvName + } + return "" +} + +type KernelRestartResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ExecutionId string `protobuf:"bytes,1,opt,name=executionId,proto3" json:"executionId,omitempty"` + Status string `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"` +} + +func (x *KernelRestartResponse) Reset() { + *x = KernelRestartResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_agent_communication_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *KernelRestartResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*KernelRestartResponse) ProtoMessage() {} + +func (x *KernelRestartResponse) ProtoReflect() protoreflect.Message { + mi := &file_agent_communication_proto_msgTypes[15] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use KernelRestartResponse.ProtoReflect.Descriptor instead. +func (*KernelRestartResponse) Descriptor() ([]byte, []int) { + return file_agent_communication_proto_rawDescGZIP(), []int{15} +} + +func (x *KernelRestartResponse) GetExecutionId() string { + if x != nil { + return x.ExecutionId + } + return "" +} + +func (x *KernelRestartResponse) GetStatus() string { + if x != nil { + return x.Status + } + return "" +} + // server requesting the agent to create a ssh tunnel type TunnelCreationRequest struct { state protoimpl.MessageState @@ -896,7 +1007,7 @@ type TunnelCreationRequest struct { func (x *TunnelCreationRequest) Reset() { *x = TunnelCreationRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_communication_proto_msgTypes[14] + mi := &file_agent_communication_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -909,7 +1020,7 @@ func (x *TunnelCreationRequest) String() string { func (*TunnelCreationRequest) ProtoMessage() {} func (x *TunnelCreationRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_communication_proto_msgTypes[14] + mi := &file_agent_communication_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -922,7 +1033,7 @@ func (x *TunnelCreationRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use TunnelCreationRequest.ProtoReflect.Descriptor instead. func (*TunnelCreationRequest) Descriptor() ([]byte, []int) { - return file_agent_communication_proto_rawDescGZIP(), []int{14} + return file_agent_communication_proto_rawDescGZIP(), []int{16} } func (x *TunnelCreationRequest) GetExecutionId() string { @@ -986,7 +1097,7 @@ type TunnelCreationResponse struct { func (x *TunnelCreationResponse) Reset() { *x = TunnelCreationResponse{} if protoimpl.UnsafeEnabled { - mi := &file_agent_communication_proto_msgTypes[15] + mi := &file_agent_communication_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -999,7 +1110,7 @@ func (x *TunnelCreationResponse) String() string { func (*TunnelCreationResponse) ProtoMessage() {} func (x *TunnelCreationResponse) ProtoReflect() protoreflect.Message { - mi := &file_agent_communication_proto_msgTypes[15] + mi := &file_agent_communication_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1012,7 +1123,7 @@ func (x *TunnelCreationResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use TunnelCreationResponse.ProtoReflect.Descriptor instead. func (*TunnelCreationResponse) Descriptor() ([]byte, []int) { - return file_agent_communication_proto_rawDescGZIP(), []int{15} + return file_agent_communication_proto_rawDescGZIP(), []int{17} } func (x *TunnelCreationResponse) GetExecutionId() string { @@ -1043,7 +1154,7 @@ type TunnelTerminationRequest struct { func (x *TunnelTerminationRequest) Reset() { *x = TunnelTerminationRequest{} if protoimpl.UnsafeEnabled { - mi := &file_agent_communication_proto_msgTypes[16] + mi := &file_agent_communication_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1056,7 +1167,7 @@ func (x *TunnelTerminationRequest) String() string { func (*TunnelTerminationRequest) ProtoMessage() {} func (x *TunnelTerminationRequest) ProtoReflect() protoreflect.Message { - mi := &file_agent_communication_proto_msgTypes[16] + mi := &file_agent_communication_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1069,7 +1180,7 @@ func (x *TunnelTerminationRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use TunnelTerminationRequest.ProtoReflect.Descriptor instead. func (*TunnelTerminationRequest) Descriptor() ([]byte, []int) { - return file_agent_communication_proto_rawDescGZIP(), []int{16} + return file_agent_communication_proto_rawDescGZIP(), []int{18} } func (x *TunnelTerminationRequest) GetDestinationHost() string { @@ -1105,7 +1216,7 @@ type TunnelTerminationResponse struct { func (x *TunnelTerminationResponse) Reset() { *x = TunnelTerminationResponse{} if protoimpl.UnsafeEnabled { - mi := &file_agent_communication_proto_msgTypes[17] + mi := &file_agent_communication_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1118,7 +1229,7 @@ func (x *TunnelTerminationResponse) String() string { func (*TunnelTerminationResponse) ProtoMessage() {} func (x *TunnelTerminationResponse) ProtoReflect() protoreflect.Message { - mi := &file_agent_communication_proto_msgTypes[17] + mi := &file_agent_communication_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1131,7 +1242,7 @@ func (x *TunnelTerminationResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use TunnelTerminationResponse.ProtoReflect.Descriptor instead. func (*TunnelTerminationResponse) Descriptor() ([]byte, []int) { - return file_agent_communication_proto_rawDescGZIP(), []int{17} + return file_agent_communication_proto_rawDescGZIP(), []int{19} } func (x *TunnelTerminationResponse) GetExecutionId() string { @@ -1162,6 +1273,7 @@ type AgentMessage struct { // *AgentMessage_CommandExecutionResponse // *AgentMessage_PythonExecutionResponse // *AgentMessage_JupyterExecutionResponse + // *AgentMessage_KernelRestartResponse // *AgentMessage_TunnelCreationResponse // *AgentMessage_TunnelTerminationResponse Message isAgentMessage_Message `protobuf_oneof:"message"` @@ -1170,7 +1282,7 @@ type AgentMessage struct { func (x *AgentMessage) Reset() { *x = AgentMessage{} if protoimpl.UnsafeEnabled { - mi := &file_agent_communication_proto_msgTypes[18] + mi := &file_agent_communication_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1183,7 +1295,7 @@ func (x *AgentMessage) String() string { func (*AgentMessage) ProtoMessage() {} func (x *AgentMessage) ProtoReflect() protoreflect.Message { - mi := &file_agent_communication_proto_msgTypes[18] + mi := &file_agent_communication_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1196,7 +1308,7 @@ func (x *AgentMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use AgentMessage.ProtoReflect.Descriptor instead. func (*AgentMessage) Descriptor() ([]byte, []int) { - return file_agent_communication_proto_rawDescGZIP(), []int{18} + return file_agent_communication_proto_rawDescGZIP(), []int{20} } func (m *AgentMessage) GetMessage() isAgentMessage_Message { @@ -1255,6 +1367,13 @@ func (x *AgentMessage) GetJupyterExecutionResponse() *JupyterExecutionResponse { return nil } +func (x *AgentMessage) GetKernelRestartResponse() *KernelRestartResponse { + if x, ok := x.GetMessage().(*AgentMessage_KernelRestartResponse); ok { + return x.KernelRestartResponse + } + return nil +} + func (x *AgentMessage) GetTunnelCreationResponse() *TunnelCreationResponse { if x, ok := x.GetMessage().(*AgentMessage_TunnelCreationResponse); ok { return x.TunnelCreationResponse @@ -1301,12 +1420,16 @@ type AgentMessage_JupyterExecutionResponse struct { JupyterExecutionResponse *JupyterExecutionResponse `protobuf:"bytes,7,opt,name=jupyterExecutionResponse,proto3,oneof"` } +type AgentMessage_KernelRestartResponse struct { + KernelRestartResponse *KernelRestartResponse `protobuf:"bytes,8,opt,name=kernelRestartResponse,proto3,oneof"` +} + type AgentMessage_TunnelCreationResponse struct { - TunnelCreationResponse *TunnelCreationResponse `protobuf:"bytes,8,opt,name=tunnelCreationResponse,proto3,oneof"` + TunnelCreationResponse *TunnelCreationResponse `protobuf:"bytes,9,opt,name=tunnelCreationResponse,proto3,oneof"` } type AgentMessage_TunnelTerminationResponse struct { - TunnelTerminationResponse *TunnelTerminationResponse `protobuf:"bytes,9,opt,name=tunnelTerminationResponse,proto3,oneof"` + TunnelTerminationResponse *TunnelTerminationResponse `protobuf:"bytes,10,opt,name=tunnelTerminationResponse,proto3,oneof"` } func (*AgentMessage_AgentPing) isAgentMessage_Message() {} @@ -1323,6 +1446,8 @@ func (*AgentMessage_PythonExecutionResponse) isAgentMessage_Message() {} func (*AgentMessage_JupyterExecutionResponse) isAgentMessage_Message() {} +func (*AgentMessage_KernelRestartResponse) isAgentMessage_Message() {} + func (*AgentMessage_TunnelCreationResponse) isAgentMessage_Message() {} func (*AgentMessage_TunnelTerminationResponse) isAgentMessage_Message() {} @@ -1341,6 +1466,7 @@ type ServerMessage struct { // *ServerMessage_CommandExecutionRequest // *ServerMessage_PythonExecutionRequest // *ServerMessage_JupyterExecutionRequest + // *ServerMessage_KernelRestartRequest // *ServerMessage_TunnelCreationRequest // *ServerMessage_TunnelTerminationRequest Message isServerMessage_Message `protobuf_oneof:"message"` @@ -1349,7 +1475,7 @@ type ServerMessage struct { func (x *ServerMessage) Reset() { *x = ServerMessage{} if protoimpl.UnsafeEnabled { - mi := &file_agent_communication_proto_msgTypes[19] + mi := &file_agent_communication_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1362,7 +1488,7 @@ func (x *ServerMessage) String() string { func (*ServerMessage) ProtoMessage() {} func (x *ServerMessage) ProtoReflect() protoreflect.Message { - mi := &file_agent_communication_proto_msgTypes[19] + mi := &file_agent_communication_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1375,7 +1501,7 @@ func (x *ServerMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use ServerMessage.ProtoReflect.Descriptor instead. func (*ServerMessage) Descriptor() ([]byte, []int) { - return file_agent_communication_proto_rawDescGZIP(), []int{19} + return file_agent_communication_proto_rawDescGZIP(), []int{21} } func (m *ServerMessage) GetMessage() isServerMessage_Message { @@ -1434,6 +1560,13 @@ func (x *ServerMessage) GetJupyterExecutionRequest() *JupyterExecutionRequest { return nil } +func (x *ServerMessage) GetKernelRestartRequest() *KernelRestartRequest { + if x, ok := x.GetMessage().(*ServerMessage_KernelRestartRequest); ok { + return x.KernelRestartRequest + } + return nil +} + func (x *ServerMessage) GetTunnelCreationRequest() *TunnelCreationRequest { if x, ok := x.GetMessage().(*ServerMessage_TunnelCreationRequest); ok { return x.TunnelCreationRequest @@ -1480,12 +1613,16 @@ type ServerMessage_JupyterExecutionRequest struct { JupyterExecutionRequest *JupyterExecutionRequest `protobuf:"bytes,7,opt,name=jupyterExecutionRequest,proto3,oneof"` } +type ServerMessage_KernelRestartRequest struct { + KernelRestartRequest *KernelRestartRequest `protobuf:"bytes,8,opt,name=kernelRestartRequest,proto3,oneof"` +} + type ServerMessage_TunnelCreationRequest struct { - TunnelCreationRequest *TunnelCreationRequest `protobuf:"bytes,8,opt,name=tunnelCreationRequest,proto3,oneof"` + TunnelCreationRequest *TunnelCreationRequest `protobuf:"bytes,9,opt,name=tunnelCreationRequest,proto3,oneof"` } type ServerMessage_TunnelTerminationRequest struct { - TunnelTerminationRequest *TunnelTerminationRequest `protobuf:"bytes,9,opt,name=tunnelTerminationRequest,proto3,oneof"` + TunnelTerminationRequest *TunnelTerminationRequest `protobuf:"bytes,10,opt,name=tunnelTerminationRequest,proto3,oneof"` } func (*ServerMessage_ShutdownRequest) isServerMessage_Message() {} @@ -1502,6 +1639,8 @@ func (*ServerMessage_PythonExecutionRequest) isServerMessage_Message() {} func (*ServerMessage_JupyterExecutionRequest) isServerMessage_Message() {} +func (*ServerMessage_KernelRestartRequest) isServerMessage_Message() {} + func (*ServerMessage_TunnelCreationRequest) isServerMessage_Message() {} func (*ServerMessage_TunnelTerminationRequest) isServerMessage_Message() {} @@ -1604,177 +1743,200 @@ var file_agent_communication_proto_rawDesc = []byte{ 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0e, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x22, - 0x8b, 0x02, 0x0a, 0x15, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x65, 0x78, 0x65, - 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, - 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x0f, 0x64, - 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x6f, 0x73, 0x74, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x48, 0x6f, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x0f, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, - 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x72, 0x74, 0x12, - 0x20, 0x0a, 0x0b, 0x73, 0x73, 0x68, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x73, 0x68, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, - 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x50, 0x6f, 0x72, - 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x73, 0x68, 0x4b, 0x65, 0x79, 0x50, 0x61, 0x74, 0x68, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x73, 0x68, 0x4b, 0x65, 0x79, 0x50, 0x61, 0x74, - 0x68, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x22, 0x52, 0x0a, - 0x16, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x65, 0x78, 0x65, 0x63, 0x75, + 0x52, 0x0a, 0x14, 0x4b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x78, - 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x22, 0x8e, 0x01, 0x0a, 0x18, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x54, 0x65, 0x72, 0x6d, - 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, - 0x0a, 0x0f, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x6f, 0x73, - 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x6f, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x0f, 0x64, 0x65, 0x73, 0x74, - 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x0f, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, - 0x72, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x50, 0x6f, - 0x72, 0x74, 0x22, 0x55, 0x0a, 0x19, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x54, 0x65, 0x72, 0x6d, - 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x20, 0x0a, 0x0b, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x49, - 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0xc4, 0x07, 0x0a, 0x0c, 0x41, 0x67, - 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x44, 0x0a, 0x09, 0x61, 0x67, - 0x65, 0x6e, 0x74, 0x50, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, - 0x6f, 0x72, 0x67, 0x2e, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x61, 0x69, 0x72, 0x61, 0x76, - 0x61, 0x74, 0x61, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x50, - 0x69, 0x6e, 0x67, 0x48, 0x00, 0x52, 0x09, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x50, 0x69, 0x6e, 0x67, - 0x12, 0x62, 0x0a, 0x13, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, - 0x6f, 0x72, 0x67, 0x2e, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x61, 0x69, 0x72, 0x61, 0x76, - 0x61, 0x74, 0x61, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x41, 0x67, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, - 0x13, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6b, 0x0a, 0x16, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, - 0x65, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x61, 0x70, 0x61, 0x63, 0x68, + 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x76, + 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x65, 0x6e, 0x76, 0x4e, + 0x61, 0x6d, 0x65, 0x22, 0x51, 0x0a, 0x15, 0x4b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x52, 0x65, 0x73, + 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x20, 0x0a, 0x0b, + 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0b, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x16, + 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x8b, 0x02, 0x0a, 0x15, 0x54, 0x75, 0x6e, 0x6e, 0x65, + 0x6c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x20, 0x0a, 0x0b, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, + 0x49, 0x64, 0x12, 0x28, 0x0a, 0x0f, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x48, 0x6f, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x64, 0x65, 0x73, + 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x6f, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x0f, + 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x72, 0x74, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x73, 0x68, 0x55, 0x73, 0x65, + 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x73, 0x68, + 0x55, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x73, 0x68, 0x4b, + 0x65, 0x79, 0x50, 0x61, 0x74, 0x68, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x73, + 0x68, 0x4b, 0x65, 0x79, 0x50, 0x61, 0x74, 0x68, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x73, 0x73, + 0x77, 0x6f, 0x72, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, + 0x77, 0x6f, 0x72, 0x64, 0x22, 0x52, 0x0a, 0x16, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x20, + 0x0a, 0x0b, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, + 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x8e, 0x01, 0x0a, 0x18, 0x54, 0x75, 0x6e, + 0x6e, 0x65, 0x6c, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x0f, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x6f, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, + 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x6f, 0x73, 0x74, 0x12, + 0x28, 0x0a, 0x0f, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, + 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x22, 0x55, 0x0a, 0x19, 0x54, 0x75, 0x6e, + 0x6e, 0x65, 0x6c, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, + 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x78, 0x65, + 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x22, 0xae, 0x08, 0x0a, 0x0c, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x12, 0x44, 0x0a, 0x09, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x50, 0x69, 0x6e, 0x67, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x61, 0x69, 0x72, 0x61, 0x76, 0x61, 0x74, 0x61, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, - 0x2e, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x16, 0x74, 0x65, 0x72, 0x6d, 0x69, - 0x6e, 0x61, 0x74, 0x65, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x59, 0x0a, 0x10, 0x65, 0x6e, 0x76, 0x53, 0x65, 0x74, 0x75, 0x70, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x6f, 0x72, + 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x50, 0x69, 0x6e, 0x67, 0x48, 0x00, 0x52, 0x09, 0x61, 0x67, + 0x65, 0x6e, 0x74, 0x50, 0x69, 0x6e, 0x67, 0x12, 0x62, 0x0a, 0x13, 0x63, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x61, 0x70, 0x61, 0x63, 0x68, + 0x65, 0x2e, 0x61, 0x69, 0x72, 0x61, 0x76, 0x61, 0x74, 0x61, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, + 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x13, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x67, + 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6b, 0x0a, 0x16, 0x74, + 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x61, 0x69, 0x72, 0x61, 0x76, 0x61, 0x74, - 0x61, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2e, 0x45, 0x6e, 0x76, 0x53, 0x65, 0x74, 0x75, 0x70, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x10, 0x65, 0x6e, 0x76, 0x53, - 0x65, 0x74, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x71, 0x0a, 0x18, - 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, - 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x61, 0x69, 0x72, 0x61, - 0x76, 0x61, 0x74, 0x61, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, - 0x6e, 0x64, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x18, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x45, 0x78, - 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x6e, 0x0a, 0x17, 0x70, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x32, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x61, 0x69, - 0x72, 0x61, 0x76, 0x61, 0x74, 0x61, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2e, 0x50, 0x79, 0x74, - 0x68, 0x6f, 0x6e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x17, 0x70, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x45, 0x78, - 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x71, 0x0a, 0x18, 0x6a, 0x75, 0x70, 0x79, 0x74, 0x65, 0x72, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x61, - 0x69, 0x72, 0x61, 0x76, 0x61, 0x74, 0x61, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2e, 0x4a, 0x75, - 0x70, 0x79, 0x74, 0x65, 0x72, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x18, 0x6a, 0x75, 0x70, 0x79, 0x74, 0x65, + 0x61, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2e, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, + 0x65, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, + 0x52, 0x16, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x41, 0x67, 0x65, 0x6e, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x59, 0x0a, 0x10, 0x65, 0x6e, 0x76, 0x53, + 0x65, 0x74, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2e, + 0x61, 0x69, 0x72, 0x61, 0x76, 0x61, 0x74, 0x61, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2e, 0x45, + 0x6e, 0x76, 0x53, 0x65, 0x74, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, + 0x00, 0x52, 0x10, 0x65, 0x6e, 0x76, 0x53, 0x65, 0x74, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x71, 0x0a, 0x18, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x45, 0x78, + 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x61, 0x70, 0x61, 0x63, + 0x68, 0x65, 0x2e, 0x61, 0x69, 0x72, 0x61, 0x76, 0x61, 0x74, 0x61, 0x2e, 0x61, 0x67, 0x65, 0x6e, + 0x74, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x18, 0x63, 0x6f, + 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6e, 0x0a, 0x17, 0x70, 0x79, 0x74, 0x68, 0x6f, 0x6e, + 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x61, 0x70, + 0x61, 0x63, 0x68, 0x65, 0x2e, 0x61, 0x69, 0x72, 0x61, 0x76, 0x61, 0x74, 0x61, 0x2e, 0x61, 0x67, + 0x65, 0x6e, 0x74, 0x2e, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x17, 0x70, + 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x71, 0x0a, 0x18, 0x6a, 0x75, 0x70, 0x79, 0x74, 0x65, 0x72, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x6b, 0x0a, 0x16, 0x74, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2e, - 0x61, 0x69, 0x72, 0x61, 0x76, 0x61, 0x74, 0x61, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2e, 0x54, - 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x16, 0x74, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x74, 0x0a, 0x19, 0x74, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x09, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2e, - 0x61, 0x69, 0x72, 0x61, 0x76, 0x61, 0x74, 0x61, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2e, 0x54, - 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x19, 0x74, 0x75, 0x6e, 0x6e, - 0x65, 0x6c, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x09, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x22, 0xbf, 0x07, 0x0a, 0x0d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x12, 0x56, 0x0a, 0x0f, 0x73, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x6f, 0x72, - 0x67, 0x2e, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x61, 0x69, 0x72, 0x61, 0x76, 0x61, 0x74, - 0x61, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0f, 0x73, 0x68, 0x75, 0x74, 0x64, - 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x5f, 0x0a, 0x12, 0x63, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x61, 0x70, 0x61, - 0x63, 0x68, 0x65, 0x2e, 0x61, 0x69, 0x72, 0x61, 0x76, 0x61, 0x74, 0x61, 0x2e, 0x61, 0x67, 0x65, - 0x6e, 0x74, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x12, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, - 0x67, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x68, 0x0a, 0x15, 0x74, - 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x6f, 0x72, 0x67, - 0x2e, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x61, 0x69, 0x72, 0x61, 0x76, 0x61, 0x74, 0x61, - 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2e, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, - 0x41, 0x67, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x15, + 0x73, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x61, + 0x70, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x61, 0x69, 0x72, 0x61, 0x76, 0x61, 0x74, 0x61, 0x2e, 0x61, + 0x67, 0x65, 0x6e, 0x74, 0x2e, 0x4a, 0x75, 0x70, 0x79, 0x74, 0x65, 0x72, 0x45, 0x78, 0x65, 0x63, + 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, + 0x18, 0x6a, 0x75, 0x70, 0x79, 0x74, 0x65, 0x72, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x68, 0x0a, 0x15, 0x6b, 0x65, 0x72, + 0x6e, 0x65, 0x6c, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x61, + 0x70, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x61, 0x69, 0x72, 0x61, 0x76, 0x61, 0x74, 0x61, 0x2e, 0x61, + 0x67, 0x65, 0x6e, 0x74, 0x2e, 0x4b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x52, 0x65, 0x73, 0x74, 0x61, + 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x15, 0x6b, 0x65, + 0x72, 0x6e, 0x65, 0x6c, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x6b, 0x0a, 0x16, 0x74, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x09, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, + 0x2e, 0x61, 0x69, 0x72, 0x61, 0x76, 0x61, 0x74, 0x61, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2e, + 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x16, 0x74, 0x75, 0x6e, 0x6e, 0x65, 0x6c, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x74, 0x0a, 0x19, 0x74, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x0a, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, + 0x2e, 0x61, 0x69, 0x72, 0x61, 0x76, 0x61, 0x74, 0x61, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2e, + 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x19, 0x74, 0x75, 0x6e, + 0x6e, 0x65, 0x6c, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x09, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x22, 0xa6, 0x08, 0x0a, 0x0d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x12, 0x56, 0x0a, 0x0f, 0x73, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x6f, + 0x72, 0x67, 0x2e, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x61, 0x69, 0x72, 0x61, 0x76, 0x61, + 0x74, 0x61, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, + 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0f, 0x73, 0x68, 0x75, 0x74, + 0x64, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x5f, 0x0a, 0x12, 0x63, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x61, 0x70, + 0x61, 0x63, 0x68, 0x65, 0x2e, 0x61, 0x69, 0x72, 0x61, 0x76, 0x61, 0x74, 0x61, 0x2e, 0x61, 0x67, + 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x12, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x41, 0x67, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x68, 0x0a, 0x15, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x56, 0x0a, 0x0f, 0x65, 0x6e, 0x76, 0x53, 0x65, 0x74, 0x75, - 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, - 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x61, 0x69, 0x72, 0x61, - 0x76, 0x61, 0x74, 0x61, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2e, 0x45, 0x6e, 0x76, 0x53, 0x65, - 0x74, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0f, 0x65, 0x6e, - 0x76, 0x53, 0x65, 0x74, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x6e, 0x0a, - 0x17, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x6f, 0x72, + 0x67, 0x2e, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x61, 0x69, 0x72, 0x61, 0x76, 0x61, 0x74, + 0x61, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2e, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, + 0x65, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, + 0x15, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x56, 0x0a, 0x0f, 0x65, 0x6e, 0x76, 0x53, 0x65, 0x74, + 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x2a, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x61, 0x69, 0x72, + 0x61, 0x76, 0x61, 0x74, 0x61, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2e, 0x45, 0x6e, 0x76, 0x53, + 0x65, 0x74, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0f, 0x65, + 0x6e, 0x76, 0x53, 0x65, 0x74, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x6e, + 0x0a, 0x17, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x32, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x61, 0x69, 0x72, + 0x61, 0x76, 0x61, 0x74, 0x61, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, + 0x61, 0x6e, 0x64, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x17, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x45, 0x78, + 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x6b, + 0x0a, 0x16, 0x70, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x61, 0x69, 0x72, 0x61, - 0x76, 0x61, 0x74, 0x61, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, - 0x6e, 0x64, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x48, 0x00, 0x52, 0x17, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x45, 0x78, 0x65, - 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x6b, 0x0a, - 0x16, 0x70, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, - 0x6f, 0x72, 0x67, 0x2e, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x61, 0x69, 0x72, 0x61, 0x76, - 0x61, 0x74, 0x61, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2e, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, + 0x76, 0x61, 0x74, 0x61, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2e, 0x50, 0x79, 0x74, 0x68, 0x6f, + 0x6e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x48, 0x00, 0x52, 0x16, 0x70, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x45, 0x78, 0x65, 0x63, 0x75, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x6e, 0x0a, 0x17, 0x6a, + 0x75, 0x70, 0x79, 0x74, 0x65, 0x72, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x6f, + 0x72, 0x67, 0x2e, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x61, 0x69, 0x72, 0x61, 0x76, 0x61, + 0x74, 0x61, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2e, 0x4a, 0x75, 0x70, 0x79, 0x74, 0x65, 0x72, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x48, 0x00, 0x52, 0x16, 0x70, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x6e, 0x0a, 0x17, 0x6a, 0x75, - 0x70, 0x79, 0x74, 0x65, 0x72, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x6f, 0x72, - 0x67, 0x2e, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x61, 0x69, 0x72, 0x61, 0x76, 0x61, 0x74, - 0x61, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2e, 0x4a, 0x75, 0x70, 0x79, 0x74, 0x65, 0x72, 0x45, - 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, - 0x00, 0x52, 0x17, 0x6a, 0x75, 0x70, 0x79, 0x74, 0x65, 0x72, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x68, 0x0a, 0x15, 0x74, 0x75, - 0x6e, 0x6e, 0x65, 0x6c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x6f, 0x72, 0x67, 0x2e, + 0x48, 0x00, 0x52, 0x17, 0x6a, 0x75, 0x70, 0x79, 0x74, 0x65, 0x72, 0x45, 0x78, 0x65, 0x63, 0x75, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x65, 0x0a, 0x14, 0x6b, + 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x61, 0x69, 0x72, 0x61, 0x76, 0x61, 0x74, 0x61, 0x2e, - 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2e, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x15, 0x74, - 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x71, 0x0a, 0x18, 0x74, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x54, 0x65, - 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x61, 0x70, 0x61, - 0x63, 0x68, 0x65, 0x2e, 0x61, 0x69, 0x72, 0x61, 0x76, 0x61, 0x74, 0x61, 0x2e, 0x61, 0x67, 0x65, - 0x6e, 0x74, 0x2e, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x18, 0x74, - 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x42, 0x09, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x32, 0x86, 0x01, 0x0a, 0x19, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x6d, - 0x75, 0x6e, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x12, 0x69, 0x0a, 0x10, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x42, 0x75, 0x73, 0x12, 0x27, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x61, 0x70, 0x61, 0x63, 0x68, - 0x65, 0x2e, 0x61, 0x69, 0x72, 0x61, 0x76, 0x61, 0x74, 0x61, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, - 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x28, 0x2e, - 0x6f, 0x72, 0x67, 0x2e, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x61, 0x69, 0x72, 0x61, 0x76, - 0x61, 0x74, 0x61, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x28, 0x01, 0x30, 0x01, 0x42, 0x3f, 0x0a, 0x19, 0x6f, + 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2e, 0x4b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x52, 0x65, 0x73, 0x74, + 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x14, 0x6b, 0x65, + 0x72, 0x6e, 0x65, 0x6c, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x68, 0x0a, 0x15, 0x74, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x30, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x61, + 0x69, 0x72, 0x61, 0x76, 0x61, 0x74, 0x61, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2e, 0x54, 0x75, + 0x6e, 0x6e, 0x65, 0x6c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x15, 0x74, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x71, 0x0a, 0x18, + 0x74, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, + 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x61, 0x69, 0x72, 0x61, + 0x76, 0x61, 0x74, 0x61, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2e, 0x54, 0x75, 0x6e, 0x6e, 0x65, + 0x6c, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x18, 0x74, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x54, 0x65, 0x72, + 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x42, + 0x09, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x32, 0x86, 0x01, 0x0a, 0x19, 0x41, + 0x67, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x69, 0x0a, 0x10, 0x63, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x75, 0x73, 0x12, 0x27, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x61, 0x69, 0x72, 0x61, 0x76, 0x61, - 0x74, 0x61, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x42, 0x17, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, - 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, - 0x6f, 0x50, 0x01, 0x5a, 0x07, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x2f, 0x62, 0x06, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x33, + 0x74, 0x61, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x28, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x61, 0x70, 0x61, 0x63, + 0x68, 0x65, 0x2e, 0x61, 0x69, 0x72, 0x61, 0x76, 0x61, 0x74, 0x61, 0x2e, 0x61, 0x67, 0x65, 0x6e, + 0x74, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x28, + 0x01, 0x30, 0x01, 0x42, 0x3f, 0x0a, 0x19, 0x6f, 0x72, 0x67, 0x2e, 0x61, 0x70, 0x61, 0x63, 0x68, + 0x65, 0x2e, 0x61, 0x69, 0x72, 0x61, 0x76, 0x61, 0x74, 0x61, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, + 0x42, 0x17, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x07, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x73, 0x2f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1789,7 +1951,7 @@ func file_agent_communication_proto_rawDescGZIP() []byte { return file_agent_communication_proto_rawDescData } -var file_agent_communication_proto_msgTypes = make([]protoimpl.MessageInfo, 20) +var file_agent_communication_proto_msgTypes = make([]protoimpl.MessageInfo, 22) var file_agent_communication_proto_goTypes = []any{ (*AgentPing)(nil), // 0: org.apache.airavata.agent.AgentPing (*ShutdownRequest)(nil), // 1: org.apache.airavata.agent.ShutdownRequest @@ -1805,12 +1967,14 @@ var file_agent_communication_proto_goTypes = []any{ (*PythonExecutionResponse)(nil), // 11: org.apache.airavata.agent.PythonExecutionResponse (*JupyterExecutionRequest)(nil), // 12: org.apache.airavata.agent.JupyterExecutionRequest (*JupyterExecutionResponse)(nil), // 13: org.apache.airavata.agent.JupyterExecutionResponse - (*TunnelCreationRequest)(nil), // 14: org.apache.airavata.agent.TunnelCreationRequest - (*TunnelCreationResponse)(nil), // 15: org.apache.airavata.agent.TunnelCreationResponse - (*TunnelTerminationRequest)(nil), // 16: org.apache.airavata.agent.TunnelTerminationRequest - (*TunnelTerminationResponse)(nil), // 17: org.apache.airavata.agent.TunnelTerminationResponse - (*AgentMessage)(nil), // 18: org.apache.airavata.agent.AgentMessage - (*ServerMessage)(nil), // 19: org.apache.airavata.agent.ServerMessage + (*KernelRestartRequest)(nil), // 14: org.apache.airavata.agent.KernelRestartRequest + (*KernelRestartResponse)(nil), // 15: org.apache.airavata.agent.KernelRestartResponse + (*TunnelCreationRequest)(nil), // 16: org.apache.airavata.agent.TunnelCreationRequest + (*TunnelCreationResponse)(nil), // 17: org.apache.airavata.agent.TunnelCreationResponse + (*TunnelTerminationRequest)(nil), // 18: org.apache.airavata.agent.TunnelTerminationRequest + (*TunnelTerminationResponse)(nil), // 19: org.apache.airavata.agent.TunnelTerminationResponse + (*AgentMessage)(nil), // 20: org.apache.airavata.agent.AgentMessage + (*ServerMessage)(nil), // 21: org.apache.airavata.agent.ServerMessage } var file_agent_communication_proto_depIdxs = []int32{ 0, // 0: org.apache.airavata.agent.AgentMessage.agentPing:type_name -> org.apache.airavata.agent.AgentPing @@ -1820,24 +1984,26 @@ var file_agent_communication_proto_depIdxs = []int32{ 9, // 4: org.apache.airavata.agent.AgentMessage.commandExecutionResponse:type_name -> org.apache.airavata.agent.CommandExecutionResponse 11, // 5: org.apache.airavata.agent.AgentMessage.pythonExecutionResponse:type_name -> org.apache.airavata.agent.PythonExecutionResponse 13, // 6: org.apache.airavata.agent.AgentMessage.jupyterExecutionResponse:type_name -> org.apache.airavata.agent.JupyterExecutionResponse - 15, // 7: org.apache.airavata.agent.AgentMessage.tunnelCreationResponse:type_name -> org.apache.airavata.agent.TunnelCreationResponse - 17, // 8: org.apache.airavata.agent.AgentMessage.tunnelTerminationResponse:type_name -> org.apache.airavata.agent.TunnelTerminationResponse - 1, // 9: org.apache.airavata.agent.ServerMessage.shutdownRequest:type_name -> org.apache.airavata.agent.ShutdownRequest - 2, // 10: org.apache.airavata.agent.ServerMessage.createAgentRequest:type_name -> org.apache.airavata.agent.CreateAgentRequest - 4, // 11: org.apache.airavata.agent.ServerMessage.terminateAgentRequest:type_name -> org.apache.airavata.agent.TerminateAgentRequest - 6, // 12: org.apache.airavata.agent.ServerMessage.envSetupRequest:type_name -> org.apache.airavata.agent.EnvSetupRequest - 8, // 13: org.apache.airavata.agent.ServerMessage.commandExecutionRequest:type_name -> org.apache.airavata.agent.CommandExecutionRequest - 10, // 14: org.apache.airavata.agent.ServerMessage.pythonExecutionRequest:type_name -> org.apache.airavata.agent.PythonExecutionRequest - 12, // 15: org.apache.airavata.agent.ServerMessage.jupyterExecutionRequest:type_name -> org.apache.airavata.agent.JupyterExecutionRequest - 14, // 16: org.apache.airavata.agent.ServerMessage.tunnelCreationRequest:type_name -> org.apache.airavata.agent.TunnelCreationRequest - 16, // 17: org.apache.airavata.agent.ServerMessage.tunnelTerminationRequest:type_name -> org.apache.airavata.agent.TunnelTerminationRequest - 18, // 18: org.apache.airavata.agent.AgentCommunicationService.createMessageBus:input_type -> org.apache.airavata.agent.AgentMessage - 19, // 19: org.apache.airavata.agent.AgentCommunicationService.createMessageBus:output_type -> org.apache.airavata.agent.ServerMessage - 19, // [19:20] is the sub-list for method output_type - 18, // [18:19] is the sub-list for method input_type - 18, // [18:18] is the sub-list for extension type_name - 18, // [18:18] is the sub-list for extension extendee - 0, // [0:18] is the sub-list for field type_name + 15, // 7: org.apache.airavata.agent.AgentMessage.kernelRestartResponse:type_name -> org.apache.airavata.agent.KernelRestartResponse + 17, // 8: org.apache.airavata.agent.AgentMessage.tunnelCreationResponse:type_name -> org.apache.airavata.agent.TunnelCreationResponse + 19, // 9: org.apache.airavata.agent.AgentMessage.tunnelTerminationResponse:type_name -> org.apache.airavata.agent.TunnelTerminationResponse + 1, // 10: org.apache.airavata.agent.ServerMessage.shutdownRequest:type_name -> org.apache.airavata.agent.ShutdownRequest + 2, // 11: org.apache.airavata.agent.ServerMessage.createAgentRequest:type_name -> org.apache.airavata.agent.CreateAgentRequest + 4, // 12: org.apache.airavata.agent.ServerMessage.terminateAgentRequest:type_name -> org.apache.airavata.agent.TerminateAgentRequest + 6, // 13: org.apache.airavata.agent.ServerMessage.envSetupRequest:type_name -> org.apache.airavata.agent.EnvSetupRequest + 8, // 14: org.apache.airavata.agent.ServerMessage.commandExecutionRequest:type_name -> org.apache.airavata.agent.CommandExecutionRequest + 10, // 15: org.apache.airavata.agent.ServerMessage.pythonExecutionRequest:type_name -> org.apache.airavata.agent.PythonExecutionRequest + 12, // 16: org.apache.airavata.agent.ServerMessage.jupyterExecutionRequest:type_name -> org.apache.airavata.agent.JupyterExecutionRequest + 14, // 17: org.apache.airavata.agent.ServerMessage.kernelRestartRequest:type_name -> org.apache.airavata.agent.KernelRestartRequest + 16, // 18: org.apache.airavata.agent.ServerMessage.tunnelCreationRequest:type_name -> org.apache.airavata.agent.TunnelCreationRequest + 18, // 19: org.apache.airavata.agent.ServerMessage.tunnelTerminationRequest:type_name -> org.apache.airavata.agent.TunnelTerminationRequest + 20, // 20: org.apache.airavata.agent.AgentCommunicationService.createMessageBus:input_type -> org.apache.airavata.agent.AgentMessage + 21, // 21: org.apache.airavata.agent.AgentCommunicationService.createMessageBus:output_type -> org.apache.airavata.agent.ServerMessage + 21, // [21:22] is the sub-list for method output_type + 20, // [20:21] is the sub-list for method input_type + 20, // [20:20] is the sub-list for extension type_name + 20, // [20:20] is the sub-list for extension extendee + 0, // [0:20] is the sub-list for field type_name } func init() { file_agent_communication_proto_init() } @@ -2015,7 +2181,7 @@ func file_agent_communication_proto_init() { } } file_agent_communication_proto_msgTypes[14].Exporter = func(v any, i int) any { - switch v := v.(*TunnelCreationRequest); i { + switch v := v.(*KernelRestartRequest); i { case 0: return &v.state case 1: @@ -2027,7 +2193,7 @@ func file_agent_communication_proto_init() { } } file_agent_communication_proto_msgTypes[15].Exporter = func(v any, i int) any { - switch v := v.(*TunnelCreationResponse); i { + switch v := v.(*KernelRestartResponse); i { case 0: return &v.state case 1: @@ -2039,7 +2205,7 @@ func file_agent_communication_proto_init() { } } file_agent_communication_proto_msgTypes[16].Exporter = func(v any, i int) any { - switch v := v.(*TunnelTerminationRequest); i { + switch v := v.(*TunnelCreationRequest); i { case 0: return &v.state case 1: @@ -2051,7 +2217,7 @@ func file_agent_communication_proto_init() { } } file_agent_communication_proto_msgTypes[17].Exporter = func(v any, i int) any { - switch v := v.(*TunnelTerminationResponse); i { + switch v := v.(*TunnelCreationResponse); i { case 0: return &v.state case 1: @@ -2063,7 +2229,7 @@ func file_agent_communication_proto_init() { } } file_agent_communication_proto_msgTypes[18].Exporter = func(v any, i int) any { - switch v := v.(*AgentMessage); i { + switch v := v.(*TunnelTerminationRequest); i { case 0: return &v.state case 1: @@ -2075,6 +2241,30 @@ func file_agent_communication_proto_init() { } } file_agent_communication_proto_msgTypes[19].Exporter = func(v any, i int) any { + switch v := v.(*TunnelTerminationResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_agent_communication_proto_msgTypes[20].Exporter = func(v any, i int) any { + switch v := v.(*AgentMessage); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_agent_communication_proto_msgTypes[21].Exporter = func(v any, i int) any { switch v := v.(*ServerMessage); i { case 0: return &v.state @@ -2087,7 +2277,7 @@ func file_agent_communication_proto_init() { } } } - file_agent_communication_proto_msgTypes[18].OneofWrappers = []any{ + file_agent_communication_proto_msgTypes[20].OneofWrappers = []any{ (*AgentMessage_AgentPing)(nil), (*AgentMessage_CreateAgentResponse)(nil), (*AgentMessage_TerminateAgentResponse)(nil), @@ -2095,10 +2285,11 @@ func file_agent_communication_proto_init() { (*AgentMessage_CommandExecutionResponse)(nil), (*AgentMessage_PythonExecutionResponse)(nil), (*AgentMessage_JupyterExecutionResponse)(nil), + (*AgentMessage_KernelRestartResponse)(nil), (*AgentMessage_TunnelCreationResponse)(nil), (*AgentMessage_TunnelTerminationResponse)(nil), } - file_agent_communication_proto_msgTypes[19].OneofWrappers = []any{ + file_agent_communication_proto_msgTypes[21].OneofWrappers = []any{ (*ServerMessage_ShutdownRequest)(nil), (*ServerMessage_CreateAgentRequest)(nil), (*ServerMessage_TerminateAgentRequest)(nil), @@ -2106,6 +2297,7 @@ func file_agent_communication_proto_init() { (*ServerMessage_CommandExecutionRequest)(nil), (*ServerMessage_PythonExecutionRequest)(nil), (*ServerMessage_JupyterExecutionRequest)(nil), + (*ServerMessage_KernelRestartRequest)(nil), (*ServerMessage_TunnelCreationRequest)(nil), (*ServerMessage_TunnelTerminationRequest)(nil), } @@ -2115,7 +2307,7 @@ func file_agent_communication_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_agent_communication_proto_rawDesc, NumEnums: 0, - NumMessages: 20, + NumMessages: 22, NumExtensions: 0, NumServices: 1, }, diff --git a/modules/agent-framework/proto/agent-communication.proto b/modules/agent-framework/proto/agent-communication.proto index 9bf6d3d7f3..a1f2e46f5b 100644 --- a/modules/agent-framework/proto/agent-communication.proto +++ b/modules/agent-framework/proto/agent-communication.proto @@ -93,6 +93,16 @@ message JupyterExecutionResponse { string responseString = 2; } +// server requesting the agent to restart a jupyter kernel +message KernelRestartRequest { + string executionId = 1; + string envName = 2; +} +message KernelRestartResponse { + string executionId = 1; + string status = 2; +} + // server requesting the agent to create a ssh tunnel message TunnelCreationRequest { string executionId = 1; @@ -128,8 +138,9 @@ message AgentMessage { CommandExecutionResponse commandExecutionResponse = 5; PythonExecutionResponse pythonExecutionResponse = 6; JupyterExecutionResponse jupyterExecutionResponse = 7; - TunnelCreationResponse tunnelCreationResponse = 8; - TunnelTerminationResponse tunnelTerminationResponse = 9; + KernelRestartResponse kernelRestartResponse = 8; + TunnelCreationResponse tunnelCreationResponse = 9; + TunnelTerminationResponse tunnelTerminationResponse = 10; } } @@ -142,7 +153,8 @@ message ServerMessage { CommandExecutionRequest commandExecutionRequest = 5; PythonExecutionRequest pythonExecutionRequest = 6; JupyterExecutionRequest jupyterExecutionRequest = 7; - TunnelCreationRequest tunnelCreationRequest = 8; - TunnelTerminationRequest tunnelTerminationRequest = 9; + KernelRestartRequest kernelRestartRequest = 8; + TunnelCreationRequest tunnelCreationRequest = 9; + TunnelTerminationRequest tunnelTerminationRequest = 10; } } \ No newline at end of file
