Merge changes from Bazel: Allow sending and receiving work requests via proxy and multiplexer in the persistent worker protocol.

PiperOrigin-RevId: 274560006
diff --git a/third_party/github.com/bazelbuild/bazel/src/main/protobuf/worker_protocol.proto b/third_party/github.com/bazelbuild/bazel/src/main/protobuf/worker_protocol.proto
index 4706792..c628b7e 100644
--- a/third_party/github.com/bazelbuild/bazel/src/main/protobuf/worker_protocol.proto
+++ b/third_party/github.com/bazelbuild/bazel/src/main/protobuf/worker_protocol.proto
@@ -38,14 +38,25 @@
   // The inputs that the worker is allowed to read during execution of this
   // request.
   repeated Input inputs = 2;
+
+  // To support multiplex worker, each WorkRequest must have an unique ID. This
+  // ID should be attached unchanged to the WorkResponse.
+  int32 request_id = 3;
 }
 
-// The worker sends this message to Blaze when it finished its work on the WorkRequest message.
+// The worker sends this message to Blaze when it finished its work on the
+// WorkRequest message.
 message WorkResponse {
   int32 exit_code = 1;
 
-  // This is printed to the user after the WorkResponse has been received and is supposed to contain
-  // compiler warnings / errors etc. - thus we'll use a string type here, which gives us UTF-8
-  // encoding.
+  // This is printed to the user after the WorkResponse has been received and is
+  // supposed to contain compiler warnings / errors etc. - thus we'll use a
+  // string type here, which gives us UTF-8 encoding.
   string output = 2;
+
+  // To support multiplex worker, each WorkResponse must have an unique ID.
+  // Since worker processes which support multiplex worker will handle multiple
+  // WorkRequests in parallel, this ID will be used to determined which
+  // WorkerProxy does this WorkResponse belong to.
+  int32 request_id = 3;
 }