diff --git a/go/cmd/compass-stack/preflight.go b/go/cmd/compass-stack/preflight.go index a2127a986..aa183387a 100644 --- a/go/cmd/compass-stack/preflight.go +++ b/go/cmd/compass-stack/preflight.go @@ -25,13 +25,11 @@ import ( // later V5 wave. This command is a thin consumer of that shared core — no // longer a placeholder to be replaced — and keeps only what is stack-specific: // the podman rootless-capability check (postgres runs as a rootless container) -// and the print/exit surface. It also reports the secretspec CLI: the secrets -// WRITE path (internal/secrets SpecResolver.Set) spawns it by name, so it is an -// install-time dependency the operator must have even though boot, which reads -// through the SDK, never touches it — surfacing it here is what turns "the first -// admin write fails" into an install-time line. That is one more entry in this -// same list, not a new abstraction. Do not grow this into a capability -// framework. +// and the print/exit surface. It also reports the secretspec CLI: no Go code +// spawns it, but it is the operator's server-secret rotation path, so surfacing +// it here turns "the first rotation fails" into an install-time line. That is +// one more entry in this same list, not a new abstraction. Do not grow this +// into a capability framework. // podmanBinary is the podman executable name, resolved on PATH. It is the check // name and the LookPath target, so it is named once here (goconst). @@ -103,7 +101,7 @@ func runPreflight(args []string) error { checks = append(checks, checkBinaryVersion(f)) } // After the trio so the microVM group stays contiguous and the output order - // is stable: secretspec is the secrets write path's dependency, not a microVM + // is stable: secretspec is the operator's rotation dependency, not a microVM // userspace binary. checks = append(checks, checkBinaryVersion(hostcheck.SecretSpecFloor)) diff --git a/go/cmd/compass/secret.go b/go/cmd/compass/secret.go index c40a90487..d9694ef28 100644 --- a/go/cmd/compass/secret.go +++ b/go/cmd/compass/secret.go @@ -130,10 +130,9 @@ func newSecretDeleteCmd() *cobra.Command { // required and it is read from stdin. var errEmptySecretValue = errors.New("a secret value is required: pipe it on stdin (it is never taken from the command line)") -// readSecretValue reads a secret value from stdin, the ONE place both the user -// and server-secret set paths get it — so the size cap, the trailing-newline -// trim (a bare `echo` adds one and it is not part of the value), and the -// empty-value rejection cannot drift between the two verbs. +// readSecretValue reads a secret value from stdin: it applies the size cap, the +// trailing-newline trim (a bare `echo` adds one and it is not part of the +// value), and the empty-value rejection. // // stdin is the only source by design: a value on argv would be visible in the // host process list. diff --git a/go/cmd/compass/server_secret.go b/go/cmd/compass/server_secret.go index caff4d9c4..87aca60a8 100644 --- a/go/cmd/compass/server_secret.go +++ b/go/cmd/compass/server_secret.go @@ -17,46 +17,18 @@ import ( ) // newServerSecretCmd builds the server-secret noun: the DEPLOYMENT-owned secret -// surface (set/list), disjoint from the fleet `secret` noun by reserved name -// prefix. It carries no logic of its own; each verb is a child that dials the -// Server and drives one SecretsService RPC. A server secret value is read from -// stdin, never argv, so it cannot leak into the process table. +// surface, disjoint from the fleet `secret` noun by reserved name prefix. It +// carries no logic of its own; its verb is a child that dials the Server and +// drives one SecretsService RPC. func newServerSecretCmd() *cobra.Command { cmd := &cobra.Command{ Use: "server-secret", - Short: "Manage deployment-owned server secrets (set / list)", + Short: "Manage deployment-owned server secrets (list)", } - cmd.AddCommand(newServerSecretSetCmd(), newServerSecretListCmd()) + cmd.AddCommand(newServerSecretListCmd()) return cmd } -// newServerSecretSetCmd builds `server-secret set `: write a server -// secret's value. The value is read from stdin, never a flag or positional, so -// it cannot leak into the process table (the load-bearing convention shared -// with the fleet `secret set` verb and the bearer token). -// -// The name is accepted with OR without the reserved prefix, because the two -// sides spell it differently: the deployment's config carries the BARE name -// (the operator writes `forge.appId`-style config, not a registry key) while -// the server-secret registry carries the PREFIXED one (serve.go's -// serverSecretName wraps every declared name). Accepting both and sending the -// prefixed form means the operator can paste either spelling and still write -// the row the Server reads. -func newServerSecretSetCmd() *cobra.Command { - return &cobra.Command{ - Use: "set ", - Short: "Write a server secret's value (value read from stdin, admin)", - Args: cobra.ExactArgs(1), - RunE: func(cmd *cobra.Command, args []string) error { - client, err := dialSecretsClient(cmd) - if err != nil { - return err - } - return runServerSecretSet(cmd.Context(), client, args[0], cmd.InOrStdin(), cmd.OutOrStdout()) - }, - } -} - // newServerSecretListCmd builds `server-secret list`: ListServerSecrets and // render each declared server secret's name and set/unset state. It NEVER // renders a value (there is none on the wire). An empty list renders a clear @@ -76,59 +48,6 @@ func newServerSecretListCmd() *cobra.Command { } } -// runServerSecretSet reads the value from in (trimming a single trailing -// newline and rejecting an empty value) and calls SetServerSecret under the -// prefixed name. The value is never taken from argv, so it cannot leak into the -// process table. -func runServerSecretSet(ctx context.Context, client compassv1connect.SecretsServiceClient, name string, in io.Reader, out io.Writer) error { - value, err := readSecretValue(in) - if err != nil { - return err - } - wire, err := serverSecretWireName(name) - if err != nil { - return err - } - - ctx, cancel := context.WithTimeout(ctx, rpcTimeout) - defer cancel() - if _, err := client.SetServerSecret(ctx, connect.NewRequest(&compassv1.SetServerSecretRequest{ - Name: wire, - Value: value, - })); err != nil { - return fmt.Errorf("setting server secret %s: %w", wire, err) - } - _, err = fmt.Fprintf(out, "set server secret %s\n", wire) - return err -} - -// serverSecretWireName maps the operator's spelling to the registry's. A name -// that already carries a reserved prefix is sent as-is (never double-prefixed); -// a bare one is wrapped, matching serve.go's serverSecretName. The store's -// HasServerSecretPrefix is the authority on what counts as prefixed, so the two -// doors cannot drift. -// -// A bare name that would SHADOW the master-key row is refused rather than -// wrapped. `list` strips any reserved prefix, so the master key prints as the -// bare `MASTER_KEY`; feeding that spelling back here would wrap it to -// `SERVER_MASTER_KEY`, which is a DIFFERENT secret. That name clears the -// server's master-key guard (it compares the exact COMPASS_MASTER_KEY name), -// so the write would silently mint a shadow row, leave the real key untouched, -// and make `list` print the same bare name twice. Refusing is the only safe -// answer: wrapping writes a different secret than the operator named, with no -// error at any layer. -func serverSecretWireName(name string) (string, error) { - if store.HasServerSecretPrefix(name) { - return name, nil - } - if store.CompassPrefix+name == store.MasterKeyName { - return "", fmt.Errorf( - "%s is the bare spelling of %s, which is provisioned and rotated by the server; pass the full name if you meant a different secret", - name, store.MasterKeyName) - } - return store.ServerSecretPrefix + name, nil -} - // runServerSecretList calls ListServerSecrets and renders each declared server // secret. An empty list renders a clear message, not an error. // diff --git a/go/cmd/compass/server_secret_test.go b/go/cmd/compass/server_secret_test.go index 5436b03fd..04f95dbcf 100644 --- a/go/cmd/compass/server_secret_test.go +++ b/go/cmd/compass/server_secret_test.go @@ -16,23 +16,14 @@ import ( "github.com/RigelBuild/compass/go/internal/store" ) -// fakeServerSecrets is a fake SecretsService handler recording the request each -// server-secret verb constructs and returning a canned ListServerSecrets -// response, so the subcommand RPC wiring is tested without a live Server or -// Postgres (mirroring fakeSecrets for the user-facing verbs). +// fakeServerSecrets is a fake SecretsService handler returning a canned +// ListServerSecrets response, so the list subcommand's RPC wiring is tested +// without a live Server or Postgres (mirroring fakeSecrets for the user-facing +// verbs). type fakeServerSecrets struct { compassv1connect.UnimplementedSecretsServiceHandler - gotSet *compassv1.SetServerSecretRequest - setCalls int - list *compassv1.ListServerSecretsResponse - gotAuth string -} - -func (f *fakeServerSecrets) SetServerSecret(_ context.Context, req *connect.Request[compassv1.SetServerSecretRequest]) (*connect.Response[compassv1.SetServerSecretResponse], error) { - f.setCalls++ - f.gotSet = req.Msg - f.gotAuth = req.Header().Get("Authorization") - return connect.NewResponse(&compassv1.SetServerSecretResponse{}), nil + list *compassv1.ListServerSecretsResponse + gotAuth string } func (f *fakeServerSecrets) ListServerSecrets(_ context.Context, req *connect.Request[compassv1.ListServerSecretsRequest]) (*connect.Response[compassv1.ListServerSecretsResponse], error) { @@ -134,106 +125,3 @@ func TestRunServerSecretListEmpty(t *testing.T) { t.Errorf("empty-list output %q does not report an empty registry", out.String()) } } - -// TestRunServerSecretSetPrefixesName asserts the value comes from stdin (never -// argv) and that a bare operator-facing name is sent PREFIXED on the wire, while -// an already-prefixed name is not double-prefixed. -func TestRunServerSecretSetPrefixesName(t *testing.T) { - tests := []struct { - name string - input string - want string - }{ - {name: "bare name is prefixed", input: "FORGE_APP_PEM", want: "SERVER_FORGE_APP_PEM"}, - {name: "prefixed name is unchanged", input: "SERVER_FORGE_APP_PEM", want: "SERVER_FORGE_APP_PEM"}, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - fake := &fakeServerSecrets{} - client := startFakeServerSecretsServer(t, fake) - - var out strings.Builder - in := strings.NewReader("s3cr3t\n") - if err := runServerSecretSet(context.Background(), client, tt.input, in, &out); err != nil { - t.Fatalf("runServerSecretSet: %v", err) - } - if fake.gotSet == nil { - t.Fatal("SetServerSecret was not called") - } - if fake.gotSet.GetName() != tt.want { - t.Errorf("name = %q, want %q", fake.gotSet.GetName(), tt.want) - } - if fake.gotSet.GetValue() != "s3cr3t" { - t.Errorf("value = %q, want s3cr3t (trailing newline trimmed, from stdin)", fake.gotSet.GetValue()) - } - if fake.gotAuth != "Bearer test-token" { - t.Errorf("Authorization = %q, want Bearer test-token", fake.gotAuth) - } - }) - } -} - -// TestRunServerSecretSetRefusesBareMasterKey pins the round-trip hazard: `list` -// strips any reserved prefix, so the master key prints as bare MASTER_KEY. -// Wrapping that spelling would send SERVER_MASTER_KEY — a DIFFERENT secret that -// clears the server's exact-name master-key guard, minting a shadow row while -// the real key stays unprovisioned and `list` prints the same bare name twice. -// It must be refused before any RPC. -func TestRunServerSecretSetRefusesBareMasterKey(t *testing.T) { - fake := &fakeServerSecrets{} - client := startFakeServerSecretsServer(t, fake) - - var out strings.Builder - in := strings.NewReader("s3cr3t\n") - err := runServerSecretSet(context.Background(), client, "MASTER_KEY", in, &out) - if err == nil { - t.Fatal("bare MASTER_KEY was accepted; it must be refused rather than re-prefixed to a different secret") - } - if fake.gotSet != nil { - t.Errorf("SetServerSecret was called with %q; the refusal must precede any RPC", fake.gotSet.GetName()) - } - if !strings.Contains(err.Error(), store.MasterKeyName) { - t.Errorf("error %q does not name %s, so it is not actionable", err, store.MasterKeyName) - } -} - -// TestRunServerSecretSetAcceptsFullMasterKeyName asserts the refusal is narrow: -// the FULL master-key name still reaches the server, which is what fail-closes -// on it (secrets_service.go's store.MasterKeyName guard). The CLI must not become a -// second, divergent authority on which names are writable. -func TestRunServerSecretSetAcceptsFullMasterKeyName(t *testing.T) { - fake := &fakeServerSecrets{} - client := startFakeServerSecretsServer(t, fake) - - var out strings.Builder - in := strings.NewReader("s3cr3t\n") - if err := runServerSecretSet(context.Background(), client, store.MasterKeyName, in, &out); err != nil { - t.Fatalf("runServerSecretSet: %v", err) - } - if fake.gotSet == nil { - t.Fatal("SetServerSecret was not called; the server must be the authority on this refusal") - } - if fake.gotSet.GetName() != store.MasterKeyName { - t.Errorf("name = %q, want %q unchanged", fake.gotSet.GetName(), store.MasterKeyName) - } -} - -// TestRunServerSecretSetEmptyStdin asserts an empty stdin value is rejected with -// the shared empty-value error BEFORE any RPC — a blank pipe must never clear a -// populated server secret. -func TestRunServerSecretSetEmptyStdin(t *testing.T) { - fake := &fakeServerSecrets{} - client := startFakeServerSecretsServer(t, fake) - - var out strings.Builder - err := runServerSecretSet(context.Background(), client, "FORGE_APP_PEM", strings.NewReader("\n"), &out) - if err == nil { - t.Fatal("runServerSecretSet with empty stdin = nil error, want rejection") - } - if !strings.Contains(err.Error(), "value is required") { - t.Errorf("error %q does not mention the required value", err.Error()) - } - if fake.setCalls != 0 { - t.Errorf("SetServerSecret called %d times despite an empty value", fake.setCalls) - } -} diff --git a/go/gen/compass/v1/compass.pb.go b/go/gen/compass/v1/compass.pb.go index 88585df81..172ad06c9 100644 --- a/go/gen/compass/v1/compass.pb.go +++ b/go/gen/compass/v1/compass.pb.go @@ -1149,174 +1149,6 @@ func (*DeleteSecretResponse) Descriptor() ([]byte, []int) { return file_compass_v1_compass_proto_rawDescGZIP(), []int{6} } -type SetServerSecretRequest struct { - state protoimpl.MessageState `protogen:"open.v1"` - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *SetServerSecretRequest) Reset() { - *x = SetServerSecretRequest{} - mi := &file_compass_v1_compass_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *SetServerSecretRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SetServerSecretRequest) ProtoMessage() {} - -func (x *SetServerSecretRequest) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[7] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SetServerSecretRequest.ProtoReflect.Descriptor instead. -func (*SetServerSecretRequest) Descriptor() ([]byte, []int) { - return file_compass_v1_compass_proto_rawDescGZIP(), []int{7} -} - -func (x *SetServerSecretRequest) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *SetServerSecretRequest) GetValue() string { - if x != nil { - return x.Value - } - return "" -} - -type SetServerSecretResponse struct { - state protoimpl.MessageState `protogen:"open.v1"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *SetServerSecretResponse) Reset() { - *x = SetServerSecretResponse{} - mi := &file_compass_v1_compass_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *SetServerSecretResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SetServerSecretResponse) ProtoMessage() {} - -func (x *SetServerSecretResponse) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[8] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SetServerSecretResponse.ProtoReflect.Descriptor instead. -func (*SetServerSecretResponse) Descriptor() ([]byte, []int) { - return file_compass_v1_compass_proto_rawDescGZIP(), []int{8} -} - -type DeleteServerSecretRequest struct { - state protoimpl.MessageState `protogen:"open.v1"` - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *DeleteServerSecretRequest) Reset() { - *x = DeleteServerSecretRequest{} - mi := &file_compass_v1_compass_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *DeleteServerSecretRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DeleteServerSecretRequest) ProtoMessage() {} - -func (x *DeleteServerSecretRequest) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[9] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DeleteServerSecretRequest.ProtoReflect.Descriptor instead. -func (*DeleteServerSecretRequest) Descriptor() ([]byte, []int) { - return file_compass_v1_compass_proto_rawDescGZIP(), []int{9} -} - -func (x *DeleteServerSecretRequest) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -type DeleteServerSecretResponse struct { - state protoimpl.MessageState `protogen:"open.v1"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *DeleteServerSecretResponse) Reset() { - *x = DeleteServerSecretResponse{} - mi := &file_compass_v1_compass_proto_msgTypes[10] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *DeleteServerSecretResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DeleteServerSecretResponse) ProtoMessage() {} - -func (x *DeleteServerSecretResponse) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[10] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DeleteServerSecretResponse.ProtoReflect.Descriptor instead. -func (*DeleteServerSecretResponse) Descriptor() ([]byte, []int) { - return file_compass_v1_compass_proto_rawDescGZIP(), []int{10} -} - type ListServerSecretsRequest struct { state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields @@ -1325,7 +1157,7 @@ type ListServerSecretsRequest struct { func (x *ListServerSecretsRequest) Reset() { *x = ListServerSecretsRequest{} - mi := &file_compass_v1_compass_proto_msgTypes[11] + mi := &file_compass_v1_compass_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1337,7 +1169,7 @@ func (x *ListServerSecretsRequest) String() string { func (*ListServerSecretsRequest) ProtoMessage() {} func (x *ListServerSecretsRequest) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[11] + mi := &file_compass_v1_compass_proto_msgTypes[7] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1350,7 +1182,7 @@ func (x *ListServerSecretsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListServerSecretsRequest.ProtoReflect.Descriptor instead. func (*ListServerSecretsRequest) Descriptor() ([]byte, []int) { - return file_compass_v1_compass_proto_rawDescGZIP(), []int{11} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{7} } type ListServerSecretsResponse struct { @@ -1362,7 +1194,7 @@ type ListServerSecretsResponse struct { func (x *ListServerSecretsResponse) Reset() { *x = ListServerSecretsResponse{} - mi := &file_compass_v1_compass_proto_msgTypes[12] + mi := &file_compass_v1_compass_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1374,7 +1206,7 @@ func (x *ListServerSecretsResponse) String() string { func (*ListServerSecretsResponse) ProtoMessage() {} func (x *ListServerSecretsResponse) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[12] + mi := &file_compass_v1_compass_proto_msgTypes[8] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1387,7 +1219,7 @@ func (x *ListServerSecretsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListServerSecretsResponse.ProtoReflect.Descriptor instead. func (*ListServerSecretsResponse) Descriptor() ([]byte, []int) { - return file_compass_v1_compass_proto_rawDescGZIP(), []int{12} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{8} } func (x *ListServerSecretsResponse) GetServerSecrets() []*ServerSecretStatus { @@ -1412,7 +1244,7 @@ type ServerSecretStatus struct { func (x *ServerSecretStatus) Reset() { *x = ServerSecretStatus{} - mi := &file_compass_v1_compass_proto_msgTypes[13] + mi := &file_compass_v1_compass_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1424,7 +1256,7 @@ func (x *ServerSecretStatus) String() string { func (*ServerSecretStatus) ProtoMessage() {} func (x *ServerSecretStatus) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[13] + mi := &file_compass_v1_compass_proto_msgTypes[9] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1437,7 +1269,7 @@ func (x *ServerSecretStatus) ProtoReflect() protoreflect.Message { // Deprecated: Use ServerSecretStatus.ProtoReflect.Descriptor instead. func (*ServerSecretStatus) Descriptor() ([]byte, []int) { - return file_compass_v1_compass_proto_rawDescGZIP(), []int{13} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{9} } func (x *ServerSecretStatus) GetName() string { @@ -1462,7 +1294,7 @@ type GetServerInfoRequest struct { func (x *GetServerInfoRequest) Reset() { *x = GetServerInfoRequest{} - mi := &file_compass_v1_compass_proto_msgTypes[14] + mi := &file_compass_v1_compass_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1474,7 +1306,7 @@ func (x *GetServerInfoRequest) String() string { func (*GetServerInfoRequest) ProtoMessage() {} func (x *GetServerInfoRequest) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[14] + mi := &file_compass_v1_compass_proto_msgTypes[10] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1487,7 +1319,7 @@ func (x *GetServerInfoRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetServerInfoRequest.ProtoReflect.Descriptor instead. func (*GetServerInfoRequest) Descriptor() ([]byte, []int) { - return file_compass_v1_compass_proto_rawDescGZIP(), []int{14} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{10} } type GetServerInfoResponse struct { @@ -1502,7 +1334,7 @@ type GetServerInfoResponse struct { func (x *GetServerInfoResponse) Reset() { *x = GetServerInfoResponse{} - mi := &file_compass_v1_compass_proto_msgTypes[15] + mi := &file_compass_v1_compass_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1514,7 +1346,7 @@ func (x *GetServerInfoResponse) String() string { func (*GetServerInfoResponse) ProtoMessage() {} func (x *GetServerInfoResponse) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[15] + mi := &file_compass_v1_compass_proto_msgTypes[11] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1527,7 +1359,7 @@ func (x *GetServerInfoResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetServerInfoResponse.ProtoReflect.Descriptor instead. func (*GetServerInfoResponse) Descriptor() ([]byte, []int) { - return file_compass_v1_compass_proto_rawDescGZIP(), []int{15} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{11} } func (x *GetServerInfoResponse) GetVersion() string { @@ -1552,7 +1384,7 @@ type WhoAmIRequest struct { func (x *WhoAmIRequest) Reset() { *x = WhoAmIRequest{} - mi := &file_compass_v1_compass_proto_msgTypes[16] + mi := &file_compass_v1_compass_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1564,7 +1396,7 @@ func (x *WhoAmIRequest) String() string { func (*WhoAmIRequest) ProtoMessage() {} func (x *WhoAmIRequest) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[16] + mi := &file_compass_v1_compass_proto_msgTypes[12] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1577,7 +1409,7 @@ func (x *WhoAmIRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use WhoAmIRequest.ProtoReflect.Descriptor instead. func (*WhoAmIRequest) Descriptor() ([]byte, []int) { - return file_compass_v1_compass_proto_rawDescGZIP(), []int{16} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{12} } type WhoAmIResponse struct { @@ -1591,7 +1423,7 @@ type WhoAmIResponse struct { func (x *WhoAmIResponse) Reset() { *x = WhoAmIResponse{} - mi := &file_compass_v1_compass_proto_msgTypes[17] + mi := &file_compass_v1_compass_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1603,7 +1435,7 @@ func (x *WhoAmIResponse) String() string { func (*WhoAmIResponse) ProtoMessage() {} func (x *WhoAmIResponse) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[17] + mi := &file_compass_v1_compass_proto_msgTypes[13] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1616,7 +1448,7 @@ func (x *WhoAmIResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use WhoAmIResponse.ProtoReflect.Descriptor instead. func (*WhoAmIResponse) Descriptor() ([]byte, []int) { - return file_compass_v1_compass_proto_rawDescGZIP(), []int{17} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{13} } func (x *WhoAmIResponse) GetAccountId() string { @@ -1645,7 +1477,7 @@ type SubscribeEventsRequest struct { func (x *SubscribeEventsRequest) Reset() { *x = SubscribeEventsRequest{} - mi := &file_compass_v1_compass_proto_msgTypes[18] + mi := &file_compass_v1_compass_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1657,7 +1489,7 @@ func (x *SubscribeEventsRequest) String() string { func (*SubscribeEventsRequest) ProtoMessage() {} func (x *SubscribeEventsRequest) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[18] + mi := &file_compass_v1_compass_proto_msgTypes[14] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1670,7 +1502,7 @@ func (x *SubscribeEventsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SubscribeEventsRequest.ProtoReflect.Descriptor instead. func (*SubscribeEventsRequest) Descriptor() ([]byte, []int) { - return file_compass_v1_compass_proto_rawDescGZIP(), []int{18} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{14} } func (x *SubscribeEventsRequest) GetSinceSeq() uint64 { @@ -1739,7 +1571,7 @@ type SubscribeEventsResponse struct { func (x *SubscribeEventsResponse) Reset() { *x = SubscribeEventsResponse{} - mi := &file_compass_v1_compass_proto_msgTypes[19] + mi := &file_compass_v1_compass_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1751,7 +1583,7 @@ func (x *SubscribeEventsResponse) String() string { func (*SubscribeEventsResponse) ProtoMessage() {} func (x *SubscribeEventsResponse) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[19] + mi := &file_compass_v1_compass_proto_msgTypes[15] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1764,7 +1596,7 @@ func (x *SubscribeEventsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SubscribeEventsResponse.ProtoReflect.Descriptor instead. func (*SubscribeEventsResponse) Descriptor() ([]byte, []int) { - return file_compass_v1_compass_proto_rawDescGZIP(), []int{19} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{15} } func (x *SubscribeEventsResponse) GetSeq() uint64 { @@ -1942,7 +1774,7 @@ type ListBoardIssuesRequest struct { func (x *ListBoardIssuesRequest) Reset() { *x = ListBoardIssuesRequest{} - mi := &file_compass_v1_compass_proto_msgTypes[20] + mi := &file_compass_v1_compass_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1954,7 +1786,7 @@ func (x *ListBoardIssuesRequest) String() string { func (*ListBoardIssuesRequest) ProtoMessage() {} func (x *ListBoardIssuesRequest) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[20] + mi := &file_compass_v1_compass_proto_msgTypes[16] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1967,7 +1799,7 @@ func (x *ListBoardIssuesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListBoardIssuesRequest.ProtoReflect.Descriptor instead. func (*ListBoardIssuesRequest) Descriptor() ([]byte, []int) { - return file_compass_v1_compass_proto_rawDescGZIP(), []int{20} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{16} } func (x *ListBoardIssuesRequest) GetSnapshotSeq() uint64 { @@ -1990,7 +1822,7 @@ type ListBoardIssuesResponse struct { func (x *ListBoardIssuesResponse) Reset() { *x = ListBoardIssuesResponse{} - mi := &file_compass_v1_compass_proto_msgTypes[21] + mi := &file_compass_v1_compass_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2002,7 +1834,7 @@ func (x *ListBoardIssuesResponse) String() string { func (*ListBoardIssuesResponse) ProtoMessage() {} func (x *ListBoardIssuesResponse) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[21] + mi := &file_compass_v1_compass_proto_msgTypes[17] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2015,7 +1847,7 @@ func (x *ListBoardIssuesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListBoardIssuesResponse.ProtoReflect.Descriptor instead. func (*ListBoardIssuesResponse) Descriptor() ([]byte, []int) { - return file_compass_v1_compass_proto_rawDescGZIP(), []int{21} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{17} } func (x *ListBoardIssuesResponse) GetIssues() []*Issue { @@ -2035,7 +1867,7 @@ type ServerStatus struct { func (x *ServerStatus) Reset() { *x = ServerStatus{} - mi := &file_compass_v1_compass_proto_msgTypes[22] + mi := &file_compass_v1_compass_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2047,7 +1879,7 @@ func (x *ServerStatus) String() string { func (*ServerStatus) ProtoMessage() {} func (x *ServerStatus) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[22] + mi := &file_compass_v1_compass_proto_msgTypes[18] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2060,7 +1892,7 @@ func (x *ServerStatus) ProtoReflect() protoreflect.Message { // Deprecated: Use ServerStatus.ProtoReflect.Descriptor instead. func (*ServerStatus) Descriptor() ([]byte, []int) { - return file_compass_v1_compass_proto_rawDescGZIP(), []int{22} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{18} } func (x *ServerStatus) GetState() ServerState { @@ -2082,7 +1914,7 @@ type ResyncRequired struct { func (x *ResyncRequired) Reset() { *x = ResyncRequired{} - mi := &file_compass_v1_compass_proto_msgTypes[23] + mi := &file_compass_v1_compass_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2094,7 +1926,7 @@ func (x *ResyncRequired) String() string { func (*ResyncRequired) ProtoMessage() {} func (x *ResyncRequired) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[23] + mi := &file_compass_v1_compass_proto_msgTypes[19] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2107,7 +1939,7 @@ func (x *ResyncRequired) ProtoReflect() protoreflect.Message { // Deprecated: Use ResyncRequired.ProtoReflect.Descriptor instead. func (*ResyncRequired) Descriptor() ([]byte, []int) { - return file_compass_v1_compass_proto_rawDescGZIP(), []int{23} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{19} } // The lifecycle state of one agent session, pushed on every transition. @@ -2139,7 +1971,7 @@ type AgentSessionStatus struct { func (x *AgentSessionStatus) Reset() { *x = AgentSessionStatus{} - mi := &file_compass_v1_compass_proto_msgTypes[24] + mi := &file_compass_v1_compass_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2151,7 +1983,7 @@ func (x *AgentSessionStatus) String() string { func (*AgentSessionStatus) ProtoMessage() {} func (x *AgentSessionStatus) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[24] + mi := &file_compass_v1_compass_proto_msgTypes[20] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2164,7 +1996,7 @@ func (x *AgentSessionStatus) ProtoReflect() protoreflect.Message { // Deprecated: Use AgentSessionStatus.ProtoReflect.Descriptor instead. func (*AgentSessionStatus) Descriptor() ([]byte, []int) { - return file_compass_v1_compass_proto_rawDescGZIP(), []int{24} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{20} } func (x *AgentSessionStatus) GetSessionId() string { @@ -2218,7 +2050,7 @@ type AgentMessageChunk struct { func (x *AgentMessageChunk) Reset() { *x = AgentMessageChunk{} - mi := &file_compass_v1_compass_proto_msgTypes[25] + mi := &file_compass_v1_compass_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2230,7 +2062,7 @@ func (x *AgentMessageChunk) String() string { func (*AgentMessageChunk) ProtoMessage() {} func (x *AgentMessageChunk) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[25] + mi := &file_compass_v1_compass_proto_msgTypes[21] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2243,7 +2075,7 @@ func (x *AgentMessageChunk) ProtoReflect() protoreflect.Message { // Deprecated: Use AgentMessageChunk.ProtoReflect.Descriptor instead. func (*AgentMessageChunk) Descriptor() ([]byte, []int) { - return file_compass_v1_compass_proto_rawDescGZIP(), []int{25} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{21} } func (x *AgentMessageChunk) GetSessionId() string { @@ -2284,7 +2116,7 @@ type AgentToolCall struct { func (x *AgentToolCall) Reset() { *x = AgentToolCall{} - mi := &file_compass_v1_compass_proto_msgTypes[26] + mi := &file_compass_v1_compass_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2296,7 +2128,7 @@ func (x *AgentToolCall) String() string { func (*AgentToolCall) ProtoMessage() {} func (x *AgentToolCall) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[26] + mi := &file_compass_v1_compass_proto_msgTypes[22] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2309,7 +2141,7 @@ func (x *AgentToolCall) ProtoReflect() protoreflect.Message { // Deprecated: Use AgentToolCall.ProtoReflect.Descriptor instead. func (*AgentToolCall) Descriptor() ([]byte, []int) { - return file_compass_v1_compass_proto_rawDescGZIP(), []int{26} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{22} } func (x *AgentToolCall) GetSessionId() string { @@ -2352,7 +2184,7 @@ type AgentPlan struct { func (x *AgentPlan) Reset() { *x = AgentPlan{} - mi := &file_compass_v1_compass_proto_msgTypes[27] + mi := &file_compass_v1_compass_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2364,7 +2196,7 @@ func (x *AgentPlan) String() string { func (*AgentPlan) ProtoMessage() {} func (x *AgentPlan) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[27] + mi := &file_compass_v1_compass_proto_msgTypes[23] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2377,7 +2209,7 @@ func (x *AgentPlan) ProtoReflect() protoreflect.Message { // Deprecated: Use AgentPlan.ProtoReflect.Descriptor instead. func (*AgentPlan) Descriptor() ([]byte, []int) { - return file_compass_v1_compass_proto_rawDescGZIP(), []int{27} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{23} } func (x *AgentPlan) GetSessionId() string { @@ -2405,7 +2237,7 @@ type AgentPlanEntry struct { func (x *AgentPlanEntry) Reset() { *x = AgentPlanEntry{} - mi := &file_compass_v1_compass_proto_msgTypes[28] + mi := &file_compass_v1_compass_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2417,7 +2249,7 @@ func (x *AgentPlanEntry) String() string { func (*AgentPlanEntry) ProtoMessage() {} func (x *AgentPlanEntry) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[28] + mi := &file_compass_v1_compass_proto_msgTypes[24] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2430,7 +2262,7 @@ func (x *AgentPlanEntry) ProtoReflect() protoreflect.Message { // Deprecated: Use AgentPlanEntry.ProtoReflect.Descriptor instead. func (*AgentPlanEntry) Descriptor() ([]byte, []int) { - return file_compass_v1_compass_proto_rawDescGZIP(), []int{28} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{24} } func (x *AgentPlanEntry) GetContent() string { @@ -2478,7 +2310,7 @@ type SessionEvent struct { func (x *SessionEvent) Reset() { *x = SessionEvent{} - mi := &file_compass_v1_compass_proto_msgTypes[29] + mi := &file_compass_v1_compass_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2490,7 +2322,7 @@ func (x *SessionEvent) String() string { func (*SessionEvent) ProtoMessage() {} func (x *SessionEvent) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[29] + mi := &file_compass_v1_compass_proto_msgTypes[25] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2503,7 +2335,7 @@ func (x *SessionEvent) ProtoReflect() protoreflect.Message { // Deprecated: Use SessionEvent.ProtoReflect.Descriptor instead. func (*SessionEvent) Descriptor() ([]byte, []int) { - return file_compass_v1_compass_proto_rawDescGZIP(), []int{29} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{25} } func (x *SessionEvent) GetEventId() string { @@ -2665,7 +2497,7 @@ type SessionAssistantText struct { func (x *SessionAssistantText) Reset() { *x = SessionAssistantText{} - mi := &file_compass_v1_compass_proto_msgTypes[30] + mi := &file_compass_v1_compass_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2677,7 +2509,7 @@ func (x *SessionAssistantText) String() string { func (*SessionAssistantText) ProtoMessage() {} func (x *SessionAssistantText) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[30] + mi := &file_compass_v1_compass_proto_msgTypes[26] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2690,7 +2522,7 @@ func (x *SessionAssistantText) ProtoReflect() protoreflect.Message { // Deprecated: Use SessionAssistantText.ProtoReflect.Descriptor instead. func (*SessionAssistantText) Descriptor() ([]byte, []int) { - return file_compass_v1_compass_proto_rawDescGZIP(), []int{30} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{26} } func (x *SessionAssistantText) GetText() string { @@ -2719,7 +2551,7 @@ type SessionThinking struct { func (x *SessionThinking) Reset() { *x = SessionThinking{} - mi := &file_compass_v1_compass_proto_msgTypes[31] + mi := &file_compass_v1_compass_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2731,7 +2563,7 @@ func (x *SessionThinking) String() string { func (*SessionThinking) ProtoMessage() {} func (x *SessionThinking) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[31] + mi := &file_compass_v1_compass_proto_msgTypes[27] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2744,7 +2576,7 @@ func (x *SessionThinking) ProtoReflect() protoreflect.Message { // Deprecated: Use SessionThinking.ProtoReflect.Descriptor instead. func (*SessionThinking) Descriptor() ([]byte, []int) { - return file_compass_v1_compass_proto_rawDescGZIP(), []int{31} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{27} } func (x *SessionThinking) GetText() string { @@ -2774,7 +2606,7 @@ type SessionToolCall struct { func (x *SessionToolCall) Reset() { *x = SessionToolCall{} - mi := &file_compass_v1_compass_proto_msgTypes[32] + mi := &file_compass_v1_compass_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2786,7 +2618,7 @@ func (x *SessionToolCall) String() string { func (*SessionToolCall) ProtoMessage() {} func (x *SessionToolCall) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[32] + mi := &file_compass_v1_compass_proto_msgTypes[28] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2799,7 +2631,7 @@ func (x *SessionToolCall) ProtoReflect() protoreflect.Message { // Deprecated: Use SessionToolCall.ProtoReflect.Descriptor instead. func (*SessionToolCall) Descriptor() ([]byte, []int) { - return file_compass_v1_compass_proto_rawDescGZIP(), []int{32} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{28} } func (x *SessionToolCall) GetToolCallId() string { @@ -2838,7 +2670,7 @@ type SessionToolCallUpdate struct { func (x *SessionToolCallUpdate) Reset() { *x = SessionToolCallUpdate{} - mi := &file_compass_v1_compass_proto_msgTypes[33] + mi := &file_compass_v1_compass_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2850,7 +2682,7 @@ func (x *SessionToolCallUpdate) String() string { func (*SessionToolCallUpdate) ProtoMessage() {} func (x *SessionToolCallUpdate) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[33] + mi := &file_compass_v1_compass_proto_msgTypes[29] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2863,7 +2695,7 @@ func (x *SessionToolCallUpdate) ProtoReflect() protoreflect.Message { // Deprecated: Use SessionToolCallUpdate.ProtoReflect.Descriptor instead. func (*SessionToolCallUpdate) Descriptor() ([]byte, []int) { - return file_compass_v1_compass_proto_rawDescGZIP(), []int{33} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{29} } func (x *SessionToolCallUpdate) GetToolCallId() string { @@ -2906,7 +2738,7 @@ type SessionFileDiff struct { func (x *SessionFileDiff) Reset() { *x = SessionFileDiff{} - mi := &file_compass_v1_compass_proto_msgTypes[34] + mi := &file_compass_v1_compass_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2918,7 +2750,7 @@ func (x *SessionFileDiff) String() string { func (*SessionFileDiff) ProtoMessage() {} func (x *SessionFileDiff) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[34] + mi := &file_compass_v1_compass_proto_msgTypes[30] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2931,7 +2763,7 @@ func (x *SessionFileDiff) ProtoReflect() protoreflect.Message { // Deprecated: Use SessionFileDiff.ProtoReflect.Descriptor instead. func (*SessionFileDiff) Descriptor() ([]byte, []int) { - return file_compass_v1_compass_proto_rawDescGZIP(), []int{34} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{30} } func (x *SessionFileDiff) GetPath() string { @@ -2965,7 +2797,7 @@ type SessionPlan struct { func (x *SessionPlan) Reset() { *x = SessionPlan{} - mi := &file_compass_v1_compass_proto_msgTypes[35] + mi := &file_compass_v1_compass_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2977,7 +2809,7 @@ func (x *SessionPlan) String() string { func (*SessionPlan) ProtoMessage() {} func (x *SessionPlan) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[35] + mi := &file_compass_v1_compass_proto_msgTypes[31] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2990,7 +2822,7 @@ func (x *SessionPlan) ProtoReflect() protoreflect.Message { // Deprecated: Use SessionPlan.ProtoReflect.Descriptor instead. func (*SessionPlan) Descriptor() ([]byte, []int) { - return file_compass_v1_compass_proto_rawDescGZIP(), []int{35} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{31} } func (x *SessionPlan) GetEntries() []*AgentPlanEntry { @@ -3012,7 +2844,7 @@ type SessionNotice struct { func (x *SessionNotice) Reset() { *x = SessionNotice{} - mi := &file_compass_v1_compass_proto_msgTypes[36] + mi := &file_compass_v1_compass_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3024,7 +2856,7 @@ func (x *SessionNotice) String() string { func (*SessionNotice) ProtoMessage() {} func (x *SessionNotice) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[36] + mi := &file_compass_v1_compass_proto_msgTypes[32] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3037,7 +2869,7 @@ func (x *SessionNotice) ProtoReflect() protoreflect.Message { // Deprecated: Use SessionNotice.ProtoReflect.Descriptor instead. func (*SessionNotice) Descriptor() ([]byte, []int) { - return file_compass_v1_compass_proto_rawDescGZIP(), []int{36} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{32} } func (x *SessionNotice) GetText() string { @@ -3086,7 +2918,7 @@ type SessionInjection struct { func (x *SessionInjection) Reset() { *x = SessionInjection{} - mi := &file_compass_v1_compass_proto_msgTypes[37] + mi := &file_compass_v1_compass_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3098,7 +2930,7 @@ func (x *SessionInjection) String() string { func (*SessionInjection) ProtoMessage() {} func (x *SessionInjection) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[37] + mi := &file_compass_v1_compass_proto_msgTypes[33] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3111,7 +2943,7 @@ func (x *SessionInjection) ProtoReflect() protoreflect.Message { // Deprecated: Use SessionInjection.ProtoReflect.Descriptor instead. func (*SessionInjection) Descriptor() ([]byte, []int) { - return file_compass_v1_compass_proto_rawDescGZIP(), []int{37} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{33} } func (x *SessionInjection) GetOpKind() SessionInjectionKind { @@ -3158,7 +2990,7 @@ type SessionError struct { func (x *SessionError) Reset() { *x = SessionError{} - mi := &file_compass_v1_compass_proto_msgTypes[38] + mi := &file_compass_v1_compass_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3170,7 +3002,7 @@ func (x *SessionError) String() string { func (*SessionError) ProtoMessage() {} func (x *SessionError) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[38] + mi := &file_compass_v1_compass_proto_msgTypes[34] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3183,7 +3015,7 @@ func (x *SessionError) ProtoReflect() protoreflect.Message { // Deprecated: Use SessionError.ProtoReflect.Descriptor instead. func (*SessionError) Descriptor() ([]byte, []int) { - return file_compass_v1_compass_proto_rawDescGZIP(), []int{38} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{34} } func (x *SessionError) GetKind() SessionErrorKind { @@ -3217,7 +3049,7 @@ type SubscribeAgentSessionRequest struct { func (x *SubscribeAgentSessionRequest) Reset() { *x = SubscribeAgentSessionRequest{} - mi := &file_compass_v1_compass_proto_msgTypes[39] + mi := &file_compass_v1_compass_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3229,7 +3061,7 @@ func (x *SubscribeAgentSessionRequest) String() string { func (*SubscribeAgentSessionRequest) ProtoMessage() {} func (x *SubscribeAgentSessionRequest) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[39] + mi := &file_compass_v1_compass_proto_msgTypes[35] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3242,7 +3074,7 @@ func (x *SubscribeAgentSessionRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SubscribeAgentSessionRequest.ProtoReflect.Descriptor instead. func (*SubscribeAgentSessionRequest) Descriptor() ([]byte, []int) { - return file_compass_v1_compass_proto_rawDescGZIP(), []int{39} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{35} } func (x *SubscribeAgentSessionRequest) GetSessionId() string { @@ -3266,7 +3098,7 @@ type AgentSessionFrame struct { func (x *AgentSessionFrame) Reset() { *x = AgentSessionFrame{} - mi := &file_compass_v1_compass_proto_msgTypes[40] + mi := &file_compass_v1_compass_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3278,7 +3110,7 @@ func (x *AgentSessionFrame) String() string { func (*AgentSessionFrame) ProtoMessage() {} func (x *AgentSessionFrame) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[40] + mi := &file_compass_v1_compass_proto_msgTypes[36] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3291,7 +3123,7 @@ func (x *AgentSessionFrame) ProtoReflect() protoreflect.Message { // Deprecated: Use AgentSessionFrame.ProtoReflect.Descriptor instead. func (*AgentSessionFrame) Descriptor() ([]byte, []int) { - return file_compass_v1_compass_proto_rawDescGZIP(), []int{40} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{36} } func (x *AgentSessionFrame) GetSessionId() string { @@ -3369,7 +3201,7 @@ type ProvisionAgentWorkspaceRequest struct { func (x *ProvisionAgentWorkspaceRequest) Reset() { *x = ProvisionAgentWorkspaceRequest{} - mi := &file_compass_v1_compass_proto_msgTypes[41] + mi := &file_compass_v1_compass_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3381,7 +3213,7 @@ func (x *ProvisionAgentWorkspaceRequest) String() string { func (*ProvisionAgentWorkspaceRequest) ProtoMessage() {} func (x *ProvisionAgentWorkspaceRequest) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[41] + mi := &file_compass_v1_compass_proto_msgTypes[37] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3394,7 +3226,7 @@ func (x *ProvisionAgentWorkspaceRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ProvisionAgentWorkspaceRequest.ProtoReflect.Descriptor instead. func (*ProvisionAgentWorkspaceRequest) Descriptor() ([]byte, []int) { - return file_compass_v1_compass_proto_rawDescGZIP(), []int{41} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{37} } func (x *ProvisionAgentWorkspaceRequest) GetAgentHandle() string { @@ -3436,7 +3268,7 @@ type ProvisionAgentWorkspaceResponse struct { func (x *ProvisionAgentWorkspaceResponse) Reset() { *x = ProvisionAgentWorkspaceResponse{} - mi := &file_compass_v1_compass_proto_msgTypes[42] + mi := &file_compass_v1_compass_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3448,7 +3280,7 @@ func (x *ProvisionAgentWorkspaceResponse) String() string { func (*ProvisionAgentWorkspaceResponse) ProtoMessage() {} func (x *ProvisionAgentWorkspaceResponse) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[42] + mi := &file_compass_v1_compass_proto_msgTypes[38] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3461,7 +3293,7 @@ func (x *ProvisionAgentWorkspaceResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ProvisionAgentWorkspaceResponse.ProtoReflect.Descriptor instead. func (*ProvisionAgentWorkspaceResponse) Descriptor() ([]byte, []int) { - return file_compass_v1_compass_proto_rawDescGZIP(), []int{42} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{38} } func (x *ProvisionAgentWorkspaceResponse) GetContainerName() string { @@ -3488,7 +3320,7 @@ type RemoveAgentWorkspaceRequest struct { func (x *RemoveAgentWorkspaceRequest) Reset() { *x = RemoveAgentWorkspaceRequest{} - mi := &file_compass_v1_compass_proto_msgTypes[43] + mi := &file_compass_v1_compass_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3500,7 +3332,7 @@ func (x *RemoveAgentWorkspaceRequest) String() string { func (*RemoveAgentWorkspaceRequest) ProtoMessage() {} func (x *RemoveAgentWorkspaceRequest) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[43] + mi := &file_compass_v1_compass_proto_msgTypes[39] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3513,7 +3345,7 @@ func (x *RemoveAgentWorkspaceRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RemoveAgentWorkspaceRequest.ProtoReflect.Descriptor instead. func (*RemoveAgentWorkspaceRequest) Descriptor() ([]byte, []int) { - return file_compass_v1_compass_proto_rawDescGZIP(), []int{43} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{39} } func (x *RemoveAgentWorkspaceRequest) GetContainerName() string { @@ -3538,7 +3370,7 @@ type RemoveAgentWorkspaceResponse struct { func (x *RemoveAgentWorkspaceResponse) Reset() { *x = RemoveAgentWorkspaceResponse{} - mi := &file_compass_v1_compass_proto_msgTypes[44] + mi := &file_compass_v1_compass_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3550,7 +3382,7 @@ func (x *RemoveAgentWorkspaceResponse) String() string { func (*RemoveAgentWorkspaceResponse) ProtoMessage() {} func (x *RemoveAgentWorkspaceResponse) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[44] + mi := &file_compass_v1_compass_proto_msgTypes[40] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3563,7 +3395,7 @@ func (x *RemoveAgentWorkspaceResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RemoveAgentWorkspaceResponse.ProtoReflect.Descriptor instead. func (*RemoveAgentWorkspaceResponse) Descriptor() ([]byte, []int) { - return file_compass_v1_compass_proto_rawDescGZIP(), []int{44} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{40} } // StartAgentSession: bring the first-party agent in a provisioned container @@ -3584,7 +3416,7 @@ type StartAgentSessionRequest struct { func (x *StartAgentSessionRequest) Reset() { *x = StartAgentSessionRequest{} - mi := &file_compass_v1_compass_proto_msgTypes[45] + mi := &file_compass_v1_compass_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3596,7 +3428,7 @@ func (x *StartAgentSessionRequest) String() string { func (*StartAgentSessionRequest) ProtoMessage() {} func (x *StartAgentSessionRequest) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[45] + mi := &file_compass_v1_compass_proto_msgTypes[41] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3609,7 +3441,7 @@ func (x *StartAgentSessionRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StartAgentSessionRequest.ProtoReflect.Descriptor instead. func (*StartAgentSessionRequest) Descriptor() ([]byte, []int) { - return file_compass_v1_compass_proto_rawDescGZIP(), []int{45} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{41} } func (x *StartAgentSessionRequest) GetContainerName() string { @@ -3637,7 +3469,7 @@ type StartAgentSessionResponse struct { func (x *StartAgentSessionResponse) Reset() { *x = StartAgentSessionResponse{} - mi := &file_compass_v1_compass_proto_msgTypes[46] + mi := &file_compass_v1_compass_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3649,7 +3481,7 @@ func (x *StartAgentSessionResponse) String() string { func (*StartAgentSessionResponse) ProtoMessage() {} func (x *StartAgentSessionResponse) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[46] + mi := &file_compass_v1_compass_proto_msgTypes[42] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3662,7 +3494,7 @@ func (x *StartAgentSessionResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use StartAgentSessionResponse.ProtoReflect.Descriptor instead. func (*StartAgentSessionResponse) Descriptor() ([]byte, []int) { - return file_compass_v1_compass_proto_rawDescGZIP(), []int{46} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{42} } func (x *StartAgentSessionResponse) GetSessionId() string { @@ -3693,7 +3525,7 @@ type SpawnAgentRequest struct { func (x *SpawnAgentRequest) Reset() { *x = SpawnAgentRequest{} - mi := &file_compass_v1_compass_proto_msgTypes[47] + mi := &file_compass_v1_compass_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3705,7 +3537,7 @@ func (x *SpawnAgentRequest) String() string { func (*SpawnAgentRequest) ProtoMessage() {} func (x *SpawnAgentRequest) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[47] + mi := &file_compass_v1_compass_proto_msgTypes[43] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3718,7 +3550,7 @@ func (x *SpawnAgentRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SpawnAgentRequest.ProtoReflect.Descriptor instead. func (*SpawnAgentRequest) Descriptor() ([]byte, []int) { - return file_compass_v1_compass_proto_rawDescGZIP(), []int{47} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{43} } func (x *SpawnAgentRequest) GetAgentHandle() string { @@ -3750,7 +3582,7 @@ type SpawnAgentResponse struct { func (x *SpawnAgentResponse) Reset() { *x = SpawnAgentResponse{} - mi := &file_compass_v1_compass_proto_msgTypes[48] + mi := &file_compass_v1_compass_proto_msgTypes[44] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3762,7 +3594,7 @@ func (x *SpawnAgentResponse) String() string { func (*SpawnAgentResponse) ProtoMessage() {} func (x *SpawnAgentResponse) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[48] + mi := &file_compass_v1_compass_proto_msgTypes[44] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3775,7 +3607,7 @@ func (x *SpawnAgentResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SpawnAgentResponse.ProtoReflect.Descriptor instead. func (*SpawnAgentResponse) Descriptor() ([]byte, []int) { - return file_compass_v1_compass_proto_rawDescGZIP(), []int{48} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{44} } func (x *SpawnAgentResponse) GetSessionId() string { @@ -3801,7 +3633,7 @@ type StopAgentSessionRequest struct { func (x *StopAgentSessionRequest) Reset() { *x = StopAgentSessionRequest{} - mi := &file_compass_v1_compass_proto_msgTypes[49] + mi := &file_compass_v1_compass_proto_msgTypes[45] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3813,7 +3645,7 @@ func (x *StopAgentSessionRequest) String() string { func (*StopAgentSessionRequest) ProtoMessage() {} func (x *StopAgentSessionRequest) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[49] + mi := &file_compass_v1_compass_proto_msgTypes[45] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3826,7 +3658,7 @@ func (x *StopAgentSessionRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StopAgentSessionRequest.ProtoReflect.Descriptor instead. func (*StopAgentSessionRequest) Descriptor() ([]byte, []int) { - return file_compass_v1_compass_proto_rawDescGZIP(), []int{49} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{45} } func (x *StopAgentSessionRequest) GetSessionId() string { @@ -3844,7 +3676,7 @@ type StopAgentSessionResponse struct { func (x *StopAgentSessionResponse) Reset() { *x = StopAgentSessionResponse{} - mi := &file_compass_v1_compass_proto_msgTypes[50] + mi := &file_compass_v1_compass_proto_msgTypes[46] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3856,7 +3688,7 @@ func (x *StopAgentSessionResponse) String() string { func (*StopAgentSessionResponse) ProtoMessage() {} func (x *StopAgentSessionResponse) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[50] + mi := &file_compass_v1_compass_proto_msgTypes[46] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3869,7 +3701,7 @@ func (x *StopAgentSessionResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use StopAgentSessionResponse.ProtoReflect.Descriptor instead. func (*StopAgentSessionResponse) Descriptor() ([]byte, []int) { - return file_compass_v1_compass_proto_rawDescGZIP(), []int{50} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{46} } type ReloadAgentSessionRequest struct { @@ -3881,7 +3713,7 @@ type ReloadAgentSessionRequest struct { func (x *ReloadAgentSessionRequest) Reset() { *x = ReloadAgentSessionRequest{} - mi := &file_compass_v1_compass_proto_msgTypes[51] + mi := &file_compass_v1_compass_proto_msgTypes[47] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3893,7 +3725,7 @@ func (x *ReloadAgentSessionRequest) String() string { func (*ReloadAgentSessionRequest) ProtoMessage() {} func (x *ReloadAgentSessionRequest) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[51] + mi := &file_compass_v1_compass_proto_msgTypes[47] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3906,7 +3738,7 @@ func (x *ReloadAgentSessionRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ReloadAgentSessionRequest.ProtoReflect.Descriptor instead. func (*ReloadAgentSessionRequest) Descriptor() ([]byte, []int) { - return file_compass_v1_compass_proto_rawDescGZIP(), []int{51} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{47} } func (x *ReloadAgentSessionRequest) GetSessionId() string { @@ -3926,7 +3758,7 @@ type ReloadAgentSessionResponse struct { func (x *ReloadAgentSessionResponse) Reset() { *x = ReloadAgentSessionResponse{} - mi := &file_compass_v1_compass_proto_msgTypes[52] + mi := &file_compass_v1_compass_proto_msgTypes[48] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3938,7 +3770,7 @@ func (x *ReloadAgentSessionResponse) String() string { func (*ReloadAgentSessionResponse) ProtoMessage() {} func (x *ReloadAgentSessionResponse) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[52] + mi := &file_compass_v1_compass_proto_msgTypes[48] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3951,7 +3783,7 @@ func (x *ReloadAgentSessionResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ReloadAgentSessionResponse.ProtoReflect.Descriptor instead. func (*ReloadAgentSessionResponse) Descriptor() ([]byte, []int) { - return file_compass_v1_compass_proto_rawDescGZIP(), []int{52} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{48} } func (x *ReloadAgentSessionResponse) GetSessionId() string { @@ -3972,7 +3804,7 @@ type GetAgentStatusRequest struct { func (x *GetAgentStatusRequest) Reset() { *x = GetAgentStatusRequest{} - mi := &file_compass_v1_compass_proto_msgTypes[53] + mi := &file_compass_v1_compass_proto_msgTypes[49] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3984,7 +3816,7 @@ func (x *GetAgentStatusRequest) String() string { func (*GetAgentStatusRequest) ProtoMessage() {} func (x *GetAgentStatusRequest) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[53] + mi := &file_compass_v1_compass_proto_msgTypes[49] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3997,7 +3829,7 @@ func (x *GetAgentStatusRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetAgentStatusRequest.ProtoReflect.Descriptor instead. func (*GetAgentStatusRequest) Descriptor() ([]byte, []int) { - return file_compass_v1_compass_proto_rawDescGZIP(), []int{53} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{49} } func (x *GetAgentStatusRequest) GetSessionId() string { @@ -4016,7 +3848,7 @@ type GetAgentStatusResponse struct { func (x *GetAgentStatusResponse) Reset() { *x = GetAgentStatusResponse{} - mi := &file_compass_v1_compass_proto_msgTypes[54] + mi := &file_compass_v1_compass_proto_msgTypes[50] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4028,7 +3860,7 @@ func (x *GetAgentStatusResponse) String() string { func (*GetAgentStatusResponse) ProtoMessage() {} func (x *GetAgentStatusResponse) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[54] + mi := &file_compass_v1_compass_proto_msgTypes[50] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4041,7 +3873,7 @@ func (x *GetAgentStatusResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetAgentStatusResponse.ProtoReflect.Descriptor instead. func (*GetAgentStatusResponse) Descriptor() ([]byte, []int) { - return file_compass_v1_compass_proto_rawDescGZIP(), []int{54} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{50} } func (x *GetAgentStatusResponse) GetStatuses() []*AgentSessionStatus { @@ -4064,7 +3896,7 @@ type IssueTokenRequest struct { func (x *IssueTokenRequest) Reset() { *x = IssueTokenRequest{} - mi := &file_compass_v1_compass_proto_msgTypes[55] + mi := &file_compass_v1_compass_proto_msgTypes[51] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4076,7 +3908,7 @@ func (x *IssueTokenRequest) String() string { func (*IssueTokenRequest) ProtoMessage() {} func (x *IssueTokenRequest) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[55] + mi := &file_compass_v1_compass_proto_msgTypes[51] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4089,7 +3921,7 @@ func (x *IssueTokenRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use IssueTokenRequest.ProtoReflect.Descriptor instead. func (*IssueTokenRequest) Descriptor() ([]byte, []int) { - return file_compass_v1_compass_proto_rawDescGZIP(), []int{55} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{51} } func (x *IssueTokenRequest) GetAccountHandle() string { @@ -4111,7 +3943,7 @@ type IssueTokenResponse struct { func (x *IssueTokenResponse) Reset() { *x = IssueTokenResponse{} - mi := &file_compass_v1_compass_proto_msgTypes[56] + mi := &file_compass_v1_compass_proto_msgTypes[52] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4123,7 +3955,7 @@ func (x *IssueTokenResponse) String() string { func (*IssueTokenResponse) ProtoMessage() {} func (x *IssueTokenResponse) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[56] + mi := &file_compass_v1_compass_proto_msgTypes[52] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4136,7 +3968,7 @@ func (x *IssueTokenResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use IssueTokenResponse.ProtoReflect.Descriptor instead. func (*IssueTokenResponse) Descriptor() ([]byte, []int) { - return file_compass_v1_compass_proto_rawDescGZIP(), []int{56} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{52} } func (x *IssueTokenResponse) GetToken() string { @@ -4160,7 +3992,7 @@ type RevokeTokenRequest struct { func (x *RevokeTokenRequest) Reset() { *x = RevokeTokenRequest{} - mi := &file_compass_v1_compass_proto_msgTypes[57] + mi := &file_compass_v1_compass_proto_msgTypes[53] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4172,7 +4004,7 @@ func (x *RevokeTokenRequest) String() string { func (*RevokeTokenRequest) ProtoMessage() {} func (x *RevokeTokenRequest) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[57] + mi := &file_compass_v1_compass_proto_msgTypes[53] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4185,7 +4017,7 @@ func (x *RevokeTokenRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RevokeTokenRequest.ProtoReflect.Descriptor instead. func (*RevokeTokenRequest) Descriptor() ([]byte, []int) { - return file_compass_v1_compass_proto_rawDescGZIP(), []int{57} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{53} } func (x *RevokeTokenRequest) GetToken() string { @@ -4203,7 +4035,7 @@ type RevokeTokenResponse struct { func (x *RevokeTokenResponse) Reset() { *x = RevokeTokenResponse{} - mi := &file_compass_v1_compass_proto_msgTypes[58] + mi := &file_compass_v1_compass_proto_msgTypes[54] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4215,7 +4047,7 @@ func (x *RevokeTokenResponse) String() string { func (*RevokeTokenResponse) ProtoMessage() {} func (x *RevokeTokenResponse) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[58] + mi := &file_compass_v1_compass_proto_msgTypes[54] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4228,7 +4060,7 @@ func (x *RevokeTokenResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RevokeTokenResponse.ProtoReflect.Descriptor instead. func (*RevokeTokenResponse) Descriptor() ([]byte, []int) { - return file_compass_v1_compass_proto_rawDescGZIP(), []int{58} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{54} } // PutAgentConfig: declare the fleet config bundle. The caller's identity is the @@ -4244,7 +4076,7 @@ type PutAgentConfigRequest struct { func (x *PutAgentConfigRequest) Reset() { *x = PutAgentConfigRequest{} - mi := &file_compass_v1_compass_proto_msgTypes[59] + mi := &file_compass_v1_compass_proto_msgTypes[55] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4256,7 +4088,7 @@ func (x *PutAgentConfigRequest) String() string { func (*PutAgentConfigRequest) ProtoMessage() {} func (x *PutAgentConfigRequest) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[59] + mi := &file_compass_v1_compass_proto_msgTypes[55] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4269,7 +4101,7 @@ func (x *PutAgentConfigRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use PutAgentConfigRequest.ProtoReflect.Descriptor instead. func (*PutAgentConfigRequest) Descriptor() ([]byte, []int) { - return file_compass_v1_compass_proto_rawDescGZIP(), []int{59} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{55} } func (x *PutAgentConfigRequest) GetBundle() []byte { @@ -4291,7 +4123,7 @@ type PutAgentConfigResponse struct { func (x *PutAgentConfigResponse) Reset() { *x = PutAgentConfigResponse{} - mi := &file_compass_v1_compass_proto_msgTypes[60] + mi := &file_compass_v1_compass_proto_msgTypes[56] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4303,7 +4135,7 @@ func (x *PutAgentConfigResponse) String() string { func (*PutAgentConfigResponse) ProtoMessage() {} func (x *PutAgentConfigResponse) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[60] + mi := &file_compass_v1_compass_proto_msgTypes[56] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4316,7 +4148,7 @@ func (x *PutAgentConfigResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use PutAgentConfigResponse.ProtoReflect.Descriptor instead. func (*PutAgentConfigResponse) Descriptor() ([]byte, []int) { - return file_compass_v1_compass_proto_rawDescGZIP(), []int{60} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{56} } func (x *PutAgentConfigResponse) GetVersion() string { @@ -4334,7 +4166,7 @@ type GetAgentConfigInfoRequest struct { func (x *GetAgentConfigInfoRequest) Reset() { *x = GetAgentConfigInfoRequest{} - mi := &file_compass_v1_compass_proto_msgTypes[61] + mi := &file_compass_v1_compass_proto_msgTypes[57] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4346,7 +4178,7 @@ func (x *GetAgentConfigInfoRequest) String() string { func (*GetAgentConfigInfoRequest) ProtoMessage() {} func (x *GetAgentConfigInfoRequest) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[61] + mi := &file_compass_v1_compass_proto_msgTypes[57] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4359,7 +4191,7 @@ func (x *GetAgentConfigInfoRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetAgentConfigInfoRequest.ProtoReflect.Descriptor instead. func (*GetAgentConfigInfoRequest) Descriptor() ([]byte, []int) { - return file_compass_v1_compass_proto_rawDescGZIP(), []int{61} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{57} } // GetAgentConfigInfo: the current bundle's version and member names by top dir — @@ -4394,7 +4226,7 @@ type GetAgentConfigInfoResponse struct { func (x *GetAgentConfigInfoResponse) Reset() { *x = GetAgentConfigInfoResponse{} - mi := &file_compass_v1_compass_proto_msgTypes[62] + mi := &file_compass_v1_compass_proto_msgTypes[58] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4406,7 +4238,7 @@ func (x *GetAgentConfigInfoResponse) String() string { func (*GetAgentConfigInfoResponse) ProtoMessage() {} func (x *GetAgentConfigInfoResponse) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[62] + mi := &file_compass_v1_compass_proto_msgTypes[58] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4419,7 +4251,7 @@ func (x *GetAgentConfigInfoResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetAgentConfigInfoResponse.ProtoReflect.Descriptor instead. func (*GetAgentConfigInfoResponse) Descriptor() ([]byte, []int) { - return file_compass_v1_compass_proto_rawDescGZIP(), []int{62} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{58} } func (x *GetAgentConfigInfoResponse) GetVersion() string { @@ -4500,7 +4332,7 @@ type DeleteAgentConfigRequest struct { func (x *DeleteAgentConfigRequest) Reset() { *x = DeleteAgentConfigRequest{} - mi := &file_compass_v1_compass_proto_msgTypes[63] + mi := &file_compass_v1_compass_proto_msgTypes[59] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4512,7 +4344,7 @@ func (x *DeleteAgentConfigRequest) String() string { func (*DeleteAgentConfigRequest) ProtoMessage() {} func (x *DeleteAgentConfigRequest) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[63] + mi := &file_compass_v1_compass_proto_msgTypes[59] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4525,7 +4357,7 @@ func (x *DeleteAgentConfigRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteAgentConfigRequest.ProtoReflect.Descriptor instead. func (*DeleteAgentConfigRequest) Descriptor() ([]byte, []int) { - return file_compass_v1_compass_proto_rawDescGZIP(), []int{63} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{59} } type DeleteAgentConfigResponse struct { @@ -4536,7 +4368,7 @@ type DeleteAgentConfigResponse struct { func (x *DeleteAgentConfigResponse) Reset() { *x = DeleteAgentConfigResponse{} - mi := &file_compass_v1_compass_proto_msgTypes[64] + mi := &file_compass_v1_compass_proto_msgTypes[60] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4548,7 +4380,7 @@ func (x *DeleteAgentConfigResponse) String() string { func (*DeleteAgentConfigResponse) ProtoMessage() {} func (x *DeleteAgentConfigResponse) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[64] + mi := &file_compass_v1_compass_proto_msgTypes[60] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4561,7 +4393,7 @@ func (x *DeleteAgentConfigResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteAgentConfigResponse.ProtoReflect.Descriptor instead. func (*DeleteAgentConfigResponse) Descriptor() ([]byte, []int) { - return file_compass_v1_compass_proto_rawDescGZIP(), []int{64} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{60} } // One candidate in a stable name's ordered chain: an upstream (provider, @@ -4579,7 +4411,7 @@ type ModelCandidate struct { func (x *ModelCandidate) Reset() { *x = ModelCandidate{} - mi := &file_compass_v1_compass_proto_msgTypes[65] + mi := &file_compass_v1_compass_proto_msgTypes[61] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4591,7 +4423,7 @@ func (x *ModelCandidate) String() string { func (*ModelCandidate) ProtoMessage() {} func (x *ModelCandidate) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[65] + mi := &file_compass_v1_compass_proto_msgTypes[61] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4604,7 +4436,7 @@ func (x *ModelCandidate) ProtoReflect() protoreflect.Message { // Deprecated: Use ModelCandidate.ProtoReflect.Descriptor instead. func (*ModelCandidate) Descriptor() ([]byte, []int) { - return file_compass_v1_compass_proto_rawDescGZIP(), []int{65} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{61} } func (x *ModelCandidate) GetProvider() string { @@ -4641,7 +4473,7 @@ type ModelMetadata struct { func (x *ModelMetadata) Reset() { *x = ModelMetadata{} - mi := &file_compass_v1_compass_proto_msgTypes[66] + mi := &file_compass_v1_compass_proto_msgTypes[62] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4653,7 +4485,7 @@ func (x *ModelMetadata) String() string { func (*ModelMetadata) ProtoMessage() {} func (x *ModelMetadata) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[66] + mi := &file_compass_v1_compass_proto_msgTypes[62] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4666,7 +4498,7 @@ func (x *ModelMetadata) ProtoReflect() protoreflect.Message { // Deprecated: Use ModelMetadata.ProtoReflect.Descriptor instead. func (*ModelMetadata) Descriptor() ([]byte, []int) { - return file_compass_v1_compass_proto_rawDescGZIP(), []int{66} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{62} } func (x *ModelMetadata) GetContextWindow() int64 { @@ -4710,7 +4542,7 @@ type ModelRegistryEntry struct { func (x *ModelRegistryEntry) Reset() { *x = ModelRegistryEntry{} - mi := &file_compass_v1_compass_proto_msgTypes[67] + mi := &file_compass_v1_compass_proto_msgTypes[63] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4722,7 +4554,7 @@ func (x *ModelRegistryEntry) String() string { func (*ModelRegistryEntry) ProtoMessage() {} func (x *ModelRegistryEntry) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[67] + mi := &file_compass_v1_compass_proto_msgTypes[63] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4735,7 +4567,7 @@ func (x *ModelRegistryEntry) ProtoReflect() protoreflect.Message { // Deprecated: Use ModelRegistryEntry.ProtoReflect.Descriptor instead. func (*ModelRegistryEntry) Descriptor() ([]byte, []int) { - return file_compass_v1_compass_proto_rawDescGZIP(), []int{67} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{63} } func (x *ModelRegistryEntry) GetDisplayName() string { @@ -4770,7 +4602,7 @@ type ModelRegistry struct { func (x *ModelRegistry) Reset() { *x = ModelRegistry{} - mi := &file_compass_v1_compass_proto_msgTypes[68] + mi := &file_compass_v1_compass_proto_msgTypes[64] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4782,7 +4614,7 @@ func (x *ModelRegistry) String() string { func (*ModelRegistry) ProtoMessage() {} func (x *ModelRegistry) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[68] + mi := &file_compass_v1_compass_proto_msgTypes[64] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4795,7 +4627,7 @@ func (x *ModelRegistry) ProtoReflect() protoreflect.Message { // Deprecated: Use ModelRegistry.ProtoReflect.Descriptor instead. func (*ModelRegistry) Descriptor() ([]byte, []int) { - return file_compass_v1_compass_proto_rawDescGZIP(), []int{68} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{64} } func (x *ModelRegistry) GetEntries() map[string]*ModelRegistryEntry { @@ -4821,7 +4653,7 @@ type PutModelRegistryRequest struct { func (x *PutModelRegistryRequest) Reset() { *x = PutModelRegistryRequest{} - mi := &file_compass_v1_compass_proto_msgTypes[69] + mi := &file_compass_v1_compass_proto_msgTypes[65] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4833,7 +4665,7 @@ func (x *PutModelRegistryRequest) String() string { func (*PutModelRegistryRequest) ProtoMessage() {} func (x *PutModelRegistryRequest) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[69] + mi := &file_compass_v1_compass_proto_msgTypes[65] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4846,7 +4678,7 @@ func (x *PutModelRegistryRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use PutModelRegistryRequest.ProtoReflect.Descriptor instead. func (*PutModelRegistryRequest) Descriptor() ([]byte, []int) { - return file_compass_v1_compass_proto_rawDescGZIP(), []int{69} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{65} } func (x *PutModelRegistryRequest) GetRegistry() *ModelRegistry { @@ -4873,7 +4705,7 @@ type PutModelRegistryResponse struct { func (x *PutModelRegistryResponse) Reset() { *x = PutModelRegistryResponse{} - mi := &file_compass_v1_compass_proto_msgTypes[70] + mi := &file_compass_v1_compass_proto_msgTypes[66] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4885,7 +4717,7 @@ func (x *PutModelRegistryResponse) String() string { func (*PutModelRegistryResponse) ProtoMessage() {} func (x *PutModelRegistryResponse) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[70] + mi := &file_compass_v1_compass_proto_msgTypes[66] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4898,7 +4730,7 @@ func (x *PutModelRegistryResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use PutModelRegistryResponse.ProtoReflect.Descriptor instead. func (*PutModelRegistryResponse) Descriptor() ([]byte, []int) { - return file_compass_v1_compass_proto_rawDescGZIP(), []int{70} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{66} } func (x *PutModelRegistryResponse) GetVersion() int64 { @@ -4916,7 +4748,7 @@ type GetModelRegistryRequest struct { func (x *GetModelRegistryRequest) Reset() { *x = GetModelRegistryRequest{} - mi := &file_compass_v1_compass_proto_msgTypes[71] + mi := &file_compass_v1_compass_proto_msgTypes[67] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4928,7 +4760,7 @@ func (x *GetModelRegistryRequest) String() string { func (*GetModelRegistryRequest) ProtoMessage() {} func (x *GetModelRegistryRequest) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[71] + mi := &file_compass_v1_compass_proto_msgTypes[67] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4941,7 +4773,7 @@ func (x *GetModelRegistryRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetModelRegistryRequest.ProtoReflect.Descriptor instead. func (*GetModelRegistryRequest) Descriptor() ([]byte, []int) { - return file_compass_v1_compass_proto_rawDescGZIP(), []int{71} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{67} } // GetModelRegistry: the current registry version and payload. An unconfigured @@ -4956,7 +4788,7 @@ type GetModelRegistryResponse struct { func (x *GetModelRegistryResponse) Reset() { *x = GetModelRegistryResponse{} - mi := &file_compass_v1_compass_proto_msgTypes[72] + mi := &file_compass_v1_compass_proto_msgTypes[68] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4968,7 +4800,7 @@ func (x *GetModelRegistryResponse) String() string { func (*GetModelRegistryResponse) ProtoMessage() {} func (x *GetModelRegistryResponse) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[72] + mi := &file_compass_v1_compass_proto_msgTypes[68] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4981,7 +4813,7 @@ func (x *GetModelRegistryResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetModelRegistryResponse.ProtoReflect.Descriptor instead. func (*GetModelRegistryResponse) Descriptor() ([]byte, []int) { - return file_compass_v1_compass_proto_rawDescGZIP(), []int{72} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{68} } func (x *GetModelRegistryResponse) GetVersion() int64 { @@ -5006,7 +4838,7 @@ type DeleteModelRegistryRequest struct { func (x *DeleteModelRegistryRequest) Reset() { *x = DeleteModelRegistryRequest{} - mi := &file_compass_v1_compass_proto_msgTypes[73] + mi := &file_compass_v1_compass_proto_msgTypes[69] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5018,7 +4850,7 @@ func (x *DeleteModelRegistryRequest) String() string { func (*DeleteModelRegistryRequest) ProtoMessage() {} func (x *DeleteModelRegistryRequest) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[73] + mi := &file_compass_v1_compass_proto_msgTypes[69] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5031,7 +4863,7 @@ func (x *DeleteModelRegistryRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteModelRegistryRequest.ProtoReflect.Descriptor instead. func (*DeleteModelRegistryRequest) Descriptor() ([]byte, []int) { - return file_compass_v1_compass_proto_rawDescGZIP(), []int{73} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{69} } type DeleteModelRegistryResponse struct { @@ -5042,7 +4874,7 @@ type DeleteModelRegistryResponse struct { func (x *DeleteModelRegistryResponse) Reset() { *x = DeleteModelRegistryResponse{} - mi := &file_compass_v1_compass_proto_msgTypes[74] + mi := &file_compass_v1_compass_proto_msgTypes[70] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5054,7 +4886,7 @@ func (x *DeleteModelRegistryResponse) String() string { func (*DeleteModelRegistryResponse) ProtoMessage() {} func (x *DeleteModelRegistryResponse) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[74] + mi := &file_compass_v1_compass_proto_msgTypes[70] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5067,7 +4899,7 @@ func (x *DeleteModelRegistryResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteModelRegistryResponse.ProtoReflect.Descriptor instead. func (*DeleteModelRegistryResponse) Descriptor() ([]byte, []int) { - return file_compass_v1_compass_proto_rawDescGZIP(), []int{74} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{70} } // The Compass agent attribution parsed from the owner header at ingestion — a @@ -5086,7 +4918,7 @@ type AgentAttribution struct { func (x *AgentAttribution) Reset() { *x = AgentAttribution{} - mi := &file_compass_v1_compass_proto_msgTypes[75] + mi := &file_compass_v1_compass_proto_msgTypes[71] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5098,7 +4930,7 @@ func (x *AgentAttribution) String() string { func (*AgentAttribution) ProtoMessage() {} func (x *AgentAttribution) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[75] + mi := &file_compass_v1_compass_proto_msgTypes[71] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5111,7 +4943,7 @@ func (x *AgentAttribution) ProtoReflect() protoreflect.Message { // Deprecated: Use AgentAttribution.ProtoReflect.Descriptor instead. func (*AgentAttribution) Descriptor() ([]byte, []int) { - return file_compass_v1_compass_proto_rawDescGZIP(), []int{75} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{71} } func (x *AgentAttribution) GetAgentHandle() string { @@ -5138,7 +4970,7 @@ type ForgeRef struct { func (x *ForgeRef) Reset() { *x = ForgeRef{} - mi := &file_compass_v1_compass_proto_msgTypes[76] + mi := &file_compass_v1_compass_proto_msgTypes[72] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5150,7 +4982,7 @@ func (x *ForgeRef) String() string { func (*ForgeRef) ProtoMessage() {} func (x *ForgeRef) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[76] + mi := &file_compass_v1_compass_proto_msgTypes[72] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5163,7 +4995,7 @@ func (x *ForgeRef) ProtoReflect() protoreflect.Message { // Deprecated: Use ForgeRef.ProtoReflect.Descriptor instead. func (*ForgeRef) Descriptor() ([]byte, []int) { - return file_compass_v1_compass_proto_rawDescGZIP(), []int{76} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{72} } func (x *ForgeRef) GetProvider() ForgeProvider { @@ -5223,7 +5055,7 @@ type Issue struct { func (x *Issue) Reset() { *x = Issue{} - mi := &file_compass_v1_compass_proto_msgTypes[77] + mi := &file_compass_v1_compass_proto_msgTypes[73] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5235,7 +5067,7 @@ func (x *Issue) String() string { func (*Issue) ProtoMessage() {} func (x *Issue) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[77] + mi := &file_compass_v1_compass_proto_msgTypes[73] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5248,7 +5080,7 @@ func (x *Issue) ProtoReflect() protoreflect.Message { // Deprecated: Use Issue.ProtoReflect.Descriptor instead. func (*Issue) Descriptor() ([]byte, []int) { - return file_compass_v1_compass_proto_rawDescGZIP(), []int{77} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{73} } func (x *Issue) GetId() string { @@ -5410,7 +5242,7 @@ type PullRequest struct { func (x *PullRequest) Reset() { *x = PullRequest{} - mi := &file_compass_v1_compass_proto_msgTypes[78] + mi := &file_compass_v1_compass_proto_msgTypes[74] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5422,7 +5254,7 @@ func (x *PullRequest) String() string { func (*PullRequest) ProtoMessage() {} func (x *PullRequest) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[78] + mi := &file_compass_v1_compass_proto_msgTypes[74] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5435,7 +5267,7 @@ func (x *PullRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use PullRequest.ProtoReflect.Descriptor instead. func (*PullRequest) Descriptor() ([]byte, []int) { - return file_compass_v1_compass_proto_rawDescGZIP(), []int{78} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{74} } func (x *PullRequest) GetForge() *ForgeRef { @@ -5556,7 +5388,7 @@ type ChecksSummary struct { func (x *ChecksSummary) Reset() { *x = ChecksSummary{} - mi := &file_compass_v1_compass_proto_msgTypes[79] + mi := &file_compass_v1_compass_proto_msgTypes[75] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5568,7 +5400,7 @@ func (x *ChecksSummary) String() string { func (*ChecksSummary) ProtoMessage() {} func (x *ChecksSummary) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[79] + mi := &file_compass_v1_compass_proto_msgTypes[75] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5581,7 +5413,7 @@ func (x *ChecksSummary) ProtoReflect() protoreflect.Message { // Deprecated: Use ChecksSummary.ProtoReflect.Descriptor instead. func (*ChecksSummary) Descriptor() ([]byte, []int) { - return file_compass_v1_compass_proto_rawDescGZIP(), []int{79} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{75} } func (x *ChecksSummary) GetHeadSha() string { @@ -5617,7 +5449,7 @@ type Check struct { func (x *Check) Reset() { *x = Check{} - mi := &file_compass_v1_compass_proto_msgTypes[80] + mi := &file_compass_v1_compass_proto_msgTypes[76] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5629,7 +5461,7 @@ func (x *Check) String() string { func (*Check) ProtoMessage() {} func (x *Check) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[80] + mi := &file_compass_v1_compass_proto_msgTypes[76] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5642,7 +5474,7 @@ func (x *Check) ProtoReflect() protoreflect.Message { // Deprecated: Use Check.ProtoReflect.Descriptor instead. func (*Check) Descriptor() ([]byte, []int) { - return file_compass_v1_compass_proto_rawDescGZIP(), []int{80} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{76} } func (x *Check) GetName() string { @@ -5686,7 +5518,7 @@ type ChangedStats struct { func (x *ChangedStats) Reset() { *x = ChangedStats{} - mi := &file_compass_v1_compass_proto_msgTypes[81] + mi := &file_compass_v1_compass_proto_msgTypes[77] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5698,7 +5530,7 @@ func (x *ChangedStats) String() string { func (*ChangedStats) ProtoMessage() {} func (x *ChangedStats) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[81] + mi := &file_compass_v1_compass_proto_msgTypes[77] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5711,7 +5543,7 @@ func (x *ChangedStats) ProtoReflect() protoreflect.Message { // Deprecated: Use ChangedStats.ProtoReflect.Descriptor instead. func (*ChangedStats) Descriptor() ([]byte, []int) { - return file_compass_v1_compass_proto_rawDescGZIP(), []int{81} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{77} } func (x *ChangedStats) GetFiles() uint32 { @@ -5749,7 +5581,7 @@ type TrackerRef struct { func (x *TrackerRef) Reset() { *x = TrackerRef{} - mi := &file_compass_v1_compass_proto_msgTypes[82] + mi := &file_compass_v1_compass_proto_msgTypes[78] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5761,7 +5593,7 @@ func (x *TrackerRef) String() string { func (*TrackerRef) ProtoMessage() {} func (x *TrackerRef) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[82] + mi := &file_compass_v1_compass_proto_msgTypes[78] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5774,7 +5606,7 @@ func (x *TrackerRef) ProtoReflect() protoreflect.Message { // Deprecated: Use TrackerRef.ProtoReflect.Descriptor instead. func (*TrackerRef) Descriptor() ([]byte, []int) { - return file_compass_v1_compass_proto_rawDescGZIP(), []int{82} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{78} } func (x *TrackerRef) GetKind() string { @@ -5823,7 +5655,7 @@ type Review struct { func (x *Review) Reset() { *x = Review{} - mi := &file_compass_v1_compass_proto_msgTypes[83] + mi := &file_compass_v1_compass_proto_msgTypes[79] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5835,7 +5667,7 @@ func (x *Review) String() string { func (*Review) ProtoMessage() {} func (x *Review) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[83] + mi := &file_compass_v1_compass_proto_msgTypes[79] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5848,7 +5680,7 @@ func (x *Review) ProtoReflect() protoreflect.Message { // Deprecated: Use Review.ProtoReflect.Descriptor instead. func (*Review) Descriptor() ([]byte, []int) { - return file_compass_v1_compass_proto_rawDescGZIP(), []int{83} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{79} } func (x *Review) GetAuthor() string { @@ -5890,7 +5722,7 @@ type ReviewThread struct { func (x *ReviewThread) Reset() { *x = ReviewThread{} - mi := &file_compass_v1_compass_proto_msgTypes[84] + mi := &file_compass_v1_compass_proto_msgTypes[80] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5902,7 +5734,7 @@ func (x *ReviewThread) String() string { func (*ReviewThread) ProtoMessage() {} func (x *ReviewThread) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[84] + mi := &file_compass_v1_compass_proto_msgTypes[80] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5915,7 +5747,7 @@ func (x *ReviewThread) ProtoReflect() protoreflect.Message { // Deprecated: Use ReviewThread.ProtoReflect.Descriptor instead. func (*ReviewThread) Descriptor() ([]byte, []int) { - return file_compass_v1_compass_proto_rawDescGZIP(), []int{84} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{80} } func (x *ReviewThread) GetPath() string { @@ -5950,7 +5782,7 @@ type Comment struct { func (x *Comment) Reset() { *x = Comment{} - mi := &file_compass_v1_compass_proto_msgTypes[85] + mi := &file_compass_v1_compass_proto_msgTypes[81] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5962,7 +5794,7 @@ func (x *Comment) String() string { func (*Comment) ProtoMessage() {} func (x *Comment) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[85] + mi := &file_compass_v1_compass_proto_msgTypes[81] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5975,7 +5807,7 @@ func (x *Comment) ProtoReflect() protoreflect.Message { // Deprecated: Use Comment.ProtoReflect.Descriptor instead. func (*Comment) Descriptor() ([]byte, []int) { - return file_compass_v1_compass_proto_rawDescGZIP(), []int{85} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{81} } func (x *Comment) GetAuthor() string { @@ -6027,14 +5859,7 @@ const file_compass_v1_compass_proto_rawDesc = "" + "\x13DeleteSecretRequest\x12\x12\n" + "\x04name\x18\x01 \x01(\tR\x04name\x12-\n" + "\x05scope\x18\x02 \x01(\x0e2\x17.compass.v1.SecretScopeR\x05scope\"\x16\n" + - "\x14DeleteSecretResponse\"G\n" + - "\x16SetServerSecretRequest\x12\x12\n" + - "\x04name\x18\x01 \x01(\tR\x04name\x12\x19\n" + - "\x05value\x18\x02 \x01(\tB\x03\x80\x01\x01R\x05value\"\x19\n" + - "\x17SetServerSecretResponse\"/\n" + - "\x19DeleteServerSecretRequest\x12\x12\n" + - "\x04name\x18\x01 \x01(\tR\x04name\"\x1c\n" + - "\x1aDeleteServerSecretResponse\"\x1a\n" + + "\x14DeleteSecretResponse\"\x1a\n" + "\x18ListServerSecretsRequest\"b\n" + "\x19ListServerSecretsResponse\x12E\n" + "\x0eserver_secrets\x18\x01 \x03(\v2\x1e.compass.v1.ServerSecretStatusR\rserverSecrets\"?\n" + @@ -6438,13 +6263,11 @@ const file_compass_v1_compass_proto_rawDesc = "" + "\x11DeleteAgentConfig\x12$.compass.v1.DeleteAgentConfigRequest\x1a%.compass.v1.DeleteAgentConfigResponse\x12]\n" + "\x10PutModelRegistry\x12#.compass.v1.PutModelRegistryRequest\x1a$.compass.v1.PutModelRegistryResponse\x12]\n" + "\x10GetModelRegistry\x12#.compass.v1.GetModelRegistryRequest\x1a$.compass.v1.GetModelRegistryResponse\x12f\n" + - "\x13DeleteModelRegistry\x12&.compass.v1.DeleteModelRegistryRequest\x1a'.compass.v1.DeleteModelRegistryResponse2\xa0\x04\n" + + "\x13DeleteModelRegistry\x12&.compass.v1.DeleteModelRegistryRequest\x1a'.compass.v1.DeleteModelRegistryResponse2\xdf\x02\n" + "\x0eSecretsService\x12H\n" + "\tSetSecret\x12\x1c.compass.v1.SetSecretRequest\x1a\x1d.compass.v1.SetSecretResponse\x12N\n" + "\vListSecrets\x12\x1e.compass.v1.ListSecretsRequest\x1a\x1f.compass.v1.ListSecretsResponse\x12Q\n" + - "\fDeleteSecret\x12\x1f.compass.v1.DeleteSecretRequest\x1a .compass.v1.DeleteSecretResponse\x12Z\n" + - "\x0fSetServerSecret\x12\".compass.v1.SetServerSecretRequest\x1a#.compass.v1.SetServerSecretResponse\x12c\n" + - "\x12DeleteServerSecret\x12%.compass.v1.DeleteServerSecretRequest\x1a&.compass.v1.DeleteServerSecretResponse\x12`\n" + + "\fDeleteSecret\x12\x1f.compass.v1.DeleteSecretRequest\x1a .compass.v1.DeleteSecretResponse\x12`\n" + "\x11ListServerSecrets\x12$.compass.v1.ListServerSecretsRequest\x1a%.compass.v1.ListServerSecretsResponseb\x06proto3" var ( @@ -6460,7 +6283,7 @@ func file_compass_v1_compass_proto_rawDescGZIP() []byte { } var file_compass_v1_compass_proto_enumTypes = make([]protoimpl.EnumInfo, 13) -var file_compass_v1_compass_proto_msgTypes = make([]protoimpl.MessageInfo, 87) +var file_compass_v1_compass_proto_msgTypes = make([]protoimpl.MessageInfo, 83) var file_compass_v1_compass_proto_goTypes = []any{ (SecretDelivery)(0), // 0: compass.v1.SecretDelivery (SecretKind)(0), // 1: compass.v1.SecretKind @@ -6482,207 +6305,199 @@ var file_compass_v1_compass_proto_goTypes = []any{ (*SecretStatus)(nil), // 17: compass.v1.SecretStatus (*DeleteSecretRequest)(nil), // 18: compass.v1.DeleteSecretRequest (*DeleteSecretResponse)(nil), // 19: compass.v1.DeleteSecretResponse - (*SetServerSecretRequest)(nil), // 20: compass.v1.SetServerSecretRequest - (*SetServerSecretResponse)(nil), // 21: compass.v1.SetServerSecretResponse - (*DeleteServerSecretRequest)(nil), // 22: compass.v1.DeleteServerSecretRequest - (*DeleteServerSecretResponse)(nil), // 23: compass.v1.DeleteServerSecretResponse - (*ListServerSecretsRequest)(nil), // 24: compass.v1.ListServerSecretsRequest - (*ListServerSecretsResponse)(nil), // 25: compass.v1.ListServerSecretsResponse - (*ServerSecretStatus)(nil), // 26: compass.v1.ServerSecretStatus - (*GetServerInfoRequest)(nil), // 27: compass.v1.GetServerInfoRequest - (*GetServerInfoResponse)(nil), // 28: compass.v1.GetServerInfoResponse - (*WhoAmIRequest)(nil), // 29: compass.v1.WhoAmIRequest - (*WhoAmIResponse)(nil), // 30: compass.v1.WhoAmIResponse - (*SubscribeEventsRequest)(nil), // 31: compass.v1.SubscribeEventsRequest - (*SubscribeEventsResponse)(nil), // 32: compass.v1.SubscribeEventsResponse - (*ListBoardIssuesRequest)(nil), // 33: compass.v1.ListBoardIssuesRequest - (*ListBoardIssuesResponse)(nil), // 34: compass.v1.ListBoardIssuesResponse - (*ServerStatus)(nil), // 35: compass.v1.ServerStatus - (*ResyncRequired)(nil), // 36: compass.v1.ResyncRequired - (*AgentSessionStatus)(nil), // 37: compass.v1.AgentSessionStatus - (*AgentMessageChunk)(nil), // 38: compass.v1.AgentMessageChunk - (*AgentToolCall)(nil), // 39: compass.v1.AgentToolCall - (*AgentPlan)(nil), // 40: compass.v1.AgentPlan - (*AgentPlanEntry)(nil), // 41: compass.v1.AgentPlanEntry - (*SessionEvent)(nil), // 42: compass.v1.SessionEvent - (*SessionAssistantText)(nil), // 43: compass.v1.SessionAssistantText - (*SessionThinking)(nil), // 44: compass.v1.SessionThinking - (*SessionToolCall)(nil), // 45: compass.v1.SessionToolCall - (*SessionToolCallUpdate)(nil), // 46: compass.v1.SessionToolCallUpdate - (*SessionFileDiff)(nil), // 47: compass.v1.SessionFileDiff - (*SessionPlan)(nil), // 48: compass.v1.SessionPlan - (*SessionNotice)(nil), // 49: compass.v1.SessionNotice - (*SessionInjection)(nil), // 50: compass.v1.SessionInjection - (*SessionError)(nil), // 51: compass.v1.SessionError - (*SubscribeAgentSessionRequest)(nil), // 52: compass.v1.SubscribeAgentSessionRequest - (*AgentSessionFrame)(nil), // 53: compass.v1.AgentSessionFrame - (*ProvisionAgentWorkspaceRequest)(nil), // 54: compass.v1.ProvisionAgentWorkspaceRequest - (*ProvisionAgentWorkspaceResponse)(nil), // 55: compass.v1.ProvisionAgentWorkspaceResponse - (*RemoveAgentWorkspaceRequest)(nil), // 56: compass.v1.RemoveAgentWorkspaceRequest - (*RemoveAgentWorkspaceResponse)(nil), // 57: compass.v1.RemoveAgentWorkspaceResponse - (*StartAgentSessionRequest)(nil), // 58: compass.v1.StartAgentSessionRequest - (*StartAgentSessionResponse)(nil), // 59: compass.v1.StartAgentSessionResponse - (*SpawnAgentRequest)(nil), // 60: compass.v1.SpawnAgentRequest - (*SpawnAgentResponse)(nil), // 61: compass.v1.SpawnAgentResponse - (*StopAgentSessionRequest)(nil), // 62: compass.v1.StopAgentSessionRequest - (*StopAgentSessionResponse)(nil), // 63: compass.v1.StopAgentSessionResponse - (*ReloadAgentSessionRequest)(nil), // 64: compass.v1.ReloadAgentSessionRequest - (*ReloadAgentSessionResponse)(nil), // 65: compass.v1.ReloadAgentSessionResponse - (*GetAgentStatusRequest)(nil), // 66: compass.v1.GetAgentStatusRequest - (*GetAgentStatusResponse)(nil), // 67: compass.v1.GetAgentStatusResponse - (*IssueTokenRequest)(nil), // 68: compass.v1.IssueTokenRequest - (*IssueTokenResponse)(nil), // 69: compass.v1.IssueTokenResponse - (*RevokeTokenRequest)(nil), // 70: compass.v1.RevokeTokenRequest - (*RevokeTokenResponse)(nil), // 71: compass.v1.RevokeTokenResponse - (*PutAgentConfigRequest)(nil), // 72: compass.v1.PutAgentConfigRequest - (*PutAgentConfigResponse)(nil), // 73: compass.v1.PutAgentConfigResponse - (*GetAgentConfigInfoRequest)(nil), // 74: compass.v1.GetAgentConfigInfoRequest - (*GetAgentConfigInfoResponse)(nil), // 75: compass.v1.GetAgentConfigInfoResponse - (*DeleteAgentConfigRequest)(nil), // 76: compass.v1.DeleteAgentConfigRequest - (*DeleteAgentConfigResponse)(nil), // 77: compass.v1.DeleteAgentConfigResponse - (*ModelCandidate)(nil), // 78: compass.v1.ModelCandidate - (*ModelMetadata)(nil), // 79: compass.v1.ModelMetadata - (*ModelRegistryEntry)(nil), // 80: compass.v1.ModelRegistryEntry - (*ModelRegistry)(nil), // 81: compass.v1.ModelRegistry - (*PutModelRegistryRequest)(nil), // 82: compass.v1.PutModelRegistryRequest - (*PutModelRegistryResponse)(nil), // 83: compass.v1.PutModelRegistryResponse - (*GetModelRegistryRequest)(nil), // 84: compass.v1.GetModelRegistryRequest - (*GetModelRegistryResponse)(nil), // 85: compass.v1.GetModelRegistryResponse - (*DeleteModelRegistryRequest)(nil), // 86: compass.v1.DeleteModelRegistryRequest - (*DeleteModelRegistryResponse)(nil), // 87: compass.v1.DeleteModelRegistryResponse - (*AgentAttribution)(nil), // 88: compass.v1.AgentAttribution - (*ForgeRef)(nil), // 89: compass.v1.ForgeRef - (*Issue)(nil), // 90: compass.v1.Issue - (*PullRequest)(nil), // 91: compass.v1.PullRequest - (*ChecksSummary)(nil), // 92: compass.v1.ChecksSummary - (*Check)(nil), // 93: compass.v1.Check - (*ChangedStats)(nil), // 94: compass.v1.ChangedStats - (*TrackerRef)(nil), // 95: compass.v1.TrackerRef - (*Review)(nil), // 96: compass.v1.Review - (*ReviewThread)(nil), // 97: compass.v1.ReviewThread - (*Comment)(nil), // 98: compass.v1.Comment - nil, // 99: compass.v1.ModelRegistry.EntriesEntry - (*timestamppb.Timestamp)(nil), // 100: google.protobuf.Timestamp + (*ListServerSecretsRequest)(nil), // 20: compass.v1.ListServerSecretsRequest + (*ListServerSecretsResponse)(nil), // 21: compass.v1.ListServerSecretsResponse + (*ServerSecretStatus)(nil), // 22: compass.v1.ServerSecretStatus + (*GetServerInfoRequest)(nil), // 23: compass.v1.GetServerInfoRequest + (*GetServerInfoResponse)(nil), // 24: compass.v1.GetServerInfoResponse + (*WhoAmIRequest)(nil), // 25: compass.v1.WhoAmIRequest + (*WhoAmIResponse)(nil), // 26: compass.v1.WhoAmIResponse + (*SubscribeEventsRequest)(nil), // 27: compass.v1.SubscribeEventsRequest + (*SubscribeEventsResponse)(nil), // 28: compass.v1.SubscribeEventsResponse + (*ListBoardIssuesRequest)(nil), // 29: compass.v1.ListBoardIssuesRequest + (*ListBoardIssuesResponse)(nil), // 30: compass.v1.ListBoardIssuesResponse + (*ServerStatus)(nil), // 31: compass.v1.ServerStatus + (*ResyncRequired)(nil), // 32: compass.v1.ResyncRequired + (*AgentSessionStatus)(nil), // 33: compass.v1.AgentSessionStatus + (*AgentMessageChunk)(nil), // 34: compass.v1.AgentMessageChunk + (*AgentToolCall)(nil), // 35: compass.v1.AgentToolCall + (*AgentPlan)(nil), // 36: compass.v1.AgentPlan + (*AgentPlanEntry)(nil), // 37: compass.v1.AgentPlanEntry + (*SessionEvent)(nil), // 38: compass.v1.SessionEvent + (*SessionAssistantText)(nil), // 39: compass.v1.SessionAssistantText + (*SessionThinking)(nil), // 40: compass.v1.SessionThinking + (*SessionToolCall)(nil), // 41: compass.v1.SessionToolCall + (*SessionToolCallUpdate)(nil), // 42: compass.v1.SessionToolCallUpdate + (*SessionFileDiff)(nil), // 43: compass.v1.SessionFileDiff + (*SessionPlan)(nil), // 44: compass.v1.SessionPlan + (*SessionNotice)(nil), // 45: compass.v1.SessionNotice + (*SessionInjection)(nil), // 46: compass.v1.SessionInjection + (*SessionError)(nil), // 47: compass.v1.SessionError + (*SubscribeAgentSessionRequest)(nil), // 48: compass.v1.SubscribeAgentSessionRequest + (*AgentSessionFrame)(nil), // 49: compass.v1.AgentSessionFrame + (*ProvisionAgentWorkspaceRequest)(nil), // 50: compass.v1.ProvisionAgentWorkspaceRequest + (*ProvisionAgentWorkspaceResponse)(nil), // 51: compass.v1.ProvisionAgentWorkspaceResponse + (*RemoveAgentWorkspaceRequest)(nil), // 52: compass.v1.RemoveAgentWorkspaceRequest + (*RemoveAgentWorkspaceResponse)(nil), // 53: compass.v1.RemoveAgentWorkspaceResponse + (*StartAgentSessionRequest)(nil), // 54: compass.v1.StartAgentSessionRequest + (*StartAgentSessionResponse)(nil), // 55: compass.v1.StartAgentSessionResponse + (*SpawnAgentRequest)(nil), // 56: compass.v1.SpawnAgentRequest + (*SpawnAgentResponse)(nil), // 57: compass.v1.SpawnAgentResponse + (*StopAgentSessionRequest)(nil), // 58: compass.v1.StopAgentSessionRequest + (*StopAgentSessionResponse)(nil), // 59: compass.v1.StopAgentSessionResponse + (*ReloadAgentSessionRequest)(nil), // 60: compass.v1.ReloadAgentSessionRequest + (*ReloadAgentSessionResponse)(nil), // 61: compass.v1.ReloadAgentSessionResponse + (*GetAgentStatusRequest)(nil), // 62: compass.v1.GetAgentStatusRequest + (*GetAgentStatusResponse)(nil), // 63: compass.v1.GetAgentStatusResponse + (*IssueTokenRequest)(nil), // 64: compass.v1.IssueTokenRequest + (*IssueTokenResponse)(nil), // 65: compass.v1.IssueTokenResponse + (*RevokeTokenRequest)(nil), // 66: compass.v1.RevokeTokenRequest + (*RevokeTokenResponse)(nil), // 67: compass.v1.RevokeTokenResponse + (*PutAgentConfigRequest)(nil), // 68: compass.v1.PutAgentConfigRequest + (*PutAgentConfigResponse)(nil), // 69: compass.v1.PutAgentConfigResponse + (*GetAgentConfigInfoRequest)(nil), // 70: compass.v1.GetAgentConfigInfoRequest + (*GetAgentConfigInfoResponse)(nil), // 71: compass.v1.GetAgentConfigInfoResponse + (*DeleteAgentConfigRequest)(nil), // 72: compass.v1.DeleteAgentConfigRequest + (*DeleteAgentConfigResponse)(nil), // 73: compass.v1.DeleteAgentConfigResponse + (*ModelCandidate)(nil), // 74: compass.v1.ModelCandidate + (*ModelMetadata)(nil), // 75: compass.v1.ModelMetadata + (*ModelRegistryEntry)(nil), // 76: compass.v1.ModelRegistryEntry + (*ModelRegistry)(nil), // 77: compass.v1.ModelRegistry + (*PutModelRegistryRequest)(nil), // 78: compass.v1.PutModelRegistryRequest + (*PutModelRegistryResponse)(nil), // 79: compass.v1.PutModelRegistryResponse + (*GetModelRegistryRequest)(nil), // 80: compass.v1.GetModelRegistryRequest + (*GetModelRegistryResponse)(nil), // 81: compass.v1.GetModelRegistryResponse + (*DeleteModelRegistryRequest)(nil), // 82: compass.v1.DeleteModelRegistryRequest + (*DeleteModelRegistryResponse)(nil), // 83: compass.v1.DeleteModelRegistryResponse + (*AgentAttribution)(nil), // 84: compass.v1.AgentAttribution + (*ForgeRef)(nil), // 85: compass.v1.ForgeRef + (*Issue)(nil), // 86: compass.v1.Issue + (*PullRequest)(nil), // 87: compass.v1.PullRequest + (*ChecksSummary)(nil), // 88: compass.v1.ChecksSummary + (*Check)(nil), // 89: compass.v1.Check + (*ChangedStats)(nil), // 90: compass.v1.ChangedStats + (*TrackerRef)(nil), // 91: compass.v1.TrackerRef + (*Review)(nil), // 92: compass.v1.Review + (*ReviewThread)(nil), // 93: compass.v1.ReviewThread + (*Comment)(nil), // 94: compass.v1.Comment + nil, // 95: compass.v1.ModelRegistry.EntriesEntry + (*timestamppb.Timestamp)(nil), // 96: google.protobuf.Timestamp } var file_compass_v1_compass_proto_depIdxs = []int32{ - 0, // 0: compass.v1.SetSecretRequest.delivery:type_name -> compass.v1.SecretDelivery - 1, // 1: compass.v1.SetSecretRequest.kind:type_name -> compass.v1.SecretKind - 2, // 2: compass.v1.SetSecretRequest.scope:type_name -> compass.v1.SecretScope - 17, // 3: compass.v1.ListSecretsResponse.secrets:type_name -> compass.v1.SecretStatus - 0, // 4: compass.v1.SecretStatus.delivery:type_name -> compass.v1.SecretDelivery - 1, // 5: compass.v1.SecretStatus.kind:type_name -> compass.v1.SecretKind - 2, // 6: compass.v1.DeleteSecretRequest.scope:type_name -> compass.v1.SecretScope - 26, // 7: compass.v1.ListServerSecretsResponse.server_secrets:type_name -> compass.v1.ServerSecretStatus - 35, // 8: compass.v1.SubscribeEventsResponse.server_status:type_name -> compass.v1.ServerStatus - 36, // 9: compass.v1.SubscribeEventsResponse.resync_required:type_name -> compass.v1.ResyncRequired - 37, // 10: compass.v1.SubscribeEventsResponse.agent_session_status:type_name -> compass.v1.AgentSessionStatus - 38, // 11: compass.v1.SubscribeEventsResponse.agent_message_chunk:type_name -> compass.v1.AgentMessageChunk - 39, // 12: compass.v1.SubscribeEventsResponse.agent_tool_call:type_name -> compass.v1.AgentToolCall - 40, // 13: compass.v1.SubscribeEventsResponse.agent_plan:type_name -> compass.v1.AgentPlan - 90, // 14: compass.v1.SubscribeEventsResponse.issue:type_name -> compass.v1.Issue - 90, // 15: compass.v1.ListBoardIssuesResponse.issues:type_name -> compass.v1.Issue - 3, // 16: compass.v1.ServerStatus.state:type_name -> compass.v1.ServerState - 6, // 17: compass.v1.AgentSessionStatus.state:type_name -> compass.v1.AgentSessionState - 4, // 18: compass.v1.AgentSessionStatus.runtime_tier:type_name -> compass.v1.RuntimeTier - 5, // 19: compass.v1.AgentSessionStatus.egress_posture:type_name -> compass.v1.EgressPosture - 7, // 20: compass.v1.AgentToolCall.status:type_name -> compass.v1.AgentToolCallStatus - 41, // 21: compass.v1.AgentPlan.entries:type_name -> compass.v1.AgentPlanEntry - 8, // 22: compass.v1.AgentPlanEntry.status:type_name -> compass.v1.AgentPlanEntryStatus - 43, // 23: compass.v1.SessionEvent.assistant_text:type_name -> compass.v1.SessionAssistantText - 44, // 24: compass.v1.SessionEvent.thinking:type_name -> compass.v1.SessionThinking - 45, // 25: compass.v1.SessionEvent.tool_call:type_name -> compass.v1.SessionToolCall - 46, // 26: compass.v1.SessionEvent.tool_call_update:type_name -> compass.v1.SessionToolCallUpdate - 48, // 27: compass.v1.SessionEvent.plan:type_name -> compass.v1.SessionPlan - 49, // 28: compass.v1.SessionEvent.notice:type_name -> compass.v1.SessionNotice - 50, // 29: compass.v1.SessionEvent.session_injection:type_name -> compass.v1.SessionInjection - 51, // 30: compass.v1.SessionEvent.session_error:type_name -> compass.v1.SessionError - 7, // 31: compass.v1.SessionToolCall.status:type_name -> compass.v1.AgentToolCallStatus - 7, // 32: compass.v1.SessionToolCallUpdate.status:type_name -> compass.v1.AgentToolCallStatus - 47, // 33: compass.v1.SessionToolCallUpdate.diffs:type_name -> compass.v1.SessionFileDiff - 41, // 34: compass.v1.SessionPlan.entries:type_name -> compass.v1.AgentPlanEntry - 9, // 35: compass.v1.SessionInjection.op_kind:type_name -> compass.v1.SessionInjectionKind - 10, // 36: compass.v1.SessionError.kind:type_name -> compass.v1.SessionErrorKind - 42, // 37: compass.v1.AgentSessionFrame.event:type_name -> compass.v1.SessionEvent - 6, // 38: compass.v1.AgentSessionFrame.state:type_name -> compass.v1.AgentSessionState - 37, // 39: compass.v1.GetAgentStatusResponse.statuses:type_name -> compass.v1.AgentSessionStatus - 78, // 40: compass.v1.ModelRegistryEntry.candidates:type_name -> compass.v1.ModelCandidate - 79, // 41: compass.v1.ModelRegistryEntry.metadata:type_name -> compass.v1.ModelMetadata - 99, // 42: compass.v1.ModelRegistry.entries:type_name -> compass.v1.ModelRegistry.EntriesEntry - 81, // 43: compass.v1.PutModelRegistryRequest.registry:type_name -> compass.v1.ModelRegistry - 81, // 44: compass.v1.GetModelRegistryResponse.registry:type_name -> compass.v1.ModelRegistry - 12, // 45: compass.v1.ForgeRef.provider:type_name -> compass.v1.ForgeProvider - 89, // 46: compass.v1.Issue.forge:type_name -> compass.v1.ForgeRef - 88, // 47: compass.v1.Issue.agent:type_name -> compass.v1.AgentAttribution - 100, // 48: compass.v1.Issue.updated_at:type_name -> google.protobuf.Timestamp - 11, // 49: compass.v1.Issue.state:type_name -> compass.v1.IssueState - 91, // 50: compass.v1.Issue.prs:type_name -> compass.v1.PullRequest - 95, // 51: compass.v1.Issue.tracker:type_name -> compass.v1.TrackerRef - 89, // 52: compass.v1.PullRequest.forge:type_name -> compass.v1.ForgeRef - 88, // 53: compass.v1.PullRequest.agent:type_name -> compass.v1.AgentAttribution - 94, // 54: compass.v1.PullRequest.changed:type_name -> compass.v1.ChangedStats - 92, // 55: compass.v1.PullRequest.checks:type_name -> compass.v1.ChecksSummary - 96, // 56: compass.v1.PullRequest.reviews:type_name -> compass.v1.Review - 97, // 57: compass.v1.PullRequest.threads:type_name -> compass.v1.ReviewThread - 93, // 58: compass.v1.ChecksSummary.checks:type_name -> compass.v1.Check - 98, // 59: compass.v1.ReviewThread.comments:type_name -> compass.v1.Comment - 80, // 60: compass.v1.ModelRegistry.EntriesEntry.value:type_name -> compass.v1.ModelRegistryEntry - 27, // 61: compass.v1.CompassService.GetServerInfo:input_type -> compass.v1.GetServerInfoRequest - 29, // 62: compass.v1.CompassService.WhoAmI:input_type -> compass.v1.WhoAmIRequest - 31, // 63: compass.v1.CompassService.SubscribeEvents:input_type -> compass.v1.SubscribeEventsRequest - 33, // 64: compass.v1.CompassService.ListBoardIssues:input_type -> compass.v1.ListBoardIssuesRequest - 54, // 65: compass.v1.CompassService.ProvisionAgentWorkspace:input_type -> compass.v1.ProvisionAgentWorkspaceRequest - 58, // 66: compass.v1.CompassService.StartAgentSession:input_type -> compass.v1.StartAgentSessionRequest - 60, // 67: compass.v1.CompassService.SpawnAgent:input_type -> compass.v1.SpawnAgentRequest - 62, // 68: compass.v1.CompassService.StopAgentSession:input_type -> compass.v1.StopAgentSessionRequest - 56, // 69: compass.v1.CompassService.RemoveAgentWorkspace:input_type -> compass.v1.RemoveAgentWorkspaceRequest - 64, // 70: compass.v1.CompassService.ReloadAgentSession:input_type -> compass.v1.ReloadAgentSessionRequest - 66, // 71: compass.v1.CompassService.GetAgentStatus:input_type -> compass.v1.GetAgentStatusRequest - 52, // 72: compass.v1.CompassService.SubscribeAgentSession:input_type -> compass.v1.SubscribeAgentSessionRequest - 68, // 73: compass.v1.CompassService.IssueToken:input_type -> compass.v1.IssueTokenRequest - 70, // 74: compass.v1.CompassService.RevokeToken:input_type -> compass.v1.RevokeTokenRequest - 72, // 75: compass.v1.CompassService.PutAgentConfig:input_type -> compass.v1.PutAgentConfigRequest - 74, // 76: compass.v1.CompassService.GetAgentConfigInfo:input_type -> compass.v1.GetAgentConfigInfoRequest - 76, // 77: compass.v1.CompassService.DeleteAgentConfig:input_type -> compass.v1.DeleteAgentConfigRequest - 82, // 78: compass.v1.CompassService.PutModelRegistry:input_type -> compass.v1.PutModelRegistryRequest - 84, // 79: compass.v1.CompassService.GetModelRegistry:input_type -> compass.v1.GetModelRegistryRequest - 86, // 80: compass.v1.CompassService.DeleteModelRegistry:input_type -> compass.v1.DeleteModelRegistryRequest - 13, // 81: compass.v1.SecretsService.SetSecret:input_type -> compass.v1.SetSecretRequest - 15, // 82: compass.v1.SecretsService.ListSecrets:input_type -> compass.v1.ListSecretsRequest - 18, // 83: compass.v1.SecretsService.DeleteSecret:input_type -> compass.v1.DeleteSecretRequest - 20, // 84: compass.v1.SecretsService.SetServerSecret:input_type -> compass.v1.SetServerSecretRequest - 22, // 85: compass.v1.SecretsService.DeleteServerSecret:input_type -> compass.v1.DeleteServerSecretRequest - 24, // 86: compass.v1.SecretsService.ListServerSecrets:input_type -> compass.v1.ListServerSecretsRequest - 28, // 87: compass.v1.CompassService.GetServerInfo:output_type -> compass.v1.GetServerInfoResponse - 30, // 88: compass.v1.CompassService.WhoAmI:output_type -> compass.v1.WhoAmIResponse - 32, // 89: compass.v1.CompassService.SubscribeEvents:output_type -> compass.v1.SubscribeEventsResponse - 34, // 90: compass.v1.CompassService.ListBoardIssues:output_type -> compass.v1.ListBoardIssuesResponse - 55, // 91: compass.v1.CompassService.ProvisionAgentWorkspace:output_type -> compass.v1.ProvisionAgentWorkspaceResponse - 59, // 92: compass.v1.CompassService.StartAgentSession:output_type -> compass.v1.StartAgentSessionResponse - 61, // 93: compass.v1.CompassService.SpawnAgent:output_type -> compass.v1.SpawnAgentResponse - 63, // 94: compass.v1.CompassService.StopAgentSession:output_type -> compass.v1.StopAgentSessionResponse - 57, // 95: compass.v1.CompassService.RemoveAgentWorkspace:output_type -> compass.v1.RemoveAgentWorkspaceResponse - 65, // 96: compass.v1.CompassService.ReloadAgentSession:output_type -> compass.v1.ReloadAgentSessionResponse - 67, // 97: compass.v1.CompassService.GetAgentStatus:output_type -> compass.v1.GetAgentStatusResponse - 53, // 98: compass.v1.CompassService.SubscribeAgentSession:output_type -> compass.v1.AgentSessionFrame - 69, // 99: compass.v1.CompassService.IssueToken:output_type -> compass.v1.IssueTokenResponse - 71, // 100: compass.v1.CompassService.RevokeToken:output_type -> compass.v1.RevokeTokenResponse - 73, // 101: compass.v1.CompassService.PutAgentConfig:output_type -> compass.v1.PutAgentConfigResponse - 75, // 102: compass.v1.CompassService.GetAgentConfigInfo:output_type -> compass.v1.GetAgentConfigInfoResponse - 77, // 103: compass.v1.CompassService.DeleteAgentConfig:output_type -> compass.v1.DeleteAgentConfigResponse - 83, // 104: compass.v1.CompassService.PutModelRegistry:output_type -> compass.v1.PutModelRegistryResponse - 85, // 105: compass.v1.CompassService.GetModelRegistry:output_type -> compass.v1.GetModelRegistryResponse - 87, // 106: compass.v1.CompassService.DeleteModelRegistry:output_type -> compass.v1.DeleteModelRegistryResponse - 14, // 107: compass.v1.SecretsService.SetSecret:output_type -> compass.v1.SetSecretResponse - 16, // 108: compass.v1.SecretsService.ListSecrets:output_type -> compass.v1.ListSecretsResponse - 19, // 109: compass.v1.SecretsService.DeleteSecret:output_type -> compass.v1.DeleteSecretResponse - 21, // 110: compass.v1.SecretsService.SetServerSecret:output_type -> compass.v1.SetServerSecretResponse - 23, // 111: compass.v1.SecretsService.DeleteServerSecret:output_type -> compass.v1.DeleteServerSecretResponse - 25, // 112: compass.v1.SecretsService.ListServerSecrets:output_type -> compass.v1.ListServerSecretsResponse - 87, // [87:113] is the sub-list for method output_type - 61, // [61:87] is the sub-list for method input_type - 61, // [61:61] is the sub-list for extension type_name - 61, // [61:61] is the sub-list for extension extendee - 0, // [0:61] is the sub-list for field type_name + 0, // 0: compass.v1.SetSecretRequest.delivery:type_name -> compass.v1.SecretDelivery + 1, // 1: compass.v1.SetSecretRequest.kind:type_name -> compass.v1.SecretKind + 2, // 2: compass.v1.SetSecretRequest.scope:type_name -> compass.v1.SecretScope + 17, // 3: compass.v1.ListSecretsResponse.secrets:type_name -> compass.v1.SecretStatus + 0, // 4: compass.v1.SecretStatus.delivery:type_name -> compass.v1.SecretDelivery + 1, // 5: compass.v1.SecretStatus.kind:type_name -> compass.v1.SecretKind + 2, // 6: compass.v1.DeleteSecretRequest.scope:type_name -> compass.v1.SecretScope + 22, // 7: compass.v1.ListServerSecretsResponse.server_secrets:type_name -> compass.v1.ServerSecretStatus + 31, // 8: compass.v1.SubscribeEventsResponse.server_status:type_name -> compass.v1.ServerStatus + 32, // 9: compass.v1.SubscribeEventsResponse.resync_required:type_name -> compass.v1.ResyncRequired + 33, // 10: compass.v1.SubscribeEventsResponse.agent_session_status:type_name -> compass.v1.AgentSessionStatus + 34, // 11: compass.v1.SubscribeEventsResponse.agent_message_chunk:type_name -> compass.v1.AgentMessageChunk + 35, // 12: compass.v1.SubscribeEventsResponse.agent_tool_call:type_name -> compass.v1.AgentToolCall + 36, // 13: compass.v1.SubscribeEventsResponse.agent_plan:type_name -> compass.v1.AgentPlan + 86, // 14: compass.v1.SubscribeEventsResponse.issue:type_name -> compass.v1.Issue + 86, // 15: compass.v1.ListBoardIssuesResponse.issues:type_name -> compass.v1.Issue + 3, // 16: compass.v1.ServerStatus.state:type_name -> compass.v1.ServerState + 6, // 17: compass.v1.AgentSessionStatus.state:type_name -> compass.v1.AgentSessionState + 4, // 18: compass.v1.AgentSessionStatus.runtime_tier:type_name -> compass.v1.RuntimeTier + 5, // 19: compass.v1.AgentSessionStatus.egress_posture:type_name -> compass.v1.EgressPosture + 7, // 20: compass.v1.AgentToolCall.status:type_name -> compass.v1.AgentToolCallStatus + 37, // 21: compass.v1.AgentPlan.entries:type_name -> compass.v1.AgentPlanEntry + 8, // 22: compass.v1.AgentPlanEntry.status:type_name -> compass.v1.AgentPlanEntryStatus + 39, // 23: compass.v1.SessionEvent.assistant_text:type_name -> compass.v1.SessionAssistantText + 40, // 24: compass.v1.SessionEvent.thinking:type_name -> compass.v1.SessionThinking + 41, // 25: compass.v1.SessionEvent.tool_call:type_name -> compass.v1.SessionToolCall + 42, // 26: compass.v1.SessionEvent.tool_call_update:type_name -> compass.v1.SessionToolCallUpdate + 44, // 27: compass.v1.SessionEvent.plan:type_name -> compass.v1.SessionPlan + 45, // 28: compass.v1.SessionEvent.notice:type_name -> compass.v1.SessionNotice + 46, // 29: compass.v1.SessionEvent.session_injection:type_name -> compass.v1.SessionInjection + 47, // 30: compass.v1.SessionEvent.session_error:type_name -> compass.v1.SessionError + 7, // 31: compass.v1.SessionToolCall.status:type_name -> compass.v1.AgentToolCallStatus + 7, // 32: compass.v1.SessionToolCallUpdate.status:type_name -> compass.v1.AgentToolCallStatus + 43, // 33: compass.v1.SessionToolCallUpdate.diffs:type_name -> compass.v1.SessionFileDiff + 37, // 34: compass.v1.SessionPlan.entries:type_name -> compass.v1.AgentPlanEntry + 9, // 35: compass.v1.SessionInjection.op_kind:type_name -> compass.v1.SessionInjectionKind + 10, // 36: compass.v1.SessionError.kind:type_name -> compass.v1.SessionErrorKind + 38, // 37: compass.v1.AgentSessionFrame.event:type_name -> compass.v1.SessionEvent + 6, // 38: compass.v1.AgentSessionFrame.state:type_name -> compass.v1.AgentSessionState + 33, // 39: compass.v1.GetAgentStatusResponse.statuses:type_name -> compass.v1.AgentSessionStatus + 74, // 40: compass.v1.ModelRegistryEntry.candidates:type_name -> compass.v1.ModelCandidate + 75, // 41: compass.v1.ModelRegistryEntry.metadata:type_name -> compass.v1.ModelMetadata + 95, // 42: compass.v1.ModelRegistry.entries:type_name -> compass.v1.ModelRegistry.EntriesEntry + 77, // 43: compass.v1.PutModelRegistryRequest.registry:type_name -> compass.v1.ModelRegistry + 77, // 44: compass.v1.GetModelRegistryResponse.registry:type_name -> compass.v1.ModelRegistry + 12, // 45: compass.v1.ForgeRef.provider:type_name -> compass.v1.ForgeProvider + 85, // 46: compass.v1.Issue.forge:type_name -> compass.v1.ForgeRef + 84, // 47: compass.v1.Issue.agent:type_name -> compass.v1.AgentAttribution + 96, // 48: compass.v1.Issue.updated_at:type_name -> google.protobuf.Timestamp + 11, // 49: compass.v1.Issue.state:type_name -> compass.v1.IssueState + 87, // 50: compass.v1.Issue.prs:type_name -> compass.v1.PullRequest + 91, // 51: compass.v1.Issue.tracker:type_name -> compass.v1.TrackerRef + 85, // 52: compass.v1.PullRequest.forge:type_name -> compass.v1.ForgeRef + 84, // 53: compass.v1.PullRequest.agent:type_name -> compass.v1.AgentAttribution + 90, // 54: compass.v1.PullRequest.changed:type_name -> compass.v1.ChangedStats + 88, // 55: compass.v1.PullRequest.checks:type_name -> compass.v1.ChecksSummary + 92, // 56: compass.v1.PullRequest.reviews:type_name -> compass.v1.Review + 93, // 57: compass.v1.PullRequest.threads:type_name -> compass.v1.ReviewThread + 89, // 58: compass.v1.ChecksSummary.checks:type_name -> compass.v1.Check + 94, // 59: compass.v1.ReviewThread.comments:type_name -> compass.v1.Comment + 76, // 60: compass.v1.ModelRegistry.EntriesEntry.value:type_name -> compass.v1.ModelRegistryEntry + 23, // 61: compass.v1.CompassService.GetServerInfo:input_type -> compass.v1.GetServerInfoRequest + 25, // 62: compass.v1.CompassService.WhoAmI:input_type -> compass.v1.WhoAmIRequest + 27, // 63: compass.v1.CompassService.SubscribeEvents:input_type -> compass.v1.SubscribeEventsRequest + 29, // 64: compass.v1.CompassService.ListBoardIssues:input_type -> compass.v1.ListBoardIssuesRequest + 50, // 65: compass.v1.CompassService.ProvisionAgentWorkspace:input_type -> compass.v1.ProvisionAgentWorkspaceRequest + 54, // 66: compass.v1.CompassService.StartAgentSession:input_type -> compass.v1.StartAgentSessionRequest + 56, // 67: compass.v1.CompassService.SpawnAgent:input_type -> compass.v1.SpawnAgentRequest + 58, // 68: compass.v1.CompassService.StopAgentSession:input_type -> compass.v1.StopAgentSessionRequest + 52, // 69: compass.v1.CompassService.RemoveAgentWorkspace:input_type -> compass.v1.RemoveAgentWorkspaceRequest + 60, // 70: compass.v1.CompassService.ReloadAgentSession:input_type -> compass.v1.ReloadAgentSessionRequest + 62, // 71: compass.v1.CompassService.GetAgentStatus:input_type -> compass.v1.GetAgentStatusRequest + 48, // 72: compass.v1.CompassService.SubscribeAgentSession:input_type -> compass.v1.SubscribeAgentSessionRequest + 64, // 73: compass.v1.CompassService.IssueToken:input_type -> compass.v1.IssueTokenRequest + 66, // 74: compass.v1.CompassService.RevokeToken:input_type -> compass.v1.RevokeTokenRequest + 68, // 75: compass.v1.CompassService.PutAgentConfig:input_type -> compass.v1.PutAgentConfigRequest + 70, // 76: compass.v1.CompassService.GetAgentConfigInfo:input_type -> compass.v1.GetAgentConfigInfoRequest + 72, // 77: compass.v1.CompassService.DeleteAgentConfig:input_type -> compass.v1.DeleteAgentConfigRequest + 78, // 78: compass.v1.CompassService.PutModelRegistry:input_type -> compass.v1.PutModelRegistryRequest + 80, // 79: compass.v1.CompassService.GetModelRegistry:input_type -> compass.v1.GetModelRegistryRequest + 82, // 80: compass.v1.CompassService.DeleteModelRegistry:input_type -> compass.v1.DeleteModelRegistryRequest + 13, // 81: compass.v1.SecretsService.SetSecret:input_type -> compass.v1.SetSecretRequest + 15, // 82: compass.v1.SecretsService.ListSecrets:input_type -> compass.v1.ListSecretsRequest + 18, // 83: compass.v1.SecretsService.DeleteSecret:input_type -> compass.v1.DeleteSecretRequest + 20, // 84: compass.v1.SecretsService.ListServerSecrets:input_type -> compass.v1.ListServerSecretsRequest + 24, // 85: compass.v1.CompassService.GetServerInfo:output_type -> compass.v1.GetServerInfoResponse + 26, // 86: compass.v1.CompassService.WhoAmI:output_type -> compass.v1.WhoAmIResponse + 28, // 87: compass.v1.CompassService.SubscribeEvents:output_type -> compass.v1.SubscribeEventsResponse + 30, // 88: compass.v1.CompassService.ListBoardIssues:output_type -> compass.v1.ListBoardIssuesResponse + 51, // 89: compass.v1.CompassService.ProvisionAgentWorkspace:output_type -> compass.v1.ProvisionAgentWorkspaceResponse + 55, // 90: compass.v1.CompassService.StartAgentSession:output_type -> compass.v1.StartAgentSessionResponse + 57, // 91: compass.v1.CompassService.SpawnAgent:output_type -> compass.v1.SpawnAgentResponse + 59, // 92: compass.v1.CompassService.StopAgentSession:output_type -> compass.v1.StopAgentSessionResponse + 53, // 93: compass.v1.CompassService.RemoveAgentWorkspace:output_type -> compass.v1.RemoveAgentWorkspaceResponse + 61, // 94: compass.v1.CompassService.ReloadAgentSession:output_type -> compass.v1.ReloadAgentSessionResponse + 63, // 95: compass.v1.CompassService.GetAgentStatus:output_type -> compass.v1.GetAgentStatusResponse + 49, // 96: compass.v1.CompassService.SubscribeAgentSession:output_type -> compass.v1.AgentSessionFrame + 65, // 97: compass.v1.CompassService.IssueToken:output_type -> compass.v1.IssueTokenResponse + 67, // 98: compass.v1.CompassService.RevokeToken:output_type -> compass.v1.RevokeTokenResponse + 69, // 99: compass.v1.CompassService.PutAgentConfig:output_type -> compass.v1.PutAgentConfigResponse + 71, // 100: compass.v1.CompassService.GetAgentConfigInfo:output_type -> compass.v1.GetAgentConfigInfoResponse + 73, // 101: compass.v1.CompassService.DeleteAgentConfig:output_type -> compass.v1.DeleteAgentConfigResponse + 79, // 102: compass.v1.CompassService.PutModelRegistry:output_type -> compass.v1.PutModelRegistryResponse + 81, // 103: compass.v1.CompassService.GetModelRegistry:output_type -> compass.v1.GetModelRegistryResponse + 83, // 104: compass.v1.CompassService.DeleteModelRegistry:output_type -> compass.v1.DeleteModelRegistryResponse + 14, // 105: compass.v1.SecretsService.SetSecret:output_type -> compass.v1.SetSecretResponse + 16, // 106: compass.v1.SecretsService.ListSecrets:output_type -> compass.v1.ListSecretsResponse + 19, // 107: compass.v1.SecretsService.DeleteSecret:output_type -> compass.v1.DeleteSecretResponse + 21, // 108: compass.v1.SecretsService.ListServerSecrets:output_type -> compass.v1.ListServerSecretsResponse + 85, // [85:109] is the sub-list for method output_type + 61, // [61:85] is the sub-list for method input_type + 61, // [61:61] is the sub-list for extension type_name + 61, // [61:61] is the sub-list for extension extendee + 0, // [0:61] is the sub-list for field type_name } func init() { file_compass_v1_compass_proto_init() } @@ -6690,7 +6505,7 @@ func file_compass_v1_compass_proto_init() { if File_compass_v1_compass_proto != nil { return } - file_compass_v1_compass_proto_msgTypes[19].OneofWrappers = []any{ + file_compass_v1_compass_proto_msgTypes[15].OneofWrappers = []any{ (*SubscribeEventsResponse_ServerStatus)(nil), (*SubscribeEventsResponse_ResyncRequired)(nil), (*SubscribeEventsResponse_AgentSessionStatus)(nil), @@ -6699,7 +6514,7 @@ func file_compass_v1_compass_proto_init() { (*SubscribeEventsResponse_AgentPlan)(nil), (*SubscribeEventsResponse_Issue)(nil), } - file_compass_v1_compass_proto_msgTypes[29].OneofWrappers = []any{ + file_compass_v1_compass_proto_msgTypes[25].OneofWrappers = []any{ (*SessionEvent_AssistantText)(nil), (*SessionEvent_Thinking)(nil), (*SessionEvent_ToolCall)(nil), @@ -6709,16 +6524,16 @@ func file_compass_v1_compass_proto_init() { (*SessionEvent_SessionInjection)(nil), (*SessionEvent_SessionError)(nil), } + file_compass_v1_compass_proto_msgTypes[30].OneofWrappers = []any{} + file_compass_v1_compass_proto_msgTypes[32].OneofWrappers = []any{} file_compass_v1_compass_proto_msgTypes[34].OneofWrappers = []any{} - file_compass_v1_compass_proto_msgTypes[36].OneofWrappers = []any{} - file_compass_v1_compass_proto_msgTypes[38].OneofWrappers = []any{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: unsafe.Slice(unsafe.StringData(file_compass_v1_compass_proto_rawDesc), len(file_compass_v1_compass_proto_rawDesc)), NumEnums: 13, - NumMessages: 87, + NumMessages: 83, NumExtensions: 0, NumServices: 2, }, diff --git a/go/gen/compass/v1/compassv1connect/compass.connect.go b/go/gen/compass/v1/compassv1connect/compass.connect.go index 24c14bf12..83d6626f8 100644 --- a/go/gen/compass/v1/compassv1connect/compass.connect.go +++ b/go/gen/compass/v1/compassv1connect/compass.connect.go @@ -111,12 +111,6 @@ const ( // SecretsServiceDeleteSecretProcedure is the fully-qualified name of the SecretsService's // DeleteSecret RPC. SecretsServiceDeleteSecretProcedure = "/compass.v1.SecretsService/DeleteSecret" - // SecretsServiceSetServerSecretProcedure is the fully-qualified name of the SecretsService's - // SetServerSecret RPC. - SecretsServiceSetServerSecretProcedure = "/compass.v1.SecretsService/SetServerSecret" - // SecretsServiceDeleteServerSecretProcedure is the fully-qualified name of the SecretsService's - // DeleteServerSecret RPC. - SecretsServiceDeleteServerSecretProcedure = "/compass.v1.SecretsService/DeleteServerSecret" // SecretsServiceListServerSecretsProcedure is the fully-qualified name of the SecretsService's // ListServerSecrets RPC. SecretsServiceListServerSecretsProcedure = "/compass.v1.SecretsService/ListServerSecrets" @@ -940,19 +934,9 @@ type SecretsServiceClient interface { ListSecrets(context.Context, *connect.Request[v1.ListSecretsRequest]) (*connect.Response[v1.ListSecretsResponse], error) // Remove a secret's registry row + value. User-only. DeleteSecret(context.Context, *connect.Request[v1.DeleteSecretRequest]) (*connect.Response[v1.DeleteSecretResponse], error) - // Declare a SERVER secret's registry row in the separate server_secrets - // registry and write its value via the server resolver. Admin-only. The - // name MUST carry a reserved server-secret prefix (SERVER_ or - // GATEWAY_CREDENTIALS_); an unprefixed name is rejected. `value` is never - // logged. Server secrets are never delivered into an agent container. - SetServerSecret(context.Context, *connect.Request[v1.SetServerSecretRequest]) (*connect.Response[v1.SetServerSecretResponse], error) - // Remove a SERVER secret's registry row + value. Admin-only. The reserved - // master-key name is rejected (rotation is separate machinery, never a raw - // overwrite or delete). - DeleteServerSecret(context.Context, *connect.Request[v1.DeleteServerSecretRequest]) (*connect.Response[v1.DeleteServerSecretResponse], error) // List declared SERVER secrets by name with set/unset — names only, NEVER - // values. Admin-only, like its server-secret siblings: the rows are - // deployment-owned, so there is no per-account authorization to fall back on. + // values. Admin-only: the rows are deployment-owned, so there is no + // per-account authorization to fall back on. // Unlike ListSecrets, `is_set` is a PROVIDER PROBE, not a registry read: a // server secret's row is self-declared at every boot while its value lives in // the SecretSpec provider and is populated separately, so a declared name is @@ -989,18 +973,6 @@ func NewSecretsServiceClient(httpClient connect.HTTPClient, baseURL string, opts connect.WithSchema(secretsServiceMethods.ByName("DeleteSecret")), connect.WithClientOptions(opts...), ), - setServerSecret: connect.NewClient[v1.SetServerSecretRequest, v1.SetServerSecretResponse]( - httpClient, - baseURL+SecretsServiceSetServerSecretProcedure, - connect.WithSchema(secretsServiceMethods.ByName("SetServerSecret")), - connect.WithClientOptions(opts...), - ), - deleteServerSecret: connect.NewClient[v1.DeleteServerSecretRequest, v1.DeleteServerSecretResponse]( - httpClient, - baseURL+SecretsServiceDeleteServerSecretProcedure, - connect.WithSchema(secretsServiceMethods.ByName("DeleteServerSecret")), - connect.WithClientOptions(opts...), - ), listServerSecrets: connect.NewClient[v1.ListServerSecretsRequest, v1.ListServerSecretsResponse]( httpClient, baseURL+SecretsServiceListServerSecretsProcedure, @@ -1012,12 +984,10 @@ func NewSecretsServiceClient(httpClient connect.HTTPClient, baseURL string, opts // secretsServiceClient implements SecretsServiceClient. type secretsServiceClient struct { - setSecret *connect.Client[v1.SetSecretRequest, v1.SetSecretResponse] - listSecrets *connect.Client[v1.ListSecretsRequest, v1.ListSecretsResponse] - deleteSecret *connect.Client[v1.DeleteSecretRequest, v1.DeleteSecretResponse] - setServerSecret *connect.Client[v1.SetServerSecretRequest, v1.SetServerSecretResponse] - deleteServerSecret *connect.Client[v1.DeleteServerSecretRequest, v1.DeleteServerSecretResponse] - listServerSecrets *connect.Client[v1.ListServerSecretsRequest, v1.ListServerSecretsResponse] + setSecret *connect.Client[v1.SetSecretRequest, v1.SetSecretResponse] + listSecrets *connect.Client[v1.ListSecretsRequest, v1.ListSecretsResponse] + deleteSecret *connect.Client[v1.DeleteSecretRequest, v1.DeleteSecretResponse] + listServerSecrets *connect.Client[v1.ListServerSecretsRequest, v1.ListServerSecretsResponse] } // SetSecret calls compass.v1.SecretsService.SetSecret. @@ -1035,16 +1005,6 @@ func (c *secretsServiceClient) DeleteSecret(ctx context.Context, req *connect.Re return c.deleteSecret.CallUnary(ctx, req) } -// SetServerSecret calls compass.v1.SecretsService.SetServerSecret. -func (c *secretsServiceClient) SetServerSecret(ctx context.Context, req *connect.Request[v1.SetServerSecretRequest]) (*connect.Response[v1.SetServerSecretResponse], error) { - return c.setServerSecret.CallUnary(ctx, req) -} - -// DeleteServerSecret calls compass.v1.SecretsService.DeleteServerSecret. -func (c *secretsServiceClient) DeleteServerSecret(ctx context.Context, req *connect.Request[v1.DeleteServerSecretRequest]) (*connect.Response[v1.DeleteServerSecretResponse], error) { - return c.deleteServerSecret.CallUnary(ctx, req) -} - // ListServerSecrets calls compass.v1.SecretsService.ListServerSecrets. func (c *secretsServiceClient) ListServerSecrets(ctx context.Context, req *connect.Request[v1.ListServerSecretsRequest]) (*connect.Response[v1.ListServerSecretsResponse], error) { return c.listServerSecrets.CallUnary(ctx, req) @@ -1060,19 +1020,9 @@ type SecretsServiceHandler interface { ListSecrets(context.Context, *connect.Request[v1.ListSecretsRequest]) (*connect.Response[v1.ListSecretsResponse], error) // Remove a secret's registry row + value. User-only. DeleteSecret(context.Context, *connect.Request[v1.DeleteSecretRequest]) (*connect.Response[v1.DeleteSecretResponse], error) - // Declare a SERVER secret's registry row in the separate server_secrets - // registry and write its value via the server resolver. Admin-only. The - // name MUST carry a reserved server-secret prefix (SERVER_ or - // GATEWAY_CREDENTIALS_); an unprefixed name is rejected. `value` is never - // logged. Server secrets are never delivered into an agent container. - SetServerSecret(context.Context, *connect.Request[v1.SetServerSecretRequest]) (*connect.Response[v1.SetServerSecretResponse], error) - // Remove a SERVER secret's registry row + value. Admin-only. The reserved - // master-key name is rejected (rotation is separate machinery, never a raw - // overwrite or delete). - DeleteServerSecret(context.Context, *connect.Request[v1.DeleteServerSecretRequest]) (*connect.Response[v1.DeleteServerSecretResponse], error) // List declared SERVER secrets by name with set/unset — names only, NEVER - // values. Admin-only, like its server-secret siblings: the rows are - // deployment-owned, so there is no per-account authorization to fall back on. + // values. Admin-only: the rows are deployment-owned, so there is no + // per-account authorization to fall back on. // Unlike ListSecrets, `is_set` is a PROVIDER PROBE, not a registry read: a // server secret's row is self-declared at every boot while its value lives in // the SecretSpec provider and is populated separately, so a declared name is @@ -1105,18 +1055,6 @@ func NewSecretsServiceHandler(svc SecretsServiceHandler, opts ...connect.Handler connect.WithSchema(secretsServiceMethods.ByName("DeleteSecret")), connect.WithHandlerOptions(opts...), ) - secretsServiceSetServerSecretHandler := connect.NewUnaryHandler( - SecretsServiceSetServerSecretProcedure, - svc.SetServerSecret, - connect.WithSchema(secretsServiceMethods.ByName("SetServerSecret")), - connect.WithHandlerOptions(opts...), - ) - secretsServiceDeleteServerSecretHandler := connect.NewUnaryHandler( - SecretsServiceDeleteServerSecretProcedure, - svc.DeleteServerSecret, - connect.WithSchema(secretsServiceMethods.ByName("DeleteServerSecret")), - connect.WithHandlerOptions(opts...), - ) secretsServiceListServerSecretsHandler := connect.NewUnaryHandler( SecretsServiceListServerSecretsProcedure, svc.ListServerSecrets, @@ -1131,10 +1069,6 @@ func NewSecretsServiceHandler(svc SecretsServiceHandler, opts ...connect.Handler secretsServiceListSecretsHandler.ServeHTTP(w, r) case SecretsServiceDeleteSecretProcedure: secretsServiceDeleteSecretHandler.ServeHTTP(w, r) - case SecretsServiceSetServerSecretProcedure: - secretsServiceSetServerSecretHandler.ServeHTTP(w, r) - case SecretsServiceDeleteServerSecretProcedure: - secretsServiceDeleteServerSecretHandler.ServeHTTP(w, r) case SecretsServiceListServerSecretsProcedure: secretsServiceListServerSecretsHandler.ServeHTTP(w, r) default: @@ -1158,14 +1092,6 @@ func (UnimplementedSecretsServiceHandler) DeleteSecret(context.Context, *connect return nil, connect.NewError(connect.CodeUnimplemented, errors.New("compass.v1.SecretsService.DeleteSecret is not implemented")) } -func (UnimplementedSecretsServiceHandler) SetServerSecret(context.Context, *connect.Request[v1.SetServerSecretRequest]) (*connect.Response[v1.SetServerSecretResponse], error) { - return nil, connect.NewError(connect.CodeUnimplemented, errors.New("compass.v1.SecretsService.SetServerSecret is not implemented")) -} - -func (UnimplementedSecretsServiceHandler) DeleteServerSecret(context.Context, *connect.Request[v1.DeleteServerSecretRequest]) (*connect.Response[v1.DeleteServerSecretResponse], error) { - return nil, connect.NewError(connect.CodeUnimplemented, errors.New("compass.v1.SecretsService.DeleteServerSecret is not implemented")) -} - func (UnimplementedSecretsServiceHandler) ListServerSecrets(context.Context, *connect.Request[v1.ListServerSecretsRequest]) (*connect.Response[v1.ListServerSecretsResponse], error) { return nil, connect.NewError(connect.CodeUnimplemented, errors.New("compass.v1.SecretsService.ListServerSecrets is not implemented")) } diff --git a/go/internal/auth/admin_gate.go b/go/internal/auth/admin_gate.go index 36d6a90d1..686e3e463 100644 --- a/go/internal/auth/admin_gate.go +++ b/go/internal/auth/admin_gate.go @@ -127,17 +127,11 @@ func classifyProcedure(procedure string) (privilege, bool) { compassv1connect.SecretsServiceDeleteSecretProcedure: return authenticatedOpen{}, true - // The SERVER-secret RPCs are ADMIN-only, unlike their user-facing siblings - // above. They read and write the separate server_secrets registry, whose - // rows are deployment-owned (forge App PEMs, webhook secrets, the - // gateway master-key family) rather than account-owned — there is no - // per-account authorization to fall back on, so the door gate is the - // authorization. The LIST is gated as tightly as the writes: the declared - // server-secret names are the deployment's own inventory, not something an - // agent token has any business enumerating. - case compassv1connect.SecretsServiceSetServerSecretProcedure, - compassv1connect.SecretsServiceDeleteServerSecretProcedure, - compassv1connect.SecretsServiceListServerSecretsProcedure: + // ListServerSecrets is ADMIN-only: the declared server-secret names are the + // deployment's own inventory (forge App PEMs, webhook secrets, the gateway + // master-key family), not something an agent token has any business + // enumerating. + case compassv1connect.SecretsServiceListServerSecretsProcedure: return adminOnly{}, true default: diff --git a/go/internal/hostcheck/hostcheck.go b/go/internal/hostcheck/hostcheck.go index 88f1c754c..fb4854e84 100644 --- a/go/internal/hostcheck/hostcheck.go +++ b/go/internal/hostcheck/hostcheck.go @@ -45,16 +45,10 @@ var MicroVMFloors = []VersionFloor{ {Binary: "passt", Fields: []int{2025, 9, 19}, Display: "2025_09_19"}, } -// SecretSpecFloor pins the minimum acceptable version of the secretspec CLI — -// the binary the Go secrets WRITE path spawns by name (internal/secrets: -// SpecResolver.Set resolves it off PATH; Delete is a validate-only no-op until -// the provider hard-delete is wired), so it is an install-time -// dependency of every shipped surface even though boot never touches it. The -// floor tracks the secretspec-go SDK pin in go/go.mod so the read half (SDK) -// and the write half (CLI) cannot drift apart across a release. Unlike the -// microVM trio this is a single VersionFloor rather than a []VersionFloor: it -// is one binary consumed by a different check, and it must NOT be iterated by -// the microVM loop. +// SecretSpecFloor pins the minimum secretspec CLI version — the operator's +// secret-rotation path (no Go code spawns it). It tracks the secretspec-go SDK +// pin in go/go.mod so the SDK read half and the CLI rotation half stay on one +// release. A single VersionFloor, not a []VersionFloor: never iterated below. var SecretSpecFloor = VersionFloor{Binary: "secretspec", Fields: []int{0, 20, 0}, Display: "0.20.0"} // digitRun matches one run of decimal digits; VersionGroups splits on it. diff --git a/go/internal/secrets/resolver.go b/go/internal/secrets/resolver.go index 1b8fa6fd7..c8ac3d7ff 100644 --- a/go/internal/secrets/resolver.go +++ b/go/internal/secrets/resolver.go @@ -1,11 +1,9 @@ package secrets import ( - "bytes" "context" "fmt" "os" - "os/exec" //nolint:depguard // secrets write seam: spawns the operator-pinned secretspec CLI (G204 site justified below) "sort" "strings" @@ -22,13 +20,6 @@ const manifestProject = "compass" // configured — the Server owns one project, one profile. const defaultProfile = "default" -// defaultCLI is the SecretSpec binary the write path spawns by name, resolved -// off PATH. The dev shell stages it (devenv.nix); nothing stages it into the -// shipped artifact, so a deployment must put a binary at or above the floor on -// the server's PATH — see TestSecretSpecCLIVersionFloor and RIG-3437. Named so -// that floor guard and the resolver agree on which binary that is. -const defaultCLI = "secretspec" - // reportStatusResolved is the SecretSpec report status meaning the provider // holds a value for a declared secret. The report's other statuses // ("missing_required", "missing_optional") both mean no value is present, so @@ -44,10 +35,9 @@ type declarations interface { DeclaredSecrets(ctx context.Context) ([]store.SecretDeclaration, error) } -// Resolver resolves the declared secret set to values through SecretSpec, and -// provides the provider write path the T7 entry RPCs require. Resolve reads the -// whole registry (inject-all: no per-agent filter in the MVP — a names filter -// is the future grants seam). Set/Delete are the provider write path. +// Resolver resolves the declared secret set to values through SecretSpec. +// Resolve reads the whole registry (inject-all: no per-agent filter in the MVP +// — a names filter is the future grants seam). type Resolver interface { // Resolve resolves every declared secret to its value via SecretSpec, // returning a ResolvedSecret per declaration with a content-hash Version. @@ -55,14 +45,6 @@ type Resolver interface { // from the provider is an error (the store declared it, so the provider must // hold it). Resolve(ctx context.Context, reason string) ([]ResolvedSecret, error) - // Set writes a value into the provider for an already-declared name. The - // value is fed to the pinned CLI over stdin, never argv. reason is recorded - // in the SecretSpec audit log and is required: an empty reason is rejected - // before the CLI is spawned, so the audit reason travels with every write - // exactly as it does on the read path. - Set(ctx context.Context, name, value, reason string) error - // Delete removes a value from the provider for a name. - Delete(ctx context.Context, name string) error // Statuses reports, per declared secret, whether the provider currently // holds a value for it — names + set/unset, NEVER a value. It is the // value-free counterpart to Resolve, for the caller that needs to @@ -89,10 +71,6 @@ type SpecResolver struct { // state directory, never repo state. The SDK builder takes provider/profile // plus a manifest path, so the resolver points WithPath at this manifest. stateDir string - // cli is the pinned secretspec binary for the write path (Set/Delete). The - // SDK is read-shaped; upstream writes are CLI-only. Defaults to "secretspec" - // resolved on PATH; set explicitly to pin the Server's closure binary. - cli string } // SpecOption configures a SpecResolver. @@ -106,9 +84,6 @@ func WithProvider(uri string) SpecOption { return func(r *SpecResolver) { r.prov // (see resolvedProfile), never the SDK/CLI built-in default. func WithProfile(profile string) SpecOption { return func(r *SpecResolver) { r.profile = profile } } -// WithCLI pins the secretspec CLI binary used for the write path. -func WithCLI(path string) SpecOption { return func(r *SpecResolver) { r.cli = path } } - // NewSpecResolver constructs a SecretSpec-backed Resolver over the store's // names registry. stateDir is the Server-owned directory the generated manifest // is written under (created if absent). @@ -117,7 +92,6 @@ func NewSpecResolver(st declarations, stateDir string, opts ...SpecOption) *Spec store: st, profile: defaultProfile, stateDir: stateDir, - cli: defaultCLI, } for _, opt := range opts { opt(r) @@ -305,92 +279,6 @@ func (r *SpecResolver) Statuses(ctx context.Context, reason string) ([]SecretSta return out, nil } -// Set writes value into the provider for name via the pinned CLI, feeding the -// value on stdin (never argv, so it is not visible in the host process list). -// The SDK is read-shaped, so the write path shells the CLI. name must be a -// valid secret name; an empty value and an empty reason are both rejected up -// front. reason is recorded in the SecretSpec audit log and can be required by -// the provider policy, so it travels with every write exactly as it does on -// the read path. -// -// The write is pointed at a generated manifest through the global --file flag, -// the same explicit-manifest treatment Resolve gives the read path: the -// registry is the source of truth and no secretspec.toml is committed, so a -// CLI left to discover one walks up from the process cwd and finds nothing. -// The generated manifest declares exactly the name being written. -// -// Verified against secretspec v0.20.0 source (secrets.rs:4423-4427 for the -// piped-stdin branch and trim, :4430-4433 for empty-value rejection): `set -// ` with the value omitted from argv and stdin not a tty takes the -// piped-stdin branch — a first-class io::stdin().read_to_string() with no -// interactive prompt constructed — then trims the value and rejects an empty -// one. So `secretspec --file= --reason= set --provider=

-// --profile=

` with the value on stdin is the write path, no positional -// VALUE. The joined --flag=value form is required on every flag, not -// stylistic: the two-token form parses a leading-dash value as the next flag -// and exits 2 (see setArgs). -func (r *SpecResolver) Set(ctx context.Context, name, value, reason string) error { - if err := ValidateName(name); err != nil { - return err - } - // The CLI trims the piped value and rejects an empty one; reject it here so - // the failure is a deterministic caller error, not a shelled-out exit. - if strings.TrimSpace(value) == "" { - return fmt.Errorf("secrets: set %q: value is empty", name) - } - // The reason is the audit record, and the CLI's own require_reason policy is - // an environment heuristic (it gates on agent-env detection), so an omitted - // reason makes the same write succeed on one host and be refused on another. - // Screen it here for a deterministic caller error instead. - if strings.TrimSpace(reason) == "" { - return fmt.Errorf("secrets: set %q: reason is empty", name) - } - // The CLI loads the profile's declared set from a manifest; generate one - // declaring just this name rather than letting it search the process cwd. - // One resolved profile feeds both the manifest header and the argv below, so - // the two cannot describe different profiles. - profile := r.resolvedProfile() - manifestPath, err := r.writeManifest(profile, []store.SecretDeclaration{{Name: name}}) - if err != nil { - return err - } - // A transient input to the CLI, exactly as on the read path — remove it once - // the write returns; the registry, not this file, is the durable source. - defer func() { _ = os.Remove(manifestPath) }() - args := r.setArgs(name, reason, manifestPath, profile) - //nolint:gosec // G204: the SecretSpec write seam — spawns the operator-pinned - // secretspec CLI (r.cli) with an argv slice passed straight to exec, so no - // shell interprets any of it. Three variables ride it: name, validated - // against the env-var-name grammar (ValidateName) above; and reason plus - // manifestPath, each a single joined --flag=value token, so neither can - // introduce a new argv element or be re-parsed as a flag. The value rides - // stdin, never argv. - cmd := exec.CommandContext(ctx, r.cli, args...) - cmd.Stdin = strings.NewReader(value + "\n") - var stderr bytes.Buffer - cmd.Stderr = &stderr - if err := cmd.Run(); err != nil { - return fmt.Errorf("secrets: set %q via %s: %w (%s)", name, r.cli, err, strings.TrimSpace(stderr.String())) - } - return nil -} - -// Delete removes name's value from the provider. See the package/record note: -// with a manifest-driven resolver only declared names ever resolve, so removing -// the store declaration (store.DeleteSecretDeclaration) is the effective MVP -// delete. A provider-value hard-delete IS available at this pin (`secretspec -// delete`, 0.18+); wiring it is a deliberate deferral (RIG-3436), not an -// upstream gap — it makes the operation destructive against a keyspace shared -// by default, so it needs its own F1-guard and ordering analysis. This method -// is the seam for that write; today it validates the name and is a no-op -// success so the T7 handler can call one uniform surface. -func (r *SpecResolver) Delete(ctx context.Context, name string) error { - if err := ValidateName(name); err != nil { - return err - } - return nil -} - // resolvedProfile is the SecretSpec profile every invocation runs under: the // pinned profile, or defaultProfile when none is configured (an explicit // WithProfile("")). One accessor for both paths so the generated manifest @@ -402,29 +290,6 @@ func (r *SpecResolver) resolvedProfile() string { return r.profile } -// setArgs builds the argv for the write path (pure, so it is unit-testable -// without executing the binary). The value never appears here — it rides stdin. -// --file and --reason are global flags, accepted on either side of the `set` -// subcommand; both are emitted before it as the canonical, unambiguous -// position. Every flag uses the joined form, which binds each value to its -// flag: the two-token form parses a leading-dash value as the next flag and -// exits 2. That is a property of the value's shape, not of which flag carries -// it, so it holds for the operator-configured provider and profile just as it -// does for a caller-supplied reason — ValidateProfile admits a leading dash, -// and the provider string is unvalidated. -// -// profile is the caller's resolvedProfile(), hence non-empty by construction, -// so --profile is emitted unconditionally: the CLI acts under exactly the -// profile the generated manifest declares instead of falling back to its own -// built-in default and agreeing only by coincidence. -func (r *SpecResolver) setArgs(name, reason, manifestPath, profile string) []string { - args := []string{"--file=" + manifestPath, "--reason=" + reason, "set", name} - if r.provider != "" { - args = append(args, "--provider="+r.provider) - } - return append(args, "--profile="+profile) -} - // writeManifest renders the manifest for the current declared set and writes it // to a unique 0600 temp file in the resolver's state dir, returning its path. // A per-resolve file (not one shared path) so concurrent resolves never race on diff --git a/go/internal/secrets/resolver_test.go b/go/internal/secrets/resolver_test.go index 051f2497f..ce1ddf7f7 100644 --- a/go/internal/secrets/resolver_test.go +++ b/go/internal/secrets/resolver_test.go @@ -2,20 +2,15 @@ package secrets // Pure contracts for the resolver's testable seams: manifest generation // (value-free TOML, sorted, every name required, name re-validated as defense -// in depth), the write-path argv construction (value never in argv — it rides -// stdin), and the empty-registry short-circuit (no provider/SDK call, so no FFI -// lib needed). A non-empty Resolve dlopens the SecretSpec cdylib, which is not -// staged here; that live path is the env-gated integration tier (T8). +// in depth) and the empty-registry short-circuit (no provider/SDK call, so no +// FFI lib needed). A non-empty Resolve dlopens the SecretSpec cdylib, which is +// not staged here; that live path is the env-gated integration tier (T8). import ( "context" "errors" - "io" "os" - "os/exec" "path/filepath" - "slices" - "strconv" "strings" "sync" "testing" @@ -82,78 +77,6 @@ func TestBuildManifest(t *testing.T) { } } -func TestSetArgs(t *testing.T) { - const reason = "compass: unit test write" - const manifest = "/tmp/state/secretspec-123.toml" - const setVerb = "set" - - // An explicit WithProfile("") still resolves to defaultProfile, and --profile - // is emitted unconditionally: the CLI acts under exactly the profile the - // generated manifest declares, rather than agreeing only because the CLI's - // own built-in default happens to match. No provider flag (none pinned), and - // crucially no VALUE anywhere in the argv. - bare := NewSpecResolver(nil, "/tmp/state", WithProfile("")) - got := bare.setArgs("API_KEY", reason, manifest, bare.resolvedProfile()) - want := []string{ - "--file=" + manifest, "--reason=" + reason, setVerb, "API_KEY", - "--profile=" + defaultProfile, - } - if !equalArgs(got, want) { - t.Errorf("setArgs bare = %v, want %v", got, want) - } - - // Provider + profile set → their flags appear; the name is still the only - // positional after the verb, and both globals still lead the argv. - full := NewSpecResolver(nil, "/tmp/state", WithProvider("keyring://"), WithProfile("production")) - gotFull := full.setArgs("API_KEY", reason, manifest, full.resolvedProfile()) - wantFull := []string{ - "--file=" + manifest, "--reason=" + reason, setVerb, "API_KEY", - "--provider=keyring://", "--profile=production", - } - if !equalArgs(gotFull, wantFull) { - t.Errorf("setArgs full = %v, want %v", gotFull, wantFull) - } - - // A caller-supplied reason beginning with a dash stays one joined argument. - hostile := bare.setArgs("API_KEY", "--provider=evil://", manifest, bare.resolvedProfile()) - if !slices.Contains(hostile, "--reason=--provider=evil://") || slices.Contains(hostile, "--provider=evil://") || slices.Contains(hostile, "--provider") { - t.Errorf("setArgs hostile reason = %v, want one joined reason token and no provider flag", hostile) - } - - // Same guarantee for the operator-configured flags: ValidateProfile admits a - // leading dash, and the provider string is unvalidated, so a dash-leading - // value must stay bound to its own flag rather than being parsed as the next - // one (which the CLI rejects with a bare exit 2). - dashCfg := NewSpecResolver(nil, "/tmp/state", WithProvider("--reason=evil"), WithProfile("-prod")) - gotDash := dashCfg.setArgs("API_KEY", reason, manifest, dashCfg.resolvedProfile()) - if !slices.Contains(gotDash, "--profile=-prod") || !slices.Contains(gotDash, "--provider=--reason=evil") { - t.Errorf("setArgs dash-leading config = %v, want joined --profile/--provider tokens", gotDash) - } - for _, a := range gotDash { - if a == "-prod" || a == "--reason=evil" { - t.Errorf("dash-leading config value became its own argv token: %v", gotDash) - } - } - - // The value-never-in-argv invariant is NOT asserted here: setArgs takes no - // value parameter, so no mutation of it could put the value in this argv and - // any check would pass vacuously. It is defended at the exec boundary by - // TestSetFeedsValueOnStdinNeverArgv, which spawns a real process, captures - // the child's actual argv, and asserts the value arrived on stdin instead. -} - -func equalArgs(a, b []string) bool { - if len(a) != len(b) { - return false - } - for i := range a { - if a[i] != b[i] { - return false - } - } - return true -} - // fakeDeclarations is a hand-written declarations fake: it records whether it // was asked for the declared set and returns a fixed result, so the // empty-registry short-circuit is provable without a Postgres store. @@ -276,45 +199,11 @@ func TestBuildManifestInvalidProfile(t *testing.T) { } } -func TestSetEmptyValueRejected(t *testing.T) { - // The CLI trims the piped value and rejects an empty one; Set rejects it up - // front as a deterministic caller error, before shelling out. - r := NewSpecResolver(nil, "/tmp/state") - for _, empty := range []string{"", " ", "\t", "\n", " \n\t "} { - if err := r.Set(context.Background(), "API_KEY", empty, "compass: unit test write"); err == nil { - t.Errorf("Set with empty value %q = nil, want an error", empty) - } - } - // Both empty: the value guard runs FIRST, so the error names the value, not - // the reason. The precedence is load-bearing, not cosmetic — server.SetSecret - // maps a Set failure to CodeUnavailable on the stated premise that the value - // was already screened non-empty, so a caller that sent neither must still be - // told about the value. Swapping the two guard blocks reddens this. - err := r.Set(context.Background(), "API_KEY", "", "") - if err == nil { - t.Fatal("Set with empty value and empty reason = nil, want an error") - } - if !strings.Contains(err.Error(), "value is empty") { - t.Errorf("Set with both empty = %q, want the value guard to fire first (\"value is empty\")", err) - } - // A bad name is still rejected first, independent of value. - if err := r.Set(context.Background(), "bad-name", "value", "compass: unit test write"); err == nil { - t.Error("Set with invalid name = nil, want an error") - } -} - -// TestSecretSpecVersionPin is a drift guard for the SDK HALF of the secretspec -// seam only — the module version in go.mod, which governs the read path (the -// builder API and the native lib it dlopens). It says nothing about the CLI the -// write path spawns; TestSecretSpecCLIVersionFloor guards that half, and the -// two can drift independently because the read and write paths cross different -// seams (SDK vs shelled binary). -// -// The resolver's stdin/trim/empty-reject write contract and the runtime FFI -// dlopen were verified against secretspec v0.20.0 source (secrets.rs:4423-4427 -// for the piped-stdin branch and trim, :4430-4433 for empty-value rejection). -// If a devenv fork-sync moves the pin, this fails loudly so the set() contract -// is re-checked against the new source rather than silently drifting. +// TestSecretSpecVersionPin is a drift guard for the secretspec-go SDK pin in +// go.mod, which governs the read path (the builder API and the native lib it +// dlopens). The resolve/report contract and FFI dlopen were verified against +// secretspec v0.20.0 source; if a devenv fork-sync moves the pin, this fails +// loudly so those semantics are re-checked rather than silently drifting. func TestSecretSpecVersionPin(t *testing.T) { const wantVersion = "v0.20.0" const modulePath = "github.com/cachix/secretspec/secretspec-go" @@ -338,259 +227,6 @@ func TestSecretSpecVersionPin(t *testing.T) { t.Fatalf("%s not found in go.mod; expected it pinned at %s", modulePath, wantVersion) } if got != wantVersion { - t.Fatalf("secretspec-go pinned at %s, want %s — the write-path contract was verified against secretspec v0.20.0 source (secrets.rs:4423-4427 for piped stdin and trim, :4430-4433 for empty rejection); re-verify set() semantics against the new source before moving the pin", got, wantVersion) - } -} - -// TestSecretSpecCLIVersionFloor guards the CLI half of the seam: the write path -// spawns `secretspec` by name, so the binary the shell resolves — not go.mod — -// decides whether `--reason` is accepted, whether the require_reason policy -// exists, and whether the `age` provider is compiled in at all. Those are the -// behaviors the write path depends on, and none of them are visible to the SDK -// pin, so without this assertion the CLI could drift arbitrarily far while -// every other test stayed green. -// -// This guard FAILS CLOSED: an absent CLI is a FAILURE, not a skip. The binary is -// an install-time dependency (packaged per platform, reported by `compass-stack -// preflight`), and at runtime an absent CLI is indistinguishable from a broken -// write path — both surface only as the first admin write failing — so a skip -// would let the seam pass silently on exactly the lanes that do not stage it. -func TestSecretSpecCLIVersionFloor(t *testing.T) { - const minMajor, minMinor = 0, 20 - - bin, err := exec.LookPath(defaultCLI) - if err != nil { - t.Fatalf("%s not found on PATH (%v): the secrets write path (SpecResolver.Set) spawns it by name, so the binary must be installed — it is an install-time dependency of every shipped surface, reported by `compass-stack preflight`, required at >= %d.%d", defaultCLI, err, minMajor, minMinor) - } - - out, err := exec.CommandContext(context.Background(), bin, "--version").Output() - if err != nil { - t.Fatalf("%s --version: %v", bin, err) - } - // `secretspec --version` prints "secretspec ". - fields := strings.Fields(string(out)) - if len(fields) < 2 { - t.Fatalf("%s --version = %q, want \"secretspec \"", bin, strings.TrimSpace(string(out))) - } - version := fields[len(fields)-1] - - parts := strings.SplitN(version, ".", 3) - if len(parts) < 2 { - t.Fatalf("%s reported version %q, want a dotted semver", bin, version) - } - major, err := strconv.Atoi(parts[0]) - if err != nil { - t.Fatalf("%s reported version %q: parse major: %v", bin, version, err) - } - minor, err := strconv.Atoi(parts[1]) - if err != nil { - t.Fatalf("%s reported version %q: parse minor: %v", bin, version, err) - } - - if major < minMajor || (major == minMajor && minor < minMinor) { - t.Fatalf("%s is version %s, want >= %d.%d — the floor is parity with the secretspec-go SDK pin in go.mod, so the SDK read half and the CLI write half act under one release rather than skewing; %d.%d also subsumes the older, separate 0.17 `age`-provider floor (age:// was added in 0.17.0), below which encrypted-at-rest writes fail with \"Provider backend 'age' not found\"", bin, version, minMajor, minMinor, minMajor, minMinor) - } -} - -// TestDeleteValidatesName pins the Delete write-path seam's one observable -// contract: it gates on ValidateName before its no-op success. An invalid name -// (dash — fails the grammar) must surface a non-nil error; a valid name returns -// nil. Delete needs no store or FFI lib (it never reads the registry or shells -// the CLI), so a bare resolver over a temp state dir exercises it fully. -func TestDeleteValidatesName(t *testing.T) { - ctx := context.Background() - r := NewSpecResolver(nil, t.TempDir()) - - if err := r.Delete(ctx, "bad-name"); err == nil { - t.Error("Delete with invalid name = nil, want an error") - } - if err := r.Delete(ctx, "API_KEY"); err != nil { - t.Errorf("Delete with valid name = %v, want nil", err) - } -} - -// helperProcessEnv guards the self-re-exec stand-in below: when set, TestMain -// does not run the suite — it plays the pinned CLI instead, capturing what Set -// actually handed the spawned process. -const helperProcessEnv = "GO_WANT_HELPER_PROCESS" - -// helperCaptureEnv carries the capture-file path into the re-exec'd stand-in. -const helperCaptureEnv = "GO_HELPER_CAPTURE_FILE" - -// TestMain lets this test binary stand in for the secretspec CLI. When Set execs -// os.Args[0] (via WithCLI) with helperProcessEnv=1 set, we are the spawned -// "CLI": record the real argv and the full stdin the parent piped, then exit 0. -// This exercises the ACTUAL exec boundary in Set — argv assembly + stdin wiring -// — not the pure setArgs layer, so a regression that leaks the value into argv -// or drops the stdin pipe is caught. Otherwise run the suite normally. -func TestMain(m *testing.M) { - if os.Getenv(helperProcessEnv) == "1" { - // We are the re-exec'd stand-in CLI. Capture argv (\x00-joined so no - // argument boundary is ambiguous), the entire piped stdin verbatim, and - // the body of the manifest --file points at — read HERE, while the - // parent's temp file still exists, so the parent can assert the manifest - // was really on disk and really declared the name at exec time. - stdin, err := io.ReadAll(os.Stdin) - if err != nil { - os.Exit(2) - } - capture := os.Getenv(helperCaptureEnv) - var manifest []byte - if i := slices.IndexFunc(os.Args, func(arg string) bool { return strings.HasPrefix(arg, "--file=") }); i >= 0 { - manifest, err = os.ReadFile(strings.TrimPrefix(os.Args[i], "--file=")) - if err != nil { - os.Exit(2) - } - } - // Sentinels separate the argv record, the raw stdin bytes and the manifest. - payload := strings.Join(os.Args, "\x00") + "\x1e" + string(stdin) + "\x1e" + string(manifest) - if err := os.WriteFile(capture, []byte(payload), 0o600); err != nil { - os.Exit(2) - } - os.Exit(0) - } - os.Exit(m.Run()) -} - -// TestSetFeedsValueOnStdinNeverArgv defends finding #1 (GATING): the value→stdin, -// never→argv invariant on the REAL exec boundary in Set, the audit-reason -// contract the provider's require_reason policy enforces, and the explicit -// manifest the CLI is pointed at. setArgs is pure and cannot regress the exec -// wiring; this drives Set through an actual process spawn (the test binary -// re-exec'd as the pinned CLI) and asserts what the child truly received. A -// future edit that appends the value as a positional arg, breaks cmd.Stdin, -// drops --reason or --file, or moves either after the `set` subcommand reddens -// this. -func TestSetFeedsValueOnStdinNeverArgv(t *testing.T) { - const value = "the-secret-value" - const reason = "compass: operator secret write via SetSecret RPC" - capture := filepath.Join(t.TempDir(), "capture") - - // Pin the CLI to this test binary and route it into the TestMain stand-in - // branch via env. os.Args[0] is the running test executable; Set execs it as - // ` --file= --reason= set API_KEY --provider ...`, and TestMain - // (guarded) plays the CLI. - stateDir := t.TempDir() - r := NewSpecResolver(nil, stateDir, - WithCLI(os.Args[0]), - WithProvider("keyring://"), - WithProfile("production"), - ) - t.Setenv(helperProcessEnv, "1") - t.Setenv(helperCaptureEnv, capture) - - if err := r.Set(context.Background(), "API_KEY", value, reason); err != nil { - t.Fatalf("Set = %v, want nil", err) - } - - raw, err := os.ReadFile(capture) - if err != nil { - t.Fatalf("read capture file (stand-in CLI never ran or never wrote): %v", err) - } - parts := strings.SplitN(string(raw), "\x1e", 3) - if len(parts) != 3 { - t.Fatalf("malformed capture payload: %q", raw) - } - argv := strings.Split(parts[0], "\x00") - stdin, manifest := parts[1], parts[2] - - // (a) argv carries the verb and the name... - if !slices.Contains(argv, "set") { - t.Errorf("argv %v missing the 'set' verb", argv) - } - if !slices.Contains(argv, "API_KEY") { - t.Errorf("argv %v missing the 'API_KEY' name", argv) - } - // ...and the value NEVER appears anywhere in argv (not as a positional, not - // embedded in a flag) — the whole point of the stdin write path. - for _, a := range argv { - if strings.Contains(a, value) { - t.Errorf("value leaked into argv: %v", argv) - } - } - - // (b) --reason is present as a joined token and sits ahead of `set` in - // argv: it is a global flag the CLI accepts on either side of the - // subcommand, and before it is the canonical position this test pins so the - // argv shape stays stable. argv[0] is the binary itself, so index comparison - // is over the real invocation the child received. - setIdx := slices.Index(argv, "set") - reasonIdx := slices.IndexFunc(argv, func(arg string) bool { return strings.HasPrefix(arg, "--reason=") }) - if reasonIdx < 0 { - t.Fatalf("argv %v missing the joined global --reason flag; the provider's require_reason policy fails such a write", argv) - } - if got := strings.TrimPrefix(argv[reasonIdx], "--reason="); got != reason { - t.Errorf("argv --reason value = %q, want %q", got, reason) - } - if reasonIdx > setIdx { - t.Errorf("argv %v places --reason (index %d) after the 'set' subcommand (index %d); pin it before, the canonical position", argv, reasonIdx, setIdx) - } - - // (c) --file points the CLI at a generated manifest in the resolver's state - // dir, ahead of `set` for the same reason. Without it the CLI walks up from - // the process cwd looking for a secretspec.toml the repo deliberately never - // commits, so every production write fails "No secretspec.toml found". - fileIdx := slices.IndexFunc(argv, func(arg string) bool { return strings.HasPrefix(arg, "--file=") }) - if fileIdx < 0 { - t.Fatalf("argv %v missing the joined global --file flag; without a manifest the CLI fails 'No secretspec.toml found'", argv) - } - if got := strings.TrimPrefix(argv[fileIdx], "--file="); filepath.Dir(got) != stateDir { - t.Errorf("argv --file = %q, want a manifest under the resolver state dir %q", got, stateDir) - } - if fileIdx > setIdx { - t.Errorf("argv %v places --file (index %d) after the 'set' subcommand (index %d); pin it before, the canonical position", argv, fileIdx, setIdx) - } - - // ...and that manifest really existed at exec time, declaring exactly the - // name being written under the resolver's profile. - for _, want := range []string{"[profiles.production]", "API_KEY = {", "required = true"} { - if !strings.Contains(manifest, want) { - t.Errorf("manifest handed to the CLI missing %q:\n%s", want, manifest) - } - } - - // (d) the value rides stdin exactly, with the trailing newline the CLI trims. - if want := value + "\n"; stdin != want { - t.Errorf("captured stdin = %q, want %q", stdin, want) - } -} - -// TestSetEmptyValueNeverInvokesCLI pins the other half of the write-path -// contract: an empty value is rejected up front (deterministic caller error), -// before any process is spawned. If Set ever shelled out first and let the CLI -// reject the empty value, the stand-in would run and write the capture file — -// so its absence proves the CLI was never invoked. -func TestSetEmptyValueNeverInvokesCLI(t *testing.T) { - capture := filepath.Join(t.TempDir(), "capture") - r := NewSpecResolver(nil, t.TempDir(), WithCLI(os.Args[0])) - t.Setenv(helperProcessEnv, "1") - t.Setenv(helperCaptureEnv, capture) - - if err := r.Set(context.Background(), "API_KEY", "", "compass: unit test write"); err == nil { - t.Fatal("Set with empty value = nil, want an error") - } - if _, err := os.Stat(capture); !os.IsNotExist(err) { - t.Errorf("capture file exists (err=%v): the CLI was invoked for an empty value; it must be rejected before exec", err) - } -} - -// TestSetEmptyReasonNeverInvokesCLI pins the audit-reason contract at the same -// pre-exec boundary as the empty value: the CLI's own require_reason policy is -// an environment heuristic (it gates on agent-env detection), so a reasonless -// write succeeds on one host and is refused on another. Set screens it instead, -// and the capture file's absence proves no process was spawned. -func TestSetEmptyReasonNeverInvokesCLI(t *testing.T) { - capture := filepath.Join(t.TempDir(), "capture") - r := NewSpecResolver(nil, t.TempDir(), WithCLI(os.Args[0])) - t.Setenv(helperProcessEnv, "1") - t.Setenv(helperCaptureEnv, capture) - - for _, reason := range []string{"", " \t\n"} { - if err := r.Set(context.Background(), "API_KEY", "the-secret-value", reason); err == nil { - t.Errorf("Set with reason %q = nil, want an error", reason) - } - if _, err := os.Stat(capture); !os.IsNotExist(err) { - t.Errorf("capture file exists (err=%v): the CLI was invoked with reason %q; an empty reason must be rejected before exec", err, reason) - } + t.Fatalf("secretspec-go pinned at %s, want %s — the resolve/report contract was verified against secretspec v0.20.0 source; re-verify those semantics against the new source before moving the pin", got, wantVersion) } } diff --git a/go/internal/secrets/secrets.go b/go/internal/secrets/secrets.go index b63061e92..6d55e3f87 100644 --- a/go/internal/secrets/secrets.go +++ b/go/internal/secrets/secrets.go @@ -69,8 +69,9 @@ var nameGrammar = regexp.MustCompile(`^[A-Za-z_][A-Za-z0-9_]*$`) // maxNameLen caps a secret name's length. A name becomes an env-var name and a // filesystem path segment (under $HOME/.compass/secrets/), so it must stay a -// sane segment; 255 bytes is the common path-segment limit. The write path is -// user-only (T7 RPC edge), so this bounds store bloat, not an exploit. +// sane segment; 255 bytes is the common path-segment limit. User writes are +// authenticated at the RPC edge and server-secret names are server-declared, so +// this bounds store bloat, not an exploit. const maxNameLen = 255 // ValidateName reports whether name is a legal secret name (SecretSpec's diff --git a/go/internal/secrets/store_resolver.go b/go/internal/secrets/store_resolver.go index 45ed22b69..983995e97 100644 --- a/go/internal/secrets/store_resolver.go +++ b/go/internal/secrets/store_resolver.go @@ -24,12 +24,10 @@ type StoreResolver struct { keyVersion int16 } -// Compile-time seam assertions. SpecResolver still satisfies the wide Resolver -// interface at this task (its write half is deleted in T6). StoreResolver -// deliberately does NOT: its Upsert/Remove/ResolveFor names and signatures share -// nothing with Resolver's Resolve/Set/Delete/Statuses (record A4), so there is -// no positive assertion to make for it — the absence is the contract, and adding -// `var _ Resolver = (*StoreResolver)(nil)` here would fail the build. +// Compile-time seam assertion. SpecResolver satisfies the read-only Resolver +// interface; StoreResolver deliberately does NOT — its Upsert/Remove/ResolveFor +// signatures share nothing with Resolve/Statuses, so the absence is the +// contract and a `var _ Resolver = (*StoreResolver)(nil)` here would not build. var _ Resolver = (*SpecResolver)(nil) // NewStoreResolver constructs a StoreResolver over the store and the master key. diff --git a/go/server/secrets_service.go b/go/server/secrets_service.go index ddb397ee1..130fb069d 100644 --- a/go/server/secrets_service.go +++ b/go/server/secrets_service.go @@ -86,8 +86,8 @@ var errNoResolver = errors.New("no secret resolver configured on this server") // errNoServerResolver is the fail-closed cause when a server-secret RPC reaches // a service built with no SERVER resolver. It must never fall back to the user -// resolver: that would write the value into the registry the container-delivery -// path reads, inverting the whole point of the separate store. +// resolver: the server-secret list would then report on the wrong registry, +// inverting the whole point of the separate store. var errNoServerResolver = errors.New("no server secret resolver configured on this server") // SetSecret writes a user secret's declaration and encrypted value in ONE atomic @@ -219,114 +219,10 @@ func (s *secretsService) DeleteSecret( return connect.NewResponse(&compassv1.DeleteSecretResponse{}), nil } -// SetServerSecret declares a SERVER secret in the separate server_secrets -// registry and writes its value through the SERVER resolver. Admin-only at the -// door (classifyProcedure), which IS the authorization — a server secret is -// deployment-owned, so there is no per-account check to fall back on. -// -// Mirrors SetSecret's declare-then-Set flow and its rollback discipline: an -// empty value is rejected before any row is declared, an already-declared name -// is a legitimate re-Set, and a failed FRESH write rolls the declaration back so -// no orphan survives. The reserved-prefix requirement lives at the store door -// (DeclareServerSecret), so an unprefixed name is rejected there and surfaces -// as CodeInvalidArgument. -func (s *secretsService) SetServerSecret( - ctx context.Context, - req *connect.Request[compassv1.SetServerSecretRequest], -) (*connect.Response[compassv1.SetServerSecretResponse], error) { - callerID, err := s.requireCaller(ctx) - if err != nil { - return nil, err - } - if s.serverResolver == nil { - return nil, connect.NewError(connect.CodeUnavailable, errNoServerResolver) - } - msg := req.Msg - name := msg.GetName() - if name == store.MasterKeyName { - return nil, connect.NewError(connect.CodeInvalidArgument, - fmt.Errorf("%s is provisioned and rotated by the server, never set through this RPC", store.MasterKeyName)) - } - if strings.TrimSpace(msg.GetValue()) == "" { - return nil, connect.NewError(connect.CodeInvalidArgument, errors.New("secret value is empty")) - } - - declErr := s.store.DeclareServerSecret(ctx, callerID, name) - switch { - case declErr == nil: - // Fresh declaration. - case errors.Is(declErr, store.ErrConflict): - // Already declared: a re-Set rewrites the value. - case errors.Is(declErr, store.ErrInvalidArgument): - return nil, connect.NewError(connect.CodeInvalidArgument, declErr) - default: - return nil, connect.NewError(connect.CodeInternal, fmt.Errorf("declaring server secret: %w", declErr)) - } - - // The audit reason names the SERVER-secret RPC specifically, so the - // provider's log distinguishes a deployment-secret write from an operator's - // user-secret write, and carries the authenticated admin caller. Same - // injection reasoning as the user path: callerID comes from the bearer - // token, never a request field, and is server-minted hex. - reason := fmt.Sprintf("compass: server secret write via SetServerSecret RPC (caller %s)", callerID) - if err := s.serverResolver.Set(ctx, name, msg.GetValue(), reason); err != nil { - // Name validated at the store door and value screened non-empty above, so - // a Set failure is a provider/exec fault — retryable and operator-side, - // never the caller's argument. Roll back only a FRESH declaration; an - // ErrConflict row legitimately pre-existed this call. - if declErr == nil { - if delErr := s.store.DeleteServerSecretDeclaration(ctx, name); delErr != nil { - slog.ErrorContext(ctx, "rolling back server secret declaration after failed write", "err", delErr) - } - } - slog.ErrorContext(ctx, "writing server secret value", "err", err) - return nil, connect.NewError(connect.CodeUnavailable, errors.New("writing server secret value failed")) - } - // Deliberately NO bumpSecretsVersion: a server secret never reaches a live - // session's FetchSecrets, so there is nothing for a session to re-fetch. - return connect.NewResponse(&compassv1.SetServerSecretResponse{}), nil -} - -// DeleteServerSecret removes a SERVER secret's registry row and its provider -// value. Admin-only at the door. The reserved master-key name is refused for the -// same reason SetServerSecret refuses it. -func (s *secretsService) DeleteServerSecret( - ctx context.Context, - req *connect.Request[compassv1.DeleteServerSecretRequest], -) (*connect.Response[compassv1.DeleteServerSecretResponse], error) { - if _, err := s.requireCaller(ctx); err != nil { - return nil, err - } - if s.serverResolver == nil { - return nil, connect.NewError(connect.CodeUnavailable, errNoServerResolver) - } - name := req.Msg.GetName() - if name == store.MasterKeyName { - return nil, connect.NewError(connect.CodeInvalidArgument, - fmt.Errorf("%s is provisioned and rotated by the server, never deleted through this RPC", store.MasterKeyName)) - } - - // Provider value first, then the declaration: the same order as DeleteSecret, - // so a failure leaves the declaration intact rather than orphaning a value - // with no row naming it. - if err := s.serverResolver.Delete(ctx, name); err != nil { - slog.ErrorContext(ctx, "deleting server secret value", "err", err) - return nil, connect.NewError(connect.CodeUnavailable, errors.New("deleting server secret value failed")) - } - if err := s.store.DeleteServerSecretDeclaration(ctx, name); err != nil { - if errors.Is(err, store.ErrNotFound) { - return nil, connect.NewError(connect.CodeNotFound, err) - } - return nil, connect.NewError(connect.CodeInternal, fmt.Errorf("deleting server secret declaration: %w", err)) - } - return connect.NewResponse(&compassv1.DeleteServerSecretResponse{}), nil -} - // ListServerSecrets returns every declared SERVER secret's name with its // set/unset state — names only, NEVER a value. Admin-only at the door -// (classifyProcedure), the same gate as its Set/Delete siblings and for the -// same reason: the rows are deployment-owned, so there is no per-account -// authorization to fall back on. +// (classifyProcedure): the rows are deployment-owned, so there is no +// per-account authorization to fall back on. // // is_set is a PROVIDER PROBE here, unlike ListSecrets which hardcodes true. // That asymmetry is structural, not an inconsistency: on the user path declare @@ -358,8 +254,7 @@ func (s *secretsService) ListServerSecrets( if len(decls) == 0 { return connect.NewResponse(&compassv1.ListServerSecretsResponse{}), nil } - // The audit reason names this RPC specifically, matching the Set path's - // form, so the provider's log distinguishes a status probe from a write. + // The audit reason names this RPC so the provider log identifies the probe. statuses, err := s.serverResolver.Statuses(ctx, "compass: server secret status probe via ListServerSecrets RPC") if err != nil { return nil, connect.NewError(connect.CodeInternal, fmt.Errorf("probing server secret values: %w", err)) diff --git a/go/server/secrets_service_pgtest_test.go b/go/server/secrets_service_pgtest_test.go index a4376e3d4..bcfe70536 100644 --- a/go/server/secrets_service_pgtest_test.go +++ b/go/server/secrets_service_pgtest_test.go @@ -16,9 +16,8 @@ package server // The USER resolver is the real StoreResolver (T5): SetSecret/DeleteSecret write // and delete encrypted rows, and a test observes the result through the same // production read the Runner uses (ResolveFor / SecretRecordsForAgent), not a fake. -// The SERVER resolver is still a recording fake — the server-secret path keeps its -// SpecResolver seam (Set/Delete/Statuses) at this task, so its tests script and -// record that fake. +// The SERVER resolver is a recording fake: Resolve must never be hit (the list +// probe is value-free) and Statuses returns a scripted report to assert against. import ( "context" @@ -37,17 +36,11 @@ import ( ) // recordingResolver is a fake secrets.Resolver standing in for the SERVER-secret -// resolver. Set and Delete record their calls and succeed; Resolve fails loudly, -// so a test proves no server-secret path ever resolves values. Statuses returns a -// scripted value-free report — the ListServerSecrets probe — and can be scripted -// to fail so a test proves a provider fault is not flattened into all-unset. The -// USER resolver is no longer a fake (it is the real StoreResolver); this type now -// serves only the server side. +// resolver. Resolve fails loudly, so a test proves the list probe never resolves +// values. Statuses returns a scripted value-free report — the ListServerSecrets +// probe — and can be scripted to fail so a test proves a provider fault is not +// flattened into all-unset. type recordingResolver struct { - setErr error - setNames []string - setReasons []string - deleteNames []string resolveHit bool statuses []secrets.SecretStatus statusesErr error @@ -67,20 +60,6 @@ func (r *recordingResolver) Resolve(_ context.Context, _ string) ([]secrets.Reso return nil, errors.New("ListSecrets must not resolve values") } -func (r *recordingResolver) Set(_ context.Context, name, _, reason string) error { - if r.setErr != nil { - return r.setErr - } - r.setNames = append(r.setNames, name) - r.setReasons = append(r.setReasons, reason) - return nil -} - -func (r *recordingResolver) Delete(_ context.Context, name string) error { - r.deleteNames = append(r.deleteNames, name) - return nil -} - // recordingSignaler records SignalSecretsVersion calls so a test asserts a // successful Set/Delete bumped the secrets version. type recordingSignaler struct { @@ -399,148 +378,6 @@ func TestListSecretsUserAndAgent(t *testing.T) { } } -func setServerReq(bearer, name, value string) *connect.Request[compassv1.SetServerSecretRequest] { - req := connect.NewRequest(&compassv1.SetServerSecretRequest{Name: name, Value: value}) - req.Header().Set("Authorization", "Bearer "+bearer) - return req -} - -func delServerReq(bearer, name string) *connect.Request[compassv1.DeleteServerSecretRequest] { - req := connect.NewRequest(&compassv1.DeleteServerSecretRequest{Name: name}) - req.Header().Set("Authorization", "Bearer "+bearer) - return req -} - -// TestSetServerSecretAdminOnly is the door-gate contract: the server-secret -// writes are ADMIN-only, unlike their user-facing siblings. A plain user token -// is refused even though it is a perfectly valid caller for SetSecret — a -// non-admin must never write a deployment-owned secret. -func TestSetServerSecretAdminOnly(t *testing.T) { - f := newSecretsFixture(t) - ctx := context.Background() - - for _, tc := range []struct{ name, token string }{ - {"user", f.userToken}, - {"agent", f.agentToken}, - } { - _, err := f.client.SetServerSecret(ctx, setServerReq(tc.token, "SERVER_WEBHOOK_SECRET", "v")) - if got := connect.CodeOf(err); got != connect.CodePermissionDenied { - t.Fatalf("%s token: want CodePermissionDenied, got %v (err=%v)", tc.name, got, err) - } - } - - if _, err := f.client.SetServerSecret(ctx, setServerReq(f.adminToken, "SERVER_WEBHOOK_SECRET", "v")); err != nil { - t.Fatalf("admin token: %v", err) - } -} - -// TestSetServerSecretWritesOnlyTheServerResolver is the isolation proof (D6): a -// server-secret write must land on the SERVER resolver and never on the user -// resolver, whose manifest feeds the inject-all container-delivery path. A -// single shared resolver would deliver the deployment's App PEMs into every -// agent container. -func TestSetServerSecretWritesOnlyTheServerResolver(t *testing.T) { - f := newSecretsFixture(t) - ctx := context.Background() - - if _, err := f.client.SetServerSecret(ctx, setServerReq(f.adminToken, "SERVER_LINEAR_FORGE_CLIENT_SECRET", "v")); err != nil { - t.Fatalf("SetServerSecret: %v", err) - } - if len(f.serverResolver.setNames) != 1 || f.serverResolver.setNames[0] != "SERVER_LINEAR_FORGE_CLIENT_SECRET" { - t.Fatalf("server resolver sets = %v, want the one server secret", f.serverResolver.setNames) - } - // The user registry (DeclaredSecrets, which the container-delivery path and - // the CLI read) must never see it — asserted directly through ListSecrets below. - - // And it must not appear in the user-facing list, which is what the - // container-delivery path and the CLI both read. - resp, err := f.client.ListSecrets(ctx, listReq(f.userToken)) - if err != nil { - t.Fatalf("ListSecrets: %v", err) - } - for _, s := range resp.Msg.GetSecrets() { - if s.GetName() == "SERVER_LINEAR_FORGE_CLIENT_SECRET" { - t.Fatal("server secret leaked into ListSecrets") - } - } -} - -// TestServerSecretRejectsUnprefixedAndMasterKey pins the two argument guards: -// an unprefixed name cannot enter the server registry (it belongs to the user -// keyspace), and the reserved master key is never settable or deletable through -// the operator door — clobbering it would strand every encrypted row. -func TestServerSecretRejectsUnprefixedAndMasterKey(t *testing.T) { - f := newSecretsFixture(t) - ctx := context.Background() - - _, err := f.client.SetServerSecret(ctx, setServerReq(f.adminToken, "PLAIN_NAME", "v")) - if got := connect.CodeOf(err); got != connect.CodeInvalidArgument { - t.Fatalf("unprefixed: want CodeInvalidArgument, got %v (err=%v)", got, err) - } - if len(f.serverResolver.setNames) != 0 { - t.Fatalf("unprefixed name reached the resolver: %v", f.serverResolver.setNames) - } - - for _, call := range []struct { - name string - do func() error - }{ - {"set", func() error { - _, e := f.client.SetServerSecret(ctx, setServerReq(f.adminToken, store.MasterKeyName, "v")) - return e - }}, - {"delete", func() error { - _, e := f.client.DeleteServerSecret(ctx, delServerReq(f.adminToken, store.MasterKeyName)) - return e - }}, - } { - if got := connect.CodeOf(call.do()); got != connect.CodeInvalidArgument { - t.Fatalf("master-key %s: want CodeInvalidArgument, got %v", call.name, got) - } - } - if len(f.serverResolver.setNames) != 0 || len(f.serverResolver.deleteNames) != 0 { - t.Fatalf("master key reached the resolver: sets=%v deletes=%v", - f.serverResolver.setNames, f.serverResolver.deleteNames) - } -} - -// TestSetServerSecretRollsBackDeclarationOnWriteFailure mirrors the user path's -// rollback discipline: a failed FRESH provider write must leave no orphan -// declaration behind, because an orphan is required=true in the resolve -// manifest and would fail the server's own boot resolve. -func TestSetServerSecretRollsBackDeclarationOnWriteFailure(t *testing.T) { - f := newSecretsFixture(t) - ctx := context.Background() - f.serverResolver.setErr = errors.New("provider unreachable") - - _, err := f.client.SetServerSecret(ctx, setServerReq(f.adminToken, "SERVER_APP_PEM", "v")) - if got := connect.CodeOf(err); got != connect.CodeUnavailable { - t.Fatalf("want CodeUnavailable, got %v (err=%v)", got, err) - } - - // The declaration must be gone: a second attempt sees a FRESH declare, not a - // conflict, which is only true if the rollback happened. - f.serverResolver.setErr = nil - if _, err := f.client.SetServerSecret(ctx, setServerReq(f.adminToken, "SERVER_APP_PEM", "v")); err != nil { - t.Fatalf("retry after rollback: %v", err) - } -} - -// TestSetServerSecretDoesNotBumpSecretsVersion pins the deliberate asymmetry -// with SetSecret: a server secret never reaches a live session's FetchSecrets, -// so waking every session to re-fetch would be pure churn. -func TestSetServerSecretDoesNotBumpSecretsVersion(t *testing.T) { - f := newSecretsFixture(t) - ctx := context.Background() - - if _, err := f.client.SetServerSecret(ctx, setServerReq(f.adminToken, "SERVER_WEBHOOK_SECRET", "v")); err != nil { - t.Fatalf("SetServerSecret: %v", err) - } - if n := f.signaler.calls; n != 0 { - t.Fatalf("signaler fired %d times, want 0 for a server secret", n) - } -} - func listServerReq(bearer string) *connect.Request[compassv1.ListServerSecretsRequest] { req := connect.NewRequest(&compassv1.ListServerSecretsRequest{}) req.Header().Set("Authorization", "Bearer "+bearer) @@ -562,11 +399,11 @@ func TestListServerSecretsReportsDeclaredButUnset(t *testing.T) { f := newSecretsFixture(t) ctx := context.Background() - // Declare two names through the real write path, then script the provider - // probe so exactly one of them holds a value. + // Declare two names, then script the provider probe so exactly one holds a + // value. for _, name := range []string{"SERVER_APP_PEM", "SERVER_WEBHOOK_SECRET"} { - if _, err := f.client.SetServerSecret(ctx, setServerReq(f.adminToken, name, "v")); err != nil { - t.Fatalf("SetServerSecret(%s): %v", name, err) + if err := f.st.DeclareServerSecret(ctx, f.userID, name); err != nil { + t.Fatalf("DeclareServerSecret(%s): %v", name, err) } } f.serverResolver.statuses = []secrets.SecretStatus{ @@ -608,8 +445,8 @@ func TestListServerSecretsProviderFailureIsNotAllUnset(t *testing.T) { f := newSecretsFixture(t) ctx := context.Background() - if _, err := f.client.SetServerSecret(ctx, setServerReq(f.adminToken, "SERVER_APP_PEM", "v")); err != nil { - t.Fatalf("SetServerSecret: %v", err) + if err := f.st.DeclareServerSecret(ctx, f.userID, "SERVER_APP_PEM"); err != nil { + t.Fatalf("DeclareServerSecret: %v", err) } f.serverResolver.statusesErr = errors.New("provider unreachable") diff --git a/go/server/serve.go b/go/server/serve.go index 0fc731051..3520b2899 100644 --- a/go/server/serve.go +++ b/go/server/serve.go @@ -310,9 +310,10 @@ func secretDeclared(declared []secrets.ResolvedSecret, name string) bool { // server-secret keyspace the SERVER resolver declares them under. // // This is the resolve-side half of an INVARIANT, not a hand-listed set of call -// sites. The provider keyspace is keyed by name, so the declare side -// (SetServerSecret, which applies the same prefix) and every resolve-side -// comparison must agree on the prefixed name or the resolve silently misses. +// sites. The provider keyspace is keyed by name, so the declare side (which +// applies the same prefix) and every resolve-side comparison must agree on the +// prefixed name or the resolve silently misses. +// // The rule, applied without exception: // // - Every name compared against a resolved secrets.ResolvedSecret.Name is diff --git a/go/server/serve_forge_test.go b/go/server/serve_forge_test.go index b8c3e4a9f..17e6492e8 100644 --- a/go/server/serve_forge_test.go +++ b/go/server/serve_forge_test.go @@ -28,8 +28,8 @@ import ( ) // fakeResolver is a secrets.Resolver whose Resolve returns a scripted set (or a -// scripted error). Set/Delete are unused here. The resolved value can be changed -// between calls so a test proves the TokenSource picks up a rotation. +// scripted error). The resolved value can be changed between calls so a test +// proves the TokenSource picks up a rotation. type fakeResolver struct { resolved []secrets.ResolvedSecret err error @@ -44,9 +44,6 @@ func (r *fakeResolver) Resolve(_ context.Context, _ string) ([]secrets.ResolvedS return r.resolved, nil } -func (r *fakeResolver) Set(context.Context, string, string, string) error { return nil } -func (r *fakeResolver) Delete(context.Context, string) error { return nil } - // Statuses is unused on the forge paths, which read values; it exists to satisfy // secrets.Resolver. func (r *fakeResolver) Statuses(context.Context, string) ([]secrets.SecretStatus, error) { diff --git a/packages/compass-agent/src/gen/compass/v1/compass_pb.ts b/packages/compass-agent/src/gen/compass/v1/compass_pb.ts index b0c7bf4d6..b947d6d25 100644 --- a/packages/compass-agent/src/gen/compass/v1/compass_pb.ts +++ b/packages/compass-agent/src/gen/compass/v1/compass_pb.ts @@ -20,7 +20,7 @@ import type { Message } from "@bufbuild/protobuf"; * Describes the file compass/v1/compass.proto. */ export const file_compass_v1_compass: GenFile = /*@__PURE__*/ - fileDesc("Chhjb21wYXNzL3YxL2NvbXBhc3MucHJvdG8SCmNvbXBhc3MudjEi0AEKEFNldFNlY3JldFJlcXVlc3QSDAoEbmFtZRgBIAEoCRISCgV2YWx1ZRgCIAEoCUIDgAEBEiwKCGRlbGl2ZXJ5GAMgASgOMhouY29tcGFzcy52MS5TZWNyZXREZWxpdmVyeRIkCgRraW5kGAQgASgOMhYuY29tcGFzcy52MS5TZWNyZXRLaW5kEhAKCHByb3ZpZGVyGAUgASgJEgwKBGhvc3QYBiABKAkSJgoFc2NvcGUYByABKA4yFy5jb21wYXNzLnYxLlNlY3JldFNjb3BlIhMKEVNldFNlY3JldFJlc3BvbnNlIhQKEkxpc3RTZWNyZXRzUmVxdWVzdCJAChNMaXN0U2VjcmV0c1Jlc3BvbnNlEikKB3NlY3JldHMYASADKAsyGC5jb21wYXNzLnYxLlNlY3JldFN0YXR1cyKgAQoMU2VjcmV0U3RhdHVzEgwKBG5hbWUYASABKAkSDgoGaXNfc2V0GAIgASgIEiwKCGRlbGl2ZXJ5GAMgASgOMhouY29tcGFzcy52MS5TZWNyZXREZWxpdmVyeRIkCgRraW5kGAQgASgOMhYuY29tcGFzcy52MS5TZWNyZXRLaW5kEhAKCHByb3ZpZGVyGAUgASgJEgwKBGhvc3QYBiABKAkiSwoTRGVsZXRlU2VjcmV0UmVxdWVzdBIMCgRuYW1lGAEgASgJEiYKBXNjb3BlGAIgASgOMhcuY29tcGFzcy52MS5TZWNyZXRTY29wZSIWChREZWxldGVTZWNyZXRSZXNwb25zZSI6ChZTZXRTZXJ2ZXJTZWNyZXRSZXF1ZXN0EgwKBG5hbWUYASABKAkSEgoFdmFsdWUYAiABKAlCA4ABASIZChdTZXRTZXJ2ZXJTZWNyZXRSZXNwb25zZSIpChlEZWxldGVTZXJ2ZXJTZWNyZXRSZXF1ZXN0EgwKBG5hbWUYASABKAkiHAoaRGVsZXRlU2VydmVyU2VjcmV0UmVzcG9uc2UiGgoYTGlzdFNlcnZlclNlY3JldHNSZXF1ZXN0IlMKGUxpc3RTZXJ2ZXJTZWNyZXRzUmVzcG9uc2USNgoOc2VydmVyX3NlY3JldHMYASADKAsyHi5jb21wYXNzLnYxLlNlcnZlclNlY3JldFN0YXR1cyIyChJTZXJ2ZXJTZWNyZXRTdGF0dXMSDAoEbmFtZRgBIAEoCRIOCgZpc19zZXQYAiABKAgiFgoUR2V0U2VydmVySW5mb1JlcXVlc3QiPQoVR2V0U2VydmVySW5mb1Jlc3BvbnNlEg8KB3ZlcnNpb24YASABKAkSEwoLYXBpX3ZlcnNpb24YAiABKAkiDwoNV2hvQW1JUmVxdWVzdCIkCg5XaG9BbUlSZXNwb25zZRISCgphY2NvdW50X2lkGAEgASgJIkMKFlN1YnNjcmliZUV2ZW50c1JlcXVlc3QSEQoJc2luY2Vfc2VxGAEgASgEEhYKDmluc3RhbmNlX2Vwb2NoGAIgASgEIuIDChdTdWJzY3JpYmVFdmVudHNSZXNwb25zZRILCgNzZXEYASABKAQSEgoKYXRfdW5peF9tcxgCIAEoAxIWCg5pbnN0YW5jZV9lcG9jaBgDIAEoBBIUCgxzbmFwc2hvdF9zZXEYBCABKAQSMQoNc2VydmVyX3N0YXR1cxgKIAEoCzIYLmNvbXBhc3MudjEuU2VydmVyU3RhdHVzSAASNQoPcmVzeW5jX3JlcXVpcmVkGAsgASgLMhouY29tcGFzcy52MS5SZXN5bmNSZXF1aXJlZEgAEj4KFGFnZW50X3Nlc3Npb25fc3RhdHVzGAwgASgLMh4uY29tcGFzcy52MS5BZ2VudFNlc3Npb25TdGF0dXNIABI8ChNhZ2VudF9tZXNzYWdlX2NodW5rGA0gASgLMh0uY29tcGFzcy52MS5BZ2VudE1lc3NhZ2VDaHVua0gAEjQKD2FnZW50X3Rvb2xfY2FsbBgOIAEoCzIZLmNvbXBhc3MudjEuQWdlbnRUb29sQ2FsbEgAEisKCmFnZW50X3BsYW4YDyABKAsyFS5jb21wYXNzLnYxLkFnZW50UGxhbkgAEiIKBWlzc3VlGBAgASgLMhEuY29tcGFzcy52MS5Jc3N1ZUgAQgkKB3BheWxvYWQiLgoWTGlzdEJvYXJkSXNzdWVzUmVxdWVzdBIUCgxzbmFwc2hvdF9zZXEYASABKAQiPAoXTGlzdEJvYXJkSXNzdWVzUmVzcG9uc2USIQoGaXNzdWVzGAEgAygLMhEuY29tcGFzcy52MS5Jc3N1ZSI2CgxTZXJ2ZXJTdGF0dXMSJgoFc3RhdGUYASABKA4yFy5jb21wYXNzLnYxLlNlcnZlclN0YXRlIhAKDlJlc3luY1JlcXVpcmVkItIBChJBZ2VudFNlc3Npb25TdGF0dXMSEgoKc2Vzc2lvbl9pZBgBIAEoCRIsCgVzdGF0ZRgCIAEoDjIdLmNvbXBhc3MudjEuQWdlbnRTZXNzaW9uU3RhdGUSGAoQYWdlbnRfYWNjb3VudF9pZBgDIAEoCRItCgxydW50aW1lX3RpZXIYBCABKA4yFy5jb21wYXNzLnYxLlJ1bnRpbWVUaWVyEjEKDmVncmVzc19wb3N0dXJlGAUgASgOMhkuY29tcGFzcy52MS5FZ3Jlc3NQb3N0dXJlIkkKEUFnZW50TWVzc2FnZUNodW5rEhIKCnNlc3Npb25faWQYASABKAkSDAoEdGV4dBgCIAEoCRISCgppc190aG91Z2h0GAMgASgIInkKDUFnZW50VG9vbENhbGwSEgoKc2Vzc2lvbl9pZBgBIAEoCRIUCgx0b29sX2NhbGxfaWQYAiABKAkSDQoFdGl0bGUYAyABKAkSLwoGc3RhdHVzGAQgASgOMh8uY29tcGFzcy52MS5BZ2VudFRvb2xDYWxsU3RhdHVzIkwKCUFnZW50UGxhbhISCgpzZXNzaW9uX2lkGAEgASgJEisKB2VudHJpZXMYAiADKAsyGi5jb21wYXNzLnYxLkFnZW50UGxhbkVudHJ5IlMKDkFnZW50UGxhbkVudHJ5Eg8KB2NvbnRlbnQYASABKAkSMAoGc3RhdHVzGAIgASgOMiAuY29tcGFzcy52MS5BZ2VudFBsYW5FbnRyeVN0YXR1cyLfAwoMU2Vzc2lvbkV2ZW50EhAKCGV2ZW50X2lkGAEgASgJEhIKCmF0X3VuaXhfbXMYAiABKAMSOgoOYXNzaXN0YW50X3RleHQYAyABKAsyIC5jb21wYXNzLnYxLlNlc3Npb25Bc3Npc3RhbnRUZXh0SAASLwoIdGhpbmtpbmcYBCABKAsyGy5jb21wYXNzLnYxLlNlc3Npb25UaGlua2luZ0gAEjAKCXRvb2xfY2FsbBgFIAEoCzIbLmNvbXBhc3MudjEuU2Vzc2lvblRvb2xDYWxsSAASPQoQdG9vbF9jYWxsX3VwZGF0ZRgGIAEoCzIhLmNvbXBhc3MudjEuU2Vzc2lvblRvb2xDYWxsVXBkYXRlSAASJwoEcGxhbhgHIAEoCzIXLmNvbXBhc3MudjEuU2Vzc2lvblBsYW5IABIrCgZub3RpY2UYCCABKAsyGS5jb21wYXNzLnYxLlNlc3Npb25Ob3RpY2VIABI5ChFzZXNzaW9uX2luamVjdGlvbhgJIAEoCzIcLmNvbXBhc3MudjEuU2Vzc2lvbkluamVjdGlvbkgAEjEKDXNlc3Npb25fZXJyb3IYCiABKAsyGC5jb21wYXNzLnYxLlNlc3Npb25FcnJvckgAQgcKBWV2ZW50IjgKFFNlc3Npb25Bc3Npc3RhbnRUZXh0EgwKBHRleHQYASABKAkSEgoKbWVzc2FnZV9pZBgCIAEoCSIzCg9TZXNzaW9uVGhpbmtpbmcSDAoEdGV4dBgBIAEoCRISCgptZXNzYWdlX2lkGAIgASgJImcKD1Nlc3Npb25Ub29sQ2FsbBIUCgx0b29sX2NhbGxfaWQYASABKAkSDQoFdGl0bGUYAiABKAkSLwoGc3RhdHVzGAMgASgOMh8uY29tcGFzcy52MS5BZ2VudFRvb2xDYWxsU3RhdHVzIpoBChVTZXNzaW9uVG9vbENhbGxVcGRhdGUSFAoMdG9vbF9jYWxsX2lkGAEgASgJEi8KBnN0YXR1cxgCIAEoDjIfLmNvbXBhc3MudjEuQWdlbnRUb29sQ2FsbFN0YXR1cxIOCgZvdXRwdXQYAyABKAkSKgoFZGlmZnMYBCADKAsyGy5jb21wYXNzLnYxLlNlc3Npb25GaWxlRGlmZiJVCg9TZXNzaW9uRmlsZURpZmYSDAoEcGF0aBgBIAEoCRIVCghvbGRfdGV4dBgCIAEoCUgAiAEBEhAKCG5ld190ZXh0GAMgASgJQgsKCV9vbGRfdGV4dCI6CgtTZXNzaW9uUGxhbhIrCgdlbnRyaWVzGAEgAygLMhouY29tcGFzcy52MS5BZ2VudFBsYW5FbnRyeSI5Cg1TZXNzaW9uTm90aWNlEgwKBHRleHQYASABKAkSEQoEbGluaxgCIAEoCUgAiAEBQgcKBV9saW5rIoMBChBTZXNzaW9uSW5qZWN0aW9uEjEKB29wX2tpbmQYASABKA4yIC5jb21wYXNzLnYxLlNlc3Npb25JbmplY3Rpb25LaW5kEhIKCm1lc3NhZ2VfaWQYAiABKAkSEwoLZnJvbV9oYW5kbGUYAyABKAkSEwoLdHJhY2VwYXJlbnQYBCABKAkiawoMU2Vzc2lvbkVycm9yEioKBGtpbmQYASABKA4yHC5jb21wYXNzLnYxLlNlc3Npb25FcnJvcktpbmQSDwoHbWVzc2FnZRgCIAEoCRITCgZzdGF0dXMYAyABKAVIAIgBAUIJCgdfc3RhdHVzIjIKHFN1YnNjcmliZUFnZW50U2Vzc2lvblJlcXVlc3QSEgoKc2Vzc2lvbl9pZBgBIAEoCSJ+ChFBZ2VudFNlc3Npb25GcmFtZRISCgpzZXNzaW9uX2lkGAEgASgJEicKBWV2ZW50GAIgASgLMhguY29tcGFzcy52MS5TZXNzaW9uRXZlbnQSLAoFc3RhdGUYAyABKA4yHS5jb21wYXNzLnYxLkFnZW50U2Vzc2lvblN0YXRlInAKHlByb3Zpc2lvbkFnZW50V29ya3NwYWNlUmVxdWVzdBIUCgxhZ2VudF9oYW5kbGUYASABKAkSGQoRY2xpZW50X3JlcXVlc3RfaWQYAiABKAkSDwoHcGVyc29uYRgDIAEoCRIMCgRyb2xlGAQgASgJIjkKH1Byb3Zpc2lvbkFnZW50V29ya3NwYWNlUmVzcG9uc2USFgoOY29udGFpbmVyX25hbWUYASABKAkiUAobUmVtb3ZlQWdlbnRXb3Jrc3BhY2VSZXF1ZXN0EhYKDmNvbnRhaW5lcl9uYW1lGAEgASgJEhkKEWNsaWVudF9yZXF1ZXN0X2lkGAIgASgJIh4KHFJlbW92ZUFnZW50V29ya3NwYWNlUmVzcG9uc2UiYwoYU3RhcnRBZ2VudFNlc3Npb25SZXF1ZXN0EhYKDmNvbnRhaW5lcl9uYW1lGAEgASgJEhkKEXJlc3VtZV9zZXNzaW9uX2lkGAMgASgJSgQIAhADUg5pbml0aWFsX3Byb21wdCIvChlTdGFydEFnZW50U2Vzc2lvblJlc3BvbnNlEhIKCnNlc3Npb25faWQYASABKAkiWgoRU3Bhd25BZ2VudFJlcXVlc3QSFAoMYWdlbnRfaGFuZGxlGAEgASgJEhkKEWNsaWVudF9yZXF1ZXN0X2lkGAMgASgJSgQIAhADUg5pbml0aWFsX3Byb21wdCJAChJTcGF3bkFnZW50UmVzcG9uc2USEgoKc2Vzc2lvbl9pZBgBIAEoCRIWCg5jb250YWluZXJfbmFtZRgCIAEoCSItChdTdG9wQWdlbnRTZXNzaW9uUmVxdWVzdBISCgpzZXNzaW9uX2lkGAEgASgJIhoKGFN0b3BBZ2VudFNlc3Npb25SZXNwb25zZSIvChlSZWxvYWRBZ2VudFNlc3Npb25SZXF1ZXN0EhIKCnNlc3Npb25faWQYASABKAkiMAoaUmVsb2FkQWdlbnRTZXNzaW9uUmVzcG9uc2USEgoKc2Vzc2lvbl9pZBgBIAEoCSIrChVHZXRBZ2VudFN0YXR1c1JlcXVlc3QSEgoKc2Vzc2lvbl9pZBgBIAEoCSJKChZHZXRBZ2VudFN0YXR1c1Jlc3BvbnNlEjAKCHN0YXR1c2VzGAEgAygLMh4uY29tcGFzcy52MS5BZ2VudFNlc3Npb25TdGF0dXMiKwoRSXNzdWVUb2tlblJlcXVlc3QSFgoOYWNjb3VudF9oYW5kbGUYASABKAkiIwoSSXNzdWVUb2tlblJlc3BvbnNlEg0KBXRva2VuGAEgASgJIigKElJldm9rZVRva2VuUmVxdWVzdBISCgV0b2tlbhgBIAEoCUIDgAEBIhUKE1Jldm9rZVRva2VuUmVzcG9uc2UiJwoVUHV0QWdlbnRDb25maWdSZXF1ZXN0Eg4KBmJ1bmRsZRgBIAEoDCIpChZQdXRBZ2VudENvbmZpZ1Jlc3BvbnNlEg8KB3ZlcnNpb24YASABKAkiGwoZR2V0QWdlbnRDb25maWdJbmZvUmVxdWVzdCLaAQoaR2V0QWdlbnRDb25maWdJbmZvUmVzcG9uc2USDwoHdmVyc2lvbhgBIAEoCRIOCgZza2lsbHMYAiADKAkSEgoKZXh0ZW5zaW9ucxgDIAMoCRITCgttY3Bfc2VydmVycxgEIAMoCRIUCgxoYXNfc2V0dGluZ3MYBSABKAgSFQoNaGFzX2FnZW50c19tZBgGIAEoCBINCgVydWxlcxgHIAMoCRIRCglzdWJhZ2VudHMYCCADKAkSEgoKaGFzX21vZGVscxgJIAEoCBIPCgdwcm9tcHRzGAogAygJIhoKGERlbGV0ZUFnZW50Q29uZmlnUmVxdWVzdCIbChlEZWxldGVBZ2VudENvbmZpZ1Jlc3BvbnNlIjQKDk1vZGVsQ2FuZGlkYXRlEhAKCHByb3ZpZGVyGAEgASgJEhAKCG1vZGVsX2lkGAIgASgJInEKDU1vZGVsTWV0YWRhdGESFgoOY29udGV4dF93aW5kb3cYASABKAMSHAoUaW5wdXRfY29zdF9taWNyb191c2QYAiABKAMSHQoVb3V0cHV0X2Nvc3RfbWljcm9fdXNkGAMgASgDEgsKA2FwaRgEIAEoCSKHAQoSTW9kZWxSZWdpc3RyeUVudHJ5EhQKDGRpc3BsYXlfbmFtZRgBIAEoCRIuCgpjYW5kaWRhdGVzGAIgAygLMhouY29tcGFzcy52MS5Nb2RlbENhbmRpZGF0ZRIrCghtZXRhZGF0YRgDIAEoCzIZLmNvbXBhc3MudjEuTW9kZWxNZXRhZGF0YSKYAQoNTW9kZWxSZWdpc3RyeRI3CgdlbnRyaWVzGAEgAygLMiYuY29tcGFzcy52MS5Nb2RlbFJlZ2lzdHJ5LkVudHJpZXNFbnRyeRpOCgxFbnRyaWVzRW50cnkSCwoDa2V5GAEgASgJEi0KBXZhbHVlGAIgASgLMh4uY29tcGFzcy52MS5Nb2RlbFJlZ2lzdHJ5RW50cnk6AjgBImAKF1B1dE1vZGVsUmVnaXN0cnlSZXF1ZXN0EisKCHJlZ2lzdHJ5GAEgASgLMhkuY29tcGFzcy52MS5Nb2RlbFJlZ2lzdHJ5EhgKEGV4cGVjdGVkX3ZlcnNpb24YAiABKAMiKwoYUHV0TW9kZWxSZWdpc3RyeVJlc3BvbnNlEg8KB3ZlcnNpb24YASABKAMiGQoXR2V0TW9kZWxSZWdpc3RyeVJlcXVlc3QiWAoYR2V0TW9kZWxSZWdpc3RyeVJlc3BvbnNlEg8KB3ZlcnNpb24YASABKAMSKwoIcmVnaXN0cnkYAiABKAsyGS5jb21wYXNzLnYxLk1vZGVsUmVnaXN0cnkiHAoaRGVsZXRlTW9kZWxSZWdpc3RyeVJlcXVlc3QiHQobRGVsZXRlTW9kZWxSZWdpc3RyeVJlc3BvbnNlIj4KEEFnZW50QXR0cmlidXRpb24SFAoMYWdlbnRfaGFuZGxlGAEgASgJEhQKDG93bmVyX2hhbmRsZRgCIAEoCSJFCghGb3JnZVJlZhIrCghwcm92aWRlchgBIAEoDjIZLmNvbXBhc3MudjEuRm9yZ2VQcm92aWRlchIMCgRob3N0GAIgASgJItQDCgVJc3N1ZRIKCgJpZBgBIAEoCRIjCgVmb3JnZRgCIAEoCzIULmNvbXBhc3MudjEuRm9yZ2VSZWYSDAoEcmVwbxgDIAEoCRIOCgZudW1iZXIYBCABKA0SDQoFdGl0bGUYBSABKAkSDAoEYm9keRgGIAEoCRITCgtmb3JnZV9zdGF0ZRgHIAEoCRILCgN1cmwYCCABKAkSKwoFYWdlbnQYCSABKAsyHC5jb21wYXNzLnYxLkFnZW50QXR0cmlidXRpb24SFQoNZm9yZ2VfYWNjb3VudBgKIAEoCRIOCgZsYWJlbHMYCyADKAkSLgoKdXBkYXRlZF9hdBgTIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASJQoFc3RhdGUYDCABKA4yFi5jb21wYXNzLnYxLklzc3VlU3RhdGUSEAoIcHJpb3JpdHkYDSABKAkSEAoIYXNzaWduZWUYDiABKAkSDwoHc3VtbWFyeRgPIAEoCRIOCgZicmFuY2gYECABKAkSJAoDcHJzGBEgAygLMhcuY29tcGFzcy52MS5QdWxsUmVxdWVzdBInCgd0cmFja2VyGBIgASgLMhYuY29tcGFzcy52MS5UcmFja2VyUmVmIp4DCgtQdWxsUmVxdWVzdBIjCgVmb3JnZRgBIAEoCzIULmNvbXBhc3MudjEuRm9yZ2VSZWYSDAoEcmVwbxgCIAEoCRIOCgZudW1iZXIYAyABKA0SDQoFdGl0bGUYBCABKAkSEwoLZm9yZ2Vfc3RhdGUYBSABKAkSCwoDdXJsGAYgASgJEhAKCGhlYWRfcmVmGAcgASgJEhAKCGJhc2VfcmVmGAggASgJEisKBWFnZW50GAkgASgLMhwuY29tcGFzcy52MS5BZ2VudEF0dHJpYnV0aW9uEhUKDWZvcmdlX2FjY291bnQYCiABKAkSDQoFZHJhZnQYCyABKAgSKQoHY2hhbmdlZBgMIAEoCzIYLmNvbXBhc3MudjEuQ2hhbmdlZFN0YXRzEikKBmNoZWNrcxgNIAEoCzIZLmNvbXBhc3MudjEuQ2hlY2tzU3VtbWFyeRIjCgdyZXZpZXdzGA4gAygLMhIuY29tcGFzcy52MS5SZXZpZXcSKQoHdGhyZWFkcxgPIAMoCzIYLmNvbXBhc3MudjEuUmV2aWV3VGhyZWFkIlMKDUNoZWNrc1N1bW1hcnkSEAoIaGVhZF9zaGEYASABKAkSDQoFc3RhdGUYAiABKAkSIQoGY2hlY2tzGAMgAygLMhEuY29tcGFzcy52MS5DaGVjayJDCgVDaGVjaxIMCgRuYW1lGAEgASgJEg0KBXN0YXRlGAIgASgJEgsKA3VybBgDIAEoCRIQCghyZXF1aXJlZBgEIAEoCCJDCgxDaGFuZ2VkU3RhdHMSDQoFZmlsZXMYASABKA0SEQoJYWRkaXRpb25zGAIgASgNEhEKCWRlbGV0aW9ucxgDIAEoDSJDCgpUcmFja2VyUmVmEgwKBGtpbmQYASABKAkSCgoCaWQYAiABKAkSDgoGc3RhdHVzGAMgASgJEgsKA3VybBgEIAEoCSJHCgZSZXZpZXcSDgoGYXV0aG9yGAEgASgJEg4KBmlzX2JvdBgCIAEoCBIPCgd2ZXJkaWN0GAMgASgJEgwKBGJvZHkYBCABKAkiVQoMUmV2aWV3VGhyZWFkEgwKBHBhdGgYASABKAkSEAoIcmVzb2x2ZWQYAiABKAgSJQoIY29tbWVudHMYAyADKAsyEy5jb21wYXNzLnYxLkNvbW1lbnQiNwoHQ29tbWVudBIOCgZhdXRob3IYASABKAkSDgoGaXNfYm90GAIgASgIEgwKBGJvZHkYAyABKAkqZAoOU2VjcmV0RGVsaXZlcnkSHwobU0VDUkVUX0RFTElWRVJZX1VOU1BFQ0lGSUVEEAASGAoUU0VDUkVUX0RFTElWRVJZX0ZJTEUQARIXChNTRUNSRVRfREVMSVZFUllfRU5WEAIqcAoKU2VjcmV0S2luZBIbChdTRUNSRVRfS0lORF9VTlNQRUNJRklFRBAAEhcKE1NFQ1JFVF9LSU5EX0dFTkVSSUMQARIYChRTRUNSRVRfS0lORF9QUk9WSURFUhACEhIKDlNFQ1JFVF9LSU5EX0dIEAMqWwoLU2VjcmV0U2NvcGUSHAoYU0VDUkVUX1NDT1BFX1VOU1BFQ0lGSUVEEAASFQoRU0VDUkVUX1NDT1BFX1VTRVIQARIXChNTRUNSRVRfU0NPUEVfVEVOQU5UEAIqQwoLU2VydmVyU3RhdGUSHAoYU0VSVkVSX1NUQVRFX1VOU1BFQ0lGSUVEEAASFgoSU0VSVkVSX1NUQVRFX1JFQURZEAEqlwEKC1J1bnRpbWVUaWVyEhwKGFJVTlRJTUVfVElFUl9VTlNQRUNJRklFRBAAEhcKE1JVTlRJTUVfVElFUl9QT0RNQU4QARIYChRSVU5USU1FX1RJRVJfTUlDUk9WTRACEiAKHFJVTlRJTUVfVElFUl9BUFBMRV9DT05UQUlORVIQAxIVChFSVU5USU1FX1RJRVJfSE9TVBAEKmgKDUVncmVzc1Bvc3R1cmUSHgoaRUdSRVNTX1BPU1RVUkVfVU5TUEVDSUZJRUQQABIYChRFR1JFU1NfUE9TVFVSRV9BUk1FRBABEh0KGUVHUkVTU19QT1NUVVJFX1VORU5GT1JDRUQQAiqCAgoRQWdlbnRTZXNzaW9uU3RhdGUSIwofQUdFTlRfU0VTU0lPTl9TVEFURV9VTlNQRUNJRklFRBAAEiAKHEFHRU5UX1NFU1NJT05fU1RBVEVfU1RBUlRJTkcQARIdChlBR0VOVF9TRVNTSU9OX1NUQVRFX1JFQURZEAISHwobQUdFTlRfU0VTU0lPTl9TVEFURV9XT1JLSU5HEAMSHwobQUdFTlRfU0VTU0lPTl9TVEFURV9TVE9QUEVEEAQSHwobQUdFTlRfU0VTU0lPTl9TVEFURV9FUlJPUkVEEAUSJAogQUdFTlRfU0VTU0lPTl9TVEFURV9ESVNDT05ORUNURUQQBirSAQoTQWdlbnRUb29sQ2FsbFN0YXR1cxImCiJBR0VOVF9UT09MX0NBTExfU1RBVFVTX1VOU1BFQ0lGSUVEEAASIgoeQUdFTlRfVE9PTF9DQUxMX1NUQVRVU19QRU5ESU5HEAESJgoiQUdFTlRfVE9PTF9DQUxMX1NUQVRVU19JTl9QUk9HUkVTUxACEiQKIEFHRU5UX1RPT0xfQ0FMTF9TVEFUVVNfQ09NUExFVEVEEAMSIQodQUdFTlRfVE9PTF9DQUxMX1NUQVRVU19GQUlMRUQQBCq0AQoUQWdlbnRQbGFuRW50cnlTdGF0dXMSJwojQUdFTlRfUExBTl9FTlRSWV9TVEFUVVNfVU5TUEVDSUZJRUQQABIjCh9BR0VOVF9QTEFOX0VOVFJZX1NUQVRVU19QRU5ESU5HEAESJwojQUdFTlRfUExBTl9FTlRSWV9TVEFUVVNfSU5fUFJPR1JFU1MQAhIlCiFBR0VOVF9QTEFOX0VOVFJZX1NUQVRVU19DT01QTEVURUQQAyqEAQoUU2Vzc2lvbkluamVjdGlvbktpbmQSJgoiU0VTU0lPTl9JTkpFQ1RJT05fS0lORF9VTlNQRUNJRklFRBAAEiAKHFNFU1NJT05fSU5KRUNUSU9OX0tJTkRfU1RFRVIQARIiCh5TRVNTSU9OX0lOSkVDVElPTl9LSU5EX0RFTElWRVIQAip0ChBTZXNzaW9uRXJyb3JLaW5kEiIKHlNFU1NJT05fRVJST1JfS0lORF9VTlNQRUNJRklFRBAAEhwKGFNFU1NJT05fRVJST1JfS0lORF9FUlJPUhABEh4KGlNFU1NJT05fRVJST1JfS0lORF9BQk9SVEVEEAIq8QEKCklzc3VlU3RhdGUSGwoXSVNTVUVfU1RBVEVfVU5TUEVDSUZJRUQQABIXChNJU1NVRV9TVEFURV9CQUNLTE9HEAESFAoQSVNTVUVfU1RBVEVfVE9ETxACEhYKEklTU1VFX1NUQVRFX1FVRVVFRBADEhcKE0lTU1VFX1NUQVRFX0JMT0NLRUQQBBIbChdJU1NVRV9TVEFURV9JTl9QUk9HUkVTUxAFEhkKFUlTU1VFX1NUQVRFX0lOX1JFVklFVxAGEhQKEElTU1VFX1NUQVRFX0RPTkUQBxIYChRJU1NVRV9TVEFURV9BUkNISVZFRBAIKpwBCg1Gb3JnZVByb3ZpZGVyEh4KGkZPUkdFX1BST1ZJREVSX1VOU1BFQ0lGSUVEEAASGQoVRk9SR0VfUFJPVklERVJfR0lUSFVCEAESGQoVRk9SR0VfUFJPVklERVJfR0lUTEFCEAISGgoWRk9SR0VfUFJPVklERVJfRk9SR0VKTxADEhkKFUZPUkdFX1BST1ZJREVSX0xJTkVBUhAEMtMOCg5Db21wYXNzU2VydmljZRJUCg1HZXRTZXJ2ZXJJbmZvEiAuY29tcGFzcy52MS5HZXRTZXJ2ZXJJbmZvUmVxdWVzdBohLmNvbXBhc3MudjEuR2V0U2VydmVySW5mb1Jlc3BvbnNlEj8KBldob0FtSRIZLmNvbXBhc3MudjEuV2hvQW1JUmVxdWVzdBoaLmNvbXBhc3MudjEuV2hvQW1JUmVzcG9uc2USXAoPU3Vic2NyaWJlRXZlbnRzEiIuY29tcGFzcy52MS5TdWJzY3JpYmVFdmVudHNSZXF1ZXN0GiMuY29tcGFzcy52MS5TdWJzY3JpYmVFdmVudHNSZXNwb25zZTABEloKD0xpc3RCb2FyZElzc3VlcxIiLmNvbXBhc3MudjEuTGlzdEJvYXJkSXNzdWVzUmVxdWVzdBojLmNvbXBhc3MudjEuTGlzdEJvYXJkSXNzdWVzUmVzcG9uc2UScgoXUHJvdmlzaW9uQWdlbnRXb3Jrc3BhY2USKi5jb21wYXNzLnYxLlByb3Zpc2lvbkFnZW50V29ya3NwYWNlUmVxdWVzdBorLmNvbXBhc3MudjEuUHJvdmlzaW9uQWdlbnRXb3Jrc3BhY2VSZXNwb25zZRJgChFTdGFydEFnZW50U2Vzc2lvbhIkLmNvbXBhc3MudjEuU3RhcnRBZ2VudFNlc3Npb25SZXF1ZXN0GiUuY29tcGFzcy52MS5TdGFydEFnZW50U2Vzc2lvblJlc3BvbnNlEksKClNwYXduQWdlbnQSHS5jb21wYXNzLnYxLlNwYXduQWdlbnRSZXF1ZXN0Gh4uY29tcGFzcy52MS5TcGF3bkFnZW50UmVzcG9uc2USXQoQU3RvcEFnZW50U2Vzc2lvbhIjLmNvbXBhc3MudjEuU3RvcEFnZW50U2Vzc2lvblJlcXVlc3QaJC5jb21wYXNzLnYxLlN0b3BBZ2VudFNlc3Npb25SZXNwb25zZRJpChRSZW1vdmVBZ2VudFdvcmtzcGFjZRInLmNvbXBhc3MudjEuUmVtb3ZlQWdlbnRXb3Jrc3BhY2VSZXF1ZXN0GiguY29tcGFzcy52MS5SZW1vdmVBZ2VudFdvcmtzcGFjZVJlc3BvbnNlEmMKElJlbG9hZEFnZW50U2Vzc2lvbhIlLmNvbXBhc3MudjEuUmVsb2FkQWdlbnRTZXNzaW9uUmVxdWVzdBomLmNvbXBhc3MudjEuUmVsb2FkQWdlbnRTZXNzaW9uUmVzcG9uc2USVwoOR2V0QWdlbnRTdGF0dXMSIS5jb21wYXNzLnYxLkdldEFnZW50U3RhdHVzUmVxdWVzdBoiLmNvbXBhc3MudjEuR2V0QWdlbnRTdGF0dXNSZXNwb25zZRJiChVTdWJzY3JpYmVBZ2VudFNlc3Npb24SKC5jb21wYXNzLnYxLlN1YnNjcmliZUFnZW50U2Vzc2lvblJlcXVlc3QaHS5jb21wYXNzLnYxLkFnZW50U2Vzc2lvbkZyYW1lMAESSwoKSXNzdWVUb2tlbhIdLmNvbXBhc3MudjEuSXNzdWVUb2tlblJlcXVlc3QaHi5jb21wYXNzLnYxLklzc3VlVG9rZW5SZXNwb25zZRJOCgtSZXZva2VUb2tlbhIeLmNvbXBhc3MudjEuUmV2b2tlVG9rZW5SZXF1ZXN0Gh8uY29tcGFzcy52MS5SZXZva2VUb2tlblJlc3BvbnNlElcKDlB1dEFnZW50Q29uZmlnEiEuY29tcGFzcy52MS5QdXRBZ2VudENvbmZpZ1JlcXVlc3QaIi5jb21wYXNzLnYxLlB1dEFnZW50Q29uZmlnUmVzcG9uc2USYwoSR2V0QWdlbnRDb25maWdJbmZvEiUuY29tcGFzcy52MS5HZXRBZ2VudENvbmZpZ0luZm9SZXF1ZXN0GiYuY29tcGFzcy52MS5HZXRBZ2VudENvbmZpZ0luZm9SZXNwb25zZRJgChFEZWxldGVBZ2VudENvbmZpZxIkLmNvbXBhc3MudjEuRGVsZXRlQWdlbnRDb25maWdSZXF1ZXN0GiUuY29tcGFzcy52MS5EZWxldGVBZ2VudENvbmZpZ1Jlc3BvbnNlEl0KEFB1dE1vZGVsUmVnaXN0cnkSIy5jb21wYXNzLnYxLlB1dE1vZGVsUmVnaXN0cnlSZXF1ZXN0GiQuY29tcGFzcy52MS5QdXRNb2RlbFJlZ2lzdHJ5UmVzcG9uc2USXQoQR2V0TW9kZWxSZWdpc3RyeRIjLmNvbXBhc3MudjEuR2V0TW9kZWxSZWdpc3RyeVJlcXVlc3QaJC5jb21wYXNzLnYxLkdldE1vZGVsUmVnaXN0cnlSZXNwb25zZRJmChNEZWxldGVNb2RlbFJlZ2lzdHJ5EiYuY29tcGFzcy52MS5EZWxldGVNb2RlbFJlZ2lzdHJ5UmVxdWVzdBonLmNvbXBhc3MudjEuRGVsZXRlTW9kZWxSZWdpc3RyeVJlc3BvbnNlMqAECg5TZWNyZXRzU2VydmljZRJICglTZXRTZWNyZXQSHC5jb21wYXNzLnYxLlNldFNlY3JldFJlcXVlc3QaHS5jb21wYXNzLnYxLlNldFNlY3JldFJlc3BvbnNlEk4KC0xpc3RTZWNyZXRzEh4uY29tcGFzcy52MS5MaXN0U2VjcmV0c1JlcXVlc3QaHy5jb21wYXNzLnYxLkxpc3RTZWNyZXRzUmVzcG9uc2USUQoMRGVsZXRlU2VjcmV0Eh8uY29tcGFzcy52MS5EZWxldGVTZWNyZXRSZXF1ZXN0GiAuY29tcGFzcy52MS5EZWxldGVTZWNyZXRSZXNwb25zZRJaCg9TZXRTZXJ2ZXJTZWNyZXQSIi5jb21wYXNzLnYxLlNldFNlcnZlclNlY3JldFJlcXVlc3QaIy5jb21wYXNzLnYxLlNldFNlcnZlclNlY3JldFJlc3BvbnNlEmMKEkRlbGV0ZVNlcnZlclNlY3JldBIlLmNvbXBhc3MudjEuRGVsZXRlU2VydmVyU2VjcmV0UmVxdWVzdBomLmNvbXBhc3MudjEuRGVsZXRlU2VydmVyU2VjcmV0UmVzcG9uc2USYAoRTGlzdFNlcnZlclNlY3JldHMSJC5jb21wYXNzLnYxLkxpc3RTZXJ2ZXJTZWNyZXRzUmVxdWVzdBolLmNvbXBhc3MudjEuTGlzdFNlcnZlclNlY3JldHNSZXNwb25zZWIGcHJvdG8z", [file_google_protobuf_timestamp]); + fileDesc("Chhjb21wYXNzL3YxL2NvbXBhc3MucHJvdG8SCmNvbXBhc3MudjEi0AEKEFNldFNlY3JldFJlcXVlc3QSDAoEbmFtZRgBIAEoCRISCgV2YWx1ZRgCIAEoCUIDgAEBEiwKCGRlbGl2ZXJ5GAMgASgOMhouY29tcGFzcy52MS5TZWNyZXREZWxpdmVyeRIkCgRraW5kGAQgASgOMhYuY29tcGFzcy52MS5TZWNyZXRLaW5kEhAKCHByb3ZpZGVyGAUgASgJEgwKBGhvc3QYBiABKAkSJgoFc2NvcGUYByABKA4yFy5jb21wYXNzLnYxLlNlY3JldFNjb3BlIhMKEVNldFNlY3JldFJlc3BvbnNlIhQKEkxpc3RTZWNyZXRzUmVxdWVzdCJAChNMaXN0U2VjcmV0c1Jlc3BvbnNlEikKB3NlY3JldHMYASADKAsyGC5jb21wYXNzLnYxLlNlY3JldFN0YXR1cyKgAQoMU2VjcmV0U3RhdHVzEgwKBG5hbWUYASABKAkSDgoGaXNfc2V0GAIgASgIEiwKCGRlbGl2ZXJ5GAMgASgOMhouY29tcGFzcy52MS5TZWNyZXREZWxpdmVyeRIkCgRraW5kGAQgASgOMhYuY29tcGFzcy52MS5TZWNyZXRLaW5kEhAKCHByb3ZpZGVyGAUgASgJEgwKBGhvc3QYBiABKAkiSwoTRGVsZXRlU2VjcmV0UmVxdWVzdBIMCgRuYW1lGAEgASgJEiYKBXNjb3BlGAIgASgOMhcuY29tcGFzcy52MS5TZWNyZXRTY29wZSIWChREZWxldGVTZWNyZXRSZXNwb25zZSIaChhMaXN0U2VydmVyU2VjcmV0c1JlcXVlc3QiUwoZTGlzdFNlcnZlclNlY3JldHNSZXNwb25zZRI2Cg5zZXJ2ZXJfc2VjcmV0cxgBIAMoCzIeLmNvbXBhc3MudjEuU2VydmVyU2VjcmV0U3RhdHVzIjIKElNlcnZlclNlY3JldFN0YXR1cxIMCgRuYW1lGAEgASgJEg4KBmlzX3NldBgCIAEoCCIWChRHZXRTZXJ2ZXJJbmZvUmVxdWVzdCI9ChVHZXRTZXJ2ZXJJbmZvUmVzcG9uc2USDwoHdmVyc2lvbhgBIAEoCRITCgthcGlfdmVyc2lvbhgCIAEoCSIPCg1XaG9BbUlSZXF1ZXN0IiQKDldob0FtSVJlc3BvbnNlEhIKCmFjY291bnRfaWQYASABKAkiQwoWU3Vic2NyaWJlRXZlbnRzUmVxdWVzdBIRCglzaW5jZV9zZXEYASABKAQSFgoOaW5zdGFuY2VfZXBvY2gYAiABKAQi4gMKF1N1YnNjcmliZUV2ZW50c1Jlc3BvbnNlEgsKA3NlcRgBIAEoBBISCgphdF91bml4X21zGAIgASgDEhYKDmluc3RhbmNlX2Vwb2NoGAMgASgEEhQKDHNuYXBzaG90X3NlcRgEIAEoBBIxCg1zZXJ2ZXJfc3RhdHVzGAogASgLMhguY29tcGFzcy52MS5TZXJ2ZXJTdGF0dXNIABI1Cg9yZXN5bmNfcmVxdWlyZWQYCyABKAsyGi5jb21wYXNzLnYxLlJlc3luY1JlcXVpcmVkSAASPgoUYWdlbnRfc2Vzc2lvbl9zdGF0dXMYDCABKAsyHi5jb21wYXNzLnYxLkFnZW50U2Vzc2lvblN0YXR1c0gAEjwKE2FnZW50X21lc3NhZ2VfY2h1bmsYDSABKAsyHS5jb21wYXNzLnYxLkFnZW50TWVzc2FnZUNodW5rSAASNAoPYWdlbnRfdG9vbF9jYWxsGA4gASgLMhkuY29tcGFzcy52MS5BZ2VudFRvb2xDYWxsSAASKwoKYWdlbnRfcGxhbhgPIAEoCzIVLmNvbXBhc3MudjEuQWdlbnRQbGFuSAASIgoFaXNzdWUYECABKAsyES5jb21wYXNzLnYxLklzc3VlSABCCQoHcGF5bG9hZCIuChZMaXN0Qm9hcmRJc3N1ZXNSZXF1ZXN0EhQKDHNuYXBzaG90X3NlcRgBIAEoBCI8ChdMaXN0Qm9hcmRJc3N1ZXNSZXNwb25zZRIhCgZpc3N1ZXMYASADKAsyES5jb21wYXNzLnYxLklzc3VlIjYKDFNlcnZlclN0YXR1cxImCgVzdGF0ZRgBIAEoDjIXLmNvbXBhc3MudjEuU2VydmVyU3RhdGUiEAoOUmVzeW5jUmVxdWlyZWQi0gEKEkFnZW50U2Vzc2lvblN0YXR1cxISCgpzZXNzaW9uX2lkGAEgASgJEiwKBXN0YXRlGAIgASgOMh0uY29tcGFzcy52MS5BZ2VudFNlc3Npb25TdGF0ZRIYChBhZ2VudF9hY2NvdW50X2lkGAMgASgJEi0KDHJ1bnRpbWVfdGllchgEIAEoDjIXLmNvbXBhc3MudjEuUnVudGltZVRpZXISMQoOZWdyZXNzX3Bvc3R1cmUYBSABKA4yGS5jb21wYXNzLnYxLkVncmVzc1Bvc3R1cmUiSQoRQWdlbnRNZXNzYWdlQ2h1bmsSEgoKc2Vzc2lvbl9pZBgBIAEoCRIMCgR0ZXh0GAIgASgJEhIKCmlzX3Rob3VnaHQYAyABKAgieQoNQWdlbnRUb29sQ2FsbBISCgpzZXNzaW9uX2lkGAEgASgJEhQKDHRvb2xfY2FsbF9pZBgCIAEoCRINCgV0aXRsZRgDIAEoCRIvCgZzdGF0dXMYBCABKA4yHy5jb21wYXNzLnYxLkFnZW50VG9vbENhbGxTdGF0dXMiTAoJQWdlbnRQbGFuEhIKCnNlc3Npb25faWQYASABKAkSKwoHZW50cmllcxgCIAMoCzIaLmNvbXBhc3MudjEuQWdlbnRQbGFuRW50cnkiUwoOQWdlbnRQbGFuRW50cnkSDwoHY29udGVudBgBIAEoCRIwCgZzdGF0dXMYAiABKA4yIC5jb21wYXNzLnYxLkFnZW50UGxhbkVudHJ5U3RhdHVzIt8DCgxTZXNzaW9uRXZlbnQSEAoIZXZlbnRfaWQYASABKAkSEgoKYXRfdW5peF9tcxgCIAEoAxI6Cg5hc3Npc3RhbnRfdGV4dBgDIAEoCzIgLmNvbXBhc3MudjEuU2Vzc2lvbkFzc2lzdGFudFRleHRIABIvCgh0aGlua2luZxgEIAEoCzIbLmNvbXBhc3MudjEuU2Vzc2lvblRoaW5raW5nSAASMAoJdG9vbF9jYWxsGAUgASgLMhsuY29tcGFzcy52MS5TZXNzaW9uVG9vbENhbGxIABI9ChB0b29sX2NhbGxfdXBkYXRlGAYgASgLMiEuY29tcGFzcy52MS5TZXNzaW9uVG9vbENhbGxVcGRhdGVIABInCgRwbGFuGAcgASgLMhcuY29tcGFzcy52MS5TZXNzaW9uUGxhbkgAEisKBm5vdGljZRgIIAEoCzIZLmNvbXBhc3MudjEuU2Vzc2lvbk5vdGljZUgAEjkKEXNlc3Npb25faW5qZWN0aW9uGAkgASgLMhwuY29tcGFzcy52MS5TZXNzaW9uSW5qZWN0aW9uSAASMQoNc2Vzc2lvbl9lcnJvchgKIAEoCzIYLmNvbXBhc3MudjEuU2Vzc2lvbkVycm9ySABCBwoFZXZlbnQiOAoUU2Vzc2lvbkFzc2lzdGFudFRleHQSDAoEdGV4dBgBIAEoCRISCgptZXNzYWdlX2lkGAIgASgJIjMKD1Nlc3Npb25UaGlua2luZxIMCgR0ZXh0GAEgASgJEhIKCm1lc3NhZ2VfaWQYAiABKAkiZwoPU2Vzc2lvblRvb2xDYWxsEhQKDHRvb2xfY2FsbF9pZBgBIAEoCRINCgV0aXRsZRgCIAEoCRIvCgZzdGF0dXMYAyABKA4yHy5jb21wYXNzLnYxLkFnZW50VG9vbENhbGxTdGF0dXMimgEKFVNlc3Npb25Ub29sQ2FsbFVwZGF0ZRIUCgx0b29sX2NhbGxfaWQYASABKAkSLwoGc3RhdHVzGAIgASgOMh8uY29tcGFzcy52MS5BZ2VudFRvb2xDYWxsU3RhdHVzEg4KBm91dHB1dBgDIAEoCRIqCgVkaWZmcxgEIAMoCzIbLmNvbXBhc3MudjEuU2Vzc2lvbkZpbGVEaWZmIlUKD1Nlc3Npb25GaWxlRGlmZhIMCgRwYXRoGAEgASgJEhUKCG9sZF90ZXh0GAIgASgJSACIAQESEAoIbmV3X3RleHQYAyABKAlCCwoJX29sZF90ZXh0IjoKC1Nlc3Npb25QbGFuEisKB2VudHJpZXMYASADKAsyGi5jb21wYXNzLnYxLkFnZW50UGxhbkVudHJ5IjkKDVNlc3Npb25Ob3RpY2USDAoEdGV4dBgBIAEoCRIRCgRsaW5rGAIgASgJSACIAQFCBwoFX2xpbmsigwEKEFNlc3Npb25JbmplY3Rpb24SMQoHb3Bfa2luZBgBIAEoDjIgLmNvbXBhc3MudjEuU2Vzc2lvbkluamVjdGlvbktpbmQSEgoKbWVzc2FnZV9pZBgCIAEoCRITCgtmcm9tX2hhbmRsZRgDIAEoCRITCgt0cmFjZXBhcmVudBgEIAEoCSJrCgxTZXNzaW9uRXJyb3ISKgoEa2luZBgBIAEoDjIcLmNvbXBhc3MudjEuU2Vzc2lvbkVycm9yS2luZBIPCgdtZXNzYWdlGAIgASgJEhMKBnN0YXR1cxgDIAEoBUgAiAEBQgkKB19zdGF0dXMiMgocU3Vic2NyaWJlQWdlbnRTZXNzaW9uUmVxdWVzdBISCgpzZXNzaW9uX2lkGAEgASgJIn4KEUFnZW50U2Vzc2lvbkZyYW1lEhIKCnNlc3Npb25faWQYASABKAkSJwoFZXZlbnQYAiABKAsyGC5jb21wYXNzLnYxLlNlc3Npb25FdmVudBIsCgVzdGF0ZRgDIAEoDjIdLmNvbXBhc3MudjEuQWdlbnRTZXNzaW9uU3RhdGUicAoeUHJvdmlzaW9uQWdlbnRXb3Jrc3BhY2VSZXF1ZXN0EhQKDGFnZW50X2hhbmRsZRgBIAEoCRIZChFjbGllbnRfcmVxdWVzdF9pZBgCIAEoCRIPCgdwZXJzb25hGAMgASgJEgwKBHJvbGUYBCABKAkiOQofUHJvdmlzaW9uQWdlbnRXb3Jrc3BhY2VSZXNwb25zZRIWCg5jb250YWluZXJfbmFtZRgBIAEoCSJQChtSZW1vdmVBZ2VudFdvcmtzcGFjZVJlcXVlc3QSFgoOY29udGFpbmVyX25hbWUYASABKAkSGQoRY2xpZW50X3JlcXVlc3RfaWQYAiABKAkiHgocUmVtb3ZlQWdlbnRXb3Jrc3BhY2VSZXNwb25zZSJjChhTdGFydEFnZW50U2Vzc2lvblJlcXVlc3QSFgoOY29udGFpbmVyX25hbWUYASABKAkSGQoRcmVzdW1lX3Nlc3Npb25faWQYAyABKAlKBAgCEANSDmluaXRpYWxfcHJvbXB0Ii8KGVN0YXJ0QWdlbnRTZXNzaW9uUmVzcG9uc2USEgoKc2Vzc2lvbl9pZBgBIAEoCSJaChFTcGF3bkFnZW50UmVxdWVzdBIUCgxhZ2VudF9oYW5kbGUYASABKAkSGQoRY2xpZW50X3JlcXVlc3RfaWQYAyABKAlKBAgCEANSDmluaXRpYWxfcHJvbXB0IkAKElNwYXduQWdlbnRSZXNwb25zZRISCgpzZXNzaW9uX2lkGAEgASgJEhYKDmNvbnRhaW5lcl9uYW1lGAIgASgJIi0KF1N0b3BBZ2VudFNlc3Npb25SZXF1ZXN0EhIKCnNlc3Npb25faWQYASABKAkiGgoYU3RvcEFnZW50U2Vzc2lvblJlc3BvbnNlIi8KGVJlbG9hZEFnZW50U2Vzc2lvblJlcXVlc3QSEgoKc2Vzc2lvbl9pZBgBIAEoCSIwChpSZWxvYWRBZ2VudFNlc3Npb25SZXNwb25zZRISCgpzZXNzaW9uX2lkGAEgASgJIisKFUdldEFnZW50U3RhdHVzUmVxdWVzdBISCgpzZXNzaW9uX2lkGAEgASgJIkoKFkdldEFnZW50U3RhdHVzUmVzcG9uc2USMAoIc3RhdHVzZXMYASADKAsyHi5jb21wYXNzLnYxLkFnZW50U2Vzc2lvblN0YXR1cyIrChFJc3N1ZVRva2VuUmVxdWVzdBIWCg5hY2NvdW50X2hhbmRsZRgBIAEoCSIjChJJc3N1ZVRva2VuUmVzcG9uc2USDQoFdG9rZW4YASABKAkiKAoSUmV2b2tlVG9rZW5SZXF1ZXN0EhIKBXRva2VuGAEgASgJQgOAAQEiFQoTUmV2b2tlVG9rZW5SZXNwb25zZSInChVQdXRBZ2VudENvbmZpZ1JlcXVlc3QSDgoGYnVuZGxlGAEgASgMIikKFlB1dEFnZW50Q29uZmlnUmVzcG9uc2USDwoHdmVyc2lvbhgBIAEoCSIbChlHZXRBZ2VudENvbmZpZ0luZm9SZXF1ZXN0ItoBChpHZXRBZ2VudENvbmZpZ0luZm9SZXNwb25zZRIPCgd2ZXJzaW9uGAEgASgJEg4KBnNraWxscxgCIAMoCRISCgpleHRlbnNpb25zGAMgAygJEhMKC21jcF9zZXJ2ZXJzGAQgAygJEhQKDGhhc19zZXR0aW5ncxgFIAEoCBIVCg1oYXNfYWdlbnRzX21kGAYgASgIEg0KBXJ1bGVzGAcgAygJEhEKCXN1YmFnZW50cxgIIAMoCRISCgpoYXNfbW9kZWxzGAkgASgIEg8KB3Byb21wdHMYCiADKAkiGgoYRGVsZXRlQWdlbnRDb25maWdSZXF1ZXN0IhsKGURlbGV0ZUFnZW50Q29uZmlnUmVzcG9uc2UiNAoOTW9kZWxDYW5kaWRhdGUSEAoIcHJvdmlkZXIYASABKAkSEAoIbW9kZWxfaWQYAiABKAkicQoNTW9kZWxNZXRhZGF0YRIWCg5jb250ZXh0X3dpbmRvdxgBIAEoAxIcChRpbnB1dF9jb3N0X21pY3JvX3VzZBgCIAEoAxIdChVvdXRwdXRfY29zdF9taWNyb191c2QYAyABKAMSCwoDYXBpGAQgASgJIocBChJNb2RlbFJlZ2lzdHJ5RW50cnkSFAoMZGlzcGxheV9uYW1lGAEgASgJEi4KCmNhbmRpZGF0ZXMYAiADKAsyGi5jb21wYXNzLnYxLk1vZGVsQ2FuZGlkYXRlEisKCG1ldGFkYXRhGAMgASgLMhkuY29tcGFzcy52MS5Nb2RlbE1ldGFkYXRhIpgBCg1Nb2RlbFJlZ2lzdHJ5EjcKB2VudHJpZXMYASADKAsyJi5jb21wYXNzLnYxLk1vZGVsUmVnaXN0cnkuRW50cmllc0VudHJ5Gk4KDEVudHJpZXNFbnRyeRILCgNrZXkYASABKAkSLQoFdmFsdWUYAiABKAsyHi5jb21wYXNzLnYxLk1vZGVsUmVnaXN0cnlFbnRyeToCOAEiYAoXUHV0TW9kZWxSZWdpc3RyeVJlcXVlc3QSKwoIcmVnaXN0cnkYASABKAsyGS5jb21wYXNzLnYxLk1vZGVsUmVnaXN0cnkSGAoQZXhwZWN0ZWRfdmVyc2lvbhgCIAEoAyIrChhQdXRNb2RlbFJlZ2lzdHJ5UmVzcG9uc2USDwoHdmVyc2lvbhgBIAEoAyIZChdHZXRNb2RlbFJlZ2lzdHJ5UmVxdWVzdCJYChhHZXRNb2RlbFJlZ2lzdHJ5UmVzcG9uc2USDwoHdmVyc2lvbhgBIAEoAxIrCghyZWdpc3RyeRgCIAEoCzIZLmNvbXBhc3MudjEuTW9kZWxSZWdpc3RyeSIcChpEZWxldGVNb2RlbFJlZ2lzdHJ5UmVxdWVzdCIdChtEZWxldGVNb2RlbFJlZ2lzdHJ5UmVzcG9uc2UiPgoQQWdlbnRBdHRyaWJ1dGlvbhIUCgxhZ2VudF9oYW5kbGUYASABKAkSFAoMb3duZXJfaGFuZGxlGAIgASgJIkUKCEZvcmdlUmVmEisKCHByb3ZpZGVyGAEgASgOMhkuY29tcGFzcy52MS5Gb3JnZVByb3ZpZGVyEgwKBGhvc3QYAiABKAki1AMKBUlzc3VlEgoKAmlkGAEgASgJEiMKBWZvcmdlGAIgASgLMhQuY29tcGFzcy52MS5Gb3JnZVJlZhIMCgRyZXBvGAMgASgJEg4KBm51bWJlchgEIAEoDRINCgV0aXRsZRgFIAEoCRIMCgRib2R5GAYgASgJEhMKC2ZvcmdlX3N0YXRlGAcgASgJEgsKA3VybBgIIAEoCRIrCgVhZ2VudBgJIAEoCzIcLmNvbXBhc3MudjEuQWdlbnRBdHRyaWJ1dGlvbhIVCg1mb3JnZV9hY2NvdW50GAogASgJEg4KBmxhYmVscxgLIAMoCRIuCgp1cGRhdGVkX2F0GBMgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIlCgVzdGF0ZRgMIAEoDjIWLmNvbXBhc3MudjEuSXNzdWVTdGF0ZRIQCghwcmlvcml0eRgNIAEoCRIQCghhc3NpZ25lZRgOIAEoCRIPCgdzdW1tYXJ5GA8gASgJEg4KBmJyYW5jaBgQIAEoCRIkCgNwcnMYESADKAsyFy5jb21wYXNzLnYxLlB1bGxSZXF1ZXN0EicKB3RyYWNrZXIYEiABKAsyFi5jb21wYXNzLnYxLlRyYWNrZXJSZWYingMKC1B1bGxSZXF1ZXN0EiMKBWZvcmdlGAEgASgLMhQuY29tcGFzcy52MS5Gb3JnZVJlZhIMCgRyZXBvGAIgASgJEg4KBm51bWJlchgDIAEoDRINCgV0aXRsZRgEIAEoCRITCgtmb3JnZV9zdGF0ZRgFIAEoCRILCgN1cmwYBiABKAkSEAoIaGVhZF9yZWYYByABKAkSEAoIYmFzZV9yZWYYCCABKAkSKwoFYWdlbnQYCSABKAsyHC5jb21wYXNzLnYxLkFnZW50QXR0cmlidXRpb24SFQoNZm9yZ2VfYWNjb3VudBgKIAEoCRINCgVkcmFmdBgLIAEoCBIpCgdjaGFuZ2VkGAwgASgLMhguY29tcGFzcy52MS5DaGFuZ2VkU3RhdHMSKQoGY2hlY2tzGA0gASgLMhkuY29tcGFzcy52MS5DaGVja3NTdW1tYXJ5EiMKB3Jldmlld3MYDiADKAsyEi5jb21wYXNzLnYxLlJldmlldxIpCgd0aHJlYWRzGA8gAygLMhguY29tcGFzcy52MS5SZXZpZXdUaHJlYWQiUwoNQ2hlY2tzU3VtbWFyeRIQCghoZWFkX3NoYRgBIAEoCRINCgVzdGF0ZRgCIAEoCRIhCgZjaGVja3MYAyADKAsyES5jb21wYXNzLnYxLkNoZWNrIkMKBUNoZWNrEgwKBG5hbWUYASABKAkSDQoFc3RhdGUYAiABKAkSCwoDdXJsGAMgASgJEhAKCHJlcXVpcmVkGAQgASgIIkMKDENoYW5nZWRTdGF0cxINCgVmaWxlcxgBIAEoDRIRCglhZGRpdGlvbnMYAiABKA0SEQoJZGVsZXRpb25zGAMgASgNIkMKClRyYWNrZXJSZWYSDAoEa2luZBgBIAEoCRIKCgJpZBgCIAEoCRIOCgZzdGF0dXMYAyABKAkSCwoDdXJsGAQgASgJIkcKBlJldmlldxIOCgZhdXRob3IYASABKAkSDgoGaXNfYm90GAIgASgIEg8KB3ZlcmRpY3QYAyABKAkSDAoEYm9keRgEIAEoCSJVCgxSZXZpZXdUaHJlYWQSDAoEcGF0aBgBIAEoCRIQCghyZXNvbHZlZBgCIAEoCBIlCghjb21tZW50cxgDIAMoCzITLmNvbXBhc3MudjEuQ29tbWVudCI3CgdDb21tZW50Eg4KBmF1dGhvchgBIAEoCRIOCgZpc19ib3QYAiABKAgSDAoEYm9keRgDIAEoCSpkCg5TZWNyZXREZWxpdmVyeRIfChtTRUNSRVRfREVMSVZFUllfVU5TUEVDSUZJRUQQABIYChRTRUNSRVRfREVMSVZFUllfRklMRRABEhcKE1NFQ1JFVF9ERUxJVkVSWV9FTlYQAipwCgpTZWNyZXRLaW5kEhsKF1NFQ1JFVF9LSU5EX1VOU1BFQ0lGSUVEEAASFwoTU0VDUkVUX0tJTkRfR0VORVJJQxABEhgKFFNFQ1JFVF9LSU5EX1BST1ZJREVSEAISEgoOU0VDUkVUX0tJTkRfR0gQAypbCgtTZWNyZXRTY29wZRIcChhTRUNSRVRfU0NPUEVfVU5TUEVDSUZJRUQQABIVChFTRUNSRVRfU0NPUEVfVVNFUhABEhcKE1NFQ1JFVF9TQ09QRV9URU5BTlQQAipDCgtTZXJ2ZXJTdGF0ZRIcChhTRVJWRVJfU1RBVEVfVU5TUEVDSUZJRUQQABIWChJTRVJWRVJfU1RBVEVfUkVBRFkQASqXAQoLUnVudGltZVRpZXISHAoYUlVOVElNRV9USUVSX1VOU1BFQ0lGSUVEEAASFwoTUlVOVElNRV9USUVSX1BPRE1BThABEhgKFFJVTlRJTUVfVElFUl9NSUNST1ZNEAISIAocUlVOVElNRV9USUVSX0FQUExFX0NPTlRBSU5FUhADEhUKEVJVTlRJTUVfVElFUl9IT1NUEAQqaAoNRWdyZXNzUG9zdHVyZRIeChpFR1JFU1NfUE9TVFVSRV9VTlNQRUNJRklFRBAAEhgKFEVHUkVTU19QT1NUVVJFX0FSTUVEEAESHQoZRUdSRVNTX1BPU1RVUkVfVU5FTkZPUkNFRBACKoICChFBZ2VudFNlc3Npb25TdGF0ZRIjCh9BR0VOVF9TRVNTSU9OX1NUQVRFX1VOU1BFQ0lGSUVEEAASIAocQUdFTlRfU0VTU0lPTl9TVEFURV9TVEFSVElORxABEh0KGUFHRU5UX1NFU1NJT05fU1RBVEVfUkVBRFkQAhIfChtBR0VOVF9TRVNTSU9OX1NUQVRFX1dPUktJTkcQAxIfChtBR0VOVF9TRVNTSU9OX1NUQVRFX1NUT1BQRUQQBBIfChtBR0VOVF9TRVNTSU9OX1NUQVRFX0VSUk9SRUQQBRIkCiBBR0VOVF9TRVNTSU9OX1NUQVRFX0RJU0NPTk5FQ1RFRBAGKtIBChNBZ2VudFRvb2xDYWxsU3RhdHVzEiYKIkFHRU5UX1RPT0xfQ0FMTF9TVEFUVVNfVU5TUEVDSUZJRUQQABIiCh5BR0VOVF9UT09MX0NBTExfU1RBVFVTX1BFTkRJTkcQARImCiJBR0VOVF9UT09MX0NBTExfU1RBVFVTX0lOX1BST0dSRVNTEAISJAogQUdFTlRfVE9PTF9DQUxMX1NUQVRVU19DT01QTEVURUQQAxIhCh1BR0VOVF9UT09MX0NBTExfU1RBVFVTX0ZBSUxFRBAEKrQBChRBZ2VudFBsYW5FbnRyeVN0YXR1cxInCiNBR0VOVF9QTEFOX0VOVFJZX1NUQVRVU19VTlNQRUNJRklFRBAAEiMKH0FHRU5UX1BMQU5fRU5UUllfU1RBVFVTX1BFTkRJTkcQARInCiNBR0VOVF9QTEFOX0VOVFJZX1NUQVRVU19JTl9QUk9HUkVTUxACEiUKIUFHRU5UX1BMQU5fRU5UUllfU1RBVFVTX0NPTVBMRVRFRBADKoQBChRTZXNzaW9uSW5qZWN0aW9uS2luZBImCiJTRVNTSU9OX0lOSkVDVElPTl9LSU5EX1VOU1BFQ0lGSUVEEAASIAocU0VTU0lPTl9JTkpFQ1RJT05fS0lORF9TVEVFUhABEiIKHlNFU1NJT05fSU5KRUNUSU9OX0tJTkRfREVMSVZFUhACKnQKEFNlc3Npb25FcnJvcktpbmQSIgoeU0VTU0lPTl9FUlJPUl9LSU5EX1VOU1BFQ0lGSUVEEAASHAoYU0VTU0lPTl9FUlJPUl9LSU5EX0VSUk9SEAESHgoaU0VTU0lPTl9FUlJPUl9LSU5EX0FCT1JURUQQAirxAQoKSXNzdWVTdGF0ZRIbChdJU1NVRV9TVEFURV9VTlNQRUNJRklFRBAAEhcKE0lTU1VFX1NUQVRFX0JBQ0tMT0cQARIUChBJU1NVRV9TVEFURV9UT0RPEAISFgoSSVNTVUVfU1RBVEVfUVVFVUVEEAMSFwoTSVNTVUVfU1RBVEVfQkxPQ0tFRBAEEhsKF0lTU1VFX1NUQVRFX0lOX1BST0dSRVNTEAUSGQoVSVNTVUVfU1RBVEVfSU5fUkVWSUVXEAYSFAoQSVNTVUVfU1RBVEVfRE9ORRAHEhgKFElTU1VFX1NUQVRFX0FSQ0hJVkVEEAgqnAEKDUZvcmdlUHJvdmlkZXISHgoaRk9SR0VfUFJPVklERVJfVU5TUEVDSUZJRUQQABIZChVGT1JHRV9QUk9WSURFUl9HSVRIVUIQARIZChVGT1JHRV9QUk9WSURFUl9HSVRMQUIQAhIaChZGT1JHRV9QUk9WSURFUl9GT1JHRUpPEAMSGQoVRk9SR0VfUFJPVklERVJfTElORUFSEAQy0w4KDkNvbXBhc3NTZXJ2aWNlElQKDUdldFNlcnZlckluZm8SIC5jb21wYXNzLnYxLkdldFNlcnZlckluZm9SZXF1ZXN0GiEuY29tcGFzcy52MS5HZXRTZXJ2ZXJJbmZvUmVzcG9uc2USPwoGV2hvQW1JEhkuY29tcGFzcy52MS5XaG9BbUlSZXF1ZXN0GhouY29tcGFzcy52MS5XaG9BbUlSZXNwb25zZRJcCg9TdWJzY3JpYmVFdmVudHMSIi5jb21wYXNzLnYxLlN1YnNjcmliZUV2ZW50c1JlcXVlc3QaIy5jb21wYXNzLnYxLlN1YnNjcmliZUV2ZW50c1Jlc3BvbnNlMAESWgoPTGlzdEJvYXJkSXNzdWVzEiIuY29tcGFzcy52MS5MaXN0Qm9hcmRJc3N1ZXNSZXF1ZXN0GiMuY29tcGFzcy52MS5MaXN0Qm9hcmRJc3N1ZXNSZXNwb25zZRJyChdQcm92aXNpb25BZ2VudFdvcmtzcGFjZRIqLmNvbXBhc3MudjEuUHJvdmlzaW9uQWdlbnRXb3Jrc3BhY2VSZXF1ZXN0GisuY29tcGFzcy52MS5Qcm92aXNpb25BZ2VudFdvcmtzcGFjZVJlc3BvbnNlEmAKEVN0YXJ0QWdlbnRTZXNzaW9uEiQuY29tcGFzcy52MS5TdGFydEFnZW50U2Vzc2lvblJlcXVlc3QaJS5jb21wYXNzLnYxLlN0YXJ0QWdlbnRTZXNzaW9uUmVzcG9uc2USSwoKU3Bhd25BZ2VudBIdLmNvbXBhc3MudjEuU3Bhd25BZ2VudFJlcXVlc3QaHi5jb21wYXNzLnYxLlNwYXduQWdlbnRSZXNwb25zZRJdChBTdG9wQWdlbnRTZXNzaW9uEiMuY29tcGFzcy52MS5TdG9wQWdlbnRTZXNzaW9uUmVxdWVzdBokLmNvbXBhc3MudjEuU3RvcEFnZW50U2Vzc2lvblJlc3BvbnNlEmkKFFJlbW92ZUFnZW50V29ya3NwYWNlEicuY29tcGFzcy52MS5SZW1vdmVBZ2VudFdvcmtzcGFjZVJlcXVlc3QaKC5jb21wYXNzLnYxLlJlbW92ZUFnZW50V29ya3NwYWNlUmVzcG9uc2USYwoSUmVsb2FkQWdlbnRTZXNzaW9uEiUuY29tcGFzcy52MS5SZWxvYWRBZ2VudFNlc3Npb25SZXF1ZXN0GiYuY29tcGFzcy52MS5SZWxvYWRBZ2VudFNlc3Npb25SZXNwb25zZRJXCg5HZXRBZ2VudFN0YXR1cxIhLmNvbXBhc3MudjEuR2V0QWdlbnRTdGF0dXNSZXF1ZXN0GiIuY29tcGFzcy52MS5HZXRBZ2VudFN0YXR1c1Jlc3BvbnNlEmIKFVN1YnNjcmliZUFnZW50U2Vzc2lvbhIoLmNvbXBhc3MudjEuU3Vic2NyaWJlQWdlbnRTZXNzaW9uUmVxdWVzdBodLmNvbXBhc3MudjEuQWdlbnRTZXNzaW9uRnJhbWUwARJLCgpJc3N1ZVRva2VuEh0uY29tcGFzcy52MS5Jc3N1ZVRva2VuUmVxdWVzdBoeLmNvbXBhc3MudjEuSXNzdWVUb2tlblJlc3BvbnNlEk4KC1Jldm9rZVRva2VuEh4uY29tcGFzcy52MS5SZXZva2VUb2tlblJlcXVlc3QaHy5jb21wYXNzLnYxLlJldm9rZVRva2VuUmVzcG9uc2USVwoOUHV0QWdlbnRDb25maWcSIS5jb21wYXNzLnYxLlB1dEFnZW50Q29uZmlnUmVxdWVzdBoiLmNvbXBhc3MudjEuUHV0QWdlbnRDb25maWdSZXNwb25zZRJjChJHZXRBZ2VudENvbmZpZ0luZm8SJS5jb21wYXNzLnYxLkdldEFnZW50Q29uZmlnSW5mb1JlcXVlc3QaJi5jb21wYXNzLnYxLkdldEFnZW50Q29uZmlnSW5mb1Jlc3BvbnNlEmAKEURlbGV0ZUFnZW50Q29uZmlnEiQuY29tcGFzcy52MS5EZWxldGVBZ2VudENvbmZpZ1JlcXVlc3QaJS5jb21wYXNzLnYxLkRlbGV0ZUFnZW50Q29uZmlnUmVzcG9uc2USXQoQUHV0TW9kZWxSZWdpc3RyeRIjLmNvbXBhc3MudjEuUHV0TW9kZWxSZWdpc3RyeVJlcXVlc3QaJC5jb21wYXNzLnYxLlB1dE1vZGVsUmVnaXN0cnlSZXNwb25zZRJdChBHZXRNb2RlbFJlZ2lzdHJ5EiMuY29tcGFzcy52MS5HZXRNb2RlbFJlZ2lzdHJ5UmVxdWVzdBokLmNvbXBhc3MudjEuR2V0TW9kZWxSZWdpc3RyeVJlc3BvbnNlEmYKE0RlbGV0ZU1vZGVsUmVnaXN0cnkSJi5jb21wYXNzLnYxLkRlbGV0ZU1vZGVsUmVnaXN0cnlSZXF1ZXN0GicuY29tcGFzcy52MS5EZWxldGVNb2RlbFJlZ2lzdHJ5UmVzcG9uc2Uy3wIKDlNlY3JldHNTZXJ2aWNlEkgKCVNldFNlY3JldBIcLmNvbXBhc3MudjEuU2V0U2VjcmV0UmVxdWVzdBodLmNvbXBhc3MudjEuU2V0U2VjcmV0UmVzcG9uc2USTgoLTGlzdFNlY3JldHMSHi5jb21wYXNzLnYxLkxpc3RTZWNyZXRzUmVxdWVzdBofLmNvbXBhc3MudjEuTGlzdFNlY3JldHNSZXNwb25zZRJRCgxEZWxldGVTZWNyZXQSHy5jb21wYXNzLnYxLkRlbGV0ZVNlY3JldFJlcXVlc3QaIC5jb21wYXNzLnYxLkRlbGV0ZVNlY3JldFJlc3BvbnNlEmAKEUxpc3RTZXJ2ZXJTZWNyZXRzEiQuY29tcGFzcy52MS5MaXN0U2VydmVyU2VjcmV0c1JlcXVlc3QaJS5jb21wYXNzLnYxLkxpc3RTZXJ2ZXJTZWNyZXRzUmVzcG9uc2ViBnByb3RvMw", [file_google_protobuf_timestamp]); /** * @generated from message compass.v1.SetSecretRequest @@ -199,71 +199,6 @@ export type DeleteSecretResponse = Message<"compass.v1.DeleteSecretResponse"> & export const DeleteSecretResponseSchema: GenMessage = /*@__PURE__*/ messageDesc(file_compass_v1_compass, 6); -/** - * @generated from message compass.v1.SetServerSecretRequest - */ -export type SetServerSecretRequest = Message<"compass.v1.SetServerSecretRequest"> & { - /** - * @generated from field: string name = 1; - */ - name: string; - - /** - * @generated from field: string value = 2; - */ - value: string; -}; - -/** - * Describes the message compass.v1.SetServerSecretRequest. - * Use `create(SetServerSecretRequestSchema)` to create a new message. - */ -export const SetServerSecretRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 7); - -/** - * @generated from message compass.v1.SetServerSecretResponse - */ -export type SetServerSecretResponse = Message<"compass.v1.SetServerSecretResponse"> & { -}; - -/** - * Describes the message compass.v1.SetServerSecretResponse. - * Use `create(SetServerSecretResponseSchema)` to create a new message. - */ -export const SetServerSecretResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 8); - -/** - * @generated from message compass.v1.DeleteServerSecretRequest - */ -export type DeleteServerSecretRequest = Message<"compass.v1.DeleteServerSecretRequest"> & { - /** - * @generated from field: string name = 1; - */ - name: string; -}; - -/** - * Describes the message compass.v1.DeleteServerSecretRequest. - * Use `create(DeleteServerSecretRequestSchema)` to create a new message. - */ -export const DeleteServerSecretRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 9); - -/** - * @generated from message compass.v1.DeleteServerSecretResponse - */ -export type DeleteServerSecretResponse = Message<"compass.v1.DeleteServerSecretResponse"> & { -}; - -/** - * Describes the message compass.v1.DeleteServerSecretResponse. - * Use `create(DeleteServerSecretResponseSchema)` to create a new message. - */ -export const DeleteServerSecretResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 10); - /** * @generated from message compass.v1.ListServerSecretsRequest */ @@ -275,7 +210,7 @@ export type ListServerSecretsRequest = Message<"compass.v1.ListServerSecretsRequ * Use `create(ListServerSecretsRequestSchema)` to create a new message. */ export const ListServerSecretsRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 11); + messageDesc(file_compass_v1_compass, 7); /** * @generated from message compass.v1.ListServerSecretsResponse @@ -292,7 +227,7 @@ export type ListServerSecretsResponse = Message<"compass.v1.ListServerSecretsRes * Use `create(ListServerSecretsResponseSchema)` to create a new message. */ export const ListServerSecretsResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 12); + messageDesc(file_compass_v1_compass, 8); /** * A declared server secret's status — the name plus set/unset ONLY, and NEVER @@ -320,7 +255,7 @@ export type ServerSecretStatus = Message<"compass.v1.ServerSecretStatus"> & { * Use `create(ServerSecretStatusSchema)` to create a new message. */ export const ServerSecretStatusSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 13); + messageDesc(file_compass_v1_compass, 9); /** * @generated from message compass.v1.GetServerInfoRequest @@ -333,7 +268,7 @@ export type GetServerInfoRequest = Message<"compass.v1.GetServerInfoRequest"> & * Use `create(GetServerInfoRequestSchema)` to create a new message. */ export const GetServerInfoRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 14); + messageDesc(file_compass_v1_compass, 10); /** * @generated from message compass.v1.GetServerInfoResponse @@ -359,7 +294,7 @@ export type GetServerInfoResponse = Message<"compass.v1.GetServerInfoResponse"> * Use `create(GetServerInfoResponseSchema)` to create a new message. */ export const GetServerInfoResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 15); + messageDesc(file_compass_v1_compass, 11); /** * @generated from message compass.v1.WhoAmIRequest @@ -372,7 +307,7 @@ export type WhoAmIRequest = Message<"compass.v1.WhoAmIRequest"> & { * Use `create(WhoAmIRequestSchema)` to create a new message. */ export const WhoAmIRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 16); + messageDesc(file_compass_v1_compass, 12); /** * @generated from message compass.v1.WhoAmIResponse @@ -392,7 +327,7 @@ export type WhoAmIResponse = Message<"compass.v1.WhoAmIResponse"> & { * Use `create(WhoAmIResponseSchema)` to create a new message. */ export const WhoAmIResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 17); + messageDesc(file_compass_v1_compass, 13); /** * Subscribe to the server event stream. @@ -426,7 +361,7 @@ export type SubscribeEventsRequest = Message<"compass.v1.SubscribeEventsRequest" * Use `create(SubscribeEventsRequestSchema)` to create a new message. */ export const SubscribeEventsRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 18); + messageDesc(file_compass_v1_compass, 14); /** * One entry in the server event stream. @@ -551,7 +486,7 @@ export type SubscribeEventsResponse = Message<"compass.v1.SubscribeEventsRespons * Use `create(SubscribeEventsResponseSchema)` to create a new message. */ export const SubscribeEventsResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 19); + messageDesc(file_compass_v1_compass, 15); /** * The durable board re-snapshot read request. Single-shot by design: the read @@ -583,7 +518,7 @@ export type ListBoardIssuesRequest = Message<"compass.v1.ListBoardIssuesRequest" * Use `create(ListBoardIssuesRequestSchema)` to create a new message. */ export const ListBoardIssuesRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 20); + messageDesc(file_compass_v1_compass, 16); /** * The board as of the requested snapshot: every Compass Issue for the repo in @@ -605,7 +540,7 @@ export type ListBoardIssuesResponse = Message<"compass.v1.ListBoardIssuesRespons * Use `create(ListBoardIssuesResponseSchema)` to create a new message. */ export const ListBoardIssuesResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 21); + messageDesc(file_compass_v1_compass, 17); /** * The server's liveness state, pushed on connect and whenever it changes. @@ -624,7 +559,7 @@ export type ServerStatus = Message<"compass.v1.ServerStatus"> & { * Use `create(ServerStatusSchema)` to create a new message. */ export const ServerStatusSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 22); + messageDesc(file_compass_v1_compass, 18); /** * The requested `since_seq` predates the server's retained event buffer, so a @@ -642,7 +577,7 @@ export type ResyncRequired = Message<"compass.v1.ResyncRequired"> & { * Use `create(ResyncRequiredSchema)` to create a new message. */ export const ResyncRequiredSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 23); + messageDesc(file_compass_v1_compass, 19); /** * The lifecycle state of one agent session, pushed on every transition. @@ -699,7 +634,7 @@ export type AgentSessionStatus = Message<"compass.v1.AgentSessionStatus"> & { * Use `create(AgentSessionStatusSchema)` to create a new message. */ export const AgentSessionStatusSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 24); + messageDesc(file_compass_v1_compass, 20); /** * A chunk of the agent's message stream (assistant text / thought), relayed @@ -734,7 +669,7 @@ export type AgentMessageChunk = Message<"compass.v1.AgentMessageChunk"> & { * Use `create(AgentMessageChunkSchema)` to create a new message. */ export const AgentMessageChunkSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 25); + messageDesc(file_compass_v1_compass, 21); /** * A tool call the agent started or updated, relayed from the Runner's agent @@ -775,7 +710,7 @@ export type AgentToolCall = Message<"compass.v1.AgentToolCall"> & { * Use `create(AgentToolCallSchema)` to create a new message. */ export const AgentToolCallSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 26); + messageDesc(file_compass_v1_compass, 22); /** * The agent's current execution plan, relayed from the Runner's agent event @@ -800,7 +735,7 @@ export type AgentPlan = Message<"compass.v1.AgentPlan"> & { * Use `create(AgentPlanSchema)` to create a new message. */ export const AgentPlanSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 27); + messageDesc(file_compass_v1_compass, 23); /** * One step in an agent plan. @@ -824,7 +759,7 @@ export type AgentPlanEntry = Message<"compass.v1.AgentPlanEntry"> & { * Use `create(AgentPlanEntrySchema)` to create a new message. */ export const AgentPlanEntrySchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 28); + messageDesc(file_compass_v1_compass, 24); /** * The typed observation-trace event — the render contract for the UI's session @@ -912,7 +847,7 @@ export type SessionEvent = Message<"compass.v1.SessionEvent"> & { * Use `create(SessionEventSchema)` to create a new message. */ export const SessionEventSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 29); + messageDesc(file_compass_v1_compass, 25); /** * A chunk of the agent's user-facing message stream. message_id correlates the @@ -939,7 +874,7 @@ export type SessionAssistantText = Message<"compass.v1.SessionAssistantText"> & * Use `create(SessionAssistantTextSchema)` to create a new message. */ export const SessionAssistantTextSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 30); + messageDesc(file_compass_v1_compass, 26); /** * A chunk of the agent's internal-reasoning (thought) stream, correlated by @@ -964,7 +899,7 @@ export type SessionThinking = Message<"compass.v1.SessionThinking"> & { * Use `create(SessionThinkingSchema)` to create a new message. */ export const SessionThinkingSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 31); + messageDesc(file_compass_v1_compass, 27); /** * A tool call the agent started. Reuses AgentToolCallStatus rather than minting @@ -994,7 +929,7 @@ export type SessionToolCall = Message<"compass.v1.SessionToolCall"> & { * Use `create(SessionToolCallSchema)` to create a new message. */ export const SessionToolCallSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 32); + messageDesc(file_compass_v1_compass, 28); /** * An update to a running or finished tool call: its new status, any accumulated @@ -1030,7 +965,7 @@ export type SessionToolCallUpdate = Message<"compass.v1.SessionToolCallUpdate"> * Use `create(SessionToolCallUpdateSchema)` to create a new message. */ export const SessionToolCallUpdateSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 33); + messageDesc(file_compass_v1_compass, 29); /** * One file edit within a tool-call update. old_text absent = a file creation. @@ -1059,7 +994,7 @@ export type SessionFileDiff = Message<"compass.v1.SessionFileDiff"> & { * Use `create(SessionFileDiffSchema)` to create a new message. */ export const SessionFileDiffSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 34); + messageDesc(file_compass_v1_compass, 30); /** * The agent's current execution plan. Reuses AgentPlanEntry. @@ -1078,7 +1013,7 @@ export type SessionPlan = Message<"compass.v1.SessionPlan"> & { * Use `create(SessionPlanSchema)` to create a new message. */ export const SessionPlanSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 35); + messageDesc(file_compass_v1_compass, 31); /** * A free-standing notice in the trace (a status line or advisory), with an @@ -1103,7 +1038,7 @@ export type SessionNotice = Message<"compass.v1.SessionNotice"> & { * Use `create(SessionNoticeSchema)` to create a new message. */ export const SessionNoticeSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 36); + messageDesc(file_compass_v1_compass, 32); /** * A control injection into the agent's live session: the moment a channel @@ -1160,7 +1095,7 @@ export type SessionInjection = Message<"compass.v1.SessionInjection"> & { * Use `create(SessionInjectionSchema)` to create a new message. */ export const SessionInjectionSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 37); + messageDesc(file_compass_v1_compass, 33); /** * A turn-ending failure surfaced as session-trace content: an inner/provider @@ -1193,7 +1128,7 @@ export type SessionError = Message<"compass.v1.SessionError"> & { * Use `create(SessionErrorSchema)` to create a new message. */ export const SessionErrorSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 38); + messageDesc(file_compass_v1_compass, 34); /** * SubscribeAgentSession: the session whose typed observation trace to tail. @@ -1212,7 +1147,7 @@ export type SubscribeAgentSessionRequest = Message<"compass.v1.SubscribeAgentSes * Use `create(SubscribeAgentSessionRequestSchema)` to create a new message. */ export const SubscribeAgentSessionRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 39); + messageDesc(file_compass_v1_compass, 35); /** * One frame on the SubscribeAgentSession stream: a typed trace event, a @@ -1243,7 +1178,7 @@ export type AgentSessionFrame = Message<"compass.v1.AgentSessionFrame"> & { * Use `create(AgentSessionFrameSchema)` to create a new message. */ export const AgentSessionFrameSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 40); + messageDesc(file_compass_v1_compass, 36); /** * ProvisionAgentWorkspace: create the isolated per-agent container for a @@ -1322,7 +1257,7 @@ export type ProvisionAgentWorkspaceRequest = Message<"compass.v1.ProvisionAgentW * Use `create(ProvisionAgentWorkspaceRequestSchema)` to create a new message. */ export const ProvisionAgentWorkspaceRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 41); + messageDesc(file_compass_v1_compass, 37); /** * @generated from message compass.v1.ProvisionAgentWorkspaceResponse @@ -1342,7 +1277,7 @@ export type ProvisionAgentWorkspaceResponse = Message<"compass.v1.ProvisionAgent * Use `create(ProvisionAgentWorkspaceResponseSchema)` to create a new message. */ export const ProvisionAgentWorkspaceResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 42); + messageDesc(file_compass_v1_compass, 38); /** * RemoveAgentWorkspace: tear down the per-agent container and release its @@ -1374,7 +1309,7 @@ export type RemoveAgentWorkspaceRequest = Message<"compass.v1.RemoveAgentWorkspa * Use `create(RemoveAgentWorkspaceRequestSchema)` to create a new message. */ export const RemoveAgentWorkspaceRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 43); + messageDesc(file_compass_v1_compass, 39); /** * @generated from message compass.v1.RemoveAgentWorkspaceResponse @@ -1387,7 +1322,7 @@ export type RemoveAgentWorkspaceResponse = Message<"compass.v1.RemoveAgentWorksp * Use `create(RemoveAgentWorkspaceResponseSchema)` to create a new message. */ export const RemoveAgentWorkspaceResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 44); + messageDesc(file_compass_v1_compass, 40); /** * StartAgentSession: bring the first-party agent in a provisioned container @@ -1420,7 +1355,7 @@ export type StartAgentSessionRequest = Message<"compass.v1.StartAgentSessionRequ * Use `create(StartAgentSessionRequestSchema)` to create a new message. */ export const StartAgentSessionRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 45); + messageDesc(file_compass_v1_compass, 41); /** * @generated from message compass.v1.StartAgentSessionResponse @@ -1440,7 +1375,7 @@ export type StartAgentSessionResponse = Message<"compass.v1.StartAgentSessionRes * Use `create(StartAgentSessionResponseSchema)` to create a new message. */ export const StartAgentSessionResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 46); + messageDesc(file_compass_v1_compass, 42); /** * SpawnAgent: the composite start — Provision then Start under one @@ -1476,7 +1411,7 @@ export type SpawnAgentRequest = Message<"compass.v1.SpawnAgentRequest"> & { * Use `create(SpawnAgentRequestSchema)` to create a new message. */ export const SpawnAgentRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 47); + messageDesc(file_compass_v1_compass, 43); /** * @generated from message compass.v1.SpawnAgentResponse @@ -1505,7 +1440,7 @@ export type SpawnAgentResponse = Message<"compass.v1.SpawnAgentResponse"> & { * Use `create(SpawnAgentResponseSchema)` to create a new message. */ export const SpawnAgentResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 48); + messageDesc(file_compass_v1_compass, 44); /** * @generated from message compass.v1.StopAgentSessionRequest @@ -1522,7 +1457,7 @@ export type StopAgentSessionRequest = Message<"compass.v1.StopAgentSessionReques * Use `create(StopAgentSessionRequestSchema)` to create a new message. */ export const StopAgentSessionRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 49); + messageDesc(file_compass_v1_compass, 45); /** * @generated from message compass.v1.StopAgentSessionResponse @@ -1535,7 +1470,7 @@ export type StopAgentSessionResponse = Message<"compass.v1.StopAgentSessionRespo * Use `create(StopAgentSessionResponseSchema)` to create a new message. */ export const StopAgentSessionResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 50); + messageDesc(file_compass_v1_compass, 46); /** * @generated from message compass.v1.ReloadAgentSessionRequest @@ -1552,7 +1487,7 @@ export type ReloadAgentSessionRequest = Message<"compass.v1.ReloadAgentSessionRe * Use `create(ReloadAgentSessionRequestSchema)` to create a new message. */ export const ReloadAgentSessionRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 51); + messageDesc(file_compass_v1_compass, 47); /** * @generated from message compass.v1.ReloadAgentSessionResponse @@ -1571,7 +1506,7 @@ export type ReloadAgentSessionResponse = Message<"compass.v1.ReloadAgentSessionR * Use `create(ReloadAgentSessionResponseSchema)` to create a new message. */ export const ReloadAgentSessionResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 52); + messageDesc(file_compass_v1_compass, 48); /** * GetAgentStatus: one session when `session_id` is set, else every live one. @@ -1592,7 +1527,7 @@ export type GetAgentStatusRequest = Message<"compass.v1.GetAgentStatusRequest"> * Use `create(GetAgentStatusRequestSchema)` to create a new message. */ export const GetAgentStatusRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 53); + messageDesc(file_compass_v1_compass, 49); /** * @generated from message compass.v1.GetAgentStatusResponse @@ -1609,7 +1544,7 @@ export type GetAgentStatusResponse = Message<"compass.v1.GetAgentStatusResponse" * Use `create(GetAgentStatusResponseSchema)` to create a new message. */ export const GetAgentStatusResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 54); + messageDesc(file_compass_v1_compass, 50); /** * IssueToken: the admin-only path to mint a bearer token for an account. @@ -1632,7 +1567,7 @@ export type IssueTokenRequest = Message<"compass.v1.IssueTokenRequest"> & { * Use `create(IssueTokenRequestSchema)` to create a new message. */ export const IssueTokenRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 55); + messageDesc(file_compass_v1_compass, 51); /** * @generated from message compass.v1.IssueTokenResponse @@ -1653,7 +1588,7 @@ export type IssueTokenResponse = Message<"compass.v1.IssueTokenResponse"> & { * Use `create(IssueTokenResponseSchema)` to create a new message. */ export const IssueTokenResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 56); + messageDesc(file_compass_v1_compass, 52); /** * RevokeToken: the admin-only path to withdraw a bearer token by its value. @@ -1677,7 +1612,7 @@ export type RevokeTokenRequest = Message<"compass.v1.RevokeTokenRequest"> & { * Use `create(RevokeTokenRequestSchema)` to create a new message. */ export const RevokeTokenRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 57); + messageDesc(file_compass_v1_compass, 53); /** * @generated from message compass.v1.RevokeTokenResponse @@ -1690,7 +1625,7 @@ export type RevokeTokenResponse = Message<"compass.v1.RevokeTokenResponse"> & { * Use `create(RevokeTokenResponseSchema)` to create a new message. */ export const RevokeTokenResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 58); + messageDesc(file_compass_v1_compass, 54); /** * PutAgentConfig: declare the fleet config bundle. The caller's identity is the @@ -1713,7 +1648,7 @@ export type PutAgentConfigRequest = Message<"compass.v1.PutAgentConfigRequest"> * Use `create(PutAgentConfigRequestSchema)` to create a new message. */ export const PutAgentConfigRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 59); + messageDesc(file_compass_v1_compass, 55); /** * @generated from message compass.v1.PutAgentConfigResponse @@ -1734,7 +1669,7 @@ export type PutAgentConfigResponse = Message<"compass.v1.PutAgentConfigResponse" * Use `create(PutAgentConfigResponseSchema)` to create a new message. */ export const PutAgentConfigResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 60); + messageDesc(file_compass_v1_compass, 56); /** * @generated from message compass.v1.GetAgentConfigInfoRequest @@ -1747,7 +1682,7 @@ export type GetAgentConfigInfoRequest = Message<"compass.v1.GetAgentConfigInfoRe * Use `create(GetAgentConfigInfoRequestSchema)` to create a new message. */ export const GetAgentConfigInfoRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 61); + messageDesc(file_compass_v1_compass, 57); /** * GetAgentConfigInfo: the current bundle's version and member names by top dir — @@ -1834,7 +1769,7 @@ export type GetAgentConfigInfoResponse = Message<"compass.v1.GetAgentConfigInfoR * Use `create(GetAgentConfigInfoResponseSchema)` to create a new message. */ export const GetAgentConfigInfoResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 62); + messageDesc(file_compass_v1_compass, 58); /** * @generated from message compass.v1.DeleteAgentConfigRequest @@ -1847,7 +1782,7 @@ export type DeleteAgentConfigRequest = Message<"compass.v1.DeleteAgentConfigRequ * Use `create(DeleteAgentConfigRequestSchema)` to create a new message. */ export const DeleteAgentConfigRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 63); + messageDesc(file_compass_v1_compass, 59); /** * @generated from message compass.v1.DeleteAgentConfigResponse @@ -1860,7 +1795,7 @@ export type DeleteAgentConfigResponse = Message<"compass.v1.DeleteAgentConfigRes * Use `create(DeleteAgentConfigResponseSchema)` to create a new message. */ export const DeleteAgentConfigResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 64); + messageDesc(file_compass_v1_compass, 60); /** * One candidate in a stable name's ordered chain: an upstream (provider, @@ -1888,7 +1823,7 @@ export type ModelCandidate = Message<"compass.v1.ModelCandidate"> & { * Use `create(ModelCandidateSchema)` to create a new message. */ export const ModelCandidateSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 65); + messageDesc(file_compass_v1_compass, 61); /** * The listing metadata a stable name carries, taken from its primary candidate @@ -1932,7 +1867,7 @@ export type ModelMetadata = Message<"compass.v1.ModelMetadata"> & { * Use `create(ModelMetadataSchema)` to create a new message. */ export const ModelMetadataSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 66); + messageDesc(file_compass_v1_compass, 62); /** * One stable name's registry entry: a human display name, the ordered candidate @@ -1962,7 +1897,7 @@ export type ModelRegistryEntry = Message<"compass.v1.ModelRegistryEntry"> & { * Use `create(ModelRegistryEntrySchema)` to create a new message. */ export const ModelRegistryEntrySchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 67); + messageDesc(file_compass_v1_compass, 63); /** * The fleet model registry payload: the stable-name → entry map. The map key is @@ -1982,7 +1917,7 @@ export type ModelRegistry = Message<"compass.v1.ModelRegistry"> & { * Use `create(ModelRegistrySchema)` to create a new message. */ export const ModelRegistrySchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 68); + messageDesc(file_compass_v1_compass, 64); /** * PutModelRegistry: declare the fleet model registry. The caller's identity is @@ -2013,7 +1948,7 @@ export type PutModelRegistryRequest = Message<"compass.v1.PutModelRegistryReques * Use `create(PutModelRegistryRequestSchema)` to create a new message. */ export const PutModelRegistryRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 69); + messageDesc(file_compass_v1_compass, 65); /** * @generated from message compass.v1.PutModelRegistryResponse @@ -2032,7 +1967,7 @@ export type PutModelRegistryResponse = Message<"compass.v1.PutModelRegistryRespo * Use `create(PutModelRegistryResponseSchema)` to create a new message. */ export const PutModelRegistryResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 70); + messageDesc(file_compass_v1_compass, 66); /** * @generated from message compass.v1.GetModelRegistryRequest @@ -2045,7 +1980,7 @@ export type GetModelRegistryRequest = Message<"compass.v1.GetModelRegistryReques * Use `create(GetModelRegistryRequestSchema)` to create a new message. */ export const GetModelRegistryRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 71); + messageDesc(file_compass_v1_compass, 67); /** * GetModelRegistry: the current registry version and payload. An unconfigured @@ -2070,7 +2005,7 @@ export type GetModelRegistryResponse = Message<"compass.v1.GetModelRegistryRespo * Use `create(GetModelRegistryResponseSchema)` to create a new message. */ export const GetModelRegistryResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 72); + messageDesc(file_compass_v1_compass, 68); /** * @generated from message compass.v1.DeleteModelRegistryRequest @@ -2083,7 +2018,7 @@ export type DeleteModelRegistryRequest = Message<"compass.v1.DeleteModelRegistry * Use `create(DeleteModelRegistryRequestSchema)` to create a new message. */ export const DeleteModelRegistryRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 73); + messageDesc(file_compass_v1_compass, 69); /** * @generated from message compass.v1.DeleteModelRegistryResponse @@ -2096,7 +2031,7 @@ export type DeleteModelRegistryResponse = Message<"compass.v1.DeleteModelRegistr * Use `create(DeleteModelRegistryResponseSchema)` to create a new message. */ export const DeleteModelRegistryResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 74); + messageDesc(file_compass_v1_compass, 70); /** * The Compass agent attribution parsed from the owner header at ingestion — a @@ -2129,7 +2064,7 @@ export type AgentAttribution = Message<"compass.v1.AgentAttribution"> & { * Use `create(AgentAttributionSchema)` to create a new message. */ export const AgentAttributionSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 75); + messageDesc(file_compass_v1_compass, 71); /** * @generated from message compass.v1.ForgeRef @@ -2153,7 +2088,7 @@ export type ForgeRef = Message<"compass.v1.ForgeRef"> & { * Use `create(ForgeRefSchema)` to create a new message. */ export const ForgeRefSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 76); + messageDesc(file_compass_v1_compass, 72); /** * The board unit: a Compass Issue — the forge issue's fields PLUS the Compass @@ -2311,7 +2246,7 @@ export type Issue = Message<"compass.v1.Issue"> & { * Use `create(IssueSchema)` to create a new message. */ export const IssueSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 77); + messageDesc(file_compass_v1_compass, 73); /** * A Compass pull request: the forge PR's fields plus the Compass agent @@ -2418,7 +2353,7 @@ export type PullRequest = Message<"compass.v1.PullRequest"> & { * Use `create(PullRequestSchema)` to create a new message. */ export const PullRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 78); + messageDesc(file_compass_v1_compass, 74); /** * The rolled-up CI + status-check state on a PR head — Compass-owned, populated @@ -2450,7 +2385,7 @@ export type ChecksSummary = Message<"compass.v1.ChecksSummary"> & { * Use `create(ChecksSummarySchema)` to create a new message. */ export const ChecksSummarySchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 79); + messageDesc(file_compass_v1_compass, 75); /** * @generated from message compass.v1.Check @@ -2484,7 +2419,7 @@ export type Check = Message<"compass.v1.Check"> & { * Use `create(CheckSchema)` to create a new message. */ export const CheckSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 80); + messageDesc(file_compass_v1_compass, 76); /** * A PR diffstat (files/additions/deletions), carried on PullRequest — a @@ -2514,7 +2449,7 @@ export type ChangedStats = Message<"compass.v1.ChangedStats"> & { * Use `create(ChangedStatsSchema)` to create a new message. */ export const ChangedStatsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 81); + messageDesc(file_compass_v1_compass, 77); /** * The linked tracker issue — the projection target (DL-032); the @@ -2555,7 +2490,7 @@ export type TrackerRef = Message<"compass.v1.TrackerRef"> & { * Use `create(TrackerRefSchema)` to create a new message. */ export const TrackerRefSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 82); + messageDesc(file_compass_v1_compass, 78); /** * The full review state the right-sidebar PR pane shows — every submitted review @@ -2602,7 +2537,7 @@ export type Review = Message<"compass.v1.Review"> & { * Use `create(ReviewSchema)` to create a new message. */ export const ReviewSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 83); + messageDesc(file_compass_v1_compass, 79); /** * @generated from message compass.v1.ReviewThread @@ -2631,7 +2566,7 @@ export type ReviewThread = Message<"compass.v1.ReviewThread"> & { * Use `create(ReviewThreadSchema)` to create a new message. */ export const ReviewThreadSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 84); + messageDesc(file_compass_v1_compass, 80); /** * @generated from message compass.v1.Comment @@ -2658,7 +2593,7 @@ export type Comment = Message<"compass.v1.Comment"> & { * Use `create(CommentSchema)` to create a new message. */ export const CommentSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 85); + messageDesc(file_compass_v1_compass, 81); /** * How a resolved secret is delivered into the agent container. Mirrors @@ -3515,36 +3450,10 @@ export const SecretsService: GenService<{ input: typeof DeleteSecretRequestSchema; output: typeof DeleteSecretResponseSchema; }, - /** - * Declare a SERVER secret's registry row in the separate server_secrets - * registry and write its value via the server resolver. Admin-only. The - * name MUST carry a reserved server-secret prefix (SERVER_ or - * GATEWAY_CREDENTIALS_); an unprefixed name is rejected. `value` is never - * logged. Server secrets are never delivered into an agent container. - * - * @generated from rpc compass.v1.SecretsService.SetServerSecret - */ - setServerSecret: { - methodKind: "unary"; - input: typeof SetServerSecretRequestSchema; - output: typeof SetServerSecretResponseSchema; - }, - /** - * Remove a SERVER secret's registry row + value. Admin-only. The reserved - * master-key name is rejected (rotation is separate machinery, never a raw - * overwrite or delete). - * - * @generated from rpc compass.v1.SecretsService.DeleteServerSecret - */ - deleteServerSecret: { - methodKind: "unary"; - input: typeof DeleteServerSecretRequestSchema; - output: typeof DeleteServerSecretResponseSchema; - }, /** * List declared SERVER secrets by name with set/unset — names only, NEVER - * values. Admin-only, like its server-secret siblings: the rows are - * deployment-owned, so there is no per-account authorization to fall back on. + * values. Admin-only: the rows are deployment-owned, so there is no + * per-account authorization to fall back on. * Unlike ListSecrets, `is_set` is a PROVIDER PROBE, not a registry read: a * server secret's row is self-declared at every boot while its value lives in * the SecretSpec provider and is populated separately, so a declared name is diff --git a/packages/compass-client/src/gen/compass/v1/compass_pb.ts b/packages/compass-client/src/gen/compass/v1/compass_pb.ts index b0c7bf4d6..b947d6d25 100644 --- a/packages/compass-client/src/gen/compass/v1/compass_pb.ts +++ b/packages/compass-client/src/gen/compass/v1/compass_pb.ts @@ -20,7 +20,7 @@ import type { Message } from "@bufbuild/protobuf"; * Describes the file compass/v1/compass.proto. */ export const file_compass_v1_compass: GenFile = /*@__PURE__*/ - fileDesc("Chhjb21wYXNzL3YxL2NvbXBhc3MucHJvdG8SCmNvbXBhc3MudjEi0AEKEFNldFNlY3JldFJlcXVlc3QSDAoEbmFtZRgBIAEoCRISCgV2YWx1ZRgCIAEoCUIDgAEBEiwKCGRlbGl2ZXJ5GAMgASgOMhouY29tcGFzcy52MS5TZWNyZXREZWxpdmVyeRIkCgRraW5kGAQgASgOMhYuY29tcGFzcy52MS5TZWNyZXRLaW5kEhAKCHByb3ZpZGVyGAUgASgJEgwKBGhvc3QYBiABKAkSJgoFc2NvcGUYByABKA4yFy5jb21wYXNzLnYxLlNlY3JldFNjb3BlIhMKEVNldFNlY3JldFJlc3BvbnNlIhQKEkxpc3RTZWNyZXRzUmVxdWVzdCJAChNMaXN0U2VjcmV0c1Jlc3BvbnNlEikKB3NlY3JldHMYASADKAsyGC5jb21wYXNzLnYxLlNlY3JldFN0YXR1cyKgAQoMU2VjcmV0U3RhdHVzEgwKBG5hbWUYASABKAkSDgoGaXNfc2V0GAIgASgIEiwKCGRlbGl2ZXJ5GAMgASgOMhouY29tcGFzcy52MS5TZWNyZXREZWxpdmVyeRIkCgRraW5kGAQgASgOMhYuY29tcGFzcy52MS5TZWNyZXRLaW5kEhAKCHByb3ZpZGVyGAUgASgJEgwKBGhvc3QYBiABKAkiSwoTRGVsZXRlU2VjcmV0UmVxdWVzdBIMCgRuYW1lGAEgASgJEiYKBXNjb3BlGAIgASgOMhcuY29tcGFzcy52MS5TZWNyZXRTY29wZSIWChREZWxldGVTZWNyZXRSZXNwb25zZSI6ChZTZXRTZXJ2ZXJTZWNyZXRSZXF1ZXN0EgwKBG5hbWUYASABKAkSEgoFdmFsdWUYAiABKAlCA4ABASIZChdTZXRTZXJ2ZXJTZWNyZXRSZXNwb25zZSIpChlEZWxldGVTZXJ2ZXJTZWNyZXRSZXF1ZXN0EgwKBG5hbWUYASABKAkiHAoaRGVsZXRlU2VydmVyU2VjcmV0UmVzcG9uc2UiGgoYTGlzdFNlcnZlclNlY3JldHNSZXF1ZXN0IlMKGUxpc3RTZXJ2ZXJTZWNyZXRzUmVzcG9uc2USNgoOc2VydmVyX3NlY3JldHMYASADKAsyHi5jb21wYXNzLnYxLlNlcnZlclNlY3JldFN0YXR1cyIyChJTZXJ2ZXJTZWNyZXRTdGF0dXMSDAoEbmFtZRgBIAEoCRIOCgZpc19zZXQYAiABKAgiFgoUR2V0U2VydmVySW5mb1JlcXVlc3QiPQoVR2V0U2VydmVySW5mb1Jlc3BvbnNlEg8KB3ZlcnNpb24YASABKAkSEwoLYXBpX3ZlcnNpb24YAiABKAkiDwoNV2hvQW1JUmVxdWVzdCIkCg5XaG9BbUlSZXNwb25zZRISCgphY2NvdW50X2lkGAEgASgJIkMKFlN1YnNjcmliZUV2ZW50c1JlcXVlc3QSEQoJc2luY2Vfc2VxGAEgASgEEhYKDmluc3RhbmNlX2Vwb2NoGAIgASgEIuIDChdTdWJzY3JpYmVFdmVudHNSZXNwb25zZRILCgNzZXEYASABKAQSEgoKYXRfdW5peF9tcxgCIAEoAxIWCg5pbnN0YW5jZV9lcG9jaBgDIAEoBBIUCgxzbmFwc2hvdF9zZXEYBCABKAQSMQoNc2VydmVyX3N0YXR1cxgKIAEoCzIYLmNvbXBhc3MudjEuU2VydmVyU3RhdHVzSAASNQoPcmVzeW5jX3JlcXVpcmVkGAsgASgLMhouY29tcGFzcy52MS5SZXN5bmNSZXF1aXJlZEgAEj4KFGFnZW50X3Nlc3Npb25fc3RhdHVzGAwgASgLMh4uY29tcGFzcy52MS5BZ2VudFNlc3Npb25TdGF0dXNIABI8ChNhZ2VudF9tZXNzYWdlX2NodW5rGA0gASgLMh0uY29tcGFzcy52MS5BZ2VudE1lc3NhZ2VDaHVua0gAEjQKD2FnZW50X3Rvb2xfY2FsbBgOIAEoCzIZLmNvbXBhc3MudjEuQWdlbnRUb29sQ2FsbEgAEisKCmFnZW50X3BsYW4YDyABKAsyFS5jb21wYXNzLnYxLkFnZW50UGxhbkgAEiIKBWlzc3VlGBAgASgLMhEuY29tcGFzcy52MS5Jc3N1ZUgAQgkKB3BheWxvYWQiLgoWTGlzdEJvYXJkSXNzdWVzUmVxdWVzdBIUCgxzbmFwc2hvdF9zZXEYASABKAQiPAoXTGlzdEJvYXJkSXNzdWVzUmVzcG9uc2USIQoGaXNzdWVzGAEgAygLMhEuY29tcGFzcy52MS5Jc3N1ZSI2CgxTZXJ2ZXJTdGF0dXMSJgoFc3RhdGUYASABKA4yFy5jb21wYXNzLnYxLlNlcnZlclN0YXRlIhAKDlJlc3luY1JlcXVpcmVkItIBChJBZ2VudFNlc3Npb25TdGF0dXMSEgoKc2Vzc2lvbl9pZBgBIAEoCRIsCgVzdGF0ZRgCIAEoDjIdLmNvbXBhc3MudjEuQWdlbnRTZXNzaW9uU3RhdGUSGAoQYWdlbnRfYWNjb3VudF9pZBgDIAEoCRItCgxydW50aW1lX3RpZXIYBCABKA4yFy5jb21wYXNzLnYxLlJ1bnRpbWVUaWVyEjEKDmVncmVzc19wb3N0dXJlGAUgASgOMhkuY29tcGFzcy52MS5FZ3Jlc3NQb3N0dXJlIkkKEUFnZW50TWVzc2FnZUNodW5rEhIKCnNlc3Npb25faWQYASABKAkSDAoEdGV4dBgCIAEoCRISCgppc190aG91Z2h0GAMgASgIInkKDUFnZW50VG9vbENhbGwSEgoKc2Vzc2lvbl9pZBgBIAEoCRIUCgx0b29sX2NhbGxfaWQYAiABKAkSDQoFdGl0bGUYAyABKAkSLwoGc3RhdHVzGAQgASgOMh8uY29tcGFzcy52MS5BZ2VudFRvb2xDYWxsU3RhdHVzIkwKCUFnZW50UGxhbhISCgpzZXNzaW9uX2lkGAEgASgJEisKB2VudHJpZXMYAiADKAsyGi5jb21wYXNzLnYxLkFnZW50UGxhbkVudHJ5IlMKDkFnZW50UGxhbkVudHJ5Eg8KB2NvbnRlbnQYASABKAkSMAoGc3RhdHVzGAIgASgOMiAuY29tcGFzcy52MS5BZ2VudFBsYW5FbnRyeVN0YXR1cyLfAwoMU2Vzc2lvbkV2ZW50EhAKCGV2ZW50X2lkGAEgASgJEhIKCmF0X3VuaXhfbXMYAiABKAMSOgoOYXNzaXN0YW50X3RleHQYAyABKAsyIC5jb21wYXNzLnYxLlNlc3Npb25Bc3Npc3RhbnRUZXh0SAASLwoIdGhpbmtpbmcYBCABKAsyGy5jb21wYXNzLnYxLlNlc3Npb25UaGlua2luZ0gAEjAKCXRvb2xfY2FsbBgFIAEoCzIbLmNvbXBhc3MudjEuU2Vzc2lvblRvb2xDYWxsSAASPQoQdG9vbF9jYWxsX3VwZGF0ZRgGIAEoCzIhLmNvbXBhc3MudjEuU2Vzc2lvblRvb2xDYWxsVXBkYXRlSAASJwoEcGxhbhgHIAEoCzIXLmNvbXBhc3MudjEuU2Vzc2lvblBsYW5IABIrCgZub3RpY2UYCCABKAsyGS5jb21wYXNzLnYxLlNlc3Npb25Ob3RpY2VIABI5ChFzZXNzaW9uX2luamVjdGlvbhgJIAEoCzIcLmNvbXBhc3MudjEuU2Vzc2lvbkluamVjdGlvbkgAEjEKDXNlc3Npb25fZXJyb3IYCiABKAsyGC5jb21wYXNzLnYxLlNlc3Npb25FcnJvckgAQgcKBWV2ZW50IjgKFFNlc3Npb25Bc3Npc3RhbnRUZXh0EgwKBHRleHQYASABKAkSEgoKbWVzc2FnZV9pZBgCIAEoCSIzCg9TZXNzaW9uVGhpbmtpbmcSDAoEdGV4dBgBIAEoCRISCgptZXNzYWdlX2lkGAIgASgJImcKD1Nlc3Npb25Ub29sQ2FsbBIUCgx0b29sX2NhbGxfaWQYASABKAkSDQoFdGl0bGUYAiABKAkSLwoGc3RhdHVzGAMgASgOMh8uY29tcGFzcy52MS5BZ2VudFRvb2xDYWxsU3RhdHVzIpoBChVTZXNzaW9uVG9vbENhbGxVcGRhdGUSFAoMdG9vbF9jYWxsX2lkGAEgASgJEi8KBnN0YXR1cxgCIAEoDjIfLmNvbXBhc3MudjEuQWdlbnRUb29sQ2FsbFN0YXR1cxIOCgZvdXRwdXQYAyABKAkSKgoFZGlmZnMYBCADKAsyGy5jb21wYXNzLnYxLlNlc3Npb25GaWxlRGlmZiJVCg9TZXNzaW9uRmlsZURpZmYSDAoEcGF0aBgBIAEoCRIVCghvbGRfdGV4dBgCIAEoCUgAiAEBEhAKCG5ld190ZXh0GAMgASgJQgsKCV9vbGRfdGV4dCI6CgtTZXNzaW9uUGxhbhIrCgdlbnRyaWVzGAEgAygLMhouY29tcGFzcy52MS5BZ2VudFBsYW5FbnRyeSI5Cg1TZXNzaW9uTm90aWNlEgwKBHRleHQYASABKAkSEQoEbGluaxgCIAEoCUgAiAEBQgcKBV9saW5rIoMBChBTZXNzaW9uSW5qZWN0aW9uEjEKB29wX2tpbmQYASABKA4yIC5jb21wYXNzLnYxLlNlc3Npb25JbmplY3Rpb25LaW5kEhIKCm1lc3NhZ2VfaWQYAiABKAkSEwoLZnJvbV9oYW5kbGUYAyABKAkSEwoLdHJhY2VwYXJlbnQYBCABKAkiawoMU2Vzc2lvbkVycm9yEioKBGtpbmQYASABKA4yHC5jb21wYXNzLnYxLlNlc3Npb25FcnJvcktpbmQSDwoHbWVzc2FnZRgCIAEoCRITCgZzdGF0dXMYAyABKAVIAIgBAUIJCgdfc3RhdHVzIjIKHFN1YnNjcmliZUFnZW50U2Vzc2lvblJlcXVlc3QSEgoKc2Vzc2lvbl9pZBgBIAEoCSJ+ChFBZ2VudFNlc3Npb25GcmFtZRISCgpzZXNzaW9uX2lkGAEgASgJEicKBWV2ZW50GAIgASgLMhguY29tcGFzcy52MS5TZXNzaW9uRXZlbnQSLAoFc3RhdGUYAyABKA4yHS5jb21wYXNzLnYxLkFnZW50U2Vzc2lvblN0YXRlInAKHlByb3Zpc2lvbkFnZW50V29ya3NwYWNlUmVxdWVzdBIUCgxhZ2VudF9oYW5kbGUYASABKAkSGQoRY2xpZW50X3JlcXVlc3RfaWQYAiABKAkSDwoHcGVyc29uYRgDIAEoCRIMCgRyb2xlGAQgASgJIjkKH1Byb3Zpc2lvbkFnZW50V29ya3NwYWNlUmVzcG9uc2USFgoOY29udGFpbmVyX25hbWUYASABKAkiUAobUmVtb3ZlQWdlbnRXb3Jrc3BhY2VSZXF1ZXN0EhYKDmNvbnRhaW5lcl9uYW1lGAEgASgJEhkKEWNsaWVudF9yZXF1ZXN0X2lkGAIgASgJIh4KHFJlbW92ZUFnZW50V29ya3NwYWNlUmVzcG9uc2UiYwoYU3RhcnRBZ2VudFNlc3Npb25SZXF1ZXN0EhYKDmNvbnRhaW5lcl9uYW1lGAEgASgJEhkKEXJlc3VtZV9zZXNzaW9uX2lkGAMgASgJSgQIAhADUg5pbml0aWFsX3Byb21wdCIvChlTdGFydEFnZW50U2Vzc2lvblJlc3BvbnNlEhIKCnNlc3Npb25faWQYASABKAkiWgoRU3Bhd25BZ2VudFJlcXVlc3QSFAoMYWdlbnRfaGFuZGxlGAEgASgJEhkKEWNsaWVudF9yZXF1ZXN0X2lkGAMgASgJSgQIAhADUg5pbml0aWFsX3Byb21wdCJAChJTcGF3bkFnZW50UmVzcG9uc2USEgoKc2Vzc2lvbl9pZBgBIAEoCRIWCg5jb250YWluZXJfbmFtZRgCIAEoCSItChdTdG9wQWdlbnRTZXNzaW9uUmVxdWVzdBISCgpzZXNzaW9uX2lkGAEgASgJIhoKGFN0b3BBZ2VudFNlc3Npb25SZXNwb25zZSIvChlSZWxvYWRBZ2VudFNlc3Npb25SZXF1ZXN0EhIKCnNlc3Npb25faWQYASABKAkiMAoaUmVsb2FkQWdlbnRTZXNzaW9uUmVzcG9uc2USEgoKc2Vzc2lvbl9pZBgBIAEoCSIrChVHZXRBZ2VudFN0YXR1c1JlcXVlc3QSEgoKc2Vzc2lvbl9pZBgBIAEoCSJKChZHZXRBZ2VudFN0YXR1c1Jlc3BvbnNlEjAKCHN0YXR1c2VzGAEgAygLMh4uY29tcGFzcy52MS5BZ2VudFNlc3Npb25TdGF0dXMiKwoRSXNzdWVUb2tlblJlcXVlc3QSFgoOYWNjb3VudF9oYW5kbGUYASABKAkiIwoSSXNzdWVUb2tlblJlc3BvbnNlEg0KBXRva2VuGAEgASgJIigKElJldm9rZVRva2VuUmVxdWVzdBISCgV0b2tlbhgBIAEoCUIDgAEBIhUKE1Jldm9rZVRva2VuUmVzcG9uc2UiJwoVUHV0QWdlbnRDb25maWdSZXF1ZXN0Eg4KBmJ1bmRsZRgBIAEoDCIpChZQdXRBZ2VudENvbmZpZ1Jlc3BvbnNlEg8KB3ZlcnNpb24YASABKAkiGwoZR2V0QWdlbnRDb25maWdJbmZvUmVxdWVzdCLaAQoaR2V0QWdlbnRDb25maWdJbmZvUmVzcG9uc2USDwoHdmVyc2lvbhgBIAEoCRIOCgZza2lsbHMYAiADKAkSEgoKZXh0ZW5zaW9ucxgDIAMoCRITCgttY3Bfc2VydmVycxgEIAMoCRIUCgxoYXNfc2V0dGluZ3MYBSABKAgSFQoNaGFzX2FnZW50c19tZBgGIAEoCBINCgVydWxlcxgHIAMoCRIRCglzdWJhZ2VudHMYCCADKAkSEgoKaGFzX21vZGVscxgJIAEoCBIPCgdwcm9tcHRzGAogAygJIhoKGERlbGV0ZUFnZW50Q29uZmlnUmVxdWVzdCIbChlEZWxldGVBZ2VudENvbmZpZ1Jlc3BvbnNlIjQKDk1vZGVsQ2FuZGlkYXRlEhAKCHByb3ZpZGVyGAEgASgJEhAKCG1vZGVsX2lkGAIgASgJInEKDU1vZGVsTWV0YWRhdGESFgoOY29udGV4dF93aW5kb3cYASABKAMSHAoUaW5wdXRfY29zdF9taWNyb191c2QYAiABKAMSHQoVb3V0cHV0X2Nvc3RfbWljcm9fdXNkGAMgASgDEgsKA2FwaRgEIAEoCSKHAQoSTW9kZWxSZWdpc3RyeUVudHJ5EhQKDGRpc3BsYXlfbmFtZRgBIAEoCRIuCgpjYW5kaWRhdGVzGAIgAygLMhouY29tcGFzcy52MS5Nb2RlbENhbmRpZGF0ZRIrCghtZXRhZGF0YRgDIAEoCzIZLmNvbXBhc3MudjEuTW9kZWxNZXRhZGF0YSKYAQoNTW9kZWxSZWdpc3RyeRI3CgdlbnRyaWVzGAEgAygLMiYuY29tcGFzcy52MS5Nb2RlbFJlZ2lzdHJ5LkVudHJpZXNFbnRyeRpOCgxFbnRyaWVzRW50cnkSCwoDa2V5GAEgASgJEi0KBXZhbHVlGAIgASgLMh4uY29tcGFzcy52MS5Nb2RlbFJlZ2lzdHJ5RW50cnk6AjgBImAKF1B1dE1vZGVsUmVnaXN0cnlSZXF1ZXN0EisKCHJlZ2lzdHJ5GAEgASgLMhkuY29tcGFzcy52MS5Nb2RlbFJlZ2lzdHJ5EhgKEGV4cGVjdGVkX3ZlcnNpb24YAiABKAMiKwoYUHV0TW9kZWxSZWdpc3RyeVJlc3BvbnNlEg8KB3ZlcnNpb24YASABKAMiGQoXR2V0TW9kZWxSZWdpc3RyeVJlcXVlc3QiWAoYR2V0TW9kZWxSZWdpc3RyeVJlc3BvbnNlEg8KB3ZlcnNpb24YASABKAMSKwoIcmVnaXN0cnkYAiABKAsyGS5jb21wYXNzLnYxLk1vZGVsUmVnaXN0cnkiHAoaRGVsZXRlTW9kZWxSZWdpc3RyeVJlcXVlc3QiHQobRGVsZXRlTW9kZWxSZWdpc3RyeVJlc3BvbnNlIj4KEEFnZW50QXR0cmlidXRpb24SFAoMYWdlbnRfaGFuZGxlGAEgASgJEhQKDG93bmVyX2hhbmRsZRgCIAEoCSJFCghGb3JnZVJlZhIrCghwcm92aWRlchgBIAEoDjIZLmNvbXBhc3MudjEuRm9yZ2VQcm92aWRlchIMCgRob3N0GAIgASgJItQDCgVJc3N1ZRIKCgJpZBgBIAEoCRIjCgVmb3JnZRgCIAEoCzIULmNvbXBhc3MudjEuRm9yZ2VSZWYSDAoEcmVwbxgDIAEoCRIOCgZudW1iZXIYBCABKA0SDQoFdGl0bGUYBSABKAkSDAoEYm9keRgGIAEoCRITCgtmb3JnZV9zdGF0ZRgHIAEoCRILCgN1cmwYCCABKAkSKwoFYWdlbnQYCSABKAsyHC5jb21wYXNzLnYxLkFnZW50QXR0cmlidXRpb24SFQoNZm9yZ2VfYWNjb3VudBgKIAEoCRIOCgZsYWJlbHMYCyADKAkSLgoKdXBkYXRlZF9hdBgTIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASJQoFc3RhdGUYDCABKA4yFi5jb21wYXNzLnYxLklzc3VlU3RhdGUSEAoIcHJpb3JpdHkYDSABKAkSEAoIYXNzaWduZWUYDiABKAkSDwoHc3VtbWFyeRgPIAEoCRIOCgZicmFuY2gYECABKAkSJAoDcHJzGBEgAygLMhcuY29tcGFzcy52MS5QdWxsUmVxdWVzdBInCgd0cmFja2VyGBIgASgLMhYuY29tcGFzcy52MS5UcmFja2VyUmVmIp4DCgtQdWxsUmVxdWVzdBIjCgVmb3JnZRgBIAEoCzIULmNvbXBhc3MudjEuRm9yZ2VSZWYSDAoEcmVwbxgCIAEoCRIOCgZudW1iZXIYAyABKA0SDQoFdGl0bGUYBCABKAkSEwoLZm9yZ2Vfc3RhdGUYBSABKAkSCwoDdXJsGAYgASgJEhAKCGhlYWRfcmVmGAcgASgJEhAKCGJhc2VfcmVmGAggASgJEisKBWFnZW50GAkgASgLMhwuY29tcGFzcy52MS5BZ2VudEF0dHJpYnV0aW9uEhUKDWZvcmdlX2FjY291bnQYCiABKAkSDQoFZHJhZnQYCyABKAgSKQoHY2hhbmdlZBgMIAEoCzIYLmNvbXBhc3MudjEuQ2hhbmdlZFN0YXRzEikKBmNoZWNrcxgNIAEoCzIZLmNvbXBhc3MudjEuQ2hlY2tzU3VtbWFyeRIjCgdyZXZpZXdzGA4gAygLMhIuY29tcGFzcy52MS5SZXZpZXcSKQoHdGhyZWFkcxgPIAMoCzIYLmNvbXBhc3MudjEuUmV2aWV3VGhyZWFkIlMKDUNoZWNrc1N1bW1hcnkSEAoIaGVhZF9zaGEYASABKAkSDQoFc3RhdGUYAiABKAkSIQoGY2hlY2tzGAMgAygLMhEuY29tcGFzcy52MS5DaGVjayJDCgVDaGVjaxIMCgRuYW1lGAEgASgJEg0KBXN0YXRlGAIgASgJEgsKA3VybBgDIAEoCRIQCghyZXF1aXJlZBgEIAEoCCJDCgxDaGFuZ2VkU3RhdHMSDQoFZmlsZXMYASABKA0SEQoJYWRkaXRpb25zGAIgASgNEhEKCWRlbGV0aW9ucxgDIAEoDSJDCgpUcmFja2VyUmVmEgwKBGtpbmQYASABKAkSCgoCaWQYAiABKAkSDgoGc3RhdHVzGAMgASgJEgsKA3VybBgEIAEoCSJHCgZSZXZpZXcSDgoGYXV0aG9yGAEgASgJEg4KBmlzX2JvdBgCIAEoCBIPCgd2ZXJkaWN0GAMgASgJEgwKBGJvZHkYBCABKAkiVQoMUmV2aWV3VGhyZWFkEgwKBHBhdGgYASABKAkSEAoIcmVzb2x2ZWQYAiABKAgSJQoIY29tbWVudHMYAyADKAsyEy5jb21wYXNzLnYxLkNvbW1lbnQiNwoHQ29tbWVudBIOCgZhdXRob3IYASABKAkSDgoGaXNfYm90GAIgASgIEgwKBGJvZHkYAyABKAkqZAoOU2VjcmV0RGVsaXZlcnkSHwobU0VDUkVUX0RFTElWRVJZX1VOU1BFQ0lGSUVEEAASGAoUU0VDUkVUX0RFTElWRVJZX0ZJTEUQARIXChNTRUNSRVRfREVMSVZFUllfRU5WEAIqcAoKU2VjcmV0S2luZBIbChdTRUNSRVRfS0lORF9VTlNQRUNJRklFRBAAEhcKE1NFQ1JFVF9LSU5EX0dFTkVSSUMQARIYChRTRUNSRVRfS0lORF9QUk9WSURFUhACEhIKDlNFQ1JFVF9LSU5EX0dIEAMqWwoLU2VjcmV0U2NvcGUSHAoYU0VDUkVUX1NDT1BFX1VOU1BFQ0lGSUVEEAASFQoRU0VDUkVUX1NDT1BFX1VTRVIQARIXChNTRUNSRVRfU0NPUEVfVEVOQU5UEAIqQwoLU2VydmVyU3RhdGUSHAoYU0VSVkVSX1NUQVRFX1VOU1BFQ0lGSUVEEAASFgoSU0VSVkVSX1NUQVRFX1JFQURZEAEqlwEKC1J1bnRpbWVUaWVyEhwKGFJVTlRJTUVfVElFUl9VTlNQRUNJRklFRBAAEhcKE1JVTlRJTUVfVElFUl9QT0RNQU4QARIYChRSVU5USU1FX1RJRVJfTUlDUk9WTRACEiAKHFJVTlRJTUVfVElFUl9BUFBMRV9DT05UQUlORVIQAxIVChFSVU5USU1FX1RJRVJfSE9TVBAEKmgKDUVncmVzc1Bvc3R1cmUSHgoaRUdSRVNTX1BPU1RVUkVfVU5TUEVDSUZJRUQQABIYChRFR1JFU1NfUE9TVFVSRV9BUk1FRBABEh0KGUVHUkVTU19QT1NUVVJFX1VORU5GT1JDRUQQAiqCAgoRQWdlbnRTZXNzaW9uU3RhdGUSIwofQUdFTlRfU0VTU0lPTl9TVEFURV9VTlNQRUNJRklFRBAAEiAKHEFHRU5UX1NFU1NJT05fU1RBVEVfU1RBUlRJTkcQARIdChlBR0VOVF9TRVNTSU9OX1NUQVRFX1JFQURZEAISHwobQUdFTlRfU0VTU0lPTl9TVEFURV9XT1JLSU5HEAMSHwobQUdFTlRfU0VTU0lPTl9TVEFURV9TVE9QUEVEEAQSHwobQUdFTlRfU0VTU0lPTl9TVEFURV9FUlJPUkVEEAUSJAogQUdFTlRfU0VTU0lPTl9TVEFURV9ESVNDT05ORUNURUQQBirSAQoTQWdlbnRUb29sQ2FsbFN0YXR1cxImCiJBR0VOVF9UT09MX0NBTExfU1RBVFVTX1VOU1BFQ0lGSUVEEAASIgoeQUdFTlRfVE9PTF9DQUxMX1NUQVRVU19QRU5ESU5HEAESJgoiQUdFTlRfVE9PTF9DQUxMX1NUQVRVU19JTl9QUk9HUkVTUxACEiQKIEFHRU5UX1RPT0xfQ0FMTF9TVEFUVVNfQ09NUExFVEVEEAMSIQodQUdFTlRfVE9PTF9DQUxMX1NUQVRVU19GQUlMRUQQBCq0AQoUQWdlbnRQbGFuRW50cnlTdGF0dXMSJwojQUdFTlRfUExBTl9FTlRSWV9TVEFUVVNfVU5TUEVDSUZJRUQQABIjCh9BR0VOVF9QTEFOX0VOVFJZX1NUQVRVU19QRU5ESU5HEAESJwojQUdFTlRfUExBTl9FTlRSWV9TVEFUVVNfSU5fUFJPR1JFU1MQAhIlCiFBR0VOVF9QTEFOX0VOVFJZX1NUQVRVU19DT01QTEVURUQQAyqEAQoUU2Vzc2lvbkluamVjdGlvbktpbmQSJgoiU0VTU0lPTl9JTkpFQ1RJT05fS0lORF9VTlNQRUNJRklFRBAAEiAKHFNFU1NJT05fSU5KRUNUSU9OX0tJTkRfU1RFRVIQARIiCh5TRVNTSU9OX0lOSkVDVElPTl9LSU5EX0RFTElWRVIQAip0ChBTZXNzaW9uRXJyb3JLaW5kEiIKHlNFU1NJT05fRVJST1JfS0lORF9VTlNQRUNJRklFRBAAEhwKGFNFU1NJT05fRVJST1JfS0lORF9FUlJPUhABEh4KGlNFU1NJT05fRVJST1JfS0lORF9BQk9SVEVEEAIq8QEKCklzc3VlU3RhdGUSGwoXSVNTVUVfU1RBVEVfVU5TUEVDSUZJRUQQABIXChNJU1NVRV9TVEFURV9CQUNLTE9HEAESFAoQSVNTVUVfU1RBVEVfVE9ETxACEhYKEklTU1VFX1NUQVRFX1FVRVVFRBADEhcKE0lTU1VFX1NUQVRFX0JMT0NLRUQQBBIbChdJU1NVRV9TVEFURV9JTl9QUk9HUkVTUxAFEhkKFUlTU1VFX1NUQVRFX0lOX1JFVklFVxAGEhQKEElTU1VFX1NUQVRFX0RPTkUQBxIYChRJU1NVRV9TVEFURV9BUkNISVZFRBAIKpwBCg1Gb3JnZVByb3ZpZGVyEh4KGkZPUkdFX1BST1ZJREVSX1VOU1BFQ0lGSUVEEAASGQoVRk9SR0VfUFJPVklERVJfR0lUSFVCEAESGQoVRk9SR0VfUFJPVklERVJfR0lUTEFCEAISGgoWRk9SR0VfUFJPVklERVJfRk9SR0VKTxADEhkKFUZPUkdFX1BST1ZJREVSX0xJTkVBUhAEMtMOCg5Db21wYXNzU2VydmljZRJUCg1HZXRTZXJ2ZXJJbmZvEiAuY29tcGFzcy52MS5HZXRTZXJ2ZXJJbmZvUmVxdWVzdBohLmNvbXBhc3MudjEuR2V0U2VydmVySW5mb1Jlc3BvbnNlEj8KBldob0FtSRIZLmNvbXBhc3MudjEuV2hvQW1JUmVxdWVzdBoaLmNvbXBhc3MudjEuV2hvQW1JUmVzcG9uc2USXAoPU3Vic2NyaWJlRXZlbnRzEiIuY29tcGFzcy52MS5TdWJzY3JpYmVFdmVudHNSZXF1ZXN0GiMuY29tcGFzcy52MS5TdWJzY3JpYmVFdmVudHNSZXNwb25zZTABEloKD0xpc3RCb2FyZElzc3VlcxIiLmNvbXBhc3MudjEuTGlzdEJvYXJkSXNzdWVzUmVxdWVzdBojLmNvbXBhc3MudjEuTGlzdEJvYXJkSXNzdWVzUmVzcG9uc2UScgoXUHJvdmlzaW9uQWdlbnRXb3Jrc3BhY2USKi5jb21wYXNzLnYxLlByb3Zpc2lvbkFnZW50V29ya3NwYWNlUmVxdWVzdBorLmNvbXBhc3MudjEuUHJvdmlzaW9uQWdlbnRXb3Jrc3BhY2VSZXNwb25zZRJgChFTdGFydEFnZW50U2Vzc2lvbhIkLmNvbXBhc3MudjEuU3RhcnRBZ2VudFNlc3Npb25SZXF1ZXN0GiUuY29tcGFzcy52MS5TdGFydEFnZW50U2Vzc2lvblJlc3BvbnNlEksKClNwYXduQWdlbnQSHS5jb21wYXNzLnYxLlNwYXduQWdlbnRSZXF1ZXN0Gh4uY29tcGFzcy52MS5TcGF3bkFnZW50UmVzcG9uc2USXQoQU3RvcEFnZW50U2Vzc2lvbhIjLmNvbXBhc3MudjEuU3RvcEFnZW50U2Vzc2lvblJlcXVlc3QaJC5jb21wYXNzLnYxLlN0b3BBZ2VudFNlc3Npb25SZXNwb25zZRJpChRSZW1vdmVBZ2VudFdvcmtzcGFjZRInLmNvbXBhc3MudjEuUmVtb3ZlQWdlbnRXb3Jrc3BhY2VSZXF1ZXN0GiguY29tcGFzcy52MS5SZW1vdmVBZ2VudFdvcmtzcGFjZVJlc3BvbnNlEmMKElJlbG9hZEFnZW50U2Vzc2lvbhIlLmNvbXBhc3MudjEuUmVsb2FkQWdlbnRTZXNzaW9uUmVxdWVzdBomLmNvbXBhc3MudjEuUmVsb2FkQWdlbnRTZXNzaW9uUmVzcG9uc2USVwoOR2V0QWdlbnRTdGF0dXMSIS5jb21wYXNzLnYxLkdldEFnZW50U3RhdHVzUmVxdWVzdBoiLmNvbXBhc3MudjEuR2V0QWdlbnRTdGF0dXNSZXNwb25zZRJiChVTdWJzY3JpYmVBZ2VudFNlc3Npb24SKC5jb21wYXNzLnYxLlN1YnNjcmliZUFnZW50U2Vzc2lvblJlcXVlc3QaHS5jb21wYXNzLnYxLkFnZW50U2Vzc2lvbkZyYW1lMAESSwoKSXNzdWVUb2tlbhIdLmNvbXBhc3MudjEuSXNzdWVUb2tlblJlcXVlc3QaHi5jb21wYXNzLnYxLklzc3VlVG9rZW5SZXNwb25zZRJOCgtSZXZva2VUb2tlbhIeLmNvbXBhc3MudjEuUmV2b2tlVG9rZW5SZXF1ZXN0Gh8uY29tcGFzcy52MS5SZXZva2VUb2tlblJlc3BvbnNlElcKDlB1dEFnZW50Q29uZmlnEiEuY29tcGFzcy52MS5QdXRBZ2VudENvbmZpZ1JlcXVlc3QaIi5jb21wYXNzLnYxLlB1dEFnZW50Q29uZmlnUmVzcG9uc2USYwoSR2V0QWdlbnRDb25maWdJbmZvEiUuY29tcGFzcy52MS5HZXRBZ2VudENvbmZpZ0luZm9SZXF1ZXN0GiYuY29tcGFzcy52MS5HZXRBZ2VudENvbmZpZ0luZm9SZXNwb25zZRJgChFEZWxldGVBZ2VudENvbmZpZxIkLmNvbXBhc3MudjEuRGVsZXRlQWdlbnRDb25maWdSZXF1ZXN0GiUuY29tcGFzcy52MS5EZWxldGVBZ2VudENvbmZpZ1Jlc3BvbnNlEl0KEFB1dE1vZGVsUmVnaXN0cnkSIy5jb21wYXNzLnYxLlB1dE1vZGVsUmVnaXN0cnlSZXF1ZXN0GiQuY29tcGFzcy52MS5QdXRNb2RlbFJlZ2lzdHJ5UmVzcG9uc2USXQoQR2V0TW9kZWxSZWdpc3RyeRIjLmNvbXBhc3MudjEuR2V0TW9kZWxSZWdpc3RyeVJlcXVlc3QaJC5jb21wYXNzLnYxLkdldE1vZGVsUmVnaXN0cnlSZXNwb25zZRJmChNEZWxldGVNb2RlbFJlZ2lzdHJ5EiYuY29tcGFzcy52MS5EZWxldGVNb2RlbFJlZ2lzdHJ5UmVxdWVzdBonLmNvbXBhc3MudjEuRGVsZXRlTW9kZWxSZWdpc3RyeVJlc3BvbnNlMqAECg5TZWNyZXRzU2VydmljZRJICglTZXRTZWNyZXQSHC5jb21wYXNzLnYxLlNldFNlY3JldFJlcXVlc3QaHS5jb21wYXNzLnYxLlNldFNlY3JldFJlc3BvbnNlEk4KC0xpc3RTZWNyZXRzEh4uY29tcGFzcy52MS5MaXN0U2VjcmV0c1JlcXVlc3QaHy5jb21wYXNzLnYxLkxpc3RTZWNyZXRzUmVzcG9uc2USUQoMRGVsZXRlU2VjcmV0Eh8uY29tcGFzcy52MS5EZWxldGVTZWNyZXRSZXF1ZXN0GiAuY29tcGFzcy52MS5EZWxldGVTZWNyZXRSZXNwb25zZRJaCg9TZXRTZXJ2ZXJTZWNyZXQSIi5jb21wYXNzLnYxLlNldFNlcnZlclNlY3JldFJlcXVlc3QaIy5jb21wYXNzLnYxLlNldFNlcnZlclNlY3JldFJlc3BvbnNlEmMKEkRlbGV0ZVNlcnZlclNlY3JldBIlLmNvbXBhc3MudjEuRGVsZXRlU2VydmVyU2VjcmV0UmVxdWVzdBomLmNvbXBhc3MudjEuRGVsZXRlU2VydmVyU2VjcmV0UmVzcG9uc2USYAoRTGlzdFNlcnZlclNlY3JldHMSJC5jb21wYXNzLnYxLkxpc3RTZXJ2ZXJTZWNyZXRzUmVxdWVzdBolLmNvbXBhc3MudjEuTGlzdFNlcnZlclNlY3JldHNSZXNwb25zZWIGcHJvdG8z", [file_google_protobuf_timestamp]); + fileDesc("Chhjb21wYXNzL3YxL2NvbXBhc3MucHJvdG8SCmNvbXBhc3MudjEi0AEKEFNldFNlY3JldFJlcXVlc3QSDAoEbmFtZRgBIAEoCRISCgV2YWx1ZRgCIAEoCUIDgAEBEiwKCGRlbGl2ZXJ5GAMgASgOMhouY29tcGFzcy52MS5TZWNyZXREZWxpdmVyeRIkCgRraW5kGAQgASgOMhYuY29tcGFzcy52MS5TZWNyZXRLaW5kEhAKCHByb3ZpZGVyGAUgASgJEgwKBGhvc3QYBiABKAkSJgoFc2NvcGUYByABKA4yFy5jb21wYXNzLnYxLlNlY3JldFNjb3BlIhMKEVNldFNlY3JldFJlc3BvbnNlIhQKEkxpc3RTZWNyZXRzUmVxdWVzdCJAChNMaXN0U2VjcmV0c1Jlc3BvbnNlEikKB3NlY3JldHMYASADKAsyGC5jb21wYXNzLnYxLlNlY3JldFN0YXR1cyKgAQoMU2VjcmV0U3RhdHVzEgwKBG5hbWUYASABKAkSDgoGaXNfc2V0GAIgASgIEiwKCGRlbGl2ZXJ5GAMgASgOMhouY29tcGFzcy52MS5TZWNyZXREZWxpdmVyeRIkCgRraW5kGAQgASgOMhYuY29tcGFzcy52MS5TZWNyZXRLaW5kEhAKCHByb3ZpZGVyGAUgASgJEgwKBGhvc3QYBiABKAkiSwoTRGVsZXRlU2VjcmV0UmVxdWVzdBIMCgRuYW1lGAEgASgJEiYKBXNjb3BlGAIgASgOMhcuY29tcGFzcy52MS5TZWNyZXRTY29wZSIWChREZWxldGVTZWNyZXRSZXNwb25zZSIaChhMaXN0U2VydmVyU2VjcmV0c1JlcXVlc3QiUwoZTGlzdFNlcnZlclNlY3JldHNSZXNwb25zZRI2Cg5zZXJ2ZXJfc2VjcmV0cxgBIAMoCzIeLmNvbXBhc3MudjEuU2VydmVyU2VjcmV0U3RhdHVzIjIKElNlcnZlclNlY3JldFN0YXR1cxIMCgRuYW1lGAEgASgJEg4KBmlzX3NldBgCIAEoCCIWChRHZXRTZXJ2ZXJJbmZvUmVxdWVzdCI9ChVHZXRTZXJ2ZXJJbmZvUmVzcG9uc2USDwoHdmVyc2lvbhgBIAEoCRITCgthcGlfdmVyc2lvbhgCIAEoCSIPCg1XaG9BbUlSZXF1ZXN0IiQKDldob0FtSVJlc3BvbnNlEhIKCmFjY291bnRfaWQYASABKAkiQwoWU3Vic2NyaWJlRXZlbnRzUmVxdWVzdBIRCglzaW5jZV9zZXEYASABKAQSFgoOaW5zdGFuY2VfZXBvY2gYAiABKAQi4gMKF1N1YnNjcmliZUV2ZW50c1Jlc3BvbnNlEgsKA3NlcRgBIAEoBBISCgphdF91bml4X21zGAIgASgDEhYKDmluc3RhbmNlX2Vwb2NoGAMgASgEEhQKDHNuYXBzaG90X3NlcRgEIAEoBBIxCg1zZXJ2ZXJfc3RhdHVzGAogASgLMhguY29tcGFzcy52MS5TZXJ2ZXJTdGF0dXNIABI1Cg9yZXN5bmNfcmVxdWlyZWQYCyABKAsyGi5jb21wYXNzLnYxLlJlc3luY1JlcXVpcmVkSAASPgoUYWdlbnRfc2Vzc2lvbl9zdGF0dXMYDCABKAsyHi5jb21wYXNzLnYxLkFnZW50U2Vzc2lvblN0YXR1c0gAEjwKE2FnZW50X21lc3NhZ2VfY2h1bmsYDSABKAsyHS5jb21wYXNzLnYxLkFnZW50TWVzc2FnZUNodW5rSAASNAoPYWdlbnRfdG9vbF9jYWxsGA4gASgLMhkuY29tcGFzcy52MS5BZ2VudFRvb2xDYWxsSAASKwoKYWdlbnRfcGxhbhgPIAEoCzIVLmNvbXBhc3MudjEuQWdlbnRQbGFuSAASIgoFaXNzdWUYECABKAsyES5jb21wYXNzLnYxLklzc3VlSABCCQoHcGF5bG9hZCIuChZMaXN0Qm9hcmRJc3N1ZXNSZXF1ZXN0EhQKDHNuYXBzaG90X3NlcRgBIAEoBCI8ChdMaXN0Qm9hcmRJc3N1ZXNSZXNwb25zZRIhCgZpc3N1ZXMYASADKAsyES5jb21wYXNzLnYxLklzc3VlIjYKDFNlcnZlclN0YXR1cxImCgVzdGF0ZRgBIAEoDjIXLmNvbXBhc3MudjEuU2VydmVyU3RhdGUiEAoOUmVzeW5jUmVxdWlyZWQi0gEKEkFnZW50U2Vzc2lvblN0YXR1cxISCgpzZXNzaW9uX2lkGAEgASgJEiwKBXN0YXRlGAIgASgOMh0uY29tcGFzcy52MS5BZ2VudFNlc3Npb25TdGF0ZRIYChBhZ2VudF9hY2NvdW50X2lkGAMgASgJEi0KDHJ1bnRpbWVfdGllchgEIAEoDjIXLmNvbXBhc3MudjEuUnVudGltZVRpZXISMQoOZWdyZXNzX3Bvc3R1cmUYBSABKA4yGS5jb21wYXNzLnYxLkVncmVzc1Bvc3R1cmUiSQoRQWdlbnRNZXNzYWdlQ2h1bmsSEgoKc2Vzc2lvbl9pZBgBIAEoCRIMCgR0ZXh0GAIgASgJEhIKCmlzX3Rob3VnaHQYAyABKAgieQoNQWdlbnRUb29sQ2FsbBISCgpzZXNzaW9uX2lkGAEgASgJEhQKDHRvb2xfY2FsbF9pZBgCIAEoCRINCgV0aXRsZRgDIAEoCRIvCgZzdGF0dXMYBCABKA4yHy5jb21wYXNzLnYxLkFnZW50VG9vbENhbGxTdGF0dXMiTAoJQWdlbnRQbGFuEhIKCnNlc3Npb25faWQYASABKAkSKwoHZW50cmllcxgCIAMoCzIaLmNvbXBhc3MudjEuQWdlbnRQbGFuRW50cnkiUwoOQWdlbnRQbGFuRW50cnkSDwoHY29udGVudBgBIAEoCRIwCgZzdGF0dXMYAiABKA4yIC5jb21wYXNzLnYxLkFnZW50UGxhbkVudHJ5U3RhdHVzIt8DCgxTZXNzaW9uRXZlbnQSEAoIZXZlbnRfaWQYASABKAkSEgoKYXRfdW5peF9tcxgCIAEoAxI6Cg5hc3Npc3RhbnRfdGV4dBgDIAEoCzIgLmNvbXBhc3MudjEuU2Vzc2lvbkFzc2lzdGFudFRleHRIABIvCgh0aGlua2luZxgEIAEoCzIbLmNvbXBhc3MudjEuU2Vzc2lvblRoaW5raW5nSAASMAoJdG9vbF9jYWxsGAUgASgLMhsuY29tcGFzcy52MS5TZXNzaW9uVG9vbENhbGxIABI9ChB0b29sX2NhbGxfdXBkYXRlGAYgASgLMiEuY29tcGFzcy52MS5TZXNzaW9uVG9vbENhbGxVcGRhdGVIABInCgRwbGFuGAcgASgLMhcuY29tcGFzcy52MS5TZXNzaW9uUGxhbkgAEisKBm5vdGljZRgIIAEoCzIZLmNvbXBhc3MudjEuU2Vzc2lvbk5vdGljZUgAEjkKEXNlc3Npb25faW5qZWN0aW9uGAkgASgLMhwuY29tcGFzcy52MS5TZXNzaW9uSW5qZWN0aW9uSAASMQoNc2Vzc2lvbl9lcnJvchgKIAEoCzIYLmNvbXBhc3MudjEuU2Vzc2lvbkVycm9ySABCBwoFZXZlbnQiOAoUU2Vzc2lvbkFzc2lzdGFudFRleHQSDAoEdGV4dBgBIAEoCRISCgptZXNzYWdlX2lkGAIgASgJIjMKD1Nlc3Npb25UaGlua2luZxIMCgR0ZXh0GAEgASgJEhIKCm1lc3NhZ2VfaWQYAiABKAkiZwoPU2Vzc2lvblRvb2xDYWxsEhQKDHRvb2xfY2FsbF9pZBgBIAEoCRINCgV0aXRsZRgCIAEoCRIvCgZzdGF0dXMYAyABKA4yHy5jb21wYXNzLnYxLkFnZW50VG9vbENhbGxTdGF0dXMimgEKFVNlc3Npb25Ub29sQ2FsbFVwZGF0ZRIUCgx0b29sX2NhbGxfaWQYASABKAkSLwoGc3RhdHVzGAIgASgOMh8uY29tcGFzcy52MS5BZ2VudFRvb2xDYWxsU3RhdHVzEg4KBm91dHB1dBgDIAEoCRIqCgVkaWZmcxgEIAMoCzIbLmNvbXBhc3MudjEuU2Vzc2lvbkZpbGVEaWZmIlUKD1Nlc3Npb25GaWxlRGlmZhIMCgRwYXRoGAEgASgJEhUKCG9sZF90ZXh0GAIgASgJSACIAQESEAoIbmV3X3RleHQYAyABKAlCCwoJX29sZF90ZXh0IjoKC1Nlc3Npb25QbGFuEisKB2VudHJpZXMYASADKAsyGi5jb21wYXNzLnYxLkFnZW50UGxhbkVudHJ5IjkKDVNlc3Npb25Ob3RpY2USDAoEdGV4dBgBIAEoCRIRCgRsaW5rGAIgASgJSACIAQFCBwoFX2xpbmsigwEKEFNlc3Npb25JbmplY3Rpb24SMQoHb3Bfa2luZBgBIAEoDjIgLmNvbXBhc3MudjEuU2Vzc2lvbkluamVjdGlvbktpbmQSEgoKbWVzc2FnZV9pZBgCIAEoCRITCgtmcm9tX2hhbmRsZRgDIAEoCRITCgt0cmFjZXBhcmVudBgEIAEoCSJrCgxTZXNzaW9uRXJyb3ISKgoEa2luZBgBIAEoDjIcLmNvbXBhc3MudjEuU2Vzc2lvbkVycm9yS2luZBIPCgdtZXNzYWdlGAIgASgJEhMKBnN0YXR1cxgDIAEoBUgAiAEBQgkKB19zdGF0dXMiMgocU3Vic2NyaWJlQWdlbnRTZXNzaW9uUmVxdWVzdBISCgpzZXNzaW9uX2lkGAEgASgJIn4KEUFnZW50U2Vzc2lvbkZyYW1lEhIKCnNlc3Npb25faWQYASABKAkSJwoFZXZlbnQYAiABKAsyGC5jb21wYXNzLnYxLlNlc3Npb25FdmVudBIsCgVzdGF0ZRgDIAEoDjIdLmNvbXBhc3MudjEuQWdlbnRTZXNzaW9uU3RhdGUicAoeUHJvdmlzaW9uQWdlbnRXb3Jrc3BhY2VSZXF1ZXN0EhQKDGFnZW50X2hhbmRsZRgBIAEoCRIZChFjbGllbnRfcmVxdWVzdF9pZBgCIAEoCRIPCgdwZXJzb25hGAMgASgJEgwKBHJvbGUYBCABKAkiOQofUHJvdmlzaW9uQWdlbnRXb3Jrc3BhY2VSZXNwb25zZRIWCg5jb250YWluZXJfbmFtZRgBIAEoCSJQChtSZW1vdmVBZ2VudFdvcmtzcGFjZVJlcXVlc3QSFgoOY29udGFpbmVyX25hbWUYASABKAkSGQoRY2xpZW50X3JlcXVlc3RfaWQYAiABKAkiHgocUmVtb3ZlQWdlbnRXb3Jrc3BhY2VSZXNwb25zZSJjChhTdGFydEFnZW50U2Vzc2lvblJlcXVlc3QSFgoOY29udGFpbmVyX25hbWUYASABKAkSGQoRcmVzdW1lX3Nlc3Npb25faWQYAyABKAlKBAgCEANSDmluaXRpYWxfcHJvbXB0Ii8KGVN0YXJ0QWdlbnRTZXNzaW9uUmVzcG9uc2USEgoKc2Vzc2lvbl9pZBgBIAEoCSJaChFTcGF3bkFnZW50UmVxdWVzdBIUCgxhZ2VudF9oYW5kbGUYASABKAkSGQoRY2xpZW50X3JlcXVlc3RfaWQYAyABKAlKBAgCEANSDmluaXRpYWxfcHJvbXB0IkAKElNwYXduQWdlbnRSZXNwb25zZRISCgpzZXNzaW9uX2lkGAEgASgJEhYKDmNvbnRhaW5lcl9uYW1lGAIgASgJIi0KF1N0b3BBZ2VudFNlc3Npb25SZXF1ZXN0EhIKCnNlc3Npb25faWQYASABKAkiGgoYU3RvcEFnZW50U2Vzc2lvblJlc3BvbnNlIi8KGVJlbG9hZEFnZW50U2Vzc2lvblJlcXVlc3QSEgoKc2Vzc2lvbl9pZBgBIAEoCSIwChpSZWxvYWRBZ2VudFNlc3Npb25SZXNwb25zZRISCgpzZXNzaW9uX2lkGAEgASgJIisKFUdldEFnZW50U3RhdHVzUmVxdWVzdBISCgpzZXNzaW9uX2lkGAEgASgJIkoKFkdldEFnZW50U3RhdHVzUmVzcG9uc2USMAoIc3RhdHVzZXMYASADKAsyHi5jb21wYXNzLnYxLkFnZW50U2Vzc2lvblN0YXR1cyIrChFJc3N1ZVRva2VuUmVxdWVzdBIWCg5hY2NvdW50X2hhbmRsZRgBIAEoCSIjChJJc3N1ZVRva2VuUmVzcG9uc2USDQoFdG9rZW4YASABKAkiKAoSUmV2b2tlVG9rZW5SZXF1ZXN0EhIKBXRva2VuGAEgASgJQgOAAQEiFQoTUmV2b2tlVG9rZW5SZXNwb25zZSInChVQdXRBZ2VudENvbmZpZ1JlcXVlc3QSDgoGYnVuZGxlGAEgASgMIikKFlB1dEFnZW50Q29uZmlnUmVzcG9uc2USDwoHdmVyc2lvbhgBIAEoCSIbChlHZXRBZ2VudENvbmZpZ0luZm9SZXF1ZXN0ItoBChpHZXRBZ2VudENvbmZpZ0luZm9SZXNwb25zZRIPCgd2ZXJzaW9uGAEgASgJEg4KBnNraWxscxgCIAMoCRISCgpleHRlbnNpb25zGAMgAygJEhMKC21jcF9zZXJ2ZXJzGAQgAygJEhQKDGhhc19zZXR0aW5ncxgFIAEoCBIVCg1oYXNfYWdlbnRzX21kGAYgASgIEg0KBXJ1bGVzGAcgAygJEhEKCXN1YmFnZW50cxgIIAMoCRISCgpoYXNfbW9kZWxzGAkgASgIEg8KB3Byb21wdHMYCiADKAkiGgoYRGVsZXRlQWdlbnRDb25maWdSZXF1ZXN0IhsKGURlbGV0ZUFnZW50Q29uZmlnUmVzcG9uc2UiNAoOTW9kZWxDYW5kaWRhdGUSEAoIcHJvdmlkZXIYASABKAkSEAoIbW9kZWxfaWQYAiABKAkicQoNTW9kZWxNZXRhZGF0YRIWCg5jb250ZXh0X3dpbmRvdxgBIAEoAxIcChRpbnB1dF9jb3N0X21pY3JvX3VzZBgCIAEoAxIdChVvdXRwdXRfY29zdF9taWNyb191c2QYAyABKAMSCwoDYXBpGAQgASgJIocBChJNb2RlbFJlZ2lzdHJ5RW50cnkSFAoMZGlzcGxheV9uYW1lGAEgASgJEi4KCmNhbmRpZGF0ZXMYAiADKAsyGi5jb21wYXNzLnYxLk1vZGVsQ2FuZGlkYXRlEisKCG1ldGFkYXRhGAMgASgLMhkuY29tcGFzcy52MS5Nb2RlbE1ldGFkYXRhIpgBCg1Nb2RlbFJlZ2lzdHJ5EjcKB2VudHJpZXMYASADKAsyJi5jb21wYXNzLnYxLk1vZGVsUmVnaXN0cnkuRW50cmllc0VudHJ5Gk4KDEVudHJpZXNFbnRyeRILCgNrZXkYASABKAkSLQoFdmFsdWUYAiABKAsyHi5jb21wYXNzLnYxLk1vZGVsUmVnaXN0cnlFbnRyeToCOAEiYAoXUHV0TW9kZWxSZWdpc3RyeVJlcXVlc3QSKwoIcmVnaXN0cnkYASABKAsyGS5jb21wYXNzLnYxLk1vZGVsUmVnaXN0cnkSGAoQZXhwZWN0ZWRfdmVyc2lvbhgCIAEoAyIrChhQdXRNb2RlbFJlZ2lzdHJ5UmVzcG9uc2USDwoHdmVyc2lvbhgBIAEoAyIZChdHZXRNb2RlbFJlZ2lzdHJ5UmVxdWVzdCJYChhHZXRNb2RlbFJlZ2lzdHJ5UmVzcG9uc2USDwoHdmVyc2lvbhgBIAEoAxIrCghyZWdpc3RyeRgCIAEoCzIZLmNvbXBhc3MudjEuTW9kZWxSZWdpc3RyeSIcChpEZWxldGVNb2RlbFJlZ2lzdHJ5UmVxdWVzdCIdChtEZWxldGVNb2RlbFJlZ2lzdHJ5UmVzcG9uc2UiPgoQQWdlbnRBdHRyaWJ1dGlvbhIUCgxhZ2VudF9oYW5kbGUYASABKAkSFAoMb3duZXJfaGFuZGxlGAIgASgJIkUKCEZvcmdlUmVmEisKCHByb3ZpZGVyGAEgASgOMhkuY29tcGFzcy52MS5Gb3JnZVByb3ZpZGVyEgwKBGhvc3QYAiABKAki1AMKBUlzc3VlEgoKAmlkGAEgASgJEiMKBWZvcmdlGAIgASgLMhQuY29tcGFzcy52MS5Gb3JnZVJlZhIMCgRyZXBvGAMgASgJEg4KBm51bWJlchgEIAEoDRINCgV0aXRsZRgFIAEoCRIMCgRib2R5GAYgASgJEhMKC2ZvcmdlX3N0YXRlGAcgASgJEgsKA3VybBgIIAEoCRIrCgVhZ2VudBgJIAEoCzIcLmNvbXBhc3MudjEuQWdlbnRBdHRyaWJ1dGlvbhIVCg1mb3JnZV9hY2NvdW50GAogASgJEg4KBmxhYmVscxgLIAMoCRIuCgp1cGRhdGVkX2F0GBMgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIlCgVzdGF0ZRgMIAEoDjIWLmNvbXBhc3MudjEuSXNzdWVTdGF0ZRIQCghwcmlvcml0eRgNIAEoCRIQCghhc3NpZ25lZRgOIAEoCRIPCgdzdW1tYXJ5GA8gASgJEg4KBmJyYW5jaBgQIAEoCRIkCgNwcnMYESADKAsyFy5jb21wYXNzLnYxLlB1bGxSZXF1ZXN0EicKB3RyYWNrZXIYEiABKAsyFi5jb21wYXNzLnYxLlRyYWNrZXJSZWYingMKC1B1bGxSZXF1ZXN0EiMKBWZvcmdlGAEgASgLMhQuY29tcGFzcy52MS5Gb3JnZVJlZhIMCgRyZXBvGAIgASgJEg4KBm51bWJlchgDIAEoDRINCgV0aXRsZRgEIAEoCRITCgtmb3JnZV9zdGF0ZRgFIAEoCRILCgN1cmwYBiABKAkSEAoIaGVhZF9yZWYYByABKAkSEAoIYmFzZV9yZWYYCCABKAkSKwoFYWdlbnQYCSABKAsyHC5jb21wYXNzLnYxLkFnZW50QXR0cmlidXRpb24SFQoNZm9yZ2VfYWNjb3VudBgKIAEoCRINCgVkcmFmdBgLIAEoCBIpCgdjaGFuZ2VkGAwgASgLMhguY29tcGFzcy52MS5DaGFuZ2VkU3RhdHMSKQoGY2hlY2tzGA0gASgLMhkuY29tcGFzcy52MS5DaGVja3NTdW1tYXJ5EiMKB3Jldmlld3MYDiADKAsyEi5jb21wYXNzLnYxLlJldmlldxIpCgd0aHJlYWRzGA8gAygLMhguY29tcGFzcy52MS5SZXZpZXdUaHJlYWQiUwoNQ2hlY2tzU3VtbWFyeRIQCghoZWFkX3NoYRgBIAEoCRINCgVzdGF0ZRgCIAEoCRIhCgZjaGVja3MYAyADKAsyES5jb21wYXNzLnYxLkNoZWNrIkMKBUNoZWNrEgwKBG5hbWUYASABKAkSDQoFc3RhdGUYAiABKAkSCwoDdXJsGAMgASgJEhAKCHJlcXVpcmVkGAQgASgIIkMKDENoYW5nZWRTdGF0cxINCgVmaWxlcxgBIAEoDRIRCglhZGRpdGlvbnMYAiABKA0SEQoJZGVsZXRpb25zGAMgASgNIkMKClRyYWNrZXJSZWYSDAoEa2luZBgBIAEoCRIKCgJpZBgCIAEoCRIOCgZzdGF0dXMYAyABKAkSCwoDdXJsGAQgASgJIkcKBlJldmlldxIOCgZhdXRob3IYASABKAkSDgoGaXNfYm90GAIgASgIEg8KB3ZlcmRpY3QYAyABKAkSDAoEYm9keRgEIAEoCSJVCgxSZXZpZXdUaHJlYWQSDAoEcGF0aBgBIAEoCRIQCghyZXNvbHZlZBgCIAEoCBIlCghjb21tZW50cxgDIAMoCzITLmNvbXBhc3MudjEuQ29tbWVudCI3CgdDb21tZW50Eg4KBmF1dGhvchgBIAEoCRIOCgZpc19ib3QYAiABKAgSDAoEYm9keRgDIAEoCSpkCg5TZWNyZXREZWxpdmVyeRIfChtTRUNSRVRfREVMSVZFUllfVU5TUEVDSUZJRUQQABIYChRTRUNSRVRfREVMSVZFUllfRklMRRABEhcKE1NFQ1JFVF9ERUxJVkVSWV9FTlYQAipwCgpTZWNyZXRLaW5kEhsKF1NFQ1JFVF9LSU5EX1VOU1BFQ0lGSUVEEAASFwoTU0VDUkVUX0tJTkRfR0VORVJJQxABEhgKFFNFQ1JFVF9LSU5EX1BST1ZJREVSEAISEgoOU0VDUkVUX0tJTkRfR0gQAypbCgtTZWNyZXRTY29wZRIcChhTRUNSRVRfU0NPUEVfVU5TUEVDSUZJRUQQABIVChFTRUNSRVRfU0NPUEVfVVNFUhABEhcKE1NFQ1JFVF9TQ09QRV9URU5BTlQQAipDCgtTZXJ2ZXJTdGF0ZRIcChhTRVJWRVJfU1RBVEVfVU5TUEVDSUZJRUQQABIWChJTRVJWRVJfU1RBVEVfUkVBRFkQASqXAQoLUnVudGltZVRpZXISHAoYUlVOVElNRV9USUVSX1VOU1BFQ0lGSUVEEAASFwoTUlVOVElNRV9USUVSX1BPRE1BThABEhgKFFJVTlRJTUVfVElFUl9NSUNST1ZNEAISIAocUlVOVElNRV9USUVSX0FQUExFX0NPTlRBSU5FUhADEhUKEVJVTlRJTUVfVElFUl9IT1NUEAQqaAoNRWdyZXNzUG9zdHVyZRIeChpFR1JFU1NfUE9TVFVSRV9VTlNQRUNJRklFRBAAEhgKFEVHUkVTU19QT1NUVVJFX0FSTUVEEAESHQoZRUdSRVNTX1BPU1RVUkVfVU5FTkZPUkNFRBACKoICChFBZ2VudFNlc3Npb25TdGF0ZRIjCh9BR0VOVF9TRVNTSU9OX1NUQVRFX1VOU1BFQ0lGSUVEEAASIAocQUdFTlRfU0VTU0lPTl9TVEFURV9TVEFSVElORxABEh0KGUFHRU5UX1NFU1NJT05fU1RBVEVfUkVBRFkQAhIfChtBR0VOVF9TRVNTSU9OX1NUQVRFX1dPUktJTkcQAxIfChtBR0VOVF9TRVNTSU9OX1NUQVRFX1NUT1BQRUQQBBIfChtBR0VOVF9TRVNTSU9OX1NUQVRFX0VSUk9SRUQQBRIkCiBBR0VOVF9TRVNTSU9OX1NUQVRFX0RJU0NPTk5FQ1RFRBAGKtIBChNBZ2VudFRvb2xDYWxsU3RhdHVzEiYKIkFHRU5UX1RPT0xfQ0FMTF9TVEFUVVNfVU5TUEVDSUZJRUQQABIiCh5BR0VOVF9UT09MX0NBTExfU1RBVFVTX1BFTkRJTkcQARImCiJBR0VOVF9UT09MX0NBTExfU1RBVFVTX0lOX1BST0dSRVNTEAISJAogQUdFTlRfVE9PTF9DQUxMX1NUQVRVU19DT01QTEVURUQQAxIhCh1BR0VOVF9UT09MX0NBTExfU1RBVFVTX0ZBSUxFRBAEKrQBChRBZ2VudFBsYW5FbnRyeVN0YXR1cxInCiNBR0VOVF9QTEFOX0VOVFJZX1NUQVRVU19VTlNQRUNJRklFRBAAEiMKH0FHRU5UX1BMQU5fRU5UUllfU1RBVFVTX1BFTkRJTkcQARInCiNBR0VOVF9QTEFOX0VOVFJZX1NUQVRVU19JTl9QUk9HUkVTUxACEiUKIUFHRU5UX1BMQU5fRU5UUllfU1RBVFVTX0NPTVBMRVRFRBADKoQBChRTZXNzaW9uSW5qZWN0aW9uS2luZBImCiJTRVNTSU9OX0lOSkVDVElPTl9LSU5EX1VOU1BFQ0lGSUVEEAASIAocU0VTU0lPTl9JTkpFQ1RJT05fS0lORF9TVEVFUhABEiIKHlNFU1NJT05fSU5KRUNUSU9OX0tJTkRfREVMSVZFUhACKnQKEFNlc3Npb25FcnJvcktpbmQSIgoeU0VTU0lPTl9FUlJPUl9LSU5EX1VOU1BFQ0lGSUVEEAASHAoYU0VTU0lPTl9FUlJPUl9LSU5EX0VSUk9SEAESHgoaU0VTU0lPTl9FUlJPUl9LSU5EX0FCT1JURUQQAirxAQoKSXNzdWVTdGF0ZRIbChdJU1NVRV9TVEFURV9VTlNQRUNJRklFRBAAEhcKE0lTU1VFX1NUQVRFX0JBQ0tMT0cQARIUChBJU1NVRV9TVEFURV9UT0RPEAISFgoSSVNTVUVfU1RBVEVfUVVFVUVEEAMSFwoTSVNTVUVfU1RBVEVfQkxPQ0tFRBAEEhsKF0lTU1VFX1NUQVRFX0lOX1BST0dSRVNTEAUSGQoVSVNTVUVfU1RBVEVfSU5fUkVWSUVXEAYSFAoQSVNTVUVfU1RBVEVfRE9ORRAHEhgKFElTU1VFX1NUQVRFX0FSQ0hJVkVEEAgqnAEKDUZvcmdlUHJvdmlkZXISHgoaRk9SR0VfUFJPVklERVJfVU5TUEVDSUZJRUQQABIZChVGT1JHRV9QUk9WSURFUl9HSVRIVUIQARIZChVGT1JHRV9QUk9WSURFUl9HSVRMQUIQAhIaChZGT1JHRV9QUk9WSURFUl9GT1JHRUpPEAMSGQoVRk9SR0VfUFJPVklERVJfTElORUFSEAQy0w4KDkNvbXBhc3NTZXJ2aWNlElQKDUdldFNlcnZlckluZm8SIC5jb21wYXNzLnYxLkdldFNlcnZlckluZm9SZXF1ZXN0GiEuY29tcGFzcy52MS5HZXRTZXJ2ZXJJbmZvUmVzcG9uc2USPwoGV2hvQW1JEhkuY29tcGFzcy52MS5XaG9BbUlSZXF1ZXN0GhouY29tcGFzcy52MS5XaG9BbUlSZXNwb25zZRJcCg9TdWJzY3JpYmVFdmVudHMSIi5jb21wYXNzLnYxLlN1YnNjcmliZUV2ZW50c1JlcXVlc3QaIy5jb21wYXNzLnYxLlN1YnNjcmliZUV2ZW50c1Jlc3BvbnNlMAESWgoPTGlzdEJvYXJkSXNzdWVzEiIuY29tcGFzcy52MS5MaXN0Qm9hcmRJc3N1ZXNSZXF1ZXN0GiMuY29tcGFzcy52MS5MaXN0Qm9hcmRJc3N1ZXNSZXNwb25zZRJyChdQcm92aXNpb25BZ2VudFdvcmtzcGFjZRIqLmNvbXBhc3MudjEuUHJvdmlzaW9uQWdlbnRXb3Jrc3BhY2VSZXF1ZXN0GisuY29tcGFzcy52MS5Qcm92aXNpb25BZ2VudFdvcmtzcGFjZVJlc3BvbnNlEmAKEVN0YXJ0QWdlbnRTZXNzaW9uEiQuY29tcGFzcy52MS5TdGFydEFnZW50U2Vzc2lvblJlcXVlc3QaJS5jb21wYXNzLnYxLlN0YXJ0QWdlbnRTZXNzaW9uUmVzcG9uc2USSwoKU3Bhd25BZ2VudBIdLmNvbXBhc3MudjEuU3Bhd25BZ2VudFJlcXVlc3QaHi5jb21wYXNzLnYxLlNwYXduQWdlbnRSZXNwb25zZRJdChBTdG9wQWdlbnRTZXNzaW9uEiMuY29tcGFzcy52MS5TdG9wQWdlbnRTZXNzaW9uUmVxdWVzdBokLmNvbXBhc3MudjEuU3RvcEFnZW50U2Vzc2lvblJlc3BvbnNlEmkKFFJlbW92ZUFnZW50V29ya3NwYWNlEicuY29tcGFzcy52MS5SZW1vdmVBZ2VudFdvcmtzcGFjZVJlcXVlc3QaKC5jb21wYXNzLnYxLlJlbW92ZUFnZW50V29ya3NwYWNlUmVzcG9uc2USYwoSUmVsb2FkQWdlbnRTZXNzaW9uEiUuY29tcGFzcy52MS5SZWxvYWRBZ2VudFNlc3Npb25SZXF1ZXN0GiYuY29tcGFzcy52MS5SZWxvYWRBZ2VudFNlc3Npb25SZXNwb25zZRJXCg5HZXRBZ2VudFN0YXR1cxIhLmNvbXBhc3MudjEuR2V0QWdlbnRTdGF0dXNSZXF1ZXN0GiIuY29tcGFzcy52MS5HZXRBZ2VudFN0YXR1c1Jlc3BvbnNlEmIKFVN1YnNjcmliZUFnZW50U2Vzc2lvbhIoLmNvbXBhc3MudjEuU3Vic2NyaWJlQWdlbnRTZXNzaW9uUmVxdWVzdBodLmNvbXBhc3MudjEuQWdlbnRTZXNzaW9uRnJhbWUwARJLCgpJc3N1ZVRva2VuEh0uY29tcGFzcy52MS5Jc3N1ZVRva2VuUmVxdWVzdBoeLmNvbXBhc3MudjEuSXNzdWVUb2tlblJlc3BvbnNlEk4KC1Jldm9rZVRva2VuEh4uY29tcGFzcy52MS5SZXZva2VUb2tlblJlcXVlc3QaHy5jb21wYXNzLnYxLlJldm9rZVRva2VuUmVzcG9uc2USVwoOUHV0QWdlbnRDb25maWcSIS5jb21wYXNzLnYxLlB1dEFnZW50Q29uZmlnUmVxdWVzdBoiLmNvbXBhc3MudjEuUHV0QWdlbnRDb25maWdSZXNwb25zZRJjChJHZXRBZ2VudENvbmZpZ0luZm8SJS5jb21wYXNzLnYxLkdldEFnZW50Q29uZmlnSW5mb1JlcXVlc3QaJi5jb21wYXNzLnYxLkdldEFnZW50Q29uZmlnSW5mb1Jlc3BvbnNlEmAKEURlbGV0ZUFnZW50Q29uZmlnEiQuY29tcGFzcy52MS5EZWxldGVBZ2VudENvbmZpZ1JlcXVlc3QaJS5jb21wYXNzLnYxLkRlbGV0ZUFnZW50Q29uZmlnUmVzcG9uc2USXQoQUHV0TW9kZWxSZWdpc3RyeRIjLmNvbXBhc3MudjEuUHV0TW9kZWxSZWdpc3RyeVJlcXVlc3QaJC5jb21wYXNzLnYxLlB1dE1vZGVsUmVnaXN0cnlSZXNwb25zZRJdChBHZXRNb2RlbFJlZ2lzdHJ5EiMuY29tcGFzcy52MS5HZXRNb2RlbFJlZ2lzdHJ5UmVxdWVzdBokLmNvbXBhc3MudjEuR2V0TW9kZWxSZWdpc3RyeVJlc3BvbnNlEmYKE0RlbGV0ZU1vZGVsUmVnaXN0cnkSJi5jb21wYXNzLnYxLkRlbGV0ZU1vZGVsUmVnaXN0cnlSZXF1ZXN0GicuY29tcGFzcy52MS5EZWxldGVNb2RlbFJlZ2lzdHJ5UmVzcG9uc2Uy3wIKDlNlY3JldHNTZXJ2aWNlEkgKCVNldFNlY3JldBIcLmNvbXBhc3MudjEuU2V0U2VjcmV0UmVxdWVzdBodLmNvbXBhc3MudjEuU2V0U2VjcmV0UmVzcG9uc2USTgoLTGlzdFNlY3JldHMSHi5jb21wYXNzLnYxLkxpc3RTZWNyZXRzUmVxdWVzdBofLmNvbXBhc3MudjEuTGlzdFNlY3JldHNSZXNwb25zZRJRCgxEZWxldGVTZWNyZXQSHy5jb21wYXNzLnYxLkRlbGV0ZVNlY3JldFJlcXVlc3QaIC5jb21wYXNzLnYxLkRlbGV0ZVNlY3JldFJlc3BvbnNlEmAKEUxpc3RTZXJ2ZXJTZWNyZXRzEiQuY29tcGFzcy52MS5MaXN0U2VydmVyU2VjcmV0c1JlcXVlc3QaJS5jb21wYXNzLnYxLkxpc3RTZXJ2ZXJTZWNyZXRzUmVzcG9uc2ViBnByb3RvMw", [file_google_protobuf_timestamp]); /** * @generated from message compass.v1.SetSecretRequest @@ -199,71 +199,6 @@ export type DeleteSecretResponse = Message<"compass.v1.DeleteSecretResponse"> & export const DeleteSecretResponseSchema: GenMessage = /*@__PURE__*/ messageDesc(file_compass_v1_compass, 6); -/** - * @generated from message compass.v1.SetServerSecretRequest - */ -export type SetServerSecretRequest = Message<"compass.v1.SetServerSecretRequest"> & { - /** - * @generated from field: string name = 1; - */ - name: string; - - /** - * @generated from field: string value = 2; - */ - value: string; -}; - -/** - * Describes the message compass.v1.SetServerSecretRequest. - * Use `create(SetServerSecretRequestSchema)` to create a new message. - */ -export const SetServerSecretRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 7); - -/** - * @generated from message compass.v1.SetServerSecretResponse - */ -export type SetServerSecretResponse = Message<"compass.v1.SetServerSecretResponse"> & { -}; - -/** - * Describes the message compass.v1.SetServerSecretResponse. - * Use `create(SetServerSecretResponseSchema)` to create a new message. - */ -export const SetServerSecretResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 8); - -/** - * @generated from message compass.v1.DeleteServerSecretRequest - */ -export type DeleteServerSecretRequest = Message<"compass.v1.DeleteServerSecretRequest"> & { - /** - * @generated from field: string name = 1; - */ - name: string; -}; - -/** - * Describes the message compass.v1.DeleteServerSecretRequest. - * Use `create(DeleteServerSecretRequestSchema)` to create a new message. - */ -export const DeleteServerSecretRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 9); - -/** - * @generated from message compass.v1.DeleteServerSecretResponse - */ -export type DeleteServerSecretResponse = Message<"compass.v1.DeleteServerSecretResponse"> & { -}; - -/** - * Describes the message compass.v1.DeleteServerSecretResponse. - * Use `create(DeleteServerSecretResponseSchema)` to create a new message. - */ -export const DeleteServerSecretResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 10); - /** * @generated from message compass.v1.ListServerSecretsRequest */ @@ -275,7 +210,7 @@ export type ListServerSecretsRequest = Message<"compass.v1.ListServerSecretsRequ * Use `create(ListServerSecretsRequestSchema)` to create a new message. */ export const ListServerSecretsRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 11); + messageDesc(file_compass_v1_compass, 7); /** * @generated from message compass.v1.ListServerSecretsResponse @@ -292,7 +227,7 @@ export type ListServerSecretsResponse = Message<"compass.v1.ListServerSecretsRes * Use `create(ListServerSecretsResponseSchema)` to create a new message. */ export const ListServerSecretsResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 12); + messageDesc(file_compass_v1_compass, 8); /** * A declared server secret's status — the name plus set/unset ONLY, and NEVER @@ -320,7 +255,7 @@ export type ServerSecretStatus = Message<"compass.v1.ServerSecretStatus"> & { * Use `create(ServerSecretStatusSchema)` to create a new message. */ export const ServerSecretStatusSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 13); + messageDesc(file_compass_v1_compass, 9); /** * @generated from message compass.v1.GetServerInfoRequest @@ -333,7 +268,7 @@ export type GetServerInfoRequest = Message<"compass.v1.GetServerInfoRequest"> & * Use `create(GetServerInfoRequestSchema)` to create a new message. */ export const GetServerInfoRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 14); + messageDesc(file_compass_v1_compass, 10); /** * @generated from message compass.v1.GetServerInfoResponse @@ -359,7 +294,7 @@ export type GetServerInfoResponse = Message<"compass.v1.GetServerInfoResponse"> * Use `create(GetServerInfoResponseSchema)` to create a new message. */ export const GetServerInfoResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 15); + messageDesc(file_compass_v1_compass, 11); /** * @generated from message compass.v1.WhoAmIRequest @@ -372,7 +307,7 @@ export type WhoAmIRequest = Message<"compass.v1.WhoAmIRequest"> & { * Use `create(WhoAmIRequestSchema)` to create a new message. */ export const WhoAmIRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 16); + messageDesc(file_compass_v1_compass, 12); /** * @generated from message compass.v1.WhoAmIResponse @@ -392,7 +327,7 @@ export type WhoAmIResponse = Message<"compass.v1.WhoAmIResponse"> & { * Use `create(WhoAmIResponseSchema)` to create a new message. */ export const WhoAmIResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 17); + messageDesc(file_compass_v1_compass, 13); /** * Subscribe to the server event stream. @@ -426,7 +361,7 @@ export type SubscribeEventsRequest = Message<"compass.v1.SubscribeEventsRequest" * Use `create(SubscribeEventsRequestSchema)` to create a new message. */ export const SubscribeEventsRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 18); + messageDesc(file_compass_v1_compass, 14); /** * One entry in the server event stream. @@ -551,7 +486,7 @@ export type SubscribeEventsResponse = Message<"compass.v1.SubscribeEventsRespons * Use `create(SubscribeEventsResponseSchema)` to create a new message. */ export const SubscribeEventsResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 19); + messageDesc(file_compass_v1_compass, 15); /** * The durable board re-snapshot read request. Single-shot by design: the read @@ -583,7 +518,7 @@ export type ListBoardIssuesRequest = Message<"compass.v1.ListBoardIssuesRequest" * Use `create(ListBoardIssuesRequestSchema)` to create a new message. */ export const ListBoardIssuesRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 20); + messageDesc(file_compass_v1_compass, 16); /** * The board as of the requested snapshot: every Compass Issue for the repo in @@ -605,7 +540,7 @@ export type ListBoardIssuesResponse = Message<"compass.v1.ListBoardIssuesRespons * Use `create(ListBoardIssuesResponseSchema)` to create a new message. */ export const ListBoardIssuesResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 21); + messageDesc(file_compass_v1_compass, 17); /** * The server's liveness state, pushed on connect and whenever it changes. @@ -624,7 +559,7 @@ export type ServerStatus = Message<"compass.v1.ServerStatus"> & { * Use `create(ServerStatusSchema)` to create a new message. */ export const ServerStatusSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 22); + messageDesc(file_compass_v1_compass, 18); /** * The requested `since_seq` predates the server's retained event buffer, so a @@ -642,7 +577,7 @@ export type ResyncRequired = Message<"compass.v1.ResyncRequired"> & { * Use `create(ResyncRequiredSchema)` to create a new message. */ export const ResyncRequiredSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 23); + messageDesc(file_compass_v1_compass, 19); /** * The lifecycle state of one agent session, pushed on every transition. @@ -699,7 +634,7 @@ export type AgentSessionStatus = Message<"compass.v1.AgentSessionStatus"> & { * Use `create(AgentSessionStatusSchema)` to create a new message. */ export const AgentSessionStatusSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 24); + messageDesc(file_compass_v1_compass, 20); /** * A chunk of the agent's message stream (assistant text / thought), relayed @@ -734,7 +669,7 @@ export type AgentMessageChunk = Message<"compass.v1.AgentMessageChunk"> & { * Use `create(AgentMessageChunkSchema)` to create a new message. */ export const AgentMessageChunkSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 25); + messageDesc(file_compass_v1_compass, 21); /** * A tool call the agent started or updated, relayed from the Runner's agent @@ -775,7 +710,7 @@ export type AgentToolCall = Message<"compass.v1.AgentToolCall"> & { * Use `create(AgentToolCallSchema)` to create a new message. */ export const AgentToolCallSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 26); + messageDesc(file_compass_v1_compass, 22); /** * The agent's current execution plan, relayed from the Runner's agent event @@ -800,7 +735,7 @@ export type AgentPlan = Message<"compass.v1.AgentPlan"> & { * Use `create(AgentPlanSchema)` to create a new message. */ export const AgentPlanSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 27); + messageDesc(file_compass_v1_compass, 23); /** * One step in an agent plan. @@ -824,7 +759,7 @@ export type AgentPlanEntry = Message<"compass.v1.AgentPlanEntry"> & { * Use `create(AgentPlanEntrySchema)` to create a new message. */ export const AgentPlanEntrySchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 28); + messageDesc(file_compass_v1_compass, 24); /** * The typed observation-trace event — the render contract for the UI's session @@ -912,7 +847,7 @@ export type SessionEvent = Message<"compass.v1.SessionEvent"> & { * Use `create(SessionEventSchema)` to create a new message. */ export const SessionEventSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 29); + messageDesc(file_compass_v1_compass, 25); /** * A chunk of the agent's user-facing message stream. message_id correlates the @@ -939,7 +874,7 @@ export type SessionAssistantText = Message<"compass.v1.SessionAssistantText"> & * Use `create(SessionAssistantTextSchema)` to create a new message. */ export const SessionAssistantTextSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 30); + messageDesc(file_compass_v1_compass, 26); /** * A chunk of the agent's internal-reasoning (thought) stream, correlated by @@ -964,7 +899,7 @@ export type SessionThinking = Message<"compass.v1.SessionThinking"> & { * Use `create(SessionThinkingSchema)` to create a new message. */ export const SessionThinkingSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 31); + messageDesc(file_compass_v1_compass, 27); /** * A tool call the agent started. Reuses AgentToolCallStatus rather than minting @@ -994,7 +929,7 @@ export type SessionToolCall = Message<"compass.v1.SessionToolCall"> & { * Use `create(SessionToolCallSchema)` to create a new message. */ export const SessionToolCallSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 32); + messageDesc(file_compass_v1_compass, 28); /** * An update to a running or finished tool call: its new status, any accumulated @@ -1030,7 +965,7 @@ export type SessionToolCallUpdate = Message<"compass.v1.SessionToolCallUpdate"> * Use `create(SessionToolCallUpdateSchema)` to create a new message. */ export const SessionToolCallUpdateSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 33); + messageDesc(file_compass_v1_compass, 29); /** * One file edit within a tool-call update. old_text absent = a file creation. @@ -1059,7 +994,7 @@ export type SessionFileDiff = Message<"compass.v1.SessionFileDiff"> & { * Use `create(SessionFileDiffSchema)` to create a new message. */ export const SessionFileDiffSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 34); + messageDesc(file_compass_v1_compass, 30); /** * The agent's current execution plan. Reuses AgentPlanEntry. @@ -1078,7 +1013,7 @@ export type SessionPlan = Message<"compass.v1.SessionPlan"> & { * Use `create(SessionPlanSchema)` to create a new message. */ export const SessionPlanSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 35); + messageDesc(file_compass_v1_compass, 31); /** * A free-standing notice in the trace (a status line or advisory), with an @@ -1103,7 +1038,7 @@ export type SessionNotice = Message<"compass.v1.SessionNotice"> & { * Use `create(SessionNoticeSchema)` to create a new message. */ export const SessionNoticeSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 36); + messageDesc(file_compass_v1_compass, 32); /** * A control injection into the agent's live session: the moment a channel @@ -1160,7 +1095,7 @@ export type SessionInjection = Message<"compass.v1.SessionInjection"> & { * Use `create(SessionInjectionSchema)` to create a new message. */ export const SessionInjectionSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 37); + messageDesc(file_compass_v1_compass, 33); /** * A turn-ending failure surfaced as session-trace content: an inner/provider @@ -1193,7 +1128,7 @@ export type SessionError = Message<"compass.v1.SessionError"> & { * Use `create(SessionErrorSchema)` to create a new message. */ export const SessionErrorSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 38); + messageDesc(file_compass_v1_compass, 34); /** * SubscribeAgentSession: the session whose typed observation trace to tail. @@ -1212,7 +1147,7 @@ export type SubscribeAgentSessionRequest = Message<"compass.v1.SubscribeAgentSes * Use `create(SubscribeAgentSessionRequestSchema)` to create a new message. */ export const SubscribeAgentSessionRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 39); + messageDesc(file_compass_v1_compass, 35); /** * One frame on the SubscribeAgentSession stream: a typed trace event, a @@ -1243,7 +1178,7 @@ export type AgentSessionFrame = Message<"compass.v1.AgentSessionFrame"> & { * Use `create(AgentSessionFrameSchema)` to create a new message. */ export const AgentSessionFrameSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 40); + messageDesc(file_compass_v1_compass, 36); /** * ProvisionAgentWorkspace: create the isolated per-agent container for a @@ -1322,7 +1257,7 @@ export type ProvisionAgentWorkspaceRequest = Message<"compass.v1.ProvisionAgentW * Use `create(ProvisionAgentWorkspaceRequestSchema)` to create a new message. */ export const ProvisionAgentWorkspaceRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 41); + messageDesc(file_compass_v1_compass, 37); /** * @generated from message compass.v1.ProvisionAgentWorkspaceResponse @@ -1342,7 +1277,7 @@ export type ProvisionAgentWorkspaceResponse = Message<"compass.v1.ProvisionAgent * Use `create(ProvisionAgentWorkspaceResponseSchema)` to create a new message. */ export const ProvisionAgentWorkspaceResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 42); + messageDesc(file_compass_v1_compass, 38); /** * RemoveAgentWorkspace: tear down the per-agent container and release its @@ -1374,7 +1309,7 @@ export type RemoveAgentWorkspaceRequest = Message<"compass.v1.RemoveAgentWorkspa * Use `create(RemoveAgentWorkspaceRequestSchema)` to create a new message. */ export const RemoveAgentWorkspaceRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 43); + messageDesc(file_compass_v1_compass, 39); /** * @generated from message compass.v1.RemoveAgentWorkspaceResponse @@ -1387,7 +1322,7 @@ export type RemoveAgentWorkspaceResponse = Message<"compass.v1.RemoveAgentWorksp * Use `create(RemoveAgentWorkspaceResponseSchema)` to create a new message. */ export const RemoveAgentWorkspaceResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 44); + messageDesc(file_compass_v1_compass, 40); /** * StartAgentSession: bring the first-party agent in a provisioned container @@ -1420,7 +1355,7 @@ export type StartAgentSessionRequest = Message<"compass.v1.StartAgentSessionRequ * Use `create(StartAgentSessionRequestSchema)` to create a new message. */ export const StartAgentSessionRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 45); + messageDesc(file_compass_v1_compass, 41); /** * @generated from message compass.v1.StartAgentSessionResponse @@ -1440,7 +1375,7 @@ export type StartAgentSessionResponse = Message<"compass.v1.StartAgentSessionRes * Use `create(StartAgentSessionResponseSchema)` to create a new message. */ export const StartAgentSessionResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 46); + messageDesc(file_compass_v1_compass, 42); /** * SpawnAgent: the composite start — Provision then Start under one @@ -1476,7 +1411,7 @@ export type SpawnAgentRequest = Message<"compass.v1.SpawnAgentRequest"> & { * Use `create(SpawnAgentRequestSchema)` to create a new message. */ export const SpawnAgentRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 47); + messageDesc(file_compass_v1_compass, 43); /** * @generated from message compass.v1.SpawnAgentResponse @@ -1505,7 +1440,7 @@ export type SpawnAgentResponse = Message<"compass.v1.SpawnAgentResponse"> & { * Use `create(SpawnAgentResponseSchema)` to create a new message. */ export const SpawnAgentResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 48); + messageDesc(file_compass_v1_compass, 44); /** * @generated from message compass.v1.StopAgentSessionRequest @@ -1522,7 +1457,7 @@ export type StopAgentSessionRequest = Message<"compass.v1.StopAgentSessionReques * Use `create(StopAgentSessionRequestSchema)` to create a new message. */ export const StopAgentSessionRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 49); + messageDesc(file_compass_v1_compass, 45); /** * @generated from message compass.v1.StopAgentSessionResponse @@ -1535,7 +1470,7 @@ export type StopAgentSessionResponse = Message<"compass.v1.StopAgentSessionRespo * Use `create(StopAgentSessionResponseSchema)` to create a new message. */ export const StopAgentSessionResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 50); + messageDesc(file_compass_v1_compass, 46); /** * @generated from message compass.v1.ReloadAgentSessionRequest @@ -1552,7 +1487,7 @@ export type ReloadAgentSessionRequest = Message<"compass.v1.ReloadAgentSessionRe * Use `create(ReloadAgentSessionRequestSchema)` to create a new message. */ export const ReloadAgentSessionRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 51); + messageDesc(file_compass_v1_compass, 47); /** * @generated from message compass.v1.ReloadAgentSessionResponse @@ -1571,7 +1506,7 @@ export type ReloadAgentSessionResponse = Message<"compass.v1.ReloadAgentSessionR * Use `create(ReloadAgentSessionResponseSchema)` to create a new message. */ export const ReloadAgentSessionResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 52); + messageDesc(file_compass_v1_compass, 48); /** * GetAgentStatus: one session when `session_id` is set, else every live one. @@ -1592,7 +1527,7 @@ export type GetAgentStatusRequest = Message<"compass.v1.GetAgentStatusRequest"> * Use `create(GetAgentStatusRequestSchema)` to create a new message. */ export const GetAgentStatusRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 53); + messageDesc(file_compass_v1_compass, 49); /** * @generated from message compass.v1.GetAgentStatusResponse @@ -1609,7 +1544,7 @@ export type GetAgentStatusResponse = Message<"compass.v1.GetAgentStatusResponse" * Use `create(GetAgentStatusResponseSchema)` to create a new message. */ export const GetAgentStatusResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 54); + messageDesc(file_compass_v1_compass, 50); /** * IssueToken: the admin-only path to mint a bearer token for an account. @@ -1632,7 +1567,7 @@ export type IssueTokenRequest = Message<"compass.v1.IssueTokenRequest"> & { * Use `create(IssueTokenRequestSchema)` to create a new message. */ export const IssueTokenRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 55); + messageDesc(file_compass_v1_compass, 51); /** * @generated from message compass.v1.IssueTokenResponse @@ -1653,7 +1588,7 @@ export type IssueTokenResponse = Message<"compass.v1.IssueTokenResponse"> & { * Use `create(IssueTokenResponseSchema)` to create a new message. */ export const IssueTokenResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 56); + messageDesc(file_compass_v1_compass, 52); /** * RevokeToken: the admin-only path to withdraw a bearer token by its value. @@ -1677,7 +1612,7 @@ export type RevokeTokenRequest = Message<"compass.v1.RevokeTokenRequest"> & { * Use `create(RevokeTokenRequestSchema)` to create a new message. */ export const RevokeTokenRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 57); + messageDesc(file_compass_v1_compass, 53); /** * @generated from message compass.v1.RevokeTokenResponse @@ -1690,7 +1625,7 @@ export type RevokeTokenResponse = Message<"compass.v1.RevokeTokenResponse"> & { * Use `create(RevokeTokenResponseSchema)` to create a new message. */ export const RevokeTokenResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 58); + messageDesc(file_compass_v1_compass, 54); /** * PutAgentConfig: declare the fleet config bundle. The caller's identity is the @@ -1713,7 +1648,7 @@ export type PutAgentConfigRequest = Message<"compass.v1.PutAgentConfigRequest"> * Use `create(PutAgentConfigRequestSchema)` to create a new message. */ export const PutAgentConfigRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 59); + messageDesc(file_compass_v1_compass, 55); /** * @generated from message compass.v1.PutAgentConfigResponse @@ -1734,7 +1669,7 @@ export type PutAgentConfigResponse = Message<"compass.v1.PutAgentConfigResponse" * Use `create(PutAgentConfigResponseSchema)` to create a new message. */ export const PutAgentConfigResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 60); + messageDesc(file_compass_v1_compass, 56); /** * @generated from message compass.v1.GetAgentConfigInfoRequest @@ -1747,7 +1682,7 @@ export type GetAgentConfigInfoRequest = Message<"compass.v1.GetAgentConfigInfoRe * Use `create(GetAgentConfigInfoRequestSchema)` to create a new message. */ export const GetAgentConfigInfoRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 61); + messageDesc(file_compass_v1_compass, 57); /** * GetAgentConfigInfo: the current bundle's version and member names by top dir — @@ -1834,7 +1769,7 @@ export type GetAgentConfigInfoResponse = Message<"compass.v1.GetAgentConfigInfoR * Use `create(GetAgentConfigInfoResponseSchema)` to create a new message. */ export const GetAgentConfigInfoResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 62); + messageDesc(file_compass_v1_compass, 58); /** * @generated from message compass.v1.DeleteAgentConfigRequest @@ -1847,7 +1782,7 @@ export type DeleteAgentConfigRequest = Message<"compass.v1.DeleteAgentConfigRequ * Use `create(DeleteAgentConfigRequestSchema)` to create a new message. */ export const DeleteAgentConfigRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 63); + messageDesc(file_compass_v1_compass, 59); /** * @generated from message compass.v1.DeleteAgentConfigResponse @@ -1860,7 +1795,7 @@ export type DeleteAgentConfigResponse = Message<"compass.v1.DeleteAgentConfigRes * Use `create(DeleteAgentConfigResponseSchema)` to create a new message. */ export const DeleteAgentConfigResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 64); + messageDesc(file_compass_v1_compass, 60); /** * One candidate in a stable name's ordered chain: an upstream (provider, @@ -1888,7 +1823,7 @@ export type ModelCandidate = Message<"compass.v1.ModelCandidate"> & { * Use `create(ModelCandidateSchema)` to create a new message. */ export const ModelCandidateSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 65); + messageDesc(file_compass_v1_compass, 61); /** * The listing metadata a stable name carries, taken from its primary candidate @@ -1932,7 +1867,7 @@ export type ModelMetadata = Message<"compass.v1.ModelMetadata"> & { * Use `create(ModelMetadataSchema)` to create a new message. */ export const ModelMetadataSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 66); + messageDesc(file_compass_v1_compass, 62); /** * One stable name's registry entry: a human display name, the ordered candidate @@ -1962,7 +1897,7 @@ export type ModelRegistryEntry = Message<"compass.v1.ModelRegistryEntry"> & { * Use `create(ModelRegistryEntrySchema)` to create a new message. */ export const ModelRegistryEntrySchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 67); + messageDesc(file_compass_v1_compass, 63); /** * The fleet model registry payload: the stable-name → entry map. The map key is @@ -1982,7 +1917,7 @@ export type ModelRegistry = Message<"compass.v1.ModelRegistry"> & { * Use `create(ModelRegistrySchema)` to create a new message. */ export const ModelRegistrySchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 68); + messageDesc(file_compass_v1_compass, 64); /** * PutModelRegistry: declare the fleet model registry. The caller's identity is @@ -2013,7 +1948,7 @@ export type PutModelRegistryRequest = Message<"compass.v1.PutModelRegistryReques * Use `create(PutModelRegistryRequestSchema)` to create a new message. */ export const PutModelRegistryRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 69); + messageDesc(file_compass_v1_compass, 65); /** * @generated from message compass.v1.PutModelRegistryResponse @@ -2032,7 +1967,7 @@ export type PutModelRegistryResponse = Message<"compass.v1.PutModelRegistryRespo * Use `create(PutModelRegistryResponseSchema)` to create a new message. */ export const PutModelRegistryResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 70); + messageDesc(file_compass_v1_compass, 66); /** * @generated from message compass.v1.GetModelRegistryRequest @@ -2045,7 +1980,7 @@ export type GetModelRegistryRequest = Message<"compass.v1.GetModelRegistryReques * Use `create(GetModelRegistryRequestSchema)` to create a new message. */ export const GetModelRegistryRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 71); + messageDesc(file_compass_v1_compass, 67); /** * GetModelRegistry: the current registry version and payload. An unconfigured @@ -2070,7 +2005,7 @@ export type GetModelRegistryResponse = Message<"compass.v1.GetModelRegistryRespo * Use `create(GetModelRegistryResponseSchema)` to create a new message. */ export const GetModelRegistryResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 72); + messageDesc(file_compass_v1_compass, 68); /** * @generated from message compass.v1.DeleteModelRegistryRequest @@ -2083,7 +2018,7 @@ export type DeleteModelRegistryRequest = Message<"compass.v1.DeleteModelRegistry * Use `create(DeleteModelRegistryRequestSchema)` to create a new message. */ export const DeleteModelRegistryRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 73); + messageDesc(file_compass_v1_compass, 69); /** * @generated from message compass.v1.DeleteModelRegistryResponse @@ -2096,7 +2031,7 @@ export type DeleteModelRegistryResponse = Message<"compass.v1.DeleteModelRegistr * Use `create(DeleteModelRegistryResponseSchema)` to create a new message. */ export const DeleteModelRegistryResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 74); + messageDesc(file_compass_v1_compass, 70); /** * The Compass agent attribution parsed from the owner header at ingestion — a @@ -2129,7 +2064,7 @@ export type AgentAttribution = Message<"compass.v1.AgentAttribution"> & { * Use `create(AgentAttributionSchema)` to create a new message. */ export const AgentAttributionSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 75); + messageDesc(file_compass_v1_compass, 71); /** * @generated from message compass.v1.ForgeRef @@ -2153,7 +2088,7 @@ export type ForgeRef = Message<"compass.v1.ForgeRef"> & { * Use `create(ForgeRefSchema)` to create a new message. */ export const ForgeRefSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 76); + messageDesc(file_compass_v1_compass, 72); /** * The board unit: a Compass Issue — the forge issue's fields PLUS the Compass @@ -2311,7 +2246,7 @@ export type Issue = Message<"compass.v1.Issue"> & { * Use `create(IssueSchema)` to create a new message. */ export const IssueSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 77); + messageDesc(file_compass_v1_compass, 73); /** * A Compass pull request: the forge PR's fields plus the Compass agent @@ -2418,7 +2353,7 @@ export type PullRequest = Message<"compass.v1.PullRequest"> & { * Use `create(PullRequestSchema)` to create a new message. */ export const PullRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 78); + messageDesc(file_compass_v1_compass, 74); /** * The rolled-up CI + status-check state on a PR head — Compass-owned, populated @@ -2450,7 +2385,7 @@ export type ChecksSummary = Message<"compass.v1.ChecksSummary"> & { * Use `create(ChecksSummarySchema)` to create a new message. */ export const ChecksSummarySchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 79); + messageDesc(file_compass_v1_compass, 75); /** * @generated from message compass.v1.Check @@ -2484,7 +2419,7 @@ export type Check = Message<"compass.v1.Check"> & { * Use `create(CheckSchema)` to create a new message. */ export const CheckSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 80); + messageDesc(file_compass_v1_compass, 76); /** * A PR diffstat (files/additions/deletions), carried on PullRequest — a @@ -2514,7 +2449,7 @@ export type ChangedStats = Message<"compass.v1.ChangedStats"> & { * Use `create(ChangedStatsSchema)` to create a new message. */ export const ChangedStatsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 81); + messageDesc(file_compass_v1_compass, 77); /** * The linked tracker issue — the projection target (DL-032); the @@ -2555,7 +2490,7 @@ export type TrackerRef = Message<"compass.v1.TrackerRef"> & { * Use `create(TrackerRefSchema)` to create a new message. */ export const TrackerRefSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 82); + messageDesc(file_compass_v1_compass, 78); /** * The full review state the right-sidebar PR pane shows — every submitted review @@ -2602,7 +2537,7 @@ export type Review = Message<"compass.v1.Review"> & { * Use `create(ReviewSchema)` to create a new message. */ export const ReviewSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 83); + messageDesc(file_compass_v1_compass, 79); /** * @generated from message compass.v1.ReviewThread @@ -2631,7 +2566,7 @@ export type ReviewThread = Message<"compass.v1.ReviewThread"> & { * Use `create(ReviewThreadSchema)` to create a new message. */ export const ReviewThreadSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 84); + messageDesc(file_compass_v1_compass, 80); /** * @generated from message compass.v1.Comment @@ -2658,7 +2593,7 @@ export type Comment = Message<"compass.v1.Comment"> & { * Use `create(CommentSchema)` to create a new message. */ export const CommentSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_compass_v1_compass, 85); + messageDesc(file_compass_v1_compass, 81); /** * How a resolved secret is delivered into the agent container. Mirrors @@ -3515,36 +3450,10 @@ export const SecretsService: GenService<{ input: typeof DeleteSecretRequestSchema; output: typeof DeleteSecretResponseSchema; }, - /** - * Declare a SERVER secret's registry row in the separate server_secrets - * registry and write its value via the server resolver. Admin-only. The - * name MUST carry a reserved server-secret prefix (SERVER_ or - * GATEWAY_CREDENTIALS_); an unprefixed name is rejected. `value` is never - * logged. Server secrets are never delivered into an agent container. - * - * @generated from rpc compass.v1.SecretsService.SetServerSecret - */ - setServerSecret: { - methodKind: "unary"; - input: typeof SetServerSecretRequestSchema; - output: typeof SetServerSecretResponseSchema; - }, - /** - * Remove a SERVER secret's registry row + value. Admin-only. The reserved - * master-key name is rejected (rotation is separate machinery, never a raw - * overwrite or delete). - * - * @generated from rpc compass.v1.SecretsService.DeleteServerSecret - */ - deleteServerSecret: { - methodKind: "unary"; - input: typeof DeleteServerSecretRequestSchema; - output: typeof DeleteServerSecretResponseSchema; - }, /** * List declared SERVER secrets by name with set/unset — names only, NEVER - * values. Admin-only, like its server-secret siblings: the rows are - * deployment-owned, so there is no per-account authorization to fall back on. + * values. Admin-only: the rows are deployment-owned, so there is no + * per-account authorization to fall back on. * Unlike ListSecrets, `is_set` is a PROVIDER PROBE, not a registry read: a * server secret's row is self-declared at every boot while its value lives in * the SecretSpec provider and is populated separately, so a declared name is diff --git a/proto/compass/v1/compass.proto b/proto/compass/v1/compass.proto index 58c6b9bdb..247b7bdc3 100644 --- a/proto/compass/v1/compass.proto +++ b/proto/compass/v1/compass.proto @@ -221,19 +221,9 @@ service SecretsService { rpc ListSecrets(ListSecretsRequest) returns (ListSecretsResponse); // Remove a secret's registry row + value. User-only. rpc DeleteSecret(DeleteSecretRequest) returns (DeleteSecretResponse); - // Declare a SERVER secret's registry row in the separate server_secrets - // registry and write its value via the server resolver. Admin-only. The - // name MUST carry a reserved server-secret prefix (SERVER_ or - // GATEWAY_CREDENTIALS_); an unprefixed name is rejected. `value` is never - // logged. Server secrets are never delivered into an agent container. - rpc SetServerSecret(SetServerSecretRequest) returns (SetServerSecretResponse); - // Remove a SERVER secret's registry row + value. Admin-only. The reserved - // master-key name is rejected (rotation is separate machinery, never a raw - // overwrite or delete). - rpc DeleteServerSecret(DeleteServerSecretRequest) returns (DeleteServerSecretResponse); // List declared SERVER secrets by name with set/unset — names only, NEVER - // values. Admin-only, like its server-secret siblings: the rows are - // deployment-owned, so there is no per-account authorization to fall back on. + // values. Admin-only: the rows are deployment-owned, so there is no + // per-account authorization to fall back on. // Unlike ListSecrets, `is_set` is a PROVIDER PROBE, not a registry read: a // server secret's row is self-declared at every boot while its value lives in // the SecretSpec provider and is populated separately, so a declared name is @@ -272,17 +262,6 @@ message DeleteSecretRequest { } message DeleteSecretResponse {} -message SetServerSecretRequest { - string name = 1; - string value = 2 [debug_redact = true]; -} -message SetServerSecretResponse {} - -message DeleteServerSecretRequest { - string name = 1; -} -message DeleteServerSecretResponse {} - message ListServerSecretsRequest {} message ListServerSecretsResponse { repeated ServerSecretStatus server_secrets = 1;