diff --git a/go/cmd/compass/main.go b/go/cmd/compass/main.go index 1c39965f..7bed9208 100644 --- a/go/cmd/compass/main.go +++ b/go/cmd/compass/main.go @@ -54,6 +54,7 @@ func newRootCmd() *cobra.Command { root.AddCommand(newAgentConfigCmd()) root.AddCommand(newMessageCmd()) root.AddCommand(newSecretCmd()) + root.AddCommand(newServerSecretCmd()) root.AddCommand(newTokenCmd()) return root } diff --git a/go/cmd/compass/secret.go b/go/cmd/compass/secret.go index 2defa048..899a88bf 100644 --- a/go/cmd/compass/secret.go +++ b/go/cmd/compass/secret.go @@ -120,6 +120,28 @@ 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. +// +// stdin is the only source by design: a value on argv would be visible in the +// host process list. +func readSecretValue(in io.Reader) (string, error) { + raw, err := io.ReadAll(io.LimitReader(in, maxSecretBytes+2)) + if err != nil { + return "", fmt.Errorf("reading secret value from stdin: %w", err) + } + value := strings.TrimSuffix(string(raw), "\n") + if len(value) > maxSecretBytes { + return "", fmt.Errorf("secret value exceeds the %d-byte limit: pipe a smaller value on stdin", maxSecretBytes) + } + if value == "" { + return "", errEmptySecretValue + } + return value, nil +} + // secretSetArgs is the resolved `secret set` input: the name and the routing // flags, parsed and validated before any RPC. type secretSetArgs struct { @@ -196,16 +218,9 @@ func runSecretSet(ctx context.Context, client compassv1connect.SecretsServiceCli if err != nil { return err } - raw, err := io.ReadAll(io.LimitReader(in, maxSecretBytes+2)) + value, err := readSecretValue(in) if err != nil { - return fmt.Errorf("reading secret value from stdin: %w", err) - } - value := strings.TrimSuffix(string(raw), "\n") - if len(value) > maxSecretBytes { - return fmt.Errorf("secret value exceeds the %d-byte limit: pipe a smaller value on stdin", maxSecretBytes) - } - if value == "" { - return errEmptySecretValue + return err } ctx, cancel := context.WithTimeout(ctx, rpcTimeout) diff --git a/go/cmd/compass/server_secret.go b/go/cmd/compass/server_secret.go new file mode 100644 index 00000000..89f79b92 --- /dev/null +++ b/go/cmd/compass/server_secret.go @@ -0,0 +1,196 @@ +//go:build unix + +package main + +import ( + "context" + "fmt" + "io" + "strings" + + "connectrpc.com/connect" + "github.com/spf13/cobra" + + compassv1 "github.com/RigelBuild/compass/go/gen/compass/v1" + "github.com/RigelBuild/compass/go/gen/compass/v1/compassv1connect" + "github.com/RigelBuild/compass/go/internal/store" +) + +// 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. +func newServerSecretCmd() *cobra.Command { + cmd := &cobra.Command{ + Use: "server-secret", + Short: "Manage deployment-owned server secrets (set / list)", + } + cmd.AddCommand(newServerSecretSetCmd(), 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 +// message, not an error. +func newServerSecretListCmd() *cobra.Command { + return &cobra.Command{ + Use: "list", + Short: "List declared server secrets with set/unset state (never values)", + Args: cobra.NoArgs, + RunE: func(cmd *cobra.Command, _ []string) error { + client, err := dialSecretsClient(cmd) + if err != nil { + return err + } + return runServerSecretList(cmd.Context(), client, cmd.OutOrStdout()) + }, + } +} + +// 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 a gateway-family row is refused rather than +// wrapped. `list` strips either 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 GATEWAY_CREDENTIALS_ 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.GatewayCredentialsPrefix+name == masterKeyCLIName { + 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, masterKeyCLIName) + } + return store.ServerSecretPrefix + name, nil +} + +// masterKeyCLIName mirrors the server's reserved master-key name +// (secrets_service.go's masterKeyName). Duplicated as a const rather than +// imported because the server package is not a CLI dependency; the pgtest +// suite covers the server-side refusal, and this only has to recognise the +// bare spelling `list` prints. +const masterKeyCLIName = store.GatewayCredentialsPrefix + "MASTER_KEY" + +// runServerSecretList calls ListServerSecrets and renders each declared server +// secret. An empty list renders a clear message, not an error. +// +// Unlike the user path, declared does NOT imply set: the Server self-declares +// every server-secret NAME at boot while the operator populates the VALUES +// separately, so the set/unset column is the whole point of the verb. +func runServerSecretList(ctx context.Context, client compassv1connect.SecretsServiceClient, out io.Writer) error { + ctx, cancel := context.WithTimeout(ctx, rpcTimeout) + defer cancel() + resp, err := client.ListServerSecrets(ctx, connect.NewRequest(&compassv1.ListServerSecretsRequest{})) + if err != nil { + return fmt.Errorf("listing server secrets: %w", err) + } + secrets := resp.Msg.GetServerSecrets() + if len(secrets) == 0 { + _, err = fmt.Fprintln(out, "no server secrets declared for this deployment") + return err + } + for _, s := range secrets { + if err := renderServerSecretStatus(out, s); err != nil { + return err + } + } + return nil +} + +// renderServerSecretStatus prints one server secret as ": set|unset". +// It NEVER prints a value — none is carried on the wire. +// +// The reserved prefix is STRIPPED so the bare name — the spelling the operator +// configures — starts the line. That is load-bearing beyond readability: the +// deployment's seed script matches each secret with a line-anchored +// "\n: " glob, which the stored prefixed form would never hit. +// +// EITHER reserved prefix is stripped, not just SERVER_: the master-key family +// carries GATEWAY_CREDENTIALS_ (secrets_service.go's masterKeyName) and is a +// real server_secrets row, so it lists here too. Stripping only one would print +// that row with its prefix intact while every other row appeared bare — the +// same output column meaning two different spellings. +func renderServerSecretStatus(out io.Writer, s *compassv1.ServerSecretStatus) error { + state := "unset" + if s.GetIsSet() { + state = "set" + } + _, err := fmt.Fprintf(out, "%s: %s\n", bareServerSecretName(s.GetName()), state) + return err +} + +// bareServerSecretName strips whichever reserved server-secret prefix a stored +// name carries, returning the spelling the operator configured. +func bareServerSecretName(name string) string { + for _, p := range []string{store.ServerSecretPrefix, store.GatewayCredentialsPrefix} { + if bare, ok := strings.CutPrefix(name, p); ok { + return bare + } + } + return name +} diff --git a/go/cmd/compass/server_secret_test.go b/go/cmd/compass/server_secret_test.go new file mode 100644 index 00000000..e1b8c867 --- /dev/null +++ b/go/cmd/compass/server_secret_test.go @@ -0,0 +1,238 @@ +//go:build unix + +package main + +import ( + "context" + "net/http" + "net/http/httptest" + "strings" + "testing" + + "connectrpc.com/connect" + + compassv1 "github.com/RigelBuild/compass/go/gen/compass/v1" + "github.com/RigelBuild/compass/go/gen/compass/v1/compassv1connect" +) + +// 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). +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 +} + +func (f *fakeServerSecrets) ListServerSecrets(_ context.Context, req *connect.Request[compassv1.ListServerSecretsRequest]) (*connect.Response[compassv1.ListServerSecretsResponse], error) { + f.gotAuth = req.Header().Get("Authorization") + list := f.list + if list == nil { + list = &compassv1.ListServerSecretsResponse{} + } + return connect.NewResponse(list), nil +} + +// startFakeServerSecretsServer stands up the fake SecretsService over a +// plain-HTTP httptest server and returns a client wired to it with the bearer +// interceptor. +func startFakeServerSecretsServer(t *testing.T, fake *fakeServerSecrets) compassv1connect.SecretsServiceClient { + t.Helper() + path, handler := compassv1connect.NewSecretsServiceHandler(fake) + mux := http.NewServeMux() + mux.Handle(path, handler) + srv := httptest.NewServer(mux) + t.Cleanup(srv.Close) + client, err := newSecretsClient(connConfig{serverAddr: srv.URL, token: "test-token"}) + if err != nil { + t.Fatalf("newSecretsClient: %v", err) + } + return client +} + +// TestRunServerSecretList asserts list renders ": set|unset" with the +// reserved prefix stripped and the bare name at LINE START — the exact shape the +// deployment's seed script matches with a "\n: " glob — and that declared +// but unpopulated names render unset (declared != set on the server path). +func TestRunServerSecretList(t *testing.T) { + fake := &fakeServerSecrets{list: &compassv1.ListServerSecretsResponse{ServerSecrets: []*compassv1.ServerSecretStatus{ + {Name: "SERVER_FORGE_APP_PEM", IsSet: true}, + {Name: "SERVER_LINEAR_WEBHOOK_SECRET", IsSet: false}, + }}} + client := startFakeServerSecretsServer(t, fake) + + var out strings.Builder + if err := runServerSecretList(context.Background(), client, &out); err != nil { + t.Fatalf("runServerSecretList: %v", err) + } + got := out.String() + // The seed script's glob is line-anchored, so assert the newline-prefixed + // form. Prefixing the whole output with "\n" lets the first line match the + // same anchored pattern as every later one. + for _, want := range []string{ + "\nFORGE_APP_PEM: set\n", + "\nLINEAR_WEBHOOK_SECRET: unset\n", + } { + if !strings.Contains("\n"+got, want) { + t.Errorf("list output %q is missing line-anchored %q", got, want) + } + } + if strings.Contains(got, "SERVER_") { + t.Errorf("list output %q leaks the reserved prefix; the bare name must start the line", got) + } + if fake.gotAuth != "Bearer test-token" { + t.Errorf("Authorization = %q, want Bearer test-token", fake.gotAuth) + } +} + +// TestRunServerSecretListStripsGatewayPrefix pins that the OTHER reserved +// prefix is stripped too. The master-key family is a real server_secrets row +// (secrets_service.go's masterKeyName), so it lists here; stripping only +// SERVER_ would print it prefixed while every sibling printed bare, and the +// seed script's line-anchored glob would miss it. +func TestRunServerSecretListStripsGatewayPrefix(t *testing.T) { + fake := &fakeServerSecrets{list: &compassv1.ListServerSecretsResponse{ServerSecrets: []*compassv1.ServerSecretStatus{ + {Name: "GATEWAY_CREDENTIALS_MASTER_KEY", IsSet: true}, + }}} + client := startFakeServerSecretsServer(t, fake) + + var out strings.Builder + if err := runServerSecretList(context.Background(), client, &out); err != nil { + t.Fatalf("runServerSecretList: %v", err) + } + got := out.String() + if want := "\nMASTER_KEY: set\n"; !strings.Contains("\n"+got, want) { + t.Errorf("list output %q is missing line-anchored %q", got, want) + } + if strings.Contains(got, "GATEWAY_CREDENTIALS_") { + t.Errorf("list output %q leaks the reserved prefix; the bare name must start the line", got) + } +} + +// TestRunServerSecretListEmpty asserts an empty registry renders a clear +// message, not an error. +func TestRunServerSecretListEmpty(t *testing.T) { + fake := &fakeServerSecrets{} + client := startFakeServerSecretsServer(t, fake) + + var out strings.Builder + if err := runServerSecretList(context.Background(), client, &out); err != nil { + t.Fatalf("runServerSecretList: %v", err) + } + if !strings.Contains(out.String(), "no server secrets declared") { + 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 either 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(), masterKeyCLIName) { + t.Errorf("error %q does not name %s, so it is not actionable", err, masterKeyCLIName) + } +} + +// TestRunServerSecretSetAcceptsFullGatewayName asserts the refusal is narrow: +// the FULL gateway name still reaches the server, which is what fail-closes on +// it (secrets_service.go's masterKeyName guard). The CLI must not become a +// second, divergent authority on which names are writable. +func TestRunServerSecretSetAcceptsFullGatewayName(t *testing.T) { + fake := &fakeServerSecrets{} + client := startFakeServerSecretsServer(t, fake) + + var out strings.Builder + in := strings.NewReader("s3cr3t\n") + if err := runServerSecretSet(context.Background(), client, masterKeyCLIName, 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() != masterKeyCLIName { + t.Errorf("name = %q, want %q unchanged", fake.gotSet.GetName(), masterKeyCLIName) + } +} + +// 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 6df72b00..a99e2117 100644 --- a/go/gen/compass/v1/compass.pb.go +++ b/go/gen/compass/v1/compass.pb.go @@ -1137,6 +1137,143 @@ 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 + sizeCache protoimpl.SizeCache +} + +func (x *ListServerSecretsRequest) Reset() { + *x = ListServerSecretsRequest{} + mi := &file_compass_v1_compass_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ListServerSecretsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListServerSecretsRequest) ProtoMessage() {} + +func (x *ListServerSecretsRequest) ProtoReflect() protoreflect.Message { + mi := &file_compass_v1_compass_proto_msgTypes[11] + 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 ListServerSecretsRequest.ProtoReflect.Descriptor instead. +func (*ListServerSecretsRequest) Descriptor() ([]byte, []int) { + return file_compass_v1_compass_proto_rawDescGZIP(), []int{11} +} + +type ListServerSecretsResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + ServerSecrets []*ServerSecretStatus `protobuf:"bytes,1,rep,name=server_secrets,json=serverSecrets,proto3" json:"server_secrets,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ListServerSecretsResponse) Reset() { + *x = ListServerSecretsResponse{} + mi := &file_compass_v1_compass_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ListServerSecretsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListServerSecretsResponse) ProtoMessage() {} + +func (x *ListServerSecretsResponse) ProtoReflect() protoreflect.Message { + mi := &file_compass_v1_compass_proto_msgTypes[12] + 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 ListServerSecretsResponse.ProtoReflect.Descriptor instead. +func (*ListServerSecretsResponse) Descriptor() ([]byte, []int) { + return file_compass_v1_compass_proto_rawDescGZIP(), []int{12} +} + +func (x *ListServerSecretsResponse) GetServerSecrets() []*ServerSecretStatus { + if x != nil { + return x.ServerSecrets + } + return nil +} + +// A declared server secret's status — the name plus set/unset ONLY, and NEVER +// the value. A server secret is deployment-owned and never container-delivered, +// so there is no delivery/kind routing to carry either. `name` is the STORED +// name, carrying its reserved server-secret prefix; stripping the prefix for +// display is the client's job, so the wire form stays unambiguous. +type ServerSecretStatus struct { + state protoimpl.MessageState `protogen:"open.v1"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + IsSet bool `protobuf:"varint,2,opt,name=is_set,json=isSet,proto3" json:"is_set,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ServerSecretStatus) Reset() { + *x = ServerSecretStatus{} + mi := &file_compass_v1_compass_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ServerSecretStatus) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ServerSecretStatus) ProtoMessage() {} + +func (x *ServerSecretStatus) ProtoReflect() protoreflect.Message { + mi := &file_compass_v1_compass_proto_msgTypes[13] + 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 ServerSecretStatus.ProtoReflect.Descriptor instead. +func (*ServerSecretStatus) Descriptor() ([]byte, []int) { + return file_compass_v1_compass_proto_rawDescGZIP(), []int{13} +} + +func (x *ServerSecretStatus) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *ServerSecretStatus) GetIsSet() bool { + if x != nil { + return x.IsSet + } + return false +} + type GetServerInfoRequest struct { state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields @@ -1145,7 +1282,7 @@ type GetServerInfoRequest struct { func (x *GetServerInfoRequest) Reset() { *x = GetServerInfoRequest{} - mi := &file_compass_v1_compass_proto_msgTypes[11] + mi := &file_compass_v1_compass_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1157,7 +1294,7 @@ func (x *GetServerInfoRequest) String() string { func (*GetServerInfoRequest) ProtoMessage() {} func (x *GetServerInfoRequest) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[11] + mi := &file_compass_v1_compass_proto_msgTypes[14] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1170,7 +1307,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{11} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{14} } type GetServerInfoResponse struct { @@ -1185,7 +1322,7 @@ type GetServerInfoResponse struct { func (x *GetServerInfoResponse) Reset() { *x = GetServerInfoResponse{} - mi := &file_compass_v1_compass_proto_msgTypes[12] + mi := &file_compass_v1_compass_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1197,7 +1334,7 @@ func (x *GetServerInfoResponse) String() string { func (*GetServerInfoResponse) ProtoMessage() {} func (x *GetServerInfoResponse) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[12] + mi := &file_compass_v1_compass_proto_msgTypes[15] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1210,7 +1347,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{12} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{15} } func (x *GetServerInfoResponse) GetVersion() string { @@ -1235,7 +1372,7 @@ type WhoAmIRequest struct { func (x *WhoAmIRequest) Reset() { *x = WhoAmIRequest{} - mi := &file_compass_v1_compass_proto_msgTypes[13] + mi := &file_compass_v1_compass_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1247,7 +1384,7 @@ func (x *WhoAmIRequest) String() string { func (*WhoAmIRequest) ProtoMessage() {} func (x *WhoAmIRequest) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[13] + mi := &file_compass_v1_compass_proto_msgTypes[16] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1260,7 +1397,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{13} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{16} } type WhoAmIResponse struct { @@ -1274,7 +1411,7 @@ type WhoAmIResponse struct { func (x *WhoAmIResponse) Reset() { *x = WhoAmIResponse{} - mi := &file_compass_v1_compass_proto_msgTypes[14] + mi := &file_compass_v1_compass_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1286,7 +1423,7 @@ func (x *WhoAmIResponse) String() string { func (*WhoAmIResponse) ProtoMessage() {} func (x *WhoAmIResponse) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[14] + mi := &file_compass_v1_compass_proto_msgTypes[17] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1299,7 +1436,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{14} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{17} } func (x *WhoAmIResponse) GetAccountId() string { @@ -1328,7 +1465,7 @@ type SubscribeEventsRequest struct { func (x *SubscribeEventsRequest) Reset() { *x = SubscribeEventsRequest{} - mi := &file_compass_v1_compass_proto_msgTypes[15] + mi := &file_compass_v1_compass_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1340,7 +1477,7 @@ func (x *SubscribeEventsRequest) String() string { func (*SubscribeEventsRequest) ProtoMessage() {} func (x *SubscribeEventsRequest) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[15] + mi := &file_compass_v1_compass_proto_msgTypes[18] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1353,7 +1490,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{15} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{18} } func (x *SubscribeEventsRequest) GetSinceSeq() uint64 { @@ -1422,7 +1559,7 @@ type SubscribeEventsResponse struct { func (x *SubscribeEventsResponse) Reset() { *x = SubscribeEventsResponse{} - mi := &file_compass_v1_compass_proto_msgTypes[16] + mi := &file_compass_v1_compass_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1434,7 +1571,7 @@ func (x *SubscribeEventsResponse) String() string { func (*SubscribeEventsResponse) ProtoMessage() {} func (x *SubscribeEventsResponse) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[16] + mi := &file_compass_v1_compass_proto_msgTypes[19] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1447,7 +1584,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{16} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{19} } func (x *SubscribeEventsResponse) GetSeq() uint64 { @@ -1625,7 +1762,7 @@ type ListBoardIssuesRequest struct { func (x *ListBoardIssuesRequest) Reset() { *x = ListBoardIssuesRequest{} - mi := &file_compass_v1_compass_proto_msgTypes[17] + mi := &file_compass_v1_compass_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1637,7 +1774,7 @@ func (x *ListBoardIssuesRequest) String() string { func (*ListBoardIssuesRequest) ProtoMessage() {} func (x *ListBoardIssuesRequest) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[17] + mi := &file_compass_v1_compass_proto_msgTypes[20] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1650,7 +1787,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{17} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{20} } func (x *ListBoardIssuesRequest) GetSnapshotSeq() uint64 { @@ -1673,7 +1810,7 @@ type ListBoardIssuesResponse struct { func (x *ListBoardIssuesResponse) Reset() { *x = ListBoardIssuesResponse{} - mi := &file_compass_v1_compass_proto_msgTypes[18] + mi := &file_compass_v1_compass_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1685,7 +1822,7 @@ func (x *ListBoardIssuesResponse) String() string { func (*ListBoardIssuesResponse) ProtoMessage() {} func (x *ListBoardIssuesResponse) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[18] + mi := &file_compass_v1_compass_proto_msgTypes[21] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1698,7 +1835,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{18} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{21} } func (x *ListBoardIssuesResponse) GetIssues() []*Issue { @@ -1718,7 +1855,7 @@ type ServerStatus struct { func (x *ServerStatus) Reset() { *x = ServerStatus{} - mi := &file_compass_v1_compass_proto_msgTypes[19] + mi := &file_compass_v1_compass_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1730,7 +1867,7 @@ func (x *ServerStatus) String() string { func (*ServerStatus) ProtoMessage() {} func (x *ServerStatus) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[19] + mi := &file_compass_v1_compass_proto_msgTypes[22] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1743,7 +1880,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{19} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{22} } func (x *ServerStatus) GetState() ServerState { @@ -1765,7 +1902,7 @@ type ResyncRequired struct { func (x *ResyncRequired) Reset() { *x = ResyncRequired{} - mi := &file_compass_v1_compass_proto_msgTypes[20] + mi := &file_compass_v1_compass_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1777,7 +1914,7 @@ func (x *ResyncRequired) String() string { func (*ResyncRequired) ProtoMessage() {} func (x *ResyncRequired) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[20] + mi := &file_compass_v1_compass_proto_msgTypes[23] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1790,7 +1927,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{20} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{23} } // The lifecycle state of one agent session, pushed on every transition. @@ -1813,7 +1950,7 @@ type AgentSessionStatus struct { func (x *AgentSessionStatus) Reset() { *x = AgentSessionStatus{} - mi := &file_compass_v1_compass_proto_msgTypes[21] + mi := &file_compass_v1_compass_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1825,7 +1962,7 @@ func (x *AgentSessionStatus) String() string { func (*AgentSessionStatus) ProtoMessage() {} func (x *AgentSessionStatus) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[21] + mi := &file_compass_v1_compass_proto_msgTypes[24] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1838,7 +1975,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{21} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{24} } func (x *AgentSessionStatus) GetSessionId() string { @@ -1878,7 +2015,7 @@ type AgentMessageChunk struct { func (x *AgentMessageChunk) Reset() { *x = AgentMessageChunk{} - mi := &file_compass_v1_compass_proto_msgTypes[22] + mi := &file_compass_v1_compass_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1890,7 +2027,7 @@ func (x *AgentMessageChunk) String() string { func (*AgentMessageChunk) ProtoMessage() {} func (x *AgentMessageChunk) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[22] + mi := &file_compass_v1_compass_proto_msgTypes[25] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1903,7 +2040,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{22} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{25} } func (x *AgentMessageChunk) GetSessionId() string { @@ -1944,7 +2081,7 @@ type AgentToolCall struct { func (x *AgentToolCall) Reset() { *x = AgentToolCall{} - mi := &file_compass_v1_compass_proto_msgTypes[23] + mi := &file_compass_v1_compass_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1956,7 +2093,7 @@ func (x *AgentToolCall) String() string { func (*AgentToolCall) ProtoMessage() {} func (x *AgentToolCall) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[23] + mi := &file_compass_v1_compass_proto_msgTypes[26] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1969,7 +2106,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{23} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{26} } func (x *AgentToolCall) GetSessionId() string { @@ -2012,7 +2149,7 @@ type AgentPlan struct { func (x *AgentPlan) Reset() { *x = AgentPlan{} - mi := &file_compass_v1_compass_proto_msgTypes[24] + mi := &file_compass_v1_compass_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2024,7 +2161,7 @@ func (x *AgentPlan) String() string { func (*AgentPlan) ProtoMessage() {} func (x *AgentPlan) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[24] + mi := &file_compass_v1_compass_proto_msgTypes[27] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2037,7 +2174,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{24} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{27} } func (x *AgentPlan) GetSessionId() string { @@ -2065,7 +2202,7 @@ type AgentPlanEntry struct { func (x *AgentPlanEntry) Reset() { *x = AgentPlanEntry{} - mi := &file_compass_v1_compass_proto_msgTypes[25] + mi := &file_compass_v1_compass_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2077,7 +2214,7 @@ func (x *AgentPlanEntry) String() string { func (*AgentPlanEntry) ProtoMessage() {} func (x *AgentPlanEntry) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[25] + mi := &file_compass_v1_compass_proto_msgTypes[28] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2090,7 +2227,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{25} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{28} } func (x *AgentPlanEntry) GetContent() string { @@ -2138,7 +2275,7 @@ type SessionEvent struct { func (x *SessionEvent) Reset() { *x = SessionEvent{} - mi := &file_compass_v1_compass_proto_msgTypes[26] + mi := &file_compass_v1_compass_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2150,7 +2287,7 @@ func (x *SessionEvent) String() string { func (*SessionEvent) ProtoMessage() {} func (x *SessionEvent) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[26] + mi := &file_compass_v1_compass_proto_msgTypes[29] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2163,7 +2300,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{26} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{29} } func (x *SessionEvent) GetEventId() string { @@ -2325,7 +2462,7 @@ type SessionAssistantText struct { func (x *SessionAssistantText) Reset() { *x = SessionAssistantText{} - mi := &file_compass_v1_compass_proto_msgTypes[27] + mi := &file_compass_v1_compass_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2337,7 +2474,7 @@ func (x *SessionAssistantText) String() string { func (*SessionAssistantText) ProtoMessage() {} func (x *SessionAssistantText) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[27] + mi := &file_compass_v1_compass_proto_msgTypes[30] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2350,7 +2487,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{27} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{30} } func (x *SessionAssistantText) GetText() string { @@ -2379,7 +2516,7 @@ type SessionThinking struct { func (x *SessionThinking) Reset() { *x = SessionThinking{} - mi := &file_compass_v1_compass_proto_msgTypes[28] + mi := &file_compass_v1_compass_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2391,7 +2528,7 @@ func (x *SessionThinking) String() string { func (*SessionThinking) ProtoMessage() {} func (x *SessionThinking) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[28] + mi := &file_compass_v1_compass_proto_msgTypes[31] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2404,7 +2541,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{28} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{31} } func (x *SessionThinking) GetText() string { @@ -2434,7 +2571,7 @@ type SessionToolCall struct { func (x *SessionToolCall) Reset() { *x = SessionToolCall{} - mi := &file_compass_v1_compass_proto_msgTypes[29] + mi := &file_compass_v1_compass_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2446,7 +2583,7 @@ func (x *SessionToolCall) String() string { func (*SessionToolCall) ProtoMessage() {} func (x *SessionToolCall) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[29] + mi := &file_compass_v1_compass_proto_msgTypes[32] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2459,7 +2596,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{29} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{32} } func (x *SessionToolCall) GetToolCallId() string { @@ -2498,7 +2635,7 @@ type SessionToolCallUpdate struct { func (x *SessionToolCallUpdate) Reset() { *x = SessionToolCallUpdate{} - mi := &file_compass_v1_compass_proto_msgTypes[30] + mi := &file_compass_v1_compass_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2510,7 +2647,7 @@ func (x *SessionToolCallUpdate) String() string { func (*SessionToolCallUpdate) ProtoMessage() {} func (x *SessionToolCallUpdate) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[30] + mi := &file_compass_v1_compass_proto_msgTypes[33] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2523,7 +2660,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{30} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{33} } func (x *SessionToolCallUpdate) GetToolCallId() string { @@ -2566,7 +2703,7 @@ type SessionFileDiff struct { func (x *SessionFileDiff) Reset() { *x = SessionFileDiff{} - mi := &file_compass_v1_compass_proto_msgTypes[31] + mi := &file_compass_v1_compass_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2578,7 +2715,7 @@ func (x *SessionFileDiff) String() string { func (*SessionFileDiff) ProtoMessage() {} func (x *SessionFileDiff) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[31] + mi := &file_compass_v1_compass_proto_msgTypes[34] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2591,7 +2728,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{31} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{34} } func (x *SessionFileDiff) GetPath() string { @@ -2625,7 +2762,7 @@ type SessionPlan struct { func (x *SessionPlan) Reset() { *x = SessionPlan{} - mi := &file_compass_v1_compass_proto_msgTypes[32] + mi := &file_compass_v1_compass_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2637,7 +2774,7 @@ func (x *SessionPlan) String() string { func (*SessionPlan) ProtoMessage() {} func (x *SessionPlan) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[32] + mi := &file_compass_v1_compass_proto_msgTypes[35] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2650,7 +2787,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{32} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{35} } func (x *SessionPlan) GetEntries() []*AgentPlanEntry { @@ -2672,7 +2809,7 @@ type SessionNotice struct { func (x *SessionNotice) Reset() { *x = SessionNotice{} - mi := &file_compass_v1_compass_proto_msgTypes[33] + mi := &file_compass_v1_compass_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2684,7 +2821,7 @@ func (x *SessionNotice) String() string { func (*SessionNotice) ProtoMessage() {} func (x *SessionNotice) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[33] + mi := &file_compass_v1_compass_proto_msgTypes[36] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2697,7 +2834,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{33} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{36} } func (x *SessionNotice) GetText() string { @@ -2746,7 +2883,7 @@ type SessionInjection struct { func (x *SessionInjection) Reset() { *x = SessionInjection{} - mi := &file_compass_v1_compass_proto_msgTypes[34] + mi := &file_compass_v1_compass_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2758,7 +2895,7 @@ func (x *SessionInjection) String() string { func (*SessionInjection) ProtoMessage() {} func (x *SessionInjection) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[34] + mi := &file_compass_v1_compass_proto_msgTypes[37] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2771,7 +2908,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{34} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{37} } func (x *SessionInjection) GetOpKind() SessionInjectionKind { @@ -2818,7 +2955,7 @@ type SessionError struct { func (x *SessionError) Reset() { *x = SessionError{} - mi := &file_compass_v1_compass_proto_msgTypes[35] + mi := &file_compass_v1_compass_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2830,7 +2967,7 @@ func (x *SessionError) String() string { func (*SessionError) ProtoMessage() {} func (x *SessionError) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[35] + mi := &file_compass_v1_compass_proto_msgTypes[38] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2843,7 +2980,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{35} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{38} } func (x *SessionError) GetKind() SessionErrorKind { @@ -2877,7 +3014,7 @@ type SubscribeAgentSessionRequest struct { func (x *SubscribeAgentSessionRequest) Reset() { *x = SubscribeAgentSessionRequest{} - mi := &file_compass_v1_compass_proto_msgTypes[36] + mi := &file_compass_v1_compass_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2889,7 +3026,7 @@ func (x *SubscribeAgentSessionRequest) String() string { func (*SubscribeAgentSessionRequest) ProtoMessage() {} func (x *SubscribeAgentSessionRequest) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[36] + mi := &file_compass_v1_compass_proto_msgTypes[39] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2902,7 +3039,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{36} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{39} } func (x *SubscribeAgentSessionRequest) GetSessionId() string { @@ -2926,7 +3063,7 @@ type AgentSessionFrame struct { func (x *AgentSessionFrame) Reset() { *x = AgentSessionFrame{} - mi := &file_compass_v1_compass_proto_msgTypes[37] + mi := &file_compass_v1_compass_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2938,7 +3075,7 @@ func (x *AgentSessionFrame) String() string { func (*AgentSessionFrame) ProtoMessage() {} func (x *AgentSessionFrame) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[37] + mi := &file_compass_v1_compass_proto_msgTypes[40] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2951,7 +3088,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{37} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{40} } func (x *AgentSessionFrame) GetSessionId() string { @@ -3029,7 +3166,7 @@ type ProvisionAgentWorkspaceRequest struct { func (x *ProvisionAgentWorkspaceRequest) Reset() { *x = ProvisionAgentWorkspaceRequest{} - mi := &file_compass_v1_compass_proto_msgTypes[38] + mi := &file_compass_v1_compass_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3041,7 +3178,7 @@ func (x *ProvisionAgentWorkspaceRequest) String() string { func (*ProvisionAgentWorkspaceRequest) ProtoMessage() {} func (x *ProvisionAgentWorkspaceRequest) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[38] + mi := &file_compass_v1_compass_proto_msgTypes[41] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3054,7 +3191,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{38} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{41} } func (x *ProvisionAgentWorkspaceRequest) GetAgentHandle() string { @@ -3096,7 +3233,7 @@ type ProvisionAgentWorkspaceResponse struct { func (x *ProvisionAgentWorkspaceResponse) Reset() { *x = ProvisionAgentWorkspaceResponse{} - mi := &file_compass_v1_compass_proto_msgTypes[39] + mi := &file_compass_v1_compass_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3108,7 +3245,7 @@ func (x *ProvisionAgentWorkspaceResponse) String() string { func (*ProvisionAgentWorkspaceResponse) ProtoMessage() {} func (x *ProvisionAgentWorkspaceResponse) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[39] + mi := &file_compass_v1_compass_proto_msgTypes[42] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3121,7 +3258,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{39} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{42} } func (x *ProvisionAgentWorkspaceResponse) GetContainerName() string { @@ -3148,7 +3285,7 @@ type RemoveAgentWorkspaceRequest struct { func (x *RemoveAgentWorkspaceRequest) Reset() { *x = RemoveAgentWorkspaceRequest{} - mi := &file_compass_v1_compass_proto_msgTypes[40] + mi := &file_compass_v1_compass_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3160,7 +3297,7 @@ func (x *RemoveAgentWorkspaceRequest) String() string { func (*RemoveAgentWorkspaceRequest) ProtoMessage() {} func (x *RemoveAgentWorkspaceRequest) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[40] + mi := &file_compass_v1_compass_proto_msgTypes[43] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3173,7 +3310,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{40} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{43} } func (x *RemoveAgentWorkspaceRequest) GetContainerName() string { @@ -3198,7 +3335,7 @@ type RemoveAgentWorkspaceResponse struct { func (x *RemoveAgentWorkspaceResponse) Reset() { *x = RemoveAgentWorkspaceResponse{} - mi := &file_compass_v1_compass_proto_msgTypes[41] + mi := &file_compass_v1_compass_proto_msgTypes[44] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3210,7 +3347,7 @@ func (x *RemoveAgentWorkspaceResponse) String() string { func (*RemoveAgentWorkspaceResponse) ProtoMessage() {} func (x *RemoveAgentWorkspaceResponse) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[41] + mi := &file_compass_v1_compass_proto_msgTypes[44] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3223,7 +3360,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{41} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{44} } // StartAgentSession: bring the first-party agent in a provisioned container @@ -3244,7 +3381,7 @@ type StartAgentSessionRequest struct { func (x *StartAgentSessionRequest) Reset() { *x = StartAgentSessionRequest{} - mi := &file_compass_v1_compass_proto_msgTypes[42] + mi := &file_compass_v1_compass_proto_msgTypes[45] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3256,7 +3393,7 @@ func (x *StartAgentSessionRequest) String() string { func (*StartAgentSessionRequest) ProtoMessage() {} func (x *StartAgentSessionRequest) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[42] + mi := &file_compass_v1_compass_proto_msgTypes[45] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3269,7 +3406,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{42} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{45} } func (x *StartAgentSessionRequest) GetContainerName() string { @@ -3297,7 +3434,7 @@ type StartAgentSessionResponse struct { func (x *StartAgentSessionResponse) Reset() { *x = StartAgentSessionResponse{} - mi := &file_compass_v1_compass_proto_msgTypes[43] + mi := &file_compass_v1_compass_proto_msgTypes[46] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3309,7 +3446,7 @@ func (x *StartAgentSessionResponse) String() string { func (*StartAgentSessionResponse) ProtoMessage() {} func (x *StartAgentSessionResponse) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[43] + mi := &file_compass_v1_compass_proto_msgTypes[46] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3322,7 +3459,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{43} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{46} } func (x *StartAgentSessionResponse) GetSessionId() string { @@ -3353,7 +3490,7 @@ type SpawnAgentRequest struct { func (x *SpawnAgentRequest) Reset() { *x = SpawnAgentRequest{} - mi := &file_compass_v1_compass_proto_msgTypes[44] + mi := &file_compass_v1_compass_proto_msgTypes[47] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3365,7 +3502,7 @@ func (x *SpawnAgentRequest) String() string { func (*SpawnAgentRequest) ProtoMessage() {} func (x *SpawnAgentRequest) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[44] + mi := &file_compass_v1_compass_proto_msgTypes[47] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3378,7 +3515,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{44} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{47} } func (x *SpawnAgentRequest) GetAgentHandle() string { @@ -3410,7 +3547,7 @@ type SpawnAgentResponse struct { func (x *SpawnAgentResponse) Reset() { *x = SpawnAgentResponse{} - mi := &file_compass_v1_compass_proto_msgTypes[45] + mi := &file_compass_v1_compass_proto_msgTypes[48] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3422,7 +3559,7 @@ func (x *SpawnAgentResponse) String() string { func (*SpawnAgentResponse) ProtoMessage() {} func (x *SpawnAgentResponse) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[45] + mi := &file_compass_v1_compass_proto_msgTypes[48] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3435,7 +3572,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{45} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{48} } func (x *SpawnAgentResponse) GetSessionId() string { @@ -3461,7 +3598,7 @@ type StopAgentSessionRequest struct { func (x *StopAgentSessionRequest) Reset() { *x = StopAgentSessionRequest{} - mi := &file_compass_v1_compass_proto_msgTypes[46] + mi := &file_compass_v1_compass_proto_msgTypes[49] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3473,7 +3610,7 @@ func (x *StopAgentSessionRequest) String() string { func (*StopAgentSessionRequest) ProtoMessage() {} func (x *StopAgentSessionRequest) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[46] + mi := &file_compass_v1_compass_proto_msgTypes[49] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3486,7 +3623,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{46} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{49} } func (x *StopAgentSessionRequest) GetSessionId() string { @@ -3504,7 +3641,7 @@ type StopAgentSessionResponse struct { func (x *StopAgentSessionResponse) Reset() { *x = StopAgentSessionResponse{} - mi := &file_compass_v1_compass_proto_msgTypes[47] + mi := &file_compass_v1_compass_proto_msgTypes[50] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3516,7 +3653,7 @@ func (x *StopAgentSessionResponse) String() string { func (*StopAgentSessionResponse) ProtoMessage() {} func (x *StopAgentSessionResponse) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[47] + mi := &file_compass_v1_compass_proto_msgTypes[50] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3529,7 +3666,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{47} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{50} } type ReloadAgentSessionRequest struct { @@ -3541,7 +3678,7 @@ type ReloadAgentSessionRequest struct { func (x *ReloadAgentSessionRequest) Reset() { *x = ReloadAgentSessionRequest{} - mi := &file_compass_v1_compass_proto_msgTypes[48] + mi := &file_compass_v1_compass_proto_msgTypes[51] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3553,7 +3690,7 @@ func (x *ReloadAgentSessionRequest) String() string { func (*ReloadAgentSessionRequest) ProtoMessage() {} func (x *ReloadAgentSessionRequest) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[48] + mi := &file_compass_v1_compass_proto_msgTypes[51] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3566,7 +3703,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{48} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{51} } func (x *ReloadAgentSessionRequest) GetSessionId() string { @@ -3586,7 +3723,7 @@ type ReloadAgentSessionResponse struct { func (x *ReloadAgentSessionResponse) Reset() { *x = ReloadAgentSessionResponse{} - mi := &file_compass_v1_compass_proto_msgTypes[49] + mi := &file_compass_v1_compass_proto_msgTypes[52] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3598,7 +3735,7 @@ func (x *ReloadAgentSessionResponse) String() string { func (*ReloadAgentSessionResponse) ProtoMessage() {} func (x *ReloadAgentSessionResponse) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[49] + mi := &file_compass_v1_compass_proto_msgTypes[52] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3611,7 +3748,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{49} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{52} } func (x *ReloadAgentSessionResponse) GetSessionId() string { @@ -3632,7 +3769,7 @@ type GetAgentStatusRequest struct { func (x *GetAgentStatusRequest) Reset() { *x = GetAgentStatusRequest{} - mi := &file_compass_v1_compass_proto_msgTypes[50] + mi := &file_compass_v1_compass_proto_msgTypes[53] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3644,7 +3781,7 @@ func (x *GetAgentStatusRequest) String() string { func (*GetAgentStatusRequest) ProtoMessage() {} func (x *GetAgentStatusRequest) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[50] + mi := &file_compass_v1_compass_proto_msgTypes[53] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3657,7 +3794,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{50} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{53} } func (x *GetAgentStatusRequest) GetSessionId() string { @@ -3676,7 +3813,7 @@ type GetAgentStatusResponse struct { func (x *GetAgentStatusResponse) Reset() { *x = GetAgentStatusResponse{} - mi := &file_compass_v1_compass_proto_msgTypes[51] + mi := &file_compass_v1_compass_proto_msgTypes[54] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3688,7 +3825,7 @@ func (x *GetAgentStatusResponse) String() string { func (*GetAgentStatusResponse) ProtoMessage() {} func (x *GetAgentStatusResponse) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[51] + mi := &file_compass_v1_compass_proto_msgTypes[54] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3701,7 +3838,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{51} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{54} } func (x *GetAgentStatusResponse) GetStatuses() []*AgentSessionStatus { @@ -3724,7 +3861,7 @@ type IssueTokenRequest struct { func (x *IssueTokenRequest) Reset() { *x = IssueTokenRequest{} - mi := &file_compass_v1_compass_proto_msgTypes[52] + mi := &file_compass_v1_compass_proto_msgTypes[55] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3736,7 +3873,7 @@ func (x *IssueTokenRequest) String() string { func (*IssueTokenRequest) ProtoMessage() {} func (x *IssueTokenRequest) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[52] + mi := &file_compass_v1_compass_proto_msgTypes[55] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3749,7 +3886,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{52} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{55} } func (x *IssueTokenRequest) GetAccountHandle() string { @@ -3771,7 +3908,7 @@ type IssueTokenResponse struct { func (x *IssueTokenResponse) Reset() { *x = IssueTokenResponse{} - mi := &file_compass_v1_compass_proto_msgTypes[53] + mi := &file_compass_v1_compass_proto_msgTypes[56] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3783,7 +3920,7 @@ func (x *IssueTokenResponse) String() string { func (*IssueTokenResponse) ProtoMessage() {} func (x *IssueTokenResponse) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[53] + mi := &file_compass_v1_compass_proto_msgTypes[56] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3796,7 +3933,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{53} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{56} } func (x *IssueTokenResponse) GetToken() string { @@ -3820,7 +3957,7 @@ type RevokeTokenRequest struct { func (x *RevokeTokenRequest) Reset() { *x = RevokeTokenRequest{} - mi := &file_compass_v1_compass_proto_msgTypes[54] + mi := &file_compass_v1_compass_proto_msgTypes[57] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3832,7 +3969,7 @@ func (x *RevokeTokenRequest) String() string { func (*RevokeTokenRequest) ProtoMessage() {} func (x *RevokeTokenRequest) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[54] + mi := &file_compass_v1_compass_proto_msgTypes[57] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3845,7 +3982,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{54} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{57} } func (x *RevokeTokenRequest) GetToken() string { @@ -3863,7 +4000,7 @@ type RevokeTokenResponse struct { func (x *RevokeTokenResponse) Reset() { *x = RevokeTokenResponse{} - mi := &file_compass_v1_compass_proto_msgTypes[55] + mi := &file_compass_v1_compass_proto_msgTypes[58] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3875,7 +4012,7 @@ func (x *RevokeTokenResponse) String() string { func (*RevokeTokenResponse) ProtoMessage() {} func (x *RevokeTokenResponse) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[55] + mi := &file_compass_v1_compass_proto_msgTypes[58] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3888,7 +4025,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{55} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{58} } // PutAgentConfig: declare the fleet config bundle. The caller's identity is the @@ -3904,7 +4041,7 @@ type PutAgentConfigRequest struct { func (x *PutAgentConfigRequest) Reset() { *x = PutAgentConfigRequest{} - mi := &file_compass_v1_compass_proto_msgTypes[56] + mi := &file_compass_v1_compass_proto_msgTypes[59] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3916,7 +4053,7 @@ func (x *PutAgentConfigRequest) String() string { func (*PutAgentConfigRequest) ProtoMessage() {} func (x *PutAgentConfigRequest) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[56] + mi := &file_compass_v1_compass_proto_msgTypes[59] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3929,7 +4066,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{56} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{59} } func (x *PutAgentConfigRequest) GetBundle() []byte { @@ -3951,7 +4088,7 @@ type PutAgentConfigResponse struct { func (x *PutAgentConfigResponse) Reset() { *x = PutAgentConfigResponse{} - mi := &file_compass_v1_compass_proto_msgTypes[57] + mi := &file_compass_v1_compass_proto_msgTypes[60] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3963,7 +4100,7 @@ func (x *PutAgentConfigResponse) String() string { func (*PutAgentConfigResponse) ProtoMessage() {} func (x *PutAgentConfigResponse) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[57] + mi := &file_compass_v1_compass_proto_msgTypes[60] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3976,7 +4113,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{57} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{60} } func (x *PutAgentConfigResponse) GetVersion() string { @@ -3994,7 +4131,7 @@ type GetAgentConfigInfoRequest struct { func (x *GetAgentConfigInfoRequest) Reset() { *x = GetAgentConfigInfoRequest{} - mi := &file_compass_v1_compass_proto_msgTypes[58] + mi := &file_compass_v1_compass_proto_msgTypes[61] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4006,7 +4143,7 @@ func (x *GetAgentConfigInfoRequest) String() string { func (*GetAgentConfigInfoRequest) ProtoMessage() {} func (x *GetAgentConfigInfoRequest) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[58] + mi := &file_compass_v1_compass_proto_msgTypes[61] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4019,7 +4156,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{58} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{61} } // GetAgentConfigInfo: the current bundle's version and member names by top dir — @@ -4054,7 +4191,7 @@ type GetAgentConfigInfoResponse struct { func (x *GetAgentConfigInfoResponse) Reset() { *x = GetAgentConfigInfoResponse{} - mi := &file_compass_v1_compass_proto_msgTypes[59] + mi := &file_compass_v1_compass_proto_msgTypes[62] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4066,7 +4203,7 @@ func (x *GetAgentConfigInfoResponse) String() string { func (*GetAgentConfigInfoResponse) ProtoMessage() {} func (x *GetAgentConfigInfoResponse) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[59] + mi := &file_compass_v1_compass_proto_msgTypes[62] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4079,7 +4216,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{59} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{62} } func (x *GetAgentConfigInfoResponse) GetVersion() string { @@ -4160,7 +4297,7 @@ type DeleteAgentConfigRequest struct { func (x *DeleteAgentConfigRequest) Reset() { *x = DeleteAgentConfigRequest{} - mi := &file_compass_v1_compass_proto_msgTypes[60] + mi := &file_compass_v1_compass_proto_msgTypes[63] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4172,7 +4309,7 @@ func (x *DeleteAgentConfigRequest) String() string { func (*DeleteAgentConfigRequest) ProtoMessage() {} func (x *DeleteAgentConfigRequest) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[60] + mi := &file_compass_v1_compass_proto_msgTypes[63] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4185,7 +4322,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{60} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{63} } type DeleteAgentConfigResponse struct { @@ -4196,7 +4333,7 @@ type DeleteAgentConfigResponse struct { func (x *DeleteAgentConfigResponse) Reset() { *x = DeleteAgentConfigResponse{} - mi := &file_compass_v1_compass_proto_msgTypes[61] + mi := &file_compass_v1_compass_proto_msgTypes[64] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4208,7 +4345,7 @@ func (x *DeleteAgentConfigResponse) String() string { func (*DeleteAgentConfigResponse) ProtoMessage() {} func (x *DeleteAgentConfigResponse) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[61] + mi := &file_compass_v1_compass_proto_msgTypes[64] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4221,7 +4358,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{61} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{64} } // One candidate in a stable name's ordered chain: an upstream (provider, @@ -4239,7 +4376,7 @@ type ModelCandidate struct { func (x *ModelCandidate) Reset() { *x = ModelCandidate{} - mi := &file_compass_v1_compass_proto_msgTypes[62] + mi := &file_compass_v1_compass_proto_msgTypes[65] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4251,7 +4388,7 @@ func (x *ModelCandidate) String() string { func (*ModelCandidate) ProtoMessage() {} func (x *ModelCandidate) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[62] + mi := &file_compass_v1_compass_proto_msgTypes[65] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4264,7 +4401,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{62} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{65} } func (x *ModelCandidate) GetProvider() string { @@ -4301,7 +4438,7 @@ type ModelMetadata struct { func (x *ModelMetadata) Reset() { *x = ModelMetadata{} - mi := &file_compass_v1_compass_proto_msgTypes[63] + mi := &file_compass_v1_compass_proto_msgTypes[66] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4313,7 +4450,7 @@ func (x *ModelMetadata) String() string { func (*ModelMetadata) ProtoMessage() {} func (x *ModelMetadata) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[63] + mi := &file_compass_v1_compass_proto_msgTypes[66] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4326,7 +4463,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{63} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{66} } func (x *ModelMetadata) GetContextWindow() int64 { @@ -4370,7 +4507,7 @@ type ModelRegistryEntry struct { func (x *ModelRegistryEntry) Reset() { *x = ModelRegistryEntry{} - mi := &file_compass_v1_compass_proto_msgTypes[64] + mi := &file_compass_v1_compass_proto_msgTypes[67] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4382,7 +4519,7 @@ func (x *ModelRegistryEntry) String() string { func (*ModelRegistryEntry) ProtoMessage() {} func (x *ModelRegistryEntry) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[64] + mi := &file_compass_v1_compass_proto_msgTypes[67] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4395,7 +4532,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{64} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{67} } func (x *ModelRegistryEntry) GetDisplayName() string { @@ -4430,7 +4567,7 @@ type ModelRegistry struct { func (x *ModelRegistry) Reset() { *x = ModelRegistry{} - mi := &file_compass_v1_compass_proto_msgTypes[65] + mi := &file_compass_v1_compass_proto_msgTypes[68] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4442,7 +4579,7 @@ func (x *ModelRegistry) String() string { func (*ModelRegistry) ProtoMessage() {} func (x *ModelRegistry) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[65] + mi := &file_compass_v1_compass_proto_msgTypes[68] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4455,7 +4592,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{65} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{68} } func (x *ModelRegistry) GetEntries() map[string]*ModelRegistryEntry { @@ -4481,7 +4618,7 @@ type PutModelRegistryRequest struct { func (x *PutModelRegistryRequest) Reset() { *x = PutModelRegistryRequest{} - mi := &file_compass_v1_compass_proto_msgTypes[66] + mi := &file_compass_v1_compass_proto_msgTypes[69] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4493,7 +4630,7 @@ func (x *PutModelRegistryRequest) String() string { func (*PutModelRegistryRequest) ProtoMessage() {} func (x *PutModelRegistryRequest) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[66] + mi := &file_compass_v1_compass_proto_msgTypes[69] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4506,7 +4643,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{66} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{69} } func (x *PutModelRegistryRequest) GetRegistry() *ModelRegistry { @@ -4533,7 +4670,7 @@ type PutModelRegistryResponse struct { func (x *PutModelRegistryResponse) Reset() { *x = PutModelRegistryResponse{} - mi := &file_compass_v1_compass_proto_msgTypes[67] + mi := &file_compass_v1_compass_proto_msgTypes[70] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4545,7 +4682,7 @@ func (x *PutModelRegistryResponse) String() string { func (*PutModelRegistryResponse) ProtoMessage() {} func (x *PutModelRegistryResponse) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[67] + mi := &file_compass_v1_compass_proto_msgTypes[70] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4558,7 +4695,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{67} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{70} } func (x *PutModelRegistryResponse) GetVersion() int64 { @@ -4576,7 +4713,7 @@ type GetModelRegistryRequest struct { func (x *GetModelRegistryRequest) Reset() { *x = GetModelRegistryRequest{} - mi := &file_compass_v1_compass_proto_msgTypes[68] + mi := &file_compass_v1_compass_proto_msgTypes[71] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4588,7 +4725,7 @@ func (x *GetModelRegistryRequest) String() string { func (*GetModelRegistryRequest) ProtoMessage() {} func (x *GetModelRegistryRequest) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[68] + mi := &file_compass_v1_compass_proto_msgTypes[71] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4601,7 +4738,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{68} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{71} } // GetModelRegistry: the current registry version and payload. An unconfigured @@ -4616,7 +4753,7 @@ type GetModelRegistryResponse struct { func (x *GetModelRegistryResponse) Reset() { *x = GetModelRegistryResponse{} - mi := &file_compass_v1_compass_proto_msgTypes[69] + mi := &file_compass_v1_compass_proto_msgTypes[72] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4628,7 +4765,7 @@ func (x *GetModelRegistryResponse) String() string { func (*GetModelRegistryResponse) ProtoMessage() {} func (x *GetModelRegistryResponse) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[69] + mi := &file_compass_v1_compass_proto_msgTypes[72] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4641,7 +4778,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{69} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{72} } func (x *GetModelRegistryResponse) GetVersion() int64 { @@ -4666,7 +4803,7 @@ type DeleteModelRegistryRequest struct { func (x *DeleteModelRegistryRequest) Reset() { *x = DeleteModelRegistryRequest{} - mi := &file_compass_v1_compass_proto_msgTypes[70] + mi := &file_compass_v1_compass_proto_msgTypes[73] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4678,7 +4815,7 @@ func (x *DeleteModelRegistryRequest) String() string { func (*DeleteModelRegistryRequest) ProtoMessage() {} func (x *DeleteModelRegistryRequest) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[70] + mi := &file_compass_v1_compass_proto_msgTypes[73] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4691,7 +4828,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{70} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{73} } type DeleteModelRegistryResponse struct { @@ -4702,7 +4839,7 @@ type DeleteModelRegistryResponse struct { func (x *DeleteModelRegistryResponse) Reset() { *x = DeleteModelRegistryResponse{} - mi := &file_compass_v1_compass_proto_msgTypes[71] + mi := &file_compass_v1_compass_proto_msgTypes[74] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4714,7 +4851,7 @@ func (x *DeleteModelRegistryResponse) String() string { func (*DeleteModelRegistryResponse) ProtoMessage() {} func (x *DeleteModelRegistryResponse) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[71] + mi := &file_compass_v1_compass_proto_msgTypes[74] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4727,7 +4864,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{71} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{74} } // The Compass agent attribution parsed from the owner header at ingestion — a @@ -4749,7 +4886,7 @@ type AgentAttribution struct { func (x *AgentAttribution) Reset() { *x = AgentAttribution{} - mi := &file_compass_v1_compass_proto_msgTypes[72] + mi := &file_compass_v1_compass_proto_msgTypes[75] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4761,7 +4898,7 @@ func (x *AgentAttribution) String() string { func (*AgentAttribution) ProtoMessage() {} func (x *AgentAttribution) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[72] + mi := &file_compass_v1_compass_proto_msgTypes[75] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4774,7 +4911,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{72} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{75} } func (x *AgentAttribution) GetAgentHandle() string { @@ -4794,7 +4931,7 @@ type ForgeRef struct { func (x *ForgeRef) Reset() { *x = ForgeRef{} - mi := &file_compass_v1_compass_proto_msgTypes[73] + mi := &file_compass_v1_compass_proto_msgTypes[76] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4806,7 +4943,7 @@ func (x *ForgeRef) String() string { func (*ForgeRef) ProtoMessage() {} func (x *ForgeRef) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[73] + mi := &file_compass_v1_compass_proto_msgTypes[76] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4819,7 +4956,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{73} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{76} } func (x *ForgeRef) GetProvider() ForgeProvider { @@ -4879,7 +5016,7 @@ type Issue struct { func (x *Issue) Reset() { *x = Issue{} - mi := &file_compass_v1_compass_proto_msgTypes[74] + mi := &file_compass_v1_compass_proto_msgTypes[77] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4891,7 +5028,7 @@ func (x *Issue) String() string { func (*Issue) ProtoMessage() {} func (x *Issue) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[74] + mi := &file_compass_v1_compass_proto_msgTypes[77] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4904,7 +5041,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{74} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{77} } func (x *Issue) GetId() string { @@ -5066,7 +5203,7 @@ type PullRequest struct { func (x *PullRequest) Reset() { *x = PullRequest{} - mi := &file_compass_v1_compass_proto_msgTypes[75] + mi := &file_compass_v1_compass_proto_msgTypes[78] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5078,7 +5215,7 @@ func (x *PullRequest) String() string { func (*PullRequest) ProtoMessage() {} func (x *PullRequest) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[75] + mi := &file_compass_v1_compass_proto_msgTypes[78] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5091,7 +5228,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{75} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{78} } func (x *PullRequest) GetForge() *ForgeRef { @@ -5212,7 +5349,7 @@ type ChecksSummary struct { func (x *ChecksSummary) Reset() { *x = ChecksSummary{} - mi := &file_compass_v1_compass_proto_msgTypes[76] + mi := &file_compass_v1_compass_proto_msgTypes[79] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5224,7 +5361,7 @@ func (x *ChecksSummary) String() string { func (*ChecksSummary) ProtoMessage() {} func (x *ChecksSummary) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[76] + mi := &file_compass_v1_compass_proto_msgTypes[79] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5237,7 +5374,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{76} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{79} } func (x *ChecksSummary) GetHeadSha() string { @@ -5273,7 +5410,7 @@ type Check struct { func (x *Check) Reset() { *x = Check{} - mi := &file_compass_v1_compass_proto_msgTypes[77] + mi := &file_compass_v1_compass_proto_msgTypes[80] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5285,7 +5422,7 @@ func (x *Check) String() string { func (*Check) ProtoMessage() {} func (x *Check) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[77] + mi := &file_compass_v1_compass_proto_msgTypes[80] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5298,7 +5435,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{77} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{80} } func (x *Check) GetName() string { @@ -5342,7 +5479,7 @@ type ChangedStats struct { func (x *ChangedStats) Reset() { *x = ChangedStats{} - mi := &file_compass_v1_compass_proto_msgTypes[78] + mi := &file_compass_v1_compass_proto_msgTypes[81] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5354,7 +5491,7 @@ func (x *ChangedStats) String() string { func (*ChangedStats) ProtoMessage() {} func (x *ChangedStats) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[78] + mi := &file_compass_v1_compass_proto_msgTypes[81] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5367,7 +5504,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{78} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{81} } func (x *ChangedStats) GetFiles() uint32 { @@ -5405,7 +5542,7 @@ type TrackerRef struct { func (x *TrackerRef) Reset() { *x = TrackerRef{} - mi := &file_compass_v1_compass_proto_msgTypes[79] + mi := &file_compass_v1_compass_proto_msgTypes[82] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5417,7 +5554,7 @@ func (x *TrackerRef) String() string { func (*TrackerRef) ProtoMessage() {} func (x *TrackerRef) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[79] + mi := &file_compass_v1_compass_proto_msgTypes[82] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5430,7 +5567,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{79} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{82} } func (x *TrackerRef) GetKind() string { @@ -5479,7 +5616,7 @@ type Review struct { func (x *Review) Reset() { *x = Review{} - mi := &file_compass_v1_compass_proto_msgTypes[80] + mi := &file_compass_v1_compass_proto_msgTypes[83] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5491,7 +5628,7 @@ func (x *Review) String() string { func (*Review) ProtoMessage() {} func (x *Review) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[80] + mi := &file_compass_v1_compass_proto_msgTypes[83] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5504,7 +5641,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{80} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{83} } func (x *Review) GetAuthor() string { @@ -5546,7 +5683,7 @@ type ReviewThread struct { func (x *ReviewThread) Reset() { *x = ReviewThread{} - mi := &file_compass_v1_compass_proto_msgTypes[81] + mi := &file_compass_v1_compass_proto_msgTypes[84] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5558,7 +5695,7 @@ func (x *ReviewThread) String() string { func (*ReviewThread) ProtoMessage() {} func (x *ReviewThread) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[81] + mi := &file_compass_v1_compass_proto_msgTypes[84] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5571,7 +5708,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{81} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{84} } func (x *ReviewThread) GetPath() string { @@ -5606,7 +5743,7 @@ type Comment struct { func (x *Comment) Reset() { *x = Comment{} - mi := &file_compass_v1_compass_proto_msgTypes[82] + mi := &file_compass_v1_compass_proto_msgTypes[85] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5618,7 +5755,7 @@ func (x *Comment) String() string { func (*Comment) ProtoMessage() {} func (x *Comment) ProtoReflect() protoreflect.Message { - mi := &file_compass_v1_compass_proto_msgTypes[82] + mi := &file_compass_v1_compass_proto_msgTypes[85] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5631,7 +5768,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{82} + return file_compass_v1_compass_proto_rawDescGZIP(), []int{85} } func (x *Comment) GetAuthor() string { @@ -5688,7 +5825,13 @@ const file_compass_v1_compass_proto_rawDesc = "" + "\x17SetServerSecretResponse\"/\n" + "\x19DeleteServerSecretRequest\x12\x12\n" + "\x04name\x18\x01 \x01(\tR\x04name\"\x1c\n" + - "\x1aDeleteServerSecretResponse\"\x16\n" + + "\x1aDeleteServerSecretResponse\"\x1a\n" + + "\x18ListServerSecretsRequest\"b\n" + + "\x19ListServerSecretsResponse\x12E\n" + + "\x0eserver_secrets\x18\x01 \x03(\v2\x1e.compass.v1.ServerSecretStatusR\rserverSecrets\"?\n" + + "\x12ServerSecretStatus\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x12\x15\n" + + "\x06is_set\x18\x02 \x01(\bR\x05isSet\"\x16\n" + "\x14GetServerInfoRequest\"R\n" + "\x15GetServerInfoResponse\x12\x18\n" + "\aversion\x18\x01 \x01(\tR\aversion\x12\x1f\n" + @@ -6069,13 +6212,14 @@ 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\xbe\x03\n" + + "\x13DeleteModelRegistry\x12&.compass.v1.DeleteModelRegistryRequest\x1a'.compass.v1.DeleteModelRegistryResponse2\xa0\x04\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.DeleteServerSecretResponseb\x06proto3" + "\x12DeleteServerSecret\x12%.compass.v1.DeleteServerSecretRequest\x1a&.compass.v1.DeleteServerSecretResponse\x12`\n" + + "\x11ListServerSecrets\x12$.compass.v1.ListServerSecretsRequest\x1a%.compass.v1.ListServerSecretsResponseb\x06proto3" var ( file_compass_v1_compass_proto_rawDescOnce sync.Once @@ -6090,7 +6234,7 @@ func file_compass_v1_compass_proto_rawDescGZIP() []byte { } var file_compass_v1_compass_proto_enumTypes = make([]protoimpl.EnumInfo, 10) -var file_compass_v1_compass_proto_msgTypes = make([]protoimpl.MessageInfo, 84) +var file_compass_v1_compass_proto_msgTypes = make([]protoimpl.MessageInfo, 87) var file_compass_v1_compass_proto_goTypes = []any{ (SecretDelivery)(0), // 0: compass.v1.SecretDelivery (SecretKind)(0), // 1: compass.v1.SecretKind @@ -6113,80 +6257,83 @@ var file_compass_v1_compass_proto_goTypes = []any{ (*SetServerSecretResponse)(nil), // 18: compass.v1.SetServerSecretResponse (*DeleteServerSecretRequest)(nil), // 19: compass.v1.DeleteServerSecretRequest (*DeleteServerSecretResponse)(nil), // 20: compass.v1.DeleteServerSecretResponse - (*GetServerInfoRequest)(nil), // 21: compass.v1.GetServerInfoRequest - (*GetServerInfoResponse)(nil), // 22: compass.v1.GetServerInfoResponse - (*WhoAmIRequest)(nil), // 23: compass.v1.WhoAmIRequest - (*WhoAmIResponse)(nil), // 24: compass.v1.WhoAmIResponse - (*SubscribeEventsRequest)(nil), // 25: compass.v1.SubscribeEventsRequest - (*SubscribeEventsResponse)(nil), // 26: compass.v1.SubscribeEventsResponse - (*ListBoardIssuesRequest)(nil), // 27: compass.v1.ListBoardIssuesRequest - (*ListBoardIssuesResponse)(nil), // 28: compass.v1.ListBoardIssuesResponse - (*ServerStatus)(nil), // 29: compass.v1.ServerStatus - (*ResyncRequired)(nil), // 30: compass.v1.ResyncRequired - (*AgentSessionStatus)(nil), // 31: compass.v1.AgentSessionStatus - (*AgentMessageChunk)(nil), // 32: compass.v1.AgentMessageChunk - (*AgentToolCall)(nil), // 33: compass.v1.AgentToolCall - (*AgentPlan)(nil), // 34: compass.v1.AgentPlan - (*AgentPlanEntry)(nil), // 35: compass.v1.AgentPlanEntry - (*SessionEvent)(nil), // 36: compass.v1.SessionEvent - (*SessionAssistantText)(nil), // 37: compass.v1.SessionAssistantText - (*SessionThinking)(nil), // 38: compass.v1.SessionThinking - (*SessionToolCall)(nil), // 39: compass.v1.SessionToolCall - (*SessionToolCallUpdate)(nil), // 40: compass.v1.SessionToolCallUpdate - (*SessionFileDiff)(nil), // 41: compass.v1.SessionFileDiff - (*SessionPlan)(nil), // 42: compass.v1.SessionPlan - (*SessionNotice)(nil), // 43: compass.v1.SessionNotice - (*SessionInjection)(nil), // 44: compass.v1.SessionInjection - (*SessionError)(nil), // 45: compass.v1.SessionError - (*SubscribeAgentSessionRequest)(nil), // 46: compass.v1.SubscribeAgentSessionRequest - (*AgentSessionFrame)(nil), // 47: compass.v1.AgentSessionFrame - (*ProvisionAgentWorkspaceRequest)(nil), // 48: compass.v1.ProvisionAgentWorkspaceRequest - (*ProvisionAgentWorkspaceResponse)(nil), // 49: compass.v1.ProvisionAgentWorkspaceResponse - (*RemoveAgentWorkspaceRequest)(nil), // 50: compass.v1.RemoveAgentWorkspaceRequest - (*RemoveAgentWorkspaceResponse)(nil), // 51: compass.v1.RemoveAgentWorkspaceResponse - (*StartAgentSessionRequest)(nil), // 52: compass.v1.StartAgentSessionRequest - (*StartAgentSessionResponse)(nil), // 53: compass.v1.StartAgentSessionResponse - (*SpawnAgentRequest)(nil), // 54: compass.v1.SpawnAgentRequest - (*SpawnAgentResponse)(nil), // 55: compass.v1.SpawnAgentResponse - (*StopAgentSessionRequest)(nil), // 56: compass.v1.StopAgentSessionRequest - (*StopAgentSessionResponse)(nil), // 57: compass.v1.StopAgentSessionResponse - (*ReloadAgentSessionRequest)(nil), // 58: compass.v1.ReloadAgentSessionRequest - (*ReloadAgentSessionResponse)(nil), // 59: compass.v1.ReloadAgentSessionResponse - (*GetAgentStatusRequest)(nil), // 60: compass.v1.GetAgentStatusRequest - (*GetAgentStatusResponse)(nil), // 61: compass.v1.GetAgentStatusResponse - (*IssueTokenRequest)(nil), // 62: compass.v1.IssueTokenRequest - (*IssueTokenResponse)(nil), // 63: compass.v1.IssueTokenResponse - (*RevokeTokenRequest)(nil), // 64: compass.v1.RevokeTokenRequest - (*RevokeTokenResponse)(nil), // 65: compass.v1.RevokeTokenResponse - (*PutAgentConfigRequest)(nil), // 66: compass.v1.PutAgentConfigRequest - (*PutAgentConfigResponse)(nil), // 67: compass.v1.PutAgentConfigResponse - (*GetAgentConfigInfoRequest)(nil), // 68: compass.v1.GetAgentConfigInfoRequest - (*GetAgentConfigInfoResponse)(nil), // 69: compass.v1.GetAgentConfigInfoResponse - (*DeleteAgentConfigRequest)(nil), // 70: compass.v1.DeleteAgentConfigRequest - (*DeleteAgentConfigResponse)(nil), // 71: compass.v1.DeleteAgentConfigResponse - (*ModelCandidate)(nil), // 72: compass.v1.ModelCandidate - (*ModelMetadata)(nil), // 73: compass.v1.ModelMetadata - (*ModelRegistryEntry)(nil), // 74: compass.v1.ModelRegistryEntry - (*ModelRegistry)(nil), // 75: compass.v1.ModelRegistry - (*PutModelRegistryRequest)(nil), // 76: compass.v1.PutModelRegistryRequest - (*PutModelRegistryResponse)(nil), // 77: compass.v1.PutModelRegistryResponse - (*GetModelRegistryRequest)(nil), // 78: compass.v1.GetModelRegistryRequest - (*GetModelRegistryResponse)(nil), // 79: compass.v1.GetModelRegistryResponse - (*DeleteModelRegistryRequest)(nil), // 80: compass.v1.DeleteModelRegistryRequest - (*DeleteModelRegistryResponse)(nil), // 81: compass.v1.DeleteModelRegistryResponse - (*AgentAttribution)(nil), // 82: compass.v1.AgentAttribution - (*ForgeRef)(nil), // 83: compass.v1.ForgeRef - (*Issue)(nil), // 84: compass.v1.Issue - (*PullRequest)(nil), // 85: compass.v1.PullRequest - (*ChecksSummary)(nil), // 86: compass.v1.ChecksSummary - (*Check)(nil), // 87: compass.v1.Check - (*ChangedStats)(nil), // 88: compass.v1.ChangedStats - (*TrackerRef)(nil), // 89: compass.v1.TrackerRef - (*Review)(nil), // 90: compass.v1.Review - (*ReviewThread)(nil), // 91: compass.v1.ReviewThread - (*Comment)(nil), // 92: compass.v1.Comment - nil, // 93: compass.v1.ModelRegistry.EntriesEntry - (*timestamppb.Timestamp)(nil), // 94: google.protobuf.Timestamp + (*ListServerSecretsRequest)(nil), // 21: compass.v1.ListServerSecretsRequest + (*ListServerSecretsResponse)(nil), // 22: compass.v1.ListServerSecretsResponse + (*ServerSecretStatus)(nil), // 23: compass.v1.ServerSecretStatus + (*GetServerInfoRequest)(nil), // 24: compass.v1.GetServerInfoRequest + (*GetServerInfoResponse)(nil), // 25: compass.v1.GetServerInfoResponse + (*WhoAmIRequest)(nil), // 26: compass.v1.WhoAmIRequest + (*WhoAmIResponse)(nil), // 27: compass.v1.WhoAmIResponse + (*SubscribeEventsRequest)(nil), // 28: compass.v1.SubscribeEventsRequest + (*SubscribeEventsResponse)(nil), // 29: compass.v1.SubscribeEventsResponse + (*ListBoardIssuesRequest)(nil), // 30: compass.v1.ListBoardIssuesRequest + (*ListBoardIssuesResponse)(nil), // 31: compass.v1.ListBoardIssuesResponse + (*ServerStatus)(nil), // 32: compass.v1.ServerStatus + (*ResyncRequired)(nil), // 33: compass.v1.ResyncRequired + (*AgentSessionStatus)(nil), // 34: compass.v1.AgentSessionStatus + (*AgentMessageChunk)(nil), // 35: compass.v1.AgentMessageChunk + (*AgentToolCall)(nil), // 36: compass.v1.AgentToolCall + (*AgentPlan)(nil), // 37: compass.v1.AgentPlan + (*AgentPlanEntry)(nil), // 38: compass.v1.AgentPlanEntry + (*SessionEvent)(nil), // 39: compass.v1.SessionEvent + (*SessionAssistantText)(nil), // 40: compass.v1.SessionAssistantText + (*SessionThinking)(nil), // 41: compass.v1.SessionThinking + (*SessionToolCall)(nil), // 42: compass.v1.SessionToolCall + (*SessionToolCallUpdate)(nil), // 43: compass.v1.SessionToolCallUpdate + (*SessionFileDiff)(nil), // 44: compass.v1.SessionFileDiff + (*SessionPlan)(nil), // 45: compass.v1.SessionPlan + (*SessionNotice)(nil), // 46: compass.v1.SessionNotice + (*SessionInjection)(nil), // 47: compass.v1.SessionInjection + (*SessionError)(nil), // 48: compass.v1.SessionError + (*SubscribeAgentSessionRequest)(nil), // 49: compass.v1.SubscribeAgentSessionRequest + (*AgentSessionFrame)(nil), // 50: compass.v1.AgentSessionFrame + (*ProvisionAgentWorkspaceRequest)(nil), // 51: compass.v1.ProvisionAgentWorkspaceRequest + (*ProvisionAgentWorkspaceResponse)(nil), // 52: compass.v1.ProvisionAgentWorkspaceResponse + (*RemoveAgentWorkspaceRequest)(nil), // 53: compass.v1.RemoveAgentWorkspaceRequest + (*RemoveAgentWorkspaceResponse)(nil), // 54: compass.v1.RemoveAgentWorkspaceResponse + (*StartAgentSessionRequest)(nil), // 55: compass.v1.StartAgentSessionRequest + (*StartAgentSessionResponse)(nil), // 56: compass.v1.StartAgentSessionResponse + (*SpawnAgentRequest)(nil), // 57: compass.v1.SpawnAgentRequest + (*SpawnAgentResponse)(nil), // 58: compass.v1.SpawnAgentResponse + (*StopAgentSessionRequest)(nil), // 59: compass.v1.StopAgentSessionRequest + (*StopAgentSessionResponse)(nil), // 60: compass.v1.StopAgentSessionResponse + (*ReloadAgentSessionRequest)(nil), // 61: compass.v1.ReloadAgentSessionRequest + (*ReloadAgentSessionResponse)(nil), // 62: compass.v1.ReloadAgentSessionResponse + (*GetAgentStatusRequest)(nil), // 63: compass.v1.GetAgentStatusRequest + (*GetAgentStatusResponse)(nil), // 64: compass.v1.GetAgentStatusResponse + (*IssueTokenRequest)(nil), // 65: compass.v1.IssueTokenRequest + (*IssueTokenResponse)(nil), // 66: compass.v1.IssueTokenResponse + (*RevokeTokenRequest)(nil), // 67: compass.v1.RevokeTokenRequest + (*RevokeTokenResponse)(nil), // 68: compass.v1.RevokeTokenResponse + (*PutAgentConfigRequest)(nil), // 69: compass.v1.PutAgentConfigRequest + (*PutAgentConfigResponse)(nil), // 70: compass.v1.PutAgentConfigResponse + (*GetAgentConfigInfoRequest)(nil), // 71: compass.v1.GetAgentConfigInfoRequest + (*GetAgentConfigInfoResponse)(nil), // 72: compass.v1.GetAgentConfigInfoResponse + (*DeleteAgentConfigRequest)(nil), // 73: compass.v1.DeleteAgentConfigRequest + (*DeleteAgentConfigResponse)(nil), // 74: compass.v1.DeleteAgentConfigResponse + (*ModelCandidate)(nil), // 75: compass.v1.ModelCandidate + (*ModelMetadata)(nil), // 76: compass.v1.ModelMetadata + (*ModelRegistryEntry)(nil), // 77: compass.v1.ModelRegistryEntry + (*ModelRegistry)(nil), // 78: compass.v1.ModelRegistry + (*PutModelRegistryRequest)(nil), // 79: compass.v1.PutModelRegistryRequest + (*PutModelRegistryResponse)(nil), // 80: compass.v1.PutModelRegistryResponse + (*GetModelRegistryRequest)(nil), // 81: compass.v1.GetModelRegistryRequest + (*GetModelRegistryResponse)(nil), // 82: compass.v1.GetModelRegistryResponse + (*DeleteModelRegistryRequest)(nil), // 83: compass.v1.DeleteModelRegistryRequest + (*DeleteModelRegistryResponse)(nil), // 84: compass.v1.DeleteModelRegistryResponse + (*AgentAttribution)(nil), // 85: compass.v1.AgentAttribution + (*ForgeRef)(nil), // 86: compass.v1.ForgeRef + (*Issue)(nil), // 87: compass.v1.Issue + (*PullRequest)(nil), // 88: compass.v1.PullRequest + (*ChecksSummary)(nil), // 89: compass.v1.ChecksSummary + (*Check)(nil), // 90: compass.v1.Check + (*ChangedStats)(nil), // 91: compass.v1.ChangedStats + (*TrackerRef)(nil), // 92: compass.v1.TrackerRef + (*Review)(nil), // 93: compass.v1.Review + (*ReviewThread)(nil), // 94: compass.v1.ReviewThread + (*Comment)(nil), // 95: compass.v1.Comment + nil, // 96: compass.v1.ModelRegistry.EntriesEntry + (*timestamppb.Timestamp)(nil), // 97: google.protobuf.Timestamp } var file_compass_v1_compass_proto_depIdxs = []int32{ 0, // 0: compass.v1.SetSecretRequest.delivery:type_name -> compass.v1.SecretDelivery @@ -6194,112 +6341,115 @@ var file_compass_v1_compass_proto_depIdxs = []int32{ 14, // 2: compass.v1.ListSecretsResponse.secrets:type_name -> compass.v1.SecretStatus 0, // 3: compass.v1.SecretStatus.delivery:type_name -> compass.v1.SecretDelivery 1, // 4: compass.v1.SecretStatus.kind:type_name -> compass.v1.SecretKind - 29, // 5: compass.v1.SubscribeEventsResponse.server_status:type_name -> compass.v1.ServerStatus - 30, // 6: compass.v1.SubscribeEventsResponse.resync_required:type_name -> compass.v1.ResyncRequired - 31, // 7: compass.v1.SubscribeEventsResponse.agent_session_status:type_name -> compass.v1.AgentSessionStatus - 32, // 8: compass.v1.SubscribeEventsResponse.agent_message_chunk:type_name -> compass.v1.AgentMessageChunk - 33, // 9: compass.v1.SubscribeEventsResponse.agent_tool_call:type_name -> compass.v1.AgentToolCall - 34, // 10: compass.v1.SubscribeEventsResponse.agent_plan:type_name -> compass.v1.AgentPlan - 84, // 11: compass.v1.SubscribeEventsResponse.issue:type_name -> compass.v1.Issue - 84, // 12: compass.v1.ListBoardIssuesResponse.issues:type_name -> compass.v1.Issue - 2, // 13: compass.v1.ServerStatus.state:type_name -> compass.v1.ServerState - 3, // 14: compass.v1.AgentSessionStatus.state:type_name -> compass.v1.AgentSessionState - 4, // 15: compass.v1.AgentToolCall.status:type_name -> compass.v1.AgentToolCallStatus - 35, // 16: compass.v1.AgentPlan.entries:type_name -> compass.v1.AgentPlanEntry - 5, // 17: compass.v1.AgentPlanEntry.status:type_name -> compass.v1.AgentPlanEntryStatus - 37, // 18: compass.v1.SessionEvent.assistant_text:type_name -> compass.v1.SessionAssistantText - 38, // 19: compass.v1.SessionEvent.thinking:type_name -> compass.v1.SessionThinking - 39, // 20: compass.v1.SessionEvent.tool_call:type_name -> compass.v1.SessionToolCall - 40, // 21: compass.v1.SessionEvent.tool_call_update:type_name -> compass.v1.SessionToolCallUpdate - 42, // 22: compass.v1.SessionEvent.plan:type_name -> compass.v1.SessionPlan - 43, // 23: compass.v1.SessionEvent.notice:type_name -> compass.v1.SessionNotice - 44, // 24: compass.v1.SessionEvent.session_injection:type_name -> compass.v1.SessionInjection - 45, // 25: compass.v1.SessionEvent.session_error:type_name -> compass.v1.SessionError - 4, // 26: compass.v1.SessionToolCall.status:type_name -> compass.v1.AgentToolCallStatus - 4, // 27: compass.v1.SessionToolCallUpdate.status:type_name -> compass.v1.AgentToolCallStatus - 41, // 28: compass.v1.SessionToolCallUpdate.diffs:type_name -> compass.v1.SessionFileDiff - 35, // 29: compass.v1.SessionPlan.entries:type_name -> compass.v1.AgentPlanEntry - 6, // 30: compass.v1.SessionInjection.op_kind:type_name -> compass.v1.SessionInjectionKind - 7, // 31: compass.v1.SessionError.kind:type_name -> compass.v1.SessionErrorKind - 36, // 32: compass.v1.AgentSessionFrame.event:type_name -> compass.v1.SessionEvent - 3, // 33: compass.v1.AgentSessionFrame.state:type_name -> compass.v1.AgentSessionState - 31, // 34: compass.v1.GetAgentStatusResponse.statuses:type_name -> compass.v1.AgentSessionStatus - 72, // 35: compass.v1.ModelRegistryEntry.candidates:type_name -> compass.v1.ModelCandidate - 73, // 36: compass.v1.ModelRegistryEntry.metadata:type_name -> compass.v1.ModelMetadata - 93, // 37: compass.v1.ModelRegistry.entries:type_name -> compass.v1.ModelRegistry.EntriesEntry - 75, // 38: compass.v1.PutModelRegistryRequest.registry:type_name -> compass.v1.ModelRegistry - 75, // 39: compass.v1.GetModelRegistryResponse.registry:type_name -> compass.v1.ModelRegistry - 9, // 40: compass.v1.ForgeRef.provider:type_name -> compass.v1.ForgeProvider - 83, // 41: compass.v1.Issue.forge:type_name -> compass.v1.ForgeRef - 82, // 42: compass.v1.Issue.agent:type_name -> compass.v1.AgentAttribution - 94, // 43: compass.v1.Issue.updated_at:type_name -> google.protobuf.Timestamp - 8, // 44: compass.v1.Issue.state:type_name -> compass.v1.IssueState - 85, // 45: compass.v1.Issue.prs:type_name -> compass.v1.PullRequest - 89, // 46: compass.v1.Issue.tracker:type_name -> compass.v1.TrackerRef - 83, // 47: compass.v1.PullRequest.forge:type_name -> compass.v1.ForgeRef - 82, // 48: compass.v1.PullRequest.agent:type_name -> compass.v1.AgentAttribution - 88, // 49: compass.v1.PullRequest.changed:type_name -> compass.v1.ChangedStats - 86, // 50: compass.v1.PullRequest.checks:type_name -> compass.v1.ChecksSummary - 90, // 51: compass.v1.PullRequest.reviews:type_name -> compass.v1.Review - 91, // 52: compass.v1.PullRequest.threads:type_name -> compass.v1.ReviewThread - 87, // 53: compass.v1.ChecksSummary.checks:type_name -> compass.v1.Check - 92, // 54: compass.v1.ReviewThread.comments:type_name -> compass.v1.Comment - 74, // 55: compass.v1.ModelRegistry.EntriesEntry.value:type_name -> compass.v1.ModelRegistryEntry - 21, // 56: compass.v1.CompassService.GetServerInfo:input_type -> compass.v1.GetServerInfoRequest - 23, // 57: compass.v1.CompassService.WhoAmI:input_type -> compass.v1.WhoAmIRequest - 25, // 58: compass.v1.CompassService.SubscribeEvents:input_type -> compass.v1.SubscribeEventsRequest - 27, // 59: compass.v1.CompassService.ListBoardIssues:input_type -> compass.v1.ListBoardIssuesRequest - 48, // 60: compass.v1.CompassService.ProvisionAgentWorkspace:input_type -> compass.v1.ProvisionAgentWorkspaceRequest - 52, // 61: compass.v1.CompassService.StartAgentSession:input_type -> compass.v1.StartAgentSessionRequest - 54, // 62: compass.v1.CompassService.SpawnAgent:input_type -> compass.v1.SpawnAgentRequest - 56, // 63: compass.v1.CompassService.StopAgentSession:input_type -> compass.v1.StopAgentSessionRequest - 50, // 64: compass.v1.CompassService.RemoveAgentWorkspace:input_type -> compass.v1.RemoveAgentWorkspaceRequest - 58, // 65: compass.v1.CompassService.ReloadAgentSession:input_type -> compass.v1.ReloadAgentSessionRequest - 60, // 66: compass.v1.CompassService.GetAgentStatus:input_type -> compass.v1.GetAgentStatusRequest - 46, // 67: compass.v1.CompassService.SubscribeAgentSession:input_type -> compass.v1.SubscribeAgentSessionRequest - 62, // 68: compass.v1.CompassService.IssueToken:input_type -> compass.v1.IssueTokenRequest - 64, // 69: compass.v1.CompassService.RevokeToken:input_type -> compass.v1.RevokeTokenRequest - 66, // 70: compass.v1.CompassService.PutAgentConfig:input_type -> compass.v1.PutAgentConfigRequest - 68, // 71: compass.v1.CompassService.GetAgentConfigInfo:input_type -> compass.v1.GetAgentConfigInfoRequest - 70, // 72: compass.v1.CompassService.DeleteAgentConfig:input_type -> compass.v1.DeleteAgentConfigRequest - 76, // 73: compass.v1.CompassService.PutModelRegistry:input_type -> compass.v1.PutModelRegistryRequest - 78, // 74: compass.v1.CompassService.GetModelRegistry:input_type -> compass.v1.GetModelRegistryRequest - 80, // 75: compass.v1.CompassService.DeleteModelRegistry:input_type -> compass.v1.DeleteModelRegistryRequest - 10, // 76: compass.v1.SecretsService.SetSecret:input_type -> compass.v1.SetSecretRequest - 12, // 77: compass.v1.SecretsService.ListSecrets:input_type -> compass.v1.ListSecretsRequest - 15, // 78: compass.v1.SecretsService.DeleteSecret:input_type -> compass.v1.DeleteSecretRequest - 17, // 79: compass.v1.SecretsService.SetServerSecret:input_type -> compass.v1.SetServerSecretRequest - 19, // 80: compass.v1.SecretsService.DeleteServerSecret:input_type -> compass.v1.DeleteServerSecretRequest - 22, // 81: compass.v1.CompassService.GetServerInfo:output_type -> compass.v1.GetServerInfoResponse - 24, // 82: compass.v1.CompassService.WhoAmI:output_type -> compass.v1.WhoAmIResponse - 26, // 83: compass.v1.CompassService.SubscribeEvents:output_type -> compass.v1.SubscribeEventsResponse - 28, // 84: compass.v1.CompassService.ListBoardIssues:output_type -> compass.v1.ListBoardIssuesResponse - 49, // 85: compass.v1.CompassService.ProvisionAgentWorkspace:output_type -> compass.v1.ProvisionAgentWorkspaceResponse - 53, // 86: compass.v1.CompassService.StartAgentSession:output_type -> compass.v1.StartAgentSessionResponse - 55, // 87: compass.v1.CompassService.SpawnAgent:output_type -> compass.v1.SpawnAgentResponse - 57, // 88: compass.v1.CompassService.StopAgentSession:output_type -> compass.v1.StopAgentSessionResponse - 51, // 89: compass.v1.CompassService.RemoveAgentWorkspace:output_type -> compass.v1.RemoveAgentWorkspaceResponse - 59, // 90: compass.v1.CompassService.ReloadAgentSession:output_type -> compass.v1.ReloadAgentSessionResponse - 61, // 91: compass.v1.CompassService.GetAgentStatus:output_type -> compass.v1.GetAgentStatusResponse - 47, // 92: compass.v1.CompassService.SubscribeAgentSession:output_type -> compass.v1.AgentSessionFrame - 63, // 93: compass.v1.CompassService.IssueToken:output_type -> compass.v1.IssueTokenResponse - 65, // 94: compass.v1.CompassService.RevokeToken:output_type -> compass.v1.RevokeTokenResponse - 67, // 95: compass.v1.CompassService.PutAgentConfig:output_type -> compass.v1.PutAgentConfigResponse - 69, // 96: compass.v1.CompassService.GetAgentConfigInfo:output_type -> compass.v1.GetAgentConfigInfoResponse - 71, // 97: compass.v1.CompassService.DeleteAgentConfig:output_type -> compass.v1.DeleteAgentConfigResponse - 77, // 98: compass.v1.CompassService.PutModelRegistry:output_type -> compass.v1.PutModelRegistryResponse - 79, // 99: compass.v1.CompassService.GetModelRegistry:output_type -> compass.v1.GetModelRegistryResponse - 81, // 100: compass.v1.CompassService.DeleteModelRegistry:output_type -> compass.v1.DeleteModelRegistryResponse - 11, // 101: compass.v1.SecretsService.SetSecret:output_type -> compass.v1.SetSecretResponse - 13, // 102: compass.v1.SecretsService.ListSecrets:output_type -> compass.v1.ListSecretsResponse - 16, // 103: compass.v1.SecretsService.DeleteSecret:output_type -> compass.v1.DeleteSecretResponse - 18, // 104: compass.v1.SecretsService.SetServerSecret:output_type -> compass.v1.SetServerSecretResponse - 20, // 105: compass.v1.SecretsService.DeleteServerSecret:output_type -> compass.v1.DeleteServerSecretResponse - 81, // [81:106] is the sub-list for method output_type - 56, // [56:81] is the sub-list for method input_type - 56, // [56:56] is the sub-list for extension type_name - 56, // [56:56] is the sub-list for extension extendee - 0, // [0:56] is the sub-list for field type_name + 23, // 5: compass.v1.ListServerSecretsResponse.server_secrets:type_name -> compass.v1.ServerSecretStatus + 32, // 6: compass.v1.SubscribeEventsResponse.server_status:type_name -> compass.v1.ServerStatus + 33, // 7: compass.v1.SubscribeEventsResponse.resync_required:type_name -> compass.v1.ResyncRequired + 34, // 8: compass.v1.SubscribeEventsResponse.agent_session_status:type_name -> compass.v1.AgentSessionStatus + 35, // 9: compass.v1.SubscribeEventsResponse.agent_message_chunk:type_name -> compass.v1.AgentMessageChunk + 36, // 10: compass.v1.SubscribeEventsResponse.agent_tool_call:type_name -> compass.v1.AgentToolCall + 37, // 11: compass.v1.SubscribeEventsResponse.agent_plan:type_name -> compass.v1.AgentPlan + 87, // 12: compass.v1.SubscribeEventsResponse.issue:type_name -> compass.v1.Issue + 87, // 13: compass.v1.ListBoardIssuesResponse.issues:type_name -> compass.v1.Issue + 2, // 14: compass.v1.ServerStatus.state:type_name -> compass.v1.ServerState + 3, // 15: compass.v1.AgentSessionStatus.state:type_name -> compass.v1.AgentSessionState + 4, // 16: compass.v1.AgentToolCall.status:type_name -> compass.v1.AgentToolCallStatus + 38, // 17: compass.v1.AgentPlan.entries:type_name -> compass.v1.AgentPlanEntry + 5, // 18: compass.v1.AgentPlanEntry.status:type_name -> compass.v1.AgentPlanEntryStatus + 40, // 19: compass.v1.SessionEvent.assistant_text:type_name -> compass.v1.SessionAssistantText + 41, // 20: compass.v1.SessionEvent.thinking:type_name -> compass.v1.SessionThinking + 42, // 21: compass.v1.SessionEvent.tool_call:type_name -> compass.v1.SessionToolCall + 43, // 22: compass.v1.SessionEvent.tool_call_update:type_name -> compass.v1.SessionToolCallUpdate + 45, // 23: compass.v1.SessionEvent.plan:type_name -> compass.v1.SessionPlan + 46, // 24: compass.v1.SessionEvent.notice:type_name -> compass.v1.SessionNotice + 47, // 25: compass.v1.SessionEvent.session_injection:type_name -> compass.v1.SessionInjection + 48, // 26: compass.v1.SessionEvent.session_error:type_name -> compass.v1.SessionError + 4, // 27: compass.v1.SessionToolCall.status:type_name -> compass.v1.AgentToolCallStatus + 4, // 28: compass.v1.SessionToolCallUpdate.status:type_name -> compass.v1.AgentToolCallStatus + 44, // 29: compass.v1.SessionToolCallUpdate.diffs:type_name -> compass.v1.SessionFileDiff + 38, // 30: compass.v1.SessionPlan.entries:type_name -> compass.v1.AgentPlanEntry + 6, // 31: compass.v1.SessionInjection.op_kind:type_name -> compass.v1.SessionInjectionKind + 7, // 32: compass.v1.SessionError.kind:type_name -> compass.v1.SessionErrorKind + 39, // 33: compass.v1.AgentSessionFrame.event:type_name -> compass.v1.SessionEvent + 3, // 34: compass.v1.AgentSessionFrame.state:type_name -> compass.v1.AgentSessionState + 34, // 35: compass.v1.GetAgentStatusResponse.statuses:type_name -> compass.v1.AgentSessionStatus + 75, // 36: compass.v1.ModelRegistryEntry.candidates:type_name -> compass.v1.ModelCandidate + 76, // 37: compass.v1.ModelRegistryEntry.metadata:type_name -> compass.v1.ModelMetadata + 96, // 38: compass.v1.ModelRegistry.entries:type_name -> compass.v1.ModelRegistry.EntriesEntry + 78, // 39: compass.v1.PutModelRegistryRequest.registry:type_name -> compass.v1.ModelRegistry + 78, // 40: compass.v1.GetModelRegistryResponse.registry:type_name -> compass.v1.ModelRegistry + 9, // 41: compass.v1.ForgeRef.provider:type_name -> compass.v1.ForgeProvider + 86, // 42: compass.v1.Issue.forge:type_name -> compass.v1.ForgeRef + 85, // 43: compass.v1.Issue.agent:type_name -> compass.v1.AgentAttribution + 97, // 44: compass.v1.Issue.updated_at:type_name -> google.protobuf.Timestamp + 8, // 45: compass.v1.Issue.state:type_name -> compass.v1.IssueState + 88, // 46: compass.v1.Issue.prs:type_name -> compass.v1.PullRequest + 92, // 47: compass.v1.Issue.tracker:type_name -> compass.v1.TrackerRef + 86, // 48: compass.v1.PullRequest.forge:type_name -> compass.v1.ForgeRef + 85, // 49: compass.v1.PullRequest.agent:type_name -> compass.v1.AgentAttribution + 91, // 50: compass.v1.PullRequest.changed:type_name -> compass.v1.ChangedStats + 89, // 51: compass.v1.PullRequest.checks:type_name -> compass.v1.ChecksSummary + 93, // 52: compass.v1.PullRequest.reviews:type_name -> compass.v1.Review + 94, // 53: compass.v1.PullRequest.threads:type_name -> compass.v1.ReviewThread + 90, // 54: compass.v1.ChecksSummary.checks:type_name -> compass.v1.Check + 95, // 55: compass.v1.ReviewThread.comments:type_name -> compass.v1.Comment + 77, // 56: compass.v1.ModelRegistry.EntriesEntry.value:type_name -> compass.v1.ModelRegistryEntry + 24, // 57: compass.v1.CompassService.GetServerInfo:input_type -> compass.v1.GetServerInfoRequest + 26, // 58: compass.v1.CompassService.WhoAmI:input_type -> compass.v1.WhoAmIRequest + 28, // 59: compass.v1.CompassService.SubscribeEvents:input_type -> compass.v1.SubscribeEventsRequest + 30, // 60: compass.v1.CompassService.ListBoardIssues:input_type -> compass.v1.ListBoardIssuesRequest + 51, // 61: compass.v1.CompassService.ProvisionAgentWorkspace:input_type -> compass.v1.ProvisionAgentWorkspaceRequest + 55, // 62: compass.v1.CompassService.StartAgentSession:input_type -> compass.v1.StartAgentSessionRequest + 57, // 63: compass.v1.CompassService.SpawnAgent:input_type -> compass.v1.SpawnAgentRequest + 59, // 64: compass.v1.CompassService.StopAgentSession:input_type -> compass.v1.StopAgentSessionRequest + 53, // 65: compass.v1.CompassService.RemoveAgentWorkspace:input_type -> compass.v1.RemoveAgentWorkspaceRequest + 61, // 66: compass.v1.CompassService.ReloadAgentSession:input_type -> compass.v1.ReloadAgentSessionRequest + 63, // 67: compass.v1.CompassService.GetAgentStatus:input_type -> compass.v1.GetAgentStatusRequest + 49, // 68: compass.v1.CompassService.SubscribeAgentSession:input_type -> compass.v1.SubscribeAgentSessionRequest + 65, // 69: compass.v1.CompassService.IssueToken:input_type -> compass.v1.IssueTokenRequest + 67, // 70: compass.v1.CompassService.RevokeToken:input_type -> compass.v1.RevokeTokenRequest + 69, // 71: compass.v1.CompassService.PutAgentConfig:input_type -> compass.v1.PutAgentConfigRequest + 71, // 72: compass.v1.CompassService.GetAgentConfigInfo:input_type -> compass.v1.GetAgentConfigInfoRequest + 73, // 73: compass.v1.CompassService.DeleteAgentConfig:input_type -> compass.v1.DeleteAgentConfigRequest + 79, // 74: compass.v1.CompassService.PutModelRegistry:input_type -> compass.v1.PutModelRegistryRequest + 81, // 75: compass.v1.CompassService.GetModelRegistry:input_type -> compass.v1.GetModelRegistryRequest + 83, // 76: compass.v1.CompassService.DeleteModelRegistry:input_type -> compass.v1.DeleteModelRegistryRequest + 10, // 77: compass.v1.SecretsService.SetSecret:input_type -> compass.v1.SetSecretRequest + 12, // 78: compass.v1.SecretsService.ListSecrets:input_type -> compass.v1.ListSecretsRequest + 15, // 79: compass.v1.SecretsService.DeleteSecret:input_type -> compass.v1.DeleteSecretRequest + 17, // 80: compass.v1.SecretsService.SetServerSecret:input_type -> compass.v1.SetServerSecretRequest + 19, // 81: compass.v1.SecretsService.DeleteServerSecret:input_type -> compass.v1.DeleteServerSecretRequest + 21, // 82: compass.v1.SecretsService.ListServerSecrets:input_type -> compass.v1.ListServerSecretsRequest + 25, // 83: compass.v1.CompassService.GetServerInfo:output_type -> compass.v1.GetServerInfoResponse + 27, // 84: compass.v1.CompassService.WhoAmI:output_type -> compass.v1.WhoAmIResponse + 29, // 85: compass.v1.CompassService.SubscribeEvents:output_type -> compass.v1.SubscribeEventsResponse + 31, // 86: compass.v1.CompassService.ListBoardIssues:output_type -> compass.v1.ListBoardIssuesResponse + 52, // 87: compass.v1.CompassService.ProvisionAgentWorkspace:output_type -> compass.v1.ProvisionAgentWorkspaceResponse + 56, // 88: compass.v1.CompassService.StartAgentSession:output_type -> compass.v1.StartAgentSessionResponse + 58, // 89: compass.v1.CompassService.SpawnAgent:output_type -> compass.v1.SpawnAgentResponse + 60, // 90: compass.v1.CompassService.StopAgentSession:output_type -> compass.v1.StopAgentSessionResponse + 54, // 91: compass.v1.CompassService.RemoveAgentWorkspace:output_type -> compass.v1.RemoveAgentWorkspaceResponse + 62, // 92: compass.v1.CompassService.ReloadAgentSession:output_type -> compass.v1.ReloadAgentSessionResponse + 64, // 93: compass.v1.CompassService.GetAgentStatus:output_type -> compass.v1.GetAgentStatusResponse + 50, // 94: compass.v1.CompassService.SubscribeAgentSession:output_type -> compass.v1.AgentSessionFrame + 66, // 95: compass.v1.CompassService.IssueToken:output_type -> compass.v1.IssueTokenResponse + 68, // 96: compass.v1.CompassService.RevokeToken:output_type -> compass.v1.RevokeTokenResponse + 70, // 97: compass.v1.CompassService.PutAgentConfig:output_type -> compass.v1.PutAgentConfigResponse + 72, // 98: compass.v1.CompassService.GetAgentConfigInfo:output_type -> compass.v1.GetAgentConfigInfoResponse + 74, // 99: compass.v1.CompassService.DeleteAgentConfig:output_type -> compass.v1.DeleteAgentConfigResponse + 80, // 100: compass.v1.CompassService.PutModelRegistry:output_type -> compass.v1.PutModelRegistryResponse + 82, // 101: compass.v1.CompassService.GetModelRegistry:output_type -> compass.v1.GetModelRegistryResponse + 84, // 102: compass.v1.CompassService.DeleteModelRegistry:output_type -> compass.v1.DeleteModelRegistryResponse + 11, // 103: compass.v1.SecretsService.SetSecret:output_type -> compass.v1.SetSecretResponse + 13, // 104: compass.v1.SecretsService.ListSecrets:output_type -> compass.v1.ListSecretsResponse + 16, // 105: compass.v1.SecretsService.DeleteSecret:output_type -> compass.v1.DeleteSecretResponse + 18, // 106: compass.v1.SecretsService.SetServerSecret:output_type -> compass.v1.SetServerSecretResponse + 20, // 107: compass.v1.SecretsService.DeleteServerSecret:output_type -> compass.v1.DeleteServerSecretResponse + 22, // 108: compass.v1.SecretsService.ListServerSecrets:output_type -> compass.v1.ListServerSecretsResponse + 83, // [83:109] is the sub-list for method output_type + 57, // [57:83] is the sub-list for method input_type + 57, // [57:57] is the sub-list for extension type_name + 57, // [57:57] is the sub-list for extension extendee + 0, // [0:57] is the sub-list for field type_name } func init() { file_compass_v1_compass_proto_init() } @@ -6307,7 +6457,7 @@ func file_compass_v1_compass_proto_init() { if File_compass_v1_compass_proto != nil { return } - file_compass_v1_compass_proto_msgTypes[16].OneofWrappers = []any{ + file_compass_v1_compass_proto_msgTypes[19].OneofWrappers = []any{ (*SubscribeEventsResponse_ServerStatus)(nil), (*SubscribeEventsResponse_ResyncRequired)(nil), (*SubscribeEventsResponse_AgentSessionStatus)(nil), @@ -6316,7 +6466,7 @@ func file_compass_v1_compass_proto_init() { (*SubscribeEventsResponse_AgentPlan)(nil), (*SubscribeEventsResponse_Issue)(nil), } - file_compass_v1_compass_proto_msgTypes[26].OneofWrappers = []any{ + file_compass_v1_compass_proto_msgTypes[29].OneofWrappers = []any{ (*SessionEvent_AssistantText)(nil), (*SessionEvent_Thinking)(nil), (*SessionEvent_ToolCall)(nil), @@ -6326,16 +6476,16 @@ func file_compass_v1_compass_proto_init() { (*SessionEvent_SessionInjection)(nil), (*SessionEvent_SessionError)(nil), } - file_compass_v1_compass_proto_msgTypes[31].OneofWrappers = []any{} - file_compass_v1_compass_proto_msgTypes[33].OneofWrappers = []any{} - file_compass_v1_compass_proto_msgTypes[35].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: 10, - NumMessages: 84, + NumMessages: 87, 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 a18d4476..24c14bf1 100644 --- a/go/gen/compass/v1/compassv1connect/compass.connect.go +++ b/go/gen/compass/v1/compassv1connect/compass.connect.go @@ -117,6 +117,9 @@ const ( // 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" ) // CompassServiceClient is a client for the compass.v1.CompassService service. @@ -947,6 +950,14 @@ type SecretsServiceClient interface { // 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. + // 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 + // routinely unset and the two states must be distinguishable. + ListServerSecrets(context.Context, *connect.Request[v1.ListServerSecretsRequest]) (*connect.Response[v1.ListServerSecretsResponse], error) } // NewSecretsServiceClient constructs a client for the compass.v1.SecretsService service. By @@ -990,6 +1001,12 @@ func NewSecretsServiceClient(httpClient connect.HTTPClient, baseURL string, opts connect.WithSchema(secretsServiceMethods.ByName("DeleteServerSecret")), connect.WithClientOptions(opts...), ), + listServerSecrets: connect.NewClient[v1.ListServerSecretsRequest, v1.ListServerSecretsResponse]( + httpClient, + baseURL+SecretsServiceListServerSecretsProcedure, + connect.WithSchema(secretsServiceMethods.ByName("ListServerSecrets")), + connect.WithClientOptions(opts...), + ), } } @@ -1000,6 +1017,7 @@ type secretsServiceClient struct { 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 calls compass.v1.SecretsService.SetSecret. @@ -1027,6 +1045,11 @@ func (c *secretsServiceClient) DeleteServerSecret(ctx context.Context, req *conn 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) +} + // SecretsServiceHandler is an implementation of the compass.v1.SecretsService service. type SecretsServiceHandler interface { // Declare a secret's registry row (name/delivery/kind/routing) and write its @@ -1047,6 +1070,14 @@ type SecretsServiceHandler interface { // 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. + // 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 + // routinely unset and the two states must be distinguishable. + ListServerSecrets(context.Context, *connect.Request[v1.ListServerSecretsRequest]) (*connect.Response[v1.ListServerSecretsResponse], error) } // NewSecretsServiceHandler builds an HTTP handler from the service implementation. It returns the @@ -1086,6 +1117,12 @@ func NewSecretsServiceHandler(svc SecretsServiceHandler, opts ...connect.Handler connect.WithSchema(secretsServiceMethods.ByName("DeleteServerSecret")), connect.WithHandlerOptions(opts...), ) + secretsServiceListServerSecretsHandler := connect.NewUnaryHandler( + SecretsServiceListServerSecretsProcedure, + svc.ListServerSecrets, + connect.WithSchema(secretsServiceMethods.ByName("ListServerSecrets")), + connect.WithHandlerOptions(opts...), + ) return "/compass.v1.SecretsService/", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { switch r.URL.Path { case SecretsServiceSetSecretProcedure: @@ -1098,6 +1135,8 @@ func NewSecretsServiceHandler(svc SecretsServiceHandler, opts ...connect.Handler secretsServiceSetServerSecretHandler.ServeHTTP(w, r) case SecretsServiceDeleteServerSecretProcedure: secretsServiceDeleteServerSecretHandler.ServeHTTP(w, r) + case SecretsServiceListServerSecretsProcedure: + secretsServiceListServerSecretsHandler.ServeHTTP(w, r) default: http.NotFound(w, r) } @@ -1126,3 +1165,7 @@ func (UnimplementedSecretsServiceHandler) SetServerSecret(context.Context, *conn 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 39343712..36d6a90d 100644 --- a/go/internal/auth/admin_gate.go +++ b/go/internal/auth/admin_gate.go @@ -127,14 +127,17 @@ func classifyProcedure(procedure string) (privilege, bool) { compassv1connect.SecretsServiceDeleteSecretProcedure: return authenticatedOpen{}, true - // The SERVER-secret write RPCs are ADMIN-only, unlike their user-facing - // siblings above. They write the separate server_secrets registry, whose + // 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. + // 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.SecretsServiceDeleteServerSecretProcedure, + compassv1connect.SecretsServiceListServerSecretsProcedure: return adminOnly{}, true default: diff --git a/go/internal/runnerhub/secrets_test.go b/go/internal/runnerhub/secrets_test.go index cffd0321..e0054f3b 100644 --- a/go/internal/runnerhub/secrets_test.go +++ b/go/internal/runnerhub/secrets_test.go @@ -46,6 +46,13 @@ func (f *fakeResolverSecrets) Resolve(_ context.Context, _ string) ([]secrets.Re func (f *fakeResolverSecrets) Set(_ context.Context, _, _, _ string) error { return nil } func (f *fakeResolverSecrets) Delete(_ context.Context, _ string) error { return nil } +// Statuses satisfies the Resolver interface. These tests exercise the container +// secrets-delivery seam, which never lists set/unset state, so it returns +// nothing rather than modelling a provider probe. +func (f *fakeResolverSecrets) Statuses(_ context.Context, _ string) ([]secrets.SecretStatus, error) { + return nil, nil +} + // runnerResolverForFetch is the token resolver the FetchSecrets door uses: it // accepts a single Runner token and rejects everything else, modelling the real // kind-gate contract the seam tests already rely on. diff --git a/go/internal/secrets/resolver.go b/go/internal/secrets/resolver.go index 78d75b66..1b8fa6fd 100644 --- a/go/internal/secrets/resolver.go +++ b/go/internal/secrets/resolver.go @@ -29,6 +29,13 @@ const defaultProfile = "default" // 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 +// the status path tests for this one rather than enumerating the misses — a new +// miss status upstream then reads as unset, which is the safe direction. +const reportStatusResolved = "resolved" + // declarations is the read surface the Resolver needs from the store: the whole // declared set. store.Store satisfies it. An interface (not the concrete // *store.Store) so the pure resolve logic is unit-testable with a fake, without @@ -56,6 +63,17 @@ type Resolver interface { 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 + // distinguish "declared" from "populated" without reading any value. + // + // Unlike Resolve it does NOT fail when a declared secret is unpopulated: an + // absent required value is reported as IsSet=false, not an error. That is + // the whole point — a server secret's row is self-declared at boot while its + // value is populated separately, so declared-but-unset is a normal state + // that must be observable rather than a resolve fault. + Statuses(ctx context.Context, reason string) ([]SecretStatus, error) } // SpecResolver is the SecretSpec-backed Resolver. It reads the names registry @@ -210,6 +228,83 @@ func (r *SpecResolver) Resolve(ctx context.Context, reason string) ([]ResolvedSe return out, nil } +// Statuses reports each declared secret's value-free set/unset state, reading +// the SecretSpec RESOLUTION REPORT rather than resolving values. reason is +// recorded in the SecretSpec audit log exactly as on the resolve path. An empty +// registry reports an empty set with no provider call. +// +// Report, not Load, is the primitive this needs, for two independent reasons: +// +// - buildManifest declares every name required = true, so Load fails +// WHOLESALE with a MissingRequiredError (and a nil set) the moment ONE +// declared secret is unpopulated. That is the common state for a server +// secret — the row is self-declared at boot, the value populated +// separately — so a Load-based status path would error out in precisely the +// case it exists to describe. Report instead reports a missing required +// secret as a per-secret status, so it describes a profile even when its +// secrets are not all available. +// - Report never returns a value. Load would pull every deployment secret's +// VALUE into this process just to answer a names-and-flags question, the +// same read the user-facing list path deliberately refuses. +// +// Report is a SecretSpec 0.20+ surface (both the SDK method and the underlying +// libsecretspec report mode); hostcheck.SecretSpecFloor is the floor that keeps +// it available, so it is not an optional capability to feature-detect here. +// +// A genuine provider fault (a *secretspec.Error — provider unreachable, bad +// manifest, reason policy refused) is returned as an error, never flattened +// into an all-unset report: a broken provider must not read as an +// unprovisioned one. +func (r *SpecResolver) Statuses(ctx context.Context, reason string) ([]SecretStatus, error) { + decls, err := r.store.DeclaredSecrets(ctx) + if err != nil { + return nil, fmt.Errorf("secrets: read registry: %w", err) + } + if len(decls) == 0 { + return nil, nil + } + profile := r.resolvedProfile() + manifestPath, err := r.writeManifest(profile, decls) + if err != nil { + return nil, err + } + // Same transient-input discipline as Resolve: a per-call temp manifest, so + // concurrent callers never share one path. The remove error is discarded + // deliberately — the file is already abandoned and the registry, not this + // file, is the durable source, so a failed unlink of a temp file is not + // actionable to the caller. + defer func() { _ = os.Remove(manifestPath) }() + + b := secretspec.New().WithPath(manifestPath).WithReason(reason) + if r.provider != "" { + b = b.WithProvider(r.provider) + } + b = b.WithProfile(profile) + report, err := b.Report() + if err != nil { + // *secretspec.Error carries a value-free message (kind + message), so + // wrapping cannot leak a value. + return nil, fmt.Errorf("secrets: report: %w", err) + } + + // Index the report by name: it is a slice, and the declared set is the + // authority on WHICH names to answer for, so this reports one status per + // declaration rather than whatever order the provider enumerated. + set := make(map[string]bool, len(report.Secrets)) + for _, s := range report.Secrets { + set[s.Name] = s.Status == reportStatusResolved + } + out := make([]SecretStatus, 0, len(decls)) + for _, d := range decls { + // A declared name absent from the report is unset, not an error: the + // report enumerates the manifest we just wrote from these same + // declarations, so an absence means the provider holds nothing for it — + // which is exactly what IsSet=false says. + out = append(out, SecretStatus{Name: d.Name, IsSet: set[d.Name]}) + } + 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 diff --git a/go/internal/secrets/resolver_test.go b/go/internal/secrets/resolver_test.go index 84e19c02..051f2497 100644 --- a/go/internal/secrets/resolver_test.go +++ b/go/internal/secrets/resolver_test.go @@ -9,6 +9,7 @@ package secrets import ( "context" + "errors" "io" "os" "os/exec" @@ -186,6 +187,42 @@ func TestResolveEmptyRegistry(t *testing.T) { // without the cdylib staged. } +// TestStatusesEmptyRegistry mirrors TestResolveEmptyRegistry for the status +// path: an empty registry short-circuits to an empty report with no provider +// call, so listing a fleet that has declared nothing never touches the FFI +// library or writes a manifest. +func TestStatusesEmptyRegistry(t *testing.T) { + fake := &fakeDeclarations{decls: nil} + r := NewSpecResolver(fake, "/tmp/state-does-not-need-to-exist") + + out, err := r.Statuses(context.Background(), "test") + if err != nil { + t.Fatalf("Statuses on empty registry: %v", err) + } + if out != nil { + t.Errorf("Statuses on empty registry = %v, want nil", out) + } + if !fake.called { + t.Error("Statuses did not read the declared set") + } +} + +// TestStatusesRegistryReadFailurePropagates asserts a registry fault surfaces as +// an error rather than an empty status set. An empty list is indistinguishable +// from "nothing declared", which would read as a healthy fleet with no secrets. +func TestStatusesRegistryReadFailurePropagates(t *testing.T) { + fake := &fakeDeclarations{err: errors.New("registry boom")} + r := NewSpecResolver(fake, "/tmp/state-does-not-need-to-exist") + + out, err := r.Statuses(context.Background(), "test") + if err == nil { + t.Fatal("Statuses swallowed a registry read failure; an empty set reads as a healthy empty fleet") + } + if out != nil { + t.Errorf("Statuses = %v on error, want nil", out) + } +} + // TestWriteManifestConcurrentDistinctPaths guards the F4 fix: each writeManifest // call must produce its OWN file, so concurrent resolves never share one path // and race the write-to-Load interval. The prior implementation wrote a single diff --git a/go/internal/secrets/secrets.go b/go/internal/secrets/secrets.go index 8d7d806a..50ce2c8f 100644 --- a/go/internal/secrets/secrets.go +++ b/go/internal/secrets/secrets.go @@ -155,6 +155,20 @@ func (s ResolvedSecret) String() string { // GoString redacts Value under %#v as well, so a struct dump can't leak it. func (s ResolvedSecret) GoString() string { return s.String() } +// SecretStatus is one declared secret's value-free status: its name and whether +// the provider currently holds a value for it. It carries NO value field by +// construction, so a status can never leak one however it is logged or +// formatted — the reason the status path exists alongside ResolvedSecret rather +// than being derived from it. +type SecretStatus struct { + Name string + // IsSet reports whether the provider holds a value for Name. False means + // the name is declared in the registry but unpopulated in the provider — + // a normal state for a server secret, whose row is self-declared at boot + // while the operator populates the value separately. + IsSet bool +} + // deliveryFromStore maps the persisted store delivery enum to this package's. func deliveryFromStore(d store.SecretDelivery) DeliveryKind { if d == store.SecretDeliveryEnv { diff --git a/go/server/secrets_service.go b/go/server/secrets_service.go index 65fd7fa0..932343a7 100644 --- a/go/server/secrets_service.go +++ b/go/server/secrets_service.go @@ -352,6 +352,64 @@ func (s *secretsService) DeleteServerSecret( 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. +// +// is_set is a PROVIDER PROBE here, unlike ListSecrets which hardcodes true. +// That asymmetry is structural, not an inconsistency: on the user path declare +// and set are ONE operation (declare-then-set in SetSecret), so a declared row +// implies a written value. Server-secret names are instead SELF-DECLARED at +// every boot (declareServerSecretNames) while the operator populates the values +// separately, so declared-but-unset is a routine state — and telling the two +// apart is the entire purpose of this verb. The probe reads the value-free +// SecretSpec report (serverResolver.Statuses), so no value is ever resolved to +// answer it. +// +// A provider fault is CodeInternal, deliberately NOT an all-unset list: the +// caller must be able to tell a broken provider from an unprovisioned one, +// since the remedy for each is the opposite of the other. +func (s *secretsService) ListServerSecrets( + ctx context.Context, + _ *connect.Request[compassv1.ListServerSecretsRequest], +) (*connect.Response[compassv1.ListServerSecretsResponse], error) { + if _, err := s.requireCaller(ctx); err != nil { + return nil, err + } + if s.serverResolver == nil { + return nil, connect.NewError(connect.CodeUnavailable, errNoServerResolver) + } + decls, err := s.store.DeclaredServerSecrets(ctx) + if err != nil { + return nil, connect.NewError(connect.CodeInternal, fmt.Errorf("listing declared server secrets: %w", err)) + } + 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. + 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)) + } + isSet := make(map[string]bool, len(statuses)) + for _, st := range statuses { + isSet[st.Name] = st.IsSet + } + // The REGISTRY drives the output, not the probe: the declared set is what + // this verb enumerates, and a declared name the probe did not report is + // unset rather than omitted. + out := make([]*compassv1.ServerSecretStatus, 0, len(decls)) + for _, d := range decls { + // Name goes out EXACTLY as stored, carrying its reserved prefix. The + // prefix strip is the CLI's, so the wire form stays unambiguous. + out = append(out, &compassv1.ServerSecretStatus{Name: d.Name, IsSet: isSet[d.Name]}) + } + return connect.NewResponse(&compassv1.ListServerSecretsResponse{ServerSecrets: out}), nil +} + // requireCaller returns the authenticated caller id, or CodeUnauthenticated when // none is in context (a door-wiring bug: an interceptor must attach one on every // door — fail closed, mirroring SubscribeAgentSession). diff --git a/go/server/secrets_service_pgtest_test.go b/go/server/secrets_service_pgtest_test.go index aa8dac42..223045c8 100644 --- a/go/server/secrets_service_pgtest_test.go +++ b/go/server/secrets_service_pgtest_test.go @@ -36,13 +36,26 @@ import ( // recordingResolver is a fake secrets.Resolver for the SecretsService tests. Set // and Delete record their calls and succeed; Resolve fails loudly, so a test that // wires this into ListSecrets proves the list path never resolves values to -// compute is_set (record §906-908 / brief item 7). +// compute is_set (record §906-908 / brief item 7). Statuses returns a scripted +// value-free report — the server-secret list path's 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 + statusHit bool +} + +func (r *recordingResolver) Statuses(_ context.Context, _ string) ([]secrets.SecretStatus, error) { + r.statusHit = true + if r.statusesErr != nil { + return nil, r.statusesErr + } + return r.statuses, nil } func (r *recordingResolver) Resolve(_ context.Context, _ string) ([]secrets.ResolvedSecret, error) { @@ -525,3 +538,108 @@ func TestSetServerSecretDoesNotBumpSecretsVersion(t *testing.T) { 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) + return req +} + +// TestListServerSecretsReportsDeclaredButUnset is the core contract of the verb +// and the regression guard on HOW is_set is computed. A server secret's names +// are self-declared at boot while the operator populates values separately, so +// declared-but-unset is routine — and distinguishing it from set is the entire +// point. +// +// This is written to FAIL under the naive "resolve the declared set" route: the +// generated manifest marks every declared name required=true, so a value- +// resolving probe fails WHOLESALE (MissingRequiredError, nil set) the moment one +// declared name is unpopulated, erroring the whole call instead of reporting the +// mixed state below. A value-free report has no such failure mode. +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. + 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) + } + } + f.serverResolver.statuses = []secrets.SecretStatus{ + {Name: "SERVER_APP_PEM", IsSet: true}, + {Name: "SERVER_WEBHOOK_SECRET", IsSet: false}, + } + + resp, err := f.client.ListServerSecrets(ctx, listServerReq(f.adminToken)) + if err != nil { + t.Fatalf("ListServerSecrets: %v", err) + } + got := map[string]bool{} + for _, s := range resp.Msg.GetServerSecrets() { + got[s.GetName()] = s.GetIsSet() + } + if len(got) != 2 { + t.Fatalf("got %d statuses, want 2: %v", len(got), got) + } + // Names go out in their STORED, prefixed form — the CLI does the strip. + if !got["SERVER_APP_PEM"] { + t.Error("SERVER_APP_PEM reported unset; the provider holds its value") + } + if got["SERVER_WEBHOOK_SECRET"] { + t.Error("SERVER_WEBHOOK_SECRET reported set; it is declared but unpopulated") + } + if !f.serverResolver.statusHit { + t.Error("is_set was not computed from a provider probe; a declared server secret's value is populated separately, so the registry row alone cannot answer it") + } + if f.serverResolver.resolveHit { + t.Error("ListServerSecrets resolved VALUES to compute is_set — the probe must be value-free") + } +} + +// TestListServerSecretsProviderFailureIsNotAllUnset pins the distinction an +// operator's remedy depends on: a broken provider must not look like an +// unprovisioned one. Reporting everything unset on a probe fault would send the +// operator to re-populate secrets that are in fact already there. +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) + } + f.serverResolver.statusesErr = errors.New("provider unreachable") + + resp, err := f.client.ListServerSecrets(ctx, listServerReq(f.adminToken)) + if err == nil { + t.Fatalf("want an error on a provider fault, got a list: %v", resp.Msg.GetServerSecrets()) + } + if got := connect.CodeOf(err); got != connect.CodeInternal { + t.Fatalf("want CodeInternal, got %v (err=%v)", got, err) + } +} + +// TestListServerSecretsAdminOnly gates the LIST as tightly as the writes: the +// declared server-secret names are the deployment's own inventory, not +// something a plain user or an agent token may enumerate. +func TestListServerSecretsAdminOnly(t *testing.T) { + f := newSecretsFixture(t) + ctx := context.Background() + + for _, tc := range []struct { + name string + token string + }{ + {"user", f.userToken}, + {"agent", f.agentToken}, + } { + _, err := f.client.ListServerSecrets(ctx, listServerReq(tc.token)) + 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.ListServerSecrets(ctx, listServerReq(f.adminToken)); err != nil { + t.Fatalf("admin token: %v", err) + } +} diff --git a/go/server/serve_forge_test.go b/go/server/serve_forge_test.go index d33304df..419f4cd7 100644 --- a/go/server/serve_forge_test.go +++ b/go/server/serve_forge_test.go @@ -45,6 +45,12 @@ func (r *fakeResolver) Resolve(_ context.Context, _ string) ([]secrets.ResolvedS 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) { + return nil, nil +} + func TestForgeConfigEnableAndDefaults(t *testing.T) { t.Run("board ingestion disabled by default", func(t *testing.T) { if (ForgeConfig{}).boardIngestionEnabled() { 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 c88c7189..2abbef53 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("Chhjb21wYXNzL3YxL2NvbXBhc3MucHJvdG8SCmNvbXBhc3MudjEiqAEKEFNldFNlY3JldFJlcXVlc3QSDAoEbmFtZRgBIAEoCRISCgV2YWx1ZRgCIAEoCUIDgAEBEiwKCGRlbGl2ZXJ5GAMgASgOMhouY29tcGFzcy52MS5TZWNyZXREZWxpdmVyeRIkCgRraW5kGAQgASgOMhYuY29tcGFzcy52MS5TZWNyZXRLaW5kEhAKCHByb3ZpZGVyGAUgASgJEgwKBGhvc3QYBiABKAkiEwoRU2V0U2VjcmV0UmVzcG9uc2UiFAoSTGlzdFNlY3JldHNSZXF1ZXN0IkAKE0xpc3RTZWNyZXRzUmVzcG9uc2USKQoHc2VjcmV0cxgBIAMoCzIYLmNvbXBhc3MudjEuU2VjcmV0U3RhdHVzIqABCgxTZWNyZXRTdGF0dXMSDAoEbmFtZRgBIAEoCRIOCgZpc19zZXQYAiABKAgSLAoIZGVsaXZlcnkYAyABKA4yGi5jb21wYXNzLnYxLlNlY3JldERlbGl2ZXJ5EiQKBGtpbmQYBCABKA4yFi5jb21wYXNzLnYxLlNlY3JldEtpbmQSEAoIcHJvdmlkZXIYBSABKAkSDAoEaG9zdBgGIAEoCSIjChNEZWxldGVTZWNyZXRSZXF1ZXN0EgwKBG5hbWUYASABKAkiFgoURGVsZXRlU2VjcmV0UmVzcG9uc2UiOgoWU2V0U2VydmVyU2VjcmV0UmVxdWVzdBIMCgRuYW1lGAEgASgJEhIKBXZhbHVlGAIgASgJQgOAAQEiGQoXU2V0U2VydmVyU2VjcmV0UmVzcG9uc2UiKQoZRGVsZXRlU2VydmVyU2VjcmV0UmVxdWVzdBIMCgRuYW1lGAEgASgJIhwKGkRlbGV0ZVNlcnZlclNlY3JldFJlc3BvbnNlIhYKFEdldFNlcnZlckluZm9SZXF1ZXN0Ij0KFUdldFNlcnZlckluZm9SZXNwb25zZRIPCgd2ZXJzaW9uGAEgASgJEhMKC2FwaV92ZXJzaW9uGAIgASgJIg8KDVdob0FtSVJlcXVlc3QiJAoOV2hvQW1JUmVzcG9uc2USEgoKYWNjb3VudF9pZBgBIAEoCSJDChZTdWJzY3JpYmVFdmVudHNSZXF1ZXN0EhEKCXNpbmNlX3NlcRgBIAEoBBIWCg5pbnN0YW5jZV9lcG9jaBgCIAEoBCLiAwoXU3Vic2NyaWJlRXZlbnRzUmVzcG9uc2USCwoDc2VxGAEgASgEEhIKCmF0X3VuaXhfbXMYAiABKAMSFgoOaW5zdGFuY2VfZXBvY2gYAyABKAQSFAoMc25hcHNob3Rfc2VxGAQgASgEEjEKDXNlcnZlcl9zdGF0dXMYCiABKAsyGC5jb21wYXNzLnYxLlNlcnZlclN0YXR1c0gAEjUKD3Jlc3luY19yZXF1aXJlZBgLIAEoCzIaLmNvbXBhc3MudjEuUmVzeW5jUmVxdWlyZWRIABI+ChRhZ2VudF9zZXNzaW9uX3N0YXR1cxgMIAEoCzIeLmNvbXBhc3MudjEuQWdlbnRTZXNzaW9uU3RhdHVzSAASPAoTYWdlbnRfbWVzc2FnZV9jaHVuaxgNIAEoCzIdLmNvbXBhc3MudjEuQWdlbnRNZXNzYWdlQ2h1bmtIABI0Cg9hZ2VudF90b29sX2NhbGwYDiABKAsyGS5jb21wYXNzLnYxLkFnZW50VG9vbENhbGxIABIrCgphZ2VudF9wbGFuGA8gASgLMhUuY29tcGFzcy52MS5BZ2VudFBsYW5IABIiCgVpc3N1ZRgQIAEoCzIRLmNvbXBhc3MudjEuSXNzdWVIAEIJCgdwYXlsb2FkIi4KFkxpc3RCb2FyZElzc3Vlc1JlcXVlc3QSFAoMc25hcHNob3Rfc2VxGAEgASgEIjwKF0xpc3RCb2FyZElzc3Vlc1Jlc3BvbnNlEiEKBmlzc3VlcxgBIAMoCzIRLmNvbXBhc3MudjEuSXNzdWUiNgoMU2VydmVyU3RhdHVzEiYKBXN0YXRlGAEgASgOMhcuY29tcGFzcy52MS5TZXJ2ZXJTdGF0ZSIQCg5SZXN5bmNSZXF1aXJlZCJwChJBZ2VudFNlc3Npb25TdGF0dXMSEgoKc2Vzc2lvbl9pZBgBIAEoCRIsCgVzdGF0ZRgCIAEoDjIdLmNvbXBhc3MudjEuQWdlbnRTZXNzaW9uU3RhdGUSGAoQYWdlbnRfYWNjb3VudF9pZBgDIAEoCSJJChFBZ2VudE1lc3NhZ2VDaHVuaxISCgpzZXNzaW9uX2lkGAEgASgJEgwKBHRleHQYAiABKAkSEgoKaXNfdGhvdWdodBgDIAEoCCJ5Cg1BZ2VudFRvb2xDYWxsEhIKCnNlc3Npb25faWQYASABKAkSFAoMdG9vbF9jYWxsX2lkGAIgASgJEg0KBXRpdGxlGAMgASgJEi8KBnN0YXR1cxgEIAEoDjIfLmNvbXBhc3MudjEuQWdlbnRUb29sQ2FsbFN0YXR1cyJMCglBZ2VudFBsYW4SEgoKc2Vzc2lvbl9pZBgBIAEoCRIrCgdlbnRyaWVzGAIgAygLMhouY29tcGFzcy52MS5BZ2VudFBsYW5FbnRyeSJTCg5BZ2VudFBsYW5FbnRyeRIPCgdjb250ZW50GAEgASgJEjAKBnN0YXR1cxgCIAEoDjIgLmNvbXBhc3MudjEuQWdlbnRQbGFuRW50cnlTdGF0dXMi3wMKDFNlc3Npb25FdmVudBIQCghldmVudF9pZBgBIAEoCRISCgphdF91bml4X21zGAIgASgDEjoKDmFzc2lzdGFudF90ZXh0GAMgASgLMiAuY29tcGFzcy52MS5TZXNzaW9uQXNzaXN0YW50VGV4dEgAEi8KCHRoaW5raW5nGAQgASgLMhsuY29tcGFzcy52MS5TZXNzaW9uVGhpbmtpbmdIABIwCgl0b29sX2NhbGwYBSABKAsyGy5jb21wYXNzLnYxLlNlc3Npb25Ub29sQ2FsbEgAEj0KEHRvb2xfY2FsbF91cGRhdGUYBiABKAsyIS5jb21wYXNzLnYxLlNlc3Npb25Ub29sQ2FsbFVwZGF0ZUgAEicKBHBsYW4YByABKAsyFy5jb21wYXNzLnYxLlNlc3Npb25QbGFuSAASKwoGbm90aWNlGAggASgLMhkuY29tcGFzcy52MS5TZXNzaW9uTm90aWNlSAASOQoRc2Vzc2lvbl9pbmplY3Rpb24YCSABKAsyHC5jb21wYXNzLnYxLlNlc3Npb25JbmplY3Rpb25IABIxCg1zZXNzaW9uX2Vycm9yGAogASgLMhguY29tcGFzcy52MS5TZXNzaW9uRXJyb3JIAEIHCgVldmVudCI4ChRTZXNzaW9uQXNzaXN0YW50VGV4dBIMCgR0ZXh0GAEgASgJEhIKCm1lc3NhZ2VfaWQYAiABKAkiMwoPU2Vzc2lvblRoaW5raW5nEgwKBHRleHQYASABKAkSEgoKbWVzc2FnZV9pZBgCIAEoCSJnCg9TZXNzaW9uVG9vbENhbGwSFAoMdG9vbF9jYWxsX2lkGAEgASgJEg0KBXRpdGxlGAIgASgJEi8KBnN0YXR1cxgDIAEoDjIfLmNvbXBhc3MudjEuQWdlbnRUb29sQ2FsbFN0YXR1cyKaAQoVU2Vzc2lvblRvb2xDYWxsVXBkYXRlEhQKDHRvb2xfY2FsbF9pZBgBIAEoCRIvCgZzdGF0dXMYAiABKA4yHy5jb21wYXNzLnYxLkFnZW50VG9vbENhbGxTdGF0dXMSDgoGb3V0cHV0GAMgASgJEioKBWRpZmZzGAQgAygLMhsuY29tcGFzcy52MS5TZXNzaW9uRmlsZURpZmYiVQoPU2Vzc2lvbkZpbGVEaWZmEgwKBHBhdGgYASABKAkSFQoIb2xkX3RleHQYAiABKAlIAIgBARIQCghuZXdfdGV4dBgDIAEoCUILCglfb2xkX3RleHQiOgoLU2Vzc2lvblBsYW4SKwoHZW50cmllcxgBIAMoCzIaLmNvbXBhc3MudjEuQWdlbnRQbGFuRW50cnkiOQoNU2Vzc2lvbk5vdGljZRIMCgR0ZXh0GAEgASgJEhEKBGxpbmsYAiABKAlIAIgBAUIHCgVfbGluayKDAQoQU2Vzc2lvbkluamVjdGlvbhIxCgdvcF9raW5kGAEgASgOMiAuY29tcGFzcy52MS5TZXNzaW9uSW5qZWN0aW9uS2luZBISCgptZXNzYWdlX2lkGAIgASgJEhMKC2Zyb21faGFuZGxlGAMgASgJEhMKC3RyYWNlcGFyZW50GAQgASgJImsKDFNlc3Npb25FcnJvchIqCgRraW5kGAEgASgOMhwuY29tcGFzcy52MS5TZXNzaW9uRXJyb3JLaW5kEg8KB21lc3NhZ2UYAiABKAkSEwoGc3RhdHVzGAMgASgFSACIAQFCCQoHX3N0YXR1cyIyChxTdWJzY3JpYmVBZ2VudFNlc3Npb25SZXF1ZXN0EhIKCnNlc3Npb25faWQYASABKAkifgoRQWdlbnRTZXNzaW9uRnJhbWUSEgoKc2Vzc2lvbl9pZBgBIAEoCRInCgVldmVudBgCIAEoCzIYLmNvbXBhc3MudjEuU2Vzc2lvbkV2ZW50EiwKBXN0YXRlGAMgASgOMh0uY29tcGFzcy52MS5BZ2VudFNlc3Npb25TdGF0ZSJwCh5Qcm92aXNpb25BZ2VudFdvcmtzcGFjZVJlcXVlc3QSFAoMYWdlbnRfaGFuZGxlGAEgASgJEhkKEWNsaWVudF9yZXF1ZXN0X2lkGAIgASgJEg8KB3BlcnNvbmEYAyABKAkSDAoEcm9sZRgEIAEoCSI5Ch9Qcm92aXNpb25BZ2VudFdvcmtzcGFjZVJlc3BvbnNlEhYKDmNvbnRhaW5lcl9uYW1lGAEgASgJIlAKG1JlbW92ZUFnZW50V29ya3NwYWNlUmVxdWVzdBIWCg5jb250YWluZXJfbmFtZRgBIAEoCRIZChFjbGllbnRfcmVxdWVzdF9pZBgCIAEoCSIeChxSZW1vdmVBZ2VudFdvcmtzcGFjZVJlc3BvbnNlImMKGFN0YXJ0QWdlbnRTZXNzaW9uUmVxdWVzdBIWCg5jb250YWluZXJfbmFtZRgBIAEoCRIZChFyZXN1bWVfc2Vzc2lvbl9pZBgDIAEoCUoECAIQA1IOaW5pdGlhbF9wcm9tcHQiLwoZU3RhcnRBZ2VudFNlc3Npb25SZXNwb25zZRISCgpzZXNzaW9uX2lkGAEgASgJIloKEVNwYXduQWdlbnRSZXF1ZXN0EhQKDGFnZW50X2hhbmRsZRgBIAEoCRIZChFjbGllbnRfcmVxdWVzdF9pZBgDIAEoCUoECAIQA1IOaW5pdGlhbF9wcm9tcHQiQAoSU3Bhd25BZ2VudFJlc3BvbnNlEhIKCnNlc3Npb25faWQYASABKAkSFgoOY29udGFpbmVyX25hbWUYAiABKAkiLQoXU3RvcEFnZW50U2Vzc2lvblJlcXVlc3QSEgoKc2Vzc2lvbl9pZBgBIAEoCSIaChhTdG9wQWdlbnRTZXNzaW9uUmVzcG9uc2UiLwoZUmVsb2FkQWdlbnRTZXNzaW9uUmVxdWVzdBISCgpzZXNzaW9uX2lkGAEgASgJIjAKGlJlbG9hZEFnZW50U2Vzc2lvblJlc3BvbnNlEhIKCnNlc3Npb25faWQYASABKAkiKwoVR2V0QWdlbnRTdGF0dXNSZXF1ZXN0EhIKCnNlc3Npb25faWQYASABKAkiSgoWR2V0QWdlbnRTdGF0dXNSZXNwb25zZRIwCghzdGF0dXNlcxgBIAMoCzIeLmNvbXBhc3MudjEuQWdlbnRTZXNzaW9uU3RhdHVzIisKEUlzc3VlVG9rZW5SZXF1ZXN0EhYKDmFjY291bnRfaGFuZGxlGAEgASgJIiMKEklzc3VlVG9rZW5SZXNwb25zZRINCgV0b2tlbhgBIAEoCSIoChJSZXZva2VUb2tlblJlcXVlc3QSEgoFdG9rZW4YASABKAlCA4ABASIVChNSZXZva2VUb2tlblJlc3BvbnNlIicKFVB1dEFnZW50Q29uZmlnUmVxdWVzdBIOCgZidW5kbGUYASABKAwiKQoWUHV0QWdlbnRDb25maWdSZXNwb25zZRIPCgd2ZXJzaW9uGAEgASgJIhsKGUdldEFnZW50Q29uZmlnSW5mb1JlcXVlc3Qi2gEKGkdldEFnZW50Q29uZmlnSW5mb1Jlc3BvbnNlEg8KB3ZlcnNpb24YASABKAkSDgoGc2tpbGxzGAIgAygJEhIKCmV4dGVuc2lvbnMYAyADKAkSEwoLbWNwX3NlcnZlcnMYBCADKAkSFAoMaGFzX3NldHRpbmdzGAUgASgIEhUKDWhhc19hZ2VudHNfbWQYBiABKAgSDQoFcnVsZXMYByADKAkSEQoJc3ViYWdlbnRzGAggAygJEhIKCmhhc19tb2RlbHMYCSABKAgSDwoHcHJvbXB0cxgKIAMoCSIaChhEZWxldGVBZ2VudENvbmZpZ1JlcXVlc3QiGwoZRGVsZXRlQWdlbnRDb25maWdSZXNwb25zZSI0Cg5Nb2RlbENhbmRpZGF0ZRIQCghwcm92aWRlchgBIAEoCRIQCghtb2RlbF9pZBgCIAEoCSJxCg1Nb2RlbE1ldGFkYXRhEhYKDmNvbnRleHRfd2luZG93GAEgASgDEhwKFGlucHV0X2Nvc3RfbWljcm9fdXNkGAIgASgDEh0KFW91dHB1dF9jb3N0X21pY3JvX3VzZBgDIAEoAxILCgNhcGkYBCABKAkihwEKEk1vZGVsUmVnaXN0cnlFbnRyeRIUCgxkaXNwbGF5X25hbWUYASABKAkSLgoKY2FuZGlkYXRlcxgCIAMoCzIaLmNvbXBhc3MudjEuTW9kZWxDYW5kaWRhdGUSKwoIbWV0YWRhdGEYAyABKAsyGS5jb21wYXNzLnYxLk1vZGVsTWV0YWRhdGEimAEKDU1vZGVsUmVnaXN0cnkSNwoHZW50cmllcxgBIAMoCzImLmNvbXBhc3MudjEuTW9kZWxSZWdpc3RyeS5FbnRyaWVzRW50cnkaTgoMRW50cmllc0VudHJ5EgsKA2tleRgBIAEoCRItCgV2YWx1ZRgCIAEoCzIeLmNvbXBhc3MudjEuTW9kZWxSZWdpc3RyeUVudHJ5OgI4ASJgChdQdXRNb2RlbFJlZ2lzdHJ5UmVxdWVzdBIrCghyZWdpc3RyeRgBIAEoCzIZLmNvbXBhc3MudjEuTW9kZWxSZWdpc3RyeRIYChBleHBlY3RlZF92ZXJzaW9uGAIgASgDIisKGFB1dE1vZGVsUmVnaXN0cnlSZXNwb25zZRIPCgd2ZXJzaW9uGAEgASgDIhkKF0dldE1vZGVsUmVnaXN0cnlSZXF1ZXN0IlgKGEdldE1vZGVsUmVnaXN0cnlSZXNwb25zZRIPCgd2ZXJzaW9uGAEgASgDEisKCHJlZ2lzdHJ5GAIgASgLMhkuY29tcGFzcy52MS5Nb2RlbFJlZ2lzdHJ5IhwKGkRlbGV0ZU1vZGVsUmVnaXN0cnlSZXF1ZXN0Ih0KG0RlbGV0ZU1vZGVsUmVnaXN0cnlSZXNwb25zZSIoChBBZ2VudEF0dHJpYnV0aW9uEhQKDGFnZW50X2hhbmRsZRgBIAEoCSJFCghGb3JnZVJlZhIrCghwcm92aWRlchgBIAEoDjIZLmNvbXBhc3MudjEuRm9yZ2VQcm92aWRlchIMCgRob3N0GAIgASgJItQDCgVJc3N1ZRIKCgJpZBgBIAEoCRIjCgVmb3JnZRgCIAEoCzIULmNvbXBhc3MudjEuRm9yZ2VSZWYSDAoEcmVwbxgDIAEoCRIOCgZudW1iZXIYBCABKA0SDQoFdGl0bGUYBSABKAkSDAoEYm9keRgGIAEoCRITCgtmb3JnZV9zdGF0ZRgHIAEoCRILCgN1cmwYCCABKAkSKwoFYWdlbnQYCSABKAsyHC5jb21wYXNzLnYxLkFnZW50QXR0cmlidXRpb24SFQoNZm9yZ2VfYWNjb3VudBgKIAEoCRIOCgZsYWJlbHMYCyADKAkSLgoKdXBkYXRlZF9hdBgTIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASJQoFc3RhdGUYDCABKA4yFi5jb21wYXNzLnYxLklzc3VlU3RhdGUSEAoIcHJpb3JpdHkYDSABKAkSEAoIYXNzaWduZWUYDiABKAkSDwoHc3VtbWFyeRgPIAEoCRIOCgZicmFuY2gYECABKAkSJAoDcHJzGBEgAygLMhcuY29tcGFzcy52MS5QdWxsUmVxdWVzdBInCgd0cmFja2VyGBIgASgLMhYuY29tcGFzcy52MS5UcmFja2VyUmVmIp4DCgtQdWxsUmVxdWVzdBIjCgVmb3JnZRgBIAEoCzIULmNvbXBhc3MudjEuRm9yZ2VSZWYSDAoEcmVwbxgCIAEoCRIOCgZudW1iZXIYAyABKA0SDQoFdGl0bGUYBCABKAkSEwoLZm9yZ2Vfc3RhdGUYBSABKAkSCwoDdXJsGAYgASgJEhAKCGhlYWRfcmVmGAcgASgJEhAKCGJhc2VfcmVmGAggASgJEisKBWFnZW50GAkgASgLMhwuY29tcGFzcy52MS5BZ2VudEF0dHJpYnV0aW9uEhUKDWZvcmdlX2FjY291bnQYCiABKAkSDQoFZHJhZnQYCyABKAgSKQoHY2hhbmdlZBgMIAEoCzIYLmNvbXBhc3MudjEuQ2hhbmdlZFN0YXRzEikKBmNoZWNrcxgNIAEoCzIZLmNvbXBhc3MudjEuQ2hlY2tzU3VtbWFyeRIjCgdyZXZpZXdzGA4gAygLMhIuY29tcGFzcy52MS5SZXZpZXcSKQoHdGhyZWFkcxgPIAMoCzIYLmNvbXBhc3MudjEuUmV2aWV3VGhyZWFkIlMKDUNoZWNrc1N1bW1hcnkSEAoIaGVhZF9zaGEYASABKAkSDQoFc3RhdGUYAiABKAkSIQoGY2hlY2tzGAMgAygLMhEuY29tcGFzcy52MS5DaGVjayJDCgVDaGVjaxIMCgRuYW1lGAEgASgJEg0KBXN0YXRlGAIgASgJEgsKA3VybBgDIAEoCRIQCghyZXF1aXJlZBgEIAEoCCJDCgxDaGFuZ2VkU3RhdHMSDQoFZmlsZXMYASABKA0SEQoJYWRkaXRpb25zGAIgASgNEhEKCWRlbGV0aW9ucxgDIAEoDSJDCgpUcmFja2VyUmVmEgwKBGtpbmQYASABKAkSCgoCaWQYAiABKAkSDgoGc3RhdHVzGAMgASgJEgsKA3VybBgEIAEoCSJHCgZSZXZpZXcSDgoGYXV0aG9yGAEgASgJEg4KBmlzX2JvdBgCIAEoCBIPCgd2ZXJkaWN0GAMgASgJEgwKBGJvZHkYBCABKAkiVQoMUmV2aWV3VGhyZWFkEgwKBHBhdGgYASABKAkSEAoIcmVzb2x2ZWQYAiABKAgSJQoIY29tbWVudHMYAyADKAsyEy5jb21wYXNzLnYxLkNvbW1lbnQiNwoHQ29tbWVudBIOCgZhdXRob3IYASABKAkSDgoGaXNfYm90GAIgASgIEgwKBGJvZHkYAyABKAkqZAoOU2VjcmV0RGVsaXZlcnkSHwobU0VDUkVUX0RFTElWRVJZX1VOU1BFQ0lGSUVEEAASGAoUU0VDUkVUX0RFTElWRVJZX0ZJTEUQARIXChNTRUNSRVRfREVMSVZFUllfRU5WEAIqcAoKU2VjcmV0S2luZBIbChdTRUNSRVRfS0lORF9VTlNQRUNJRklFRBAAEhcKE1NFQ1JFVF9LSU5EX0dFTkVSSUMQARIYChRTRUNSRVRfS0lORF9QUk9WSURFUhACEhIKDlNFQ1JFVF9LSU5EX0dIEAMqQwoLU2VydmVyU3RhdGUSHAoYU0VSVkVSX1NUQVRFX1VOU1BFQ0lGSUVEEAASFgoSU0VSVkVSX1NUQVRFX1JFQURZEAEqggIKEUFnZW50U2Vzc2lvblN0YXRlEiMKH0FHRU5UX1NFU1NJT05fU1RBVEVfVU5TUEVDSUZJRUQQABIgChxBR0VOVF9TRVNTSU9OX1NUQVRFX1NUQVJUSU5HEAESHQoZQUdFTlRfU0VTU0lPTl9TVEFURV9SRUFEWRACEh8KG0FHRU5UX1NFU1NJT05fU1RBVEVfV09SS0lORxADEh8KG0FHRU5UX1NFU1NJT05fU1RBVEVfU1RPUFBFRBAEEh8KG0FHRU5UX1NFU1NJT05fU1RBVEVfRVJST1JFRBAFEiQKIEFHRU5UX1NFU1NJT05fU1RBVEVfRElTQ09OTkVDVEVEEAYq0gEKE0FnZW50VG9vbENhbGxTdGF0dXMSJgoiQUdFTlRfVE9PTF9DQUxMX1NUQVRVU19VTlNQRUNJRklFRBAAEiIKHkFHRU5UX1RPT0xfQ0FMTF9TVEFUVVNfUEVORElORxABEiYKIkFHRU5UX1RPT0xfQ0FMTF9TVEFUVVNfSU5fUFJPR1JFU1MQAhIkCiBBR0VOVF9UT09MX0NBTExfU1RBVFVTX0NPTVBMRVRFRBADEiEKHUFHRU5UX1RPT0xfQ0FMTF9TVEFUVVNfRkFJTEVEEAQqtAEKFEFnZW50UGxhbkVudHJ5U3RhdHVzEicKI0FHRU5UX1BMQU5fRU5UUllfU1RBVFVTX1VOU1BFQ0lGSUVEEAASIwofQUdFTlRfUExBTl9FTlRSWV9TVEFUVVNfUEVORElORxABEicKI0FHRU5UX1BMQU5fRU5UUllfU1RBVFVTX0lOX1BST0dSRVNTEAISJQohQUdFTlRfUExBTl9FTlRSWV9TVEFUVVNfQ09NUExFVEVEEAMqhAEKFFNlc3Npb25JbmplY3Rpb25LaW5kEiYKIlNFU1NJT05fSU5KRUNUSU9OX0tJTkRfVU5TUEVDSUZJRUQQABIgChxTRVNTSU9OX0lOSkVDVElPTl9LSU5EX1NURUVSEAESIgoeU0VTU0lPTl9JTkpFQ1RJT05fS0lORF9ERUxJVkVSEAIqdAoQU2Vzc2lvbkVycm9yS2luZBIiCh5TRVNTSU9OX0VSUk9SX0tJTkRfVU5TUEVDSUZJRUQQABIcChhTRVNTSU9OX0VSUk9SX0tJTkRfRVJST1IQARIeChpTRVNTSU9OX0VSUk9SX0tJTkRfQUJPUlRFRBACKvEBCgpJc3N1ZVN0YXRlEhsKF0lTU1VFX1NUQVRFX1VOU1BFQ0lGSUVEEAASFwoTSVNTVUVfU1RBVEVfQkFDS0xPRxABEhQKEElTU1VFX1NUQVRFX1RPRE8QAhIWChJJU1NVRV9TVEFURV9RVUVVRUQQAxIXChNJU1NVRV9TVEFURV9CTE9DS0VEEAQSGwoXSVNTVUVfU1RBVEVfSU5fUFJPR1JFU1MQBRIZChVJU1NVRV9TVEFURV9JTl9SRVZJRVcQBhIUChBJU1NVRV9TVEFURV9ET05FEAcSGAoUSVNTVUVfU1RBVEVfQVJDSElWRUQQCCqcAQoNRm9yZ2VQcm92aWRlchIeChpGT1JHRV9QUk9WSURFUl9VTlNQRUNJRklFRBAAEhkKFUZPUkdFX1BST1ZJREVSX0dJVEhVQhABEhkKFUZPUkdFX1BST1ZJREVSX0dJVExBQhACEhoKFkZPUkdFX1BST1ZJREVSX0ZPUkdFSk8QAxIZChVGT1JHRV9QUk9WSURFUl9MSU5FQVIQBDLTDgoOQ29tcGFzc1NlcnZpY2USVAoNR2V0U2VydmVySW5mbxIgLmNvbXBhc3MudjEuR2V0U2VydmVySW5mb1JlcXVlc3QaIS5jb21wYXNzLnYxLkdldFNlcnZlckluZm9SZXNwb25zZRI/CgZXaG9BbUkSGS5jb21wYXNzLnYxLldob0FtSVJlcXVlc3QaGi5jb21wYXNzLnYxLldob0FtSVJlc3BvbnNlElwKD1N1YnNjcmliZUV2ZW50cxIiLmNvbXBhc3MudjEuU3Vic2NyaWJlRXZlbnRzUmVxdWVzdBojLmNvbXBhc3MudjEuU3Vic2NyaWJlRXZlbnRzUmVzcG9uc2UwARJaCg9MaXN0Qm9hcmRJc3N1ZXMSIi5jb21wYXNzLnYxLkxpc3RCb2FyZElzc3Vlc1JlcXVlc3QaIy5jb21wYXNzLnYxLkxpc3RCb2FyZElzc3Vlc1Jlc3BvbnNlEnIKF1Byb3Zpc2lvbkFnZW50V29ya3NwYWNlEiouY29tcGFzcy52MS5Qcm92aXNpb25BZ2VudFdvcmtzcGFjZVJlcXVlc3QaKy5jb21wYXNzLnYxLlByb3Zpc2lvbkFnZW50V29ya3NwYWNlUmVzcG9uc2USYAoRU3RhcnRBZ2VudFNlc3Npb24SJC5jb21wYXNzLnYxLlN0YXJ0QWdlbnRTZXNzaW9uUmVxdWVzdBolLmNvbXBhc3MudjEuU3RhcnRBZ2VudFNlc3Npb25SZXNwb25zZRJLCgpTcGF3bkFnZW50Eh0uY29tcGFzcy52MS5TcGF3bkFnZW50UmVxdWVzdBoeLmNvbXBhc3MudjEuU3Bhd25BZ2VudFJlc3BvbnNlEl0KEFN0b3BBZ2VudFNlc3Npb24SIy5jb21wYXNzLnYxLlN0b3BBZ2VudFNlc3Npb25SZXF1ZXN0GiQuY29tcGFzcy52MS5TdG9wQWdlbnRTZXNzaW9uUmVzcG9uc2USaQoUUmVtb3ZlQWdlbnRXb3Jrc3BhY2USJy5jb21wYXNzLnYxLlJlbW92ZUFnZW50V29ya3NwYWNlUmVxdWVzdBooLmNvbXBhc3MudjEuUmVtb3ZlQWdlbnRXb3Jrc3BhY2VSZXNwb25zZRJjChJSZWxvYWRBZ2VudFNlc3Npb24SJS5jb21wYXNzLnYxLlJlbG9hZEFnZW50U2Vzc2lvblJlcXVlc3QaJi5jb21wYXNzLnYxLlJlbG9hZEFnZW50U2Vzc2lvblJlc3BvbnNlElcKDkdldEFnZW50U3RhdHVzEiEuY29tcGFzcy52MS5HZXRBZ2VudFN0YXR1c1JlcXVlc3QaIi5jb21wYXNzLnYxLkdldEFnZW50U3RhdHVzUmVzcG9uc2USYgoVU3Vic2NyaWJlQWdlbnRTZXNzaW9uEiguY29tcGFzcy52MS5TdWJzY3JpYmVBZ2VudFNlc3Npb25SZXF1ZXN0Gh0uY29tcGFzcy52MS5BZ2VudFNlc3Npb25GcmFtZTABEksKCklzc3VlVG9rZW4SHS5jb21wYXNzLnYxLklzc3VlVG9rZW5SZXF1ZXN0Gh4uY29tcGFzcy52MS5Jc3N1ZVRva2VuUmVzcG9uc2USTgoLUmV2b2tlVG9rZW4SHi5jb21wYXNzLnYxLlJldm9rZVRva2VuUmVxdWVzdBofLmNvbXBhc3MudjEuUmV2b2tlVG9rZW5SZXNwb25zZRJXCg5QdXRBZ2VudENvbmZpZxIhLmNvbXBhc3MudjEuUHV0QWdlbnRDb25maWdSZXF1ZXN0GiIuY29tcGFzcy52MS5QdXRBZ2VudENvbmZpZ1Jlc3BvbnNlEmMKEkdldEFnZW50Q29uZmlnSW5mbxIlLmNvbXBhc3MudjEuR2V0QWdlbnRDb25maWdJbmZvUmVxdWVzdBomLmNvbXBhc3MudjEuR2V0QWdlbnRDb25maWdJbmZvUmVzcG9uc2USYAoRRGVsZXRlQWdlbnRDb25maWcSJC5jb21wYXNzLnYxLkRlbGV0ZUFnZW50Q29uZmlnUmVxdWVzdBolLmNvbXBhc3MudjEuRGVsZXRlQWdlbnRDb25maWdSZXNwb25zZRJdChBQdXRNb2RlbFJlZ2lzdHJ5EiMuY29tcGFzcy52MS5QdXRNb2RlbFJlZ2lzdHJ5UmVxdWVzdBokLmNvbXBhc3MudjEuUHV0TW9kZWxSZWdpc3RyeVJlc3BvbnNlEl0KEEdldE1vZGVsUmVnaXN0cnkSIy5jb21wYXNzLnYxLkdldE1vZGVsUmVnaXN0cnlSZXF1ZXN0GiQuY29tcGFzcy52MS5HZXRNb2RlbFJlZ2lzdHJ5UmVzcG9uc2USZgoTRGVsZXRlTW9kZWxSZWdpc3RyeRImLmNvbXBhc3MudjEuRGVsZXRlTW9kZWxSZWdpc3RyeVJlcXVlc3QaJy5jb21wYXNzLnYxLkRlbGV0ZU1vZGVsUmVnaXN0cnlSZXNwb25zZTK+AwoOU2VjcmV0c1NlcnZpY2USSAoJU2V0U2VjcmV0EhwuY29tcGFzcy52MS5TZXRTZWNyZXRSZXF1ZXN0Gh0uY29tcGFzcy52MS5TZXRTZWNyZXRSZXNwb25zZRJOCgtMaXN0U2VjcmV0cxIeLmNvbXBhc3MudjEuTGlzdFNlY3JldHNSZXF1ZXN0Gh8uY29tcGFzcy52MS5MaXN0U2VjcmV0c1Jlc3BvbnNlElEKDERlbGV0ZVNlY3JldBIfLmNvbXBhc3MudjEuRGVsZXRlU2VjcmV0UmVxdWVzdBogLmNvbXBhc3MudjEuRGVsZXRlU2VjcmV0UmVzcG9uc2USWgoPU2V0U2VydmVyU2VjcmV0EiIuY29tcGFzcy52MS5TZXRTZXJ2ZXJTZWNyZXRSZXF1ZXN0GiMuY29tcGFzcy52MS5TZXRTZXJ2ZXJTZWNyZXRSZXNwb25zZRJjChJEZWxldGVTZXJ2ZXJTZWNyZXQSJS5jb21wYXNzLnYxLkRlbGV0ZVNlcnZlclNlY3JldFJlcXVlc3QaJi5jb21wYXNzLnYxLkRlbGV0ZVNlcnZlclNlY3JldFJlc3BvbnNlYgZwcm90bzM", [file_google_protobuf_timestamp]); + fileDesc("Chhjb21wYXNzL3YxL2NvbXBhc3MucHJvdG8SCmNvbXBhc3MudjEiqAEKEFNldFNlY3JldFJlcXVlc3QSDAoEbmFtZRgBIAEoCRISCgV2YWx1ZRgCIAEoCUIDgAEBEiwKCGRlbGl2ZXJ5GAMgASgOMhouY29tcGFzcy52MS5TZWNyZXREZWxpdmVyeRIkCgRraW5kGAQgASgOMhYuY29tcGFzcy52MS5TZWNyZXRLaW5kEhAKCHByb3ZpZGVyGAUgASgJEgwKBGhvc3QYBiABKAkiEwoRU2V0U2VjcmV0UmVzcG9uc2UiFAoSTGlzdFNlY3JldHNSZXF1ZXN0IkAKE0xpc3RTZWNyZXRzUmVzcG9uc2USKQoHc2VjcmV0cxgBIAMoCzIYLmNvbXBhc3MudjEuU2VjcmV0U3RhdHVzIqABCgxTZWNyZXRTdGF0dXMSDAoEbmFtZRgBIAEoCRIOCgZpc19zZXQYAiABKAgSLAoIZGVsaXZlcnkYAyABKA4yGi5jb21wYXNzLnYxLlNlY3JldERlbGl2ZXJ5EiQKBGtpbmQYBCABKA4yFi5jb21wYXNzLnYxLlNlY3JldEtpbmQSEAoIcHJvdmlkZXIYBSABKAkSDAoEaG9zdBgGIAEoCSIjChNEZWxldGVTZWNyZXRSZXF1ZXN0EgwKBG5hbWUYASABKAkiFgoURGVsZXRlU2VjcmV0UmVzcG9uc2UiOgoWU2V0U2VydmVyU2VjcmV0UmVxdWVzdBIMCgRuYW1lGAEgASgJEhIKBXZhbHVlGAIgASgJQgOAAQEiGQoXU2V0U2VydmVyU2VjcmV0UmVzcG9uc2UiKQoZRGVsZXRlU2VydmVyU2VjcmV0UmVxdWVzdBIMCgRuYW1lGAEgASgJIhwKGkRlbGV0ZVNlcnZlclNlY3JldFJlc3BvbnNlIhoKGExpc3RTZXJ2ZXJTZWNyZXRzUmVxdWVzdCJTChlMaXN0U2VydmVyU2VjcmV0c1Jlc3BvbnNlEjYKDnNlcnZlcl9zZWNyZXRzGAEgAygLMh4uY29tcGFzcy52MS5TZXJ2ZXJTZWNyZXRTdGF0dXMiMgoSU2VydmVyU2VjcmV0U3RhdHVzEgwKBG5hbWUYASABKAkSDgoGaXNfc2V0GAIgASgIIhYKFEdldFNlcnZlckluZm9SZXF1ZXN0Ij0KFUdldFNlcnZlckluZm9SZXNwb25zZRIPCgd2ZXJzaW9uGAEgASgJEhMKC2FwaV92ZXJzaW9uGAIgASgJIg8KDVdob0FtSVJlcXVlc3QiJAoOV2hvQW1JUmVzcG9uc2USEgoKYWNjb3VudF9pZBgBIAEoCSJDChZTdWJzY3JpYmVFdmVudHNSZXF1ZXN0EhEKCXNpbmNlX3NlcRgBIAEoBBIWCg5pbnN0YW5jZV9lcG9jaBgCIAEoBCLiAwoXU3Vic2NyaWJlRXZlbnRzUmVzcG9uc2USCwoDc2VxGAEgASgEEhIKCmF0X3VuaXhfbXMYAiABKAMSFgoOaW5zdGFuY2VfZXBvY2gYAyABKAQSFAoMc25hcHNob3Rfc2VxGAQgASgEEjEKDXNlcnZlcl9zdGF0dXMYCiABKAsyGC5jb21wYXNzLnYxLlNlcnZlclN0YXR1c0gAEjUKD3Jlc3luY19yZXF1aXJlZBgLIAEoCzIaLmNvbXBhc3MudjEuUmVzeW5jUmVxdWlyZWRIABI+ChRhZ2VudF9zZXNzaW9uX3N0YXR1cxgMIAEoCzIeLmNvbXBhc3MudjEuQWdlbnRTZXNzaW9uU3RhdHVzSAASPAoTYWdlbnRfbWVzc2FnZV9jaHVuaxgNIAEoCzIdLmNvbXBhc3MudjEuQWdlbnRNZXNzYWdlQ2h1bmtIABI0Cg9hZ2VudF90b29sX2NhbGwYDiABKAsyGS5jb21wYXNzLnYxLkFnZW50VG9vbENhbGxIABIrCgphZ2VudF9wbGFuGA8gASgLMhUuY29tcGFzcy52MS5BZ2VudFBsYW5IABIiCgVpc3N1ZRgQIAEoCzIRLmNvbXBhc3MudjEuSXNzdWVIAEIJCgdwYXlsb2FkIi4KFkxpc3RCb2FyZElzc3Vlc1JlcXVlc3QSFAoMc25hcHNob3Rfc2VxGAEgASgEIjwKF0xpc3RCb2FyZElzc3Vlc1Jlc3BvbnNlEiEKBmlzc3VlcxgBIAMoCzIRLmNvbXBhc3MudjEuSXNzdWUiNgoMU2VydmVyU3RhdHVzEiYKBXN0YXRlGAEgASgOMhcuY29tcGFzcy52MS5TZXJ2ZXJTdGF0ZSIQCg5SZXN5bmNSZXF1aXJlZCJwChJBZ2VudFNlc3Npb25TdGF0dXMSEgoKc2Vzc2lvbl9pZBgBIAEoCRIsCgVzdGF0ZRgCIAEoDjIdLmNvbXBhc3MudjEuQWdlbnRTZXNzaW9uU3RhdGUSGAoQYWdlbnRfYWNjb3VudF9pZBgDIAEoCSJJChFBZ2VudE1lc3NhZ2VDaHVuaxISCgpzZXNzaW9uX2lkGAEgASgJEgwKBHRleHQYAiABKAkSEgoKaXNfdGhvdWdodBgDIAEoCCJ5Cg1BZ2VudFRvb2xDYWxsEhIKCnNlc3Npb25faWQYASABKAkSFAoMdG9vbF9jYWxsX2lkGAIgASgJEg0KBXRpdGxlGAMgASgJEi8KBnN0YXR1cxgEIAEoDjIfLmNvbXBhc3MudjEuQWdlbnRUb29sQ2FsbFN0YXR1cyJMCglBZ2VudFBsYW4SEgoKc2Vzc2lvbl9pZBgBIAEoCRIrCgdlbnRyaWVzGAIgAygLMhouY29tcGFzcy52MS5BZ2VudFBsYW5FbnRyeSJTCg5BZ2VudFBsYW5FbnRyeRIPCgdjb250ZW50GAEgASgJEjAKBnN0YXR1cxgCIAEoDjIgLmNvbXBhc3MudjEuQWdlbnRQbGFuRW50cnlTdGF0dXMi3wMKDFNlc3Npb25FdmVudBIQCghldmVudF9pZBgBIAEoCRISCgphdF91bml4X21zGAIgASgDEjoKDmFzc2lzdGFudF90ZXh0GAMgASgLMiAuY29tcGFzcy52MS5TZXNzaW9uQXNzaXN0YW50VGV4dEgAEi8KCHRoaW5raW5nGAQgASgLMhsuY29tcGFzcy52MS5TZXNzaW9uVGhpbmtpbmdIABIwCgl0b29sX2NhbGwYBSABKAsyGy5jb21wYXNzLnYxLlNlc3Npb25Ub29sQ2FsbEgAEj0KEHRvb2xfY2FsbF91cGRhdGUYBiABKAsyIS5jb21wYXNzLnYxLlNlc3Npb25Ub29sQ2FsbFVwZGF0ZUgAEicKBHBsYW4YByABKAsyFy5jb21wYXNzLnYxLlNlc3Npb25QbGFuSAASKwoGbm90aWNlGAggASgLMhkuY29tcGFzcy52MS5TZXNzaW9uTm90aWNlSAASOQoRc2Vzc2lvbl9pbmplY3Rpb24YCSABKAsyHC5jb21wYXNzLnYxLlNlc3Npb25JbmplY3Rpb25IABIxCg1zZXNzaW9uX2Vycm9yGAogASgLMhguY29tcGFzcy52MS5TZXNzaW9uRXJyb3JIAEIHCgVldmVudCI4ChRTZXNzaW9uQXNzaXN0YW50VGV4dBIMCgR0ZXh0GAEgASgJEhIKCm1lc3NhZ2VfaWQYAiABKAkiMwoPU2Vzc2lvblRoaW5raW5nEgwKBHRleHQYASABKAkSEgoKbWVzc2FnZV9pZBgCIAEoCSJnCg9TZXNzaW9uVG9vbENhbGwSFAoMdG9vbF9jYWxsX2lkGAEgASgJEg0KBXRpdGxlGAIgASgJEi8KBnN0YXR1cxgDIAEoDjIfLmNvbXBhc3MudjEuQWdlbnRUb29sQ2FsbFN0YXR1cyKaAQoVU2Vzc2lvblRvb2xDYWxsVXBkYXRlEhQKDHRvb2xfY2FsbF9pZBgBIAEoCRIvCgZzdGF0dXMYAiABKA4yHy5jb21wYXNzLnYxLkFnZW50VG9vbENhbGxTdGF0dXMSDgoGb3V0cHV0GAMgASgJEioKBWRpZmZzGAQgAygLMhsuY29tcGFzcy52MS5TZXNzaW9uRmlsZURpZmYiVQoPU2Vzc2lvbkZpbGVEaWZmEgwKBHBhdGgYASABKAkSFQoIb2xkX3RleHQYAiABKAlIAIgBARIQCghuZXdfdGV4dBgDIAEoCUILCglfb2xkX3RleHQiOgoLU2Vzc2lvblBsYW4SKwoHZW50cmllcxgBIAMoCzIaLmNvbXBhc3MudjEuQWdlbnRQbGFuRW50cnkiOQoNU2Vzc2lvbk5vdGljZRIMCgR0ZXh0GAEgASgJEhEKBGxpbmsYAiABKAlIAIgBAUIHCgVfbGluayKDAQoQU2Vzc2lvbkluamVjdGlvbhIxCgdvcF9raW5kGAEgASgOMiAuY29tcGFzcy52MS5TZXNzaW9uSW5qZWN0aW9uS2luZBISCgptZXNzYWdlX2lkGAIgASgJEhMKC2Zyb21faGFuZGxlGAMgASgJEhMKC3RyYWNlcGFyZW50GAQgASgJImsKDFNlc3Npb25FcnJvchIqCgRraW5kGAEgASgOMhwuY29tcGFzcy52MS5TZXNzaW9uRXJyb3JLaW5kEg8KB21lc3NhZ2UYAiABKAkSEwoGc3RhdHVzGAMgASgFSACIAQFCCQoHX3N0YXR1cyIyChxTdWJzY3JpYmVBZ2VudFNlc3Npb25SZXF1ZXN0EhIKCnNlc3Npb25faWQYASABKAkifgoRQWdlbnRTZXNzaW9uRnJhbWUSEgoKc2Vzc2lvbl9pZBgBIAEoCRInCgVldmVudBgCIAEoCzIYLmNvbXBhc3MudjEuU2Vzc2lvbkV2ZW50EiwKBXN0YXRlGAMgASgOMh0uY29tcGFzcy52MS5BZ2VudFNlc3Npb25TdGF0ZSJwCh5Qcm92aXNpb25BZ2VudFdvcmtzcGFjZVJlcXVlc3QSFAoMYWdlbnRfaGFuZGxlGAEgASgJEhkKEWNsaWVudF9yZXF1ZXN0X2lkGAIgASgJEg8KB3BlcnNvbmEYAyABKAkSDAoEcm9sZRgEIAEoCSI5Ch9Qcm92aXNpb25BZ2VudFdvcmtzcGFjZVJlc3BvbnNlEhYKDmNvbnRhaW5lcl9uYW1lGAEgASgJIlAKG1JlbW92ZUFnZW50V29ya3NwYWNlUmVxdWVzdBIWCg5jb250YWluZXJfbmFtZRgBIAEoCRIZChFjbGllbnRfcmVxdWVzdF9pZBgCIAEoCSIeChxSZW1vdmVBZ2VudFdvcmtzcGFjZVJlc3BvbnNlImMKGFN0YXJ0QWdlbnRTZXNzaW9uUmVxdWVzdBIWCg5jb250YWluZXJfbmFtZRgBIAEoCRIZChFyZXN1bWVfc2Vzc2lvbl9pZBgDIAEoCUoECAIQA1IOaW5pdGlhbF9wcm9tcHQiLwoZU3RhcnRBZ2VudFNlc3Npb25SZXNwb25zZRISCgpzZXNzaW9uX2lkGAEgASgJIloKEVNwYXduQWdlbnRSZXF1ZXN0EhQKDGFnZW50X2hhbmRsZRgBIAEoCRIZChFjbGllbnRfcmVxdWVzdF9pZBgDIAEoCUoECAIQA1IOaW5pdGlhbF9wcm9tcHQiQAoSU3Bhd25BZ2VudFJlc3BvbnNlEhIKCnNlc3Npb25faWQYASABKAkSFgoOY29udGFpbmVyX25hbWUYAiABKAkiLQoXU3RvcEFnZW50U2Vzc2lvblJlcXVlc3QSEgoKc2Vzc2lvbl9pZBgBIAEoCSIaChhTdG9wQWdlbnRTZXNzaW9uUmVzcG9uc2UiLwoZUmVsb2FkQWdlbnRTZXNzaW9uUmVxdWVzdBISCgpzZXNzaW9uX2lkGAEgASgJIjAKGlJlbG9hZEFnZW50U2Vzc2lvblJlc3BvbnNlEhIKCnNlc3Npb25faWQYASABKAkiKwoVR2V0QWdlbnRTdGF0dXNSZXF1ZXN0EhIKCnNlc3Npb25faWQYASABKAkiSgoWR2V0QWdlbnRTdGF0dXNSZXNwb25zZRIwCghzdGF0dXNlcxgBIAMoCzIeLmNvbXBhc3MudjEuQWdlbnRTZXNzaW9uU3RhdHVzIisKEUlzc3VlVG9rZW5SZXF1ZXN0EhYKDmFjY291bnRfaGFuZGxlGAEgASgJIiMKEklzc3VlVG9rZW5SZXNwb25zZRINCgV0b2tlbhgBIAEoCSIoChJSZXZva2VUb2tlblJlcXVlc3QSEgoFdG9rZW4YASABKAlCA4ABASIVChNSZXZva2VUb2tlblJlc3BvbnNlIicKFVB1dEFnZW50Q29uZmlnUmVxdWVzdBIOCgZidW5kbGUYASABKAwiKQoWUHV0QWdlbnRDb25maWdSZXNwb25zZRIPCgd2ZXJzaW9uGAEgASgJIhsKGUdldEFnZW50Q29uZmlnSW5mb1JlcXVlc3Qi2gEKGkdldEFnZW50Q29uZmlnSW5mb1Jlc3BvbnNlEg8KB3ZlcnNpb24YASABKAkSDgoGc2tpbGxzGAIgAygJEhIKCmV4dGVuc2lvbnMYAyADKAkSEwoLbWNwX3NlcnZlcnMYBCADKAkSFAoMaGFzX3NldHRpbmdzGAUgASgIEhUKDWhhc19hZ2VudHNfbWQYBiABKAgSDQoFcnVsZXMYByADKAkSEQoJc3ViYWdlbnRzGAggAygJEhIKCmhhc19tb2RlbHMYCSABKAgSDwoHcHJvbXB0cxgKIAMoCSIaChhEZWxldGVBZ2VudENvbmZpZ1JlcXVlc3QiGwoZRGVsZXRlQWdlbnRDb25maWdSZXNwb25zZSI0Cg5Nb2RlbENhbmRpZGF0ZRIQCghwcm92aWRlchgBIAEoCRIQCghtb2RlbF9pZBgCIAEoCSJxCg1Nb2RlbE1ldGFkYXRhEhYKDmNvbnRleHRfd2luZG93GAEgASgDEhwKFGlucHV0X2Nvc3RfbWljcm9fdXNkGAIgASgDEh0KFW91dHB1dF9jb3N0X21pY3JvX3VzZBgDIAEoAxILCgNhcGkYBCABKAkihwEKEk1vZGVsUmVnaXN0cnlFbnRyeRIUCgxkaXNwbGF5X25hbWUYASABKAkSLgoKY2FuZGlkYXRlcxgCIAMoCzIaLmNvbXBhc3MudjEuTW9kZWxDYW5kaWRhdGUSKwoIbWV0YWRhdGEYAyABKAsyGS5jb21wYXNzLnYxLk1vZGVsTWV0YWRhdGEimAEKDU1vZGVsUmVnaXN0cnkSNwoHZW50cmllcxgBIAMoCzImLmNvbXBhc3MudjEuTW9kZWxSZWdpc3RyeS5FbnRyaWVzRW50cnkaTgoMRW50cmllc0VudHJ5EgsKA2tleRgBIAEoCRItCgV2YWx1ZRgCIAEoCzIeLmNvbXBhc3MudjEuTW9kZWxSZWdpc3RyeUVudHJ5OgI4ASJgChdQdXRNb2RlbFJlZ2lzdHJ5UmVxdWVzdBIrCghyZWdpc3RyeRgBIAEoCzIZLmNvbXBhc3MudjEuTW9kZWxSZWdpc3RyeRIYChBleHBlY3RlZF92ZXJzaW9uGAIgASgDIisKGFB1dE1vZGVsUmVnaXN0cnlSZXNwb25zZRIPCgd2ZXJzaW9uGAEgASgDIhkKF0dldE1vZGVsUmVnaXN0cnlSZXF1ZXN0IlgKGEdldE1vZGVsUmVnaXN0cnlSZXNwb25zZRIPCgd2ZXJzaW9uGAEgASgDEisKCHJlZ2lzdHJ5GAIgASgLMhkuY29tcGFzcy52MS5Nb2RlbFJlZ2lzdHJ5IhwKGkRlbGV0ZU1vZGVsUmVnaXN0cnlSZXF1ZXN0Ih0KG0RlbGV0ZU1vZGVsUmVnaXN0cnlSZXNwb25zZSIoChBBZ2VudEF0dHJpYnV0aW9uEhQKDGFnZW50X2hhbmRsZRgBIAEoCSJFCghGb3JnZVJlZhIrCghwcm92aWRlchgBIAEoDjIZLmNvbXBhc3MudjEuRm9yZ2VQcm92aWRlchIMCgRob3N0GAIgASgJItQDCgVJc3N1ZRIKCgJpZBgBIAEoCRIjCgVmb3JnZRgCIAEoCzIULmNvbXBhc3MudjEuRm9yZ2VSZWYSDAoEcmVwbxgDIAEoCRIOCgZudW1iZXIYBCABKA0SDQoFdGl0bGUYBSABKAkSDAoEYm9keRgGIAEoCRITCgtmb3JnZV9zdGF0ZRgHIAEoCRILCgN1cmwYCCABKAkSKwoFYWdlbnQYCSABKAsyHC5jb21wYXNzLnYxLkFnZW50QXR0cmlidXRpb24SFQoNZm9yZ2VfYWNjb3VudBgKIAEoCRIOCgZsYWJlbHMYCyADKAkSLgoKdXBkYXRlZF9hdBgTIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASJQoFc3RhdGUYDCABKA4yFi5jb21wYXNzLnYxLklzc3VlU3RhdGUSEAoIcHJpb3JpdHkYDSABKAkSEAoIYXNzaWduZWUYDiABKAkSDwoHc3VtbWFyeRgPIAEoCRIOCgZicmFuY2gYECABKAkSJAoDcHJzGBEgAygLMhcuY29tcGFzcy52MS5QdWxsUmVxdWVzdBInCgd0cmFja2VyGBIgASgLMhYuY29tcGFzcy52MS5UcmFja2VyUmVmIp4DCgtQdWxsUmVxdWVzdBIjCgVmb3JnZRgBIAEoCzIULmNvbXBhc3MudjEuRm9yZ2VSZWYSDAoEcmVwbxgCIAEoCRIOCgZudW1iZXIYAyABKA0SDQoFdGl0bGUYBCABKAkSEwoLZm9yZ2Vfc3RhdGUYBSABKAkSCwoDdXJsGAYgASgJEhAKCGhlYWRfcmVmGAcgASgJEhAKCGJhc2VfcmVmGAggASgJEisKBWFnZW50GAkgASgLMhwuY29tcGFzcy52MS5BZ2VudEF0dHJpYnV0aW9uEhUKDWZvcmdlX2FjY291bnQYCiABKAkSDQoFZHJhZnQYCyABKAgSKQoHY2hhbmdlZBgMIAEoCzIYLmNvbXBhc3MudjEuQ2hhbmdlZFN0YXRzEikKBmNoZWNrcxgNIAEoCzIZLmNvbXBhc3MudjEuQ2hlY2tzU3VtbWFyeRIjCgdyZXZpZXdzGA4gAygLMhIuY29tcGFzcy52MS5SZXZpZXcSKQoHdGhyZWFkcxgPIAMoCzIYLmNvbXBhc3MudjEuUmV2aWV3VGhyZWFkIlMKDUNoZWNrc1N1bW1hcnkSEAoIaGVhZF9zaGEYASABKAkSDQoFc3RhdGUYAiABKAkSIQoGY2hlY2tzGAMgAygLMhEuY29tcGFzcy52MS5DaGVjayJDCgVDaGVjaxIMCgRuYW1lGAEgASgJEg0KBXN0YXRlGAIgASgJEgsKA3VybBgDIAEoCRIQCghyZXF1aXJlZBgEIAEoCCJDCgxDaGFuZ2VkU3RhdHMSDQoFZmlsZXMYASABKA0SEQoJYWRkaXRpb25zGAIgASgNEhEKCWRlbGV0aW9ucxgDIAEoDSJDCgpUcmFja2VyUmVmEgwKBGtpbmQYASABKAkSCgoCaWQYAiABKAkSDgoGc3RhdHVzGAMgASgJEgsKA3VybBgEIAEoCSJHCgZSZXZpZXcSDgoGYXV0aG9yGAEgASgJEg4KBmlzX2JvdBgCIAEoCBIPCgd2ZXJkaWN0GAMgASgJEgwKBGJvZHkYBCABKAkiVQoMUmV2aWV3VGhyZWFkEgwKBHBhdGgYASABKAkSEAoIcmVzb2x2ZWQYAiABKAgSJQoIY29tbWVudHMYAyADKAsyEy5jb21wYXNzLnYxLkNvbW1lbnQiNwoHQ29tbWVudBIOCgZhdXRob3IYASABKAkSDgoGaXNfYm90GAIgASgIEgwKBGJvZHkYAyABKAkqZAoOU2VjcmV0RGVsaXZlcnkSHwobU0VDUkVUX0RFTElWRVJZX1VOU1BFQ0lGSUVEEAASGAoUU0VDUkVUX0RFTElWRVJZX0ZJTEUQARIXChNTRUNSRVRfREVMSVZFUllfRU5WEAIqcAoKU2VjcmV0S2luZBIbChdTRUNSRVRfS0lORF9VTlNQRUNJRklFRBAAEhcKE1NFQ1JFVF9LSU5EX0dFTkVSSUMQARIYChRTRUNSRVRfS0lORF9QUk9WSURFUhACEhIKDlNFQ1JFVF9LSU5EX0dIEAMqQwoLU2VydmVyU3RhdGUSHAoYU0VSVkVSX1NUQVRFX1VOU1BFQ0lGSUVEEAASFgoSU0VSVkVSX1NUQVRFX1JFQURZEAEqggIKEUFnZW50U2Vzc2lvblN0YXRlEiMKH0FHRU5UX1NFU1NJT05fU1RBVEVfVU5TUEVDSUZJRUQQABIgChxBR0VOVF9TRVNTSU9OX1NUQVRFX1NUQVJUSU5HEAESHQoZQUdFTlRfU0VTU0lPTl9TVEFURV9SRUFEWRACEh8KG0FHRU5UX1NFU1NJT05fU1RBVEVfV09SS0lORxADEh8KG0FHRU5UX1NFU1NJT05fU1RBVEVfU1RPUFBFRBAEEh8KG0FHRU5UX1NFU1NJT05fU1RBVEVfRVJST1JFRBAFEiQKIEFHRU5UX1NFU1NJT05fU1RBVEVfRElTQ09OTkVDVEVEEAYq0gEKE0FnZW50VG9vbENhbGxTdGF0dXMSJgoiQUdFTlRfVE9PTF9DQUxMX1NUQVRVU19VTlNQRUNJRklFRBAAEiIKHkFHRU5UX1RPT0xfQ0FMTF9TVEFUVVNfUEVORElORxABEiYKIkFHRU5UX1RPT0xfQ0FMTF9TVEFUVVNfSU5fUFJPR1JFU1MQAhIkCiBBR0VOVF9UT09MX0NBTExfU1RBVFVTX0NPTVBMRVRFRBADEiEKHUFHRU5UX1RPT0xfQ0FMTF9TVEFUVVNfRkFJTEVEEAQqtAEKFEFnZW50UGxhbkVudHJ5U3RhdHVzEicKI0FHRU5UX1BMQU5fRU5UUllfU1RBVFVTX1VOU1BFQ0lGSUVEEAASIwofQUdFTlRfUExBTl9FTlRSWV9TVEFUVVNfUEVORElORxABEicKI0FHRU5UX1BMQU5fRU5UUllfU1RBVFVTX0lOX1BST0dSRVNTEAISJQohQUdFTlRfUExBTl9FTlRSWV9TVEFUVVNfQ09NUExFVEVEEAMqhAEKFFNlc3Npb25JbmplY3Rpb25LaW5kEiYKIlNFU1NJT05fSU5KRUNUSU9OX0tJTkRfVU5TUEVDSUZJRUQQABIgChxTRVNTSU9OX0lOSkVDVElPTl9LSU5EX1NURUVSEAESIgoeU0VTU0lPTl9JTkpFQ1RJT05fS0lORF9ERUxJVkVSEAIqdAoQU2Vzc2lvbkVycm9yS2luZBIiCh5TRVNTSU9OX0VSUk9SX0tJTkRfVU5TUEVDSUZJRUQQABIcChhTRVNTSU9OX0VSUk9SX0tJTkRfRVJST1IQARIeChpTRVNTSU9OX0VSUk9SX0tJTkRfQUJPUlRFRBACKvEBCgpJc3N1ZVN0YXRlEhsKF0lTU1VFX1NUQVRFX1VOU1BFQ0lGSUVEEAASFwoTSVNTVUVfU1RBVEVfQkFDS0xPRxABEhQKEElTU1VFX1NUQVRFX1RPRE8QAhIWChJJU1NVRV9TVEFURV9RVUVVRUQQAxIXChNJU1NVRV9TVEFURV9CTE9DS0VEEAQSGwoXSVNTVUVfU1RBVEVfSU5fUFJPR1JFU1MQBRIZChVJU1NVRV9TVEFURV9JTl9SRVZJRVcQBhIUChBJU1NVRV9TVEFURV9ET05FEAcSGAoUSVNTVUVfU1RBVEVfQVJDSElWRUQQCCqcAQoNRm9yZ2VQcm92aWRlchIeChpGT1JHRV9QUk9WSURFUl9VTlNQRUNJRklFRBAAEhkKFUZPUkdFX1BST1ZJREVSX0dJVEhVQhABEhkKFUZPUkdFX1BST1ZJREVSX0dJVExBQhACEhoKFkZPUkdFX1BST1ZJREVSX0ZPUkdFSk8QAxIZChVGT1JHRV9QUk9WSURFUl9MSU5FQVIQBDLTDgoOQ29tcGFzc1NlcnZpY2USVAoNR2V0U2VydmVySW5mbxIgLmNvbXBhc3MudjEuR2V0U2VydmVySW5mb1JlcXVlc3QaIS5jb21wYXNzLnYxLkdldFNlcnZlckluZm9SZXNwb25zZRI/CgZXaG9BbUkSGS5jb21wYXNzLnYxLldob0FtSVJlcXVlc3QaGi5jb21wYXNzLnYxLldob0FtSVJlc3BvbnNlElwKD1N1YnNjcmliZUV2ZW50cxIiLmNvbXBhc3MudjEuU3Vic2NyaWJlRXZlbnRzUmVxdWVzdBojLmNvbXBhc3MudjEuU3Vic2NyaWJlRXZlbnRzUmVzcG9uc2UwARJaCg9MaXN0Qm9hcmRJc3N1ZXMSIi5jb21wYXNzLnYxLkxpc3RCb2FyZElzc3Vlc1JlcXVlc3QaIy5jb21wYXNzLnYxLkxpc3RCb2FyZElzc3Vlc1Jlc3BvbnNlEnIKF1Byb3Zpc2lvbkFnZW50V29ya3NwYWNlEiouY29tcGFzcy52MS5Qcm92aXNpb25BZ2VudFdvcmtzcGFjZVJlcXVlc3QaKy5jb21wYXNzLnYxLlByb3Zpc2lvbkFnZW50V29ya3NwYWNlUmVzcG9uc2USYAoRU3RhcnRBZ2VudFNlc3Npb24SJC5jb21wYXNzLnYxLlN0YXJ0QWdlbnRTZXNzaW9uUmVxdWVzdBolLmNvbXBhc3MudjEuU3RhcnRBZ2VudFNlc3Npb25SZXNwb25zZRJLCgpTcGF3bkFnZW50Eh0uY29tcGFzcy52MS5TcGF3bkFnZW50UmVxdWVzdBoeLmNvbXBhc3MudjEuU3Bhd25BZ2VudFJlc3BvbnNlEl0KEFN0b3BBZ2VudFNlc3Npb24SIy5jb21wYXNzLnYxLlN0b3BBZ2VudFNlc3Npb25SZXF1ZXN0GiQuY29tcGFzcy52MS5TdG9wQWdlbnRTZXNzaW9uUmVzcG9uc2USaQoUUmVtb3ZlQWdlbnRXb3Jrc3BhY2USJy5jb21wYXNzLnYxLlJlbW92ZUFnZW50V29ya3NwYWNlUmVxdWVzdBooLmNvbXBhc3MudjEuUmVtb3ZlQWdlbnRXb3Jrc3BhY2VSZXNwb25zZRJjChJSZWxvYWRBZ2VudFNlc3Npb24SJS5jb21wYXNzLnYxLlJlbG9hZEFnZW50U2Vzc2lvblJlcXVlc3QaJi5jb21wYXNzLnYxLlJlbG9hZEFnZW50U2Vzc2lvblJlc3BvbnNlElcKDkdldEFnZW50U3RhdHVzEiEuY29tcGFzcy52MS5HZXRBZ2VudFN0YXR1c1JlcXVlc3QaIi5jb21wYXNzLnYxLkdldEFnZW50U3RhdHVzUmVzcG9uc2USYgoVU3Vic2NyaWJlQWdlbnRTZXNzaW9uEiguY29tcGFzcy52MS5TdWJzY3JpYmVBZ2VudFNlc3Npb25SZXF1ZXN0Gh0uY29tcGFzcy52MS5BZ2VudFNlc3Npb25GcmFtZTABEksKCklzc3VlVG9rZW4SHS5jb21wYXNzLnYxLklzc3VlVG9rZW5SZXF1ZXN0Gh4uY29tcGFzcy52MS5Jc3N1ZVRva2VuUmVzcG9uc2USTgoLUmV2b2tlVG9rZW4SHi5jb21wYXNzLnYxLlJldm9rZVRva2VuUmVxdWVzdBofLmNvbXBhc3MudjEuUmV2b2tlVG9rZW5SZXNwb25zZRJXCg5QdXRBZ2VudENvbmZpZxIhLmNvbXBhc3MudjEuUHV0QWdlbnRDb25maWdSZXF1ZXN0GiIuY29tcGFzcy52MS5QdXRBZ2VudENvbmZpZ1Jlc3BvbnNlEmMKEkdldEFnZW50Q29uZmlnSW5mbxIlLmNvbXBhc3MudjEuR2V0QWdlbnRDb25maWdJbmZvUmVxdWVzdBomLmNvbXBhc3MudjEuR2V0QWdlbnRDb25maWdJbmZvUmVzcG9uc2USYAoRRGVsZXRlQWdlbnRDb25maWcSJC5jb21wYXNzLnYxLkRlbGV0ZUFnZW50Q29uZmlnUmVxdWVzdBolLmNvbXBhc3MudjEuRGVsZXRlQWdlbnRDb25maWdSZXNwb25zZRJdChBQdXRNb2RlbFJlZ2lzdHJ5EiMuY29tcGFzcy52MS5QdXRNb2RlbFJlZ2lzdHJ5UmVxdWVzdBokLmNvbXBhc3MudjEuUHV0TW9kZWxSZWdpc3RyeVJlc3BvbnNlEl0KEEdldE1vZGVsUmVnaXN0cnkSIy5jb21wYXNzLnYxLkdldE1vZGVsUmVnaXN0cnlSZXF1ZXN0GiQuY29tcGFzcy52MS5HZXRNb2RlbFJlZ2lzdHJ5UmVzcG9uc2USZgoTRGVsZXRlTW9kZWxSZWdpc3RyeRImLmNvbXBhc3MudjEuRGVsZXRlTW9kZWxSZWdpc3RyeVJlcXVlc3QaJy5jb21wYXNzLnYxLkRlbGV0ZU1vZGVsUmVnaXN0cnlSZXNwb25zZTKgBAoOU2VjcmV0c1NlcnZpY2USSAoJU2V0U2VjcmV0EhwuY29tcGFzcy52MS5TZXRTZWNyZXRSZXF1ZXN0Gh0uY29tcGFzcy52MS5TZXRTZWNyZXRSZXNwb25zZRJOCgtMaXN0U2VjcmV0cxIeLmNvbXBhc3MudjEuTGlzdFNlY3JldHNSZXF1ZXN0Gh8uY29tcGFzcy52MS5MaXN0U2VjcmV0c1Jlc3BvbnNlElEKDERlbGV0ZVNlY3JldBIfLmNvbXBhc3MudjEuRGVsZXRlU2VjcmV0UmVxdWVzdBogLmNvbXBhc3MudjEuRGVsZXRlU2VjcmV0UmVzcG9uc2USWgoPU2V0U2VydmVyU2VjcmV0EiIuY29tcGFzcy52MS5TZXRTZXJ2ZXJTZWNyZXRSZXF1ZXN0GiMuY29tcGFzcy52MS5TZXRTZXJ2ZXJTZWNyZXRSZXNwb25zZRJjChJEZWxldGVTZXJ2ZXJTZWNyZXQSJS5jb21wYXNzLnYxLkRlbGV0ZVNlcnZlclNlY3JldFJlcXVlc3QaJi5jb21wYXNzLnYxLkRlbGV0ZVNlcnZlclNlY3JldFJlc3BvbnNlEmAKEUxpc3RTZXJ2ZXJTZWNyZXRzEiQuY29tcGFzcy52MS5MaXN0U2VydmVyU2VjcmV0c1JlcXVlc3QaJS5jb21wYXNzLnYxLkxpc3RTZXJ2ZXJTZWNyZXRzUmVzcG9uc2ViBnByb3RvMw", [file_google_protobuf_timestamp]); /** * @generated from message compass.v1.SetSecretRequest @@ -250,6 +250,64 @@ export type DeleteServerSecretResponse = Message<"compass.v1.DeleteServerSecretR export const DeleteServerSecretResponseSchema: GenMessage = /*@__PURE__*/ messageDesc(file_compass_v1_compass, 10); +/** + * @generated from message compass.v1.ListServerSecretsRequest + */ +export type ListServerSecretsRequest = Message<"compass.v1.ListServerSecretsRequest"> & { +}; + +/** + * Describes the message compass.v1.ListServerSecretsRequest. + * Use `create(ListServerSecretsRequestSchema)` to create a new message. + */ +export const ListServerSecretsRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_compass_v1_compass, 11); + +/** + * @generated from message compass.v1.ListServerSecretsResponse + */ +export type ListServerSecretsResponse = Message<"compass.v1.ListServerSecretsResponse"> & { + /** + * @generated from field: repeated compass.v1.ServerSecretStatus server_secrets = 1; + */ + serverSecrets: ServerSecretStatus[]; +}; + +/** + * Describes the message compass.v1.ListServerSecretsResponse. + * Use `create(ListServerSecretsResponseSchema)` to create a new message. + */ +export const ListServerSecretsResponseSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_compass_v1_compass, 12); + +/** + * A declared server secret's status — the name plus set/unset ONLY, and NEVER + * the value. A server secret is deployment-owned and never container-delivered, + * so there is no delivery/kind routing to carry either. `name` is the STORED + * name, carrying its reserved server-secret prefix; stripping the prefix for + * display is the client's job, so the wire form stays unambiguous. + * + * @generated from message compass.v1.ServerSecretStatus + */ +export type ServerSecretStatus = Message<"compass.v1.ServerSecretStatus"> & { + /** + * @generated from field: string name = 1; + */ + name: string; + + /** + * @generated from field: bool is_set = 2; + */ + isSet: boolean; +}; + +/** + * Describes the message compass.v1.ServerSecretStatus. + * Use `create(ServerSecretStatusSchema)` to create a new message. + */ +export const ServerSecretStatusSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_compass_v1_compass, 13); + /** * @generated from message compass.v1.GetServerInfoRequest */ @@ -261,7 +319,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, 11); + messageDesc(file_compass_v1_compass, 14); /** * @generated from message compass.v1.GetServerInfoResponse @@ -287,7 +345,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, 12); + messageDesc(file_compass_v1_compass, 15); /** * @generated from message compass.v1.WhoAmIRequest @@ -300,7 +358,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, 13); + messageDesc(file_compass_v1_compass, 16); /** * @generated from message compass.v1.WhoAmIResponse @@ -320,7 +378,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, 14); + messageDesc(file_compass_v1_compass, 17); /** * Subscribe to the server event stream. @@ -354,7 +412,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, 15); + messageDesc(file_compass_v1_compass, 18); /** * One entry in the server event stream. @@ -479,7 +537,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, 16); + messageDesc(file_compass_v1_compass, 19); /** * The durable board re-snapshot read request. Single-shot by design: the read @@ -511,7 +569,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, 17); + messageDesc(file_compass_v1_compass, 20); /** * The board as of the requested snapshot: every Compass Issue for the repo in @@ -533,7 +591,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, 18); + messageDesc(file_compass_v1_compass, 21); /** * The server's liveness state, pushed on connect and whenever it changes. @@ -552,7 +610,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, 19); + messageDesc(file_compass_v1_compass, 22); /** * The requested `since_seq` predates the server's retained event buffer, so a @@ -570,7 +628,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, 20); + messageDesc(file_compass_v1_compass, 23); /** * The lifecycle state of one agent session, pushed on every transition. @@ -609,7 +667,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, 21); + messageDesc(file_compass_v1_compass, 24); /** * A chunk of the agent's message stream (assistant text / thought), relayed @@ -644,7 +702,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, 22); + messageDesc(file_compass_v1_compass, 25); /** * A tool call the agent started or updated, relayed from the Runner's agent @@ -685,7 +743,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, 23); + messageDesc(file_compass_v1_compass, 26); /** * The agent's current execution plan, relayed from the Runner's agent event @@ -710,7 +768,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, 24); + messageDesc(file_compass_v1_compass, 27); /** * One step in an agent plan. @@ -734,7 +792,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, 25); + messageDesc(file_compass_v1_compass, 28); /** * The typed observation-trace event — the render contract for the UI's session @@ -822,7 +880,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, 26); + messageDesc(file_compass_v1_compass, 29); /** * A chunk of the agent's user-facing message stream. message_id correlates the @@ -849,7 +907,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, 27); + messageDesc(file_compass_v1_compass, 30); /** * A chunk of the agent's internal-reasoning (thought) stream, correlated by @@ -874,7 +932,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, 28); + messageDesc(file_compass_v1_compass, 31); /** * A tool call the agent started. Reuses AgentToolCallStatus rather than minting @@ -904,7 +962,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, 29); + messageDesc(file_compass_v1_compass, 32); /** * An update to a running or finished tool call: its new status, any accumulated @@ -940,7 +998,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, 30); + messageDesc(file_compass_v1_compass, 33); /** * One file edit within a tool-call update. old_text absent = a file creation. @@ -969,7 +1027,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, 31); + messageDesc(file_compass_v1_compass, 34); /** * The agent's current execution plan. Reuses AgentPlanEntry. @@ -988,7 +1046,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, 32); + messageDesc(file_compass_v1_compass, 35); /** * A free-standing notice in the trace (a status line or advisory), with an @@ -1013,7 +1071,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, 33); + messageDesc(file_compass_v1_compass, 36); /** * A control injection into the agent's live session: the moment a channel @@ -1070,7 +1128,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, 34); + messageDesc(file_compass_v1_compass, 37); /** * A turn-ending failure surfaced as session-trace content: an inner/provider @@ -1103,7 +1161,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, 35); + messageDesc(file_compass_v1_compass, 38); /** * SubscribeAgentSession: the session whose typed observation trace to tail. @@ -1122,7 +1180,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, 36); + messageDesc(file_compass_v1_compass, 39); /** * One frame on the SubscribeAgentSession stream: a typed trace event, a @@ -1153,7 +1211,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, 37); + messageDesc(file_compass_v1_compass, 40); /** * ProvisionAgentWorkspace: create the isolated per-agent container for a @@ -1232,7 +1290,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, 38); + messageDesc(file_compass_v1_compass, 41); /** * @generated from message compass.v1.ProvisionAgentWorkspaceResponse @@ -1252,7 +1310,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, 39); + messageDesc(file_compass_v1_compass, 42); /** * RemoveAgentWorkspace: tear down the per-agent container and release its @@ -1284,7 +1342,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, 40); + messageDesc(file_compass_v1_compass, 43); /** * @generated from message compass.v1.RemoveAgentWorkspaceResponse @@ -1297,7 +1355,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, 41); + messageDesc(file_compass_v1_compass, 44); /** * StartAgentSession: bring the first-party agent in a provisioned container @@ -1330,7 +1388,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, 42); + messageDesc(file_compass_v1_compass, 45); /** * @generated from message compass.v1.StartAgentSessionResponse @@ -1350,7 +1408,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, 43); + messageDesc(file_compass_v1_compass, 46); /** * SpawnAgent: the composite start — Provision then Start under one @@ -1386,7 +1444,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, 44); + messageDesc(file_compass_v1_compass, 47); /** * @generated from message compass.v1.SpawnAgentResponse @@ -1415,7 +1473,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, 45); + messageDesc(file_compass_v1_compass, 48); /** * @generated from message compass.v1.StopAgentSessionRequest @@ -1432,7 +1490,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, 46); + messageDesc(file_compass_v1_compass, 49); /** * @generated from message compass.v1.StopAgentSessionResponse @@ -1445,7 +1503,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, 47); + messageDesc(file_compass_v1_compass, 50); /** * @generated from message compass.v1.ReloadAgentSessionRequest @@ -1462,7 +1520,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, 48); + messageDesc(file_compass_v1_compass, 51); /** * @generated from message compass.v1.ReloadAgentSessionResponse @@ -1481,7 +1539,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, 49); + messageDesc(file_compass_v1_compass, 52); /** * GetAgentStatus: one session when `session_id` is set, else every live one. @@ -1502,7 +1560,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, 50); + messageDesc(file_compass_v1_compass, 53); /** * @generated from message compass.v1.GetAgentStatusResponse @@ -1519,7 +1577,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, 51); + messageDesc(file_compass_v1_compass, 54); /** * IssueToken: the admin-only path to mint a bearer token for an account. @@ -1542,7 +1600,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, 52); + messageDesc(file_compass_v1_compass, 55); /** * @generated from message compass.v1.IssueTokenResponse @@ -1563,7 +1621,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, 53); + messageDesc(file_compass_v1_compass, 56); /** * RevokeToken: the admin-only path to withdraw a bearer token by its value. @@ -1587,7 +1645,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, 54); + messageDesc(file_compass_v1_compass, 57); /** * @generated from message compass.v1.RevokeTokenResponse @@ -1600,7 +1658,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, 55); + messageDesc(file_compass_v1_compass, 58); /** * PutAgentConfig: declare the fleet config bundle. The caller's identity is the @@ -1623,7 +1681,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, 56); + messageDesc(file_compass_v1_compass, 59); /** * @generated from message compass.v1.PutAgentConfigResponse @@ -1644,7 +1702,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, 57); + messageDesc(file_compass_v1_compass, 60); /** * @generated from message compass.v1.GetAgentConfigInfoRequest @@ -1657,7 +1715,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, 58); + messageDesc(file_compass_v1_compass, 61); /** * GetAgentConfigInfo: the current bundle's version and member names by top dir — @@ -1744,7 +1802,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, 59); + messageDesc(file_compass_v1_compass, 62); /** * @generated from message compass.v1.DeleteAgentConfigRequest @@ -1757,7 +1815,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, 60); + messageDesc(file_compass_v1_compass, 63); /** * @generated from message compass.v1.DeleteAgentConfigResponse @@ -1770,7 +1828,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, 61); + messageDesc(file_compass_v1_compass, 64); /** * One candidate in a stable name's ordered chain: an upstream (provider, @@ -1798,7 +1856,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, 62); + messageDesc(file_compass_v1_compass, 65); /** * The listing metadata a stable name carries, taken from its primary candidate @@ -1842,7 +1900,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, 63); + messageDesc(file_compass_v1_compass, 66); /** * One stable name's registry entry: a human display name, the ordered candidate @@ -1872,7 +1930,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, 64); + messageDesc(file_compass_v1_compass, 67); /** * The fleet model registry payload: the stable-name → entry map. The map key is @@ -1892,7 +1950,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, 65); + messageDesc(file_compass_v1_compass, 68); /** * PutModelRegistry: declare the fleet model registry. The caller's identity is @@ -1923,7 +1981,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, 66); + messageDesc(file_compass_v1_compass, 69); /** * @generated from message compass.v1.PutModelRegistryResponse @@ -1942,7 +2000,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, 67); + messageDesc(file_compass_v1_compass, 70); /** * @generated from message compass.v1.GetModelRegistryRequest @@ -1955,7 +2013,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, 68); + messageDesc(file_compass_v1_compass, 71); /** * GetModelRegistry: the current registry version and payload. An unconfigured @@ -1980,7 +2038,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, 69); + messageDesc(file_compass_v1_compass, 72); /** * @generated from message compass.v1.DeleteModelRegistryRequest @@ -1993,7 +2051,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, 70); + messageDesc(file_compass_v1_compass, 73); /** * @generated from message compass.v1.DeleteModelRegistryResponse @@ -2006,7 +2064,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, 71); + messageDesc(file_compass_v1_compass, 74); /** * The Compass agent attribution parsed from the owner header at ingestion — a @@ -2036,7 +2094,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, 72); + messageDesc(file_compass_v1_compass, 75); /** * @generated from message compass.v1.ForgeRef @@ -2060,7 +2118,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, 73); + messageDesc(file_compass_v1_compass, 76); /** * The board unit: a Compass Issue — the forge issue's fields PLUS the Compass @@ -2218,7 +2276,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, 74); + messageDesc(file_compass_v1_compass, 77); /** * A Compass pull request: the forge PR's fields plus the Compass agent @@ -2325,7 +2383,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, 75); + messageDesc(file_compass_v1_compass, 78); /** * The rolled-up CI + status-check state on a PR head — Compass-owned, populated @@ -2357,7 +2415,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, 76); + messageDesc(file_compass_v1_compass, 79); /** * @generated from message compass.v1.Check @@ -2391,7 +2449,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, 77); + messageDesc(file_compass_v1_compass, 80); /** * A PR diffstat (files/additions/deletions), carried on PullRequest — a @@ -2421,7 +2479,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, 78); + messageDesc(file_compass_v1_compass, 81); /** * The linked tracker issue — the projection target (DL-032); the @@ -2462,7 +2520,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, 79); + messageDesc(file_compass_v1_compass, 82); /** * The full review state the right-sidebar PR pane shows — every submitted review @@ -2509,7 +2567,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, 80); + messageDesc(file_compass_v1_compass, 83); /** * @generated from message compass.v1.ReviewThread @@ -2538,7 +2596,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, 81); + messageDesc(file_compass_v1_compass, 84); /** * @generated from message compass.v1.Comment @@ -2565,7 +2623,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, 82); + messageDesc(file_compass_v1_compass, 85); /** * How a resolved secret is delivered into the agent container. Mirrors @@ -3342,6 +3400,22 @@ export const SecretsService: GenService<{ 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. + * 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 + * routinely unset and the two states must be distinguishable. + * + * @generated from rpc compass.v1.SecretsService.ListServerSecrets + */ + listServerSecrets: { + methodKind: "unary"; + input: typeof ListServerSecretsRequestSchema; + output: typeof ListServerSecretsResponseSchema; + }, }> = /*@__PURE__*/ serviceDesc(file_compass_v1_compass, 1); 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 c88c7189..2abbef53 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("Chhjb21wYXNzL3YxL2NvbXBhc3MucHJvdG8SCmNvbXBhc3MudjEiqAEKEFNldFNlY3JldFJlcXVlc3QSDAoEbmFtZRgBIAEoCRISCgV2YWx1ZRgCIAEoCUIDgAEBEiwKCGRlbGl2ZXJ5GAMgASgOMhouY29tcGFzcy52MS5TZWNyZXREZWxpdmVyeRIkCgRraW5kGAQgASgOMhYuY29tcGFzcy52MS5TZWNyZXRLaW5kEhAKCHByb3ZpZGVyGAUgASgJEgwKBGhvc3QYBiABKAkiEwoRU2V0U2VjcmV0UmVzcG9uc2UiFAoSTGlzdFNlY3JldHNSZXF1ZXN0IkAKE0xpc3RTZWNyZXRzUmVzcG9uc2USKQoHc2VjcmV0cxgBIAMoCzIYLmNvbXBhc3MudjEuU2VjcmV0U3RhdHVzIqABCgxTZWNyZXRTdGF0dXMSDAoEbmFtZRgBIAEoCRIOCgZpc19zZXQYAiABKAgSLAoIZGVsaXZlcnkYAyABKA4yGi5jb21wYXNzLnYxLlNlY3JldERlbGl2ZXJ5EiQKBGtpbmQYBCABKA4yFi5jb21wYXNzLnYxLlNlY3JldEtpbmQSEAoIcHJvdmlkZXIYBSABKAkSDAoEaG9zdBgGIAEoCSIjChNEZWxldGVTZWNyZXRSZXF1ZXN0EgwKBG5hbWUYASABKAkiFgoURGVsZXRlU2VjcmV0UmVzcG9uc2UiOgoWU2V0U2VydmVyU2VjcmV0UmVxdWVzdBIMCgRuYW1lGAEgASgJEhIKBXZhbHVlGAIgASgJQgOAAQEiGQoXU2V0U2VydmVyU2VjcmV0UmVzcG9uc2UiKQoZRGVsZXRlU2VydmVyU2VjcmV0UmVxdWVzdBIMCgRuYW1lGAEgASgJIhwKGkRlbGV0ZVNlcnZlclNlY3JldFJlc3BvbnNlIhYKFEdldFNlcnZlckluZm9SZXF1ZXN0Ij0KFUdldFNlcnZlckluZm9SZXNwb25zZRIPCgd2ZXJzaW9uGAEgASgJEhMKC2FwaV92ZXJzaW9uGAIgASgJIg8KDVdob0FtSVJlcXVlc3QiJAoOV2hvQW1JUmVzcG9uc2USEgoKYWNjb3VudF9pZBgBIAEoCSJDChZTdWJzY3JpYmVFdmVudHNSZXF1ZXN0EhEKCXNpbmNlX3NlcRgBIAEoBBIWCg5pbnN0YW5jZV9lcG9jaBgCIAEoBCLiAwoXU3Vic2NyaWJlRXZlbnRzUmVzcG9uc2USCwoDc2VxGAEgASgEEhIKCmF0X3VuaXhfbXMYAiABKAMSFgoOaW5zdGFuY2VfZXBvY2gYAyABKAQSFAoMc25hcHNob3Rfc2VxGAQgASgEEjEKDXNlcnZlcl9zdGF0dXMYCiABKAsyGC5jb21wYXNzLnYxLlNlcnZlclN0YXR1c0gAEjUKD3Jlc3luY19yZXF1aXJlZBgLIAEoCzIaLmNvbXBhc3MudjEuUmVzeW5jUmVxdWlyZWRIABI+ChRhZ2VudF9zZXNzaW9uX3N0YXR1cxgMIAEoCzIeLmNvbXBhc3MudjEuQWdlbnRTZXNzaW9uU3RhdHVzSAASPAoTYWdlbnRfbWVzc2FnZV9jaHVuaxgNIAEoCzIdLmNvbXBhc3MudjEuQWdlbnRNZXNzYWdlQ2h1bmtIABI0Cg9hZ2VudF90b29sX2NhbGwYDiABKAsyGS5jb21wYXNzLnYxLkFnZW50VG9vbENhbGxIABIrCgphZ2VudF9wbGFuGA8gASgLMhUuY29tcGFzcy52MS5BZ2VudFBsYW5IABIiCgVpc3N1ZRgQIAEoCzIRLmNvbXBhc3MudjEuSXNzdWVIAEIJCgdwYXlsb2FkIi4KFkxpc3RCb2FyZElzc3Vlc1JlcXVlc3QSFAoMc25hcHNob3Rfc2VxGAEgASgEIjwKF0xpc3RCb2FyZElzc3Vlc1Jlc3BvbnNlEiEKBmlzc3VlcxgBIAMoCzIRLmNvbXBhc3MudjEuSXNzdWUiNgoMU2VydmVyU3RhdHVzEiYKBXN0YXRlGAEgASgOMhcuY29tcGFzcy52MS5TZXJ2ZXJTdGF0ZSIQCg5SZXN5bmNSZXF1aXJlZCJwChJBZ2VudFNlc3Npb25TdGF0dXMSEgoKc2Vzc2lvbl9pZBgBIAEoCRIsCgVzdGF0ZRgCIAEoDjIdLmNvbXBhc3MudjEuQWdlbnRTZXNzaW9uU3RhdGUSGAoQYWdlbnRfYWNjb3VudF9pZBgDIAEoCSJJChFBZ2VudE1lc3NhZ2VDaHVuaxISCgpzZXNzaW9uX2lkGAEgASgJEgwKBHRleHQYAiABKAkSEgoKaXNfdGhvdWdodBgDIAEoCCJ5Cg1BZ2VudFRvb2xDYWxsEhIKCnNlc3Npb25faWQYASABKAkSFAoMdG9vbF9jYWxsX2lkGAIgASgJEg0KBXRpdGxlGAMgASgJEi8KBnN0YXR1cxgEIAEoDjIfLmNvbXBhc3MudjEuQWdlbnRUb29sQ2FsbFN0YXR1cyJMCglBZ2VudFBsYW4SEgoKc2Vzc2lvbl9pZBgBIAEoCRIrCgdlbnRyaWVzGAIgAygLMhouY29tcGFzcy52MS5BZ2VudFBsYW5FbnRyeSJTCg5BZ2VudFBsYW5FbnRyeRIPCgdjb250ZW50GAEgASgJEjAKBnN0YXR1cxgCIAEoDjIgLmNvbXBhc3MudjEuQWdlbnRQbGFuRW50cnlTdGF0dXMi3wMKDFNlc3Npb25FdmVudBIQCghldmVudF9pZBgBIAEoCRISCgphdF91bml4X21zGAIgASgDEjoKDmFzc2lzdGFudF90ZXh0GAMgASgLMiAuY29tcGFzcy52MS5TZXNzaW9uQXNzaXN0YW50VGV4dEgAEi8KCHRoaW5raW5nGAQgASgLMhsuY29tcGFzcy52MS5TZXNzaW9uVGhpbmtpbmdIABIwCgl0b29sX2NhbGwYBSABKAsyGy5jb21wYXNzLnYxLlNlc3Npb25Ub29sQ2FsbEgAEj0KEHRvb2xfY2FsbF91cGRhdGUYBiABKAsyIS5jb21wYXNzLnYxLlNlc3Npb25Ub29sQ2FsbFVwZGF0ZUgAEicKBHBsYW4YByABKAsyFy5jb21wYXNzLnYxLlNlc3Npb25QbGFuSAASKwoGbm90aWNlGAggASgLMhkuY29tcGFzcy52MS5TZXNzaW9uTm90aWNlSAASOQoRc2Vzc2lvbl9pbmplY3Rpb24YCSABKAsyHC5jb21wYXNzLnYxLlNlc3Npb25JbmplY3Rpb25IABIxCg1zZXNzaW9uX2Vycm9yGAogASgLMhguY29tcGFzcy52MS5TZXNzaW9uRXJyb3JIAEIHCgVldmVudCI4ChRTZXNzaW9uQXNzaXN0YW50VGV4dBIMCgR0ZXh0GAEgASgJEhIKCm1lc3NhZ2VfaWQYAiABKAkiMwoPU2Vzc2lvblRoaW5raW5nEgwKBHRleHQYASABKAkSEgoKbWVzc2FnZV9pZBgCIAEoCSJnCg9TZXNzaW9uVG9vbENhbGwSFAoMdG9vbF9jYWxsX2lkGAEgASgJEg0KBXRpdGxlGAIgASgJEi8KBnN0YXR1cxgDIAEoDjIfLmNvbXBhc3MudjEuQWdlbnRUb29sQ2FsbFN0YXR1cyKaAQoVU2Vzc2lvblRvb2xDYWxsVXBkYXRlEhQKDHRvb2xfY2FsbF9pZBgBIAEoCRIvCgZzdGF0dXMYAiABKA4yHy5jb21wYXNzLnYxLkFnZW50VG9vbENhbGxTdGF0dXMSDgoGb3V0cHV0GAMgASgJEioKBWRpZmZzGAQgAygLMhsuY29tcGFzcy52MS5TZXNzaW9uRmlsZURpZmYiVQoPU2Vzc2lvbkZpbGVEaWZmEgwKBHBhdGgYASABKAkSFQoIb2xkX3RleHQYAiABKAlIAIgBARIQCghuZXdfdGV4dBgDIAEoCUILCglfb2xkX3RleHQiOgoLU2Vzc2lvblBsYW4SKwoHZW50cmllcxgBIAMoCzIaLmNvbXBhc3MudjEuQWdlbnRQbGFuRW50cnkiOQoNU2Vzc2lvbk5vdGljZRIMCgR0ZXh0GAEgASgJEhEKBGxpbmsYAiABKAlIAIgBAUIHCgVfbGluayKDAQoQU2Vzc2lvbkluamVjdGlvbhIxCgdvcF9raW5kGAEgASgOMiAuY29tcGFzcy52MS5TZXNzaW9uSW5qZWN0aW9uS2luZBISCgptZXNzYWdlX2lkGAIgASgJEhMKC2Zyb21faGFuZGxlGAMgASgJEhMKC3RyYWNlcGFyZW50GAQgASgJImsKDFNlc3Npb25FcnJvchIqCgRraW5kGAEgASgOMhwuY29tcGFzcy52MS5TZXNzaW9uRXJyb3JLaW5kEg8KB21lc3NhZ2UYAiABKAkSEwoGc3RhdHVzGAMgASgFSACIAQFCCQoHX3N0YXR1cyIyChxTdWJzY3JpYmVBZ2VudFNlc3Npb25SZXF1ZXN0EhIKCnNlc3Npb25faWQYASABKAkifgoRQWdlbnRTZXNzaW9uRnJhbWUSEgoKc2Vzc2lvbl9pZBgBIAEoCRInCgVldmVudBgCIAEoCzIYLmNvbXBhc3MudjEuU2Vzc2lvbkV2ZW50EiwKBXN0YXRlGAMgASgOMh0uY29tcGFzcy52MS5BZ2VudFNlc3Npb25TdGF0ZSJwCh5Qcm92aXNpb25BZ2VudFdvcmtzcGFjZVJlcXVlc3QSFAoMYWdlbnRfaGFuZGxlGAEgASgJEhkKEWNsaWVudF9yZXF1ZXN0X2lkGAIgASgJEg8KB3BlcnNvbmEYAyABKAkSDAoEcm9sZRgEIAEoCSI5Ch9Qcm92aXNpb25BZ2VudFdvcmtzcGFjZVJlc3BvbnNlEhYKDmNvbnRhaW5lcl9uYW1lGAEgASgJIlAKG1JlbW92ZUFnZW50V29ya3NwYWNlUmVxdWVzdBIWCg5jb250YWluZXJfbmFtZRgBIAEoCRIZChFjbGllbnRfcmVxdWVzdF9pZBgCIAEoCSIeChxSZW1vdmVBZ2VudFdvcmtzcGFjZVJlc3BvbnNlImMKGFN0YXJ0QWdlbnRTZXNzaW9uUmVxdWVzdBIWCg5jb250YWluZXJfbmFtZRgBIAEoCRIZChFyZXN1bWVfc2Vzc2lvbl9pZBgDIAEoCUoECAIQA1IOaW5pdGlhbF9wcm9tcHQiLwoZU3RhcnRBZ2VudFNlc3Npb25SZXNwb25zZRISCgpzZXNzaW9uX2lkGAEgASgJIloKEVNwYXduQWdlbnRSZXF1ZXN0EhQKDGFnZW50X2hhbmRsZRgBIAEoCRIZChFjbGllbnRfcmVxdWVzdF9pZBgDIAEoCUoECAIQA1IOaW5pdGlhbF9wcm9tcHQiQAoSU3Bhd25BZ2VudFJlc3BvbnNlEhIKCnNlc3Npb25faWQYASABKAkSFgoOY29udGFpbmVyX25hbWUYAiABKAkiLQoXU3RvcEFnZW50U2Vzc2lvblJlcXVlc3QSEgoKc2Vzc2lvbl9pZBgBIAEoCSIaChhTdG9wQWdlbnRTZXNzaW9uUmVzcG9uc2UiLwoZUmVsb2FkQWdlbnRTZXNzaW9uUmVxdWVzdBISCgpzZXNzaW9uX2lkGAEgASgJIjAKGlJlbG9hZEFnZW50U2Vzc2lvblJlc3BvbnNlEhIKCnNlc3Npb25faWQYASABKAkiKwoVR2V0QWdlbnRTdGF0dXNSZXF1ZXN0EhIKCnNlc3Npb25faWQYASABKAkiSgoWR2V0QWdlbnRTdGF0dXNSZXNwb25zZRIwCghzdGF0dXNlcxgBIAMoCzIeLmNvbXBhc3MudjEuQWdlbnRTZXNzaW9uU3RhdHVzIisKEUlzc3VlVG9rZW5SZXF1ZXN0EhYKDmFjY291bnRfaGFuZGxlGAEgASgJIiMKEklzc3VlVG9rZW5SZXNwb25zZRINCgV0b2tlbhgBIAEoCSIoChJSZXZva2VUb2tlblJlcXVlc3QSEgoFdG9rZW4YASABKAlCA4ABASIVChNSZXZva2VUb2tlblJlc3BvbnNlIicKFVB1dEFnZW50Q29uZmlnUmVxdWVzdBIOCgZidW5kbGUYASABKAwiKQoWUHV0QWdlbnRDb25maWdSZXNwb25zZRIPCgd2ZXJzaW9uGAEgASgJIhsKGUdldEFnZW50Q29uZmlnSW5mb1JlcXVlc3Qi2gEKGkdldEFnZW50Q29uZmlnSW5mb1Jlc3BvbnNlEg8KB3ZlcnNpb24YASABKAkSDgoGc2tpbGxzGAIgAygJEhIKCmV4dGVuc2lvbnMYAyADKAkSEwoLbWNwX3NlcnZlcnMYBCADKAkSFAoMaGFzX3NldHRpbmdzGAUgASgIEhUKDWhhc19hZ2VudHNfbWQYBiABKAgSDQoFcnVsZXMYByADKAkSEQoJc3ViYWdlbnRzGAggAygJEhIKCmhhc19tb2RlbHMYCSABKAgSDwoHcHJvbXB0cxgKIAMoCSIaChhEZWxldGVBZ2VudENvbmZpZ1JlcXVlc3QiGwoZRGVsZXRlQWdlbnRDb25maWdSZXNwb25zZSI0Cg5Nb2RlbENhbmRpZGF0ZRIQCghwcm92aWRlchgBIAEoCRIQCghtb2RlbF9pZBgCIAEoCSJxCg1Nb2RlbE1ldGFkYXRhEhYKDmNvbnRleHRfd2luZG93GAEgASgDEhwKFGlucHV0X2Nvc3RfbWljcm9fdXNkGAIgASgDEh0KFW91dHB1dF9jb3N0X21pY3JvX3VzZBgDIAEoAxILCgNhcGkYBCABKAkihwEKEk1vZGVsUmVnaXN0cnlFbnRyeRIUCgxkaXNwbGF5X25hbWUYASABKAkSLgoKY2FuZGlkYXRlcxgCIAMoCzIaLmNvbXBhc3MudjEuTW9kZWxDYW5kaWRhdGUSKwoIbWV0YWRhdGEYAyABKAsyGS5jb21wYXNzLnYxLk1vZGVsTWV0YWRhdGEimAEKDU1vZGVsUmVnaXN0cnkSNwoHZW50cmllcxgBIAMoCzImLmNvbXBhc3MudjEuTW9kZWxSZWdpc3RyeS5FbnRyaWVzRW50cnkaTgoMRW50cmllc0VudHJ5EgsKA2tleRgBIAEoCRItCgV2YWx1ZRgCIAEoCzIeLmNvbXBhc3MudjEuTW9kZWxSZWdpc3RyeUVudHJ5OgI4ASJgChdQdXRNb2RlbFJlZ2lzdHJ5UmVxdWVzdBIrCghyZWdpc3RyeRgBIAEoCzIZLmNvbXBhc3MudjEuTW9kZWxSZWdpc3RyeRIYChBleHBlY3RlZF92ZXJzaW9uGAIgASgDIisKGFB1dE1vZGVsUmVnaXN0cnlSZXNwb25zZRIPCgd2ZXJzaW9uGAEgASgDIhkKF0dldE1vZGVsUmVnaXN0cnlSZXF1ZXN0IlgKGEdldE1vZGVsUmVnaXN0cnlSZXNwb25zZRIPCgd2ZXJzaW9uGAEgASgDEisKCHJlZ2lzdHJ5GAIgASgLMhkuY29tcGFzcy52MS5Nb2RlbFJlZ2lzdHJ5IhwKGkRlbGV0ZU1vZGVsUmVnaXN0cnlSZXF1ZXN0Ih0KG0RlbGV0ZU1vZGVsUmVnaXN0cnlSZXNwb25zZSIoChBBZ2VudEF0dHJpYnV0aW9uEhQKDGFnZW50X2hhbmRsZRgBIAEoCSJFCghGb3JnZVJlZhIrCghwcm92aWRlchgBIAEoDjIZLmNvbXBhc3MudjEuRm9yZ2VQcm92aWRlchIMCgRob3N0GAIgASgJItQDCgVJc3N1ZRIKCgJpZBgBIAEoCRIjCgVmb3JnZRgCIAEoCzIULmNvbXBhc3MudjEuRm9yZ2VSZWYSDAoEcmVwbxgDIAEoCRIOCgZudW1iZXIYBCABKA0SDQoFdGl0bGUYBSABKAkSDAoEYm9keRgGIAEoCRITCgtmb3JnZV9zdGF0ZRgHIAEoCRILCgN1cmwYCCABKAkSKwoFYWdlbnQYCSABKAsyHC5jb21wYXNzLnYxLkFnZW50QXR0cmlidXRpb24SFQoNZm9yZ2VfYWNjb3VudBgKIAEoCRIOCgZsYWJlbHMYCyADKAkSLgoKdXBkYXRlZF9hdBgTIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASJQoFc3RhdGUYDCABKA4yFi5jb21wYXNzLnYxLklzc3VlU3RhdGUSEAoIcHJpb3JpdHkYDSABKAkSEAoIYXNzaWduZWUYDiABKAkSDwoHc3VtbWFyeRgPIAEoCRIOCgZicmFuY2gYECABKAkSJAoDcHJzGBEgAygLMhcuY29tcGFzcy52MS5QdWxsUmVxdWVzdBInCgd0cmFja2VyGBIgASgLMhYuY29tcGFzcy52MS5UcmFja2VyUmVmIp4DCgtQdWxsUmVxdWVzdBIjCgVmb3JnZRgBIAEoCzIULmNvbXBhc3MudjEuRm9yZ2VSZWYSDAoEcmVwbxgCIAEoCRIOCgZudW1iZXIYAyABKA0SDQoFdGl0bGUYBCABKAkSEwoLZm9yZ2Vfc3RhdGUYBSABKAkSCwoDdXJsGAYgASgJEhAKCGhlYWRfcmVmGAcgASgJEhAKCGJhc2VfcmVmGAggASgJEisKBWFnZW50GAkgASgLMhwuY29tcGFzcy52MS5BZ2VudEF0dHJpYnV0aW9uEhUKDWZvcmdlX2FjY291bnQYCiABKAkSDQoFZHJhZnQYCyABKAgSKQoHY2hhbmdlZBgMIAEoCzIYLmNvbXBhc3MudjEuQ2hhbmdlZFN0YXRzEikKBmNoZWNrcxgNIAEoCzIZLmNvbXBhc3MudjEuQ2hlY2tzU3VtbWFyeRIjCgdyZXZpZXdzGA4gAygLMhIuY29tcGFzcy52MS5SZXZpZXcSKQoHdGhyZWFkcxgPIAMoCzIYLmNvbXBhc3MudjEuUmV2aWV3VGhyZWFkIlMKDUNoZWNrc1N1bW1hcnkSEAoIaGVhZF9zaGEYASABKAkSDQoFc3RhdGUYAiABKAkSIQoGY2hlY2tzGAMgAygLMhEuY29tcGFzcy52MS5DaGVjayJDCgVDaGVjaxIMCgRuYW1lGAEgASgJEg0KBXN0YXRlGAIgASgJEgsKA3VybBgDIAEoCRIQCghyZXF1aXJlZBgEIAEoCCJDCgxDaGFuZ2VkU3RhdHMSDQoFZmlsZXMYASABKA0SEQoJYWRkaXRpb25zGAIgASgNEhEKCWRlbGV0aW9ucxgDIAEoDSJDCgpUcmFja2VyUmVmEgwKBGtpbmQYASABKAkSCgoCaWQYAiABKAkSDgoGc3RhdHVzGAMgASgJEgsKA3VybBgEIAEoCSJHCgZSZXZpZXcSDgoGYXV0aG9yGAEgASgJEg4KBmlzX2JvdBgCIAEoCBIPCgd2ZXJkaWN0GAMgASgJEgwKBGJvZHkYBCABKAkiVQoMUmV2aWV3VGhyZWFkEgwKBHBhdGgYASABKAkSEAoIcmVzb2x2ZWQYAiABKAgSJQoIY29tbWVudHMYAyADKAsyEy5jb21wYXNzLnYxLkNvbW1lbnQiNwoHQ29tbWVudBIOCgZhdXRob3IYASABKAkSDgoGaXNfYm90GAIgASgIEgwKBGJvZHkYAyABKAkqZAoOU2VjcmV0RGVsaXZlcnkSHwobU0VDUkVUX0RFTElWRVJZX1VOU1BFQ0lGSUVEEAASGAoUU0VDUkVUX0RFTElWRVJZX0ZJTEUQARIXChNTRUNSRVRfREVMSVZFUllfRU5WEAIqcAoKU2VjcmV0S2luZBIbChdTRUNSRVRfS0lORF9VTlNQRUNJRklFRBAAEhcKE1NFQ1JFVF9LSU5EX0dFTkVSSUMQARIYChRTRUNSRVRfS0lORF9QUk9WSURFUhACEhIKDlNFQ1JFVF9LSU5EX0dIEAMqQwoLU2VydmVyU3RhdGUSHAoYU0VSVkVSX1NUQVRFX1VOU1BFQ0lGSUVEEAASFgoSU0VSVkVSX1NUQVRFX1JFQURZEAEqggIKEUFnZW50U2Vzc2lvblN0YXRlEiMKH0FHRU5UX1NFU1NJT05fU1RBVEVfVU5TUEVDSUZJRUQQABIgChxBR0VOVF9TRVNTSU9OX1NUQVRFX1NUQVJUSU5HEAESHQoZQUdFTlRfU0VTU0lPTl9TVEFURV9SRUFEWRACEh8KG0FHRU5UX1NFU1NJT05fU1RBVEVfV09SS0lORxADEh8KG0FHRU5UX1NFU1NJT05fU1RBVEVfU1RPUFBFRBAEEh8KG0FHRU5UX1NFU1NJT05fU1RBVEVfRVJST1JFRBAFEiQKIEFHRU5UX1NFU1NJT05fU1RBVEVfRElTQ09OTkVDVEVEEAYq0gEKE0FnZW50VG9vbENhbGxTdGF0dXMSJgoiQUdFTlRfVE9PTF9DQUxMX1NUQVRVU19VTlNQRUNJRklFRBAAEiIKHkFHRU5UX1RPT0xfQ0FMTF9TVEFUVVNfUEVORElORxABEiYKIkFHRU5UX1RPT0xfQ0FMTF9TVEFUVVNfSU5fUFJPR1JFU1MQAhIkCiBBR0VOVF9UT09MX0NBTExfU1RBVFVTX0NPTVBMRVRFRBADEiEKHUFHRU5UX1RPT0xfQ0FMTF9TVEFUVVNfRkFJTEVEEAQqtAEKFEFnZW50UGxhbkVudHJ5U3RhdHVzEicKI0FHRU5UX1BMQU5fRU5UUllfU1RBVFVTX1VOU1BFQ0lGSUVEEAASIwofQUdFTlRfUExBTl9FTlRSWV9TVEFUVVNfUEVORElORxABEicKI0FHRU5UX1BMQU5fRU5UUllfU1RBVFVTX0lOX1BST0dSRVNTEAISJQohQUdFTlRfUExBTl9FTlRSWV9TVEFUVVNfQ09NUExFVEVEEAMqhAEKFFNlc3Npb25JbmplY3Rpb25LaW5kEiYKIlNFU1NJT05fSU5KRUNUSU9OX0tJTkRfVU5TUEVDSUZJRUQQABIgChxTRVNTSU9OX0lOSkVDVElPTl9LSU5EX1NURUVSEAESIgoeU0VTU0lPTl9JTkpFQ1RJT05fS0lORF9ERUxJVkVSEAIqdAoQU2Vzc2lvbkVycm9yS2luZBIiCh5TRVNTSU9OX0VSUk9SX0tJTkRfVU5TUEVDSUZJRUQQABIcChhTRVNTSU9OX0VSUk9SX0tJTkRfRVJST1IQARIeChpTRVNTSU9OX0VSUk9SX0tJTkRfQUJPUlRFRBACKvEBCgpJc3N1ZVN0YXRlEhsKF0lTU1VFX1NUQVRFX1VOU1BFQ0lGSUVEEAASFwoTSVNTVUVfU1RBVEVfQkFDS0xPRxABEhQKEElTU1VFX1NUQVRFX1RPRE8QAhIWChJJU1NVRV9TVEFURV9RVUVVRUQQAxIXChNJU1NVRV9TVEFURV9CTE9DS0VEEAQSGwoXSVNTVUVfU1RBVEVfSU5fUFJPR1JFU1MQBRIZChVJU1NVRV9TVEFURV9JTl9SRVZJRVcQBhIUChBJU1NVRV9TVEFURV9ET05FEAcSGAoUSVNTVUVfU1RBVEVfQVJDSElWRUQQCCqcAQoNRm9yZ2VQcm92aWRlchIeChpGT1JHRV9QUk9WSURFUl9VTlNQRUNJRklFRBAAEhkKFUZPUkdFX1BST1ZJREVSX0dJVEhVQhABEhkKFUZPUkdFX1BST1ZJREVSX0dJVExBQhACEhoKFkZPUkdFX1BST1ZJREVSX0ZPUkdFSk8QAxIZChVGT1JHRV9QUk9WSURFUl9MSU5FQVIQBDLTDgoOQ29tcGFzc1NlcnZpY2USVAoNR2V0U2VydmVySW5mbxIgLmNvbXBhc3MudjEuR2V0U2VydmVySW5mb1JlcXVlc3QaIS5jb21wYXNzLnYxLkdldFNlcnZlckluZm9SZXNwb25zZRI/CgZXaG9BbUkSGS5jb21wYXNzLnYxLldob0FtSVJlcXVlc3QaGi5jb21wYXNzLnYxLldob0FtSVJlc3BvbnNlElwKD1N1YnNjcmliZUV2ZW50cxIiLmNvbXBhc3MudjEuU3Vic2NyaWJlRXZlbnRzUmVxdWVzdBojLmNvbXBhc3MudjEuU3Vic2NyaWJlRXZlbnRzUmVzcG9uc2UwARJaCg9MaXN0Qm9hcmRJc3N1ZXMSIi5jb21wYXNzLnYxLkxpc3RCb2FyZElzc3Vlc1JlcXVlc3QaIy5jb21wYXNzLnYxLkxpc3RCb2FyZElzc3Vlc1Jlc3BvbnNlEnIKF1Byb3Zpc2lvbkFnZW50V29ya3NwYWNlEiouY29tcGFzcy52MS5Qcm92aXNpb25BZ2VudFdvcmtzcGFjZVJlcXVlc3QaKy5jb21wYXNzLnYxLlByb3Zpc2lvbkFnZW50V29ya3NwYWNlUmVzcG9uc2USYAoRU3RhcnRBZ2VudFNlc3Npb24SJC5jb21wYXNzLnYxLlN0YXJ0QWdlbnRTZXNzaW9uUmVxdWVzdBolLmNvbXBhc3MudjEuU3RhcnRBZ2VudFNlc3Npb25SZXNwb25zZRJLCgpTcGF3bkFnZW50Eh0uY29tcGFzcy52MS5TcGF3bkFnZW50UmVxdWVzdBoeLmNvbXBhc3MudjEuU3Bhd25BZ2VudFJlc3BvbnNlEl0KEFN0b3BBZ2VudFNlc3Npb24SIy5jb21wYXNzLnYxLlN0b3BBZ2VudFNlc3Npb25SZXF1ZXN0GiQuY29tcGFzcy52MS5TdG9wQWdlbnRTZXNzaW9uUmVzcG9uc2USaQoUUmVtb3ZlQWdlbnRXb3Jrc3BhY2USJy5jb21wYXNzLnYxLlJlbW92ZUFnZW50V29ya3NwYWNlUmVxdWVzdBooLmNvbXBhc3MudjEuUmVtb3ZlQWdlbnRXb3Jrc3BhY2VSZXNwb25zZRJjChJSZWxvYWRBZ2VudFNlc3Npb24SJS5jb21wYXNzLnYxLlJlbG9hZEFnZW50U2Vzc2lvblJlcXVlc3QaJi5jb21wYXNzLnYxLlJlbG9hZEFnZW50U2Vzc2lvblJlc3BvbnNlElcKDkdldEFnZW50U3RhdHVzEiEuY29tcGFzcy52MS5HZXRBZ2VudFN0YXR1c1JlcXVlc3QaIi5jb21wYXNzLnYxLkdldEFnZW50U3RhdHVzUmVzcG9uc2USYgoVU3Vic2NyaWJlQWdlbnRTZXNzaW9uEiguY29tcGFzcy52MS5TdWJzY3JpYmVBZ2VudFNlc3Npb25SZXF1ZXN0Gh0uY29tcGFzcy52MS5BZ2VudFNlc3Npb25GcmFtZTABEksKCklzc3VlVG9rZW4SHS5jb21wYXNzLnYxLklzc3VlVG9rZW5SZXF1ZXN0Gh4uY29tcGFzcy52MS5Jc3N1ZVRva2VuUmVzcG9uc2USTgoLUmV2b2tlVG9rZW4SHi5jb21wYXNzLnYxLlJldm9rZVRva2VuUmVxdWVzdBofLmNvbXBhc3MudjEuUmV2b2tlVG9rZW5SZXNwb25zZRJXCg5QdXRBZ2VudENvbmZpZxIhLmNvbXBhc3MudjEuUHV0QWdlbnRDb25maWdSZXF1ZXN0GiIuY29tcGFzcy52MS5QdXRBZ2VudENvbmZpZ1Jlc3BvbnNlEmMKEkdldEFnZW50Q29uZmlnSW5mbxIlLmNvbXBhc3MudjEuR2V0QWdlbnRDb25maWdJbmZvUmVxdWVzdBomLmNvbXBhc3MudjEuR2V0QWdlbnRDb25maWdJbmZvUmVzcG9uc2USYAoRRGVsZXRlQWdlbnRDb25maWcSJC5jb21wYXNzLnYxLkRlbGV0ZUFnZW50Q29uZmlnUmVxdWVzdBolLmNvbXBhc3MudjEuRGVsZXRlQWdlbnRDb25maWdSZXNwb25zZRJdChBQdXRNb2RlbFJlZ2lzdHJ5EiMuY29tcGFzcy52MS5QdXRNb2RlbFJlZ2lzdHJ5UmVxdWVzdBokLmNvbXBhc3MudjEuUHV0TW9kZWxSZWdpc3RyeVJlc3BvbnNlEl0KEEdldE1vZGVsUmVnaXN0cnkSIy5jb21wYXNzLnYxLkdldE1vZGVsUmVnaXN0cnlSZXF1ZXN0GiQuY29tcGFzcy52MS5HZXRNb2RlbFJlZ2lzdHJ5UmVzcG9uc2USZgoTRGVsZXRlTW9kZWxSZWdpc3RyeRImLmNvbXBhc3MudjEuRGVsZXRlTW9kZWxSZWdpc3RyeVJlcXVlc3QaJy5jb21wYXNzLnYxLkRlbGV0ZU1vZGVsUmVnaXN0cnlSZXNwb25zZTK+AwoOU2VjcmV0c1NlcnZpY2USSAoJU2V0U2VjcmV0EhwuY29tcGFzcy52MS5TZXRTZWNyZXRSZXF1ZXN0Gh0uY29tcGFzcy52MS5TZXRTZWNyZXRSZXNwb25zZRJOCgtMaXN0U2VjcmV0cxIeLmNvbXBhc3MudjEuTGlzdFNlY3JldHNSZXF1ZXN0Gh8uY29tcGFzcy52MS5MaXN0U2VjcmV0c1Jlc3BvbnNlElEKDERlbGV0ZVNlY3JldBIfLmNvbXBhc3MudjEuRGVsZXRlU2VjcmV0UmVxdWVzdBogLmNvbXBhc3MudjEuRGVsZXRlU2VjcmV0UmVzcG9uc2USWgoPU2V0U2VydmVyU2VjcmV0EiIuY29tcGFzcy52MS5TZXRTZXJ2ZXJTZWNyZXRSZXF1ZXN0GiMuY29tcGFzcy52MS5TZXRTZXJ2ZXJTZWNyZXRSZXNwb25zZRJjChJEZWxldGVTZXJ2ZXJTZWNyZXQSJS5jb21wYXNzLnYxLkRlbGV0ZVNlcnZlclNlY3JldFJlcXVlc3QaJi5jb21wYXNzLnYxLkRlbGV0ZVNlcnZlclNlY3JldFJlc3BvbnNlYgZwcm90bzM", [file_google_protobuf_timestamp]); + fileDesc("Chhjb21wYXNzL3YxL2NvbXBhc3MucHJvdG8SCmNvbXBhc3MudjEiqAEKEFNldFNlY3JldFJlcXVlc3QSDAoEbmFtZRgBIAEoCRISCgV2YWx1ZRgCIAEoCUIDgAEBEiwKCGRlbGl2ZXJ5GAMgASgOMhouY29tcGFzcy52MS5TZWNyZXREZWxpdmVyeRIkCgRraW5kGAQgASgOMhYuY29tcGFzcy52MS5TZWNyZXRLaW5kEhAKCHByb3ZpZGVyGAUgASgJEgwKBGhvc3QYBiABKAkiEwoRU2V0U2VjcmV0UmVzcG9uc2UiFAoSTGlzdFNlY3JldHNSZXF1ZXN0IkAKE0xpc3RTZWNyZXRzUmVzcG9uc2USKQoHc2VjcmV0cxgBIAMoCzIYLmNvbXBhc3MudjEuU2VjcmV0U3RhdHVzIqABCgxTZWNyZXRTdGF0dXMSDAoEbmFtZRgBIAEoCRIOCgZpc19zZXQYAiABKAgSLAoIZGVsaXZlcnkYAyABKA4yGi5jb21wYXNzLnYxLlNlY3JldERlbGl2ZXJ5EiQKBGtpbmQYBCABKA4yFi5jb21wYXNzLnYxLlNlY3JldEtpbmQSEAoIcHJvdmlkZXIYBSABKAkSDAoEaG9zdBgGIAEoCSIjChNEZWxldGVTZWNyZXRSZXF1ZXN0EgwKBG5hbWUYASABKAkiFgoURGVsZXRlU2VjcmV0UmVzcG9uc2UiOgoWU2V0U2VydmVyU2VjcmV0UmVxdWVzdBIMCgRuYW1lGAEgASgJEhIKBXZhbHVlGAIgASgJQgOAAQEiGQoXU2V0U2VydmVyU2VjcmV0UmVzcG9uc2UiKQoZRGVsZXRlU2VydmVyU2VjcmV0UmVxdWVzdBIMCgRuYW1lGAEgASgJIhwKGkRlbGV0ZVNlcnZlclNlY3JldFJlc3BvbnNlIhoKGExpc3RTZXJ2ZXJTZWNyZXRzUmVxdWVzdCJTChlMaXN0U2VydmVyU2VjcmV0c1Jlc3BvbnNlEjYKDnNlcnZlcl9zZWNyZXRzGAEgAygLMh4uY29tcGFzcy52MS5TZXJ2ZXJTZWNyZXRTdGF0dXMiMgoSU2VydmVyU2VjcmV0U3RhdHVzEgwKBG5hbWUYASABKAkSDgoGaXNfc2V0GAIgASgIIhYKFEdldFNlcnZlckluZm9SZXF1ZXN0Ij0KFUdldFNlcnZlckluZm9SZXNwb25zZRIPCgd2ZXJzaW9uGAEgASgJEhMKC2FwaV92ZXJzaW9uGAIgASgJIg8KDVdob0FtSVJlcXVlc3QiJAoOV2hvQW1JUmVzcG9uc2USEgoKYWNjb3VudF9pZBgBIAEoCSJDChZTdWJzY3JpYmVFdmVudHNSZXF1ZXN0EhEKCXNpbmNlX3NlcRgBIAEoBBIWCg5pbnN0YW5jZV9lcG9jaBgCIAEoBCLiAwoXU3Vic2NyaWJlRXZlbnRzUmVzcG9uc2USCwoDc2VxGAEgASgEEhIKCmF0X3VuaXhfbXMYAiABKAMSFgoOaW5zdGFuY2VfZXBvY2gYAyABKAQSFAoMc25hcHNob3Rfc2VxGAQgASgEEjEKDXNlcnZlcl9zdGF0dXMYCiABKAsyGC5jb21wYXNzLnYxLlNlcnZlclN0YXR1c0gAEjUKD3Jlc3luY19yZXF1aXJlZBgLIAEoCzIaLmNvbXBhc3MudjEuUmVzeW5jUmVxdWlyZWRIABI+ChRhZ2VudF9zZXNzaW9uX3N0YXR1cxgMIAEoCzIeLmNvbXBhc3MudjEuQWdlbnRTZXNzaW9uU3RhdHVzSAASPAoTYWdlbnRfbWVzc2FnZV9jaHVuaxgNIAEoCzIdLmNvbXBhc3MudjEuQWdlbnRNZXNzYWdlQ2h1bmtIABI0Cg9hZ2VudF90b29sX2NhbGwYDiABKAsyGS5jb21wYXNzLnYxLkFnZW50VG9vbENhbGxIABIrCgphZ2VudF9wbGFuGA8gASgLMhUuY29tcGFzcy52MS5BZ2VudFBsYW5IABIiCgVpc3N1ZRgQIAEoCzIRLmNvbXBhc3MudjEuSXNzdWVIAEIJCgdwYXlsb2FkIi4KFkxpc3RCb2FyZElzc3Vlc1JlcXVlc3QSFAoMc25hcHNob3Rfc2VxGAEgASgEIjwKF0xpc3RCb2FyZElzc3Vlc1Jlc3BvbnNlEiEKBmlzc3VlcxgBIAMoCzIRLmNvbXBhc3MudjEuSXNzdWUiNgoMU2VydmVyU3RhdHVzEiYKBXN0YXRlGAEgASgOMhcuY29tcGFzcy52MS5TZXJ2ZXJTdGF0ZSIQCg5SZXN5bmNSZXF1aXJlZCJwChJBZ2VudFNlc3Npb25TdGF0dXMSEgoKc2Vzc2lvbl9pZBgBIAEoCRIsCgVzdGF0ZRgCIAEoDjIdLmNvbXBhc3MudjEuQWdlbnRTZXNzaW9uU3RhdGUSGAoQYWdlbnRfYWNjb3VudF9pZBgDIAEoCSJJChFBZ2VudE1lc3NhZ2VDaHVuaxISCgpzZXNzaW9uX2lkGAEgASgJEgwKBHRleHQYAiABKAkSEgoKaXNfdGhvdWdodBgDIAEoCCJ5Cg1BZ2VudFRvb2xDYWxsEhIKCnNlc3Npb25faWQYASABKAkSFAoMdG9vbF9jYWxsX2lkGAIgASgJEg0KBXRpdGxlGAMgASgJEi8KBnN0YXR1cxgEIAEoDjIfLmNvbXBhc3MudjEuQWdlbnRUb29sQ2FsbFN0YXR1cyJMCglBZ2VudFBsYW4SEgoKc2Vzc2lvbl9pZBgBIAEoCRIrCgdlbnRyaWVzGAIgAygLMhouY29tcGFzcy52MS5BZ2VudFBsYW5FbnRyeSJTCg5BZ2VudFBsYW5FbnRyeRIPCgdjb250ZW50GAEgASgJEjAKBnN0YXR1cxgCIAEoDjIgLmNvbXBhc3MudjEuQWdlbnRQbGFuRW50cnlTdGF0dXMi3wMKDFNlc3Npb25FdmVudBIQCghldmVudF9pZBgBIAEoCRISCgphdF91bml4X21zGAIgASgDEjoKDmFzc2lzdGFudF90ZXh0GAMgASgLMiAuY29tcGFzcy52MS5TZXNzaW9uQXNzaXN0YW50VGV4dEgAEi8KCHRoaW5raW5nGAQgASgLMhsuY29tcGFzcy52MS5TZXNzaW9uVGhpbmtpbmdIABIwCgl0b29sX2NhbGwYBSABKAsyGy5jb21wYXNzLnYxLlNlc3Npb25Ub29sQ2FsbEgAEj0KEHRvb2xfY2FsbF91cGRhdGUYBiABKAsyIS5jb21wYXNzLnYxLlNlc3Npb25Ub29sQ2FsbFVwZGF0ZUgAEicKBHBsYW4YByABKAsyFy5jb21wYXNzLnYxLlNlc3Npb25QbGFuSAASKwoGbm90aWNlGAggASgLMhkuY29tcGFzcy52MS5TZXNzaW9uTm90aWNlSAASOQoRc2Vzc2lvbl9pbmplY3Rpb24YCSABKAsyHC5jb21wYXNzLnYxLlNlc3Npb25JbmplY3Rpb25IABIxCg1zZXNzaW9uX2Vycm9yGAogASgLMhguY29tcGFzcy52MS5TZXNzaW9uRXJyb3JIAEIHCgVldmVudCI4ChRTZXNzaW9uQXNzaXN0YW50VGV4dBIMCgR0ZXh0GAEgASgJEhIKCm1lc3NhZ2VfaWQYAiABKAkiMwoPU2Vzc2lvblRoaW5raW5nEgwKBHRleHQYASABKAkSEgoKbWVzc2FnZV9pZBgCIAEoCSJnCg9TZXNzaW9uVG9vbENhbGwSFAoMdG9vbF9jYWxsX2lkGAEgASgJEg0KBXRpdGxlGAIgASgJEi8KBnN0YXR1cxgDIAEoDjIfLmNvbXBhc3MudjEuQWdlbnRUb29sQ2FsbFN0YXR1cyKaAQoVU2Vzc2lvblRvb2xDYWxsVXBkYXRlEhQKDHRvb2xfY2FsbF9pZBgBIAEoCRIvCgZzdGF0dXMYAiABKA4yHy5jb21wYXNzLnYxLkFnZW50VG9vbENhbGxTdGF0dXMSDgoGb3V0cHV0GAMgASgJEioKBWRpZmZzGAQgAygLMhsuY29tcGFzcy52MS5TZXNzaW9uRmlsZURpZmYiVQoPU2Vzc2lvbkZpbGVEaWZmEgwKBHBhdGgYASABKAkSFQoIb2xkX3RleHQYAiABKAlIAIgBARIQCghuZXdfdGV4dBgDIAEoCUILCglfb2xkX3RleHQiOgoLU2Vzc2lvblBsYW4SKwoHZW50cmllcxgBIAMoCzIaLmNvbXBhc3MudjEuQWdlbnRQbGFuRW50cnkiOQoNU2Vzc2lvbk5vdGljZRIMCgR0ZXh0GAEgASgJEhEKBGxpbmsYAiABKAlIAIgBAUIHCgVfbGluayKDAQoQU2Vzc2lvbkluamVjdGlvbhIxCgdvcF9raW5kGAEgASgOMiAuY29tcGFzcy52MS5TZXNzaW9uSW5qZWN0aW9uS2luZBISCgptZXNzYWdlX2lkGAIgASgJEhMKC2Zyb21faGFuZGxlGAMgASgJEhMKC3RyYWNlcGFyZW50GAQgASgJImsKDFNlc3Npb25FcnJvchIqCgRraW5kGAEgASgOMhwuY29tcGFzcy52MS5TZXNzaW9uRXJyb3JLaW5kEg8KB21lc3NhZ2UYAiABKAkSEwoGc3RhdHVzGAMgASgFSACIAQFCCQoHX3N0YXR1cyIyChxTdWJzY3JpYmVBZ2VudFNlc3Npb25SZXF1ZXN0EhIKCnNlc3Npb25faWQYASABKAkifgoRQWdlbnRTZXNzaW9uRnJhbWUSEgoKc2Vzc2lvbl9pZBgBIAEoCRInCgVldmVudBgCIAEoCzIYLmNvbXBhc3MudjEuU2Vzc2lvbkV2ZW50EiwKBXN0YXRlGAMgASgOMh0uY29tcGFzcy52MS5BZ2VudFNlc3Npb25TdGF0ZSJwCh5Qcm92aXNpb25BZ2VudFdvcmtzcGFjZVJlcXVlc3QSFAoMYWdlbnRfaGFuZGxlGAEgASgJEhkKEWNsaWVudF9yZXF1ZXN0X2lkGAIgASgJEg8KB3BlcnNvbmEYAyABKAkSDAoEcm9sZRgEIAEoCSI5Ch9Qcm92aXNpb25BZ2VudFdvcmtzcGFjZVJlc3BvbnNlEhYKDmNvbnRhaW5lcl9uYW1lGAEgASgJIlAKG1JlbW92ZUFnZW50V29ya3NwYWNlUmVxdWVzdBIWCg5jb250YWluZXJfbmFtZRgBIAEoCRIZChFjbGllbnRfcmVxdWVzdF9pZBgCIAEoCSIeChxSZW1vdmVBZ2VudFdvcmtzcGFjZVJlc3BvbnNlImMKGFN0YXJ0QWdlbnRTZXNzaW9uUmVxdWVzdBIWCg5jb250YWluZXJfbmFtZRgBIAEoCRIZChFyZXN1bWVfc2Vzc2lvbl9pZBgDIAEoCUoECAIQA1IOaW5pdGlhbF9wcm9tcHQiLwoZU3RhcnRBZ2VudFNlc3Npb25SZXNwb25zZRISCgpzZXNzaW9uX2lkGAEgASgJIloKEVNwYXduQWdlbnRSZXF1ZXN0EhQKDGFnZW50X2hhbmRsZRgBIAEoCRIZChFjbGllbnRfcmVxdWVzdF9pZBgDIAEoCUoECAIQA1IOaW5pdGlhbF9wcm9tcHQiQAoSU3Bhd25BZ2VudFJlc3BvbnNlEhIKCnNlc3Npb25faWQYASABKAkSFgoOY29udGFpbmVyX25hbWUYAiABKAkiLQoXU3RvcEFnZW50U2Vzc2lvblJlcXVlc3QSEgoKc2Vzc2lvbl9pZBgBIAEoCSIaChhTdG9wQWdlbnRTZXNzaW9uUmVzcG9uc2UiLwoZUmVsb2FkQWdlbnRTZXNzaW9uUmVxdWVzdBISCgpzZXNzaW9uX2lkGAEgASgJIjAKGlJlbG9hZEFnZW50U2Vzc2lvblJlc3BvbnNlEhIKCnNlc3Npb25faWQYASABKAkiKwoVR2V0QWdlbnRTdGF0dXNSZXF1ZXN0EhIKCnNlc3Npb25faWQYASABKAkiSgoWR2V0QWdlbnRTdGF0dXNSZXNwb25zZRIwCghzdGF0dXNlcxgBIAMoCzIeLmNvbXBhc3MudjEuQWdlbnRTZXNzaW9uU3RhdHVzIisKEUlzc3VlVG9rZW5SZXF1ZXN0EhYKDmFjY291bnRfaGFuZGxlGAEgASgJIiMKEklzc3VlVG9rZW5SZXNwb25zZRINCgV0b2tlbhgBIAEoCSIoChJSZXZva2VUb2tlblJlcXVlc3QSEgoFdG9rZW4YASABKAlCA4ABASIVChNSZXZva2VUb2tlblJlc3BvbnNlIicKFVB1dEFnZW50Q29uZmlnUmVxdWVzdBIOCgZidW5kbGUYASABKAwiKQoWUHV0QWdlbnRDb25maWdSZXNwb25zZRIPCgd2ZXJzaW9uGAEgASgJIhsKGUdldEFnZW50Q29uZmlnSW5mb1JlcXVlc3Qi2gEKGkdldEFnZW50Q29uZmlnSW5mb1Jlc3BvbnNlEg8KB3ZlcnNpb24YASABKAkSDgoGc2tpbGxzGAIgAygJEhIKCmV4dGVuc2lvbnMYAyADKAkSEwoLbWNwX3NlcnZlcnMYBCADKAkSFAoMaGFzX3NldHRpbmdzGAUgASgIEhUKDWhhc19hZ2VudHNfbWQYBiABKAgSDQoFcnVsZXMYByADKAkSEQoJc3ViYWdlbnRzGAggAygJEhIKCmhhc19tb2RlbHMYCSABKAgSDwoHcHJvbXB0cxgKIAMoCSIaChhEZWxldGVBZ2VudENvbmZpZ1JlcXVlc3QiGwoZRGVsZXRlQWdlbnRDb25maWdSZXNwb25zZSI0Cg5Nb2RlbENhbmRpZGF0ZRIQCghwcm92aWRlchgBIAEoCRIQCghtb2RlbF9pZBgCIAEoCSJxCg1Nb2RlbE1ldGFkYXRhEhYKDmNvbnRleHRfd2luZG93GAEgASgDEhwKFGlucHV0X2Nvc3RfbWljcm9fdXNkGAIgASgDEh0KFW91dHB1dF9jb3N0X21pY3JvX3VzZBgDIAEoAxILCgNhcGkYBCABKAkihwEKEk1vZGVsUmVnaXN0cnlFbnRyeRIUCgxkaXNwbGF5X25hbWUYASABKAkSLgoKY2FuZGlkYXRlcxgCIAMoCzIaLmNvbXBhc3MudjEuTW9kZWxDYW5kaWRhdGUSKwoIbWV0YWRhdGEYAyABKAsyGS5jb21wYXNzLnYxLk1vZGVsTWV0YWRhdGEimAEKDU1vZGVsUmVnaXN0cnkSNwoHZW50cmllcxgBIAMoCzImLmNvbXBhc3MudjEuTW9kZWxSZWdpc3RyeS5FbnRyaWVzRW50cnkaTgoMRW50cmllc0VudHJ5EgsKA2tleRgBIAEoCRItCgV2YWx1ZRgCIAEoCzIeLmNvbXBhc3MudjEuTW9kZWxSZWdpc3RyeUVudHJ5OgI4ASJgChdQdXRNb2RlbFJlZ2lzdHJ5UmVxdWVzdBIrCghyZWdpc3RyeRgBIAEoCzIZLmNvbXBhc3MudjEuTW9kZWxSZWdpc3RyeRIYChBleHBlY3RlZF92ZXJzaW9uGAIgASgDIisKGFB1dE1vZGVsUmVnaXN0cnlSZXNwb25zZRIPCgd2ZXJzaW9uGAEgASgDIhkKF0dldE1vZGVsUmVnaXN0cnlSZXF1ZXN0IlgKGEdldE1vZGVsUmVnaXN0cnlSZXNwb25zZRIPCgd2ZXJzaW9uGAEgASgDEisKCHJlZ2lzdHJ5GAIgASgLMhkuY29tcGFzcy52MS5Nb2RlbFJlZ2lzdHJ5IhwKGkRlbGV0ZU1vZGVsUmVnaXN0cnlSZXF1ZXN0Ih0KG0RlbGV0ZU1vZGVsUmVnaXN0cnlSZXNwb25zZSIoChBBZ2VudEF0dHJpYnV0aW9uEhQKDGFnZW50X2hhbmRsZRgBIAEoCSJFCghGb3JnZVJlZhIrCghwcm92aWRlchgBIAEoDjIZLmNvbXBhc3MudjEuRm9yZ2VQcm92aWRlchIMCgRob3N0GAIgASgJItQDCgVJc3N1ZRIKCgJpZBgBIAEoCRIjCgVmb3JnZRgCIAEoCzIULmNvbXBhc3MudjEuRm9yZ2VSZWYSDAoEcmVwbxgDIAEoCRIOCgZudW1iZXIYBCABKA0SDQoFdGl0bGUYBSABKAkSDAoEYm9keRgGIAEoCRITCgtmb3JnZV9zdGF0ZRgHIAEoCRILCgN1cmwYCCABKAkSKwoFYWdlbnQYCSABKAsyHC5jb21wYXNzLnYxLkFnZW50QXR0cmlidXRpb24SFQoNZm9yZ2VfYWNjb3VudBgKIAEoCRIOCgZsYWJlbHMYCyADKAkSLgoKdXBkYXRlZF9hdBgTIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASJQoFc3RhdGUYDCABKA4yFi5jb21wYXNzLnYxLklzc3VlU3RhdGUSEAoIcHJpb3JpdHkYDSABKAkSEAoIYXNzaWduZWUYDiABKAkSDwoHc3VtbWFyeRgPIAEoCRIOCgZicmFuY2gYECABKAkSJAoDcHJzGBEgAygLMhcuY29tcGFzcy52MS5QdWxsUmVxdWVzdBInCgd0cmFja2VyGBIgASgLMhYuY29tcGFzcy52MS5UcmFja2VyUmVmIp4DCgtQdWxsUmVxdWVzdBIjCgVmb3JnZRgBIAEoCzIULmNvbXBhc3MudjEuRm9yZ2VSZWYSDAoEcmVwbxgCIAEoCRIOCgZudW1iZXIYAyABKA0SDQoFdGl0bGUYBCABKAkSEwoLZm9yZ2Vfc3RhdGUYBSABKAkSCwoDdXJsGAYgASgJEhAKCGhlYWRfcmVmGAcgASgJEhAKCGJhc2VfcmVmGAggASgJEisKBWFnZW50GAkgASgLMhwuY29tcGFzcy52MS5BZ2VudEF0dHJpYnV0aW9uEhUKDWZvcmdlX2FjY291bnQYCiABKAkSDQoFZHJhZnQYCyABKAgSKQoHY2hhbmdlZBgMIAEoCzIYLmNvbXBhc3MudjEuQ2hhbmdlZFN0YXRzEikKBmNoZWNrcxgNIAEoCzIZLmNvbXBhc3MudjEuQ2hlY2tzU3VtbWFyeRIjCgdyZXZpZXdzGA4gAygLMhIuY29tcGFzcy52MS5SZXZpZXcSKQoHdGhyZWFkcxgPIAMoCzIYLmNvbXBhc3MudjEuUmV2aWV3VGhyZWFkIlMKDUNoZWNrc1N1bW1hcnkSEAoIaGVhZF9zaGEYASABKAkSDQoFc3RhdGUYAiABKAkSIQoGY2hlY2tzGAMgAygLMhEuY29tcGFzcy52MS5DaGVjayJDCgVDaGVjaxIMCgRuYW1lGAEgASgJEg0KBXN0YXRlGAIgASgJEgsKA3VybBgDIAEoCRIQCghyZXF1aXJlZBgEIAEoCCJDCgxDaGFuZ2VkU3RhdHMSDQoFZmlsZXMYASABKA0SEQoJYWRkaXRpb25zGAIgASgNEhEKCWRlbGV0aW9ucxgDIAEoDSJDCgpUcmFja2VyUmVmEgwKBGtpbmQYASABKAkSCgoCaWQYAiABKAkSDgoGc3RhdHVzGAMgASgJEgsKA3VybBgEIAEoCSJHCgZSZXZpZXcSDgoGYXV0aG9yGAEgASgJEg4KBmlzX2JvdBgCIAEoCBIPCgd2ZXJkaWN0GAMgASgJEgwKBGJvZHkYBCABKAkiVQoMUmV2aWV3VGhyZWFkEgwKBHBhdGgYASABKAkSEAoIcmVzb2x2ZWQYAiABKAgSJQoIY29tbWVudHMYAyADKAsyEy5jb21wYXNzLnYxLkNvbW1lbnQiNwoHQ29tbWVudBIOCgZhdXRob3IYASABKAkSDgoGaXNfYm90GAIgASgIEgwKBGJvZHkYAyABKAkqZAoOU2VjcmV0RGVsaXZlcnkSHwobU0VDUkVUX0RFTElWRVJZX1VOU1BFQ0lGSUVEEAASGAoUU0VDUkVUX0RFTElWRVJZX0ZJTEUQARIXChNTRUNSRVRfREVMSVZFUllfRU5WEAIqcAoKU2VjcmV0S2luZBIbChdTRUNSRVRfS0lORF9VTlNQRUNJRklFRBAAEhcKE1NFQ1JFVF9LSU5EX0dFTkVSSUMQARIYChRTRUNSRVRfS0lORF9QUk9WSURFUhACEhIKDlNFQ1JFVF9LSU5EX0dIEAMqQwoLU2VydmVyU3RhdGUSHAoYU0VSVkVSX1NUQVRFX1VOU1BFQ0lGSUVEEAASFgoSU0VSVkVSX1NUQVRFX1JFQURZEAEqggIKEUFnZW50U2Vzc2lvblN0YXRlEiMKH0FHRU5UX1NFU1NJT05fU1RBVEVfVU5TUEVDSUZJRUQQABIgChxBR0VOVF9TRVNTSU9OX1NUQVRFX1NUQVJUSU5HEAESHQoZQUdFTlRfU0VTU0lPTl9TVEFURV9SRUFEWRACEh8KG0FHRU5UX1NFU1NJT05fU1RBVEVfV09SS0lORxADEh8KG0FHRU5UX1NFU1NJT05fU1RBVEVfU1RPUFBFRBAEEh8KG0FHRU5UX1NFU1NJT05fU1RBVEVfRVJST1JFRBAFEiQKIEFHRU5UX1NFU1NJT05fU1RBVEVfRElTQ09OTkVDVEVEEAYq0gEKE0FnZW50VG9vbENhbGxTdGF0dXMSJgoiQUdFTlRfVE9PTF9DQUxMX1NUQVRVU19VTlNQRUNJRklFRBAAEiIKHkFHRU5UX1RPT0xfQ0FMTF9TVEFUVVNfUEVORElORxABEiYKIkFHRU5UX1RPT0xfQ0FMTF9TVEFUVVNfSU5fUFJPR1JFU1MQAhIkCiBBR0VOVF9UT09MX0NBTExfU1RBVFVTX0NPTVBMRVRFRBADEiEKHUFHRU5UX1RPT0xfQ0FMTF9TVEFUVVNfRkFJTEVEEAQqtAEKFEFnZW50UGxhbkVudHJ5U3RhdHVzEicKI0FHRU5UX1BMQU5fRU5UUllfU1RBVFVTX1VOU1BFQ0lGSUVEEAASIwofQUdFTlRfUExBTl9FTlRSWV9TVEFUVVNfUEVORElORxABEicKI0FHRU5UX1BMQU5fRU5UUllfU1RBVFVTX0lOX1BST0dSRVNTEAISJQohQUdFTlRfUExBTl9FTlRSWV9TVEFUVVNfQ09NUExFVEVEEAMqhAEKFFNlc3Npb25JbmplY3Rpb25LaW5kEiYKIlNFU1NJT05fSU5KRUNUSU9OX0tJTkRfVU5TUEVDSUZJRUQQABIgChxTRVNTSU9OX0lOSkVDVElPTl9LSU5EX1NURUVSEAESIgoeU0VTU0lPTl9JTkpFQ1RJT05fS0lORF9ERUxJVkVSEAIqdAoQU2Vzc2lvbkVycm9yS2luZBIiCh5TRVNTSU9OX0VSUk9SX0tJTkRfVU5TUEVDSUZJRUQQABIcChhTRVNTSU9OX0VSUk9SX0tJTkRfRVJST1IQARIeChpTRVNTSU9OX0VSUk9SX0tJTkRfQUJPUlRFRBACKvEBCgpJc3N1ZVN0YXRlEhsKF0lTU1VFX1NUQVRFX1VOU1BFQ0lGSUVEEAASFwoTSVNTVUVfU1RBVEVfQkFDS0xPRxABEhQKEElTU1VFX1NUQVRFX1RPRE8QAhIWChJJU1NVRV9TVEFURV9RVUVVRUQQAxIXChNJU1NVRV9TVEFURV9CTE9DS0VEEAQSGwoXSVNTVUVfU1RBVEVfSU5fUFJPR1JFU1MQBRIZChVJU1NVRV9TVEFURV9JTl9SRVZJRVcQBhIUChBJU1NVRV9TVEFURV9ET05FEAcSGAoUSVNTVUVfU1RBVEVfQVJDSElWRUQQCCqcAQoNRm9yZ2VQcm92aWRlchIeChpGT1JHRV9QUk9WSURFUl9VTlNQRUNJRklFRBAAEhkKFUZPUkdFX1BST1ZJREVSX0dJVEhVQhABEhkKFUZPUkdFX1BST1ZJREVSX0dJVExBQhACEhoKFkZPUkdFX1BST1ZJREVSX0ZPUkdFSk8QAxIZChVGT1JHRV9QUk9WSURFUl9MSU5FQVIQBDLTDgoOQ29tcGFzc1NlcnZpY2USVAoNR2V0U2VydmVySW5mbxIgLmNvbXBhc3MudjEuR2V0U2VydmVySW5mb1JlcXVlc3QaIS5jb21wYXNzLnYxLkdldFNlcnZlckluZm9SZXNwb25zZRI/CgZXaG9BbUkSGS5jb21wYXNzLnYxLldob0FtSVJlcXVlc3QaGi5jb21wYXNzLnYxLldob0FtSVJlc3BvbnNlElwKD1N1YnNjcmliZUV2ZW50cxIiLmNvbXBhc3MudjEuU3Vic2NyaWJlRXZlbnRzUmVxdWVzdBojLmNvbXBhc3MudjEuU3Vic2NyaWJlRXZlbnRzUmVzcG9uc2UwARJaCg9MaXN0Qm9hcmRJc3N1ZXMSIi5jb21wYXNzLnYxLkxpc3RCb2FyZElzc3Vlc1JlcXVlc3QaIy5jb21wYXNzLnYxLkxpc3RCb2FyZElzc3Vlc1Jlc3BvbnNlEnIKF1Byb3Zpc2lvbkFnZW50V29ya3NwYWNlEiouY29tcGFzcy52MS5Qcm92aXNpb25BZ2VudFdvcmtzcGFjZVJlcXVlc3QaKy5jb21wYXNzLnYxLlByb3Zpc2lvbkFnZW50V29ya3NwYWNlUmVzcG9uc2USYAoRU3RhcnRBZ2VudFNlc3Npb24SJC5jb21wYXNzLnYxLlN0YXJ0QWdlbnRTZXNzaW9uUmVxdWVzdBolLmNvbXBhc3MudjEuU3RhcnRBZ2VudFNlc3Npb25SZXNwb25zZRJLCgpTcGF3bkFnZW50Eh0uY29tcGFzcy52MS5TcGF3bkFnZW50UmVxdWVzdBoeLmNvbXBhc3MudjEuU3Bhd25BZ2VudFJlc3BvbnNlEl0KEFN0b3BBZ2VudFNlc3Npb24SIy5jb21wYXNzLnYxLlN0b3BBZ2VudFNlc3Npb25SZXF1ZXN0GiQuY29tcGFzcy52MS5TdG9wQWdlbnRTZXNzaW9uUmVzcG9uc2USaQoUUmVtb3ZlQWdlbnRXb3Jrc3BhY2USJy5jb21wYXNzLnYxLlJlbW92ZUFnZW50V29ya3NwYWNlUmVxdWVzdBooLmNvbXBhc3MudjEuUmVtb3ZlQWdlbnRXb3Jrc3BhY2VSZXNwb25zZRJjChJSZWxvYWRBZ2VudFNlc3Npb24SJS5jb21wYXNzLnYxLlJlbG9hZEFnZW50U2Vzc2lvblJlcXVlc3QaJi5jb21wYXNzLnYxLlJlbG9hZEFnZW50U2Vzc2lvblJlc3BvbnNlElcKDkdldEFnZW50U3RhdHVzEiEuY29tcGFzcy52MS5HZXRBZ2VudFN0YXR1c1JlcXVlc3QaIi5jb21wYXNzLnYxLkdldEFnZW50U3RhdHVzUmVzcG9uc2USYgoVU3Vic2NyaWJlQWdlbnRTZXNzaW9uEiguY29tcGFzcy52MS5TdWJzY3JpYmVBZ2VudFNlc3Npb25SZXF1ZXN0Gh0uY29tcGFzcy52MS5BZ2VudFNlc3Npb25GcmFtZTABEksKCklzc3VlVG9rZW4SHS5jb21wYXNzLnYxLklzc3VlVG9rZW5SZXF1ZXN0Gh4uY29tcGFzcy52MS5Jc3N1ZVRva2VuUmVzcG9uc2USTgoLUmV2b2tlVG9rZW4SHi5jb21wYXNzLnYxLlJldm9rZVRva2VuUmVxdWVzdBofLmNvbXBhc3MudjEuUmV2b2tlVG9rZW5SZXNwb25zZRJXCg5QdXRBZ2VudENvbmZpZxIhLmNvbXBhc3MudjEuUHV0QWdlbnRDb25maWdSZXF1ZXN0GiIuY29tcGFzcy52MS5QdXRBZ2VudENvbmZpZ1Jlc3BvbnNlEmMKEkdldEFnZW50Q29uZmlnSW5mbxIlLmNvbXBhc3MudjEuR2V0QWdlbnRDb25maWdJbmZvUmVxdWVzdBomLmNvbXBhc3MudjEuR2V0QWdlbnRDb25maWdJbmZvUmVzcG9uc2USYAoRRGVsZXRlQWdlbnRDb25maWcSJC5jb21wYXNzLnYxLkRlbGV0ZUFnZW50Q29uZmlnUmVxdWVzdBolLmNvbXBhc3MudjEuRGVsZXRlQWdlbnRDb25maWdSZXNwb25zZRJdChBQdXRNb2RlbFJlZ2lzdHJ5EiMuY29tcGFzcy52MS5QdXRNb2RlbFJlZ2lzdHJ5UmVxdWVzdBokLmNvbXBhc3MudjEuUHV0TW9kZWxSZWdpc3RyeVJlc3BvbnNlEl0KEEdldE1vZGVsUmVnaXN0cnkSIy5jb21wYXNzLnYxLkdldE1vZGVsUmVnaXN0cnlSZXF1ZXN0GiQuY29tcGFzcy52MS5HZXRNb2RlbFJlZ2lzdHJ5UmVzcG9uc2USZgoTRGVsZXRlTW9kZWxSZWdpc3RyeRImLmNvbXBhc3MudjEuRGVsZXRlTW9kZWxSZWdpc3RyeVJlcXVlc3QaJy5jb21wYXNzLnYxLkRlbGV0ZU1vZGVsUmVnaXN0cnlSZXNwb25zZTKgBAoOU2VjcmV0c1NlcnZpY2USSAoJU2V0U2VjcmV0EhwuY29tcGFzcy52MS5TZXRTZWNyZXRSZXF1ZXN0Gh0uY29tcGFzcy52MS5TZXRTZWNyZXRSZXNwb25zZRJOCgtMaXN0U2VjcmV0cxIeLmNvbXBhc3MudjEuTGlzdFNlY3JldHNSZXF1ZXN0Gh8uY29tcGFzcy52MS5MaXN0U2VjcmV0c1Jlc3BvbnNlElEKDERlbGV0ZVNlY3JldBIfLmNvbXBhc3MudjEuRGVsZXRlU2VjcmV0UmVxdWVzdBogLmNvbXBhc3MudjEuRGVsZXRlU2VjcmV0UmVzcG9uc2USWgoPU2V0U2VydmVyU2VjcmV0EiIuY29tcGFzcy52MS5TZXRTZXJ2ZXJTZWNyZXRSZXF1ZXN0GiMuY29tcGFzcy52MS5TZXRTZXJ2ZXJTZWNyZXRSZXNwb25zZRJjChJEZWxldGVTZXJ2ZXJTZWNyZXQSJS5jb21wYXNzLnYxLkRlbGV0ZVNlcnZlclNlY3JldFJlcXVlc3QaJi5jb21wYXNzLnYxLkRlbGV0ZVNlcnZlclNlY3JldFJlc3BvbnNlEmAKEUxpc3RTZXJ2ZXJTZWNyZXRzEiQuY29tcGFzcy52MS5MaXN0U2VydmVyU2VjcmV0c1JlcXVlc3QaJS5jb21wYXNzLnYxLkxpc3RTZXJ2ZXJTZWNyZXRzUmVzcG9uc2ViBnByb3RvMw", [file_google_protobuf_timestamp]); /** * @generated from message compass.v1.SetSecretRequest @@ -250,6 +250,64 @@ export type DeleteServerSecretResponse = Message<"compass.v1.DeleteServerSecretR export const DeleteServerSecretResponseSchema: GenMessage = /*@__PURE__*/ messageDesc(file_compass_v1_compass, 10); +/** + * @generated from message compass.v1.ListServerSecretsRequest + */ +export type ListServerSecretsRequest = Message<"compass.v1.ListServerSecretsRequest"> & { +}; + +/** + * Describes the message compass.v1.ListServerSecretsRequest. + * Use `create(ListServerSecretsRequestSchema)` to create a new message. + */ +export const ListServerSecretsRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_compass_v1_compass, 11); + +/** + * @generated from message compass.v1.ListServerSecretsResponse + */ +export type ListServerSecretsResponse = Message<"compass.v1.ListServerSecretsResponse"> & { + /** + * @generated from field: repeated compass.v1.ServerSecretStatus server_secrets = 1; + */ + serverSecrets: ServerSecretStatus[]; +}; + +/** + * Describes the message compass.v1.ListServerSecretsResponse. + * Use `create(ListServerSecretsResponseSchema)` to create a new message. + */ +export const ListServerSecretsResponseSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_compass_v1_compass, 12); + +/** + * A declared server secret's status — the name plus set/unset ONLY, and NEVER + * the value. A server secret is deployment-owned and never container-delivered, + * so there is no delivery/kind routing to carry either. `name` is the STORED + * name, carrying its reserved server-secret prefix; stripping the prefix for + * display is the client's job, so the wire form stays unambiguous. + * + * @generated from message compass.v1.ServerSecretStatus + */ +export type ServerSecretStatus = Message<"compass.v1.ServerSecretStatus"> & { + /** + * @generated from field: string name = 1; + */ + name: string; + + /** + * @generated from field: bool is_set = 2; + */ + isSet: boolean; +}; + +/** + * Describes the message compass.v1.ServerSecretStatus. + * Use `create(ServerSecretStatusSchema)` to create a new message. + */ +export const ServerSecretStatusSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_compass_v1_compass, 13); + /** * @generated from message compass.v1.GetServerInfoRequest */ @@ -261,7 +319,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, 11); + messageDesc(file_compass_v1_compass, 14); /** * @generated from message compass.v1.GetServerInfoResponse @@ -287,7 +345,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, 12); + messageDesc(file_compass_v1_compass, 15); /** * @generated from message compass.v1.WhoAmIRequest @@ -300,7 +358,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, 13); + messageDesc(file_compass_v1_compass, 16); /** * @generated from message compass.v1.WhoAmIResponse @@ -320,7 +378,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, 14); + messageDesc(file_compass_v1_compass, 17); /** * Subscribe to the server event stream. @@ -354,7 +412,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, 15); + messageDesc(file_compass_v1_compass, 18); /** * One entry in the server event stream. @@ -479,7 +537,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, 16); + messageDesc(file_compass_v1_compass, 19); /** * The durable board re-snapshot read request. Single-shot by design: the read @@ -511,7 +569,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, 17); + messageDesc(file_compass_v1_compass, 20); /** * The board as of the requested snapshot: every Compass Issue for the repo in @@ -533,7 +591,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, 18); + messageDesc(file_compass_v1_compass, 21); /** * The server's liveness state, pushed on connect and whenever it changes. @@ -552,7 +610,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, 19); + messageDesc(file_compass_v1_compass, 22); /** * The requested `since_seq` predates the server's retained event buffer, so a @@ -570,7 +628,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, 20); + messageDesc(file_compass_v1_compass, 23); /** * The lifecycle state of one agent session, pushed on every transition. @@ -609,7 +667,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, 21); + messageDesc(file_compass_v1_compass, 24); /** * A chunk of the agent's message stream (assistant text / thought), relayed @@ -644,7 +702,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, 22); + messageDesc(file_compass_v1_compass, 25); /** * A tool call the agent started or updated, relayed from the Runner's agent @@ -685,7 +743,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, 23); + messageDesc(file_compass_v1_compass, 26); /** * The agent's current execution plan, relayed from the Runner's agent event @@ -710,7 +768,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, 24); + messageDesc(file_compass_v1_compass, 27); /** * One step in an agent plan. @@ -734,7 +792,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, 25); + messageDesc(file_compass_v1_compass, 28); /** * The typed observation-trace event — the render contract for the UI's session @@ -822,7 +880,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, 26); + messageDesc(file_compass_v1_compass, 29); /** * A chunk of the agent's user-facing message stream. message_id correlates the @@ -849,7 +907,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, 27); + messageDesc(file_compass_v1_compass, 30); /** * A chunk of the agent's internal-reasoning (thought) stream, correlated by @@ -874,7 +932,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, 28); + messageDesc(file_compass_v1_compass, 31); /** * A tool call the agent started. Reuses AgentToolCallStatus rather than minting @@ -904,7 +962,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, 29); + messageDesc(file_compass_v1_compass, 32); /** * An update to a running or finished tool call: its new status, any accumulated @@ -940,7 +998,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, 30); + messageDesc(file_compass_v1_compass, 33); /** * One file edit within a tool-call update. old_text absent = a file creation. @@ -969,7 +1027,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, 31); + messageDesc(file_compass_v1_compass, 34); /** * The agent's current execution plan. Reuses AgentPlanEntry. @@ -988,7 +1046,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, 32); + messageDesc(file_compass_v1_compass, 35); /** * A free-standing notice in the trace (a status line or advisory), with an @@ -1013,7 +1071,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, 33); + messageDesc(file_compass_v1_compass, 36); /** * A control injection into the agent's live session: the moment a channel @@ -1070,7 +1128,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, 34); + messageDesc(file_compass_v1_compass, 37); /** * A turn-ending failure surfaced as session-trace content: an inner/provider @@ -1103,7 +1161,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, 35); + messageDesc(file_compass_v1_compass, 38); /** * SubscribeAgentSession: the session whose typed observation trace to tail. @@ -1122,7 +1180,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, 36); + messageDesc(file_compass_v1_compass, 39); /** * One frame on the SubscribeAgentSession stream: a typed trace event, a @@ -1153,7 +1211,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, 37); + messageDesc(file_compass_v1_compass, 40); /** * ProvisionAgentWorkspace: create the isolated per-agent container for a @@ -1232,7 +1290,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, 38); + messageDesc(file_compass_v1_compass, 41); /** * @generated from message compass.v1.ProvisionAgentWorkspaceResponse @@ -1252,7 +1310,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, 39); + messageDesc(file_compass_v1_compass, 42); /** * RemoveAgentWorkspace: tear down the per-agent container and release its @@ -1284,7 +1342,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, 40); + messageDesc(file_compass_v1_compass, 43); /** * @generated from message compass.v1.RemoveAgentWorkspaceResponse @@ -1297,7 +1355,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, 41); + messageDesc(file_compass_v1_compass, 44); /** * StartAgentSession: bring the first-party agent in a provisioned container @@ -1330,7 +1388,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, 42); + messageDesc(file_compass_v1_compass, 45); /** * @generated from message compass.v1.StartAgentSessionResponse @@ -1350,7 +1408,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, 43); + messageDesc(file_compass_v1_compass, 46); /** * SpawnAgent: the composite start — Provision then Start under one @@ -1386,7 +1444,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, 44); + messageDesc(file_compass_v1_compass, 47); /** * @generated from message compass.v1.SpawnAgentResponse @@ -1415,7 +1473,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, 45); + messageDesc(file_compass_v1_compass, 48); /** * @generated from message compass.v1.StopAgentSessionRequest @@ -1432,7 +1490,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, 46); + messageDesc(file_compass_v1_compass, 49); /** * @generated from message compass.v1.StopAgentSessionResponse @@ -1445,7 +1503,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, 47); + messageDesc(file_compass_v1_compass, 50); /** * @generated from message compass.v1.ReloadAgentSessionRequest @@ -1462,7 +1520,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, 48); + messageDesc(file_compass_v1_compass, 51); /** * @generated from message compass.v1.ReloadAgentSessionResponse @@ -1481,7 +1539,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, 49); + messageDesc(file_compass_v1_compass, 52); /** * GetAgentStatus: one session when `session_id` is set, else every live one. @@ -1502,7 +1560,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, 50); + messageDesc(file_compass_v1_compass, 53); /** * @generated from message compass.v1.GetAgentStatusResponse @@ -1519,7 +1577,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, 51); + messageDesc(file_compass_v1_compass, 54); /** * IssueToken: the admin-only path to mint a bearer token for an account. @@ -1542,7 +1600,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, 52); + messageDesc(file_compass_v1_compass, 55); /** * @generated from message compass.v1.IssueTokenResponse @@ -1563,7 +1621,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, 53); + messageDesc(file_compass_v1_compass, 56); /** * RevokeToken: the admin-only path to withdraw a bearer token by its value. @@ -1587,7 +1645,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, 54); + messageDesc(file_compass_v1_compass, 57); /** * @generated from message compass.v1.RevokeTokenResponse @@ -1600,7 +1658,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, 55); + messageDesc(file_compass_v1_compass, 58); /** * PutAgentConfig: declare the fleet config bundle. The caller's identity is the @@ -1623,7 +1681,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, 56); + messageDesc(file_compass_v1_compass, 59); /** * @generated from message compass.v1.PutAgentConfigResponse @@ -1644,7 +1702,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, 57); + messageDesc(file_compass_v1_compass, 60); /** * @generated from message compass.v1.GetAgentConfigInfoRequest @@ -1657,7 +1715,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, 58); + messageDesc(file_compass_v1_compass, 61); /** * GetAgentConfigInfo: the current bundle's version and member names by top dir — @@ -1744,7 +1802,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, 59); + messageDesc(file_compass_v1_compass, 62); /** * @generated from message compass.v1.DeleteAgentConfigRequest @@ -1757,7 +1815,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, 60); + messageDesc(file_compass_v1_compass, 63); /** * @generated from message compass.v1.DeleteAgentConfigResponse @@ -1770,7 +1828,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, 61); + messageDesc(file_compass_v1_compass, 64); /** * One candidate in a stable name's ordered chain: an upstream (provider, @@ -1798,7 +1856,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, 62); + messageDesc(file_compass_v1_compass, 65); /** * The listing metadata a stable name carries, taken from its primary candidate @@ -1842,7 +1900,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, 63); + messageDesc(file_compass_v1_compass, 66); /** * One stable name's registry entry: a human display name, the ordered candidate @@ -1872,7 +1930,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, 64); + messageDesc(file_compass_v1_compass, 67); /** * The fleet model registry payload: the stable-name → entry map. The map key is @@ -1892,7 +1950,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, 65); + messageDesc(file_compass_v1_compass, 68); /** * PutModelRegistry: declare the fleet model registry. The caller's identity is @@ -1923,7 +1981,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, 66); + messageDesc(file_compass_v1_compass, 69); /** * @generated from message compass.v1.PutModelRegistryResponse @@ -1942,7 +2000,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, 67); + messageDesc(file_compass_v1_compass, 70); /** * @generated from message compass.v1.GetModelRegistryRequest @@ -1955,7 +2013,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, 68); + messageDesc(file_compass_v1_compass, 71); /** * GetModelRegistry: the current registry version and payload. An unconfigured @@ -1980,7 +2038,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, 69); + messageDesc(file_compass_v1_compass, 72); /** * @generated from message compass.v1.DeleteModelRegistryRequest @@ -1993,7 +2051,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, 70); + messageDesc(file_compass_v1_compass, 73); /** * @generated from message compass.v1.DeleteModelRegistryResponse @@ -2006,7 +2064,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, 71); + messageDesc(file_compass_v1_compass, 74); /** * The Compass agent attribution parsed from the owner header at ingestion — a @@ -2036,7 +2094,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, 72); + messageDesc(file_compass_v1_compass, 75); /** * @generated from message compass.v1.ForgeRef @@ -2060,7 +2118,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, 73); + messageDesc(file_compass_v1_compass, 76); /** * The board unit: a Compass Issue — the forge issue's fields PLUS the Compass @@ -2218,7 +2276,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, 74); + messageDesc(file_compass_v1_compass, 77); /** * A Compass pull request: the forge PR's fields plus the Compass agent @@ -2325,7 +2383,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, 75); + messageDesc(file_compass_v1_compass, 78); /** * The rolled-up CI + status-check state on a PR head — Compass-owned, populated @@ -2357,7 +2415,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, 76); + messageDesc(file_compass_v1_compass, 79); /** * @generated from message compass.v1.Check @@ -2391,7 +2449,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, 77); + messageDesc(file_compass_v1_compass, 80); /** * A PR diffstat (files/additions/deletions), carried on PullRequest — a @@ -2421,7 +2479,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, 78); + messageDesc(file_compass_v1_compass, 81); /** * The linked tracker issue — the projection target (DL-032); the @@ -2462,7 +2520,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, 79); + messageDesc(file_compass_v1_compass, 82); /** * The full review state the right-sidebar PR pane shows — every submitted review @@ -2509,7 +2567,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, 80); + messageDesc(file_compass_v1_compass, 83); /** * @generated from message compass.v1.ReviewThread @@ -2538,7 +2596,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, 81); + messageDesc(file_compass_v1_compass, 84); /** * @generated from message compass.v1.Comment @@ -2565,7 +2623,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, 82); + messageDesc(file_compass_v1_compass, 85); /** * How a resolved secret is delivered into the agent container. Mirrors @@ -3342,6 +3400,22 @@ export const SecretsService: GenService<{ 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. + * 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 + * routinely unset and the two states must be distinguishable. + * + * @generated from rpc compass.v1.SecretsService.ListServerSecrets + */ + listServerSecrets: { + methodKind: "unary"; + input: typeof ListServerSecretsRequestSchema; + output: typeof ListServerSecretsResponseSchema; + }, }> = /*@__PURE__*/ serviceDesc(file_compass_v1_compass, 1); diff --git a/proto/compass/v1/compass.proto b/proto/compass/v1/compass.proto index 53235516..d1727881 100644 --- a/proto/compass/v1/compass.proto +++ b/proto/compass/v1/compass.proto @@ -219,6 +219,14 @@ service SecretsService { // 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. + // 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 + // routinely unset and the two states must be distinguishable. + rpc ListServerSecrets(ListServerSecretsRequest) returns (ListServerSecretsResponse); } message SetSecretRequest { @@ -261,6 +269,20 @@ message DeleteServerSecretRequest { } message DeleteServerSecretResponse {} +message ListServerSecretsRequest {} +message ListServerSecretsResponse { + repeated ServerSecretStatus server_secrets = 1; +} +// A declared server secret's status — the name plus set/unset ONLY, and NEVER +// the value. A server secret is deployment-owned and never container-delivered, +// so there is no delivery/kind routing to carry either. `name` is the STORED +// name, carrying its reserved server-secret prefix; stripping the prefix for +// display is the client's job, so the wire form stays unambiguous. +message ServerSecretStatus { + string name = 1; + bool is_set = 2; +} + message GetServerInfoRequest {} message GetServerInfoResponse {