diff --git a/.github/workflows/branch-checks.yml b/.github/workflows/branch-checks.yml index fccdfd1bb6..88d34fb692 100644 --- a/.github/workflows/branch-checks.yml +++ b/.github/workflows/branch-checks.yml @@ -200,12 +200,18 @@ jobs: steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + - name: Mark workspace as safe for git + run: git config --global --add safe.directory "$GITHUB_WORKSPACE" + - name: Install tools run: mise install --locked - name: Install dependencies run: uv sync --frozen + - name: Proto stubs freshness + run: mise run python:proto:check + - name: Format run: mise run python:format:check diff --git a/.gitignore b/.gitignore index 40307c7a1d..d6f6ab7fc0 100644 --- a/.gitignore +++ b/.gitignore @@ -96,9 +96,6 @@ dmypy.json # Cython debug symbols cython_debug/ -# Generated Python protobuf stubs (keep package marker) -python/openshell/_proto/* -!python/openshell/_proto/__init__.py # ============================================================================= # IDE / Editor diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 22592c435c..bbb5013d8d 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -408,6 +408,21 @@ These are the primary `mise` tasks for day-to-day development: | `mise run helm:docs` | Regenerate the Helm chart README | | `mise run clean` | Clean build artifacts | +### Protobuf Stubs + +The Python SDK depends on generated protobuf/gRPC stubs committed under +`python/openshell/_proto/`. After changing any `.proto` file in `proto/`, +regenerate the stubs and commit the result: + +```shell +mise run python:proto +git add python/openshell/_proto/ +``` + +The generation output is deterministic across Python versions because +`grpcio-tools` is pinned via `uv.lock`. CI runs `mise run python:proto:check` +to reject PRs with stale stubs. The local `mise run pre-commit` also catches +this. ### Bazel targets (experimental) > [!IMPORTANT] diff --git a/architecture/build.md b/architecture/build.md index 47fb4a668d..99db78718f 100644 --- a/architecture/build.md +++ b/architecture/build.md @@ -172,15 +172,16 @@ for explicit publication. ## Python Wheel Packaging -The generated protobuf/gRPC stubs under `python/openshell/_proto/` are gitignored -build outputs of `mise run python:proto`. The task uses `uv run --frozen` to -synchronize the current worktree's `.venv` from `uv.lock` before generation. -maturin honors `.gitignore` when collecting `python-source` files, so native -builds (Linux CI, local `pip install .`) would drop them and ship an unimportable -wheel. `pyproject.toml` -pins them back in with `[tool.maturin].include` globs. The release workflows -install each Linux wheel in a clean image and import `openshell.sandbox` as a -smoke check. +The generated protobuf/gRPC stubs under `python/openshell/_proto/` are committed +to the repository so that standard PEP 517 build frontends (pip, build, fromager) +can produce working wheels from the source tarball without replicating the mise +task graph. After modifying any `.proto` file under `proto/`, regenerate the stubs +with `mise run python:proto` and commit the result. The task uses +`uv run --frozen` to pin `grpcio-tools` via `uv.lock`, so the output is +deterministic regardless of the contributor's Python version. CI enforces +freshness: `mise run python:proto:check` regenerates the stubs and fails if the +working tree differs. The release workflows install each Linux wheel in a clean +image and import `openshell.sandbox` as a smoke check. ## CI and E2E diff --git a/pyproject.toml b/pyproject.toml index fb8aac17a2..6903c87b7d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -71,13 +71,6 @@ bindings = "bin" manifest-path = "crates/openshell-cli/Cargo.toml" python-source = "python" module-name = "openshell" -# _proto/ stubs are gitignored; force them into the wheel so git-aware -# maturin builds don't drop them (package-relative paths). -include = [ - "openshell/_proto/*_pb2.py", - "openshell/_proto/*_pb2_grpc.py", - "openshell/_proto/*.pyi", -] [tool.ruff] target-version = "py311" diff --git a/python/openshell/_proto/datamodel_pb2.py b/python/openshell/_proto/datamodel_pb2.py new file mode 100644 index 0000000000..05c044defa --- /dev/null +++ b/python/openshell/_proto/datamodel_pb2.py @@ -0,0 +1,67 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: datamodel.proto +# Protobuf Python Version: 6.31.1 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 6, + 31, + 1, + '', + 'datamodel.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from . import options_pb2 as options__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0f\x64\x61tamodel.proto\x12\x16openshell.datamodel.v1\x1a\roptions.proto\"\xf6\x02\n\nObjectMeta\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x15\n\rcreated_at_ms\x18\x03 \x01(\x03\x12>\n\x06labels\x18\x04 \x03(\x0b\x32..openshell.datamodel.v1.ObjectMeta.LabelsEntry\x12\x18\n\x10resource_version\x18\x05 \x01(\x04\x12H\n\x0b\x61nnotations\x18\x06 \x03(\x0b\x32\x33.openshell.datamodel.v1.ObjectMeta.AnnotationsEntry\x12\x11\n\tworkspace\x18\x07 \x01(\t\x12\x1d\n\x15\x64\x65letion_timestamp_ms\x18\x08 \x01(\x03\x1a-\n\x0bLabelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a\x32\n\x10\x41nnotationsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"H\n\x0fWorkspaceStatus\x12\x35\n\x05phase\x18\x01 \x01(\x0e\x32&.openshell.datamodel.v1.WorkspacePhase\"z\n\tWorkspace\x12\x34\n\x08metadata\x18\x01 \x01(\x0b\x32\".openshell.datamodel.v1.ObjectMeta\x12\x37\n\x06status\x18\x02 \x01(\x0b\x32\'.openshell.datamodel.v1.WorkspaceStatus\"\xf5\x03\n\x08Provider\x12\x34\n\x08metadata\x18\x01 \x01(\x0b\x32\".openshell.datamodel.v1.ObjectMeta\x12\x0c\n\x04type\x18\x02 \x01(\t\x12L\n\x0b\x63redentials\x18\x03 \x03(\x0b\x32\x31.openshell.datamodel.v1.Provider.CredentialsEntryB\x04\x88\xb5\x18\x01\x12<\n\x06\x63onfig\x18\x04 \x03(\x0b\x32,.openshell.datamodel.v1.Provider.ConfigEntry\x12]\n\x18\x63redential_expires_at_ms\x18\x05 \x03(\x0b\x32;.openshell.datamodel.v1.Provider.CredentialExpiresAtMsEntry\x12\x19\n\x11profile_workspace\x18\x06 \x01(\t\x1a\x32\n\x10\x43redentialsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a-\n\x0b\x43onfigEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a<\n\x1a\x43redentialExpiresAtMsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x03:\x02\x38\x01*n\n\x0eWorkspacePhase\x12\x1f\n\x1bWORKSPACE_PHASE_UNSPECIFIED\x10\x00\x12\x1a\n\x16WORKSPACE_PHASE_ACTIVE\x10\x01\x12\x1f\n\x1bWORKSPACE_PHASE_TERMINATING\x10\x02\x62\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'datamodel_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + DESCRIPTOR._loaded_options = None + _globals['_OBJECTMETA_LABELSENTRY']._loaded_options = None + _globals['_OBJECTMETA_LABELSENTRY']._serialized_options = b'8\001' + _globals['_OBJECTMETA_ANNOTATIONSENTRY']._loaded_options = None + _globals['_OBJECTMETA_ANNOTATIONSENTRY']._serialized_options = b'8\001' + _globals['_PROVIDER_CREDENTIALSENTRY']._loaded_options = None + _globals['_PROVIDER_CREDENTIALSENTRY']._serialized_options = b'8\001' + _globals['_PROVIDER_CONFIGENTRY']._loaded_options = None + _globals['_PROVIDER_CONFIGENTRY']._serialized_options = b'8\001' + _globals['_PROVIDER_CREDENTIALEXPIRESATMSENTRY']._loaded_options = None + _globals['_PROVIDER_CREDENTIALEXPIRESATMSENTRY']._serialized_options = b'8\001' + _globals['_PROVIDER'].fields_by_name['credentials']._loaded_options = None + _globals['_PROVIDER'].fields_by_name['credentials']._serialized_options = b'\210\265\030\001' + _globals['_WORKSPACEPHASE']._serialized_start=1137 + _globals['_WORKSPACEPHASE']._serialized_end=1247 + _globals['_OBJECTMETA']._serialized_start=59 + _globals['_OBJECTMETA']._serialized_end=433 + _globals['_OBJECTMETA_LABELSENTRY']._serialized_start=336 + _globals['_OBJECTMETA_LABELSENTRY']._serialized_end=381 + _globals['_OBJECTMETA_ANNOTATIONSENTRY']._serialized_start=383 + _globals['_OBJECTMETA_ANNOTATIONSENTRY']._serialized_end=433 + _globals['_WORKSPACESTATUS']._serialized_start=435 + _globals['_WORKSPACESTATUS']._serialized_end=507 + _globals['_WORKSPACE']._serialized_start=509 + _globals['_WORKSPACE']._serialized_end=631 + _globals['_PROVIDER']._serialized_start=634 + _globals['_PROVIDER']._serialized_end=1135 + _globals['_PROVIDER_CREDENTIALSENTRY']._serialized_start=976 + _globals['_PROVIDER_CREDENTIALSENTRY']._serialized_end=1026 + _globals['_PROVIDER_CONFIGENTRY']._serialized_start=1028 + _globals['_PROVIDER_CONFIGENTRY']._serialized_end=1073 + _globals['_PROVIDER_CREDENTIALEXPIRESATMSENTRY']._serialized_start=1075 + _globals['_PROVIDER_CREDENTIALEXPIRESATMSENTRY']._serialized_end=1135 +# @@protoc_insertion_point(module_scope) diff --git a/python/openshell/_proto/datamodel_pb2.pyi b/python/openshell/_proto/datamodel_pb2.pyi new file mode 100644 index 0000000000..06ec5ee7e7 --- /dev/null +++ b/python/openshell/_proto/datamodel_pb2.pyi @@ -0,0 +1,103 @@ +import options_pb2 as _options_pb2 +from google.protobuf.internal import containers as _containers +from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from collections.abc import Mapping as _Mapping +from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union + +DESCRIPTOR: _descriptor.FileDescriptor + +class WorkspacePhase(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + WORKSPACE_PHASE_UNSPECIFIED: _ClassVar[WorkspacePhase] + WORKSPACE_PHASE_ACTIVE: _ClassVar[WorkspacePhase] + WORKSPACE_PHASE_TERMINATING: _ClassVar[WorkspacePhase] +WORKSPACE_PHASE_UNSPECIFIED: WorkspacePhase +WORKSPACE_PHASE_ACTIVE: WorkspacePhase +WORKSPACE_PHASE_TERMINATING: WorkspacePhase + +class ObjectMeta(_message.Message): + __slots__ = ("id", "name", "created_at_ms", "labels", "resource_version", "annotations", "workspace", "deletion_timestamp_ms") + class LabelsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: str + def __init__(self, key: _Optional[str] = ..., value: _Optional[str] = ...) -> None: ... + class AnnotationsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: str + def __init__(self, key: _Optional[str] = ..., value: _Optional[str] = ...) -> None: ... + ID_FIELD_NUMBER: _ClassVar[int] + NAME_FIELD_NUMBER: _ClassVar[int] + CREATED_AT_MS_FIELD_NUMBER: _ClassVar[int] + LABELS_FIELD_NUMBER: _ClassVar[int] + RESOURCE_VERSION_FIELD_NUMBER: _ClassVar[int] + ANNOTATIONS_FIELD_NUMBER: _ClassVar[int] + WORKSPACE_FIELD_NUMBER: _ClassVar[int] + DELETION_TIMESTAMP_MS_FIELD_NUMBER: _ClassVar[int] + id: str + name: str + created_at_ms: int + labels: _containers.ScalarMap[str, str] + resource_version: int + annotations: _containers.ScalarMap[str, str] + workspace: str + deletion_timestamp_ms: int + def __init__(self, id: _Optional[str] = ..., name: _Optional[str] = ..., created_at_ms: _Optional[int] = ..., labels: _Optional[_Mapping[str, str]] = ..., resource_version: _Optional[int] = ..., annotations: _Optional[_Mapping[str, str]] = ..., workspace: _Optional[str] = ..., deletion_timestamp_ms: _Optional[int] = ...) -> None: ... + +class WorkspaceStatus(_message.Message): + __slots__ = ("phase",) + PHASE_FIELD_NUMBER: _ClassVar[int] + phase: WorkspacePhase + def __init__(self, phase: _Optional[_Union[WorkspacePhase, str]] = ...) -> None: ... + +class Workspace(_message.Message): + __slots__ = ("metadata", "status") + METADATA_FIELD_NUMBER: _ClassVar[int] + STATUS_FIELD_NUMBER: _ClassVar[int] + metadata: ObjectMeta + status: WorkspaceStatus + def __init__(self, metadata: _Optional[_Union[ObjectMeta, _Mapping]] = ..., status: _Optional[_Union[WorkspaceStatus, _Mapping]] = ...) -> None: ... + +class Provider(_message.Message): + __slots__ = ("metadata", "type", "credentials", "config", "credential_expires_at_ms", "profile_workspace") + class CredentialsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: str + def __init__(self, key: _Optional[str] = ..., value: _Optional[str] = ...) -> None: ... + class ConfigEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: str + def __init__(self, key: _Optional[str] = ..., value: _Optional[str] = ...) -> None: ... + class CredentialExpiresAtMsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: int + def __init__(self, key: _Optional[str] = ..., value: _Optional[int] = ...) -> None: ... + METADATA_FIELD_NUMBER: _ClassVar[int] + TYPE_FIELD_NUMBER: _ClassVar[int] + CREDENTIALS_FIELD_NUMBER: _ClassVar[int] + CONFIG_FIELD_NUMBER: _ClassVar[int] + CREDENTIAL_EXPIRES_AT_MS_FIELD_NUMBER: _ClassVar[int] + PROFILE_WORKSPACE_FIELD_NUMBER: _ClassVar[int] + metadata: ObjectMeta + type: str + credentials: _containers.ScalarMap[str, str] + config: _containers.ScalarMap[str, str] + credential_expires_at_ms: _containers.ScalarMap[str, int] + profile_workspace: str + def __init__(self, metadata: _Optional[_Union[ObjectMeta, _Mapping]] = ..., type: _Optional[str] = ..., credentials: _Optional[_Mapping[str, str]] = ..., config: _Optional[_Mapping[str, str]] = ..., credential_expires_at_ms: _Optional[_Mapping[str, int]] = ..., profile_workspace: _Optional[str] = ...) -> None: ... diff --git a/python/openshell/_proto/datamodel_pb2_grpc.py b/python/openshell/_proto/datamodel_pb2_grpc.py new file mode 100644 index 0000000000..5d6bffc590 --- /dev/null +++ b/python/openshell/_proto/datamodel_pb2_grpc.py @@ -0,0 +1,24 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" +import grpc +import warnings + + +GRPC_GENERATED_VERSION = '1.78.0' +GRPC_VERSION = grpc.__version__ +_version_not_supported = False + +try: + from grpc._utilities import first_version_is_lower + _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION) +except ImportError: + _version_not_supported = True + +if _version_not_supported: + raise RuntimeError( + f'The grpc package installed is at version {GRPC_VERSION},' + + ' but the generated code in datamodel_pb2_grpc.py depends on' + + f' grpcio>={GRPC_GENERATED_VERSION}.' + + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}' + + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.' + ) diff --git a/python/openshell/_proto/inference_pb2.py b/python/openshell/_proto/inference_pb2.py new file mode 100644 index 0000000000..9a48116e88 --- /dev/null +++ b/python/openshell/_proto/inference_pb2.py @@ -0,0 +1,72 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: inference.proto +# Protobuf Python Version: 6.31.1 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 6, + 31, + 1, + '', + 'inference.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from . import datamodel_pb2 as datamodel__pb2 +from . import options_pb2 as options__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0finference.proto\x12\x16openshell.inference.v1\x1a\x0f\x64\x61tamodel.proto\x1a\roptions.proto\"U\n\x14InferenceRouteConfig\x12\x15\n\rprovider_name\x18\x01 \x01(\t\x12\x10\n\x08model_id\x18\x02 \x01(\t\x12\x14\n\x0ctimeout_secs\x18\x03 \x01(\x04\"\x95\x01\n\x0eInferenceRoute\x12\x34\n\x08metadata\x18\x01 \x01(\x0b\x32\".openshell.datamodel.v1.ObjectMeta\x12<\n\x06\x63onfig\x18\x02 \x01(\x0b\x32,.openshell.inference.v1.InferenceRouteConfig\x12\x0f\n\x07version\x18\x03 \x01(\x04\"\xa3\x01\n\x18SetInferenceRouteRequest\x12\x15\n\rprovider_name\x18\x01 \x01(\t\x12\x10\n\x08model_id\x18\x02 \x01(\t\x12\x12\n\nroute_name\x18\x03 \x01(\t\x12\x0e\n\x06verify\x18\x04 \x01(\x08\x12\x11\n\tno_verify\x18\x05 \x01(\x08\x12\x14\n\x0ctimeout_secs\x18\x06 \x01(\x04\x12\x11\n\tworkspace\x18\x07 \x01(\t\"2\n\x11ValidatedEndpoint\x12\x0b\n\x03url\x18\x01 \x01(\t\x12\x10\n\x08protocol\x18\x02 \x01(\t\"\xf8\x01\n\x19SetInferenceRouteResponse\x12\x15\n\rprovider_name\x18\x01 \x01(\t\x12\x10\n\x08model_id\x18\x02 \x01(\t\x12\x0f\n\x07version\x18\x03 \x01(\x04\x12\x12\n\nroute_name\x18\x04 \x01(\t\x12\x1c\n\x14validation_performed\x18\x05 \x01(\x08\x12\x46\n\x13validated_endpoints\x18\x06 \x03(\x0b\x32).openshell.inference.v1.ValidatedEndpoint\x12\x14\n\x0ctimeout_secs\x18\x07 \x01(\x04\x12\x11\n\tworkspace\x18\x08 \x01(\t\"A\n\x18GetInferenceRouteRequest\x12\x12\n\nroute_name\x18\x01 \x01(\t\x12\x11\n\tworkspace\x18\x02 \x01(\t\"\x92\x01\n\x19GetInferenceRouteResponse\x12\x15\n\rprovider_name\x18\x01 \x01(\t\x12\x10\n\x08model_id\x18\x02 \x01(\t\x12\x0f\n\x07version\x18\x03 \x01(\x04\x12\x12\n\nroute_name\x18\x04 \x01(\t\x12\x14\n\x0ctimeout_secs\x18\x05 \x01(\x04\x12\x11\n\tworkspace\x18\x06 \x01(\t\"D\n\x1b\x44\x65leteInferenceRouteRequest\x12\x12\n\nroute_name\x18\x01 \x01(\t\x12\x11\n\tworkspace\x18\x02 \x01(\t\"/\n\x1c\x44\x65leteInferenceRouteResponse\x12\x0f\n\x07\x64\x65leted\x18\x01 \x01(\x08\"\x1b\n\x19GetInferenceBundleRequest\"\xed\x01\n\rResolvedRoute\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x10\n\x08\x62\x61se_url\x18\x02 \x01(\t\x12\x11\n\tprotocols\x18\x03 \x03(\t\x12\x15\n\x07\x61pi_key\x18\x04 \x01(\tB\x04\x88\xb5\x18\x01\x12\x10\n\x08model_id\x18\x05 \x01(\t\x12\x15\n\rprovider_type\x18\x06 \x01(\t\x12\x14\n\x0ctimeout_secs\x18\x07 \x01(\x04\x12\x15\n\rmodel_in_path\x18\x08 \x01(\x08\x12\"\n\x15request_path_override\x18\t \x01(\tH\x00\x88\x01\x01\x42\x18\n\x16_request_path_override\"~\n\x1aGetInferenceBundleResponse\x12\x35\n\x06routes\x18\x01 \x03(\x0b\x32%.openshell.inference.v1.ResolvedRoute\x12\x10\n\x08revision\x18\x02 \x01(\t\x12\x17\n\x0fgenerated_at_ms\x18\x03 \x01(\x03\x32\x82\x05\n\tInference\x12\x8a\x01\n\x12GetInferenceBundle\x12\x31.openshell.inference.v1.GetInferenceBundleRequest\x1a\x32.openshell.inference.v1.GetInferenceBundleResponse\"\r\x82\xb5\x18\t\n\x07sandbox\x12\x9e\x01\n\x11SetInferenceRoute\x12\x30.openshell.inference.v1.SetInferenceRouteRequest\x1a\x31.openshell.inference.v1.SetInferenceRouteResponse\"$\x82\xb5\x18 \n\x06\x62\x65\x61rer\x12\x05\x61\x64min\"\x0finference:write\x12\x9c\x01\n\x11GetInferenceRoute\x12\x30.openshell.inference.v1.GetInferenceRouteRequest\x1a\x31.openshell.inference.v1.GetInferenceRouteResponse\"\"\x82\xb5\x18\x1e\n\x06\x62\x65\x61rer\x12\x04user\"\x0einference:read\x12\xa7\x01\n\x14\x44\x65leteInferenceRoute\x12\x33.openshell.inference.v1.DeleteInferenceRouteRequest\x1a\x34.openshell.inference.v1.DeleteInferenceRouteResponse\"$\x82\xb5\x18 \n\x06\x62\x65\x61rer\x12\x05\x61\x64min\"\x0finference:writeb\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'inference_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + DESCRIPTOR._loaded_options = None + _globals['_RESOLVEDROUTE'].fields_by_name['api_key']._loaded_options = None + _globals['_RESOLVEDROUTE'].fields_by_name['api_key']._serialized_options = b'\210\265\030\001' + _globals['_INFERENCE'].methods_by_name['GetInferenceBundle']._loaded_options = None + _globals['_INFERENCE'].methods_by_name['GetInferenceBundle']._serialized_options = b'\202\265\030\t\n\007sandbox' + _globals['_INFERENCE'].methods_by_name['SetInferenceRoute']._loaded_options = None + _globals['_INFERENCE'].methods_by_name['SetInferenceRoute']._serialized_options = b'\202\265\030 \n\006bearer\022\005admin\"\017inference:write' + _globals['_INFERENCE'].methods_by_name['GetInferenceRoute']._loaded_options = None + _globals['_INFERENCE'].methods_by_name['GetInferenceRoute']._serialized_options = b'\202\265\030\036\n\006bearer\022\004user\"\016inference:read' + _globals['_INFERENCE'].methods_by_name['DeleteInferenceRoute']._loaded_options = None + _globals['_INFERENCE'].methods_by_name['DeleteInferenceRoute']._serialized_options = b'\202\265\030 \n\006bearer\022\005admin\"\017inference:write' + _globals['_INFERENCEROUTECONFIG']._serialized_start=75 + _globals['_INFERENCEROUTECONFIG']._serialized_end=160 + _globals['_INFERENCEROUTE']._serialized_start=163 + _globals['_INFERENCEROUTE']._serialized_end=312 + _globals['_SETINFERENCEROUTEREQUEST']._serialized_start=315 + _globals['_SETINFERENCEROUTEREQUEST']._serialized_end=478 + _globals['_VALIDATEDENDPOINT']._serialized_start=480 + _globals['_VALIDATEDENDPOINT']._serialized_end=530 + _globals['_SETINFERENCEROUTERESPONSE']._serialized_start=533 + _globals['_SETINFERENCEROUTERESPONSE']._serialized_end=781 + _globals['_GETINFERENCEROUTEREQUEST']._serialized_start=783 + _globals['_GETINFERENCEROUTEREQUEST']._serialized_end=848 + _globals['_GETINFERENCEROUTERESPONSE']._serialized_start=851 + _globals['_GETINFERENCEROUTERESPONSE']._serialized_end=997 + _globals['_DELETEINFERENCEROUTEREQUEST']._serialized_start=999 + _globals['_DELETEINFERENCEROUTEREQUEST']._serialized_end=1067 + _globals['_DELETEINFERENCEROUTERESPONSE']._serialized_start=1069 + _globals['_DELETEINFERENCEROUTERESPONSE']._serialized_end=1116 + _globals['_GETINFERENCEBUNDLEREQUEST']._serialized_start=1118 + _globals['_GETINFERENCEBUNDLEREQUEST']._serialized_end=1145 + _globals['_RESOLVEDROUTE']._serialized_start=1148 + _globals['_RESOLVEDROUTE']._serialized_end=1385 + _globals['_GETINFERENCEBUNDLERESPONSE']._serialized_start=1387 + _globals['_GETINFERENCEBUNDLERESPONSE']._serialized_end=1513 + _globals['_INFERENCE']._serialized_start=1516 + _globals['_INFERENCE']._serialized_end=2158 +# @@protoc_insertion_point(module_scope) diff --git a/python/openshell/_proto/inference_pb2.pyi b/python/openshell/_proto/inference_pb2.pyi new file mode 100644 index 0000000000..2188cc3287 --- /dev/null +++ b/python/openshell/_proto/inference_pb2.pyi @@ -0,0 +1,149 @@ +import datamodel_pb2 as _datamodel_pb2 +import options_pb2 as _options_pb2 +from google.protobuf.internal import containers as _containers +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from collections.abc import Iterable as _Iterable, Mapping as _Mapping +from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union + +DESCRIPTOR: _descriptor.FileDescriptor + +class InferenceRouteConfig(_message.Message): + __slots__ = ("provider_name", "model_id", "timeout_secs") + PROVIDER_NAME_FIELD_NUMBER: _ClassVar[int] + MODEL_ID_FIELD_NUMBER: _ClassVar[int] + TIMEOUT_SECS_FIELD_NUMBER: _ClassVar[int] + provider_name: str + model_id: str + timeout_secs: int + def __init__(self, provider_name: _Optional[str] = ..., model_id: _Optional[str] = ..., timeout_secs: _Optional[int] = ...) -> None: ... + +class InferenceRoute(_message.Message): + __slots__ = ("metadata", "config", "version") + METADATA_FIELD_NUMBER: _ClassVar[int] + CONFIG_FIELD_NUMBER: _ClassVar[int] + VERSION_FIELD_NUMBER: _ClassVar[int] + metadata: _datamodel_pb2.ObjectMeta + config: InferenceRouteConfig + version: int + def __init__(self, metadata: _Optional[_Union[_datamodel_pb2.ObjectMeta, _Mapping]] = ..., config: _Optional[_Union[InferenceRouteConfig, _Mapping]] = ..., version: _Optional[int] = ...) -> None: ... + +class SetInferenceRouteRequest(_message.Message): + __slots__ = ("provider_name", "model_id", "route_name", "verify", "no_verify", "timeout_secs", "workspace") + PROVIDER_NAME_FIELD_NUMBER: _ClassVar[int] + MODEL_ID_FIELD_NUMBER: _ClassVar[int] + ROUTE_NAME_FIELD_NUMBER: _ClassVar[int] + VERIFY_FIELD_NUMBER: _ClassVar[int] + NO_VERIFY_FIELD_NUMBER: _ClassVar[int] + TIMEOUT_SECS_FIELD_NUMBER: _ClassVar[int] + WORKSPACE_FIELD_NUMBER: _ClassVar[int] + provider_name: str + model_id: str + route_name: str + verify: bool + no_verify: bool + timeout_secs: int + workspace: str + def __init__(self, provider_name: _Optional[str] = ..., model_id: _Optional[str] = ..., route_name: _Optional[str] = ..., verify: bool = ..., no_verify: bool = ..., timeout_secs: _Optional[int] = ..., workspace: _Optional[str] = ...) -> None: ... + +class ValidatedEndpoint(_message.Message): + __slots__ = ("url", "protocol") + URL_FIELD_NUMBER: _ClassVar[int] + PROTOCOL_FIELD_NUMBER: _ClassVar[int] + url: str + protocol: str + def __init__(self, url: _Optional[str] = ..., protocol: _Optional[str] = ...) -> None: ... + +class SetInferenceRouteResponse(_message.Message): + __slots__ = ("provider_name", "model_id", "version", "route_name", "validation_performed", "validated_endpoints", "timeout_secs", "workspace") + PROVIDER_NAME_FIELD_NUMBER: _ClassVar[int] + MODEL_ID_FIELD_NUMBER: _ClassVar[int] + VERSION_FIELD_NUMBER: _ClassVar[int] + ROUTE_NAME_FIELD_NUMBER: _ClassVar[int] + VALIDATION_PERFORMED_FIELD_NUMBER: _ClassVar[int] + VALIDATED_ENDPOINTS_FIELD_NUMBER: _ClassVar[int] + TIMEOUT_SECS_FIELD_NUMBER: _ClassVar[int] + WORKSPACE_FIELD_NUMBER: _ClassVar[int] + provider_name: str + model_id: str + version: int + route_name: str + validation_performed: bool + validated_endpoints: _containers.RepeatedCompositeFieldContainer[ValidatedEndpoint] + timeout_secs: int + workspace: str + def __init__(self, provider_name: _Optional[str] = ..., model_id: _Optional[str] = ..., version: _Optional[int] = ..., route_name: _Optional[str] = ..., validation_performed: bool = ..., validated_endpoints: _Optional[_Iterable[_Union[ValidatedEndpoint, _Mapping]]] = ..., timeout_secs: _Optional[int] = ..., workspace: _Optional[str] = ...) -> None: ... + +class GetInferenceRouteRequest(_message.Message): + __slots__ = ("route_name", "workspace") + ROUTE_NAME_FIELD_NUMBER: _ClassVar[int] + WORKSPACE_FIELD_NUMBER: _ClassVar[int] + route_name: str + workspace: str + def __init__(self, route_name: _Optional[str] = ..., workspace: _Optional[str] = ...) -> None: ... + +class GetInferenceRouteResponse(_message.Message): + __slots__ = ("provider_name", "model_id", "version", "route_name", "timeout_secs", "workspace") + PROVIDER_NAME_FIELD_NUMBER: _ClassVar[int] + MODEL_ID_FIELD_NUMBER: _ClassVar[int] + VERSION_FIELD_NUMBER: _ClassVar[int] + ROUTE_NAME_FIELD_NUMBER: _ClassVar[int] + TIMEOUT_SECS_FIELD_NUMBER: _ClassVar[int] + WORKSPACE_FIELD_NUMBER: _ClassVar[int] + provider_name: str + model_id: str + version: int + route_name: str + timeout_secs: int + workspace: str + def __init__(self, provider_name: _Optional[str] = ..., model_id: _Optional[str] = ..., version: _Optional[int] = ..., route_name: _Optional[str] = ..., timeout_secs: _Optional[int] = ..., workspace: _Optional[str] = ...) -> None: ... + +class DeleteInferenceRouteRequest(_message.Message): + __slots__ = ("route_name", "workspace") + ROUTE_NAME_FIELD_NUMBER: _ClassVar[int] + WORKSPACE_FIELD_NUMBER: _ClassVar[int] + route_name: str + workspace: str + def __init__(self, route_name: _Optional[str] = ..., workspace: _Optional[str] = ...) -> None: ... + +class DeleteInferenceRouteResponse(_message.Message): + __slots__ = ("deleted",) + DELETED_FIELD_NUMBER: _ClassVar[int] + deleted: bool + def __init__(self, deleted: bool = ...) -> None: ... + +class GetInferenceBundleRequest(_message.Message): + __slots__ = () + def __init__(self) -> None: ... + +class ResolvedRoute(_message.Message): + __slots__ = ("name", "base_url", "protocols", "api_key", "model_id", "provider_type", "timeout_secs", "model_in_path", "request_path_override") + NAME_FIELD_NUMBER: _ClassVar[int] + BASE_URL_FIELD_NUMBER: _ClassVar[int] + PROTOCOLS_FIELD_NUMBER: _ClassVar[int] + API_KEY_FIELD_NUMBER: _ClassVar[int] + MODEL_ID_FIELD_NUMBER: _ClassVar[int] + PROVIDER_TYPE_FIELD_NUMBER: _ClassVar[int] + TIMEOUT_SECS_FIELD_NUMBER: _ClassVar[int] + MODEL_IN_PATH_FIELD_NUMBER: _ClassVar[int] + REQUEST_PATH_OVERRIDE_FIELD_NUMBER: _ClassVar[int] + name: str + base_url: str + protocols: _containers.RepeatedScalarFieldContainer[str] + api_key: str + model_id: str + provider_type: str + timeout_secs: int + model_in_path: bool + request_path_override: str + def __init__(self, name: _Optional[str] = ..., base_url: _Optional[str] = ..., protocols: _Optional[_Iterable[str]] = ..., api_key: _Optional[str] = ..., model_id: _Optional[str] = ..., provider_type: _Optional[str] = ..., timeout_secs: _Optional[int] = ..., model_in_path: bool = ..., request_path_override: _Optional[str] = ...) -> None: ... + +class GetInferenceBundleResponse(_message.Message): + __slots__ = ("routes", "revision", "generated_at_ms") + ROUTES_FIELD_NUMBER: _ClassVar[int] + REVISION_FIELD_NUMBER: _ClassVar[int] + GENERATED_AT_MS_FIELD_NUMBER: _ClassVar[int] + routes: _containers.RepeatedCompositeFieldContainer[ResolvedRoute] + revision: str + generated_at_ms: int + def __init__(self, routes: _Optional[_Iterable[_Union[ResolvedRoute, _Mapping]]] = ..., revision: _Optional[str] = ..., generated_at_ms: _Optional[int] = ...) -> None: ... diff --git a/python/openshell/_proto/inference_pb2_grpc.py b/python/openshell/_proto/inference_pb2_grpc.py new file mode 100644 index 0000000000..15d5f2334b --- /dev/null +++ b/python/openshell/_proto/inference_pb2_grpc.py @@ -0,0 +1,236 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" +import grpc +import warnings + +from . import inference_pb2 as inference__pb2 + +GRPC_GENERATED_VERSION = '1.78.0' +GRPC_VERSION = grpc.__version__ +_version_not_supported = False + +try: + from grpc._utilities import first_version_is_lower + _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION) +except ImportError: + _version_not_supported = True + +if _version_not_supported: + raise RuntimeError( + f'The grpc package installed is at version {GRPC_VERSION},' + + ' but the generated code in inference_pb2_grpc.py depends on' + + f' grpcio>={GRPC_GENERATED_VERSION}.' + + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}' + + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.' + ) + + +class InferenceStub(object): + """Inference service provides workspace-scoped inference route configuration and bundle delivery. + """ + + def __init__(self, channel): + """Constructor. + + Args: + channel: A grpc.Channel. + """ + self.GetInferenceBundle = channel.unary_unary( + '/openshell.inference.v1.Inference/GetInferenceBundle', + request_serializer=inference__pb2.GetInferenceBundleRequest.SerializeToString, + response_deserializer=inference__pb2.GetInferenceBundleResponse.FromString, + _registered_method=True) + self.SetInferenceRoute = channel.unary_unary( + '/openshell.inference.v1.Inference/SetInferenceRoute', + request_serializer=inference__pb2.SetInferenceRouteRequest.SerializeToString, + response_deserializer=inference__pb2.SetInferenceRouteResponse.FromString, + _registered_method=True) + self.GetInferenceRoute = channel.unary_unary( + '/openshell.inference.v1.Inference/GetInferenceRoute', + request_serializer=inference__pb2.GetInferenceRouteRequest.SerializeToString, + response_deserializer=inference__pb2.GetInferenceRouteResponse.FromString, + _registered_method=True) + self.DeleteInferenceRoute = channel.unary_unary( + '/openshell.inference.v1.Inference/DeleteInferenceRoute', + request_serializer=inference__pb2.DeleteInferenceRouteRequest.SerializeToString, + response_deserializer=inference__pb2.DeleteInferenceRouteResponse.FromString, + _registered_method=True) + + +class InferenceServicer(object): + """Inference service provides workspace-scoped inference route configuration and bundle delivery. + """ + + def GetInferenceBundle(self, request, context): + """Return the resolved inference route bundle for sandbox-local execution. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def SetInferenceRoute(self, request, context): + """Set the inference route for a workspace. + + This controls how requests sent to `inference.local` are routed + for sandboxes in the specified workspace. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def GetInferenceRoute(self, request, context): + """Get the inference route for a workspace. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def DeleteInferenceRoute(self, request, context): + """Delete an inference route from a workspace. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + +def add_InferenceServicer_to_server(servicer, server): + rpc_method_handlers = { + 'GetInferenceBundle': grpc.unary_unary_rpc_method_handler( + servicer.GetInferenceBundle, + request_deserializer=inference__pb2.GetInferenceBundleRequest.FromString, + response_serializer=inference__pb2.GetInferenceBundleResponse.SerializeToString, + ), + 'SetInferenceRoute': grpc.unary_unary_rpc_method_handler( + servicer.SetInferenceRoute, + request_deserializer=inference__pb2.SetInferenceRouteRequest.FromString, + response_serializer=inference__pb2.SetInferenceRouteResponse.SerializeToString, + ), + 'GetInferenceRoute': grpc.unary_unary_rpc_method_handler( + servicer.GetInferenceRoute, + request_deserializer=inference__pb2.GetInferenceRouteRequest.FromString, + response_serializer=inference__pb2.GetInferenceRouteResponse.SerializeToString, + ), + 'DeleteInferenceRoute': grpc.unary_unary_rpc_method_handler( + servicer.DeleteInferenceRoute, + request_deserializer=inference__pb2.DeleteInferenceRouteRequest.FromString, + response_serializer=inference__pb2.DeleteInferenceRouteResponse.SerializeToString, + ), + } + generic_handler = grpc.method_handlers_generic_handler( + 'openshell.inference.v1.Inference', rpc_method_handlers) + server.add_generic_rpc_handlers((generic_handler,)) + server.add_registered_method_handlers('openshell.inference.v1.Inference', rpc_method_handlers) + + + # This class is part of an EXPERIMENTAL API. +class Inference(object): + """Inference service provides workspace-scoped inference route configuration and bundle delivery. + """ + + @staticmethod + def GetInferenceBundle(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/openshell.inference.v1.Inference/GetInferenceBundle', + inference__pb2.GetInferenceBundleRequest.SerializeToString, + inference__pb2.GetInferenceBundleResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def SetInferenceRoute(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/openshell.inference.v1.Inference/SetInferenceRoute', + inference__pb2.SetInferenceRouteRequest.SerializeToString, + inference__pb2.SetInferenceRouteResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def GetInferenceRoute(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/openshell.inference.v1.Inference/GetInferenceRoute', + inference__pb2.GetInferenceRouteRequest.SerializeToString, + inference__pb2.GetInferenceRouteResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def DeleteInferenceRoute(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/openshell.inference.v1.Inference/DeleteInferenceRoute', + inference__pb2.DeleteInferenceRouteRequest.SerializeToString, + inference__pb2.DeleteInferenceRouteResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) diff --git a/python/openshell/_proto/openshell_pb2.py b/python/openshell/_proto/openshell_pb2.py new file mode 100644 index 0000000000..852fef19aa --- /dev/null +++ b/python/openshell/_proto/openshell_pb2.py @@ -0,0 +1,650 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: openshell.proto +# Protobuf Python Version: 6.31.1 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 6, + 31, + 1, + '', + 'openshell.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from . import datamodel_pb2 as datamodel__pb2 +from google.protobuf import struct_pb2 as google_dot_protobuf_dot_struct__pb2 +from . import options_pb2 as options__pb2 +from . import sandbox_pb2 as sandbox__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0fopenshell.proto\x12\x0copenshell.v1\x1a\x0f\x64\x61tamodel.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\roptions.proto\x1a\rsandbox.proto\"\x1a\n\x18IssueSandboxTokenRequest\"G\n\x19IssueSandboxTokenResponse\x12\x13\n\x05token\x18\x01 \x01(\tB\x04\x88\xb5\x18\x01\x12\x15\n\rexpires_at_ms\x18\x02 \x01(\x03\"\x1c\n\x1aRefreshSandboxTokenRequest\"I\n\x1bRefreshSandboxTokenResponse\x12\x13\n\x05token\x18\x01 \x01(\tB\x04\x88\xb5\x18\x01\x12\x15\n\rexpires_at_ms\x18\x02 \x01(\x03\"\x0f\n\rHealthRequest\"N\n\x0eHealthResponse\x12+\n\x06status\x18\x01 \x01(\x0e\x32\x1b.openshell.v1.ServiceStatus\x12\x0f\n\x07version\x18\x02 \x01(\t\"\x17\n\x15GetCurrentUserRequest\"y\n\x16GetCurrentUserResponse\x12\x0f\n\x07subject\x18\x01 \x01(\t\x12\x14\n\x0c\x64isplay_name\x18\x02 \x01(\t\x12\r\n\x05roles\x18\x03 \x03(\t\x12\x0e\n\x06scopes\x18\x04 \x03(\t\x12\x19\n\x11identity_provider\x18\x05 \x01(\t\"\x17\n\x15GetGatewayInfoRequest\"\x98\x01\n\x16GetGatewayInfoResponse\x12+\n\x06status\x18\x01 \x01(\x0e\x32\x1b.openshell.v1.ServiceStatus\x12\x17\n\x0fgateway_version\x18\x02 \x01(\t\x12\x38\n\x0f\x63ompute_drivers\x18\x03 \x03(\x0b\x32\x1f.openshell.v1.ComputeDriverInfo\"`\n\x11\x43omputeDriverInfo\x12\x0c\n\x04name\x18\x01 \x01(\t\x12=\n\x0c\x63\x61pabilities\x18\x02 \x01(\x0b\x32\'.openshell.v1.ComputeDriverCapabilities\"H\n\x19\x43omputeDriverCapabilities\x12\x13\n\x0b\x64river_name\x18\x01 \x01(\t\x12\x16\n\x0e\x64river_version\x18\x02 \x01(\t\"\xc0\x01\n\x07Sandbox\x12\x34\n\x08metadata\x18\x01 \x01(\x0b\x32\".openshell.datamodel.v1.ObjectMeta\x12\'\n\x04spec\x18\x02 \x01(\x0b\x32\x19.openshell.v1.SandboxSpec\x12+\n\x06status\x18\x03 \x01(\x0b\x32\x1b.openshell.v1.SandboxStatusJ\x04\x08\x04\x10\x05J\x04\x08\x05\x10\x06R\x05phaseR\x16\x63urrent_policy_version\"\x81\x03\n\x0bSandboxSpec\x12\x11\n\tlog_level\x18\x01 \x01(\t\x12?\n\x0b\x65nvironment\x18\x05 \x03(\x0b\x32*.openshell.v1.SandboxSpec.EnvironmentEntry\x12/\n\x08template\x18\x06 \x01(\x0b\x32\x1d.openshell.v1.SandboxTemplate\x12\x33\n\x06policy\x18\x07 \x01(\x0b\x32#.openshell.sandbox.v1.SandboxPolicy\x12\x11\n\tproviders\x18\x08 \x03(\t\x12\x41\n\x15resource_requirements\x18\t \x01(\x0b\x32\".openshell.v1.ResourceRequirements\x1a\x32\n\x10\x45nvironmentEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01J\x04\x08\n\x10\x0bJ\x04\x08\x0b\x10\x0cR\ngpu_deviceR\x16proposal_approval_mode\"J\n\x14ResourceRequirements\x12\x32\n\x03gpu\x18\x01 \x01(\x0b\x32%.openshell.v1.GpuResourceRequirements\"7\n\x17GpuResourceRequirements\x12\x12\n\x05\x63ount\x18\x01 \x01(\rH\x00\x88\x01\x01\x42\x08\n\x06_count\"\xda\x04\n\x0fSandboxTemplate\x12\r\n\x05image\x18\x01 \x01(\t\x12\x1a\n\x12runtime_class_name\x18\x02 \x01(\t\x12\x14\n\x0c\x61gent_socket\x18\x03 \x01(\t\x12\x39\n\x06labels\x18\x04 \x03(\x0b\x32).openshell.v1.SandboxTemplate.LabelsEntry\x12\x43\n\x0b\x61nnotations\x18\x05 \x03(\x0b\x32..openshell.v1.SandboxTemplate.AnnotationsEntry\x12\x43\n\x0b\x65nvironment\x18\x06 \x03(\x0b\x32..openshell.v1.SandboxTemplate.EnvironmentEntry\x12*\n\tresources\x18\x07 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x1c\n\x0fuser_namespaces\x18\n \x01(\x08H\x00\x88\x01\x01\x12.\n\rdriver_config\x18\x0b \x01(\x0b\x32\x17.google.protobuf.Struct\x1a-\n\x0bLabelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a\x32\n\x10\x41nnotationsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a\x32\n\x10\x45nvironmentEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x42\x12\n\x10_user_namespacesJ\x04\x08\t\x10\nR\x16volume_claim_templates\"\xdd\x01\n\rSandboxStatus\x12\x14\n\x0csandbox_name\x18\x01 \x01(\t\x12\x11\n\tagent_pod\x18\x02 \x01(\t\x12\x10\n\x08\x61gent_fd\x18\x03 \x01(\t\x12\x12\n\nsandbox_fd\x18\x04 \x01(\t\x12\x32\n\nconditions\x18\x05 \x03(\x0b\x32\x1e.openshell.v1.SandboxCondition\x12)\n\x05phase\x18\x06 \x01(\x0e\x32\x1a.openshell.v1.SandboxPhase\x12\x1e\n\x16\x63urrent_policy_version\x18\x07 \x01(\r\"o\n\x10SandboxCondition\x12\x0c\n\x04type\x18\x01 \x01(\t\x12\x0e\n\x06status\x18\x02 \x01(\t\x12\x0e\n\x06reason\x18\x03 \x01(\t\x12\x0f\n\x07message\x18\x04 \x01(\t\x12\x1c\n\x14last_transition_time\x18\x05 \x01(\t\"\xd2\x01\n\rPlatformEvent\x12\x14\n\x0ctimestamp_ms\x18\x01 \x01(\x03\x12\x0e\n\x06source\x18\x02 \x01(\t\x12\x0c\n\x04type\x18\x03 \x01(\t\x12\x0e\n\x06reason\x18\x04 \x01(\t\x12\x0f\n\x07message\x18\x05 \x01(\t\x12;\n\x08metadata\x18\x06 \x03(\x0b\x32).openshell.v1.PlatformEvent.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xcd\x02\n\x14\x43reateSandboxRequest\x12\'\n\x04spec\x18\x01 \x01(\x0b\x32\x19.openshell.v1.SandboxSpec\x12\x0c\n\x04name\x18\x02 \x01(\t\x12>\n\x06labels\x18\x03 \x03(\x0b\x32..openshell.v1.CreateSandboxRequest.LabelsEntry\x12H\n\x0b\x61nnotations\x18\x04 \x03(\x0b\x32\x33.openshell.v1.CreateSandboxRequest.AnnotationsEntry\x12\x11\n\tworkspace\x18\x05 \x01(\t\x1a-\n\x0bLabelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a\x32\n\x10\x41nnotationsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"4\n\x11GetSandboxRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x11\n\tworkspace\x18\x02 \x01(\t\"x\n\x14ListSandboxesRequest\x12\r\n\x05limit\x18\x01 \x01(\r\x12\x0e\n\x06offset\x18\x02 \x01(\r\x12\x16\n\x0elabel_selector\x18\x03 \x01(\t\x12\x11\n\tworkspace\x18\x04 \x01(\t\x12\x16\n\x0e\x61ll_workspaces\x18\x05 \x01(\x08\"F\n\x1bListSandboxProvidersRequest\x12\x14\n\x0csandbox_name\x18\x01 \x01(\t\x12\x11\n\tworkspace\x18\x02 \x01(\t\"\x81\x01\n\x1c\x41ttachSandboxProviderRequest\x12\x14\n\x0csandbox_name\x18\x01 \x01(\t\x12\x15\n\rprovider_name\x18\x02 \x01(\t\x12!\n\x19\x65xpected_resource_version\x18\x03 \x01(\x04\x12\x11\n\tworkspace\x18\x04 \x01(\t\"\x81\x01\n\x1c\x44\x65tachSandboxProviderRequest\x12\x14\n\x0csandbox_name\x18\x01 \x01(\t\x12\x15\n\rprovider_name\x18\x02 \x01(\t\x12!\n\x19\x65xpected_resource_version\x18\x03 \x01(\x04\x12\x11\n\tworkspace\x18\x04 \x01(\t\"7\n\x14\x44\x65leteSandboxRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x11\n\tworkspace\x18\x02 \x01(\t\"9\n\x0fSandboxResponse\x12&\n\x07sandbox\x18\x01 \x01(\x0b\x32\x15.openshell.v1.Sandbox\"A\n\x15ListSandboxesResponse\x12(\n\tsandboxes\x18\x01 \x03(\x0b\x32\x15.openshell.v1.Sandbox\"S\n\x1cListSandboxProvidersResponse\x12\x33\n\tproviders\x18\x01 \x03(\x0b\x32 .openshell.datamodel.v1.Provider\"Y\n\x1d\x41ttachSandboxProviderResponse\x12&\n\x07sandbox\x18\x01 \x01(\x0b\x32\x15.openshell.v1.Sandbox\x12\x10\n\x08\x61ttached\x18\x02 \x01(\x08\"Y\n\x1d\x44\x65tachSandboxProviderResponse\x12&\n\x07sandbox\x18\x01 \x01(\x0b\x32\x15.openshell.v1.Sandbox\x12\x10\n\x08\x64\x65tached\x18\x02 \x01(\x08\"(\n\x15\x44\x65leteSandboxResponse\x12\x0f\n\x07\x64\x65leted\x18\x01 \x01(\x08\"-\n\x17\x43reateSshSessionRequest\x12\x12\n\nsandbox_id\x18\x01 \x01(\t\"\xbc\x01\n\x18\x43reateSshSessionResponse\x12\x12\n\nsandbox_id\x18\x01 \x01(\t\x12\x13\n\x05token\x18\x02 \x01(\tB\x04\x88\xb5\x18\x01\x12\x14\n\x0cgateway_host\x18\x03 \x01(\t\x12\x14\n\x0cgateway_port\x18\x04 \x01(\r\x12\x16\n\x0egateway_scheme\x18\x05 \x01(\t\x12\x1c\n\x14host_key_fingerprint\x18\x07 \x01(\t\x12\x15\n\rexpires_at_ms\x18\x08 \x01(\x03\"p\n\x14\x45xposeServiceRequest\x12\x0f\n\x07sandbox\x18\x01 \x01(\t\x12\x0f\n\x07service\x18\x02 \x01(\t\x12\x13\n\x0btarget_port\x18\x03 \x01(\r\x12\x0e\n\x06\x64omain\x18\x04 \x01(\x08\x12\x11\n\tworkspace\x18\x05 \x01(\t\"H\n\x11GetServiceRequest\x12\x0f\n\x07sandbox\x18\x01 \x01(\t\x12\x0f\n\x07service\x18\x02 \x01(\t\x12\x11\n\tworkspace\x18\x03 \x01(\t\"p\n\x13ListServicesRequest\x12\x0f\n\x07sandbox\x18\x01 \x01(\t\x12\r\n\x05limit\x18\x02 \x01(\r\x12\x0e\n\x06offset\x18\x03 \x01(\r\x12\x11\n\tworkspace\x18\x04 \x01(\t\x12\x16\n\x0e\x61ll_workspaces\x18\x05 \x01(\x08\"O\n\x14ListServicesResponse\x12\x37\n\x08services\x18\x01 \x03(\x0b\x32%.openshell.v1.ServiceEndpointResponse\"K\n\x14\x44\x65leteServiceRequest\x12\x0f\n\x07sandbox\x18\x01 \x01(\t\x12\x0f\n\x07service\x18\x02 \x01(\t\x12\x11\n\tworkspace\x18\x03 \x01(\t\"(\n\x15\x44\x65leteServiceResponse\x12\x0f\n\x07\x64\x65leted\x18\x01 \x01(\x08\"\xac\x01\n\x0fServiceEndpoint\x12\x34\n\x08metadata\x18\x01 \x01(\x0b\x32\".openshell.datamodel.v1.ObjectMeta\x12\x12\n\nsandbox_id\x18\x02 \x01(\t\x12\x14\n\x0csandbox_name\x18\x03 \x01(\t\x12\x14\n\x0cservice_name\x18\x04 \x01(\t\x12\x13\n\x0btarget_port\x18\x05 \x01(\r\x12\x0e\n\x06\x64omain\x18\x06 \x01(\x08\"W\n\x17ServiceEndpointResponse\x12/\n\x08\x65ndpoint\x18\x01 \x01(\x0b\x32\x1d.openshell.v1.ServiceEndpoint\x12\x0b\n\x03url\x18\x02 \x01(\t\".\n\x17RevokeSshSessionRequest\x12\x13\n\x05token\x18\x01 \x01(\tB\x04\x88\xb5\x18\x01\"+\n\x18RevokeSshSessionResponse\x12\x0f\n\x07revoked\x18\x01 \x01(\x08\"\x97\x02\n\x12\x45xecSandboxRequest\x12\x12\n\nsandbox_id\x18\x01 \x01(\t\x12\x0f\n\x07\x63ommand\x18\x02 \x03(\t\x12\x0f\n\x07workdir\x18\x03 \x01(\t\x12\x46\n\x0b\x65nvironment\x18\x04 \x03(\x0b\x32\x31.openshell.v1.ExecSandboxRequest.EnvironmentEntry\x12\x17\n\x0ftimeout_seconds\x18\x05 \x01(\r\x12\r\n\x05stdin\x18\x06 \x01(\x0c\x12\x0b\n\x03tty\x18\x07 \x01(\x08\x12\x0c\n\x04\x63ols\x18\x08 \x01(\r\x12\x0c\n\x04rows\x18\t \x01(\r\x1a\x32\n\x10\x45nvironmentEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"!\n\x11\x45xecSandboxStdout\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\x0c\"!\n\x11\x45xecSandboxStderr\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\x0c\"$\n\x0f\x45xecSandboxExit\x12\x11\n\texit_code\x18\x01 \x01(\x05\"\xb2\x01\n\x10\x45xecSandboxEvent\x12\x31\n\x06stdout\x18\x01 \x01(\x0b\x32\x1f.openshell.v1.ExecSandboxStdoutH\x00\x12\x31\n\x06stderr\x18\x02 \x01(\x0b\x32\x1f.openshell.v1.ExecSandboxStderrH\x00\x12-\n\x04\x65xit\x18\x03 \x01(\x0b\x32\x1d.openshell.v1.ExecSandboxExitH\x00\x42\t\n\x07payload\"\xbf\x01\n\x0eTcpForwardInit\x12\x12\n\nsandbox_id\x18\x01 \x01(\t\x12\x12\n\nservice_id\x18\x04 \x01(\t\x12+\n\x03ssh\x18\x05 \x01(\x0b\x32\x1c.openshell.v1.SshRelayTargetH\x00\x12+\n\x03tcp\x18\x06 \x01(\x0b\x32\x1c.openshell.v1.TcpRelayTargetH\x00\x12!\n\x13\x61uthorization_token\x18\x07 \x01(\tB\x04\x88\xb5\x18\x01\x42\x08\n\x06target\"Z\n\x0fTcpForwardFrame\x12,\n\x04init\x18\x01 \x01(\x0b\x32\x1c.openshell.v1.TcpForwardInitH\x00\x12\x0e\n\x04\x64\x61ta\x18\x02 \x01(\x0cH\x00\x42\t\n\x07payload\"\x9a\x01\n\x10\x45xecSandboxInput\x12\x31\n\x05start\x18\x01 \x01(\x0b\x32 .openshell.v1.ExecSandboxRequestH\x00\x12\x0f\n\x05stdin\x18\x02 \x01(\x0cH\x00\x12\x37\n\x06resize\x18\x03 \x01(\x0b\x32%.openshell.v1.ExecSandboxWindowResizeH\x00\x42\t\n\x07payload\"5\n\x17\x45xecSandboxWindowResize\x12\x0c\n\x04\x63ols\x18\x01 \x01(\r\x12\x0c\n\x04rows\x18\x02 \x01(\r\"\x93\x01\n\nSshSession\x12\x34\n\x08metadata\x18\x01 \x01(\x0b\x32\".openshell.datamodel.v1.ObjectMeta\x12\x12\n\nsandbox_id\x18\x02 \x01(\t\x12\x13\n\x05token\x18\x03 \x01(\tB\x04\x88\xb5\x18\x01\x12\x15\n\rexpires_at_ms\x18\x04 \x01(\x03\x12\x0f\n\x07revoked\x18\x05 \x01(\x08\"\xec\x01\n\x13WatchSandboxRequest\x12\n\n\x02id\x18\x01 \x01(\t\x12\x15\n\rfollow_status\x18\x02 \x01(\x08\x12\x13\n\x0b\x66ollow_logs\x18\x03 \x01(\x08\x12\x15\n\rfollow_events\x18\x04 \x01(\x08\x12\x16\n\x0elog_tail_lines\x18\x05 \x01(\r\x12\x12\n\nevent_tail\x18\x06 \x01(\r\x12\x18\n\x10stop_on_terminal\x18\x07 \x01(\x08\x12\x14\n\x0clog_since_ms\x18\x08 \x01(\x03\x12\x13\n\x0blog_sources\x18\t \x03(\t\x12\x15\n\rlog_min_level\x18\n \x01(\t\"\x9b\x02\n\x12SandboxStreamEvent\x12(\n\x07sandbox\x18\x01 \x01(\x0b\x32\x15.openshell.v1.SandboxH\x00\x12+\n\x03log\x18\x02 \x01(\x0b\x32\x1c.openshell.v1.SandboxLogLineH\x00\x12,\n\x05\x65vent\x18\x03 \x01(\x0b\x32\x1b.openshell.v1.PlatformEventH\x00\x12\x35\n\x07warning\x18\x04 \x01(\x0b\x32\".openshell.v1.SandboxStreamWarningH\x00\x12>\n\x13\x64raft_policy_update\x18\x05 \x01(\x0b\x32\x1f.openshell.v1.DraftPolicyUpdateH\x00\x42\t\n\x07payload\"\xe3\x01\n\x0eSandboxLogLine\x12\x12\n\nsandbox_id\x18\x01 \x01(\t\x12\x14\n\x0ctimestamp_ms\x18\x02 \x01(\x03\x12\r\n\x05level\x18\x03 \x01(\t\x12\x0e\n\x06target\x18\x04 \x01(\t\x12\x0f\n\x07message\x18\x05 \x01(\t\x12\x0e\n\x06source\x18\x06 \x01(\t\x12\x38\n\x06\x66ields\x18\x07 \x03(\x0b\x32(.openshell.v1.SandboxLogLine.FieldsEntry\x1a-\n\x0b\x46ieldsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\'\n\x14SandboxStreamWarning\x12\x0f\n\x07message\x18\x01 \x01(\t\"^\n\x15\x43reateProviderRequest\x12\x32\n\x08provider\x18\x01 \x01(\x0b\x32 .openshell.datamodel.v1.Provider\x12\x11\n\tworkspace\x18\x02 \x01(\t\"5\n\x12GetProviderRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x11\n\tworkspace\x18\x02 \x01(\t\"`\n\x14ListProvidersRequest\x12\r\n\x05limit\x18\x01 \x01(\r\x12\x0e\n\x06offset\x18\x02 \x01(\r\x12\x11\n\tworkspace\x18\x03 \x01(\t\x12\x16\n\x0e\x61ll_workspaces\x18\x04 \x01(\x08\"\xfe\x01\n\x15UpdateProviderRequest\x12\x32\n\x08provider\x18\x01 \x01(\x0b\x32 .openshell.datamodel.v1.Provider\x12`\n\x18\x63redential_expires_at_ms\x18\x02 \x03(\x0b\x32>.openshell.v1.UpdateProviderRequest.CredentialExpiresAtMsEntry\x12\x11\n\tworkspace\x18\x03 \x01(\t\x1a<\n\x1a\x43redentialExpiresAtMsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x03:\x02\x38\x01\"8\n\x15\x44\x65leteProviderRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x11\n\tworkspace\x18\x02 \x01(\t\"F\n\x10ProviderResponse\x12\x32\n\x08provider\x18\x01 \x01(\x0b\x32 .openshell.datamodel.v1.Provider\"L\n\x15ListProvidersResponse\x12\x33\n\tproviders\x18\x01 \x03(\x0b\x32 .openshell.datamodel.v1.Provider\"O\n\x1bListProviderProfilesRequest\x12\r\n\x05limit\x18\x01 \x01(\r\x12\x0e\n\x06offset\x18\x02 \x01(\r\x12\x11\n\tworkspace\x18\x03 \x01(\t\":\n\x19GetProviderProfileRequest\x12\n\n\x02id\x18\x01 \x01(\t\x12\x11\n\tworkspace\x18\x02 \x01(\t\"[\n\x19ProviderProfileImportItem\x12.\n\x07profile\x18\x01 \x01(\x0b\x32\x1d.openshell.v1.ProviderProfile\x12\x0e\n\x06source\x18\x02 \x01(\t\"q\n\x19ProviderProfileDiagnostic\x12\x0e\n\x06source\x18\x01 \x01(\t\x12\x12\n\nprofile_id\x18\x02 \x01(\t\x12\r\n\x05\x66ield\x18\x03 \x01(\t\x12\x0f\n\x07message\x18\x04 \x01(\t\x12\x10\n\x08severity\x18\x05 \x01(\t\"z\n,ProviderCredentialTokenGrantAudienceOverride\x12\x0c\n\x04host\x18\x01 \x01(\t\x12\x0c\n\x04port\x18\x02 \x01(\r\x12\x0c\n\x04path\x18\x03 \x01(\t\x12\x10\n\x08\x61udience\x18\x04 \x01(\t\x12\x0e\n\x06scopes\x18\x05 \x03(\t\"\x85\x02\n\x1cProviderCredentialTokenGrant\x12\x16\n\x0etoken_endpoint\x18\x01 \x01(\t\x12\x10\n\x08\x61udience\x18\x02 \x01(\t\x12\x19\n\x11jwt_svid_audience\x18\x06 \x01(\t\x12\x0e\n\x06scopes\x18\x03 \x03(\t\x12\x19\n\x11\x63\x61\x63he_ttl_seconds\x18\x04 \x01(\x03\x12V\n\x12\x61udience_overrides\x18\x05 \x03(\x0b\x32:.openshell.v1.ProviderCredentialTokenGrantAudienceOverride\x12\x1d\n\x15\x63lient_assertion_type\x18\x07 \x01(\t\"\xb2\x02\n\x19ProviderProfileCredential\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12\x10\n\x08\x65nv_vars\x18\x03 \x03(\t\x12\x10\n\x08required\x18\x04 \x01(\x08\x12\x12\n\nauth_style\x18\x05 \x01(\t\x12\x13\n\x0bheader_name\x18\x06 \x01(\t\x12\x13\n\x0bquery_param\x18\x07 \x01(\t\x12\x38\n\x07refresh\x18\x08 \x01(\x0b\x32\'.openshell.v1.ProviderCredentialRefresh\x12\x15\n\rpath_template\x18\t \x01(\t\x12?\n\x0btoken_grant\x18\n \x01(\x0b\x32*.openshell.v1.ProviderCredentialTokenGrant\"h\n!ProviderCredentialRefreshMaterial\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12\x10\n\x08required\x18\x03 \x01(\x08\x12\x0e\n\x06secret\x18\x04 \x01(\x08\"E\n\x1fProviderCredentialRefreshOutput\x12\x0e\n\x06output\x18\x01 \x01(\t\x12\x12\n\ncredential\x18\x02 \x01(\t\"\xcd\x02\n\x19ProviderCredentialRefresh\x12\x41\n\x08strategy\x18\x01 \x01(\x0e\x32/.openshell.v1.ProviderCredentialRefreshStrategy\x12\x11\n\ttoken_url\x18\x02 \x01(\t\x12\x0e\n\x06scopes\x18\x03 \x03(\t\x12\x1e\n\x16refresh_before_seconds\x18\x04 \x01(\x03\x12\x1c\n\x14max_lifetime_seconds\x18\x05 \x01(\x03\x12\x41\n\x08material\x18\x06 \x03(\x0b\x32/.openshell.v1.ProviderCredentialRefreshMaterial\x12I\n\x12\x61\x64\x64itional_outputs\x18\x07 \x03(\x0b\x32-.openshell.v1.ProviderCredentialRefreshOutput\"\x9b\x02\n\x1fProviderCredentialRefreshStatus\x12\x15\n\rprovider_name\x18\x01 \x01(\t\x12\x13\n\x0bprovider_id\x18\x02 \x01(\t\x12\x16\n\x0e\x63redential_key\x18\x03 \x01(\t\x12\x41\n\x08strategy\x18\x04 \x01(\x0e\x32/.openshell.v1.ProviderCredentialRefreshStrategy\x12\x0e\n\x06status\x18\x05 \x01(\t\x12\x15\n\rexpires_at_ms\x18\x06 \x01(\x03\x12\x1a\n\x12next_refresh_at_ms\x18\x07 \x01(\x03\x12\x1a\n\x12last_refresh_at_ms\x18\x08 \x01(\x03\x12\x12\n\nlast_error\x18\t \x01(\t\"/\n\x18ProviderProfileDiscovery\x12\x13\n\x0b\x63redentials\x18\x01 \x03(\t\"\x8b\x06\n$StoredProviderCredentialRefreshState\x12\x34\n\x08metadata\x18\x01 \x01(\x0b\x32\".openshell.datamodel.v1.ObjectMeta\x12\x13\n\x0bprovider_id\x18\x02 \x01(\t\x12\x15\n\rprovider_name\x18\x03 \x01(\t\x12\x16\n\x0e\x63redential_key\x18\x04 \x01(\t\x12\x41\n\x08strategy\x18\x05 \x01(\x0e\x32/.openshell.v1.ProviderCredentialRefreshStrategy\x12X\n\x08material\x18\x06 \x03(\x0b\x32@.openshell.v1.StoredProviderCredentialRefreshState.MaterialEntryB\x04\x88\xb5\x18\x01\x12\x1c\n\x14secret_material_keys\x18\x07 \x03(\t\x12\x15\n\rexpires_at_ms\x18\x08 \x01(\x03\x12\x1a\n\x12next_refresh_at_ms\x18\t \x01(\x03\x12\x1a\n\x12last_refresh_at_ms\x18\n \x01(\x03\x12\x0e\n\x06status\x18\x0b \x01(\t\x12\x12\n\nlast_error\x18\x0c \x01(\t\x12\x11\n\ttoken_url\x18\r \x01(\t\x12\x0e\n\x06scopes\x18\x0e \x03(\t\x12\x1e\n\x16refresh_before_seconds\x18\x0f \x01(\x03\x12\x1c\n\x14max_lifetime_seconds\x18\x10 \x01(\x03\x12l\n\x16\x61\x64\x64itional_output_keys\x18\x11 \x03(\x0b\x32L.openshell.v1.StoredProviderCredentialRefreshState.AdditionalOutputKeysEntry\x1a/\n\rMaterialEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a;\n\x19\x41\x64\x64itionalOutputKeysEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"^\n\x1fGetProviderRefreshStatusRequest\x12\x10\n\x08provider\x18\x01 \x01(\t\x12\x16\n\x0e\x63redential_key\x18\x02 \x01(\t\x12\x11\n\tworkspace\x18\x03 \x01(\t\"f\n GetProviderRefreshStatusResponse\x12\x42\n\x0b\x63redentials\x18\x01 \x03(\x0b\x32-.openshell.v1.ProviderCredentialRefreshStatus\"\xf3\x02\n\x1f\x43onfigureProviderRefreshRequest\x12\x10\n\x08provider\x18\x01 \x01(\t\x12\x16\n\x0e\x63redential_key\x18\x02 \x01(\t\x12\x41\n\x08strategy\x18\x03 \x01(\x0e\x32/.openshell.v1.ProviderCredentialRefreshStrategy\x12S\n\x08material\x18\x04 \x03(\x0b\x32;.openshell.v1.ConfigureProviderRefreshRequest.MaterialEntryB\x04\x88\xb5\x18\x01\x12\x1c\n\x14secret_material_keys\x18\x05 \x03(\t\x12\x1a\n\rexpires_at_ms\x18\x06 \x01(\x03H\x00\x88\x01\x01\x12\x11\n\tworkspace\x18\x07 \x01(\t\x1a/\n\rMaterialEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x42\x10\n\x0e_expires_at_ms\"a\n ConfigureProviderRefreshResponse\x12=\n\x06status\x18\x01 \x01(\x0b\x32-.openshell.v1.ProviderCredentialRefreshStatus\"^\n\x1fRotateProviderCredentialRequest\x12\x10\n\x08provider\x18\x01 \x01(\t\x12\x16\n\x0e\x63redential_key\x18\x02 \x01(\t\x12\x11\n\tworkspace\x18\x03 \x01(\t\"a\n RotateProviderCredentialResponse\x12=\n\x06status\x18\x01 \x01(\x0b\x32-.openshell.v1.ProviderCredentialRefreshStatus\"[\n\x1c\x44\x65leteProviderRefreshRequest\x12\x10\n\x08provider\x18\x01 \x01(\t\x12\x16\n\x0e\x63redential_key\x18\x02 \x01(\t\x12\x11\n\tworkspace\x18\x03 \x01(\t\"0\n\x1d\x44\x65leteProviderRefreshResponse\x12\x0f\n\x07\x64\x65leted\x18\x01 \x01(\x08\"\xb8\x04\n\x0fProviderProfile\x12\n\n\x02id\x18\x01 \x01(\t\x12\x14\n\x0c\x64isplay_name\x18\x02 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x03 \x01(\t\x12\x37\n\x08\x63\x61tegory\x18\x04 \x01(\x0e\x32%.openshell.v1.ProviderProfileCategory\x12<\n\x0b\x63redentials\x18\x05 \x03(\x0b\x32\'.openshell.v1.ProviderProfileCredential\x12\x38\n\tendpoints\x18\x06 \x03(\x0b\x32%.openshell.sandbox.v1.NetworkEndpoint\x12\x35\n\x08\x62inaries\x18\x07 \x03(\x0b\x32#.openshell.sandbox.v1.NetworkBinary\x12\x19\n\x11inference_capable\x18\x08 \x01(\x08\x12\x39\n\tdiscovery\x18\t \x01(\x0b\x32&.openshell.v1.ProviderProfileDiscovery\x12\x18\n\x10resource_version\x18\n \x01(\x04\x12\x43\n\x0b\x61nnotations\x18\x0b \x03(\x0b\x32..openshell.v1.ProviderProfile.AnnotationsEntry\x12\x0e\n\x06source\x18\x0c \x01(\t\x12\r\n\x05scope\x18\r \x01(\t\x1a\x32\n\x10\x41nnotationsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"}\n\x15StoredProviderProfile\x12\x34\n\x08metadata\x18\x01 \x01(\x0b\x32\".openshell.datamodel.v1.ObjectMeta\x12.\n\x07profile\x18\x02 \x01(\x0b\x32\x1d.openshell.v1.ProviderProfile\"I\n\x17ProviderProfileResponse\x12.\n\x07profile\x18\x01 \x01(\x0b\x32\x1d.openshell.v1.ProviderProfile\"O\n\x1cListProviderProfilesResponse\x12/\n\x08profiles\x18\x01 \x03(\x0b\x32\x1d.openshell.v1.ProviderProfile\"m\n\x1dImportProviderProfilesRequest\x12\x39\n\x08profiles\x18\x01 \x03(\x0b\x32\'.openshell.v1.ProviderProfileImportItem\x12\x11\n\tworkspace\x18\x02 \x01(\t\"\xa1\x01\n\x1eImportProviderProfilesResponse\x12<\n\x0b\x64iagnostics\x18\x01 \x03(\x0b\x32\'.openshell.v1.ProviderProfileDiagnostic\x12/\n\x08profiles\x18\x02 \x03(\x0b\x32\x1d.openshell.v1.ProviderProfile\x12\x10\n\x08imported\x18\x03 \x01(\x08\"\x9b\x01\n\x1dUpdateProviderProfilesRequest\x12\x38\n\x07profile\x18\x01 \x01(\x0b\x32\'.openshell.v1.ProviderProfileImportItem\x12!\n\x19\x65xpected_resource_version\x18\x02 \x01(\x04\x12\n\n\x02id\x18\x03 \x01(\t\x12\x11\n\tworkspace\x18\x04 \x01(\t\"\x9f\x01\n\x1eUpdateProviderProfilesResponse\x12<\n\x0b\x64iagnostics\x18\x01 \x03(\x0b\x32\'.openshell.v1.ProviderProfileDiagnostic\x12.\n\x07profile\x18\x02 \x01(\x0b\x32\x1d.openshell.v1.ProviderProfile\x12\x0f\n\x07updated\x18\x03 \x01(\x08\"k\n\x1bLintProviderProfilesRequest\x12\x39\n\x08profiles\x18\x01 \x03(\x0b\x32\'.openshell.v1.ProviderProfileImportItem\x12\x11\n\tworkspace\x18\x02 \x01(\t\"k\n\x1cLintProviderProfilesResponse\x12<\n\x0b\x64iagnostics\x18\x01 \x03(\x0b\x32\'.openshell.v1.ProviderProfileDiagnostic\x12\r\n\x05valid\x18\x02 \x01(\x08\")\n\x16\x44\x65leteProviderResponse\x12\x0f\n\x07\x64\x65leted\x18\x01 \x01(\x08\"=\n\x1c\x44\x65leteProviderProfileRequest\x12\n\n\x02id\x18\x01 \x01(\t\x12\x11\n\tworkspace\x18\x02 \x01(\t\"0\n\x1d\x44\x65leteProviderProfileResponse\x12\x0f\n\x07\x64\x65leted\x18\x01 \x01(\x08\":\n$GetSandboxProviderEnvironmentRequest\x12\x12\n\nsandbox_id\x18\x01 \x01(\t\"\xd9\x04\n%GetSandboxProviderEnvironmentResponse\x12_\n\x0b\x65nvironment\x18\x01 \x03(\x0b\x32\x44.openshell.v1.GetSandboxProviderEnvironmentResponse.EnvironmentEntryB\x04\x88\xb5\x18\x01\x12\x1d\n\x15provider_env_revision\x18\x02 \x01(\x04\x12p\n\x18\x63redential_expires_at_ms\x18\x03 \x03(\x0b\x32N.openshell.v1.GetSandboxProviderEnvironmentResponse.CredentialExpiresAtMsEntry\x12h\n\x13\x64ynamic_credentials\x18\x04 \x03(\x0b\x32K.openshell.v1.GetSandboxProviderEnvironmentResponse.DynamicCredentialsEntry\x1a\x32\n\x10\x45nvironmentEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a<\n\x1a\x43redentialExpiresAtMsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x03:\x02\x38\x01\x1a\x62\n\x17\x44ynamicCredentialsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x36\n\x05value\x18\x02 \x01(\x0b\x32\'.openshell.v1.ProviderProfileCredential:\x02\x38\x01\"\xc1\x03\n\x13UpdateConfigRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x33\n\x06policy\x18\x02 \x01(\x0b\x32#.openshell.sandbox.v1.SandboxPolicy\x12\x13\n\x0bsetting_key\x18\x03 \x01(\t\x12\x39\n\rsetting_value\x18\x04 \x01(\x0b\x32\".openshell.sandbox.v1.SettingValue\x12\x16\n\x0e\x64\x65lete_setting\x18\x05 \x01(\x08\x12\x0e\n\x06global\x18\x06 \x01(\x08\x12<\n\x10merge_operations\x18\x07 \x03(\x0b\x32\".openshell.v1.PolicyMergeOperation\x12!\n\x19\x65xpected_resource_version\x18\x08 \x01(\x04\x12G\n\x0b\x61nnotations\x18\t \x03(\x0b\x32\x32.openshell.v1.UpdateConfigRequest.AnnotationsEntry\x12\x11\n\tworkspace\x18\n \x01(\t\x1a\x32\n\x10\x41nnotationsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xf7\x02\n\x14PolicyMergeOperation\x12\x30\n\x08\x61\x64\x64_rule\x18\x01 \x01(\x0b\x32\x1c.openshell.v1.AddNetworkRuleH\x00\x12>\n\x0fremove_endpoint\x18\x02 \x01(\x0b\x32#.openshell.v1.RemoveNetworkEndpointH\x00\x12\x36\n\x0bremove_rule\x18\x03 \x01(\x0b\x32\x1f.openshell.v1.RemoveNetworkRuleH\x00\x12\x34\n\x0e\x61\x64\x64_deny_rules\x18\x04 \x01(\x0b\x32\x1a.openshell.v1.AddDenyRulesH\x00\x12\x36\n\x0f\x61\x64\x64_allow_rules\x18\x05 \x01(\x0b\x32\x1b.openshell.v1.AddAllowRulesH\x00\x12:\n\rremove_binary\x18\x06 \x01(\x0b\x32!.openshell.v1.RemoveNetworkBinaryH\x00\x42\x0b\n\toperation\"Z\n\x0e\x41\x64\x64NetworkRule\x12\x11\n\trule_name\x18\x01 \x01(\t\x12\x35\n\x04rule\x18\x02 \x01(\x0b\x32\'.openshell.sandbox.v1.NetworkPolicyRule\"F\n\x15RemoveNetworkEndpoint\x12\x11\n\trule_name\x18\x01 \x01(\t\x12\x0c\n\x04host\x18\x02 \x01(\t\x12\x0c\n\x04port\x18\x03 \x01(\r\"&\n\x11RemoveNetworkRule\x12\x11\n\trule_name\x18\x01 \x01(\t\"`\n\x0c\x41\x64\x64\x44\x65nyRules\x12\x0c\n\x04host\x18\x01 \x01(\t\x12\x0c\n\x04port\x18\x02 \x01(\r\x12\x34\n\ndeny_rules\x18\x03 \x03(\x0b\x32 .openshell.sandbox.v1.L7DenyRule\"X\n\rAddAllowRules\x12\x0c\n\x04host\x18\x01 \x01(\t\x12\x0c\n\x04port\x18\x02 \x01(\r\x12+\n\x05rules\x18\x03 \x03(\x0b\x32\x1c.openshell.sandbox.v1.L7Rule\"=\n\x13RemoveNetworkBinary\x12\x11\n\trule_name\x18\x01 \x01(\t\x12\x13\n\x0b\x62inary_path\x18\x02 \x01(\t\"\xe6\x01\n\x14UpdateConfigResponse\x12\x0f\n\x07version\x18\x01 \x01(\r\x12\x13\n\x0bpolicy_hash\x18\x02 \x01(\t\x12\x19\n\x11settings_revision\x18\x03 \x01(\x04\x12\x0f\n\x07\x64\x65leted\x18\x04 \x01(\x08\x12H\n\x0b\x61nnotations\x18\x05 \x03(\x0b\x32\x33.openshell.v1.UpdateConfigResponse.AnnotationsEntry\x1a\x32\n\x10\x41nnotationsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"a\n\x1dGetSandboxPolicyStatusRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0f\n\x07version\x18\x02 \x01(\r\x12\x0e\n\x06global\x18\x03 \x01(\x08\x12\x11\n\tworkspace\x18\x04 \x01(\t\"o\n\x1eGetSandboxPolicyStatusResponse\x12\x35\n\x08revision\x18\x01 \x01(\x0b\x32#.openshell.v1.SandboxPolicyRevision\x12\x16\n\x0e\x61\x63tive_version\x18\x02 \x01(\r\"l\n\x1aListSandboxPoliciesRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\r\n\x05limit\x18\x02 \x01(\r\x12\x0e\n\x06offset\x18\x03 \x01(\r\x12\x0e\n\x06global\x18\x04 \x01(\x08\x12\x11\n\tworkspace\x18\x05 \x01(\t\"U\n\x1bListSandboxPoliciesResponse\x12\x36\n\trevisions\x18\x01 \x03(\x0b\x32#.openshell.v1.SandboxPolicyRevision\"\x80\x01\n\x19ReportPolicyStatusRequest\x12\x12\n\nsandbox_id\x18\x01 \x01(\t\x12\x0f\n\x07version\x18\x02 \x01(\r\x12*\n\x06status\x18\x03 \x01(\x0e\x32\x1a.openshell.v1.PolicyStatus\x12\x12\n\nload_error\x18\x04 \x01(\t\"\x1c\n\x1aReportPolicyStatusResponse\"\xdb\x02\n\x15SandboxPolicyRevision\x12\x0f\n\x07version\x18\x01 \x01(\r\x12\x13\n\x0bpolicy_hash\x18\x02 \x01(\t\x12*\n\x06status\x18\x03 \x01(\x0e\x32\x1a.openshell.v1.PolicyStatus\x12\x12\n\nload_error\x18\x04 \x01(\t\x12\x15\n\rcreated_at_ms\x18\x05 \x01(\x03\x12\x14\n\x0cloaded_at_ms\x18\x06 \x01(\x03\x12\x33\n\x06policy\x18\x07 \x01(\x0b\x32#.openshell.sandbox.v1.SandboxPolicy\x12G\n\nprovenance\x18\x08 \x03(\x0b\x32\x33.openshell.v1.SandboxPolicyRevision.ProvenanceEntry\x1a\x31\n\x0fProvenanceEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\x83\x01\n\x15GetSandboxLogsRequest\x12\x12\n\nsandbox_id\x18\x01 \x01(\t\x12\r\n\x05lines\x18\x02 \x01(\r\x12\x10\n\x08since_ms\x18\x03 \x01(\x03\x12\x0f\n\x07sources\x18\x04 \x03(\t\x12\x11\n\tmin_level\x18\x05 \x01(\t\x12\x11\n\tworkspace\x18\x06 \x01(\t\"X\n\x16PushSandboxLogsRequest\x12\x12\n\nsandbox_id\x18\x01 \x01(\t\x12*\n\x04logs\x18\x02 \x03(\x0b\x32\x1c.openshell.v1.SandboxLogLine\"\x19\n\x17PushSandboxLogsResponse\"Z\n\x16GetSandboxLogsResponse\x12*\n\x04logs\x18\x01 \x03(\x0b\x32\x1c.openshell.v1.SandboxLogLine\x12\x14\n\x0c\x62uffer_total\x18\x02 \x01(\r\"\xf3\x01\n\x11SupervisorMessage\x12.\n\x05hello\x18\x01 \x01(\x0b\x32\x1d.openshell.v1.SupervisorHelloH\x00\x12\x36\n\theartbeat\x18\x02 \x01(\x0b\x32!.openshell.v1.SupervisorHeartbeatH\x00\x12:\n\x11relay_open_result\x18\x03 \x01(\x0b\x32\x1d.openshell.v1.RelayOpenResultH\x00\x12/\n\x0brelay_close\x18\x04 \x01(\x0b\x32\x18.openshell.v1.RelayCloseH\x00\x42\t\n\x07payload\"\xa6\x02\n\x0eGatewayMessage\x12\x39\n\x10session_accepted\x18\x01 \x01(\x0b\x32\x1d.openshell.v1.SessionAcceptedH\x00\x12\x39\n\x10session_rejected\x18\x02 \x01(\x0b\x32\x1d.openshell.v1.SessionRejectedH\x00\x12\x33\n\theartbeat\x18\x03 \x01(\x0b\x32\x1e.openshell.v1.GatewayHeartbeatH\x00\x12-\n\nrelay_open\x18\x04 \x01(\x0b\x32\x17.openshell.v1.RelayOpenH\x00\x12/\n\x0brelay_close\x18\x05 \x01(\x0b\x32\x18.openshell.v1.RelayCloseH\x00\x42\t\n\x07payload\":\n\x0fSupervisorHello\x12\x12\n\nsandbox_id\x18\x01 \x01(\t\x12\x13\n\x0binstance_id\x18\x02 \x01(\t\"F\n\x0fSessionAccepted\x12\x12\n\nsession_id\x18\x01 \x01(\t\x12\x1f\n\x17heartbeat_interval_secs\x18\x02 \x01(\r\"!\n\x0fSessionRejected\x12\x0e\n\x06reason\x18\x01 \x01(\t\"\x15\n\x13SupervisorHeartbeat\"\x12\n\x10GatewayHeartbeat\"\x97\x01\n\tRelayOpen\x12\x12\n\nchannel_id\x18\x01 \x01(\t\x12+\n\x03ssh\x18\x02 \x01(\x0b\x32\x1c.openshell.v1.SshRelayTargetH\x00\x12+\n\x03tcp\x18\x03 \x01(\x0b\x32\x1c.openshell.v1.TcpRelayTargetH\x00\x12\x12\n\nservice_id\x18\x05 \x01(\tB\x08\n\x06target\"\x10\n\x0eSshRelayTarget\",\n\x0eTcpRelayTarget\x12\x0c\n\x04host\x18\x01 \x01(\t\x12\x0c\n\x04port\x18\x02 \x01(\r\"\x1f\n\tRelayInit\x12\x12\n\nchannel_id\x18\x01 \x01(\t\"P\n\nRelayFrame\x12\'\n\x04init\x18\x01 \x01(\x0b\x32\x17.openshell.v1.RelayInitH\x00\x12\x0e\n\x04\x64\x61ta\x18\x02 \x01(\x0cH\x00\x42\t\n\x07payload\"E\n\x0fRelayOpenResult\x12\x12\n\nchannel_id\x18\x01 \x01(\t\x12\x0f\n\x07success\x18\x02 \x01(\x08\x12\r\n\x05\x65rror\x18\x03 \x01(\t\"0\n\nRelayClose\x12\x12\n\nchannel_id\x18\x01 \x01(\t\x12\x0e\n\x06reason\x18\x02 \x01(\t\"P\n\x0fL7RequestSample\x12\x0e\n\x06method\x18\x01 \x01(\t\x12\x0c\n\x04path\x18\x02 \x01(\t\x12\x10\n\x08\x64\x65\x63ision\x18\x03 \x01(\t\x12\r\n\x05\x63ount\x18\x04 \x01(\r\"\x95\x03\n\rDenialSummary\x12\x12\n\nsandbox_id\x18\x01 \x01(\t\x12\x0c\n\x04host\x18\x02 \x01(\t\x12\x0c\n\x04port\x18\x03 \x01(\r\x12\x0e\n\x06\x62inary\x18\x04 \x01(\t\x12\x11\n\tancestors\x18\x05 \x03(\t\x12\x13\n\x0b\x64\x65ny_reason\x18\x06 \x01(\t\x12\x15\n\rfirst_seen_ms\x18\x07 \x01(\x03\x12\x14\n\x0clast_seen_ms\x18\x08 \x01(\x03\x12\r\n\x05\x63ount\x18\t \x01(\r\x12\x18\n\x10suppressed_count\x18\n \x01(\r\x12\x13\n\x0btotal_count\x18\x0b \x01(\r\x12\x17\n\x0fsample_cmdlines\x18\x0c \x03(\t\x12\x15\n\rbinary_sha256\x18\r \x01(\t\x12\x12\n\npersistent\x18\x0e \x01(\x08\x12\x14\n\x0c\x64\x65nial_stage\x18\x0f \x01(\t\x12\x39\n\x12l7_request_samples\x18\x10 \x03(\x0b\x32\x1d.openshell.v1.L7RequestSample\x12\x1c\n\x14l7_inspection_active\x18\x11 \x01(\x08\"<\n\x10\x44\x65nialGroupCount\x12\x12\n\ndeny_group\x18\x01 \x01(\t\x12\x14\n\x0c\x64\x65nied_count\x18\x02 \x01(\r\"\x8f\x01\n\x16NetworkActivitySummary\x12\x1e\n\x16network_activity_count\x18\x01 \x01(\r\x12\x1b\n\x13\x64\x65nied_action_count\x18\x02 \x01(\r\x12\x38\n\x10\x64\x65nials_by_group\x18\x03 \x03(\x0b\x32\x1e.openshell.v1.DenialGroupCount\"\xb6\x03\n\x0bPolicyChunk\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0e\n\x06status\x18\x02 \x01(\t\x12\x11\n\trule_name\x18\x03 \x01(\t\x12>\n\rproposed_rule\x18\x04 \x01(\x0b\x32\'.openshell.sandbox.v1.NetworkPolicyRule\x12\x11\n\trationale\x18\x05 \x01(\t\x12\x16\n\x0esecurity_notes\x18\x06 \x01(\t\x12\x12\n\nconfidence\x18\x07 \x01(\x02\x12\x1a\n\x12\x64\x65nial_summary_ids\x18\x08 \x03(\t\x12\x15\n\rcreated_at_ms\x18\t \x01(\x03\x12\x15\n\rdecided_at_ms\x18\n \x01(\x03\x12\r\n\x05stage\x18\x0b \x01(\t\x12\x1b\n\x13supersedes_chunk_id\x18\x0c \x01(\t\x12\x11\n\thit_count\x18\r \x01(\x05\x12\x15\n\rfirst_seen_ms\x18\x0e \x01(\x03\x12\x14\n\x0clast_seen_ms\x18\x0f \x01(\x03\x12\x0e\n\x06\x62inary\x18\x10 \x01(\t\x12\x19\n\x11validation_result\x18\x11 \x01(\t\x12\x18\n\x10rejection_reason\x18\x12 \x01(\t\"f\n\x11\x44raftPolicyUpdate\x12\x15\n\rdraft_version\x18\x01 \x01(\x04\x12\x12\n\nnew_chunks\x18\x02 \x01(\r\x12\x15\n\rtotal_pending\x18\x03 \x01(\r\x12\x0f\n\x07summary\x18\x04 \x01(\t\"\x83\x02\n\x1bSubmitPolicyAnalysisRequest\x12.\n\tsummaries\x18\x01 \x03(\x0b\x32\x1b.openshell.v1.DenialSummary\x12\x32\n\x0fproposed_chunks\x18\x02 \x03(\x0b\x32\x19.openshell.v1.PolicyChunk\x12\x15\n\ranalysis_mode\x18\x03 \x01(\t\x12\x0c\n\x04name\x18\x04 \x01(\t\x12H\n\x1anetwork_activity_summaries\x18\x05 \x03(\x0b\x32$.openshell.v1.NetworkActivitySummary\x12\x11\n\tworkspace\x18\x06 \x01(\t\"\x87\x01\n\x1cSubmitPolicyAnalysisResponse\x12\x17\n\x0f\x61\x63\x63\x65pted_chunks\x18\x01 \x01(\r\x12\x17\n\x0frejected_chunks\x18\x02 \x01(\r\x12\x19\n\x11rejection_reasons\x18\x03 \x03(\t\x12\x1a\n\x12\x61\x63\x63\x65pted_chunk_ids\x18\x04 \x03(\t\"O\n\x15GetDraftPolicyRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x15\n\rstatus_filter\x18\x02 \x01(\t\x12\x11\n\tworkspace\x18\x03 \x01(\t\"\x90\x01\n\x16GetDraftPolicyResponse\x12)\n\x06\x63hunks\x18\x01 \x03(\x0b\x32\x19.openshell.v1.PolicyChunk\x12\x17\n\x0frolling_summary\x18\x02 \x01(\t\x12\x15\n\rdraft_version\x18\x03 \x01(\x04\x12\x1b\n\x13last_analyzed_at_ms\x18\x04 \x01(\x03\"M\n\x18\x41pproveDraftChunkRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x10\n\x08\x63hunk_id\x18\x02 \x01(\t\x12\x11\n\tworkspace\x18\x03 \x01(\t\"H\n\x19\x41pproveDraftChunkResponse\x12\x16\n\x0epolicy_version\x18\x01 \x01(\r\x12\x13\n\x0bpolicy_hash\x18\x02 \x01(\t\"\\\n\x17RejectDraftChunkRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x10\n\x08\x63hunk_id\x18\x02 \x01(\t\x12\x0e\n\x06reason\x18\x03 \x01(\t\x12\x11\n\tworkspace\x18\x04 \x01(\t\"\x1a\n\x18RejectDraftChunkResponse\"a\n\x1c\x41pproveAllDraftChunksRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12 \n\x18include_security_flagged\x18\x02 \x01(\x08\x12\x11\n\tworkspace\x18\x03 \x01(\t\"}\n\x1d\x41pproveAllDraftChunksResponse\x12\x16\n\x0epolicy_version\x18\x01 \x01(\r\x12\x13\n\x0bpolicy_hash\x18\x02 \x01(\t\x12\x17\n\x0f\x63hunks_approved\x18\x03 \x01(\r\x12\x16\n\x0e\x63hunks_skipped\x18\x04 \x01(\r\"\x8a\x01\n\x15\x45\x64itDraftChunkRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x10\n\x08\x63hunk_id\x18\x02 \x01(\t\x12>\n\rproposed_rule\x18\x03 \x01(\x0b\x32\'.openshell.sandbox.v1.NetworkPolicyRule\x12\x11\n\tworkspace\x18\x04 \x01(\t\"\x18\n\x16\x45\x64itDraftChunkResponse\"J\n\x15UndoDraftChunkRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x10\n\x08\x63hunk_id\x18\x02 \x01(\t\x12\x11\n\tworkspace\x18\x03 \x01(\t\"E\n\x16UndoDraftChunkResponse\x12\x16\n\x0epolicy_version\x18\x01 \x01(\r\x12\x13\n\x0bpolicy_hash\x18\x02 \x01(\t\":\n\x17\x43learDraftChunksRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x11\n\tworkspace\x18\x02 \x01(\t\"2\n\x18\x43learDraftChunksResponse\x12\x16\n\x0e\x63hunks_cleared\x18\x01 \x01(\r\"9\n\x16GetDraftHistoryRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x11\n\tworkspace\x18\x02 \x01(\t\"d\n\x11\x44raftHistoryEntry\x12\x14\n\x0ctimestamp_ms\x18\x01 \x01(\x03\x12\x12\n\nevent_type\x18\x02 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x03 \x01(\t\x12\x10\n\x08\x63hunk_id\x18\x04 \x01(\t\"K\n\x17GetDraftHistoryResponse\x12\x30\n\x07\x65ntries\x18\x01 \x03(\x0b\x32\x1f.openshell.v1.DraftHistoryEntry\"\x80\x02\n\x15PolicyRevisionPayload\x12\x33\n\x06policy\x18\x01 \x01(\x0b\x32#.openshell.sandbox.v1.SandboxPolicy\x12\x0c\n\x04hash\x18\x02 \x01(\t\x12\x12\n\nload_error\x18\x03 \x01(\t\x12\x14\n\x0cloaded_at_ms\x18\x04 \x01(\x03\x12G\n\nprovenance\x18\x05 \x03(\x0b\x32\x33.openshell.v1.PolicyRevisionPayload.ProvenanceEntry\x1a\x31\n\x0fProvenanceEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xb4\x02\n\x11\x44raftChunkPayload\x12\x11\n\trule_name\x18\x01 \x01(\t\x12>\n\rproposed_rule\x18\x02 \x01(\x0b\x32\'.openshell.sandbox.v1.NetworkPolicyRule\x12\x11\n\trationale\x18\x03 \x01(\t\x12\x16\n\x0esecurity_notes\x18\x04 \x01(\t\x12\x12\n\nconfidence\x18\x05 \x01(\x02\x12\x15\n\rdecided_at_ms\x18\x06 \x01(\x03\x12\x0c\n\x04host\x18\x07 \x01(\t\x12\x0c\n\x04port\x18\x08 \x01(\x05\x12\x0e\n\x06\x62inary\x18\t \x01(\t\x12\x15\n\rdraft_version\x18\n \x01(\x03\x12\x19\n\x11validation_result\x18\x0b \x01(\t\x12\x18\n\x10rejection_reason\x18\x0c \x01(\t\"\xea\x02\n\x14StoredPolicyRevision\x12\n\n\x02id\x18\x01 \x01(\t\x12\x12\n\nsandbox_id\x18\x02 \x01(\t\x12\x0f\n\x07version\x18\x03 \x01(\x03\x12\x16\n\x0epolicy_payload\x18\x04 \x01(\x0c\x12\x13\n\x0bpolicy_hash\x18\x05 \x01(\t\x12\x0e\n\x06status\x18\x06 \x01(\t\x12\x17\n\nload_error\x18\x07 \x01(\tH\x00\x88\x01\x01\x12\x15\n\rcreated_at_ms\x18\x08 \x01(\x03\x12\x19\n\x0cloaded_at_ms\x18\t \x01(\x03H\x01\x88\x01\x01\x12\x46\n\nprovenance\x18\n \x03(\x0b\x32\x32.openshell.v1.StoredPolicyRevision.ProvenanceEntry\x1a\x31\n\x0fProvenanceEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x42\r\n\x0b_load_errorB\x0f\n\r_loaded_at_ms\"\xa8\x03\n\x10StoredDraftChunk\x12\n\n\x02id\x18\x01 \x01(\t\x12\x12\n\nsandbox_id\x18\x02 \x01(\t\x12\x15\n\rdraft_version\x18\x03 \x01(\x03\x12\x0e\n\x06status\x18\x04 \x01(\t\x12\x11\n\trule_name\x18\x05 \x01(\t\x12\x15\n\rproposed_rule\x18\x06 \x01(\x0c\x12\x11\n\trationale\x18\x07 \x01(\t\x12\x16\n\x0esecurity_notes\x18\x08 \x01(\t\x12\x12\n\nconfidence\x18\t \x01(\x01\x12\x15\n\rcreated_at_ms\x18\n \x01(\x03\x12\x1a\n\rdecided_at_ms\x18\x0b \x01(\x03H\x00\x88\x01\x01\x12\x0c\n\x04host\x18\x0c \x01(\t\x12\x0c\n\x04port\x18\r \x01(\x05\x12\x0e\n\x06\x62inary\x18\x0e \x01(\t\x12\x11\n\thit_count\x18\x0f \x01(\x05\x12\x15\n\rfirst_seen_ms\x18\x10 \x01(\x03\x12\x14\n\x0clast_seen_ms\x18\x11 \x01(\x03\x12\x19\n\x11validation_result\x18\x12 \x01(\t\x12\x18\n\x10rejection_reason\x18\x13 \x01(\tB\x10\n\x0e_decided_at_ms\"\x97\x01\n\x16\x43reateWorkspaceRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12@\n\x06labels\x18\x02 \x03(\x0b\x32\x30.openshell.v1.CreateWorkspaceRequest.LabelsEntry\x1a-\n\x0bLabelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"O\n\x17\x43reateWorkspaceResponse\x12\x34\n\tworkspace\x18\x01 \x01(\x0b\x32!.openshell.datamodel.v1.Workspace\"#\n\x13GetWorkspaceRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\"L\n\x14GetWorkspaceResponse\x12\x34\n\tworkspace\x18\x01 \x01(\x0b\x32!.openshell.datamodel.v1.Workspace\"N\n\x15ListWorkspacesRequest\x12\r\n\x05limit\x18\x01 \x01(\r\x12\x0e\n\x06offset\x18\x02 \x01(\r\x12\x16\n\x0elabel_selector\x18\x03 \x01(\t\"O\n\x16ListWorkspacesResponse\x12\x35\n\nworkspaces\x18\x01 \x03(\x0b\x32!.openshell.datamodel.v1.Workspace\"&\n\x16\x44\x65leteWorkspaceRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\"*\n\x17\x44\x65leteWorkspaceResponse\x12\x0f\n\x07\x64\x65leted\x18\x01 \x01(\x08\"\x8d\x01\n\x0fWorkspaceMember\x12\x34\n\x08metadata\x18\x01 \x01(\x0b\x32\".openshell.datamodel.v1.ObjectMeta\x12\x19\n\x11principal_subject\x18\x02 \x01(\t\x12)\n\x04role\x18\x03 \x01(\x0e\x32\x1b.openshell.v1.WorkspaceRole\"t\n\x19\x41\x64\x64WorkspaceMemberRequest\x12\x11\n\tworkspace\x18\x01 \x01(\t\x12\x19\n\x11principal_subject\x18\x02 \x01(\t\x12)\n\x04role\x18\x03 \x01(\x0e\x32\x1b.openshell.v1.WorkspaceRole\"K\n\x1a\x41\x64\x64WorkspaceMemberResponse\x12-\n\x06member\x18\x01 \x01(\x0b\x32\x1d.openshell.v1.WorkspaceMember\"L\n\x1cRemoveWorkspaceMemberRequest\x12\x11\n\tworkspace\x18\x01 \x01(\t\x12\x19\n\x11principal_subject\x18\x02 \x01(\t\"0\n\x1dRemoveWorkspaceMemberResponse\x12\x0f\n\x07removed\x18\x01 \x01(\x08\"O\n\x1bListWorkspaceMembersRequest\x12\x11\n\tworkspace\x18\x01 \x01(\t\x12\r\n\x05limit\x18\x02 \x01(\r\x12\x0e\n\x06offset\x18\x03 \x01(\r\"N\n\x1cListWorkspaceMembersResponse\x12.\n\x07members\x18\x01 \x03(\x0b\x32\x1d.openshell.v1.WorkspaceMember*\xb6\x01\n\x0cSandboxPhase\x12\x1d\n\x19SANDBOX_PHASE_UNSPECIFIED\x10\x00\x12\x1e\n\x1aSANDBOX_PHASE_PROVISIONING\x10\x01\x12\x17\n\x13SANDBOX_PHASE_READY\x10\x02\x12\x17\n\x13SANDBOX_PHASE_ERROR\x10\x03\x12\x1a\n\x16SANDBOX_PHASE_DELETING\x10\x04\x12\x19\n\x15SANDBOX_PHASE_UNKNOWN\x10\x05*\xc3\x03\n!ProviderCredentialRefreshStrategy\x12\x34\n0PROVIDER_CREDENTIAL_REFRESH_STRATEGY_UNSPECIFIED\x10\x00\x12/\n+PROVIDER_CREDENTIAL_REFRESH_STRATEGY_STATIC\x10\x01\x12\x31\n-PROVIDER_CREDENTIAL_REFRESH_STRATEGY_EXTERNAL\x10\x02\x12=\n9PROVIDER_CREDENTIAL_REFRESH_STRATEGY_OAUTH2_REFRESH_TOKEN\x10\x03\x12\x42\n>PROVIDER_CREDENTIAL_REFRESH_STRATEGY_OAUTH2_CLIENT_CREDENTIALS\x10\x04\x12\x43\n?PROVIDER_CREDENTIAL_REFRESH_STRATEGY_GOOGLE_SERVICE_ACCOUNT_JWT\x10\x05\x12<\n8PROVIDER_CREDENTIAL_REFRESH_STRATEGY_AWS_STS_ASSUME_ROLE\x10\x06*\xdb\x02\n\x17ProviderProfileCategory\x12)\n%PROVIDER_PROFILE_CATEGORY_UNSPECIFIED\x10\x00\x12#\n\x1fPROVIDER_PROFILE_CATEGORY_OTHER\x10\x01\x12\'\n#PROVIDER_PROFILE_CATEGORY_INFERENCE\x10\x02\x12#\n\x1fPROVIDER_PROFILE_CATEGORY_AGENT\x10\x03\x12,\n(PROVIDER_PROFILE_CATEGORY_SOURCE_CONTROL\x10\x04\x12\'\n#PROVIDER_PROFILE_CATEGORY_MESSAGING\x10\x05\x12\"\n\x1ePROVIDER_PROFILE_CATEGORY_DATA\x10\x06\x12\'\n#PROVIDER_PROFILE_CATEGORY_KNOWLEDGE\x10\x07*\x9a\x01\n\x0cPolicyStatus\x12\x1d\n\x19POLICY_STATUS_UNSPECIFIED\x10\x00\x12\x19\n\x15POLICY_STATUS_PENDING\x10\x01\x12\x18\n\x14POLICY_STATUS_LOADED\x10\x02\x12\x18\n\x14POLICY_STATUS_FAILED\x10\x03\x12\x1c\n\x18POLICY_STATUS_SUPERSEDED\x10\x04*\x86\x01\n\rServiceStatus\x12\x1e\n\x1aSERVICE_STATUS_UNSPECIFIED\x10\x00\x12\x1a\n\x16SERVICE_STATUS_HEALTHY\x10\x01\x12\x1b\n\x17SERVICE_STATUS_DEGRADED\x10\x02\x12\x1c\n\x18SERVICE_STATUS_UNHEALTHY\x10\x03*b\n\rWorkspaceRole\x12\x1e\n\x1aWORKSPACE_ROLE_UNSPECIFIED\x10\x00\x12\x17\n\x13WORKSPACE_ROLE_USER\x10\x01\x12\x18\n\x14WORKSPACE_ROLE_ADMIN\x10\x02\x32\xac\x42\n\tOpenShell\x12Z\n\x06Health\x12\x1b.openshell.v1.HealthRequest\x1a\x1c.openshell.v1.HealthResponse\"\x15\x82\xb5\x18\x11\n\x0funauthenticated\x12i\n\x0eGetCurrentUser\x12#.openshell.v1.GetCurrentUserRequest\x1a$.openshell.v1.GetCurrentUserResponse\"\x0c\x82\xb5\x18\x08\n\x06\x62\x65\x61rer\x12\x86\x01\n\x0eGetGatewayInfo\x12#.openshell.v1.GetGatewayInfoRequest\x1a$.openshell.v1.GetGatewayInfoResponse\")\x82\xb5\x18%\n\x06\x62\x65\x61rer\x1a\x0eplatform_admin\"\x0b\x63onfig:read\x12u\n\rCreateSandbox\x12\".openshell.v1.CreateSandboxRequest\x1a\x1d.openshell.v1.SandboxResponse\"!\x82\xb5\x18\x1d\n\x06\x62\x65\x61rer\x12\x04user\"\rsandbox:write\x12n\n\nGetSandbox\x12\x1f.openshell.v1.GetSandboxRequest\x1a\x1d.openshell.v1.SandboxResponse\" \x82\xb5\x18\x1c\n\x06\x62\x65\x61rer\x12\x04user\"\x0csandbox:read\x12z\n\rListSandboxes\x12\".openshell.v1.ListSandboxesRequest\x1a#.openshell.v1.ListSandboxesResponse\" \x82\xb5\x18\x1c\n\x06\x62\x65\x61rer\x12\x04user\"\x0csandbox:read\x12\x8f\x01\n\x14ListSandboxProviders\x12).openshell.v1.ListSandboxProvidersRequest\x1a*.openshell.v1.ListSandboxProvidersResponse\" \x82\xb5\x18\x1c\n\x06\x62\x65\x61rer\x12\x04user\"\x0csandbox:read\x12\x93\x01\n\x15\x41ttachSandboxProvider\x12*.openshell.v1.AttachSandboxProviderRequest\x1a+.openshell.v1.AttachSandboxProviderResponse\"!\x82\xb5\x18\x1d\n\x06\x62\x65\x61rer\x12\x04user\"\rsandbox:write\x12\x93\x01\n\x15\x44\x65tachSandboxProvider\x12*.openshell.v1.DetachSandboxProviderRequest\x1a+.openshell.v1.DetachSandboxProviderResponse\"!\x82\xb5\x18\x1d\n\x06\x62\x65\x61rer\x12\x04user\"\rsandbox:write\x12{\n\rDeleteSandbox\x12\".openshell.v1.DeleteSandboxRequest\x1a#.openshell.v1.DeleteSandboxResponse\"!\x82\xb5\x18\x1d\n\x06\x62\x65\x61rer\x12\x04user\"\rsandbox:write\x12\x84\x01\n\x10\x43reateSshSession\x12%.openshell.v1.CreateSshSessionRequest\x1a&.openshell.v1.CreateSshSessionResponse\"!\x82\xb5\x18\x1d\n\x06\x62\x65\x61rer\x12\x04user\"\rsandbox:write\x12}\n\rExposeService\x12\".openshell.v1.ExposeServiceRequest\x1a%.openshell.v1.ServiceEndpointResponse\"!\x82\xb5\x18\x1d\n\x06\x62\x65\x61rer\x12\x04user\"\rsandbox:write\x12v\n\nGetService\x12\x1f.openshell.v1.GetServiceRequest\x1a%.openshell.v1.ServiceEndpointResponse\" \x82\xb5\x18\x1c\n\x06\x62\x65\x61rer\x12\x04user\"\x0csandbox:read\x12w\n\x0cListServices\x12!.openshell.v1.ListServicesRequest\x1a\".openshell.v1.ListServicesResponse\" \x82\xb5\x18\x1c\n\x06\x62\x65\x61rer\x12\x04user\"\x0csandbox:read\x12{\n\rDeleteService\x12\".openshell.v1.DeleteServiceRequest\x1a#.openshell.v1.DeleteServiceResponse\"!\x82\xb5\x18\x1d\n\x06\x62\x65\x61rer\x12\x04user\"\rsandbox:write\x12\x84\x01\n\x10RevokeSshSession\x12%.openshell.v1.RevokeSshSessionRequest\x1a&.openshell.v1.RevokeSshSessionResponse\"!\x82\xb5\x18\x1d\n\x06\x62\x65\x61rer\x12\x04user\"\rsandbox:write\x12t\n\x0b\x45xecSandbox\x12 .openshell.v1.ExecSandboxRequest\x1a\x1e.openshell.v1.ExecSandboxEvent\"!\x82\xb5\x18\x1d\n\x06\x62\x65\x61rer\x12\x04user\"\rsandbox:write0\x01\x12q\n\nForwardTcp\x12\x1d.openshell.v1.TcpForwardFrame\x1a\x1d.openshell.v1.TcpForwardFrame\"!\x82\xb5\x18\x1d\n\x06\x62\x65\x61rer\x12\x04user\"\rsandbox:write(\x01\x30\x01\x12\x7f\n\x16\x45xecSandboxInteractive\x12\x1e.openshell.v1.ExecSandboxInput\x1a\x1e.openshell.v1.ExecSandboxEvent\"!\x82\xb5\x18\x1d\n\x06\x62\x65\x61rer\x12\x04user\"\rsandbox:write(\x01\x30\x01\x12z\n\x0e\x43reateProvider\x12#.openshell.v1.CreateProviderRequest\x1a\x1e.openshell.v1.ProviderResponse\"#\x82\xb5\x18\x1f\n\x06\x62\x65\x61rer\x12\x05\x61\x64min\"\x0eprovider:write\x12r\n\x0bGetProvider\x12 .openshell.v1.GetProviderRequest\x1a\x1e.openshell.v1.ProviderResponse\"!\x82\xb5\x18\x1d\n\x06\x62\x65\x61rer\x12\x04user\"\rprovider:read\x12{\n\rListProviders\x12\".openshell.v1.ListProvidersRequest\x1a#.openshell.v1.ListProvidersResponse\"!\x82\xb5\x18\x1d\n\x06\x62\x65\x61rer\x12\x04user\"\rprovider:read\x12\x90\x01\n\x14ListProviderProfiles\x12).openshell.v1.ListProviderProfilesRequest\x1a*.openshell.v1.ListProviderProfilesResponse\"!\x82\xb5\x18\x1d\n\x06\x62\x65\x61rer\x12\x04user\"\rprovider:read\x12\x87\x01\n\x12GetProviderProfile\x12\'.openshell.v1.GetProviderProfileRequest\x1a%.openshell.v1.ProviderProfileResponse\"!\x82\xb5\x18\x1d\n\x06\x62\x65\x61rer\x12\x04user\"\rprovider:read\x12\x98\x01\n\x16ImportProviderProfiles\x12+.openshell.v1.ImportProviderProfilesRequest\x1a,.openshell.v1.ImportProviderProfilesResponse\"#\x82\xb5\x18\x1f\n\x06\x62\x65\x61rer\x12\x05\x61\x64min\"\x0eprovider:write\x12\x98\x01\n\x16UpdateProviderProfiles\x12+.openshell.v1.UpdateProviderProfilesRequest\x1a,.openshell.v1.UpdateProviderProfilesResponse\"#\x82\xb5\x18\x1f\n\x06\x62\x65\x61rer\x12\x05\x61\x64min\"\x0eprovider:write\x12\x90\x01\n\x14LintProviderProfiles\x12).openshell.v1.LintProviderProfilesRequest\x1a*.openshell.v1.LintProviderProfilesResponse\"!\x82\xb5\x18\x1d\n\x06\x62\x65\x61rer\x12\x04user\"\rprovider:read\x12z\n\x0eUpdateProvider\x12#.openshell.v1.UpdateProviderRequest\x1a\x1e.openshell.v1.ProviderResponse\"#\x82\xb5\x18\x1f\n\x06\x62\x65\x61rer\x12\x05\x61\x64min\"\x0eprovider:write\x12\x9c\x01\n\x18GetProviderRefreshStatus\x12-.openshell.v1.GetProviderRefreshStatusRequest\x1a..openshell.v1.GetProviderRefreshStatusResponse\"!\x82\xb5\x18\x1d\n\x06\x62\x65\x61rer\x12\x04user\"\rprovider:read\x12\x9e\x01\n\x18\x43onfigureProviderRefresh\x12-.openshell.v1.ConfigureProviderRefreshRequest\x1a..openshell.v1.ConfigureProviderRefreshResponse\"#\x82\xb5\x18\x1f\n\x06\x62\x65\x61rer\x12\x05\x61\x64min\"\x0eprovider:write\x12\x9e\x01\n\x18RotateProviderCredential\x12-.openshell.v1.RotateProviderCredentialRequest\x1a..openshell.v1.RotateProviderCredentialResponse\"#\x82\xb5\x18\x1f\n\x06\x62\x65\x61rer\x12\x05\x61\x64min\"\x0eprovider:write\x12\x95\x01\n\x15\x44\x65leteProviderRefresh\x12*.openshell.v1.DeleteProviderRefreshRequest\x1a+.openshell.v1.DeleteProviderRefreshResponse\"#\x82\xb5\x18\x1f\n\x06\x62\x65\x61rer\x12\x05\x61\x64min\"\x0eprovider:write\x12\x80\x01\n\x0e\x44\x65leteProvider\x12#.openshell.v1.DeleteProviderRequest\x1a$.openshell.v1.DeleteProviderResponse\"#\x82\xb5\x18\x1f\n\x06\x62\x65\x61rer\x12\x05\x61\x64min\"\x0eprovider:write\x12\x95\x01\n\x15\x44\x65leteProviderProfile\x12*.openshell.v1.DeleteProviderProfileRequest\x1a+.openshell.v1.DeleteProviderProfileResponse\"#\x82\xb5\x18\x1f\n\x06\x62\x65\x61rer\x12\x05\x61\x64min\"\x0eprovider:write\x12\x90\x01\n\x10GetSandboxConfig\x12-.openshell.sandbox.v1.GetSandboxConfigRequest\x1a..openshell.sandbox.v1.GetSandboxConfigResponse\"\x1d\x82\xb5\x18\x19\n\x04\x64ual\x12\x04user\"\x0b\x63onfig:read\x12\x8c\x01\n\x10GetGatewayConfig\x12-.openshell.sandbox.v1.GetGatewayConfigRequest\x1a..openshell.sandbox.v1.GetGatewayConfigResponse\"\x19\x82\xb5\x18\x15\n\x06\x62\x65\x61rer\"\x0b\x63onfig:read\x12v\n\x0cUpdateConfig\x12!.openshell.v1.UpdateConfigRequest\x1a\".openshell.v1.UpdateConfigResponse\"\x1f\x82\xb5\x18\x1b\n\x04\x64ual\x12\x05\x61\x64min\"\x0c\x63onfig:write\x12\x95\x01\n\x16GetSandboxPolicyStatus\x12+.openshell.v1.GetSandboxPolicyStatusRequest\x1a,.openshell.v1.GetSandboxPolicyStatusResponse\" \x82\xb5\x18\x1c\n\x06\x62\x65\x61rer\x12\x04user\"\x0csandbox:read\x12\x8c\x01\n\x13ListSandboxPolicies\x12(.openshell.v1.ListSandboxPoliciesRequest\x1a).openshell.v1.ListSandboxPoliciesResponse\" \x82\xb5\x18\x1c\n\x06\x62\x65\x61rer\x12\x04user\"\x0csandbox:read\x12v\n\x12ReportPolicyStatus\x12\'.openshell.v1.ReportPolicyStatusRequest\x1a(.openshell.v1.ReportPolicyStatusResponse\"\r\x82\xb5\x18\t\n\x07sandbox\x12\x97\x01\n\x1dGetSandboxProviderEnvironment\x12\x32.openshell.v1.GetSandboxProviderEnvironmentRequest\x1a\x33.openshell.v1.GetSandboxProviderEnvironmentResponse\"\r\x82\xb5\x18\t\n\x07sandbox\x12}\n\x0eGetSandboxLogs\x12#.openshell.v1.GetSandboxLogsRequest\x1a$.openshell.v1.GetSandboxLogsResponse\" \x82\xb5\x18\x1c\n\x06\x62\x65\x61rer\x12\x04user\"\x0csandbox:read\x12o\n\x0fPushSandboxLogs\x12$.openshell.v1.PushSandboxLogsRequest\x1a%.openshell.v1.PushSandboxLogsResponse\"\r\x82\xb5\x18\t\n\x07sandbox(\x01\x12\x65\n\x11\x43onnectSupervisor\x12\x1f.openshell.v1.SupervisorMessage\x1a\x1c.openshell.v1.GatewayMessage\"\r\x82\xb5\x18\t\n\x07sandbox(\x01\x30\x01\x12T\n\x0bRelayStream\x12\x18.openshell.v1.RelayFrame\x1a\x18.openshell.v1.RelayFrame\"\r\x82\xb5\x18\t\n\x07sandbox(\x01\x30\x01\x12w\n\x0cWatchSandbox\x12!.openshell.v1.WatchSandboxRequest\x1a .openshell.v1.SandboxStreamEvent\" \x82\xb5\x18\x1c\n\x06\x62\x65\x61rer\x12\x04user\"\x0csandbox:read0\x01\x12|\n\x14SubmitPolicyAnalysis\x12).openshell.v1.SubmitPolicyAnalysisRequest\x1a*.openshell.v1.SubmitPolicyAnalysisResponse\"\r\x82\xb5\x18\t\n\x07sandbox\x12z\n\x0eGetDraftPolicy\x12#.openshell.v1.GetDraftPolicyRequest\x1a$.openshell.v1.GetDraftPolicyResponse\"\x1d\x82\xb5\x18\x19\n\x04\x64ual\x12\x04user\"\x0b\x63onfig:read\x12\x87\x01\n\x11\x41pproveDraftChunk\x12&.openshell.v1.ApproveDraftChunkRequest\x1a\'.openshell.v1.ApproveDraftChunkResponse\"!\x82\xb5\x18\x1d\n\x06\x62\x65\x61rer\x12\x05\x61\x64min\"\x0c\x63onfig:write\x12\x84\x01\n\x10RejectDraftChunk\x12%.openshell.v1.RejectDraftChunkRequest\x1a&.openshell.v1.RejectDraftChunkResponse\"!\x82\xb5\x18\x1d\n\x06\x62\x65\x61rer\x12\x05\x61\x64min\"\x0c\x63onfig:write\x12\x93\x01\n\x15\x41pproveAllDraftChunks\x12*.openshell.v1.ApproveAllDraftChunksRequest\x1a+.openshell.v1.ApproveAllDraftChunksResponse\"!\x82\xb5\x18\x1d\n\x06\x62\x65\x61rer\x12\x05\x61\x64min\"\x0c\x63onfig:write\x12~\n\x0e\x45\x64itDraftChunk\x12#.openshell.v1.EditDraftChunkRequest\x1a$.openshell.v1.EditDraftChunkResponse\"!\x82\xb5\x18\x1d\n\x06\x62\x65\x61rer\x12\x05\x61\x64min\"\x0c\x63onfig:write\x12~\n\x0eUndoDraftChunk\x12#.openshell.v1.UndoDraftChunkRequest\x1a$.openshell.v1.UndoDraftChunkResponse\"!\x82\xb5\x18\x1d\n\x06\x62\x65\x61rer\x12\x05\x61\x64min\"\x0c\x63onfig:write\x12\x84\x01\n\x10\x43learDraftChunks\x12%.openshell.v1.ClearDraftChunksRequest\x1a&.openshell.v1.ClearDraftChunksResponse\"!\x82\xb5\x18\x1d\n\x06\x62\x65\x61rer\x12\x05\x61\x64min\"\x0c\x63onfig:write\x12\x7f\n\x0fGetDraftHistory\x12$.openshell.v1.GetDraftHistoryRequest\x1a%.openshell.v1.GetDraftHistoryResponse\"\x1f\x82\xb5\x18\x1b\n\x06\x62\x65\x61rer\x12\x04user\"\x0b\x63onfig:read\x12s\n\x11IssueSandboxToken\x12&.openshell.v1.IssueSandboxTokenRequest\x1a\'.openshell.v1.IssueSandboxTokenResponse\"\r\x82\xb5\x18\t\n\x07sandbox\x12y\n\x13RefreshSandboxToken\x12(.openshell.v1.RefreshSandboxTokenRequest\x1a).openshell.v1.RefreshSandboxTokenResponse\"\r\x82\xb5\x18\t\n\x07sandbox\x12\x8d\x01\n\x0f\x43reateWorkspace\x12$.openshell.v1.CreateWorkspaceRequest\x1a%.openshell.v1.CreateWorkspaceResponse\"-\x82\xb5\x18)\n\x06\x62\x65\x61rer\x1a\x0eplatform_admin\"\x0fworkspace:write\x12y\n\x0cGetWorkspace\x12!.openshell.v1.GetWorkspaceRequest\x1a\".openshell.v1.GetWorkspaceResponse\"\"\x82\xb5\x18\x1e\n\x06\x62\x65\x61rer\x12\x04user\"\x0eworkspace:read\x12\x7f\n\x0eListWorkspaces\x12#.openshell.v1.ListWorkspacesRequest\x1a$.openshell.v1.ListWorkspacesResponse\"\"\x82\xb5\x18\x1e\n\x06\x62\x65\x61rer\x12\x04user\"\x0eworkspace:read\x12\x8d\x01\n\x0f\x44\x65leteWorkspace\x12$.openshell.v1.DeleteWorkspaceRequest\x1a%.openshell.v1.DeleteWorkspaceResponse\"-\x82\xb5\x18)\n\x06\x62\x65\x61rer\x1a\x0eplatform_admin\"\x0fworkspace:write\x12\x8d\x01\n\x12\x41\x64\x64WorkspaceMember\x12\'.openshell.v1.AddWorkspaceMemberRequest\x1a(.openshell.v1.AddWorkspaceMemberResponse\"$\x82\xb5\x18 \n\x06\x62\x65\x61rer\x12\x05\x61\x64min\"\x0fworkspace:write\x12\x96\x01\n\x15RemoveWorkspaceMember\x12*.openshell.v1.RemoveWorkspaceMemberRequest\x1a+.openshell.v1.RemoveWorkspaceMemberResponse\"$\x82\xb5\x18 \n\x06\x62\x65\x61rer\x12\x05\x61\x64min\"\x0fworkspace:write\x12\x91\x01\n\x14ListWorkspaceMembers\x12).openshell.v1.ListWorkspaceMembersRequest\x1a*.openshell.v1.ListWorkspaceMembersResponse\"\"\x82\xb5\x18\x1e\n\x06\x62\x65\x61rer\x12\x04user\"\x0eworkspace:readb\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'openshell_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + DESCRIPTOR._loaded_options = None + _globals['_ISSUESANDBOXTOKENRESPONSE'].fields_by_name['token']._loaded_options = None + _globals['_ISSUESANDBOXTOKENRESPONSE'].fields_by_name['token']._serialized_options = b'\210\265\030\001' + _globals['_REFRESHSANDBOXTOKENRESPONSE'].fields_by_name['token']._loaded_options = None + _globals['_REFRESHSANDBOXTOKENRESPONSE'].fields_by_name['token']._serialized_options = b'\210\265\030\001' + _globals['_SANDBOXSPEC_ENVIRONMENTENTRY']._loaded_options = None + _globals['_SANDBOXSPEC_ENVIRONMENTENTRY']._serialized_options = b'8\001' + _globals['_SANDBOXTEMPLATE_LABELSENTRY']._loaded_options = None + _globals['_SANDBOXTEMPLATE_LABELSENTRY']._serialized_options = b'8\001' + _globals['_SANDBOXTEMPLATE_ANNOTATIONSENTRY']._loaded_options = None + _globals['_SANDBOXTEMPLATE_ANNOTATIONSENTRY']._serialized_options = b'8\001' + _globals['_SANDBOXTEMPLATE_ENVIRONMENTENTRY']._loaded_options = None + _globals['_SANDBOXTEMPLATE_ENVIRONMENTENTRY']._serialized_options = b'8\001' + _globals['_PLATFORMEVENT_METADATAENTRY']._loaded_options = None + _globals['_PLATFORMEVENT_METADATAENTRY']._serialized_options = b'8\001' + _globals['_CREATESANDBOXREQUEST_LABELSENTRY']._loaded_options = None + _globals['_CREATESANDBOXREQUEST_LABELSENTRY']._serialized_options = b'8\001' + _globals['_CREATESANDBOXREQUEST_ANNOTATIONSENTRY']._loaded_options = None + _globals['_CREATESANDBOXREQUEST_ANNOTATIONSENTRY']._serialized_options = b'8\001' + _globals['_CREATESSHSESSIONRESPONSE'].fields_by_name['token']._loaded_options = None + _globals['_CREATESSHSESSIONRESPONSE'].fields_by_name['token']._serialized_options = b'\210\265\030\001' + _globals['_REVOKESSHSESSIONREQUEST'].fields_by_name['token']._loaded_options = None + _globals['_REVOKESSHSESSIONREQUEST'].fields_by_name['token']._serialized_options = b'\210\265\030\001' + _globals['_EXECSANDBOXREQUEST_ENVIRONMENTENTRY']._loaded_options = None + _globals['_EXECSANDBOXREQUEST_ENVIRONMENTENTRY']._serialized_options = b'8\001' + _globals['_TCPFORWARDINIT'].fields_by_name['authorization_token']._loaded_options = None + _globals['_TCPFORWARDINIT'].fields_by_name['authorization_token']._serialized_options = b'\210\265\030\001' + _globals['_SSHSESSION'].fields_by_name['token']._loaded_options = None + _globals['_SSHSESSION'].fields_by_name['token']._serialized_options = b'\210\265\030\001' + _globals['_SANDBOXLOGLINE_FIELDSENTRY']._loaded_options = None + _globals['_SANDBOXLOGLINE_FIELDSENTRY']._serialized_options = b'8\001' + _globals['_UPDATEPROVIDERREQUEST_CREDENTIALEXPIRESATMSENTRY']._loaded_options = None + _globals['_UPDATEPROVIDERREQUEST_CREDENTIALEXPIRESATMSENTRY']._serialized_options = b'8\001' + _globals['_STOREDPROVIDERCREDENTIALREFRESHSTATE_MATERIALENTRY']._loaded_options = None + _globals['_STOREDPROVIDERCREDENTIALREFRESHSTATE_MATERIALENTRY']._serialized_options = b'8\001' + _globals['_STOREDPROVIDERCREDENTIALREFRESHSTATE_ADDITIONALOUTPUTKEYSENTRY']._loaded_options = None + _globals['_STOREDPROVIDERCREDENTIALREFRESHSTATE_ADDITIONALOUTPUTKEYSENTRY']._serialized_options = b'8\001' + _globals['_STOREDPROVIDERCREDENTIALREFRESHSTATE'].fields_by_name['material']._loaded_options = None + _globals['_STOREDPROVIDERCREDENTIALREFRESHSTATE'].fields_by_name['material']._serialized_options = b'\210\265\030\001' + _globals['_CONFIGUREPROVIDERREFRESHREQUEST_MATERIALENTRY']._loaded_options = None + _globals['_CONFIGUREPROVIDERREFRESHREQUEST_MATERIALENTRY']._serialized_options = b'8\001' + _globals['_CONFIGUREPROVIDERREFRESHREQUEST'].fields_by_name['material']._loaded_options = None + _globals['_CONFIGUREPROVIDERREFRESHREQUEST'].fields_by_name['material']._serialized_options = b'\210\265\030\001' + _globals['_PROVIDERPROFILE_ANNOTATIONSENTRY']._loaded_options = None + _globals['_PROVIDERPROFILE_ANNOTATIONSENTRY']._serialized_options = b'8\001' + _globals['_GETSANDBOXPROVIDERENVIRONMENTRESPONSE_ENVIRONMENTENTRY']._loaded_options = None + _globals['_GETSANDBOXPROVIDERENVIRONMENTRESPONSE_ENVIRONMENTENTRY']._serialized_options = b'8\001' + _globals['_GETSANDBOXPROVIDERENVIRONMENTRESPONSE_CREDENTIALEXPIRESATMSENTRY']._loaded_options = None + _globals['_GETSANDBOXPROVIDERENVIRONMENTRESPONSE_CREDENTIALEXPIRESATMSENTRY']._serialized_options = b'8\001' + _globals['_GETSANDBOXPROVIDERENVIRONMENTRESPONSE_DYNAMICCREDENTIALSENTRY']._loaded_options = None + _globals['_GETSANDBOXPROVIDERENVIRONMENTRESPONSE_DYNAMICCREDENTIALSENTRY']._serialized_options = b'8\001' + _globals['_GETSANDBOXPROVIDERENVIRONMENTRESPONSE'].fields_by_name['environment']._loaded_options = None + _globals['_GETSANDBOXPROVIDERENVIRONMENTRESPONSE'].fields_by_name['environment']._serialized_options = b'\210\265\030\001' + _globals['_UPDATECONFIGREQUEST_ANNOTATIONSENTRY']._loaded_options = None + _globals['_UPDATECONFIGREQUEST_ANNOTATIONSENTRY']._serialized_options = b'8\001' + _globals['_UPDATECONFIGRESPONSE_ANNOTATIONSENTRY']._loaded_options = None + _globals['_UPDATECONFIGRESPONSE_ANNOTATIONSENTRY']._serialized_options = b'8\001' + _globals['_SANDBOXPOLICYREVISION_PROVENANCEENTRY']._loaded_options = None + _globals['_SANDBOXPOLICYREVISION_PROVENANCEENTRY']._serialized_options = b'8\001' + _globals['_POLICYREVISIONPAYLOAD_PROVENANCEENTRY']._loaded_options = None + _globals['_POLICYREVISIONPAYLOAD_PROVENANCEENTRY']._serialized_options = b'8\001' + _globals['_STOREDPOLICYREVISION_PROVENANCEENTRY']._loaded_options = None + _globals['_STOREDPOLICYREVISION_PROVENANCEENTRY']._serialized_options = b'8\001' + _globals['_CREATEWORKSPACEREQUEST_LABELSENTRY']._loaded_options = None + _globals['_CREATEWORKSPACEREQUEST_LABELSENTRY']._serialized_options = b'8\001' + _globals['_OPENSHELL'].methods_by_name['Health']._loaded_options = None + _globals['_OPENSHELL'].methods_by_name['Health']._serialized_options = b'\202\265\030\021\n\017unauthenticated' + _globals['_OPENSHELL'].methods_by_name['GetCurrentUser']._loaded_options = None + _globals['_OPENSHELL'].methods_by_name['GetCurrentUser']._serialized_options = b'\202\265\030\010\n\006bearer' + _globals['_OPENSHELL'].methods_by_name['GetGatewayInfo']._loaded_options = None + _globals['_OPENSHELL'].methods_by_name['GetGatewayInfo']._serialized_options = b'\202\265\030%\n\006bearer\032\016platform_admin\"\013config:read' + _globals['_OPENSHELL'].methods_by_name['CreateSandbox']._loaded_options = None + _globals['_OPENSHELL'].methods_by_name['CreateSandbox']._serialized_options = b'\202\265\030\035\n\006bearer\022\004user\"\rsandbox:write' + _globals['_OPENSHELL'].methods_by_name['GetSandbox']._loaded_options = None + _globals['_OPENSHELL'].methods_by_name['GetSandbox']._serialized_options = b'\202\265\030\034\n\006bearer\022\004user\"\014sandbox:read' + _globals['_OPENSHELL'].methods_by_name['ListSandboxes']._loaded_options = None + _globals['_OPENSHELL'].methods_by_name['ListSandboxes']._serialized_options = b'\202\265\030\034\n\006bearer\022\004user\"\014sandbox:read' + _globals['_OPENSHELL'].methods_by_name['ListSandboxProviders']._loaded_options = None + _globals['_OPENSHELL'].methods_by_name['ListSandboxProviders']._serialized_options = b'\202\265\030\034\n\006bearer\022\004user\"\014sandbox:read' + _globals['_OPENSHELL'].methods_by_name['AttachSandboxProvider']._loaded_options = None + _globals['_OPENSHELL'].methods_by_name['AttachSandboxProvider']._serialized_options = b'\202\265\030\035\n\006bearer\022\004user\"\rsandbox:write' + _globals['_OPENSHELL'].methods_by_name['DetachSandboxProvider']._loaded_options = None + _globals['_OPENSHELL'].methods_by_name['DetachSandboxProvider']._serialized_options = b'\202\265\030\035\n\006bearer\022\004user\"\rsandbox:write' + _globals['_OPENSHELL'].methods_by_name['DeleteSandbox']._loaded_options = None + _globals['_OPENSHELL'].methods_by_name['DeleteSandbox']._serialized_options = b'\202\265\030\035\n\006bearer\022\004user\"\rsandbox:write' + _globals['_OPENSHELL'].methods_by_name['CreateSshSession']._loaded_options = None + _globals['_OPENSHELL'].methods_by_name['CreateSshSession']._serialized_options = b'\202\265\030\035\n\006bearer\022\004user\"\rsandbox:write' + _globals['_OPENSHELL'].methods_by_name['ExposeService']._loaded_options = None + _globals['_OPENSHELL'].methods_by_name['ExposeService']._serialized_options = b'\202\265\030\035\n\006bearer\022\004user\"\rsandbox:write' + _globals['_OPENSHELL'].methods_by_name['GetService']._loaded_options = None + _globals['_OPENSHELL'].methods_by_name['GetService']._serialized_options = b'\202\265\030\034\n\006bearer\022\004user\"\014sandbox:read' + _globals['_OPENSHELL'].methods_by_name['ListServices']._loaded_options = None + _globals['_OPENSHELL'].methods_by_name['ListServices']._serialized_options = b'\202\265\030\034\n\006bearer\022\004user\"\014sandbox:read' + _globals['_OPENSHELL'].methods_by_name['DeleteService']._loaded_options = None + _globals['_OPENSHELL'].methods_by_name['DeleteService']._serialized_options = b'\202\265\030\035\n\006bearer\022\004user\"\rsandbox:write' + _globals['_OPENSHELL'].methods_by_name['RevokeSshSession']._loaded_options = None + _globals['_OPENSHELL'].methods_by_name['RevokeSshSession']._serialized_options = b'\202\265\030\035\n\006bearer\022\004user\"\rsandbox:write' + _globals['_OPENSHELL'].methods_by_name['ExecSandbox']._loaded_options = None + _globals['_OPENSHELL'].methods_by_name['ExecSandbox']._serialized_options = b'\202\265\030\035\n\006bearer\022\004user\"\rsandbox:write' + _globals['_OPENSHELL'].methods_by_name['ForwardTcp']._loaded_options = None + _globals['_OPENSHELL'].methods_by_name['ForwardTcp']._serialized_options = b'\202\265\030\035\n\006bearer\022\004user\"\rsandbox:write' + _globals['_OPENSHELL'].methods_by_name['ExecSandboxInteractive']._loaded_options = None + _globals['_OPENSHELL'].methods_by_name['ExecSandboxInteractive']._serialized_options = b'\202\265\030\035\n\006bearer\022\004user\"\rsandbox:write' + _globals['_OPENSHELL'].methods_by_name['CreateProvider']._loaded_options = None + _globals['_OPENSHELL'].methods_by_name['CreateProvider']._serialized_options = b'\202\265\030\037\n\006bearer\022\005admin\"\016provider:write' + _globals['_OPENSHELL'].methods_by_name['GetProvider']._loaded_options = None + _globals['_OPENSHELL'].methods_by_name['GetProvider']._serialized_options = b'\202\265\030\035\n\006bearer\022\004user\"\rprovider:read' + _globals['_OPENSHELL'].methods_by_name['ListProviders']._loaded_options = None + _globals['_OPENSHELL'].methods_by_name['ListProviders']._serialized_options = b'\202\265\030\035\n\006bearer\022\004user\"\rprovider:read' + _globals['_OPENSHELL'].methods_by_name['ListProviderProfiles']._loaded_options = None + _globals['_OPENSHELL'].methods_by_name['ListProviderProfiles']._serialized_options = b'\202\265\030\035\n\006bearer\022\004user\"\rprovider:read' + _globals['_OPENSHELL'].methods_by_name['GetProviderProfile']._loaded_options = None + _globals['_OPENSHELL'].methods_by_name['GetProviderProfile']._serialized_options = b'\202\265\030\035\n\006bearer\022\004user\"\rprovider:read' + _globals['_OPENSHELL'].methods_by_name['ImportProviderProfiles']._loaded_options = None + _globals['_OPENSHELL'].methods_by_name['ImportProviderProfiles']._serialized_options = b'\202\265\030\037\n\006bearer\022\005admin\"\016provider:write' + _globals['_OPENSHELL'].methods_by_name['UpdateProviderProfiles']._loaded_options = None + _globals['_OPENSHELL'].methods_by_name['UpdateProviderProfiles']._serialized_options = b'\202\265\030\037\n\006bearer\022\005admin\"\016provider:write' + _globals['_OPENSHELL'].methods_by_name['LintProviderProfiles']._loaded_options = None + _globals['_OPENSHELL'].methods_by_name['LintProviderProfiles']._serialized_options = b'\202\265\030\035\n\006bearer\022\004user\"\rprovider:read' + _globals['_OPENSHELL'].methods_by_name['UpdateProvider']._loaded_options = None + _globals['_OPENSHELL'].methods_by_name['UpdateProvider']._serialized_options = b'\202\265\030\037\n\006bearer\022\005admin\"\016provider:write' + _globals['_OPENSHELL'].methods_by_name['GetProviderRefreshStatus']._loaded_options = None + _globals['_OPENSHELL'].methods_by_name['GetProviderRefreshStatus']._serialized_options = b'\202\265\030\035\n\006bearer\022\004user\"\rprovider:read' + _globals['_OPENSHELL'].methods_by_name['ConfigureProviderRefresh']._loaded_options = None + _globals['_OPENSHELL'].methods_by_name['ConfigureProviderRefresh']._serialized_options = b'\202\265\030\037\n\006bearer\022\005admin\"\016provider:write' + _globals['_OPENSHELL'].methods_by_name['RotateProviderCredential']._loaded_options = None + _globals['_OPENSHELL'].methods_by_name['RotateProviderCredential']._serialized_options = b'\202\265\030\037\n\006bearer\022\005admin\"\016provider:write' + _globals['_OPENSHELL'].methods_by_name['DeleteProviderRefresh']._loaded_options = None + _globals['_OPENSHELL'].methods_by_name['DeleteProviderRefresh']._serialized_options = b'\202\265\030\037\n\006bearer\022\005admin\"\016provider:write' + _globals['_OPENSHELL'].methods_by_name['DeleteProvider']._loaded_options = None + _globals['_OPENSHELL'].methods_by_name['DeleteProvider']._serialized_options = b'\202\265\030\037\n\006bearer\022\005admin\"\016provider:write' + _globals['_OPENSHELL'].methods_by_name['DeleteProviderProfile']._loaded_options = None + _globals['_OPENSHELL'].methods_by_name['DeleteProviderProfile']._serialized_options = b'\202\265\030\037\n\006bearer\022\005admin\"\016provider:write' + _globals['_OPENSHELL'].methods_by_name['GetSandboxConfig']._loaded_options = None + _globals['_OPENSHELL'].methods_by_name['GetSandboxConfig']._serialized_options = b'\202\265\030\031\n\004dual\022\004user\"\013config:read' + _globals['_OPENSHELL'].methods_by_name['GetGatewayConfig']._loaded_options = None + _globals['_OPENSHELL'].methods_by_name['GetGatewayConfig']._serialized_options = b'\202\265\030\025\n\006bearer\"\013config:read' + _globals['_OPENSHELL'].methods_by_name['UpdateConfig']._loaded_options = None + _globals['_OPENSHELL'].methods_by_name['UpdateConfig']._serialized_options = b'\202\265\030\033\n\004dual\022\005admin\"\014config:write' + _globals['_OPENSHELL'].methods_by_name['GetSandboxPolicyStatus']._loaded_options = None + _globals['_OPENSHELL'].methods_by_name['GetSandboxPolicyStatus']._serialized_options = b'\202\265\030\034\n\006bearer\022\004user\"\014sandbox:read' + _globals['_OPENSHELL'].methods_by_name['ListSandboxPolicies']._loaded_options = None + _globals['_OPENSHELL'].methods_by_name['ListSandboxPolicies']._serialized_options = b'\202\265\030\034\n\006bearer\022\004user\"\014sandbox:read' + _globals['_OPENSHELL'].methods_by_name['ReportPolicyStatus']._loaded_options = None + _globals['_OPENSHELL'].methods_by_name['ReportPolicyStatus']._serialized_options = b'\202\265\030\t\n\007sandbox' + _globals['_OPENSHELL'].methods_by_name['GetSandboxProviderEnvironment']._loaded_options = None + _globals['_OPENSHELL'].methods_by_name['GetSandboxProviderEnvironment']._serialized_options = b'\202\265\030\t\n\007sandbox' + _globals['_OPENSHELL'].methods_by_name['GetSandboxLogs']._loaded_options = None + _globals['_OPENSHELL'].methods_by_name['GetSandboxLogs']._serialized_options = b'\202\265\030\034\n\006bearer\022\004user\"\014sandbox:read' + _globals['_OPENSHELL'].methods_by_name['PushSandboxLogs']._loaded_options = None + _globals['_OPENSHELL'].methods_by_name['PushSandboxLogs']._serialized_options = b'\202\265\030\t\n\007sandbox' + _globals['_OPENSHELL'].methods_by_name['ConnectSupervisor']._loaded_options = None + _globals['_OPENSHELL'].methods_by_name['ConnectSupervisor']._serialized_options = b'\202\265\030\t\n\007sandbox' + _globals['_OPENSHELL'].methods_by_name['RelayStream']._loaded_options = None + _globals['_OPENSHELL'].methods_by_name['RelayStream']._serialized_options = b'\202\265\030\t\n\007sandbox' + _globals['_OPENSHELL'].methods_by_name['WatchSandbox']._loaded_options = None + _globals['_OPENSHELL'].methods_by_name['WatchSandbox']._serialized_options = b'\202\265\030\034\n\006bearer\022\004user\"\014sandbox:read' + _globals['_OPENSHELL'].methods_by_name['SubmitPolicyAnalysis']._loaded_options = None + _globals['_OPENSHELL'].methods_by_name['SubmitPolicyAnalysis']._serialized_options = b'\202\265\030\t\n\007sandbox' + _globals['_OPENSHELL'].methods_by_name['GetDraftPolicy']._loaded_options = None + _globals['_OPENSHELL'].methods_by_name['GetDraftPolicy']._serialized_options = b'\202\265\030\031\n\004dual\022\004user\"\013config:read' + _globals['_OPENSHELL'].methods_by_name['ApproveDraftChunk']._loaded_options = None + _globals['_OPENSHELL'].methods_by_name['ApproveDraftChunk']._serialized_options = b'\202\265\030\035\n\006bearer\022\005admin\"\014config:write' + _globals['_OPENSHELL'].methods_by_name['RejectDraftChunk']._loaded_options = None + _globals['_OPENSHELL'].methods_by_name['RejectDraftChunk']._serialized_options = b'\202\265\030\035\n\006bearer\022\005admin\"\014config:write' + _globals['_OPENSHELL'].methods_by_name['ApproveAllDraftChunks']._loaded_options = None + _globals['_OPENSHELL'].methods_by_name['ApproveAllDraftChunks']._serialized_options = b'\202\265\030\035\n\006bearer\022\005admin\"\014config:write' + _globals['_OPENSHELL'].methods_by_name['EditDraftChunk']._loaded_options = None + _globals['_OPENSHELL'].methods_by_name['EditDraftChunk']._serialized_options = b'\202\265\030\035\n\006bearer\022\005admin\"\014config:write' + _globals['_OPENSHELL'].methods_by_name['UndoDraftChunk']._loaded_options = None + _globals['_OPENSHELL'].methods_by_name['UndoDraftChunk']._serialized_options = b'\202\265\030\035\n\006bearer\022\005admin\"\014config:write' + _globals['_OPENSHELL'].methods_by_name['ClearDraftChunks']._loaded_options = None + _globals['_OPENSHELL'].methods_by_name['ClearDraftChunks']._serialized_options = b'\202\265\030\035\n\006bearer\022\005admin\"\014config:write' + _globals['_OPENSHELL'].methods_by_name['GetDraftHistory']._loaded_options = None + _globals['_OPENSHELL'].methods_by_name['GetDraftHistory']._serialized_options = b'\202\265\030\033\n\006bearer\022\004user\"\013config:read' + _globals['_OPENSHELL'].methods_by_name['IssueSandboxToken']._loaded_options = None + _globals['_OPENSHELL'].methods_by_name['IssueSandboxToken']._serialized_options = b'\202\265\030\t\n\007sandbox' + _globals['_OPENSHELL'].methods_by_name['RefreshSandboxToken']._loaded_options = None + _globals['_OPENSHELL'].methods_by_name['RefreshSandboxToken']._serialized_options = b'\202\265\030\t\n\007sandbox' + _globals['_OPENSHELL'].methods_by_name['CreateWorkspace']._loaded_options = None + _globals['_OPENSHELL'].methods_by_name['CreateWorkspace']._serialized_options = b'\202\265\030)\n\006bearer\032\016platform_admin\"\017workspace:write' + _globals['_OPENSHELL'].methods_by_name['GetWorkspace']._loaded_options = None + _globals['_OPENSHELL'].methods_by_name['GetWorkspace']._serialized_options = b'\202\265\030\036\n\006bearer\022\004user\"\016workspace:read' + _globals['_OPENSHELL'].methods_by_name['ListWorkspaces']._loaded_options = None + _globals['_OPENSHELL'].methods_by_name['ListWorkspaces']._serialized_options = b'\202\265\030\036\n\006bearer\022\004user\"\016workspace:read' + _globals['_OPENSHELL'].methods_by_name['DeleteWorkspace']._loaded_options = None + _globals['_OPENSHELL'].methods_by_name['DeleteWorkspace']._serialized_options = b'\202\265\030)\n\006bearer\032\016platform_admin\"\017workspace:write' + _globals['_OPENSHELL'].methods_by_name['AddWorkspaceMember']._loaded_options = None + _globals['_OPENSHELL'].methods_by_name['AddWorkspaceMember']._serialized_options = b'\202\265\030 \n\006bearer\022\005admin\"\017workspace:write' + _globals['_OPENSHELL'].methods_by_name['RemoveWorkspaceMember']._loaded_options = None + _globals['_OPENSHELL'].methods_by_name['RemoveWorkspaceMember']._serialized_options = b'\202\265\030 \n\006bearer\022\005admin\"\017workspace:write' + _globals['_OPENSHELL'].methods_by_name['ListWorkspaceMembers']._loaded_options = None + _globals['_OPENSHELL'].methods_by_name['ListWorkspaceMembers']._serialized_options = b'\202\265\030\036\n\006bearer\022\004user\"\016workspace:read' + _globals['_SANDBOXPHASE']._serialized_start=23734 + _globals['_SANDBOXPHASE']._serialized_end=23916 + _globals['_PROVIDERCREDENTIALREFRESHSTRATEGY']._serialized_start=23919 + _globals['_PROVIDERCREDENTIALREFRESHSTRATEGY']._serialized_end=24370 + _globals['_PROVIDERPROFILECATEGORY']._serialized_start=24373 + _globals['_PROVIDERPROFILECATEGORY']._serialized_end=24720 + _globals['_POLICYSTATUS']._serialized_start=24723 + _globals['_POLICYSTATUS']._serialized_end=24877 + _globals['_SERVICESTATUS']._serialized_start=24880 + _globals['_SERVICESTATUS']._serialized_end=25014 + _globals['_WORKSPACEROLE']._serialized_start=25016 + _globals['_WORKSPACEROLE']._serialized_end=25114 + _globals['_ISSUESANDBOXTOKENREQUEST']._serialized_start=110 + _globals['_ISSUESANDBOXTOKENREQUEST']._serialized_end=136 + _globals['_ISSUESANDBOXTOKENRESPONSE']._serialized_start=138 + _globals['_ISSUESANDBOXTOKENRESPONSE']._serialized_end=209 + _globals['_REFRESHSANDBOXTOKENREQUEST']._serialized_start=211 + _globals['_REFRESHSANDBOXTOKENREQUEST']._serialized_end=239 + _globals['_REFRESHSANDBOXTOKENRESPONSE']._serialized_start=241 + _globals['_REFRESHSANDBOXTOKENRESPONSE']._serialized_end=314 + _globals['_HEALTHREQUEST']._serialized_start=316 + _globals['_HEALTHREQUEST']._serialized_end=331 + _globals['_HEALTHRESPONSE']._serialized_start=333 + _globals['_HEALTHRESPONSE']._serialized_end=411 + _globals['_GETCURRENTUSERREQUEST']._serialized_start=413 + _globals['_GETCURRENTUSERREQUEST']._serialized_end=436 + _globals['_GETCURRENTUSERRESPONSE']._serialized_start=438 + _globals['_GETCURRENTUSERRESPONSE']._serialized_end=559 + _globals['_GETGATEWAYINFOREQUEST']._serialized_start=561 + _globals['_GETGATEWAYINFOREQUEST']._serialized_end=584 + _globals['_GETGATEWAYINFORESPONSE']._serialized_start=587 + _globals['_GETGATEWAYINFORESPONSE']._serialized_end=739 + _globals['_COMPUTEDRIVERINFO']._serialized_start=741 + _globals['_COMPUTEDRIVERINFO']._serialized_end=837 + _globals['_COMPUTEDRIVERCAPABILITIES']._serialized_start=839 + _globals['_COMPUTEDRIVERCAPABILITIES']._serialized_end=911 + _globals['_SANDBOX']._serialized_start=914 + _globals['_SANDBOX']._serialized_end=1106 + _globals['_SANDBOXSPEC']._serialized_start=1109 + _globals['_SANDBOXSPEC']._serialized_end=1494 + _globals['_SANDBOXSPEC_ENVIRONMENTENTRY']._serialized_start=1396 + _globals['_SANDBOXSPEC_ENVIRONMENTENTRY']._serialized_end=1446 + _globals['_RESOURCEREQUIREMENTS']._serialized_start=1496 + _globals['_RESOURCEREQUIREMENTS']._serialized_end=1570 + _globals['_GPURESOURCEREQUIREMENTS']._serialized_start=1572 + _globals['_GPURESOURCEREQUIREMENTS']._serialized_end=1627 + _globals['_SANDBOXTEMPLATE']._serialized_start=1630 + _globals['_SANDBOXTEMPLATE']._serialized_end=2232 + _globals['_SANDBOXTEMPLATE_LABELSENTRY']._serialized_start=2033 + _globals['_SANDBOXTEMPLATE_LABELSENTRY']._serialized_end=2078 + _globals['_SANDBOXTEMPLATE_ANNOTATIONSENTRY']._serialized_start=2080 + _globals['_SANDBOXTEMPLATE_ANNOTATIONSENTRY']._serialized_end=2130 + _globals['_SANDBOXTEMPLATE_ENVIRONMENTENTRY']._serialized_start=1396 + _globals['_SANDBOXTEMPLATE_ENVIRONMENTENTRY']._serialized_end=1446 + _globals['_SANDBOXSTATUS']._serialized_start=2235 + _globals['_SANDBOXSTATUS']._serialized_end=2456 + _globals['_SANDBOXCONDITION']._serialized_start=2458 + _globals['_SANDBOXCONDITION']._serialized_end=2569 + _globals['_PLATFORMEVENT']._serialized_start=2572 + _globals['_PLATFORMEVENT']._serialized_end=2782 + _globals['_PLATFORMEVENT_METADATAENTRY']._serialized_start=2735 + _globals['_PLATFORMEVENT_METADATAENTRY']._serialized_end=2782 + _globals['_CREATESANDBOXREQUEST']._serialized_start=2785 + _globals['_CREATESANDBOXREQUEST']._serialized_end=3118 + _globals['_CREATESANDBOXREQUEST_LABELSENTRY']._serialized_start=2033 + _globals['_CREATESANDBOXREQUEST_LABELSENTRY']._serialized_end=2078 + _globals['_CREATESANDBOXREQUEST_ANNOTATIONSENTRY']._serialized_start=2080 + _globals['_CREATESANDBOXREQUEST_ANNOTATIONSENTRY']._serialized_end=2130 + _globals['_GETSANDBOXREQUEST']._serialized_start=3120 + _globals['_GETSANDBOXREQUEST']._serialized_end=3172 + _globals['_LISTSANDBOXESREQUEST']._serialized_start=3174 + _globals['_LISTSANDBOXESREQUEST']._serialized_end=3294 + _globals['_LISTSANDBOXPROVIDERSREQUEST']._serialized_start=3296 + _globals['_LISTSANDBOXPROVIDERSREQUEST']._serialized_end=3366 + _globals['_ATTACHSANDBOXPROVIDERREQUEST']._serialized_start=3369 + _globals['_ATTACHSANDBOXPROVIDERREQUEST']._serialized_end=3498 + _globals['_DETACHSANDBOXPROVIDERREQUEST']._serialized_start=3501 + _globals['_DETACHSANDBOXPROVIDERREQUEST']._serialized_end=3630 + _globals['_DELETESANDBOXREQUEST']._serialized_start=3632 + _globals['_DELETESANDBOXREQUEST']._serialized_end=3687 + _globals['_SANDBOXRESPONSE']._serialized_start=3689 + _globals['_SANDBOXRESPONSE']._serialized_end=3746 + _globals['_LISTSANDBOXESRESPONSE']._serialized_start=3748 + _globals['_LISTSANDBOXESRESPONSE']._serialized_end=3813 + _globals['_LISTSANDBOXPROVIDERSRESPONSE']._serialized_start=3815 + _globals['_LISTSANDBOXPROVIDERSRESPONSE']._serialized_end=3898 + _globals['_ATTACHSANDBOXPROVIDERRESPONSE']._serialized_start=3900 + _globals['_ATTACHSANDBOXPROVIDERRESPONSE']._serialized_end=3989 + _globals['_DETACHSANDBOXPROVIDERRESPONSE']._serialized_start=3991 + _globals['_DETACHSANDBOXPROVIDERRESPONSE']._serialized_end=4080 + _globals['_DELETESANDBOXRESPONSE']._serialized_start=4082 + _globals['_DELETESANDBOXRESPONSE']._serialized_end=4122 + _globals['_CREATESSHSESSIONREQUEST']._serialized_start=4124 + _globals['_CREATESSHSESSIONREQUEST']._serialized_end=4169 + _globals['_CREATESSHSESSIONRESPONSE']._serialized_start=4172 + _globals['_CREATESSHSESSIONRESPONSE']._serialized_end=4360 + _globals['_EXPOSESERVICEREQUEST']._serialized_start=4362 + _globals['_EXPOSESERVICEREQUEST']._serialized_end=4474 + _globals['_GETSERVICEREQUEST']._serialized_start=4476 + _globals['_GETSERVICEREQUEST']._serialized_end=4548 + _globals['_LISTSERVICESREQUEST']._serialized_start=4550 + _globals['_LISTSERVICESREQUEST']._serialized_end=4662 + _globals['_LISTSERVICESRESPONSE']._serialized_start=4664 + _globals['_LISTSERVICESRESPONSE']._serialized_end=4743 + _globals['_DELETESERVICEREQUEST']._serialized_start=4745 + _globals['_DELETESERVICEREQUEST']._serialized_end=4820 + _globals['_DELETESERVICERESPONSE']._serialized_start=4822 + _globals['_DELETESERVICERESPONSE']._serialized_end=4862 + _globals['_SERVICEENDPOINT']._serialized_start=4865 + _globals['_SERVICEENDPOINT']._serialized_end=5037 + _globals['_SERVICEENDPOINTRESPONSE']._serialized_start=5039 + _globals['_SERVICEENDPOINTRESPONSE']._serialized_end=5126 + _globals['_REVOKESSHSESSIONREQUEST']._serialized_start=5128 + _globals['_REVOKESSHSESSIONREQUEST']._serialized_end=5174 + _globals['_REVOKESSHSESSIONRESPONSE']._serialized_start=5176 + _globals['_REVOKESSHSESSIONRESPONSE']._serialized_end=5219 + _globals['_EXECSANDBOXREQUEST']._serialized_start=5222 + _globals['_EXECSANDBOXREQUEST']._serialized_end=5501 + _globals['_EXECSANDBOXREQUEST_ENVIRONMENTENTRY']._serialized_start=1396 + _globals['_EXECSANDBOXREQUEST_ENVIRONMENTENTRY']._serialized_end=1446 + _globals['_EXECSANDBOXSTDOUT']._serialized_start=5503 + _globals['_EXECSANDBOXSTDOUT']._serialized_end=5536 + _globals['_EXECSANDBOXSTDERR']._serialized_start=5538 + _globals['_EXECSANDBOXSTDERR']._serialized_end=5571 + _globals['_EXECSANDBOXEXIT']._serialized_start=5573 + _globals['_EXECSANDBOXEXIT']._serialized_end=5609 + _globals['_EXECSANDBOXEVENT']._serialized_start=5612 + _globals['_EXECSANDBOXEVENT']._serialized_end=5790 + _globals['_TCPFORWARDINIT']._serialized_start=5793 + _globals['_TCPFORWARDINIT']._serialized_end=5984 + _globals['_TCPFORWARDFRAME']._serialized_start=5986 + _globals['_TCPFORWARDFRAME']._serialized_end=6076 + _globals['_EXECSANDBOXINPUT']._serialized_start=6079 + _globals['_EXECSANDBOXINPUT']._serialized_end=6233 + _globals['_EXECSANDBOXWINDOWRESIZE']._serialized_start=6235 + _globals['_EXECSANDBOXWINDOWRESIZE']._serialized_end=6288 + _globals['_SSHSESSION']._serialized_start=6291 + _globals['_SSHSESSION']._serialized_end=6438 + _globals['_WATCHSANDBOXREQUEST']._serialized_start=6441 + _globals['_WATCHSANDBOXREQUEST']._serialized_end=6677 + _globals['_SANDBOXSTREAMEVENT']._serialized_start=6680 + _globals['_SANDBOXSTREAMEVENT']._serialized_end=6963 + _globals['_SANDBOXLOGLINE']._serialized_start=6966 + _globals['_SANDBOXLOGLINE']._serialized_end=7193 + _globals['_SANDBOXLOGLINE_FIELDSENTRY']._serialized_start=7148 + _globals['_SANDBOXLOGLINE_FIELDSENTRY']._serialized_end=7193 + _globals['_SANDBOXSTREAMWARNING']._serialized_start=7195 + _globals['_SANDBOXSTREAMWARNING']._serialized_end=7234 + _globals['_CREATEPROVIDERREQUEST']._serialized_start=7236 + _globals['_CREATEPROVIDERREQUEST']._serialized_end=7330 + _globals['_GETPROVIDERREQUEST']._serialized_start=7332 + _globals['_GETPROVIDERREQUEST']._serialized_end=7385 + _globals['_LISTPROVIDERSREQUEST']._serialized_start=7387 + _globals['_LISTPROVIDERSREQUEST']._serialized_end=7483 + _globals['_UPDATEPROVIDERREQUEST']._serialized_start=7486 + _globals['_UPDATEPROVIDERREQUEST']._serialized_end=7740 + _globals['_UPDATEPROVIDERREQUEST_CREDENTIALEXPIRESATMSENTRY']._serialized_start=7680 + _globals['_UPDATEPROVIDERREQUEST_CREDENTIALEXPIRESATMSENTRY']._serialized_end=7740 + _globals['_DELETEPROVIDERREQUEST']._serialized_start=7742 + _globals['_DELETEPROVIDERREQUEST']._serialized_end=7798 + _globals['_PROVIDERRESPONSE']._serialized_start=7800 + _globals['_PROVIDERRESPONSE']._serialized_end=7870 + _globals['_LISTPROVIDERSRESPONSE']._serialized_start=7872 + _globals['_LISTPROVIDERSRESPONSE']._serialized_end=7948 + _globals['_LISTPROVIDERPROFILESREQUEST']._serialized_start=7950 + _globals['_LISTPROVIDERPROFILESREQUEST']._serialized_end=8029 + _globals['_GETPROVIDERPROFILEREQUEST']._serialized_start=8031 + _globals['_GETPROVIDERPROFILEREQUEST']._serialized_end=8089 + _globals['_PROVIDERPROFILEIMPORTITEM']._serialized_start=8091 + _globals['_PROVIDERPROFILEIMPORTITEM']._serialized_end=8182 + _globals['_PROVIDERPROFILEDIAGNOSTIC']._serialized_start=8184 + _globals['_PROVIDERPROFILEDIAGNOSTIC']._serialized_end=8297 + _globals['_PROVIDERCREDENTIALTOKENGRANTAUDIENCEOVERRIDE']._serialized_start=8299 + _globals['_PROVIDERCREDENTIALTOKENGRANTAUDIENCEOVERRIDE']._serialized_end=8421 + _globals['_PROVIDERCREDENTIALTOKENGRANT']._serialized_start=8424 + _globals['_PROVIDERCREDENTIALTOKENGRANT']._serialized_end=8685 + _globals['_PROVIDERPROFILECREDENTIAL']._serialized_start=8688 + _globals['_PROVIDERPROFILECREDENTIAL']._serialized_end=8994 + _globals['_PROVIDERCREDENTIALREFRESHMATERIAL']._serialized_start=8996 + _globals['_PROVIDERCREDENTIALREFRESHMATERIAL']._serialized_end=9100 + _globals['_PROVIDERCREDENTIALREFRESHOUTPUT']._serialized_start=9102 + _globals['_PROVIDERCREDENTIALREFRESHOUTPUT']._serialized_end=9171 + _globals['_PROVIDERCREDENTIALREFRESH']._serialized_start=9174 + _globals['_PROVIDERCREDENTIALREFRESH']._serialized_end=9507 + _globals['_PROVIDERCREDENTIALREFRESHSTATUS']._serialized_start=9510 + _globals['_PROVIDERCREDENTIALREFRESHSTATUS']._serialized_end=9793 + _globals['_PROVIDERPROFILEDISCOVERY']._serialized_start=9795 + _globals['_PROVIDERPROFILEDISCOVERY']._serialized_end=9842 + _globals['_STOREDPROVIDERCREDENTIALREFRESHSTATE']._serialized_start=9845 + _globals['_STOREDPROVIDERCREDENTIALREFRESHSTATE']._serialized_end=10624 + _globals['_STOREDPROVIDERCREDENTIALREFRESHSTATE_MATERIALENTRY']._serialized_start=10516 + _globals['_STOREDPROVIDERCREDENTIALREFRESHSTATE_MATERIALENTRY']._serialized_end=10563 + _globals['_STOREDPROVIDERCREDENTIALREFRESHSTATE_ADDITIONALOUTPUTKEYSENTRY']._serialized_start=10565 + _globals['_STOREDPROVIDERCREDENTIALREFRESHSTATE_ADDITIONALOUTPUTKEYSENTRY']._serialized_end=10624 + _globals['_GETPROVIDERREFRESHSTATUSREQUEST']._serialized_start=10626 + _globals['_GETPROVIDERREFRESHSTATUSREQUEST']._serialized_end=10720 + _globals['_GETPROVIDERREFRESHSTATUSRESPONSE']._serialized_start=10722 + _globals['_GETPROVIDERREFRESHSTATUSRESPONSE']._serialized_end=10824 + _globals['_CONFIGUREPROVIDERREFRESHREQUEST']._serialized_start=10827 + _globals['_CONFIGUREPROVIDERREFRESHREQUEST']._serialized_end=11198 + _globals['_CONFIGUREPROVIDERREFRESHREQUEST_MATERIALENTRY']._serialized_start=10516 + _globals['_CONFIGUREPROVIDERREFRESHREQUEST_MATERIALENTRY']._serialized_end=10563 + _globals['_CONFIGUREPROVIDERREFRESHRESPONSE']._serialized_start=11200 + _globals['_CONFIGUREPROVIDERREFRESHRESPONSE']._serialized_end=11297 + _globals['_ROTATEPROVIDERCREDENTIALREQUEST']._serialized_start=11299 + _globals['_ROTATEPROVIDERCREDENTIALREQUEST']._serialized_end=11393 + _globals['_ROTATEPROVIDERCREDENTIALRESPONSE']._serialized_start=11395 + _globals['_ROTATEPROVIDERCREDENTIALRESPONSE']._serialized_end=11492 + _globals['_DELETEPROVIDERREFRESHREQUEST']._serialized_start=11494 + _globals['_DELETEPROVIDERREFRESHREQUEST']._serialized_end=11585 + _globals['_DELETEPROVIDERREFRESHRESPONSE']._serialized_start=11587 + _globals['_DELETEPROVIDERREFRESHRESPONSE']._serialized_end=11635 + _globals['_PROVIDERPROFILE']._serialized_start=11638 + _globals['_PROVIDERPROFILE']._serialized_end=12206 + _globals['_PROVIDERPROFILE_ANNOTATIONSENTRY']._serialized_start=2080 + _globals['_PROVIDERPROFILE_ANNOTATIONSENTRY']._serialized_end=2130 + _globals['_STOREDPROVIDERPROFILE']._serialized_start=12208 + _globals['_STOREDPROVIDERPROFILE']._serialized_end=12333 + _globals['_PROVIDERPROFILERESPONSE']._serialized_start=12335 + _globals['_PROVIDERPROFILERESPONSE']._serialized_end=12408 + _globals['_LISTPROVIDERPROFILESRESPONSE']._serialized_start=12410 + _globals['_LISTPROVIDERPROFILESRESPONSE']._serialized_end=12489 + _globals['_IMPORTPROVIDERPROFILESREQUEST']._serialized_start=12491 + _globals['_IMPORTPROVIDERPROFILESREQUEST']._serialized_end=12600 + _globals['_IMPORTPROVIDERPROFILESRESPONSE']._serialized_start=12603 + _globals['_IMPORTPROVIDERPROFILESRESPONSE']._serialized_end=12764 + _globals['_UPDATEPROVIDERPROFILESREQUEST']._serialized_start=12767 + _globals['_UPDATEPROVIDERPROFILESREQUEST']._serialized_end=12922 + _globals['_UPDATEPROVIDERPROFILESRESPONSE']._serialized_start=12925 + _globals['_UPDATEPROVIDERPROFILESRESPONSE']._serialized_end=13084 + _globals['_LINTPROVIDERPROFILESREQUEST']._serialized_start=13086 + _globals['_LINTPROVIDERPROFILESREQUEST']._serialized_end=13193 + _globals['_LINTPROVIDERPROFILESRESPONSE']._serialized_start=13195 + _globals['_LINTPROVIDERPROFILESRESPONSE']._serialized_end=13302 + _globals['_DELETEPROVIDERRESPONSE']._serialized_start=13304 + _globals['_DELETEPROVIDERRESPONSE']._serialized_end=13345 + _globals['_DELETEPROVIDERPROFILEREQUEST']._serialized_start=13347 + _globals['_DELETEPROVIDERPROFILEREQUEST']._serialized_end=13408 + _globals['_DELETEPROVIDERPROFILERESPONSE']._serialized_start=13410 + _globals['_DELETEPROVIDERPROFILERESPONSE']._serialized_end=13458 + _globals['_GETSANDBOXPROVIDERENVIRONMENTREQUEST']._serialized_start=13460 + _globals['_GETSANDBOXPROVIDERENVIRONMENTREQUEST']._serialized_end=13518 + _globals['_GETSANDBOXPROVIDERENVIRONMENTRESPONSE']._serialized_start=13521 + _globals['_GETSANDBOXPROVIDERENVIRONMENTRESPONSE']._serialized_end=14122 + _globals['_GETSANDBOXPROVIDERENVIRONMENTRESPONSE_ENVIRONMENTENTRY']._serialized_start=1396 + _globals['_GETSANDBOXPROVIDERENVIRONMENTRESPONSE_ENVIRONMENTENTRY']._serialized_end=1446 + _globals['_GETSANDBOXPROVIDERENVIRONMENTRESPONSE_CREDENTIALEXPIRESATMSENTRY']._serialized_start=7680 + _globals['_GETSANDBOXPROVIDERENVIRONMENTRESPONSE_CREDENTIALEXPIRESATMSENTRY']._serialized_end=7740 + _globals['_GETSANDBOXPROVIDERENVIRONMENTRESPONSE_DYNAMICCREDENTIALSENTRY']._serialized_start=14024 + _globals['_GETSANDBOXPROVIDERENVIRONMENTRESPONSE_DYNAMICCREDENTIALSENTRY']._serialized_end=14122 + _globals['_UPDATECONFIGREQUEST']._serialized_start=14125 + _globals['_UPDATECONFIGREQUEST']._serialized_end=14574 + _globals['_UPDATECONFIGREQUEST_ANNOTATIONSENTRY']._serialized_start=2080 + _globals['_UPDATECONFIGREQUEST_ANNOTATIONSENTRY']._serialized_end=2130 + _globals['_POLICYMERGEOPERATION']._serialized_start=14577 + _globals['_POLICYMERGEOPERATION']._serialized_end=14952 + _globals['_ADDNETWORKRULE']._serialized_start=14954 + _globals['_ADDNETWORKRULE']._serialized_end=15044 + _globals['_REMOVENETWORKENDPOINT']._serialized_start=15046 + _globals['_REMOVENETWORKENDPOINT']._serialized_end=15116 + _globals['_REMOVENETWORKRULE']._serialized_start=15118 + _globals['_REMOVENETWORKRULE']._serialized_end=15156 + _globals['_ADDDENYRULES']._serialized_start=15158 + _globals['_ADDDENYRULES']._serialized_end=15254 + _globals['_ADDALLOWRULES']._serialized_start=15256 + _globals['_ADDALLOWRULES']._serialized_end=15344 + _globals['_REMOVENETWORKBINARY']._serialized_start=15346 + _globals['_REMOVENETWORKBINARY']._serialized_end=15407 + _globals['_UPDATECONFIGRESPONSE']._serialized_start=15410 + _globals['_UPDATECONFIGRESPONSE']._serialized_end=15640 + _globals['_UPDATECONFIGRESPONSE_ANNOTATIONSENTRY']._serialized_start=2080 + _globals['_UPDATECONFIGRESPONSE_ANNOTATIONSENTRY']._serialized_end=2130 + _globals['_GETSANDBOXPOLICYSTATUSREQUEST']._serialized_start=15642 + _globals['_GETSANDBOXPOLICYSTATUSREQUEST']._serialized_end=15739 + _globals['_GETSANDBOXPOLICYSTATUSRESPONSE']._serialized_start=15741 + _globals['_GETSANDBOXPOLICYSTATUSRESPONSE']._serialized_end=15852 + _globals['_LISTSANDBOXPOLICIESREQUEST']._serialized_start=15854 + _globals['_LISTSANDBOXPOLICIESREQUEST']._serialized_end=15962 + _globals['_LISTSANDBOXPOLICIESRESPONSE']._serialized_start=15964 + _globals['_LISTSANDBOXPOLICIESRESPONSE']._serialized_end=16049 + _globals['_REPORTPOLICYSTATUSREQUEST']._serialized_start=16052 + _globals['_REPORTPOLICYSTATUSREQUEST']._serialized_end=16180 + _globals['_REPORTPOLICYSTATUSRESPONSE']._serialized_start=16182 + _globals['_REPORTPOLICYSTATUSRESPONSE']._serialized_end=16210 + _globals['_SANDBOXPOLICYREVISION']._serialized_start=16213 + _globals['_SANDBOXPOLICYREVISION']._serialized_end=16560 + _globals['_SANDBOXPOLICYREVISION_PROVENANCEENTRY']._serialized_start=16511 + _globals['_SANDBOXPOLICYREVISION_PROVENANCEENTRY']._serialized_end=16560 + _globals['_GETSANDBOXLOGSREQUEST']._serialized_start=16563 + _globals['_GETSANDBOXLOGSREQUEST']._serialized_end=16694 + _globals['_PUSHSANDBOXLOGSREQUEST']._serialized_start=16696 + _globals['_PUSHSANDBOXLOGSREQUEST']._serialized_end=16784 + _globals['_PUSHSANDBOXLOGSRESPONSE']._serialized_start=16786 + _globals['_PUSHSANDBOXLOGSRESPONSE']._serialized_end=16811 + _globals['_GETSANDBOXLOGSRESPONSE']._serialized_start=16813 + _globals['_GETSANDBOXLOGSRESPONSE']._serialized_end=16903 + _globals['_SUPERVISORMESSAGE']._serialized_start=16906 + _globals['_SUPERVISORMESSAGE']._serialized_end=17149 + _globals['_GATEWAYMESSAGE']._serialized_start=17152 + _globals['_GATEWAYMESSAGE']._serialized_end=17446 + _globals['_SUPERVISORHELLO']._serialized_start=17448 + _globals['_SUPERVISORHELLO']._serialized_end=17506 + _globals['_SESSIONACCEPTED']._serialized_start=17508 + _globals['_SESSIONACCEPTED']._serialized_end=17578 + _globals['_SESSIONREJECTED']._serialized_start=17580 + _globals['_SESSIONREJECTED']._serialized_end=17613 + _globals['_SUPERVISORHEARTBEAT']._serialized_start=17615 + _globals['_SUPERVISORHEARTBEAT']._serialized_end=17636 + _globals['_GATEWAYHEARTBEAT']._serialized_start=17638 + _globals['_GATEWAYHEARTBEAT']._serialized_end=17656 + _globals['_RELAYOPEN']._serialized_start=17659 + _globals['_RELAYOPEN']._serialized_end=17810 + _globals['_SSHRELAYTARGET']._serialized_start=17812 + _globals['_SSHRELAYTARGET']._serialized_end=17828 + _globals['_TCPRELAYTARGET']._serialized_start=17830 + _globals['_TCPRELAYTARGET']._serialized_end=17874 + _globals['_RELAYINIT']._serialized_start=17876 + _globals['_RELAYINIT']._serialized_end=17907 + _globals['_RELAYFRAME']._serialized_start=17909 + _globals['_RELAYFRAME']._serialized_end=17989 + _globals['_RELAYOPENRESULT']._serialized_start=17991 + _globals['_RELAYOPENRESULT']._serialized_end=18060 + _globals['_RELAYCLOSE']._serialized_start=18062 + _globals['_RELAYCLOSE']._serialized_end=18110 + _globals['_L7REQUESTSAMPLE']._serialized_start=18112 + _globals['_L7REQUESTSAMPLE']._serialized_end=18192 + _globals['_DENIALSUMMARY']._serialized_start=18195 + _globals['_DENIALSUMMARY']._serialized_end=18600 + _globals['_DENIALGROUPCOUNT']._serialized_start=18602 + _globals['_DENIALGROUPCOUNT']._serialized_end=18662 + _globals['_NETWORKACTIVITYSUMMARY']._serialized_start=18665 + _globals['_NETWORKACTIVITYSUMMARY']._serialized_end=18808 + _globals['_POLICYCHUNK']._serialized_start=18811 + _globals['_POLICYCHUNK']._serialized_end=19249 + _globals['_DRAFTPOLICYUPDATE']._serialized_start=19251 + _globals['_DRAFTPOLICYUPDATE']._serialized_end=19353 + _globals['_SUBMITPOLICYANALYSISREQUEST']._serialized_start=19356 + _globals['_SUBMITPOLICYANALYSISREQUEST']._serialized_end=19615 + _globals['_SUBMITPOLICYANALYSISRESPONSE']._serialized_start=19618 + _globals['_SUBMITPOLICYANALYSISRESPONSE']._serialized_end=19753 + _globals['_GETDRAFTPOLICYREQUEST']._serialized_start=19755 + _globals['_GETDRAFTPOLICYREQUEST']._serialized_end=19834 + _globals['_GETDRAFTPOLICYRESPONSE']._serialized_start=19837 + _globals['_GETDRAFTPOLICYRESPONSE']._serialized_end=19981 + _globals['_APPROVEDRAFTCHUNKREQUEST']._serialized_start=19983 + _globals['_APPROVEDRAFTCHUNKREQUEST']._serialized_end=20060 + _globals['_APPROVEDRAFTCHUNKRESPONSE']._serialized_start=20062 + _globals['_APPROVEDRAFTCHUNKRESPONSE']._serialized_end=20134 + _globals['_REJECTDRAFTCHUNKREQUEST']._serialized_start=20136 + _globals['_REJECTDRAFTCHUNKREQUEST']._serialized_end=20228 + _globals['_REJECTDRAFTCHUNKRESPONSE']._serialized_start=20230 + _globals['_REJECTDRAFTCHUNKRESPONSE']._serialized_end=20256 + _globals['_APPROVEALLDRAFTCHUNKSREQUEST']._serialized_start=20258 + _globals['_APPROVEALLDRAFTCHUNKSREQUEST']._serialized_end=20355 + _globals['_APPROVEALLDRAFTCHUNKSRESPONSE']._serialized_start=20357 + _globals['_APPROVEALLDRAFTCHUNKSRESPONSE']._serialized_end=20482 + _globals['_EDITDRAFTCHUNKREQUEST']._serialized_start=20485 + _globals['_EDITDRAFTCHUNKREQUEST']._serialized_end=20623 + _globals['_EDITDRAFTCHUNKRESPONSE']._serialized_start=20625 + _globals['_EDITDRAFTCHUNKRESPONSE']._serialized_end=20649 + _globals['_UNDODRAFTCHUNKREQUEST']._serialized_start=20651 + _globals['_UNDODRAFTCHUNKREQUEST']._serialized_end=20725 + _globals['_UNDODRAFTCHUNKRESPONSE']._serialized_start=20727 + _globals['_UNDODRAFTCHUNKRESPONSE']._serialized_end=20796 + _globals['_CLEARDRAFTCHUNKSREQUEST']._serialized_start=20798 + _globals['_CLEARDRAFTCHUNKSREQUEST']._serialized_end=20856 + _globals['_CLEARDRAFTCHUNKSRESPONSE']._serialized_start=20858 + _globals['_CLEARDRAFTCHUNKSRESPONSE']._serialized_end=20908 + _globals['_GETDRAFTHISTORYREQUEST']._serialized_start=20910 + _globals['_GETDRAFTHISTORYREQUEST']._serialized_end=20967 + _globals['_DRAFTHISTORYENTRY']._serialized_start=20969 + _globals['_DRAFTHISTORYENTRY']._serialized_end=21069 + _globals['_GETDRAFTHISTORYRESPONSE']._serialized_start=21071 + _globals['_GETDRAFTHISTORYRESPONSE']._serialized_end=21146 + _globals['_POLICYREVISIONPAYLOAD']._serialized_start=21149 + _globals['_POLICYREVISIONPAYLOAD']._serialized_end=21405 + _globals['_POLICYREVISIONPAYLOAD_PROVENANCEENTRY']._serialized_start=16511 + _globals['_POLICYREVISIONPAYLOAD_PROVENANCEENTRY']._serialized_end=16560 + _globals['_DRAFTCHUNKPAYLOAD']._serialized_start=21408 + _globals['_DRAFTCHUNKPAYLOAD']._serialized_end=21716 + _globals['_STOREDPOLICYREVISION']._serialized_start=21719 + _globals['_STOREDPOLICYREVISION']._serialized_end=22081 + _globals['_STOREDPOLICYREVISION_PROVENANCEENTRY']._serialized_start=16511 + _globals['_STOREDPOLICYREVISION_PROVENANCEENTRY']._serialized_end=16560 + _globals['_STOREDDRAFTCHUNK']._serialized_start=22084 + _globals['_STOREDDRAFTCHUNK']._serialized_end=22508 + _globals['_CREATEWORKSPACEREQUEST']._serialized_start=22511 + _globals['_CREATEWORKSPACEREQUEST']._serialized_end=22662 + _globals['_CREATEWORKSPACEREQUEST_LABELSENTRY']._serialized_start=2033 + _globals['_CREATEWORKSPACEREQUEST_LABELSENTRY']._serialized_end=2078 + _globals['_CREATEWORKSPACERESPONSE']._serialized_start=22664 + _globals['_CREATEWORKSPACERESPONSE']._serialized_end=22743 + _globals['_GETWORKSPACEREQUEST']._serialized_start=22745 + _globals['_GETWORKSPACEREQUEST']._serialized_end=22780 + _globals['_GETWORKSPACERESPONSE']._serialized_start=22782 + _globals['_GETWORKSPACERESPONSE']._serialized_end=22858 + _globals['_LISTWORKSPACESREQUEST']._serialized_start=22860 + _globals['_LISTWORKSPACESREQUEST']._serialized_end=22938 + _globals['_LISTWORKSPACESRESPONSE']._serialized_start=22940 + _globals['_LISTWORKSPACESRESPONSE']._serialized_end=23019 + _globals['_DELETEWORKSPACEREQUEST']._serialized_start=23021 + _globals['_DELETEWORKSPACEREQUEST']._serialized_end=23059 + _globals['_DELETEWORKSPACERESPONSE']._serialized_start=23061 + _globals['_DELETEWORKSPACERESPONSE']._serialized_end=23103 + _globals['_WORKSPACEMEMBER']._serialized_start=23106 + _globals['_WORKSPACEMEMBER']._serialized_end=23247 + _globals['_ADDWORKSPACEMEMBERREQUEST']._serialized_start=23249 + _globals['_ADDWORKSPACEMEMBERREQUEST']._serialized_end=23365 + _globals['_ADDWORKSPACEMEMBERRESPONSE']._serialized_start=23367 + _globals['_ADDWORKSPACEMEMBERRESPONSE']._serialized_end=23442 + _globals['_REMOVEWORKSPACEMEMBERREQUEST']._serialized_start=23444 + _globals['_REMOVEWORKSPACEMEMBERREQUEST']._serialized_end=23520 + _globals['_REMOVEWORKSPACEMEMBERRESPONSE']._serialized_start=23522 + _globals['_REMOVEWORKSPACEMEMBERRESPONSE']._serialized_end=23570 + _globals['_LISTWORKSPACEMEMBERSREQUEST']._serialized_start=23572 + _globals['_LISTWORKSPACEMEMBERSREQUEST']._serialized_end=23651 + _globals['_LISTWORKSPACEMEMBERSRESPONSE']._serialized_start=23653 + _globals['_LISTWORKSPACEMEMBERSRESPONSE']._serialized_end=23731 + _globals['_OPENSHELL']._serialized_start=25117 + _globals['_OPENSHELL']._serialized_end=33609 +# @@protoc_insertion_point(module_scope) diff --git a/python/openshell/_proto/openshell_pb2.pyi b/python/openshell/_proto/openshell_pb2.pyi new file mode 100644 index 0000000000..b5a9050f88 --- /dev/null +++ b/python/openshell/_proto/openshell_pb2.pyi @@ -0,0 +1,2170 @@ +import datamodel_pb2 as _datamodel_pb2 +from google.protobuf import struct_pb2 as _struct_pb2 +import options_pb2 as _options_pb2 +import sandbox_pb2 as _sandbox_pb2 +from google.protobuf.internal import containers as _containers +from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from collections.abc import Iterable as _Iterable, Mapping as _Mapping +from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union + +DESCRIPTOR: _descriptor.FileDescriptor + +class SandboxPhase(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + SANDBOX_PHASE_UNSPECIFIED: _ClassVar[SandboxPhase] + SANDBOX_PHASE_PROVISIONING: _ClassVar[SandboxPhase] + SANDBOX_PHASE_READY: _ClassVar[SandboxPhase] + SANDBOX_PHASE_ERROR: _ClassVar[SandboxPhase] + SANDBOX_PHASE_DELETING: _ClassVar[SandboxPhase] + SANDBOX_PHASE_UNKNOWN: _ClassVar[SandboxPhase] + +class ProviderCredentialRefreshStrategy(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + PROVIDER_CREDENTIAL_REFRESH_STRATEGY_UNSPECIFIED: _ClassVar[ProviderCredentialRefreshStrategy] + PROVIDER_CREDENTIAL_REFRESH_STRATEGY_STATIC: _ClassVar[ProviderCredentialRefreshStrategy] + PROVIDER_CREDENTIAL_REFRESH_STRATEGY_EXTERNAL: _ClassVar[ProviderCredentialRefreshStrategy] + PROVIDER_CREDENTIAL_REFRESH_STRATEGY_OAUTH2_REFRESH_TOKEN: _ClassVar[ProviderCredentialRefreshStrategy] + PROVIDER_CREDENTIAL_REFRESH_STRATEGY_OAUTH2_CLIENT_CREDENTIALS: _ClassVar[ProviderCredentialRefreshStrategy] + PROVIDER_CREDENTIAL_REFRESH_STRATEGY_GOOGLE_SERVICE_ACCOUNT_JWT: _ClassVar[ProviderCredentialRefreshStrategy] + PROVIDER_CREDENTIAL_REFRESH_STRATEGY_AWS_STS_ASSUME_ROLE: _ClassVar[ProviderCredentialRefreshStrategy] + +class ProviderProfileCategory(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + PROVIDER_PROFILE_CATEGORY_UNSPECIFIED: _ClassVar[ProviderProfileCategory] + PROVIDER_PROFILE_CATEGORY_OTHER: _ClassVar[ProviderProfileCategory] + PROVIDER_PROFILE_CATEGORY_INFERENCE: _ClassVar[ProviderProfileCategory] + PROVIDER_PROFILE_CATEGORY_AGENT: _ClassVar[ProviderProfileCategory] + PROVIDER_PROFILE_CATEGORY_SOURCE_CONTROL: _ClassVar[ProviderProfileCategory] + PROVIDER_PROFILE_CATEGORY_MESSAGING: _ClassVar[ProviderProfileCategory] + PROVIDER_PROFILE_CATEGORY_DATA: _ClassVar[ProviderProfileCategory] + PROVIDER_PROFILE_CATEGORY_KNOWLEDGE: _ClassVar[ProviderProfileCategory] + +class PolicyStatus(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + POLICY_STATUS_UNSPECIFIED: _ClassVar[PolicyStatus] + POLICY_STATUS_PENDING: _ClassVar[PolicyStatus] + POLICY_STATUS_LOADED: _ClassVar[PolicyStatus] + POLICY_STATUS_FAILED: _ClassVar[PolicyStatus] + POLICY_STATUS_SUPERSEDED: _ClassVar[PolicyStatus] + +class ServiceStatus(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + SERVICE_STATUS_UNSPECIFIED: _ClassVar[ServiceStatus] + SERVICE_STATUS_HEALTHY: _ClassVar[ServiceStatus] + SERVICE_STATUS_DEGRADED: _ClassVar[ServiceStatus] + SERVICE_STATUS_UNHEALTHY: _ClassVar[ServiceStatus] + +class WorkspaceRole(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + WORKSPACE_ROLE_UNSPECIFIED: _ClassVar[WorkspaceRole] + WORKSPACE_ROLE_USER: _ClassVar[WorkspaceRole] + WORKSPACE_ROLE_ADMIN: _ClassVar[WorkspaceRole] +SANDBOX_PHASE_UNSPECIFIED: SandboxPhase +SANDBOX_PHASE_PROVISIONING: SandboxPhase +SANDBOX_PHASE_READY: SandboxPhase +SANDBOX_PHASE_ERROR: SandboxPhase +SANDBOX_PHASE_DELETING: SandboxPhase +SANDBOX_PHASE_UNKNOWN: SandboxPhase +PROVIDER_CREDENTIAL_REFRESH_STRATEGY_UNSPECIFIED: ProviderCredentialRefreshStrategy +PROVIDER_CREDENTIAL_REFRESH_STRATEGY_STATIC: ProviderCredentialRefreshStrategy +PROVIDER_CREDENTIAL_REFRESH_STRATEGY_EXTERNAL: ProviderCredentialRefreshStrategy +PROVIDER_CREDENTIAL_REFRESH_STRATEGY_OAUTH2_REFRESH_TOKEN: ProviderCredentialRefreshStrategy +PROVIDER_CREDENTIAL_REFRESH_STRATEGY_OAUTH2_CLIENT_CREDENTIALS: ProviderCredentialRefreshStrategy +PROVIDER_CREDENTIAL_REFRESH_STRATEGY_GOOGLE_SERVICE_ACCOUNT_JWT: ProviderCredentialRefreshStrategy +PROVIDER_CREDENTIAL_REFRESH_STRATEGY_AWS_STS_ASSUME_ROLE: ProviderCredentialRefreshStrategy +PROVIDER_PROFILE_CATEGORY_UNSPECIFIED: ProviderProfileCategory +PROVIDER_PROFILE_CATEGORY_OTHER: ProviderProfileCategory +PROVIDER_PROFILE_CATEGORY_INFERENCE: ProviderProfileCategory +PROVIDER_PROFILE_CATEGORY_AGENT: ProviderProfileCategory +PROVIDER_PROFILE_CATEGORY_SOURCE_CONTROL: ProviderProfileCategory +PROVIDER_PROFILE_CATEGORY_MESSAGING: ProviderProfileCategory +PROVIDER_PROFILE_CATEGORY_DATA: ProviderProfileCategory +PROVIDER_PROFILE_CATEGORY_KNOWLEDGE: ProviderProfileCategory +POLICY_STATUS_UNSPECIFIED: PolicyStatus +POLICY_STATUS_PENDING: PolicyStatus +POLICY_STATUS_LOADED: PolicyStatus +POLICY_STATUS_FAILED: PolicyStatus +POLICY_STATUS_SUPERSEDED: PolicyStatus +SERVICE_STATUS_UNSPECIFIED: ServiceStatus +SERVICE_STATUS_HEALTHY: ServiceStatus +SERVICE_STATUS_DEGRADED: ServiceStatus +SERVICE_STATUS_UNHEALTHY: ServiceStatus +WORKSPACE_ROLE_UNSPECIFIED: WorkspaceRole +WORKSPACE_ROLE_USER: WorkspaceRole +WORKSPACE_ROLE_ADMIN: WorkspaceRole + +class IssueSandboxTokenRequest(_message.Message): + __slots__ = () + def __init__(self) -> None: ... + +class IssueSandboxTokenResponse(_message.Message): + __slots__ = ("token", "expires_at_ms") + TOKEN_FIELD_NUMBER: _ClassVar[int] + EXPIRES_AT_MS_FIELD_NUMBER: _ClassVar[int] + token: str + expires_at_ms: int + def __init__(self, token: _Optional[str] = ..., expires_at_ms: _Optional[int] = ...) -> None: ... + +class RefreshSandboxTokenRequest(_message.Message): + __slots__ = () + def __init__(self) -> None: ... + +class RefreshSandboxTokenResponse(_message.Message): + __slots__ = ("token", "expires_at_ms") + TOKEN_FIELD_NUMBER: _ClassVar[int] + EXPIRES_AT_MS_FIELD_NUMBER: _ClassVar[int] + token: str + expires_at_ms: int + def __init__(self, token: _Optional[str] = ..., expires_at_ms: _Optional[int] = ...) -> None: ... + +class HealthRequest(_message.Message): + __slots__ = () + def __init__(self) -> None: ... + +class HealthResponse(_message.Message): + __slots__ = ("status", "version") + STATUS_FIELD_NUMBER: _ClassVar[int] + VERSION_FIELD_NUMBER: _ClassVar[int] + status: ServiceStatus + version: str + def __init__(self, status: _Optional[_Union[ServiceStatus, str]] = ..., version: _Optional[str] = ...) -> None: ... + +class GetCurrentUserRequest(_message.Message): + __slots__ = () + def __init__(self) -> None: ... + +class GetCurrentUserResponse(_message.Message): + __slots__ = ("subject", "display_name", "roles", "scopes", "identity_provider") + SUBJECT_FIELD_NUMBER: _ClassVar[int] + DISPLAY_NAME_FIELD_NUMBER: _ClassVar[int] + ROLES_FIELD_NUMBER: _ClassVar[int] + SCOPES_FIELD_NUMBER: _ClassVar[int] + IDENTITY_PROVIDER_FIELD_NUMBER: _ClassVar[int] + subject: str + display_name: str + roles: _containers.RepeatedScalarFieldContainer[str] + scopes: _containers.RepeatedScalarFieldContainer[str] + identity_provider: str + def __init__(self, subject: _Optional[str] = ..., display_name: _Optional[str] = ..., roles: _Optional[_Iterable[str]] = ..., scopes: _Optional[_Iterable[str]] = ..., identity_provider: _Optional[str] = ...) -> None: ... + +class GetGatewayInfoRequest(_message.Message): + __slots__ = () + def __init__(self) -> None: ... + +class GetGatewayInfoResponse(_message.Message): + __slots__ = ("status", "gateway_version", "compute_drivers") + STATUS_FIELD_NUMBER: _ClassVar[int] + GATEWAY_VERSION_FIELD_NUMBER: _ClassVar[int] + COMPUTE_DRIVERS_FIELD_NUMBER: _ClassVar[int] + status: ServiceStatus + gateway_version: str + compute_drivers: _containers.RepeatedCompositeFieldContainer[ComputeDriverInfo] + def __init__(self, status: _Optional[_Union[ServiceStatus, str]] = ..., gateway_version: _Optional[str] = ..., compute_drivers: _Optional[_Iterable[_Union[ComputeDriverInfo, _Mapping]]] = ...) -> None: ... + +class ComputeDriverInfo(_message.Message): + __slots__ = ("name", "capabilities") + NAME_FIELD_NUMBER: _ClassVar[int] + CAPABILITIES_FIELD_NUMBER: _ClassVar[int] + name: str + capabilities: ComputeDriverCapabilities + def __init__(self, name: _Optional[str] = ..., capabilities: _Optional[_Union[ComputeDriverCapabilities, _Mapping]] = ...) -> None: ... + +class ComputeDriverCapabilities(_message.Message): + __slots__ = ("driver_name", "driver_version") + DRIVER_NAME_FIELD_NUMBER: _ClassVar[int] + DRIVER_VERSION_FIELD_NUMBER: _ClassVar[int] + driver_name: str + driver_version: str + def __init__(self, driver_name: _Optional[str] = ..., driver_version: _Optional[str] = ...) -> None: ... + +class Sandbox(_message.Message): + __slots__ = ("metadata", "spec", "status") + METADATA_FIELD_NUMBER: _ClassVar[int] + SPEC_FIELD_NUMBER: _ClassVar[int] + STATUS_FIELD_NUMBER: _ClassVar[int] + metadata: _datamodel_pb2.ObjectMeta + spec: SandboxSpec + status: SandboxStatus + def __init__(self, metadata: _Optional[_Union[_datamodel_pb2.ObjectMeta, _Mapping]] = ..., spec: _Optional[_Union[SandboxSpec, _Mapping]] = ..., status: _Optional[_Union[SandboxStatus, _Mapping]] = ...) -> None: ... + +class SandboxSpec(_message.Message): + __slots__ = ("log_level", "environment", "template", "policy", "providers", "resource_requirements") + class EnvironmentEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: str + def __init__(self, key: _Optional[str] = ..., value: _Optional[str] = ...) -> None: ... + LOG_LEVEL_FIELD_NUMBER: _ClassVar[int] + ENVIRONMENT_FIELD_NUMBER: _ClassVar[int] + TEMPLATE_FIELD_NUMBER: _ClassVar[int] + POLICY_FIELD_NUMBER: _ClassVar[int] + PROVIDERS_FIELD_NUMBER: _ClassVar[int] + RESOURCE_REQUIREMENTS_FIELD_NUMBER: _ClassVar[int] + log_level: str + environment: _containers.ScalarMap[str, str] + template: SandboxTemplate + policy: _sandbox_pb2.SandboxPolicy + providers: _containers.RepeatedScalarFieldContainer[str] + resource_requirements: ResourceRequirements + def __init__(self, log_level: _Optional[str] = ..., environment: _Optional[_Mapping[str, str]] = ..., template: _Optional[_Union[SandboxTemplate, _Mapping]] = ..., policy: _Optional[_Union[_sandbox_pb2.SandboxPolicy, _Mapping]] = ..., providers: _Optional[_Iterable[str]] = ..., resource_requirements: _Optional[_Union[ResourceRequirements, _Mapping]] = ...) -> None: ... + +class ResourceRequirements(_message.Message): + __slots__ = ("gpu",) + GPU_FIELD_NUMBER: _ClassVar[int] + gpu: GpuResourceRequirements + def __init__(self, gpu: _Optional[_Union[GpuResourceRequirements, _Mapping]] = ...) -> None: ... + +class GpuResourceRequirements(_message.Message): + __slots__ = ("count",) + COUNT_FIELD_NUMBER: _ClassVar[int] + count: int + def __init__(self, count: _Optional[int] = ...) -> None: ... + +class SandboxTemplate(_message.Message): + __slots__ = ("image", "runtime_class_name", "agent_socket", "labels", "annotations", "environment", "resources", "user_namespaces", "driver_config") + class LabelsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: str + def __init__(self, key: _Optional[str] = ..., value: _Optional[str] = ...) -> None: ... + class AnnotationsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: str + def __init__(self, key: _Optional[str] = ..., value: _Optional[str] = ...) -> None: ... + class EnvironmentEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: str + def __init__(self, key: _Optional[str] = ..., value: _Optional[str] = ...) -> None: ... + IMAGE_FIELD_NUMBER: _ClassVar[int] + RUNTIME_CLASS_NAME_FIELD_NUMBER: _ClassVar[int] + AGENT_SOCKET_FIELD_NUMBER: _ClassVar[int] + LABELS_FIELD_NUMBER: _ClassVar[int] + ANNOTATIONS_FIELD_NUMBER: _ClassVar[int] + ENVIRONMENT_FIELD_NUMBER: _ClassVar[int] + RESOURCES_FIELD_NUMBER: _ClassVar[int] + USER_NAMESPACES_FIELD_NUMBER: _ClassVar[int] + DRIVER_CONFIG_FIELD_NUMBER: _ClassVar[int] + image: str + runtime_class_name: str + agent_socket: str + labels: _containers.ScalarMap[str, str] + annotations: _containers.ScalarMap[str, str] + environment: _containers.ScalarMap[str, str] + resources: _struct_pb2.Struct + user_namespaces: bool + driver_config: _struct_pb2.Struct + def __init__(self, image: _Optional[str] = ..., runtime_class_name: _Optional[str] = ..., agent_socket: _Optional[str] = ..., labels: _Optional[_Mapping[str, str]] = ..., annotations: _Optional[_Mapping[str, str]] = ..., environment: _Optional[_Mapping[str, str]] = ..., resources: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ..., user_namespaces: bool = ..., driver_config: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ...) -> None: ... + +class SandboxStatus(_message.Message): + __slots__ = ("sandbox_name", "agent_pod", "agent_fd", "sandbox_fd", "conditions", "phase", "current_policy_version") + SANDBOX_NAME_FIELD_NUMBER: _ClassVar[int] + AGENT_POD_FIELD_NUMBER: _ClassVar[int] + AGENT_FD_FIELD_NUMBER: _ClassVar[int] + SANDBOX_FD_FIELD_NUMBER: _ClassVar[int] + CONDITIONS_FIELD_NUMBER: _ClassVar[int] + PHASE_FIELD_NUMBER: _ClassVar[int] + CURRENT_POLICY_VERSION_FIELD_NUMBER: _ClassVar[int] + sandbox_name: str + agent_pod: str + agent_fd: str + sandbox_fd: str + conditions: _containers.RepeatedCompositeFieldContainer[SandboxCondition] + phase: SandboxPhase + current_policy_version: int + def __init__(self, sandbox_name: _Optional[str] = ..., agent_pod: _Optional[str] = ..., agent_fd: _Optional[str] = ..., sandbox_fd: _Optional[str] = ..., conditions: _Optional[_Iterable[_Union[SandboxCondition, _Mapping]]] = ..., phase: _Optional[_Union[SandboxPhase, str]] = ..., current_policy_version: _Optional[int] = ...) -> None: ... + +class SandboxCondition(_message.Message): + __slots__ = ("type", "status", "reason", "message", "last_transition_time") + TYPE_FIELD_NUMBER: _ClassVar[int] + STATUS_FIELD_NUMBER: _ClassVar[int] + REASON_FIELD_NUMBER: _ClassVar[int] + MESSAGE_FIELD_NUMBER: _ClassVar[int] + LAST_TRANSITION_TIME_FIELD_NUMBER: _ClassVar[int] + type: str + status: str + reason: str + message: str + last_transition_time: str + def __init__(self, type: _Optional[str] = ..., status: _Optional[str] = ..., reason: _Optional[str] = ..., message: _Optional[str] = ..., last_transition_time: _Optional[str] = ...) -> None: ... + +class PlatformEvent(_message.Message): + __slots__ = ("timestamp_ms", "source", "type", "reason", "message", "metadata") + class MetadataEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: str + def __init__(self, key: _Optional[str] = ..., value: _Optional[str] = ...) -> None: ... + TIMESTAMP_MS_FIELD_NUMBER: _ClassVar[int] + SOURCE_FIELD_NUMBER: _ClassVar[int] + TYPE_FIELD_NUMBER: _ClassVar[int] + REASON_FIELD_NUMBER: _ClassVar[int] + MESSAGE_FIELD_NUMBER: _ClassVar[int] + METADATA_FIELD_NUMBER: _ClassVar[int] + timestamp_ms: int + source: str + type: str + reason: str + message: str + metadata: _containers.ScalarMap[str, str] + def __init__(self, timestamp_ms: _Optional[int] = ..., source: _Optional[str] = ..., type: _Optional[str] = ..., reason: _Optional[str] = ..., message: _Optional[str] = ..., metadata: _Optional[_Mapping[str, str]] = ...) -> None: ... + +class CreateSandboxRequest(_message.Message): + __slots__ = ("spec", "name", "labels", "annotations", "workspace") + class LabelsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: str + def __init__(self, key: _Optional[str] = ..., value: _Optional[str] = ...) -> None: ... + class AnnotationsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: str + def __init__(self, key: _Optional[str] = ..., value: _Optional[str] = ...) -> None: ... + SPEC_FIELD_NUMBER: _ClassVar[int] + NAME_FIELD_NUMBER: _ClassVar[int] + LABELS_FIELD_NUMBER: _ClassVar[int] + ANNOTATIONS_FIELD_NUMBER: _ClassVar[int] + WORKSPACE_FIELD_NUMBER: _ClassVar[int] + spec: SandboxSpec + name: str + labels: _containers.ScalarMap[str, str] + annotations: _containers.ScalarMap[str, str] + workspace: str + def __init__(self, spec: _Optional[_Union[SandboxSpec, _Mapping]] = ..., name: _Optional[str] = ..., labels: _Optional[_Mapping[str, str]] = ..., annotations: _Optional[_Mapping[str, str]] = ..., workspace: _Optional[str] = ...) -> None: ... + +class GetSandboxRequest(_message.Message): + __slots__ = ("name", "workspace") + NAME_FIELD_NUMBER: _ClassVar[int] + WORKSPACE_FIELD_NUMBER: _ClassVar[int] + name: str + workspace: str + def __init__(self, name: _Optional[str] = ..., workspace: _Optional[str] = ...) -> None: ... + +class ListSandboxesRequest(_message.Message): + __slots__ = ("limit", "offset", "label_selector", "workspace", "all_workspaces") + LIMIT_FIELD_NUMBER: _ClassVar[int] + OFFSET_FIELD_NUMBER: _ClassVar[int] + LABEL_SELECTOR_FIELD_NUMBER: _ClassVar[int] + WORKSPACE_FIELD_NUMBER: _ClassVar[int] + ALL_WORKSPACES_FIELD_NUMBER: _ClassVar[int] + limit: int + offset: int + label_selector: str + workspace: str + all_workspaces: bool + def __init__(self, limit: _Optional[int] = ..., offset: _Optional[int] = ..., label_selector: _Optional[str] = ..., workspace: _Optional[str] = ..., all_workspaces: bool = ...) -> None: ... + +class ListSandboxProvidersRequest(_message.Message): + __slots__ = ("sandbox_name", "workspace") + SANDBOX_NAME_FIELD_NUMBER: _ClassVar[int] + WORKSPACE_FIELD_NUMBER: _ClassVar[int] + sandbox_name: str + workspace: str + def __init__(self, sandbox_name: _Optional[str] = ..., workspace: _Optional[str] = ...) -> None: ... + +class AttachSandboxProviderRequest(_message.Message): + __slots__ = ("sandbox_name", "provider_name", "expected_resource_version", "workspace") + SANDBOX_NAME_FIELD_NUMBER: _ClassVar[int] + PROVIDER_NAME_FIELD_NUMBER: _ClassVar[int] + EXPECTED_RESOURCE_VERSION_FIELD_NUMBER: _ClassVar[int] + WORKSPACE_FIELD_NUMBER: _ClassVar[int] + sandbox_name: str + provider_name: str + expected_resource_version: int + workspace: str + def __init__(self, sandbox_name: _Optional[str] = ..., provider_name: _Optional[str] = ..., expected_resource_version: _Optional[int] = ..., workspace: _Optional[str] = ...) -> None: ... + +class DetachSandboxProviderRequest(_message.Message): + __slots__ = ("sandbox_name", "provider_name", "expected_resource_version", "workspace") + SANDBOX_NAME_FIELD_NUMBER: _ClassVar[int] + PROVIDER_NAME_FIELD_NUMBER: _ClassVar[int] + EXPECTED_RESOURCE_VERSION_FIELD_NUMBER: _ClassVar[int] + WORKSPACE_FIELD_NUMBER: _ClassVar[int] + sandbox_name: str + provider_name: str + expected_resource_version: int + workspace: str + def __init__(self, sandbox_name: _Optional[str] = ..., provider_name: _Optional[str] = ..., expected_resource_version: _Optional[int] = ..., workspace: _Optional[str] = ...) -> None: ... + +class DeleteSandboxRequest(_message.Message): + __slots__ = ("name", "workspace") + NAME_FIELD_NUMBER: _ClassVar[int] + WORKSPACE_FIELD_NUMBER: _ClassVar[int] + name: str + workspace: str + def __init__(self, name: _Optional[str] = ..., workspace: _Optional[str] = ...) -> None: ... + +class SandboxResponse(_message.Message): + __slots__ = ("sandbox",) + SANDBOX_FIELD_NUMBER: _ClassVar[int] + sandbox: Sandbox + def __init__(self, sandbox: _Optional[_Union[Sandbox, _Mapping]] = ...) -> None: ... + +class ListSandboxesResponse(_message.Message): + __slots__ = ("sandboxes",) + SANDBOXES_FIELD_NUMBER: _ClassVar[int] + sandboxes: _containers.RepeatedCompositeFieldContainer[Sandbox] + def __init__(self, sandboxes: _Optional[_Iterable[_Union[Sandbox, _Mapping]]] = ...) -> None: ... + +class ListSandboxProvidersResponse(_message.Message): + __slots__ = ("providers",) + PROVIDERS_FIELD_NUMBER: _ClassVar[int] + providers: _containers.RepeatedCompositeFieldContainer[_datamodel_pb2.Provider] + def __init__(self, providers: _Optional[_Iterable[_Union[_datamodel_pb2.Provider, _Mapping]]] = ...) -> None: ... + +class AttachSandboxProviderResponse(_message.Message): + __slots__ = ("sandbox", "attached") + SANDBOX_FIELD_NUMBER: _ClassVar[int] + ATTACHED_FIELD_NUMBER: _ClassVar[int] + sandbox: Sandbox + attached: bool + def __init__(self, sandbox: _Optional[_Union[Sandbox, _Mapping]] = ..., attached: bool = ...) -> None: ... + +class DetachSandboxProviderResponse(_message.Message): + __slots__ = ("sandbox", "detached") + SANDBOX_FIELD_NUMBER: _ClassVar[int] + DETACHED_FIELD_NUMBER: _ClassVar[int] + sandbox: Sandbox + detached: bool + def __init__(self, sandbox: _Optional[_Union[Sandbox, _Mapping]] = ..., detached: bool = ...) -> None: ... + +class DeleteSandboxResponse(_message.Message): + __slots__ = ("deleted",) + DELETED_FIELD_NUMBER: _ClassVar[int] + deleted: bool + def __init__(self, deleted: bool = ...) -> None: ... + +class CreateSshSessionRequest(_message.Message): + __slots__ = ("sandbox_id",) + SANDBOX_ID_FIELD_NUMBER: _ClassVar[int] + sandbox_id: str + def __init__(self, sandbox_id: _Optional[str] = ...) -> None: ... + +class CreateSshSessionResponse(_message.Message): + __slots__ = ("sandbox_id", "token", "gateway_host", "gateway_port", "gateway_scheme", "host_key_fingerprint", "expires_at_ms") + SANDBOX_ID_FIELD_NUMBER: _ClassVar[int] + TOKEN_FIELD_NUMBER: _ClassVar[int] + GATEWAY_HOST_FIELD_NUMBER: _ClassVar[int] + GATEWAY_PORT_FIELD_NUMBER: _ClassVar[int] + GATEWAY_SCHEME_FIELD_NUMBER: _ClassVar[int] + HOST_KEY_FINGERPRINT_FIELD_NUMBER: _ClassVar[int] + EXPIRES_AT_MS_FIELD_NUMBER: _ClassVar[int] + sandbox_id: str + token: str + gateway_host: str + gateway_port: int + gateway_scheme: str + host_key_fingerprint: str + expires_at_ms: int + def __init__(self, sandbox_id: _Optional[str] = ..., token: _Optional[str] = ..., gateway_host: _Optional[str] = ..., gateway_port: _Optional[int] = ..., gateway_scheme: _Optional[str] = ..., host_key_fingerprint: _Optional[str] = ..., expires_at_ms: _Optional[int] = ...) -> None: ... + +class ExposeServiceRequest(_message.Message): + __slots__ = ("sandbox", "service", "target_port", "domain", "workspace") + SANDBOX_FIELD_NUMBER: _ClassVar[int] + SERVICE_FIELD_NUMBER: _ClassVar[int] + TARGET_PORT_FIELD_NUMBER: _ClassVar[int] + DOMAIN_FIELD_NUMBER: _ClassVar[int] + WORKSPACE_FIELD_NUMBER: _ClassVar[int] + sandbox: str + service: str + target_port: int + domain: bool + workspace: str + def __init__(self, sandbox: _Optional[str] = ..., service: _Optional[str] = ..., target_port: _Optional[int] = ..., domain: bool = ..., workspace: _Optional[str] = ...) -> None: ... + +class GetServiceRequest(_message.Message): + __slots__ = ("sandbox", "service", "workspace") + SANDBOX_FIELD_NUMBER: _ClassVar[int] + SERVICE_FIELD_NUMBER: _ClassVar[int] + WORKSPACE_FIELD_NUMBER: _ClassVar[int] + sandbox: str + service: str + workspace: str + def __init__(self, sandbox: _Optional[str] = ..., service: _Optional[str] = ..., workspace: _Optional[str] = ...) -> None: ... + +class ListServicesRequest(_message.Message): + __slots__ = ("sandbox", "limit", "offset", "workspace", "all_workspaces") + SANDBOX_FIELD_NUMBER: _ClassVar[int] + LIMIT_FIELD_NUMBER: _ClassVar[int] + OFFSET_FIELD_NUMBER: _ClassVar[int] + WORKSPACE_FIELD_NUMBER: _ClassVar[int] + ALL_WORKSPACES_FIELD_NUMBER: _ClassVar[int] + sandbox: str + limit: int + offset: int + workspace: str + all_workspaces: bool + def __init__(self, sandbox: _Optional[str] = ..., limit: _Optional[int] = ..., offset: _Optional[int] = ..., workspace: _Optional[str] = ..., all_workspaces: bool = ...) -> None: ... + +class ListServicesResponse(_message.Message): + __slots__ = ("services",) + SERVICES_FIELD_NUMBER: _ClassVar[int] + services: _containers.RepeatedCompositeFieldContainer[ServiceEndpointResponse] + def __init__(self, services: _Optional[_Iterable[_Union[ServiceEndpointResponse, _Mapping]]] = ...) -> None: ... + +class DeleteServiceRequest(_message.Message): + __slots__ = ("sandbox", "service", "workspace") + SANDBOX_FIELD_NUMBER: _ClassVar[int] + SERVICE_FIELD_NUMBER: _ClassVar[int] + WORKSPACE_FIELD_NUMBER: _ClassVar[int] + sandbox: str + service: str + workspace: str + def __init__(self, sandbox: _Optional[str] = ..., service: _Optional[str] = ..., workspace: _Optional[str] = ...) -> None: ... + +class DeleteServiceResponse(_message.Message): + __slots__ = ("deleted",) + DELETED_FIELD_NUMBER: _ClassVar[int] + deleted: bool + def __init__(self, deleted: bool = ...) -> None: ... + +class ServiceEndpoint(_message.Message): + __slots__ = ("metadata", "sandbox_id", "sandbox_name", "service_name", "target_port", "domain") + METADATA_FIELD_NUMBER: _ClassVar[int] + SANDBOX_ID_FIELD_NUMBER: _ClassVar[int] + SANDBOX_NAME_FIELD_NUMBER: _ClassVar[int] + SERVICE_NAME_FIELD_NUMBER: _ClassVar[int] + TARGET_PORT_FIELD_NUMBER: _ClassVar[int] + DOMAIN_FIELD_NUMBER: _ClassVar[int] + metadata: _datamodel_pb2.ObjectMeta + sandbox_id: str + sandbox_name: str + service_name: str + target_port: int + domain: bool + def __init__(self, metadata: _Optional[_Union[_datamodel_pb2.ObjectMeta, _Mapping]] = ..., sandbox_id: _Optional[str] = ..., sandbox_name: _Optional[str] = ..., service_name: _Optional[str] = ..., target_port: _Optional[int] = ..., domain: bool = ...) -> None: ... + +class ServiceEndpointResponse(_message.Message): + __slots__ = ("endpoint", "url") + ENDPOINT_FIELD_NUMBER: _ClassVar[int] + URL_FIELD_NUMBER: _ClassVar[int] + endpoint: ServiceEndpoint + url: str + def __init__(self, endpoint: _Optional[_Union[ServiceEndpoint, _Mapping]] = ..., url: _Optional[str] = ...) -> None: ... + +class RevokeSshSessionRequest(_message.Message): + __slots__ = ("token",) + TOKEN_FIELD_NUMBER: _ClassVar[int] + token: str + def __init__(self, token: _Optional[str] = ...) -> None: ... + +class RevokeSshSessionResponse(_message.Message): + __slots__ = ("revoked",) + REVOKED_FIELD_NUMBER: _ClassVar[int] + revoked: bool + def __init__(self, revoked: bool = ...) -> None: ... + +class ExecSandboxRequest(_message.Message): + __slots__ = ("sandbox_id", "command", "workdir", "environment", "timeout_seconds", "stdin", "tty", "cols", "rows") + class EnvironmentEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: str + def __init__(self, key: _Optional[str] = ..., value: _Optional[str] = ...) -> None: ... + SANDBOX_ID_FIELD_NUMBER: _ClassVar[int] + COMMAND_FIELD_NUMBER: _ClassVar[int] + WORKDIR_FIELD_NUMBER: _ClassVar[int] + ENVIRONMENT_FIELD_NUMBER: _ClassVar[int] + TIMEOUT_SECONDS_FIELD_NUMBER: _ClassVar[int] + STDIN_FIELD_NUMBER: _ClassVar[int] + TTY_FIELD_NUMBER: _ClassVar[int] + COLS_FIELD_NUMBER: _ClassVar[int] + ROWS_FIELD_NUMBER: _ClassVar[int] + sandbox_id: str + command: _containers.RepeatedScalarFieldContainer[str] + workdir: str + environment: _containers.ScalarMap[str, str] + timeout_seconds: int + stdin: bytes + tty: bool + cols: int + rows: int + def __init__(self, sandbox_id: _Optional[str] = ..., command: _Optional[_Iterable[str]] = ..., workdir: _Optional[str] = ..., environment: _Optional[_Mapping[str, str]] = ..., timeout_seconds: _Optional[int] = ..., stdin: _Optional[bytes] = ..., tty: bool = ..., cols: _Optional[int] = ..., rows: _Optional[int] = ...) -> None: ... + +class ExecSandboxStdout(_message.Message): + __slots__ = ("data",) + DATA_FIELD_NUMBER: _ClassVar[int] + data: bytes + def __init__(self, data: _Optional[bytes] = ...) -> None: ... + +class ExecSandboxStderr(_message.Message): + __slots__ = ("data",) + DATA_FIELD_NUMBER: _ClassVar[int] + data: bytes + def __init__(self, data: _Optional[bytes] = ...) -> None: ... + +class ExecSandboxExit(_message.Message): + __slots__ = ("exit_code",) + EXIT_CODE_FIELD_NUMBER: _ClassVar[int] + exit_code: int + def __init__(self, exit_code: _Optional[int] = ...) -> None: ... + +class ExecSandboxEvent(_message.Message): + __slots__ = ("stdout", "stderr", "exit") + STDOUT_FIELD_NUMBER: _ClassVar[int] + STDERR_FIELD_NUMBER: _ClassVar[int] + EXIT_FIELD_NUMBER: _ClassVar[int] + stdout: ExecSandboxStdout + stderr: ExecSandboxStderr + exit: ExecSandboxExit + def __init__(self, stdout: _Optional[_Union[ExecSandboxStdout, _Mapping]] = ..., stderr: _Optional[_Union[ExecSandboxStderr, _Mapping]] = ..., exit: _Optional[_Union[ExecSandboxExit, _Mapping]] = ...) -> None: ... + +class TcpForwardInit(_message.Message): + __slots__ = ("sandbox_id", "service_id", "ssh", "tcp", "authorization_token") + SANDBOX_ID_FIELD_NUMBER: _ClassVar[int] + SERVICE_ID_FIELD_NUMBER: _ClassVar[int] + SSH_FIELD_NUMBER: _ClassVar[int] + TCP_FIELD_NUMBER: _ClassVar[int] + AUTHORIZATION_TOKEN_FIELD_NUMBER: _ClassVar[int] + sandbox_id: str + service_id: str + ssh: SshRelayTarget + tcp: TcpRelayTarget + authorization_token: str + def __init__(self, sandbox_id: _Optional[str] = ..., service_id: _Optional[str] = ..., ssh: _Optional[_Union[SshRelayTarget, _Mapping]] = ..., tcp: _Optional[_Union[TcpRelayTarget, _Mapping]] = ..., authorization_token: _Optional[str] = ...) -> None: ... + +class TcpForwardFrame(_message.Message): + __slots__ = ("init", "data") + INIT_FIELD_NUMBER: _ClassVar[int] + DATA_FIELD_NUMBER: _ClassVar[int] + init: TcpForwardInit + data: bytes + def __init__(self, init: _Optional[_Union[TcpForwardInit, _Mapping]] = ..., data: _Optional[bytes] = ...) -> None: ... + +class ExecSandboxInput(_message.Message): + __slots__ = ("start", "stdin", "resize") + START_FIELD_NUMBER: _ClassVar[int] + STDIN_FIELD_NUMBER: _ClassVar[int] + RESIZE_FIELD_NUMBER: _ClassVar[int] + start: ExecSandboxRequest + stdin: bytes + resize: ExecSandboxWindowResize + def __init__(self, start: _Optional[_Union[ExecSandboxRequest, _Mapping]] = ..., stdin: _Optional[bytes] = ..., resize: _Optional[_Union[ExecSandboxWindowResize, _Mapping]] = ...) -> None: ... + +class ExecSandboxWindowResize(_message.Message): + __slots__ = ("cols", "rows") + COLS_FIELD_NUMBER: _ClassVar[int] + ROWS_FIELD_NUMBER: _ClassVar[int] + cols: int + rows: int + def __init__(self, cols: _Optional[int] = ..., rows: _Optional[int] = ...) -> None: ... + +class SshSession(_message.Message): + __slots__ = ("metadata", "sandbox_id", "token", "expires_at_ms", "revoked") + METADATA_FIELD_NUMBER: _ClassVar[int] + SANDBOX_ID_FIELD_NUMBER: _ClassVar[int] + TOKEN_FIELD_NUMBER: _ClassVar[int] + EXPIRES_AT_MS_FIELD_NUMBER: _ClassVar[int] + REVOKED_FIELD_NUMBER: _ClassVar[int] + metadata: _datamodel_pb2.ObjectMeta + sandbox_id: str + token: str + expires_at_ms: int + revoked: bool + def __init__(self, metadata: _Optional[_Union[_datamodel_pb2.ObjectMeta, _Mapping]] = ..., sandbox_id: _Optional[str] = ..., token: _Optional[str] = ..., expires_at_ms: _Optional[int] = ..., revoked: bool = ...) -> None: ... + +class WatchSandboxRequest(_message.Message): + __slots__ = ("id", "follow_status", "follow_logs", "follow_events", "log_tail_lines", "event_tail", "stop_on_terminal", "log_since_ms", "log_sources", "log_min_level") + ID_FIELD_NUMBER: _ClassVar[int] + FOLLOW_STATUS_FIELD_NUMBER: _ClassVar[int] + FOLLOW_LOGS_FIELD_NUMBER: _ClassVar[int] + FOLLOW_EVENTS_FIELD_NUMBER: _ClassVar[int] + LOG_TAIL_LINES_FIELD_NUMBER: _ClassVar[int] + EVENT_TAIL_FIELD_NUMBER: _ClassVar[int] + STOP_ON_TERMINAL_FIELD_NUMBER: _ClassVar[int] + LOG_SINCE_MS_FIELD_NUMBER: _ClassVar[int] + LOG_SOURCES_FIELD_NUMBER: _ClassVar[int] + LOG_MIN_LEVEL_FIELD_NUMBER: _ClassVar[int] + id: str + follow_status: bool + follow_logs: bool + follow_events: bool + log_tail_lines: int + event_tail: int + stop_on_terminal: bool + log_since_ms: int + log_sources: _containers.RepeatedScalarFieldContainer[str] + log_min_level: str + def __init__(self, id: _Optional[str] = ..., follow_status: bool = ..., follow_logs: bool = ..., follow_events: bool = ..., log_tail_lines: _Optional[int] = ..., event_tail: _Optional[int] = ..., stop_on_terminal: bool = ..., log_since_ms: _Optional[int] = ..., log_sources: _Optional[_Iterable[str]] = ..., log_min_level: _Optional[str] = ...) -> None: ... + +class SandboxStreamEvent(_message.Message): + __slots__ = ("sandbox", "log", "event", "warning", "draft_policy_update") + SANDBOX_FIELD_NUMBER: _ClassVar[int] + LOG_FIELD_NUMBER: _ClassVar[int] + EVENT_FIELD_NUMBER: _ClassVar[int] + WARNING_FIELD_NUMBER: _ClassVar[int] + DRAFT_POLICY_UPDATE_FIELD_NUMBER: _ClassVar[int] + sandbox: Sandbox + log: SandboxLogLine + event: PlatformEvent + warning: SandboxStreamWarning + draft_policy_update: DraftPolicyUpdate + def __init__(self, sandbox: _Optional[_Union[Sandbox, _Mapping]] = ..., log: _Optional[_Union[SandboxLogLine, _Mapping]] = ..., event: _Optional[_Union[PlatformEvent, _Mapping]] = ..., warning: _Optional[_Union[SandboxStreamWarning, _Mapping]] = ..., draft_policy_update: _Optional[_Union[DraftPolicyUpdate, _Mapping]] = ...) -> None: ... + +class SandboxLogLine(_message.Message): + __slots__ = ("sandbox_id", "timestamp_ms", "level", "target", "message", "source", "fields") + class FieldsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: str + def __init__(self, key: _Optional[str] = ..., value: _Optional[str] = ...) -> None: ... + SANDBOX_ID_FIELD_NUMBER: _ClassVar[int] + TIMESTAMP_MS_FIELD_NUMBER: _ClassVar[int] + LEVEL_FIELD_NUMBER: _ClassVar[int] + TARGET_FIELD_NUMBER: _ClassVar[int] + MESSAGE_FIELD_NUMBER: _ClassVar[int] + SOURCE_FIELD_NUMBER: _ClassVar[int] + FIELDS_FIELD_NUMBER: _ClassVar[int] + sandbox_id: str + timestamp_ms: int + level: str + target: str + message: str + source: str + fields: _containers.ScalarMap[str, str] + def __init__(self, sandbox_id: _Optional[str] = ..., timestamp_ms: _Optional[int] = ..., level: _Optional[str] = ..., target: _Optional[str] = ..., message: _Optional[str] = ..., source: _Optional[str] = ..., fields: _Optional[_Mapping[str, str]] = ...) -> None: ... + +class SandboxStreamWarning(_message.Message): + __slots__ = ("message",) + MESSAGE_FIELD_NUMBER: _ClassVar[int] + message: str + def __init__(self, message: _Optional[str] = ...) -> None: ... + +class CreateProviderRequest(_message.Message): + __slots__ = ("provider", "workspace") + PROVIDER_FIELD_NUMBER: _ClassVar[int] + WORKSPACE_FIELD_NUMBER: _ClassVar[int] + provider: _datamodel_pb2.Provider + workspace: str + def __init__(self, provider: _Optional[_Union[_datamodel_pb2.Provider, _Mapping]] = ..., workspace: _Optional[str] = ...) -> None: ... + +class GetProviderRequest(_message.Message): + __slots__ = ("name", "workspace") + NAME_FIELD_NUMBER: _ClassVar[int] + WORKSPACE_FIELD_NUMBER: _ClassVar[int] + name: str + workspace: str + def __init__(self, name: _Optional[str] = ..., workspace: _Optional[str] = ...) -> None: ... + +class ListProvidersRequest(_message.Message): + __slots__ = ("limit", "offset", "workspace", "all_workspaces") + LIMIT_FIELD_NUMBER: _ClassVar[int] + OFFSET_FIELD_NUMBER: _ClassVar[int] + WORKSPACE_FIELD_NUMBER: _ClassVar[int] + ALL_WORKSPACES_FIELD_NUMBER: _ClassVar[int] + limit: int + offset: int + workspace: str + all_workspaces: bool + def __init__(self, limit: _Optional[int] = ..., offset: _Optional[int] = ..., workspace: _Optional[str] = ..., all_workspaces: bool = ...) -> None: ... + +class UpdateProviderRequest(_message.Message): + __slots__ = ("provider", "credential_expires_at_ms", "workspace") + class CredentialExpiresAtMsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: int + def __init__(self, key: _Optional[str] = ..., value: _Optional[int] = ...) -> None: ... + PROVIDER_FIELD_NUMBER: _ClassVar[int] + CREDENTIAL_EXPIRES_AT_MS_FIELD_NUMBER: _ClassVar[int] + WORKSPACE_FIELD_NUMBER: _ClassVar[int] + provider: _datamodel_pb2.Provider + credential_expires_at_ms: _containers.ScalarMap[str, int] + workspace: str + def __init__(self, provider: _Optional[_Union[_datamodel_pb2.Provider, _Mapping]] = ..., credential_expires_at_ms: _Optional[_Mapping[str, int]] = ..., workspace: _Optional[str] = ...) -> None: ... + +class DeleteProviderRequest(_message.Message): + __slots__ = ("name", "workspace") + NAME_FIELD_NUMBER: _ClassVar[int] + WORKSPACE_FIELD_NUMBER: _ClassVar[int] + name: str + workspace: str + def __init__(self, name: _Optional[str] = ..., workspace: _Optional[str] = ...) -> None: ... + +class ProviderResponse(_message.Message): + __slots__ = ("provider",) + PROVIDER_FIELD_NUMBER: _ClassVar[int] + provider: _datamodel_pb2.Provider + def __init__(self, provider: _Optional[_Union[_datamodel_pb2.Provider, _Mapping]] = ...) -> None: ... + +class ListProvidersResponse(_message.Message): + __slots__ = ("providers",) + PROVIDERS_FIELD_NUMBER: _ClassVar[int] + providers: _containers.RepeatedCompositeFieldContainer[_datamodel_pb2.Provider] + def __init__(self, providers: _Optional[_Iterable[_Union[_datamodel_pb2.Provider, _Mapping]]] = ...) -> None: ... + +class ListProviderProfilesRequest(_message.Message): + __slots__ = ("limit", "offset", "workspace") + LIMIT_FIELD_NUMBER: _ClassVar[int] + OFFSET_FIELD_NUMBER: _ClassVar[int] + WORKSPACE_FIELD_NUMBER: _ClassVar[int] + limit: int + offset: int + workspace: str + def __init__(self, limit: _Optional[int] = ..., offset: _Optional[int] = ..., workspace: _Optional[str] = ...) -> None: ... + +class GetProviderProfileRequest(_message.Message): + __slots__ = ("id", "workspace") + ID_FIELD_NUMBER: _ClassVar[int] + WORKSPACE_FIELD_NUMBER: _ClassVar[int] + id: str + workspace: str + def __init__(self, id: _Optional[str] = ..., workspace: _Optional[str] = ...) -> None: ... + +class ProviderProfileImportItem(_message.Message): + __slots__ = ("profile", "source") + PROFILE_FIELD_NUMBER: _ClassVar[int] + SOURCE_FIELD_NUMBER: _ClassVar[int] + profile: ProviderProfile + source: str + def __init__(self, profile: _Optional[_Union[ProviderProfile, _Mapping]] = ..., source: _Optional[str] = ...) -> None: ... + +class ProviderProfileDiagnostic(_message.Message): + __slots__ = ("source", "profile_id", "field", "message", "severity") + SOURCE_FIELD_NUMBER: _ClassVar[int] + PROFILE_ID_FIELD_NUMBER: _ClassVar[int] + FIELD_FIELD_NUMBER: _ClassVar[int] + MESSAGE_FIELD_NUMBER: _ClassVar[int] + SEVERITY_FIELD_NUMBER: _ClassVar[int] + source: str + profile_id: str + field: str + message: str + severity: str + def __init__(self, source: _Optional[str] = ..., profile_id: _Optional[str] = ..., field: _Optional[str] = ..., message: _Optional[str] = ..., severity: _Optional[str] = ...) -> None: ... + +class ProviderCredentialTokenGrantAudienceOverride(_message.Message): + __slots__ = ("host", "port", "path", "audience", "scopes") + HOST_FIELD_NUMBER: _ClassVar[int] + PORT_FIELD_NUMBER: _ClassVar[int] + PATH_FIELD_NUMBER: _ClassVar[int] + AUDIENCE_FIELD_NUMBER: _ClassVar[int] + SCOPES_FIELD_NUMBER: _ClassVar[int] + host: str + port: int + path: str + audience: str + scopes: _containers.RepeatedScalarFieldContainer[str] + def __init__(self, host: _Optional[str] = ..., port: _Optional[int] = ..., path: _Optional[str] = ..., audience: _Optional[str] = ..., scopes: _Optional[_Iterable[str]] = ...) -> None: ... + +class ProviderCredentialTokenGrant(_message.Message): + __slots__ = ("token_endpoint", "audience", "jwt_svid_audience", "scopes", "cache_ttl_seconds", "audience_overrides", "client_assertion_type") + TOKEN_ENDPOINT_FIELD_NUMBER: _ClassVar[int] + AUDIENCE_FIELD_NUMBER: _ClassVar[int] + JWT_SVID_AUDIENCE_FIELD_NUMBER: _ClassVar[int] + SCOPES_FIELD_NUMBER: _ClassVar[int] + CACHE_TTL_SECONDS_FIELD_NUMBER: _ClassVar[int] + AUDIENCE_OVERRIDES_FIELD_NUMBER: _ClassVar[int] + CLIENT_ASSERTION_TYPE_FIELD_NUMBER: _ClassVar[int] + token_endpoint: str + audience: str + jwt_svid_audience: str + scopes: _containers.RepeatedScalarFieldContainer[str] + cache_ttl_seconds: int + audience_overrides: _containers.RepeatedCompositeFieldContainer[ProviderCredentialTokenGrantAudienceOverride] + client_assertion_type: str + def __init__(self, token_endpoint: _Optional[str] = ..., audience: _Optional[str] = ..., jwt_svid_audience: _Optional[str] = ..., scopes: _Optional[_Iterable[str]] = ..., cache_ttl_seconds: _Optional[int] = ..., audience_overrides: _Optional[_Iterable[_Union[ProviderCredentialTokenGrantAudienceOverride, _Mapping]]] = ..., client_assertion_type: _Optional[str] = ...) -> None: ... + +class ProviderProfileCredential(_message.Message): + __slots__ = ("name", "description", "env_vars", "required", "auth_style", "header_name", "query_param", "refresh", "path_template", "token_grant") + NAME_FIELD_NUMBER: _ClassVar[int] + DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + ENV_VARS_FIELD_NUMBER: _ClassVar[int] + REQUIRED_FIELD_NUMBER: _ClassVar[int] + AUTH_STYLE_FIELD_NUMBER: _ClassVar[int] + HEADER_NAME_FIELD_NUMBER: _ClassVar[int] + QUERY_PARAM_FIELD_NUMBER: _ClassVar[int] + REFRESH_FIELD_NUMBER: _ClassVar[int] + PATH_TEMPLATE_FIELD_NUMBER: _ClassVar[int] + TOKEN_GRANT_FIELD_NUMBER: _ClassVar[int] + name: str + description: str + env_vars: _containers.RepeatedScalarFieldContainer[str] + required: bool + auth_style: str + header_name: str + query_param: str + refresh: ProviderCredentialRefresh + path_template: str + token_grant: ProviderCredentialTokenGrant + def __init__(self, name: _Optional[str] = ..., description: _Optional[str] = ..., env_vars: _Optional[_Iterable[str]] = ..., required: bool = ..., auth_style: _Optional[str] = ..., header_name: _Optional[str] = ..., query_param: _Optional[str] = ..., refresh: _Optional[_Union[ProviderCredentialRefresh, _Mapping]] = ..., path_template: _Optional[str] = ..., token_grant: _Optional[_Union[ProviderCredentialTokenGrant, _Mapping]] = ...) -> None: ... + +class ProviderCredentialRefreshMaterial(_message.Message): + __slots__ = ("name", "description", "required", "secret") + NAME_FIELD_NUMBER: _ClassVar[int] + DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + REQUIRED_FIELD_NUMBER: _ClassVar[int] + SECRET_FIELD_NUMBER: _ClassVar[int] + name: str + description: str + required: bool + secret: bool + def __init__(self, name: _Optional[str] = ..., description: _Optional[str] = ..., required: bool = ..., secret: bool = ...) -> None: ... + +class ProviderCredentialRefreshOutput(_message.Message): + __slots__ = ("output", "credential") + OUTPUT_FIELD_NUMBER: _ClassVar[int] + CREDENTIAL_FIELD_NUMBER: _ClassVar[int] + output: str + credential: str + def __init__(self, output: _Optional[str] = ..., credential: _Optional[str] = ...) -> None: ... + +class ProviderCredentialRefresh(_message.Message): + __slots__ = ("strategy", "token_url", "scopes", "refresh_before_seconds", "max_lifetime_seconds", "material", "additional_outputs") + STRATEGY_FIELD_NUMBER: _ClassVar[int] + TOKEN_URL_FIELD_NUMBER: _ClassVar[int] + SCOPES_FIELD_NUMBER: _ClassVar[int] + REFRESH_BEFORE_SECONDS_FIELD_NUMBER: _ClassVar[int] + MAX_LIFETIME_SECONDS_FIELD_NUMBER: _ClassVar[int] + MATERIAL_FIELD_NUMBER: _ClassVar[int] + ADDITIONAL_OUTPUTS_FIELD_NUMBER: _ClassVar[int] + strategy: ProviderCredentialRefreshStrategy + token_url: str + scopes: _containers.RepeatedScalarFieldContainer[str] + refresh_before_seconds: int + max_lifetime_seconds: int + material: _containers.RepeatedCompositeFieldContainer[ProviderCredentialRefreshMaterial] + additional_outputs: _containers.RepeatedCompositeFieldContainer[ProviderCredentialRefreshOutput] + def __init__(self, strategy: _Optional[_Union[ProviderCredentialRefreshStrategy, str]] = ..., token_url: _Optional[str] = ..., scopes: _Optional[_Iterable[str]] = ..., refresh_before_seconds: _Optional[int] = ..., max_lifetime_seconds: _Optional[int] = ..., material: _Optional[_Iterable[_Union[ProviderCredentialRefreshMaterial, _Mapping]]] = ..., additional_outputs: _Optional[_Iterable[_Union[ProviderCredentialRefreshOutput, _Mapping]]] = ...) -> None: ... + +class ProviderCredentialRefreshStatus(_message.Message): + __slots__ = ("provider_name", "provider_id", "credential_key", "strategy", "status", "expires_at_ms", "next_refresh_at_ms", "last_refresh_at_ms", "last_error") + PROVIDER_NAME_FIELD_NUMBER: _ClassVar[int] + PROVIDER_ID_FIELD_NUMBER: _ClassVar[int] + CREDENTIAL_KEY_FIELD_NUMBER: _ClassVar[int] + STRATEGY_FIELD_NUMBER: _ClassVar[int] + STATUS_FIELD_NUMBER: _ClassVar[int] + EXPIRES_AT_MS_FIELD_NUMBER: _ClassVar[int] + NEXT_REFRESH_AT_MS_FIELD_NUMBER: _ClassVar[int] + LAST_REFRESH_AT_MS_FIELD_NUMBER: _ClassVar[int] + LAST_ERROR_FIELD_NUMBER: _ClassVar[int] + provider_name: str + provider_id: str + credential_key: str + strategy: ProviderCredentialRefreshStrategy + status: str + expires_at_ms: int + next_refresh_at_ms: int + last_refresh_at_ms: int + last_error: str + def __init__(self, provider_name: _Optional[str] = ..., provider_id: _Optional[str] = ..., credential_key: _Optional[str] = ..., strategy: _Optional[_Union[ProviderCredentialRefreshStrategy, str]] = ..., status: _Optional[str] = ..., expires_at_ms: _Optional[int] = ..., next_refresh_at_ms: _Optional[int] = ..., last_refresh_at_ms: _Optional[int] = ..., last_error: _Optional[str] = ...) -> None: ... + +class ProviderProfileDiscovery(_message.Message): + __slots__ = ("credentials",) + CREDENTIALS_FIELD_NUMBER: _ClassVar[int] + credentials: _containers.RepeatedScalarFieldContainer[str] + def __init__(self, credentials: _Optional[_Iterable[str]] = ...) -> None: ... + +class StoredProviderCredentialRefreshState(_message.Message): + __slots__ = ("metadata", "provider_id", "provider_name", "credential_key", "strategy", "material", "secret_material_keys", "expires_at_ms", "next_refresh_at_ms", "last_refresh_at_ms", "status", "last_error", "token_url", "scopes", "refresh_before_seconds", "max_lifetime_seconds", "additional_output_keys") + class MaterialEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: str + def __init__(self, key: _Optional[str] = ..., value: _Optional[str] = ...) -> None: ... + class AdditionalOutputKeysEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: str + def __init__(self, key: _Optional[str] = ..., value: _Optional[str] = ...) -> None: ... + METADATA_FIELD_NUMBER: _ClassVar[int] + PROVIDER_ID_FIELD_NUMBER: _ClassVar[int] + PROVIDER_NAME_FIELD_NUMBER: _ClassVar[int] + CREDENTIAL_KEY_FIELD_NUMBER: _ClassVar[int] + STRATEGY_FIELD_NUMBER: _ClassVar[int] + MATERIAL_FIELD_NUMBER: _ClassVar[int] + SECRET_MATERIAL_KEYS_FIELD_NUMBER: _ClassVar[int] + EXPIRES_AT_MS_FIELD_NUMBER: _ClassVar[int] + NEXT_REFRESH_AT_MS_FIELD_NUMBER: _ClassVar[int] + LAST_REFRESH_AT_MS_FIELD_NUMBER: _ClassVar[int] + STATUS_FIELD_NUMBER: _ClassVar[int] + LAST_ERROR_FIELD_NUMBER: _ClassVar[int] + TOKEN_URL_FIELD_NUMBER: _ClassVar[int] + SCOPES_FIELD_NUMBER: _ClassVar[int] + REFRESH_BEFORE_SECONDS_FIELD_NUMBER: _ClassVar[int] + MAX_LIFETIME_SECONDS_FIELD_NUMBER: _ClassVar[int] + ADDITIONAL_OUTPUT_KEYS_FIELD_NUMBER: _ClassVar[int] + metadata: _datamodel_pb2.ObjectMeta + provider_id: str + provider_name: str + credential_key: str + strategy: ProviderCredentialRefreshStrategy + material: _containers.ScalarMap[str, str] + secret_material_keys: _containers.RepeatedScalarFieldContainer[str] + expires_at_ms: int + next_refresh_at_ms: int + last_refresh_at_ms: int + status: str + last_error: str + token_url: str + scopes: _containers.RepeatedScalarFieldContainer[str] + refresh_before_seconds: int + max_lifetime_seconds: int + additional_output_keys: _containers.ScalarMap[str, str] + def __init__(self, metadata: _Optional[_Union[_datamodel_pb2.ObjectMeta, _Mapping]] = ..., provider_id: _Optional[str] = ..., provider_name: _Optional[str] = ..., credential_key: _Optional[str] = ..., strategy: _Optional[_Union[ProviderCredentialRefreshStrategy, str]] = ..., material: _Optional[_Mapping[str, str]] = ..., secret_material_keys: _Optional[_Iterable[str]] = ..., expires_at_ms: _Optional[int] = ..., next_refresh_at_ms: _Optional[int] = ..., last_refresh_at_ms: _Optional[int] = ..., status: _Optional[str] = ..., last_error: _Optional[str] = ..., token_url: _Optional[str] = ..., scopes: _Optional[_Iterable[str]] = ..., refresh_before_seconds: _Optional[int] = ..., max_lifetime_seconds: _Optional[int] = ..., additional_output_keys: _Optional[_Mapping[str, str]] = ...) -> None: ... + +class GetProviderRefreshStatusRequest(_message.Message): + __slots__ = ("provider", "credential_key", "workspace") + PROVIDER_FIELD_NUMBER: _ClassVar[int] + CREDENTIAL_KEY_FIELD_NUMBER: _ClassVar[int] + WORKSPACE_FIELD_NUMBER: _ClassVar[int] + provider: str + credential_key: str + workspace: str + def __init__(self, provider: _Optional[str] = ..., credential_key: _Optional[str] = ..., workspace: _Optional[str] = ...) -> None: ... + +class GetProviderRefreshStatusResponse(_message.Message): + __slots__ = ("credentials",) + CREDENTIALS_FIELD_NUMBER: _ClassVar[int] + credentials: _containers.RepeatedCompositeFieldContainer[ProviderCredentialRefreshStatus] + def __init__(self, credentials: _Optional[_Iterable[_Union[ProviderCredentialRefreshStatus, _Mapping]]] = ...) -> None: ... + +class ConfigureProviderRefreshRequest(_message.Message): + __slots__ = ("provider", "credential_key", "strategy", "material", "secret_material_keys", "expires_at_ms", "workspace") + class MaterialEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: str + def __init__(self, key: _Optional[str] = ..., value: _Optional[str] = ...) -> None: ... + PROVIDER_FIELD_NUMBER: _ClassVar[int] + CREDENTIAL_KEY_FIELD_NUMBER: _ClassVar[int] + STRATEGY_FIELD_NUMBER: _ClassVar[int] + MATERIAL_FIELD_NUMBER: _ClassVar[int] + SECRET_MATERIAL_KEYS_FIELD_NUMBER: _ClassVar[int] + EXPIRES_AT_MS_FIELD_NUMBER: _ClassVar[int] + WORKSPACE_FIELD_NUMBER: _ClassVar[int] + provider: str + credential_key: str + strategy: ProviderCredentialRefreshStrategy + material: _containers.ScalarMap[str, str] + secret_material_keys: _containers.RepeatedScalarFieldContainer[str] + expires_at_ms: int + workspace: str + def __init__(self, provider: _Optional[str] = ..., credential_key: _Optional[str] = ..., strategy: _Optional[_Union[ProviderCredentialRefreshStrategy, str]] = ..., material: _Optional[_Mapping[str, str]] = ..., secret_material_keys: _Optional[_Iterable[str]] = ..., expires_at_ms: _Optional[int] = ..., workspace: _Optional[str] = ...) -> None: ... + +class ConfigureProviderRefreshResponse(_message.Message): + __slots__ = ("status",) + STATUS_FIELD_NUMBER: _ClassVar[int] + status: ProviderCredentialRefreshStatus + def __init__(self, status: _Optional[_Union[ProviderCredentialRefreshStatus, _Mapping]] = ...) -> None: ... + +class RotateProviderCredentialRequest(_message.Message): + __slots__ = ("provider", "credential_key", "workspace") + PROVIDER_FIELD_NUMBER: _ClassVar[int] + CREDENTIAL_KEY_FIELD_NUMBER: _ClassVar[int] + WORKSPACE_FIELD_NUMBER: _ClassVar[int] + provider: str + credential_key: str + workspace: str + def __init__(self, provider: _Optional[str] = ..., credential_key: _Optional[str] = ..., workspace: _Optional[str] = ...) -> None: ... + +class RotateProviderCredentialResponse(_message.Message): + __slots__ = ("status",) + STATUS_FIELD_NUMBER: _ClassVar[int] + status: ProviderCredentialRefreshStatus + def __init__(self, status: _Optional[_Union[ProviderCredentialRefreshStatus, _Mapping]] = ...) -> None: ... + +class DeleteProviderRefreshRequest(_message.Message): + __slots__ = ("provider", "credential_key", "workspace") + PROVIDER_FIELD_NUMBER: _ClassVar[int] + CREDENTIAL_KEY_FIELD_NUMBER: _ClassVar[int] + WORKSPACE_FIELD_NUMBER: _ClassVar[int] + provider: str + credential_key: str + workspace: str + def __init__(self, provider: _Optional[str] = ..., credential_key: _Optional[str] = ..., workspace: _Optional[str] = ...) -> None: ... + +class DeleteProviderRefreshResponse(_message.Message): + __slots__ = ("deleted",) + DELETED_FIELD_NUMBER: _ClassVar[int] + deleted: bool + def __init__(self, deleted: bool = ...) -> None: ... + +class ProviderProfile(_message.Message): + __slots__ = ("id", "display_name", "description", "category", "credentials", "endpoints", "binaries", "inference_capable", "discovery", "resource_version", "annotations", "source", "scope") + class AnnotationsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: str + def __init__(self, key: _Optional[str] = ..., value: _Optional[str] = ...) -> None: ... + ID_FIELD_NUMBER: _ClassVar[int] + DISPLAY_NAME_FIELD_NUMBER: _ClassVar[int] + DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + CATEGORY_FIELD_NUMBER: _ClassVar[int] + CREDENTIALS_FIELD_NUMBER: _ClassVar[int] + ENDPOINTS_FIELD_NUMBER: _ClassVar[int] + BINARIES_FIELD_NUMBER: _ClassVar[int] + INFERENCE_CAPABLE_FIELD_NUMBER: _ClassVar[int] + DISCOVERY_FIELD_NUMBER: _ClassVar[int] + RESOURCE_VERSION_FIELD_NUMBER: _ClassVar[int] + ANNOTATIONS_FIELD_NUMBER: _ClassVar[int] + SOURCE_FIELD_NUMBER: _ClassVar[int] + SCOPE_FIELD_NUMBER: _ClassVar[int] + id: str + display_name: str + description: str + category: ProviderProfileCategory + credentials: _containers.RepeatedCompositeFieldContainer[ProviderProfileCredential] + endpoints: _containers.RepeatedCompositeFieldContainer[_sandbox_pb2.NetworkEndpoint] + binaries: _containers.RepeatedCompositeFieldContainer[_sandbox_pb2.NetworkBinary] + inference_capable: bool + discovery: ProviderProfileDiscovery + resource_version: int + annotations: _containers.ScalarMap[str, str] + source: str + scope: str + def __init__(self, id: _Optional[str] = ..., display_name: _Optional[str] = ..., description: _Optional[str] = ..., category: _Optional[_Union[ProviderProfileCategory, str]] = ..., credentials: _Optional[_Iterable[_Union[ProviderProfileCredential, _Mapping]]] = ..., endpoints: _Optional[_Iterable[_Union[_sandbox_pb2.NetworkEndpoint, _Mapping]]] = ..., binaries: _Optional[_Iterable[_Union[_sandbox_pb2.NetworkBinary, _Mapping]]] = ..., inference_capable: bool = ..., discovery: _Optional[_Union[ProviderProfileDiscovery, _Mapping]] = ..., resource_version: _Optional[int] = ..., annotations: _Optional[_Mapping[str, str]] = ..., source: _Optional[str] = ..., scope: _Optional[str] = ...) -> None: ... + +class StoredProviderProfile(_message.Message): + __slots__ = ("metadata", "profile") + METADATA_FIELD_NUMBER: _ClassVar[int] + PROFILE_FIELD_NUMBER: _ClassVar[int] + metadata: _datamodel_pb2.ObjectMeta + profile: ProviderProfile + def __init__(self, metadata: _Optional[_Union[_datamodel_pb2.ObjectMeta, _Mapping]] = ..., profile: _Optional[_Union[ProviderProfile, _Mapping]] = ...) -> None: ... + +class ProviderProfileResponse(_message.Message): + __slots__ = ("profile",) + PROFILE_FIELD_NUMBER: _ClassVar[int] + profile: ProviderProfile + def __init__(self, profile: _Optional[_Union[ProviderProfile, _Mapping]] = ...) -> None: ... + +class ListProviderProfilesResponse(_message.Message): + __slots__ = ("profiles",) + PROFILES_FIELD_NUMBER: _ClassVar[int] + profiles: _containers.RepeatedCompositeFieldContainer[ProviderProfile] + def __init__(self, profiles: _Optional[_Iterable[_Union[ProviderProfile, _Mapping]]] = ...) -> None: ... + +class ImportProviderProfilesRequest(_message.Message): + __slots__ = ("profiles", "workspace") + PROFILES_FIELD_NUMBER: _ClassVar[int] + WORKSPACE_FIELD_NUMBER: _ClassVar[int] + profiles: _containers.RepeatedCompositeFieldContainer[ProviderProfileImportItem] + workspace: str + def __init__(self, profiles: _Optional[_Iterable[_Union[ProviderProfileImportItem, _Mapping]]] = ..., workspace: _Optional[str] = ...) -> None: ... + +class ImportProviderProfilesResponse(_message.Message): + __slots__ = ("diagnostics", "profiles", "imported") + DIAGNOSTICS_FIELD_NUMBER: _ClassVar[int] + PROFILES_FIELD_NUMBER: _ClassVar[int] + IMPORTED_FIELD_NUMBER: _ClassVar[int] + diagnostics: _containers.RepeatedCompositeFieldContainer[ProviderProfileDiagnostic] + profiles: _containers.RepeatedCompositeFieldContainer[ProviderProfile] + imported: bool + def __init__(self, diagnostics: _Optional[_Iterable[_Union[ProviderProfileDiagnostic, _Mapping]]] = ..., profiles: _Optional[_Iterable[_Union[ProviderProfile, _Mapping]]] = ..., imported: bool = ...) -> None: ... + +class UpdateProviderProfilesRequest(_message.Message): + __slots__ = ("profile", "expected_resource_version", "id", "workspace") + PROFILE_FIELD_NUMBER: _ClassVar[int] + EXPECTED_RESOURCE_VERSION_FIELD_NUMBER: _ClassVar[int] + ID_FIELD_NUMBER: _ClassVar[int] + WORKSPACE_FIELD_NUMBER: _ClassVar[int] + profile: ProviderProfileImportItem + expected_resource_version: int + id: str + workspace: str + def __init__(self, profile: _Optional[_Union[ProviderProfileImportItem, _Mapping]] = ..., expected_resource_version: _Optional[int] = ..., id: _Optional[str] = ..., workspace: _Optional[str] = ...) -> None: ... + +class UpdateProviderProfilesResponse(_message.Message): + __slots__ = ("diagnostics", "profile", "updated") + DIAGNOSTICS_FIELD_NUMBER: _ClassVar[int] + PROFILE_FIELD_NUMBER: _ClassVar[int] + UPDATED_FIELD_NUMBER: _ClassVar[int] + diagnostics: _containers.RepeatedCompositeFieldContainer[ProviderProfileDiagnostic] + profile: ProviderProfile + updated: bool + def __init__(self, diagnostics: _Optional[_Iterable[_Union[ProviderProfileDiagnostic, _Mapping]]] = ..., profile: _Optional[_Union[ProviderProfile, _Mapping]] = ..., updated: bool = ...) -> None: ... + +class LintProviderProfilesRequest(_message.Message): + __slots__ = ("profiles", "workspace") + PROFILES_FIELD_NUMBER: _ClassVar[int] + WORKSPACE_FIELD_NUMBER: _ClassVar[int] + profiles: _containers.RepeatedCompositeFieldContainer[ProviderProfileImportItem] + workspace: str + def __init__(self, profiles: _Optional[_Iterable[_Union[ProviderProfileImportItem, _Mapping]]] = ..., workspace: _Optional[str] = ...) -> None: ... + +class LintProviderProfilesResponse(_message.Message): + __slots__ = ("diagnostics", "valid") + DIAGNOSTICS_FIELD_NUMBER: _ClassVar[int] + VALID_FIELD_NUMBER: _ClassVar[int] + diagnostics: _containers.RepeatedCompositeFieldContainer[ProviderProfileDiagnostic] + valid: bool + def __init__(self, diagnostics: _Optional[_Iterable[_Union[ProviderProfileDiagnostic, _Mapping]]] = ..., valid: bool = ...) -> None: ... + +class DeleteProviderResponse(_message.Message): + __slots__ = ("deleted",) + DELETED_FIELD_NUMBER: _ClassVar[int] + deleted: bool + def __init__(self, deleted: bool = ...) -> None: ... + +class DeleteProviderProfileRequest(_message.Message): + __slots__ = ("id", "workspace") + ID_FIELD_NUMBER: _ClassVar[int] + WORKSPACE_FIELD_NUMBER: _ClassVar[int] + id: str + workspace: str + def __init__(self, id: _Optional[str] = ..., workspace: _Optional[str] = ...) -> None: ... + +class DeleteProviderProfileResponse(_message.Message): + __slots__ = ("deleted",) + DELETED_FIELD_NUMBER: _ClassVar[int] + deleted: bool + def __init__(self, deleted: bool = ...) -> None: ... + +class GetSandboxProviderEnvironmentRequest(_message.Message): + __slots__ = ("sandbox_id",) + SANDBOX_ID_FIELD_NUMBER: _ClassVar[int] + sandbox_id: str + def __init__(self, sandbox_id: _Optional[str] = ...) -> None: ... + +class GetSandboxProviderEnvironmentResponse(_message.Message): + __slots__ = ("environment", "provider_env_revision", "credential_expires_at_ms", "dynamic_credentials") + class EnvironmentEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: str + def __init__(self, key: _Optional[str] = ..., value: _Optional[str] = ...) -> None: ... + class CredentialExpiresAtMsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: int + def __init__(self, key: _Optional[str] = ..., value: _Optional[int] = ...) -> None: ... + class DynamicCredentialsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: ProviderProfileCredential + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[ProviderProfileCredential, _Mapping]] = ...) -> None: ... + ENVIRONMENT_FIELD_NUMBER: _ClassVar[int] + PROVIDER_ENV_REVISION_FIELD_NUMBER: _ClassVar[int] + CREDENTIAL_EXPIRES_AT_MS_FIELD_NUMBER: _ClassVar[int] + DYNAMIC_CREDENTIALS_FIELD_NUMBER: _ClassVar[int] + environment: _containers.ScalarMap[str, str] + provider_env_revision: int + credential_expires_at_ms: _containers.ScalarMap[str, int] + dynamic_credentials: _containers.MessageMap[str, ProviderProfileCredential] + def __init__(self, environment: _Optional[_Mapping[str, str]] = ..., provider_env_revision: _Optional[int] = ..., credential_expires_at_ms: _Optional[_Mapping[str, int]] = ..., dynamic_credentials: _Optional[_Mapping[str, ProviderProfileCredential]] = ...) -> None: ... + +class UpdateConfigRequest(_message.Message): + __slots__ = ("name", "policy", "setting_key", "setting_value", "delete_setting", "merge_operations", "expected_resource_version", "annotations", "workspace") + class AnnotationsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: str + def __init__(self, key: _Optional[str] = ..., value: _Optional[str] = ...) -> None: ... + NAME_FIELD_NUMBER: _ClassVar[int] + POLICY_FIELD_NUMBER: _ClassVar[int] + SETTING_KEY_FIELD_NUMBER: _ClassVar[int] + SETTING_VALUE_FIELD_NUMBER: _ClassVar[int] + DELETE_SETTING_FIELD_NUMBER: _ClassVar[int] + GLOBAL_FIELD_NUMBER: _ClassVar[int] + MERGE_OPERATIONS_FIELD_NUMBER: _ClassVar[int] + EXPECTED_RESOURCE_VERSION_FIELD_NUMBER: _ClassVar[int] + ANNOTATIONS_FIELD_NUMBER: _ClassVar[int] + WORKSPACE_FIELD_NUMBER: _ClassVar[int] + name: str + policy: _sandbox_pb2.SandboxPolicy + setting_key: str + setting_value: _sandbox_pb2.SettingValue + delete_setting: bool + merge_operations: _containers.RepeatedCompositeFieldContainer[PolicyMergeOperation] + expected_resource_version: int + annotations: _containers.ScalarMap[str, str] + workspace: str + def __init__(self, name: _Optional[str] = ..., policy: _Optional[_Union[_sandbox_pb2.SandboxPolicy, _Mapping]] = ..., setting_key: _Optional[str] = ..., setting_value: _Optional[_Union[_sandbox_pb2.SettingValue, _Mapping]] = ..., delete_setting: bool = ..., merge_operations: _Optional[_Iterable[_Union[PolicyMergeOperation, _Mapping]]] = ..., expected_resource_version: _Optional[int] = ..., annotations: _Optional[_Mapping[str, str]] = ..., workspace: _Optional[str] = ..., **kwargs) -> None: ... + +class PolicyMergeOperation(_message.Message): + __slots__ = ("add_rule", "remove_endpoint", "remove_rule", "add_deny_rules", "add_allow_rules", "remove_binary") + ADD_RULE_FIELD_NUMBER: _ClassVar[int] + REMOVE_ENDPOINT_FIELD_NUMBER: _ClassVar[int] + REMOVE_RULE_FIELD_NUMBER: _ClassVar[int] + ADD_DENY_RULES_FIELD_NUMBER: _ClassVar[int] + ADD_ALLOW_RULES_FIELD_NUMBER: _ClassVar[int] + REMOVE_BINARY_FIELD_NUMBER: _ClassVar[int] + add_rule: AddNetworkRule + remove_endpoint: RemoveNetworkEndpoint + remove_rule: RemoveNetworkRule + add_deny_rules: AddDenyRules + add_allow_rules: AddAllowRules + remove_binary: RemoveNetworkBinary + def __init__(self, add_rule: _Optional[_Union[AddNetworkRule, _Mapping]] = ..., remove_endpoint: _Optional[_Union[RemoveNetworkEndpoint, _Mapping]] = ..., remove_rule: _Optional[_Union[RemoveNetworkRule, _Mapping]] = ..., add_deny_rules: _Optional[_Union[AddDenyRules, _Mapping]] = ..., add_allow_rules: _Optional[_Union[AddAllowRules, _Mapping]] = ..., remove_binary: _Optional[_Union[RemoveNetworkBinary, _Mapping]] = ...) -> None: ... + +class AddNetworkRule(_message.Message): + __slots__ = ("rule_name", "rule") + RULE_NAME_FIELD_NUMBER: _ClassVar[int] + RULE_FIELD_NUMBER: _ClassVar[int] + rule_name: str + rule: _sandbox_pb2.NetworkPolicyRule + def __init__(self, rule_name: _Optional[str] = ..., rule: _Optional[_Union[_sandbox_pb2.NetworkPolicyRule, _Mapping]] = ...) -> None: ... + +class RemoveNetworkEndpoint(_message.Message): + __slots__ = ("rule_name", "host", "port") + RULE_NAME_FIELD_NUMBER: _ClassVar[int] + HOST_FIELD_NUMBER: _ClassVar[int] + PORT_FIELD_NUMBER: _ClassVar[int] + rule_name: str + host: str + port: int + def __init__(self, rule_name: _Optional[str] = ..., host: _Optional[str] = ..., port: _Optional[int] = ...) -> None: ... + +class RemoveNetworkRule(_message.Message): + __slots__ = ("rule_name",) + RULE_NAME_FIELD_NUMBER: _ClassVar[int] + rule_name: str + def __init__(self, rule_name: _Optional[str] = ...) -> None: ... + +class AddDenyRules(_message.Message): + __slots__ = ("host", "port", "deny_rules") + HOST_FIELD_NUMBER: _ClassVar[int] + PORT_FIELD_NUMBER: _ClassVar[int] + DENY_RULES_FIELD_NUMBER: _ClassVar[int] + host: str + port: int + deny_rules: _containers.RepeatedCompositeFieldContainer[_sandbox_pb2.L7DenyRule] + def __init__(self, host: _Optional[str] = ..., port: _Optional[int] = ..., deny_rules: _Optional[_Iterable[_Union[_sandbox_pb2.L7DenyRule, _Mapping]]] = ...) -> None: ... + +class AddAllowRules(_message.Message): + __slots__ = ("host", "port", "rules") + HOST_FIELD_NUMBER: _ClassVar[int] + PORT_FIELD_NUMBER: _ClassVar[int] + RULES_FIELD_NUMBER: _ClassVar[int] + host: str + port: int + rules: _containers.RepeatedCompositeFieldContainer[_sandbox_pb2.L7Rule] + def __init__(self, host: _Optional[str] = ..., port: _Optional[int] = ..., rules: _Optional[_Iterable[_Union[_sandbox_pb2.L7Rule, _Mapping]]] = ...) -> None: ... + +class RemoveNetworkBinary(_message.Message): + __slots__ = ("rule_name", "binary_path") + RULE_NAME_FIELD_NUMBER: _ClassVar[int] + BINARY_PATH_FIELD_NUMBER: _ClassVar[int] + rule_name: str + binary_path: str + def __init__(self, rule_name: _Optional[str] = ..., binary_path: _Optional[str] = ...) -> None: ... + +class UpdateConfigResponse(_message.Message): + __slots__ = ("version", "policy_hash", "settings_revision", "deleted", "annotations") + class AnnotationsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: str + def __init__(self, key: _Optional[str] = ..., value: _Optional[str] = ...) -> None: ... + VERSION_FIELD_NUMBER: _ClassVar[int] + POLICY_HASH_FIELD_NUMBER: _ClassVar[int] + SETTINGS_REVISION_FIELD_NUMBER: _ClassVar[int] + DELETED_FIELD_NUMBER: _ClassVar[int] + ANNOTATIONS_FIELD_NUMBER: _ClassVar[int] + version: int + policy_hash: str + settings_revision: int + deleted: bool + annotations: _containers.ScalarMap[str, str] + def __init__(self, version: _Optional[int] = ..., policy_hash: _Optional[str] = ..., settings_revision: _Optional[int] = ..., deleted: bool = ..., annotations: _Optional[_Mapping[str, str]] = ...) -> None: ... + +class GetSandboxPolicyStatusRequest(_message.Message): + __slots__ = ("name", "version", "workspace") + NAME_FIELD_NUMBER: _ClassVar[int] + VERSION_FIELD_NUMBER: _ClassVar[int] + GLOBAL_FIELD_NUMBER: _ClassVar[int] + WORKSPACE_FIELD_NUMBER: _ClassVar[int] + name: str + version: int + workspace: str + def __init__(self, name: _Optional[str] = ..., version: _Optional[int] = ..., workspace: _Optional[str] = ..., **kwargs) -> None: ... + +class GetSandboxPolicyStatusResponse(_message.Message): + __slots__ = ("revision", "active_version") + REVISION_FIELD_NUMBER: _ClassVar[int] + ACTIVE_VERSION_FIELD_NUMBER: _ClassVar[int] + revision: SandboxPolicyRevision + active_version: int + def __init__(self, revision: _Optional[_Union[SandboxPolicyRevision, _Mapping]] = ..., active_version: _Optional[int] = ...) -> None: ... + +class ListSandboxPoliciesRequest(_message.Message): + __slots__ = ("name", "limit", "offset", "workspace") + NAME_FIELD_NUMBER: _ClassVar[int] + LIMIT_FIELD_NUMBER: _ClassVar[int] + OFFSET_FIELD_NUMBER: _ClassVar[int] + GLOBAL_FIELD_NUMBER: _ClassVar[int] + WORKSPACE_FIELD_NUMBER: _ClassVar[int] + name: str + limit: int + offset: int + workspace: str + def __init__(self, name: _Optional[str] = ..., limit: _Optional[int] = ..., offset: _Optional[int] = ..., workspace: _Optional[str] = ..., **kwargs) -> None: ... + +class ListSandboxPoliciesResponse(_message.Message): + __slots__ = ("revisions",) + REVISIONS_FIELD_NUMBER: _ClassVar[int] + revisions: _containers.RepeatedCompositeFieldContainer[SandboxPolicyRevision] + def __init__(self, revisions: _Optional[_Iterable[_Union[SandboxPolicyRevision, _Mapping]]] = ...) -> None: ... + +class ReportPolicyStatusRequest(_message.Message): + __slots__ = ("sandbox_id", "version", "status", "load_error") + SANDBOX_ID_FIELD_NUMBER: _ClassVar[int] + VERSION_FIELD_NUMBER: _ClassVar[int] + STATUS_FIELD_NUMBER: _ClassVar[int] + LOAD_ERROR_FIELD_NUMBER: _ClassVar[int] + sandbox_id: str + version: int + status: PolicyStatus + load_error: str + def __init__(self, sandbox_id: _Optional[str] = ..., version: _Optional[int] = ..., status: _Optional[_Union[PolicyStatus, str]] = ..., load_error: _Optional[str] = ...) -> None: ... + +class ReportPolicyStatusResponse(_message.Message): + __slots__ = () + def __init__(self) -> None: ... + +class SandboxPolicyRevision(_message.Message): + __slots__ = ("version", "policy_hash", "status", "load_error", "created_at_ms", "loaded_at_ms", "policy", "provenance") + class ProvenanceEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: str + def __init__(self, key: _Optional[str] = ..., value: _Optional[str] = ...) -> None: ... + VERSION_FIELD_NUMBER: _ClassVar[int] + POLICY_HASH_FIELD_NUMBER: _ClassVar[int] + STATUS_FIELD_NUMBER: _ClassVar[int] + LOAD_ERROR_FIELD_NUMBER: _ClassVar[int] + CREATED_AT_MS_FIELD_NUMBER: _ClassVar[int] + LOADED_AT_MS_FIELD_NUMBER: _ClassVar[int] + POLICY_FIELD_NUMBER: _ClassVar[int] + PROVENANCE_FIELD_NUMBER: _ClassVar[int] + version: int + policy_hash: str + status: PolicyStatus + load_error: str + created_at_ms: int + loaded_at_ms: int + policy: _sandbox_pb2.SandboxPolicy + provenance: _containers.ScalarMap[str, str] + def __init__(self, version: _Optional[int] = ..., policy_hash: _Optional[str] = ..., status: _Optional[_Union[PolicyStatus, str]] = ..., load_error: _Optional[str] = ..., created_at_ms: _Optional[int] = ..., loaded_at_ms: _Optional[int] = ..., policy: _Optional[_Union[_sandbox_pb2.SandboxPolicy, _Mapping]] = ..., provenance: _Optional[_Mapping[str, str]] = ...) -> None: ... + +class GetSandboxLogsRequest(_message.Message): + __slots__ = ("sandbox_id", "lines", "since_ms", "sources", "min_level", "workspace") + SANDBOX_ID_FIELD_NUMBER: _ClassVar[int] + LINES_FIELD_NUMBER: _ClassVar[int] + SINCE_MS_FIELD_NUMBER: _ClassVar[int] + SOURCES_FIELD_NUMBER: _ClassVar[int] + MIN_LEVEL_FIELD_NUMBER: _ClassVar[int] + WORKSPACE_FIELD_NUMBER: _ClassVar[int] + sandbox_id: str + lines: int + since_ms: int + sources: _containers.RepeatedScalarFieldContainer[str] + min_level: str + workspace: str + def __init__(self, sandbox_id: _Optional[str] = ..., lines: _Optional[int] = ..., since_ms: _Optional[int] = ..., sources: _Optional[_Iterable[str]] = ..., min_level: _Optional[str] = ..., workspace: _Optional[str] = ...) -> None: ... + +class PushSandboxLogsRequest(_message.Message): + __slots__ = ("sandbox_id", "logs") + SANDBOX_ID_FIELD_NUMBER: _ClassVar[int] + LOGS_FIELD_NUMBER: _ClassVar[int] + sandbox_id: str + logs: _containers.RepeatedCompositeFieldContainer[SandboxLogLine] + def __init__(self, sandbox_id: _Optional[str] = ..., logs: _Optional[_Iterable[_Union[SandboxLogLine, _Mapping]]] = ...) -> None: ... + +class PushSandboxLogsResponse(_message.Message): + __slots__ = () + def __init__(self) -> None: ... + +class GetSandboxLogsResponse(_message.Message): + __slots__ = ("logs", "buffer_total") + LOGS_FIELD_NUMBER: _ClassVar[int] + BUFFER_TOTAL_FIELD_NUMBER: _ClassVar[int] + logs: _containers.RepeatedCompositeFieldContainer[SandboxLogLine] + buffer_total: int + def __init__(self, logs: _Optional[_Iterable[_Union[SandboxLogLine, _Mapping]]] = ..., buffer_total: _Optional[int] = ...) -> None: ... + +class SupervisorMessage(_message.Message): + __slots__ = ("hello", "heartbeat", "relay_open_result", "relay_close") + HELLO_FIELD_NUMBER: _ClassVar[int] + HEARTBEAT_FIELD_NUMBER: _ClassVar[int] + RELAY_OPEN_RESULT_FIELD_NUMBER: _ClassVar[int] + RELAY_CLOSE_FIELD_NUMBER: _ClassVar[int] + hello: SupervisorHello + heartbeat: SupervisorHeartbeat + relay_open_result: RelayOpenResult + relay_close: RelayClose + def __init__(self, hello: _Optional[_Union[SupervisorHello, _Mapping]] = ..., heartbeat: _Optional[_Union[SupervisorHeartbeat, _Mapping]] = ..., relay_open_result: _Optional[_Union[RelayOpenResult, _Mapping]] = ..., relay_close: _Optional[_Union[RelayClose, _Mapping]] = ...) -> None: ... + +class GatewayMessage(_message.Message): + __slots__ = ("session_accepted", "session_rejected", "heartbeat", "relay_open", "relay_close") + SESSION_ACCEPTED_FIELD_NUMBER: _ClassVar[int] + SESSION_REJECTED_FIELD_NUMBER: _ClassVar[int] + HEARTBEAT_FIELD_NUMBER: _ClassVar[int] + RELAY_OPEN_FIELD_NUMBER: _ClassVar[int] + RELAY_CLOSE_FIELD_NUMBER: _ClassVar[int] + session_accepted: SessionAccepted + session_rejected: SessionRejected + heartbeat: GatewayHeartbeat + relay_open: RelayOpen + relay_close: RelayClose + def __init__(self, session_accepted: _Optional[_Union[SessionAccepted, _Mapping]] = ..., session_rejected: _Optional[_Union[SessionRejected, _Mapping]] = ..., heartbeat: _Optional[_Union[GatewayHeartbeat, _Mapping]] = ..., relay_open: _Optional[_Union[RelayOpen, _Mapping]] = ..., relay_close: _Optional[_Union[RelayClose, _Mapping]] = ...) -> None: ... + +class SupervisorHello(_message.Message): + __slots__ = ("sandbox_id", "instance_id") + SANDBOX_ID_FIELD_NUMBER: _ClassVar[int] + INSTANCE_ID_FIELD_NUMBER: _ClassVar[int] + sandbox_id: str + instance_id: str + def __init__(self, sandbox_id: _Optional[str] = ..., instance_id: _Optional[str] = ...) -> None: ... + +class SessionAccepted(_message.Message): + __slots__ = ("session_id", "heartbeat_interval_secs") + SESSION_ID_FIELD_NUMBER: _ClassVar[int] + HEARTBEAT_INTERVAL_SECS_FIELD_NUMBER: _ClassVar[int] + session_id: str + heartbeat_interval_secs: int + def __init__(self, session_id: _Optional[str] = ..., heartbeat_interval_secs: _Optional[int] = ...) -> None: ... + +class SessionRejected(_message.Message): + __slots__ = ("reason",) + REASON_FIELD_NUMBER: _ClassVar[int] + reason: str + def __init__(self, reason: _Optional[str] = ...) -> None: ... + +class SupervisorHeartbeat(_message.Message): + __slots__ = () + def __init__(self) -> None: ... + +class GatewayHeartbeat(_message.Message): + __slots__ = () + def __init__(self) -> None: ... + +class RelayOpen(_message.Message): + __slots__ = ("channel_id", "ssh", "tcp", "service_id") + CHANNEL_ID_FIELD_NUMBER: _ClassVar[int] + SSH_FIELD_NUMBER: _ClassVar[int] + TCP_FIELD_NUMBER: _ClassVar[int] + SERVICE_ID_FIELD_NUMBER: _ClassVar[int] + channel_id: str + ssh: SshRelayTarget + tcp: TcpRelayTarget + service_id: str + def __init__(self, channel_id: _Optional[str] = ..., ssh: _Optional[_Union[SshRelayTarget, _Mapping]] = ..., tcp: _Optional[_Union[TcpRelayTarget, _Mapping]] = ..., service_id: _Optional[str] = ...) -> None: ... + +class SshRelayTarget(_message.Message): + __slots__ = () + def __init__(self) -> None: ... + +class TcpRelayTarget(_message.Message): + __slots__ = ("host", "port") + HOST_FIELD_NUMBER: _ClassVar[int] + PORT_FIELD_NUMBER: _ClassVar[int] + host: str + port: int + def __init__(self, host: _Optional[str] = ..., port: _Optional[int] = ...) -> None: ... + +class RelayInit(_message.Message): + __slots__ = ("channel_id",) + CHANNEL_ID_FIELD_NUMBER: _ClassVar[int] + channel_id: str + def __init__(self, channel_id: _Optional[str] = ...) -> None: ... + +class RelayFrame(_message.Message): + __slots__ = ("init", "data") + INIT_FIELD_NUMBER: _ClassVar[int] + DATA_FIELD_NUMBER: _ClassVar[int] + init: RelayInit + data: bytes + def __init__(self, init: _Optional[_Union[RelayInit, _Mapping]] = ..., data: _Optional[bytes] = ...) -> None: ... + +class RelayOpenResult(_message.Message): + __slots__ = ("channel_id", "success", "error") + CHANNEL_ID_FIELD_NUMBER: _ClassVar[int] + SUCCESS_FIELD_NUMBER: _ClassVar[int] + ERROR_FIELD_NUMBER: _ClassVar[int] + channel_id: str + success: bool + error: str + def __init__(self, channel_id: _Optional[str] = ..., success: bool = ..., error: _Optional[str] = ...) -> None: ... + +class RelayClose(_message.Message): + __slots__ = ("channel_id", "reason") + CHANNEL_ID_FIELD_NUMBER: _ClassVar[int] + REASON_FIELD_NUMBER: _ClassVar[int] + channel_id: str + reason: str + def __init__(self, channel_id: _Optional[str] = ..., reason: _Optional[str] = ...) -> None: ... + +class L7RequestSample(_message.Message): + __slots__ = ("method", "path", "decision", "count") + METHOD_FIELD_NUMBER: _ClassVar[int] + PATH_FIELD_NUMBER: _ClassVar[int] + DECISION_FIELD_NUMBER: _ClassVar[int] + COUNT_FIELD_NUMBER: _ClassVar[int] + method: str + path: str + decision: str + count: int + def __init__(self, method: _Optional[str] = ..., path: _Optional[str] = ..., decision: _Optional[str] = ..., count: _Optional[int] = ...) -> None: ... + +class DenialSummary(_message.Message): + __slots__ = ("sandbox_id", "host", "port", "binary", "ancestors", "deny_reason", "first_seen_ms", "last_seen_ms", "count", "suppressed_count", "total_count", "sample_cmdlines", "binary_sha256", "persistent", "denial_stage", "l7_request_samples", "l7_inspection_active") + SANDBOX_ID_FIELD_NUMBER: _ClassVar[int] + HOST_FIELD_NUMBER: _ClassVar[int] + PORT_FIELD_NUMBER: _ClassVar[int] + BINARY_FIELD_NUMBER: _ClassVar[int] + ANCESTORS_FIELD_NUMBER: _ClassVar[int] + DENY_REASON_FIELD_NUMBER: _ClassVar[int] + FIRST_SEEN_MS_FIELD_NUMBER: _ClassVar[int] + LAST_SEEN_MS_FIELD_NUMBER: _ClassVar[int] + COUNT_FIELD_NUMBER: _ClassVar[int] + SUPPRESSED_COUNT_FIELD_NUMBER: _ClassVar[int] + TOTAL_COUNT_FIELD_NUMBER: _ClassVar[int] + SAMPLE_CMDLINES_FIELD_NUMBER: _ClassVar[int] + BINARY_SHA256_FIELD_NUMBER: _ClassVar[int] + PERSISTENT_FIELD_NUMBER: _ClassVar[int] + DENIAL_STAGE_FIELD_NUMBER: _ClassVar[int] + L7_REQUEST_SAMPLES_FIELD_NUMBER: _ClassVar[int] + L7_INSPECTION_ACTIVE_FIELD_NUMBER: _ClassVar[int] + sandbox_id: str + host: str + port: int + binary: str + ancestors: _containers.RepeatedScalarFieldContainer[str] + deny_reason: str + first_seen_ms: int + last_seen_ms: int + count: int + suppressed_count: int + total_count: int + sample_cmdlines: _containers.RepeatedScalarFieldContainer[str] + binary_sha256: str + persistent: bool + denial_stage: str + l7_request_samples: _containers.RepeatedCompositeFieldContainer[L7RequestSample] + l7_inspection_active: bool + def __init__(self, sandbox_id: _Optional[str] = ..., host: _Optional[str] = ..., port: _Optional[int] = ..., binary: _Optional[str] = ..., ancestors: _Optional[_Iterable[str]] = ..., deny_reason: _Optional[str] = ..., first_seen_ms: _Optional[int] = ..., last_seen_ms: _Optional[int] = ..., count: _Optional[int] = ..., suppressed_count: _Optional[int] = ..., total_count: _Optional[int] = ..., sample_cmdlines: _Optional[_Iterable[str]] = ..., binary_sha256: _Optional[str] = ..., persistent: bool = ..., denial_stage: _Optional[str] = ..., l7_request_samples: _Optional[_Iterable[_Union[L7RequestSample, _Mapping]]] = ..., l7_inspection_active: bool = ...) -> None: ... + +class DenialGroupCount(_message.Message): + __slots__ = ("deny_group", "denied_count") + DENY_GROUP_FIELD_NUMBER: _ClassVar[int] + DENIED_COUNT_FIELD_NUMBER: _ClassVar[int] + deny_group: str + denied_count: int + def __init__(self, deny_group: _Optional[str] = ..., denied_count: _Optional[int] = ...) -> None: ... + +class NetworkActivitySummary(_message.Message): + __slots__ = ("network_activity_count", "denied_action_count", "denials_by_group") + NETWORK_ACTIVITY_COUNT_FIELD_NUMBER: _ClassVar[int] + DENIED_ACTION_COUNT_FIELD_NUMBER: _ClassVar[int] + DENIALS_BY_GROUP_FIELD_NUMBER: _ClassVar[int] + network_activity_count: int + denied_action_count: int + denials_by_group: _containers.RepeatedCompositeFieldContainer[DenialGroupCount] + def __init__(self, network_activity_count: _Optional[int] = ..., denied_action_count: _Optional[int] = ..., denials_by_group: _Optional[_Iterable[_Union[DenialGroupCount, _Mapping]]] = ...) -> None: ... + +class PolicyChunk(_message.Message): + __slots__ = ("id", "status", "rule_name", "proposed_rule", "rationale", "security_notes", "confidence", "denial_summary_ids", "created_at_ms", "decided_at_ms", "stage", "supersedes_chunk_id", "hit_count", "first_seen_ms", "last_seen_ms", "binary", "validation_result", "rejection_reason") + ID_FIELD_NUMBER: _ClassVar[int] + STATUS_FIELD_NUMBER: _ClassVar[int] + RULE_NAME_FIELD_NUMBER: _ClassVar[int] + PROPOSED_RULE_FIELD_NUMBER: _ClassVar[int] + RATIONALE_FIELD_NUMBER: _ClassVar[int] + SECURITY_NOTES_FIELD_NUMBER: _ClassVar[int] + CONFIDENCE_FIELD_NUMBER: _ClassVar[int] + DENIAL_SUMMARY_IDS_FIELD_NUMBER: _ClassVar[int] + CREATED_AT_MS_FIELD_NUMBER: _ClassVar[int] + DECIDED_AT_MS_FIELD_NUMBER: _ClassVar[int] + STAGE_FIELD_NUMBER: _ClassVar[int] + SUPERSEDES_CHUNK_ID_FIELD_NUMBER: _ClassVar[int] + HIT_COUNT_FIELD_NUMBER: _ClassVar[int] + FIRST_SEEN_MS_FIELD_NUMBER: _ClassVar[int] + LAST_SEEN_MS_FIELD_NUMBER: _ClassVar[int] + BINARY_FIELD_NUMBER: _ClassVar[int] + VALIDATION_RESULT_FIELD_NUMBER: _ClassVar[int] + REJECTION_REASON_FIELD_NUMBER: _ClassVar[int] + id: str + status: str + rule_name: str + proposed_rule: _sandbox_pb2.NetworkPolicyRule + rationale: str + security_notes: str + confidence: float + denial_summary_ids: _containers.RepeatedScalarFieldContainer[str] + created_at_ms: int + decided_at_ms: int + stage: str + supersedes_chunk_id: str + hit_count: int + first_seen_ms: int + last_seen_ms: int + binary: str + validation_result: str + rejection_reason: str + def __init__(self, id: _Optional[str] = ..., status: _Optional[str] = ..., rule_name: _Optional[str] = ..., proposed_rule: _Optional[_Union[_sandbox_pb2.NetworkPolicyRule, _Mapping]] = ..., rationale: _Optional[str] = ..., security_notes: _Optional[str] = ..., confidence: _Optional[float] = ..., denial_summary_ids: _Optional[_Iterable[str]] = ..., created_at_ms: _Optional[int] = ..., decided_at_ms: _Optional[int] = ..., stage: _Optional[str] = ..., supersedes_chunk_id: _Optional[str] = ..., hit_count: _Optional[int] = ..., first_seen_ms: _Optional[int] = ..., last_seen_ms: _Optional[int] = ..., binary: _Optional[str] = ..., validation_result: _Optional[str] = ..., rejection_reason: _Optional[str] = ...) -> None: ... + +class DraftPolicyUpdate(_message.Message): + __slots__ = ("draft_version", "new_chunks", "total_pending", "summary") + DRAFT_VERSION_FIELD_NUMBER: _ClassVar[int] + NEW_CHUNKS_FIELD_NUMBER: _ClassVar[int] + TOTAL_PENDING_FIELD_NUMBER: _ClassVar[int] + SUMMARY_FIELD_NUMBER: _ClassVar[int] + draft_version: int + new_chunks: int + total_pending: int + summary: str + def __init__(self, draft_version: _Optional[int] = ..., new_chunks: _Optional[int] = ..., total_pending: _Optional[int] = ..., summary: _Optional[str] = ...) -> None: ... + +class SubmitPolicyAnalysisRequest(_message.Message): + __slots__ = ("summaries", "proposed_chunks", "analysis_mode", "name", "network_activity_summaries", "workspace") + SUMMARIES_FIELD_NUMBER: _ClassVar[int] + PROPOSED_CHUNKS_FIELD_NUMBER: _ClassVar[int] + ANALYSIS_MODE_FIELD_NUMBER: _ClassVar[int] + NAME_FIELD_NUMBER: _ClassVar[int] + NETWORK_ACTIVITY_SUMMARIES_FIELD_NUMBER: _ClassVar[int] + WORKSPACE_FIELD_NUMBER: _ClassVar[int] + summaries: _containers.RepeatedCompositeFieldContainer[DenialSummary] + proposed_chunks: _containers.RepeatedCompositeFieldContainer[PolicyChunk] + analysis_mode: str + name: str + network_activity_summaries: _containers.RepeatedCompositeFieldContainer[NetworkActivitySummary] + workspace: str + def __init__(self, summaries: _Optional[_Iterable[_Union[DenialSummary, _Mapping]]] = ..., proposed_chunks: _Optional[_Iterable[_Union[PolicyChunk, _Mapping]]] = ..., analysis_mode: _Optional[str] = ..., name: _Optional[str] = ..., network_activity_summaries: _Optional[_Iterable[_Union[NetworkActivitySummary, _Mapping]]] = ..., workspace: _Optional[str] = ...) -> None: ... + +class SubmitPolicyAnalysisResponse(_message.Message): + __slots__ = ("accepted_chunks", "rejected_chunks", "rejection_reasons", "accepted_chunk_ids") + ACCEPTED_CHUNKS_FIELD_NUMBER: _ClassVar[int] + REJECTED_CHUNKS_FIELD_NUMBER: _ClassVar[int] + REJECTION_REASONS_FIELD_NUMBER: _ClassVar[int] + ACCEPTED_CHUNK_IDS_FIELD_NUMBER: _ClassVar[int] + accepted_chunks: int + rejected_chunks: int + rejection_reasons: _containers.RepeatedScalarFieldContainer[str] + accepted_chunk_ids: _containers.RepeatedScalarFieldContainer[str] + def __init__(self, accepted_chunks: _Optional[int] = ..., rejected_chunks: _Optional[int] = ..., rejection_reasons: _Optional[_Iterable[str]] = ..., accepted_chunk_ids: _Optional[_Iterable[str]] = ...) -> None: ... + +class GetDraftPolicyRequest(_message.Message): + __slots__ = ("name", "status_filter", "workspace") + NAME_FIELD_NUMBER: _ClassVar[int] + STATUS_FILTER_FIELD_NUMBER: _ClassVar[int] + WORKSPACE_FIELD_NUMBER: _ClassVar[int] + name: str + status_filter: str + workspace: str + def __init__(self, name: _Optional[str] = ..., status_filter: _Optional[str] = ..., workspace: _Optional[str] = ...) -> None: ... + +class GetDraftPolicyResponse(_message.Message): + __slots__ = ("chunks", "rolling_summary", "draft_version", "last_analyzed_at_ms") + CHUNKS_FIELD_NUMBER: _ClassVar[int] + ROLLING_SUMMARY_FIELD_NUMBER: _ClassVar[int] + DRAFT_VERSION_FIELD_NUMBER: _ClassVar[int] + LAST_ANALYZED_AT_MS_FIELD_NUMBER: _ClassVar[int] + chunks: _containers.RepeatedCompositeFieldContainer[PolicyChunk] + rolling_summary: str + draft_version: int + last_analyzed_at_ms: int + def __init__(self, chunks: _Optional[_Iterable[_Union[PolicyChunk, _Mapping]]] = ..., rolling_summary: _Optional[str] = ..., draft_version: _Optional[int] = ..., last_analyzed_at_ms: _Optional[int] = ...) -> None: ... + +class ApproveDraftChunkRequest(_message.Message): + __slots__ = ("name", "chunk_id", "workspace") + NAME_FIELD_NUMBER: _ClassVar[int] + CHUNK_ID_FIELD_NUMBER: _ClassVar[int] + WORKSPACE_FIELD_NUMBER: _ClassVar[int] + name: str + chunk_id: str + workspace: str + def __init__(self, name: _Optional[str] = ..., chunk_id: _Optional[str] = ..., workspace: _Optional[str] = ...) -> None: ... + +class ApproveDraftChunkResponse(_message.Message): + __slots__ = ("policy_version", "policy_hash") + POLICY_VERSION_FIELD_NUMBER: _ClassVar[int] + POLICY_HASH_FIELD_NUMBER: _ClassVar[int] + policy_version: int + policy_hash: str + def __init__(self, policy_version: _Optional[int] = ..., policy_hash: _Optional[str] = ...) -> None: ... + +class RejectDraftChunkRequest(_message.Message): + __slots__ = ("name", "chunk_id", "reason", "workspace") + NAME_FIELD_NUMBER: _ClassVar[int] + CHUNK_ID_FIELD_NUMBER: _ClassVar[int] + REASON_FIELD_NUMBER: _ClassVar[int] + WORKSPACE_FIELD_NUMBER: _ClassVar[int] + name: str + chunk_id: str + reason: str + workspace: str + def __init__(self, name: _Optional[str] = ..., chunk_id: _Optional[str] = ..., reason: _Optional[str] = ..., workspace: _Optional[str] = ...) -> None: ... + +class RejectDraftChunkResponse(_message.Message): + __slots__ = () + def __init__(self) -> None: ... + +class ApproveAllDraftChunksRequest(_message.Message): + __slots__ = ("name", "include_security_flagged", "workspace") + NAME_FIELD_NUMBER: _ClassVar[int] + INCLUDE_SECURITY_FLAGGED_FIELD_NUMBER: _ClassVar[int] + WORKSPACE_FIELD_NUMBER: _ClassVar[int] + name: str + include_security_flagged: bool + workspace: str + def __init__(self, name: _Optional[str] = ..., include_security_flagged: bool = ..., workspace: _Optional[str] = ...) -> None: ... + +class ApproveAllDraftChunksResponse(_message.Message): + __slots__ = ("policy_version", "policy_hash", "chunks_approved", "chunks_skipped") + POLICY_VERSION_FIELD_NUMBER: _ClassVar[int] + POLICY_HASH_FIELD_NUMBER: _ClassVar[int] + CHUNKS_APPROVED_FIELD_NUMBER: _ClassVar[int] + CHUNKS_SKIPPED_FIELD_NUMBER: _ClassVar[int] + policy_version: int + policy_hash: str + chunks_approved: int + chunks_skipped: int + def __init__(self, policy_version: _Optional[int] = ..., policy_hash: _Optional[str] = ..., chunks_approved: _Optional[int] = ..., chunks_skipped: _Optional[int] = ...) -> None: ... + +class EditDraftChunkRequest(_message.Message): + __slots__ = ("name", "chunk_id", "proposed_rule", "workspace") + NAME_FIELD_NUMBER: _ClassVar[int] + CHUNK_ID_FIELD_NUMBER: _ClassVar[int] + PROPOSED_RULE_FIELD_NUMBER: _ClassVar[int] + WORKSPACE_FIELD_NUMBER: _ClassVar[int] + name: str + chunk_id: str + proposed_rule: _sandbox_pb2.NetworkPolicyRule + workspace: str + def __init__(self, name: _Optional[str] = ..., chunk_id: _Optional[str] = ..., proposed_rule: _Optional[_Union[_sandbox_pb2.NetworkPolicyRule, _Mapping]] = ..., workspace: _Optional[str] = ...) -> None: ... + +class EditDraftChunkResponse(_message.Message): + __slots__ = () + def __init__(self) -> None: ... + +class UndoDraftChunkRequest(_message.Message): + __slots__ = ("name", "chunk_id", "workspace") + NAME_FIELD_NUMBER: _ClassVar[int] + CHUNK_ID_FIELD_NUMBER: _ClassVar[int] + WORKSPACE_FIELD_NUMBER: _ClassVar[int] + name: str + chunk_id: str + workspace: str + def __init__(self, name: _Optional[str] = ..., chunk_id: _Optional[str] = ..., workspace: _Optional[str] = ...) -> None: ... + +class UndoDraftChunkResponse(_message.Message): + __slots__ = ("policy_version", "policy_hash") + POLICY_VERSION_FIELD_NUMBER: _ClassVar[int] + POLICY_HASH_FIELD_NUMBER: _ClassVar[int] + policy_version: int + policy_hash: str + def __init__(self, policy_version: _Optional[int] = ..., policy_hash: _Optional[str] = ...) -> None: ... + +class ClearDraftChunksRequest(_message.Message): + __slots__ = ("name", "workspace") + NAME_FIELD_NUMBER: _ClassVar[int] + WORKSPACE_FIELD_NUMBER: _ClassVar[int] + name: str + workspace: str + def __init__(self, name: _Optional[str] = ..., workspace: _Optional[str] = ...) -> None: ... + +class ClearDraftChunksResponse(_message.Message): + __slots__ = ("chunks_cleared",) + CHUNKS_CLEARED_FIELD_NUMBER: _ClassVar[int] + chunks_cleared: int + def __init__(self, chunks_cleared: _Optional[int] = ...) -> None: ... + +class GetDraftHistoryRequest(_message.Message): + __slots__ = ("name", "workspace") + NAME_FIELD_NUMBER: _ClassVar[int] + WORKSPACE_FIELD_NUMBER: _ClassVar[int] + name: str + workspace: str + def __init__(self, name: _Optional[str] = ..., workspace: _Optional[str] = ...) -> None: ... + +class DraftHistoryEntry(_message.Message): + __slots__ = ("timestamp_ms", "event_type", "description", "chunk_id") + TIMESTAMP_MS_FIELD_NUMBER: _ClassVar[int] + EVENT_TYPE_FIELD_NUMBER: _ClassVar[int] + DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + CHUNK_ID_FIELD_NUMBER: _ClassVar[int] + timestamp_ms: int + event_type: str + description: str + chunk_id: str + def __init__(self, timestamp_ms: _Optional[int] = ..., event_type: _Optional[str] = ..., description: _Optional[str] = ..., chunk_id: _Optional[str] = ...) -> None: ... + +class GetDraftHistoryResponse(_message.Message): + __slots__ = ("entries",) + ENTRIES_FIELD_NUMBER: _ClassVar[int] + entries: _containers.RepeatedCompositeFieldContainer[DraftHistoryEntry] + def __init__(self, entries: _Optional[_Iterable[_Union[DraftHistoryEntry, _Mapping]]] = ...) -> None: ... + +class PolicyRevisionPayload(_message.Message): + __slots__ = ("policy", "hash", "load_error", "loaded_at_ms", "provenance") + class ProvenanceEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: str + def __init__(self, key: _Optional[str] = ..., value: _Optional[str] = ...) -> None: ... + POLICY_FIELD_NUMBER: _ClassVar[int] + HASH_FIELD_NUMBER: _ClassVar[int] + LOAD_ERROR_FIELD_NUMBER: _ClassVar[int] + LOADED_AT_MS_FIELD_NUMBER: _ClassVar[int] + PROVENANCE_FIELD_NUMBER: _ClassVar[int] + policy: _sandbox_pb2.SandboxPolicy + hash: str + load_error: str + loaded_at_ms: int + provenance: _containers.ScalarMap[str, str] + def __init__(self, policy: _Optional[_Union[_sandbox_pb2.SandboxPolicy, _Mapping]] = ..., hash: _Optional[str] = ..., load_error: _Optional[str] = ..., loaded_at_ms: _Optional[int] = ..., provenance: _Optional[_Mapping[str, str]] = ...) -> None: ... + +class DraftChunkPayload(_message.Message): + __slots__ = ("rule_name", "proposed_rule", "rationale", "security_notes", "confidence", "decided_at_ms", "host", "port", "binary", "draft_version", "validation_result", "rejection_reason") + RULE_NAME_FIELD_NUMBER: _ClassVar[int] + PROPOSED_RULE_FIELD_NUMBER: _ClassVar[int] + RATIONALE_FIELD_NUMBER: _ClassVar[int] + SECURITY_NOTES_FIELD_NUMBER: _ClassVar[int] + CONFIDENCE_FIELD_NUMBER: _ClassVar[int] + DECIDED_AT_MS_FIELD_NUMBER: _ClassVar[int] + HOST_FIELD_NUMBER: _ClassVar[int] + PORT_FIELD_NUMBER: _ClassVar[int] + BINARY_FIELD_NUMBER: _ClassVar[int] + DRAFT_VERSION_FIELD_NUMBER: _ClassVar[int] + VALIDATION_RESULT_FIELD_NUMBER: _ClassVar[int] + REJECTION_REASON_FIELD_NUMBER: _ClassVar[int] + rule_name: str + proposed_rule: _sandbox_pb2.NetworkPolicyRule + rationale: str + security_notes: str + confidence: float + decided_at_ms: int + host: str + port: int + binary: str + draft_version: int + validation_result: str + rejection_reason: str + def __init__(self, rule_name: _Optional[str] = ..., proposed_rule: _Optional[_Union[_sandbox_pb2.NetworkPolicyRule, _Mapping]] = ..., rationale: _Optional[str] = ..., security_notes: _Optional[str] = ..., confidence: _Optional[float] = ..., decided_at_ms: _Optional[int] = ..., host: _Optional[str] = ..., port: _Optional[int] = ..., binary: _Optional[str] = ..., draft_version: _Optional[int] = ..., validation_result: _Optional[str] = ..., rejection_reason: _Optional[str] = ...) -> None: ... + +class StoredPolicyRevision(_message.Message): + __slots__ = ("id", "sandbox_id", "version", "policy_payload", "policy_hash", "status", "load_error", "created_at_ms", "loaded_at_ms", "provenance") + class ProvenanceEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: str + def __init__(self, key: _Optional[str] = ..., value: _Optional[str] = ...) -> None: ... + ID_FIELD_NUMBER: _ClassVar[int] + SANDBOX_ID_FIELD_NUMBER: _ClassVar[int] + VERSION_FIELD_NUMBER: _ClassVar[int] + POLICY_PAYLOAD_FIELD_NUMBER: _ClassVar[int] + POLICY_HASH_FIELD_NUMBER: _ClassVar[int] + STATUS_FIELD_NUMBER: _ClassVar[int] + LOAD_ERROR_FIELD_NUMBER: _ClassVar[int] + CREATED_AT_MS_FIELD_NUMBER: _ClassVar[int] + LOADED_AT_MS_FIELD_NUMBER: _ClassVar[int] + PROVENANCE_FIELD_NUMBER: _ClassVar[int] + id: str + sandbox_id: str + version: int + policy_payload: bytes + policy_hash: str + status: str + load_error: str + created_at_ms: int + loaded_at_ms: int + provenance: _containers.ScalarMap[str, str] + def __init__(self, id: _Optional[str] = ..., sandbox_id: _Optional[str] = ..., version: _Optional[int] = ..., policy_payload: _Optional[bytes] = ..., policy_hash: _Optional[str] = ..., status: _Optional[str] = ..., load_error: _Optional[str] = ..., created_at_ms: _Optional[int] = ..., loaded_at_ms: _Optional[int] = ..., provenance: _Optional[_Mapping[str, str]] = ...) -> None: ... + +class StoredDraftChunk(_message.Message): + __slots__ = ("id", "sandbox_id", "draft_version", "status", "rule_name", "proposed_rule", "rationale", "security_notes", "confidence", "created_at_ms", "decided_at_ms", "host", "port", "binary", "hit_count", "first_seen_ms", "last_seen_ms", "validation_result", "rejection_reason") + ID_FIELD_NUMBER: _ClassVar[int] + SANDBOX_ID_FIELD_NUMBER: _ClassVar[int] + DRAFT_VERSION_FIELD_NUMBER: _ClassVar[int] + STATUS_FIELD_NUMBER: _ClassVar[int] + RULE_NAME_FIELD_NUMBER: _ClassVar[int] + PROPOSED_RULE_FIELD_NUMBER: _ClassVar[int] + RATIONALE_FIELD_NUMBER: _ClassVar[int] + SECURITY_NOTES_FIELD_NUMBER: _ClassVar[int] + CONFIDENCE_FIELD_NUMBER: _ClassVar[int] + CREATED_AT_MS_FIELD_NUMBER: _ClassVar[int] + DECIDED_AT_MS_FIELD_NUMBER: _ClassVar[int] + HOST_FIELD_NUMBER: _ClassVar[int] + PORT_FIELD_NUMBER: _ClassVar[int] + BINARY_FIELD_NUMBER: _ClassVar[int] + HIT_COUNT_FIELD_NUMBER: _ClassVar[int] + FIRST_SEEN_MS_FIELD_NUMBER: _ClassVar[int] + LAST_SEEN_MS_FIELD_NUMBER: _ClassVar[int] + VALIDATION_RESULT_FIELD_NUMBER: _ClassVar[int] + REJECTION_REASON_FIELD_NUMBER: _ClassVar[int] + id: str + sandbox_id: str + draft_version: int + status: str + rule_name: str + proposed_rule: bytes + rationale: str + security_notes: str + confidence: float + created_at_ms: int + decided_at_ms: int + host: str + port: int + binary: str + hit_count: int + first_seen_ms: int + last_seen_ms: int + validation_result: str + rejection_reason: str + def __init__(self, id: _Optional[str] = ..., sandbox_id: _Optional[str] = ..., draft_version: _Optional[int] = ..., status: _Optional[str] = ..., rule_name: _Optional[str] = ..., proposed_rule: _Optional[bytes] = ..., rationale: _Optional[str] = ..., security_notes: _Optional[str] = ..., confidence: _Optional[float] = ..., created_at_ms: _Optional[int] = ..., decided_at_ms: _Optional[int] = ..., host: _Optional[str] = ..., port: _Optional[int] = ..., binary: _Optional[str] = ..., hit_count: _Optional[int] = ..., first_seen_ms: _Optional[int] = ..., last_seen_ms: _Optional[int] = ..., validation_result: _Optional[str] = ..., rejection_reason: _Optional[str] = ...) -> None: ... + +class CreateWorkspaceRequest(_message.Message): + __slots__ = ("name", "labels") + class LabelsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: str + def __init__(self, key: _Optional[str] = ..., value: _Optional[str] = ...) -> None: ... + NAME_FIELD_NUMBER: _ClassVar[int] + LABELS_FIELD_NUMBER: _ClassVar[int] + name: str + labels: _containers.ScalarMap[str, str] + def __init__(self, name: _Optional[str] = ..., labels: _Optional[_Mapping[str, str]] = ...) -> None: ... + +class CreateWorkspaceResponse(_message.Message): + __slots__ = ("workspace",) + WORKSPACE_FIELD_NUMBER: _ClassVar[int] + workspace: _datamodel_pb2.Workspace + def __init__(self, workspace: _Optional[_Union[_datamodel_pb2.Workspace, _Mapping]] = ...) -> None: ... + +class GetWorkspaceRequest(_message.Message): + __slots__ = ("name",) + NAME_FIELD_NUMBER: _ClassVar[int] + name: str + def __init__(self, name: _Optional[str] = ...) -> None: ... + +class GetWorkspaceResponse(_message.Message): + __slots__ = ("workspace",) + WORKSPACE_FIELD_NUMBER: _ClassVar[int] + workspace: _datamodel_pb2.Workspace + def __init__(self, workspace: _Optional[_Union[_datamodel_pb2.Workspace, _Mapping]] = ...) -> None: ... + +class ListWorkspacesRequest(_message.Message): + __slots__ = ("limit", "offset", "label_selector") + LIMIT_FIELD_NUMBER: _ClassVar[int] + OFFSET_FIELD_NUMBER: _ClassVar[int] + LABEL_SELECTOR_FIELD_NUMBER: _ClassVar[int] + limit: int + offset: int + label_selector: str + def __init__(self, limit: _Optional[int] = ..., offset: _Optional[int] = ..., label_selector: _Optional[str] = ...) -> None: ... + +class ListWorkspacesResponse(_message.Message): + __slots__ = ("workspaces",) + WORKSPACES_FIELD_NUMBER: _ClassVar[int] + workspaces: _containers.RepeatedCompositeFieldContainer[_datamodel_pb2.Workspace] + def __init__(self, workspaces: _Optional[_Iterable[_Union[_datamodel_pb2.Workspace, _Mapping]]] = ...) -> None: ... + +class DeleteWorkspaceRequest(_message.Message): + __slots__ = ("name",) + NAME_FIELD_NUMBER: _ClassVar[int] + name: str + def __init__(self, name: _Optional[str] = ...) -> None: ... + +class DeleteWorkspaceResponse(_message.Message): + __slots__ = ("deleted",) + DELETED_FIELD_NUMBER: _ClassVar[int] + deleted: bool + def __init__(self, deleted: bool = ...) -> None: ... + +class WorkspaceMember(_message.Message): + __slots__ = ("metadata", "principal_subject", "role") + METADATA_FIELD_NUMBER: _ClassVar[int] + PRINCIPAL_SUBJECT_FIELD_NUMBER: _ClassVar[int] + ROLE_FIELD_NUMBER: _ClassVar[int] + metadata: _datamodel_pb2.ObjectMeta + principal_subject: str + role: WorkspaceRole + def __init__(self, metadata: _Optional[_Union[_datamodel_pb2.ObjectMeta, _Mapping]] = ..., principal_subject: _Optional[str] = ..., role: _Optional[_Union[WorkspaceRole, str]] = ...) -> None: ... + +class AddWorkspaceMemberRequest(_message.Message): + __slots__ = ("workspace", "principal_subject", "role") + WORKSPACE_FIELD_NUMBER: _ClassVar[int] + PRINCIPAL_SUBJECT_FIELD_NUMBER: _ClassVar[int] + ROLE_FIELD_NUMBER: _ClassVar[int] + workspace: str + principal_subject: str + role: WorkspaceRole + def __init__(self, workspace: _Optional[str] = ..., principal_subject: _Optional[str] = ..., role: _Optional[_Union[WorkspaceRole, str]] = ...) -> None: ... + +class AddWorkspaceMemberResponse(_message.Message): + __slots__ = ("member",) + MEMBER_FIELD_NUMBER: _ClassVar[int] + member: WorkspaceMember + def __init__(self, member: _Optional[_Union[WorkspaceMember, _Mapping]] = ...) -> None: ... + +class RemoveWorkspaceMemberRequest(_message.Message): + __slots__ = ("workspace", "principal_subject") + WORKSPACE_FIELD_NUMBER: _ClassVar[int] + PRINCIPAL_SUBJECT_FIELD_NUMBER: _ClassVar[int] + workspace: str + principal_subject: str + def __init__(self, workspace: _Optional[str] = ..., principal_subject: _Optional[str] = ...) -> None: ... + +class RemoveWorkspaceMemberResponse(_message.Message): + __slots__ = ("removed",) + REMOVED_FIELD_NUMBER: _ClassVar[int] + removed: bool + def __init__(self, removed: bool = ...) -> None: ... + +class ListWorkspaceMembersRequest(_message.Message): + __slots__ = ("workspace", "limit", "offset") + WORKSPACE_FIELD_NUMBER: _ClassVar[int] + LIMIT_FIELD_NUMBER: _ClassVar[int] + OFFSET_FIELD_NUMBER: _ClassVar[int] + workspace: str + limit: int + offset: int + def __init__(self, workspace: _Optional[str] = ..., limit: _Optional[int] = ..., offset: _Optional[int] = ...) -> None: ... + +class ListWorkspaceMembersResponse(_message.Message): + __slots__ = ("members",) + MEMBERS_FIELD_NUMBER: _ClassVar[int] + members: _containers.RepeatedCompositeFieldContainer[WorkspaceMember] + def __init__(self, members: _Optional[_Iterable[_Union[WorkspaceMember, _Mapping]]] = ...) -> None: ... diff --git a/python/openshell/_proto/openshell_pb2_grpc.py b/python/openshell/_proto/openshell_pb2_grpc.py new file mode 100644 index 0000000000..7ad3696b1b --- /dev/null +++ b/python/openshell/_proto/openshell_pb2_grpc.py @@ -0,0 +1,2942 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" +import grpc +import warnings + +from . import openshell_pb2 as openshell__pb2 +from . import sandbox_pb2 as sandbox__pb2 + +GRPC_GENERATED_VERSION = '1.78.0' +GRPC_VERSION = grpc.__version__ +_version_not_supported = False + +try: + from grpc._utilities import first_version_is_lower + _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION) +except ImportError: + _version_not_supported = True + +if _version_not_supported: + raise RuntimeError( + f'The grpc package installed is at version {GRPC_VERSION},' + + ' but the generated code in openshell_pb2_grpc.py depends on' + + f' grpcio>={GRPC_GENERATED_VERSION}.' + + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}' + + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.' + ) + + +class OpenShellStub(object): + """OpenShell service provides sandbox, provider, and runtime management capabilities. + + Conventions: + - This file owns the public API resource model exposed to OpenShell clients. + - `Sandbox`, `SandboxSpec`, `SandboxStatus`, and `SandboxPhase` are gateway-owned + public types. Internal compute drivers must not import or return them directly. + - The gateway translates internal compute-driver observations into these public + resource messages before persisting or returning them to clients. + """ + + def __init__(self, channel): + """Constructor. + + Args: + channel: A grpc.Channel. + """ + self.Health = channel.unary_unary( + '/openshell.v1.OpenShell/Health', + request_serializer=openshell__pb2.HealthRequest.SerializeToString, + response_deserializer=openshell__pb2.HealthResponse.FromString, + _registered_method=True) + self.GetCurrentUser = channel.unary_unary( + '/openshell.v1.OpenShell/GetCurrentUser', + request_serializer=openshell__pb2.GetCurrentUserRequest.SerializeToString, + response_deserializer=openshell__pb2.GetCurrentUserResponse.FromString, + _registered_method=True) + self.GetGatewayInfo = channel.unary_unary( + '/openshell.v1.OpenShell/GetGatewayInfo', + request_serializer=openshell__pb2.GetGatewayInfoRequest.SerializeToString, + response_deserializer=openshell__pb2.GetGatewayInfoResponse.FromString, + _registered_method=True) + self.CreateSandbox = channel.unary_unary( + '/openshell.v1.OpenShell/CreateSandbox', + request_serializer=openshell__pb2.CreateSandboxRequest.SerializeToString, + response_deserializer=openshell__pb2.SandboxResponse.FromString, + _registered_method=True) + self.GetSandbox = channel.unary_unary( + '/openshell.v1.OpenShell/GetSandbox', + request_serializer=openshell__pb2.GetSandboxRequest.SerializeToString, + response_deserializer=openshell__pb2.SandboxResponse.FromString, + _registered_method=True) + self.ListSandboxes = channel.unary_unary( + '/openshell.v1.OpenShell/ListSandboxes', + request_serializer=openshell__pb2.ListSandboxesRequest.SerializeToString, + response_deserializer=openshell__pb2.ListSandboxesResponse.FromString, + _registered_method=True) + self.ListSandboxProviders = channel.unary_unary( + '/openshell.v1.OpenShell/ListSandboxProviders', + request_serializer=openshell__pb2.ListSandboxProvidersRequest.SerializeToString, + response_deserializer=openshell__pb2.ListSandboxProvidersResponse.FromString, + _registered_method=True) + self.AttachSandboxProvider = channel.unary_unary( + '/openshell.v1.OpenShell/AttachSandboxProvider', + request_serializer=openshell__pb2.AttachSandboxProviderRequest.SerializeToString, + response_deserializer=openshell__pb2.AttachSandboxProviderResponse.FromString, + _registered_method=True) + self.DetachSandboxProvider = channel.unary_unary( + '/openshell.v1.OpenShell/DetachSandboxProvider', + request_serializer=openshell__pb2.DetachSandboxProviderRequest.SerializeToString, + response_deserializer=openshell__pb2.DetachSandboxProviderResponse.FromString, + _registered_method=True) + self.DeleteSandbox = channel.unary_unary( + '/openshell.v1.OpenShell/DeleteSandbox', + request_serializer=openshell__pb2.DeleteSandboxRequest.SerializeToString, + response_deserializer=openshell__pb2.DeleteSandboxResponse.FromString, + _registered_method=True) + self.CreateSshSession = channel.unary_unary( + '/openshell.v1.OpenShell/CreateSshSession', + request_serializer=openshell__pb2.CreateSshSessionRequest.SerializeToString, + response_deserializer=openshell__pb2.CreateSshSessionResponse.FromString, + _registered_method=True) + self.ExposeService = channel.unary_unary( + '/openshell.v1.OpenShell/ExposeService', + request_serializer=openshell__pb2.ExposeServiceRequest.SerializeToString, + response_deserializer=openshell__pb2.ServiceEndpointResponse.FromString, + _registered_method=True) + self.GetService = channel.unary_unary( + '/openshell.v1.OpenShell/GetService', + request_serializer=openshell__pb2.GetServiceRequest.SerializeToString, + response_deserializer=openshell__pb2.ServiceEndpointResponse.FromString, + _registered_method=True) + self.ListServices = channel.unary_unary( + '/openshell.v1.OpenShell/ListServices', + request_serializer=openshell__pb2.ListServicesRequest.SerializeToString, + response_deserializer=openshell__pb2.ListServicesResponse.FromString, + _registered_method=True) + self.DeleteService = channel.unary_unary( + '/openshell.v1.OpenShell/DeleteService', + request_serializer=openshell__pb2.DeleteServiceRequest.SerializeToString, + response_deserializer=openshell__pb2.DeleteServiceResponse.FromString, + _registered_method=True) + self.RevokeSshSession = channel.unary_unary( + '/openshell.v1.OpenShell/RevokeSshSession', + request_serializer=openshell__pb2.RevokeSshSessionRequest.SerializeToString, + response_deserializer=openshell__pb2.RevokeSshSessionResponse.FromString, + _registered_method=True) + self.ExecSandbox = channel.unary_stream( + '/openshell.v1.OpenShell/ExecSandbox', + request_serializer=openshell__pb2.ExecSandboxRequest.SerializeToString, + response_deserializer=openshell__pb2.ExecSandboxEvent.FromString, + _registered_method=True) + self.ForwardTcp = channel.stream_stream( + '/openshell.v1.OpenShell/ForwardTcp', + request_serializer=openshell__pb2.TcpForwardFrame.SerializeToString, + response_deserializer=openshell__pb2.TcpForwardFrame.FromString, + _registered_method=True) + self.ExecSandboxInteractive = channel.stream_stream( + '/openshell.v1.OpenShell/ExecSandboxInteractive', + request_serializer=openshell__pb2.ExecSandboxInput.SerializeToString, + response_deserializer=openshell__pb2.ExecSandboxEvent.FromString, + _registered_method=True) + self.CreateProvider = channel.unary_unary( + '/openshell.v1.OpenShell/CreateProvider', + request_serializer=openshell__pb2.CreateProviderRequest.SerializeToString, + response_deserializer=openshell__pb2.ProviderResponse.FromString, + _registered_method=True) + self.GetProvider = channel.unary_unary( + '/openshell.v1.OpenShell/GetProvider', + request_serializer=openshell__pb2.GetProviderRequest.SerializeToString, + response_deserializer=openshell__pb2.ProviderResponse.FromString, + _registered_method=True) + self.ListProviders = channel.unary_unary( + '/openshell.v1.OpenShell/ListProviders', + request_serializer=openshell__pb2.ListProvidersRequest.SerializeToString, + response_deserializer=openshell__pb2.ListProvidersResponse.FromString, + _registered_method=True) + self.ListProviderProfiles = channel.unary_unary( + '/openshell.v1.OpenShell/ListProviderProfiles', + request_serializer=openshell__pb2.ListProviderProfilesRequest.SerializeToString, + response_deserializer=openshell__pb2.ListProviderProfilesResponse.FromString, + _registered_method=True) + self.GetProviderProfile = channel.unary_unary( + '/openshell.v1.OpenShell/GetProviderProfile', + request_serializer=openshell__pb2.GetProviderProfileRequest.SerializeToString, + response_deserializer=openshell__pb2.ProviderProfileResponse.FromString, + _registered_method=True) + self.ImportProviderProfiles = channel.unary_unary( + '/openshell.v1.OpenShell/ImportProviderProfiles', + request_serializer=openshell__pb2.ImportProviderProfilesRequest.SerializeToString, + response_deserializer=openshell__pb2.ImportProviderProfilesResponse.FromString, + _registered_method=True) + self.UpdateProviderProfiles = channel.unary_unary( + '/openshell.v1.OpenShell/UpdateProviderProfiles', + request_serializer=openshell__pb2.UpdateProviderProfilesRequest.SerializeToString, + response_deserializer=openshell__pb2.UpdateProviderProfilesResponse.FromString, + _registered_method=True) + self.LintProviderProfiles = channel.unary_unary( + '/openshell.v1.OpenShell/LintProviderProfiles', + request_serializer=openshell__pb2.LintProviderProfilesRequest.SerializeToString, + response_deserializer=openshell__pb2.LintProviderProfilesResponse.FromString, + _registered_method=True) + self.UpdateProvider = channel.unary_unary( + '/openshell.v1.OpenShell/UpdateProvider', + request_serializer=openshell__pb2.UpdateProviderRequest.SerializeToString, + response_deserializer=openshell__pb2.ProviderResponse.FromString, + _registered_method=True) + self.GetProviderRefreshStatus = channel.unary_unary( + '/openshell.v1.OpenShell/GetProviderRefreshStatus', + request_serializer=openshell__pb2.GetProviderRefreshStatusRequest.SerializeToString, + response_deserializer=openshell__pb2.GetProviderRefreshStatusResponse.FromString, + _registered_method=True) + self.ConfigureProviderRefresh = channel.unary_unary( + '/openshell.v1.OpenShell/ConfigureProviderRefresh', + request_serializer=openshell__pb2.ConfigureProviderRefreshRequest.SerializeToString, + response_deserializer=openshell__pb2.ConfigureProviderRefreshResponse.FromString, + _registered_method=True) + self.RotateProviderCredential = channel.unary_unary( + '/openshell.v1.OpenShell/RotateProviderCredential', + request_serializer=openshell__pb2.RotateProviderCredentialRequest.SerializeToString, + response_deserializer=openshell__pb2.RotateProviderCredentialResponse.FromString, + _registered_method=True) + self.DeleteProviderRefresh = channel.unary_unary( + '/openshell.v1.OpenShell/DeleteProviderRefresh', + request_serializer=openshell__pb2.DeleteProviderRefreshRequest.SerializeToString, + response_deserializer=openshell__pb2.DeleteProviderRefreshResponse.FromString, + _registered_method=True) + self.DeleteProvider = channel.unary_unary( + '/openshell.v1.OpenShell/DeleteProvider', + request_serializer=openshell__pb2.DeleteProviderRequest.SerializeToString, + response_deserializer=openshell__pb2.DeleteProviderResponse.FromString, + _registered_method=True) + self.DeleteProviderProfile = channel.unary_unary( + '/openshell.v1.OpenShell/DeleteProviderProfile', + request_serializer=openshell__pb2.DeleteProviderProfileRequest.SerializeToString, + response_deserializer=openshell__pb2.DeleteProviderProfileResponse.FromString, + _registered_method=True) + self.GetSandboxConfig = channel.unary_unary( + '/openshell.v1.OpenShell/GetSandboxConfig', + request_serializer=sandbox__pb2.GetSandboxConfigRequest.SerializeToString, + response_deserializer=sandbox__pb2.GetSandboxConfigResponse.FromString, + _registered_method=True) + self.GetGatewayConfig = channel.unary_unary( + '/openshell.v1.OpenShell/GetGatewayConfig', + request_serializer=sandbox__pb2.GetGatewayConfigRequest.SerializeToString, + response_deserializer=sandbox__pb2.GetGatewayConfigResponse.FromString, + _registered_method=True) + self.UpdateConfig = channel.unary_unary( + '/openshell.v1.OpenShell/UpdateConfig', + request_serializer=openshell__pb2.UpdateConfigRequest.SerializeToString, + response_deserializer=openshell__pb2.UpdateConfigResponse.FromString, + _registered_method=True) + self.GetSandboxPolicyStatus = channel.unary_unary( + '/openshell.v1.OpenShell/GetSandboxPolicyStatus', + request_serializer=openshell__pb2.GetSandboxPolicyStatusRequest.SerializeToString, + response_deserializer=openshell__pb2.GetSandboxPolicyStatusResponse.FromString, + _registered_method=True) + self.ListSandboxPolicies = channel.unary_unary( + '/openshell.v1.OpenShell/ListSandboxPolicies', + request_serializer=openshell__pb2.ListSandboxPoliciesRequest.SerializeToString, + response_deserializer=openshell__pb2.ListSandboxPoliciesResponse.FromString, + _registered_method=True) + self.ReportPolicyStatus = channel.unary_unary( + '/openshell.v1.OpenShell/ReportPolicyStatus', + request_serializer=openshell__pb2.ReportPolicyStatusRequest.SerializeToString, + response_deserializer=openshell__pb2.ReportPolicyStatusResponse.FromString, + _registered_method=True) + self.GetSandboxProviderEnvironment = channel.unary_unary( + '/openshell.v1.OpenShell/GetSandboxProviderEnvironment', + request_serializer=openshell__pb2.GetSandboxProviderEnvironmentRequest.SerializeToString, + response_deserializer=openshell__pb2.GetSandboxProviderEnvironmentResponse.FromString, + _registered_method=True) + self.GetSandboxLogs = channel.unary_unary( + '/openshell.v1.OpenShell/GetSandboxLogs', + request_serializer=openshell__pb2.GetSandboxLogsRequest.SerializeToString, + response_deserializer=openshell__pb2.GetSandboxLogsResponse.FromString, + _registered_method=True) + self.PushSandboxLogs = channel.stream_unary( + '/openshell.v1.OpenShell/PushSandboxLogs', + request_serializer=openshell__pb2.PushSandboxLogsRequest.SerializeToString, + response_deserializer=openshell__pb2.PushSandboxLogsResponse.FromString, + _registered_method=True) + self.ConnectSupervisor = channel.stream_stream( + '/openshell.v1.OpenShell/ConnectSupervisor', + request_serializer=openshell__pb2.SupervisorMessage.SerializeToString, + response_deserializer=openshell__pb2.GatewayMessage.FromString, + _registered_method=True) + self.RelayStream = channel.stream_stream( + '/openshell.v1.OpenShell/RelayStream', + request_serializer=openshell__pb2.RelayFrame.SerializeToString, + response_deserializer=openshell__pb2.RelayFrame.FromString, + _registered_method=True) + self.WatchSandbox = channel.unary_stream( + '/openshell.v1.OpenShell/WatchSandbox', + request_serializer=openshell__pb2.WatchSandboxRequest.SerializeToString, + response_deserializer=openshell__pb2.SandboxStreamEvent.FromString, + _registered_method=True) + self.SubmitPolicyAnalysis = channel.unary_unary( + '/openshell.v1.OpenShell/SubmitPolicyAnalysis', + request_serializer=openshell__pb2.SubmitPolicyAnalysisRequest.SerializeToString, + response_deserializer=openshell__pb2.SubmitPolicyAnalysisResponse.FromString, + _registered_method=True) + self.GetDraftPolicy = channel.unary_unary( + '/openshell.v1.OpenShell/GetDraftPolicy', + request_serializer=openshell__pb2.GetDraftPolicyRequest.SerializeToString, + response_deserializer=openshell__pb2.GetDraftPolicyResponse.FromString, + _registered_method=True) + self.ApproveDraftChunk = channel.unary_unary( + '/openshell.v1.OpenShell/ApproveDraftChunk', + request_serializer=openshell__pb2.ApproveDraftChunkRequest.SerializeToString, + response_deserializer=openshell__pb2.ApproveDraftChunkResponse.FromString, + _registered_method=True) + self.RejectDraftChunk = channel.unary_unary( + '/openshell.v1.OpenShell/RejectDraftChunk', + request_serializer=openshell__pb2.RejectDraftChunkRequest.SerializeToString, + response_deserializer=openshell__pb2.RejectDraftChunkResponse.FromString, + _registered_method=True) + self.ApproveAllDraftChunks = channel.unary_unary( + '/openshell.v1.OpenShell/ApproveAllDraftChunks', + request_serializer=openshell__pb2.ApproveAllDraftChunksRequest.SerializeToString, + response_deserializer=openshell__pb2.ApproveAllDraftChunksResponse.FromString, + _registered_method=True) + self.EditDraftChunk = channel.unary_unary( + '/openshell.v1.OpenShell/EditDraftChunk', + request_serializer=openshell__pb2.EditDraftChunkRequest.SerializeToString, + response_deserializer=openshell__pb2.EditDraftChunkResponse.FromString, + _registered_method=True) + self.UndoDraftChunk = channel.unary_unary( + '/openshell.v1.OpenShell/UndoDraftChunk', + request_serializer=openshell__pb2.UndoDraftChunkRequest.SerializeToString, + response_deserializer=openshell__pb2.UndoDraftChunkResponse.FromString, + _registered_method=True) + self.ClearDraftChunks = channel.unary_unary( + '/openshell.v1.OpenShell/ClearDraftChunks', + request_serializer=openshell__pb2.ClearDraftChunksRequest.SerializeToString, + response_deserializer=openshell__pb2.ClearDraftChunksResponse.FromString, + _registered_method=True) + self.GetDraftHistory = channel.unary_unary( + '/openshell.v1.OpenShell/GetDraftHistory', + request_serializer=openshell__pb2.GetDraftHistoryRequest.SerializeToString, + response_deserializer=openshell__pb2.GetDraftHistoryResponse.FromString, + _registered_method=True) + self.IssueSandboxToken = channel.unary_unary( + '/openshell.v1.OpenShell/IssueSandboxToken', + request_serializer=openshell__pb2.IssueSandboxTokenRequest.SerializeToString, + response_deserializer=openshell__pb2.IssueSandboxTokenResponse.FromString, + _registered_method=True) + self.RefreshSandboxToken = channel.unary_unary( + '/openshell.v1.OpenShell/RefreshSandboxToken', + request_serializer=openshell__pb2.RefreshSandboxTokenRequest.SerializeToString, + response_deserializer=openshell__pb2.RefreshSandboxTokenResponse.FromString, + _registered_method=True) + self.CreateWorkspace = channel.unary_unary( + '/openshell.v1.OpenShell/CreateWorkspace', + request_serializer=openshell__pb2.CreateWorkspaceRequest.SerializeToString, + response_deserializer=openshell__pb2.CreateWorkspaceResponse.FromString, + _registered_method=True) + self.GetWorkspace = channel.unary_unary( + '/openshell.v1.OpenShell/GetWorkspace', + request_serializer=openshell__pb2.GetWorkspaceRequest.SerializeToString, + response_deserializer=openshell__pb2.GetWorkspaceResponse.FromString, + _registered_method=True) + self.ListWorkspaces = channel.unary_unary( + '/openshell.v1.OpenShell/ListWorkspaces', + request_serializer=openshell__pb2.ListWorkspacesRequest.SerializeToString, + response_deserializer=openshell__pb2.ListWorkspacesResponse.FromString, + _registered_method=True) + self.DeleteWorkspace = channel.unary_unary( + '/openshell.v1.OpenShell/DeleteWorkspace', + request_serializer=openshell__pb2.DeleteWorkspaceRequest.SerializeToString, + response_deserializer=openshell__pb2.DeleteWorkspaceResponse.FromString, + _registered_method=True) + self.AddWorkspaceMember = channel.unary_unary( + '/openshell.v1.OpenShell/AddWorkspaceMember', + request_serializer=openshell__pb2.AddWorkspaceMemberRequest.SerializeToString, + response_deserializer=openshell__pb2.AddWorkspaceMemberResponse.FromString, + _registered_method=True) + self.RemoveWorkspaceMember = channel.unary_unary( + '/openshell.v1.OpenShell/RemoveWorkspaceMember', + request_serializer=openshell__pb2.RemoveWorkspaceMemberRequest.SerializeToString, + response_deserializer=openshell__pb2.RemoveWorkspaceMemberResponse.FromString, + _registered_method=True) + self.ListWorkspaceMembers = channel.unary_unary( + '/openshell.v1.OpenShell/ListWorkspaceMembers', + request_serializer=openshell__pb2.ListWorkspaceMembersRequest.SerializeToString, + response_deserializer=openshell__pb2.ListWorkspaceMembersResponse.FromString, + _registered_method=True) + + +class OpenShellServicer(object): + """OpenShell service provides sandbox, provider, and runtime management capabilities. + + Conventions: + - This file owns the public API resource model exposed to OpenShell clients. + - `Sandbox`, `SandboxSpec`, `SandboxStatus`, and `SandboxPhase` are gateway-owned + public types. Internal compute drivers must not import or return them directly. + - The gateway translates internal compute-driver observations into these public + resource messages before persisting or returning them to clients. + """ + + def Health(self, request, context): + """Check the health of the service. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def GetCurrentUser(self, request, context): + """Return the authenticated caller identity established by the gateway. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def GetGatewayInfo(self, request, context): + """Fetch elevated live gateway runtime metadata. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def CreateSandbox(self, request, context): + """Create a new sandbox. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def GetSandbox(self, request, context): + """Fetch a sandbox by name. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def ListSandboxes(self, request, context): + """List sandboxes. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def ListSandboxProviders(self, request, context): + """List provider records attached to a sandbox. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def AttachSandboxProvider(self, request, context): + """Attach a provider record to an existing sandbox. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def DetachSandboxProvider(self, request, context): + """Detach a provider record from an existing sandbox. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def DeleteSandbox(self, request, context): + """Delete a sandbox by name. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def CreateSshSession(self, request, context): + """Create a short-lived SSH session for a sandbox. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def ExposeService(self, request, context): + """Create or update a sandbox HTTP service endpoint for local routing. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def GetService(self, request, context): + """Fetch one sandbox HTTP service endpoint. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def ListServices(self, request, context): + """List sandbox HTTP service endpoints. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def DeleteService(self, request, context): + """Delete one sandbox HTTP service endpoint. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def RevokeSshSession(self, request, context): + """Revoke a previously issued SSH session. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def ExecSandbox(self, request, context): + """Execute a command in a ready sandbox and stream output. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def ForwardTcp(self, request_iterator, context): + """Forward one CLI-side TCP connection to a loopback TCP target in a sandbox. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def ExecSandboxInteractive(self, request_iterator, context): + """Execute an interactive command with bidirectional stdin/stdout streaming. + The first client message MUST carry an ExecSandboxInput with the start + variant. Subsequent messages carry stdin bytes or window resize events. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def CreateProvider(self, request, context): + """Create a provider. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def GetProvider(self, request, context): + """Fetch a provider by name. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def ListProviders(self, request, context): + """List providers. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def ListProviderProfiles(self, request, context): + """List available provider type profiles. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def GetProviderProfile(self, request, context): + """Fetch one provider type profile by id. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def ImportProviderProfiles(self, request, context): + """Import custom provider type profiles. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def UpdateProviderProfiles(self, request, context): + """Update an existing custom provider type profile. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def LintProviderProfiles(self, request, context): + """Validate provider type profiles without registering them. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def UpdateProvider(self, request, context): + """Update an existing provider by name. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def GetProviderRefreshStatus(self, request, context): + """Fetch refresh status for one provider or provider credential. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def ConfigureProviderRefresh(self, request, context): + """Configure gateway-owned refresh material for one provider credential. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def RotateProviderCredential(self, request, context): + """Record a gateway-owned refresh request for one provider credential. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def DeleteProviderRefresh(self, request, context): + """Delete gateway-owned refresh configuration for one provider credential. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def DeleteProvider(self, request, context): + """Delete a provider by name. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def DeleteProviderProfile(self, request, context): + """Delete a custom provider type profile by id. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def GetSandboxConfig(self, request, context): + """Get sandbox settings by id (called by sandbox entrypoint and poll loop). + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def GetGatewayConfig(self, request, context): + """Get gateway-global settings (read-only feature flags; any authenticated + user may read these so the CLI and TUI can discover capabilities like + providers_v2_enabled without requiring Platform Admin). + + Scope-only (no role): scopes are granted by the IdP at token issuance, + orthogonal to workspace membership. Deployments that enable scope + enforcement configure the IdP to grant config:read (or openshell:all) + to all sandbox users, so this does not block least-privilege flows. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def UpdateConfig(self, request, context): + """Update settings or policy at sandbox or global scope. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def GetSandboxPolicyStatus(self, request, context): + """Get the load status of a specific policy version. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def ListSandboxPolicies(self, request, context): + """List policy history for a sandbox. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def ReportPolicyStatus(self, request, context): + """Report policy load result (called by sandbox after reload attempt). + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def GetSandboxProviderEnvironment(self, request, context): + """Get provider environment for a sandbox (called by sandbox supervisor at startup). + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def GetSandboxLogs(self, request, context): + """Fetch recent sandbox logs (one-shot). + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def PushSandboxLogs(self, request_iterator, context): + """Push sandbox supervisor logs to the server (client-streaming). + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def ConnectSupervisor(self, request_iterator, context): + """Persistent supervisor-to-gateway session (bidirectional streaming). + + The supervisor opens this stream at startup and keeps it alive for the + sandbox lifetime. The gateway uses it to coordinate relay channels for + SSH connect, ExecSandbox, and targetable sandbox services. Raw service + bytes flow over RelayStream calls (separate HTTP/2 streams on the same + connection), not over this stream. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def RelayStream(self, request_iterator, context): + """Raw byte relay between supervisor and gateway. + + The supervisor initiates this call after receiving a RelayOpen message + on its ConnectSupervisor stream. The first RelayFrame carries a + RelayInit with the channel_id to associate the new HTTP/2 stream with + the pending relay slot on the gateway. Subsequent frames carry raw bytes in either + direction between the gateway-side waiter (ForwardTcp / exec handler) + and the supervisor-side target bridge. + + This rides the same TCP+TLS+HTTP/2 connection as ConnectSupervisor — + no new TLS handshake, no reverse HTTP CONNECT. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def WatchSandbox(self, request, context): + """Watch a sandbox and stream updates. + + This stream can include: + - Sandbox status snapshots (phase/status) + - OpenShell server process logs correlated by sandbox_id + - Platform events correlated to the sandbox + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def SubmitPolicyAnalysis(self, request, context): + """--------------------------------------------------------------------------- + Draft policy recommendation RPCs + --------------------------------------------------------------------------- + + Submit denial analysis results from sandbox (summaries + proposed chunks). + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def GetDraftPolicy(self, request, context): + """Get draft policy recommendations for a sandbox. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def ApproveDraftChunk(self, request, context): + """Approve a single draft policy chunk (merges into active policy). + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def RejectDraftChunk(self, request, context): + """Reject a single draft policy chunk. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def ApproveAllDraftChunks(self, request, context): + """Approve all pending draft chunks (skips security-flagged unless forced). + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def EditDraftChunk(self, request, context): + """Edit a pending draft chunk in-place (e.g. narrow allowed_ips). + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def UndoDraftChunk(self, request, context): + """Reverse an approval (remove merged rule from active policy). + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def ClearDraftChunks(self, request, context): + """Clear all pending draft chunks for a sandbox. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def GetDraftHistory(self, request, context): + """Get decision history for a sandbox's draft policy. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def IssueSandboxToken(self, request, context): + """Exchange a sandbox-bootstrap credential (e.g. a Kubernetes projected + ServiceAccount token) for a gateway-minted JWT bound to the calling + sandbox's UUID. Used by the Kubernetes driver path; singleplayer + drivers receive the gateway JWT directly from the create-sandbox flow + and never call this RPC. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def RefreshSandboxToken(self, request, context): + """Renew the calling sandbox's gateway JWT. Older tokens remain valid + until their own expiry; deployments should keep token TTLs short to + bound replay exposure. The supervisor calls this from a background + task at ~80% of the token's lifetime; the new token is cached in + memory only — the on-disk bootstrap file is intentionally not + rewritten. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def CreateWorkspace(self, request, context): + """--------------------------------------------------------------------------- + Workspace management RPCs + --------------------------------------------------------------------------- + + Create a workspace. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def GetWorkspace(self, request, context): + """Fetch a workspace by name. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def ListWorkspaces(self, request, context): + """List workspaces. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def DeleteWorkspace(self, request, context): + """Delete a workspace by name. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def AddWorkspaceMember(self, request, context): + """Add a member to a workspace. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def RemoveWorkspaceMember(self, request, context): + """Remove a member from a workspace. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def ListWorkspaceMembers(self, request, context): + """List members of a workspace. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + +def add_OpenShellServicer_to_server(servicer, server): + rpc_method_handlers = { + 'Health': grpc.unary_unary_rpc_method_handler( + servicer.Health, + request_deserializer=openshell__pb2.HealthRequest.FromString, + response_serializer=openshell__pb2.HealthResponse.SerializeToString, + ), + 'GetCurrentUser': grpc.unary_unary_rpc_method_handler( + servicer.GetCurrentUser, + request_deserializer=openshell__pb2.GetCurrentUserRequest.FromString, + response_serializer=openshell__pb2.GetCurrentUserResponse.SerializeToString, + ), + 'GetGatewayInfo': grpc.unary_unary_rpc_method_handler( + servicer.GetGatewayInfo, + request_deserializer=openshell__pb2.GetGatewayInfoRequest.FromString, + response_serializer=openshell__pb2.GetGatewayInfoResponse.SerializeToString, + ), + 'CreateSandbox': grpc.unary_unary_rpc_method_handler( + servicer.CreateSandbox, + request_deserializer=openshell__pb2.CreateSandboxRequest.FromString, + response_serializer=openshell__pb2.SandboxResponse.SerializeToString, + ), + 'GetSandbox': grpc.unary_unary_rpc_method_handler( + servicer.GetSandbox, + request_deserializer=openshell__pb2.GetSandboxRequest.FromString, + response_serializer=openshell__pb2.SandboxResponse.SerializeToString, + ), + 'ListSandboxes': grpc.unary_unary_rpc_method_handler( + servicer.ListSandboxes, + request_deserializer=openshell__pb2.ListSandboxesRequest.FromString, + response_serializer=openshell__pb2.ListSandboxesResponse.SerializeToString, + ), + 'ListSandboxProviders': grpc.unary_unary_rpc_method_handler( + servicer.ListSandboxProviders, + request_deserializer=openshell__pb2.ListSandboxProvidersRequest.FromString, + response_serializer=openshell__pb2.ListSandboxProvidersResponse.SerializeToString, + ), + 'AttachSandboxProvider': grpc.unary_unary_rpc_method_handler( + servicer.AttachSandboxProvider, + request_deserializer=openshell__pb2.AttachSandboxProviderRequest.FromString, + response_serializer=openshell__pb2.AttachSandboxProviderResponse.SerializeToString, + ), + 'DetachSandboxProvider': grpc.unary_unary_rpc_method_handler( + servicer.DetachSandboxProvider, + request_deserializer=openshell__pb2.DetachSandboxProviderRequest.FromString, + response_serializer=openshell__pb2.DetachSandboxProviderResponse.SerializeToString, + ), + 'DeleteSandbox': grpc.unary_unary_rpc_method_handler( + servicer.DeleteSandbox, + request_deserializer=openshell__pb2.DeleteSandboxRequest.FromString, + response_serializer=openshell__pb2.DeleteSandboxResponse.SerializeToString, + ), + 'CreateSshSession': grpc.unary_unary_rpc_method_handler( + servicer.CreateSshSession, + request_deserializer=openshell__pb2.CreateSshSessionRequest.FromString, + response_serializer=openshell__pb2.CreateSshSessionResponse.SerializeToString, + ), + 'ExposeService': grpc.unary_unary_rpc_method_handler( + servicer.ExposeService, + request_deserializer=openshell__pb2.ExposeServiceRequest.FromString, + response_serializer=openshell__pb2.ServiceEndpointResponse.SerializeToString, + ), + 'GetService': grpc.unary_unary_rpc_method_handler( + servicer.GetService, + request_deserializer=openshell__pb2.GetServiceRequest.FromString, + response_serializer=openshell__pb2.ServiceEndpointResponse.SerializeToString, + ), + 'ListServices': grpc.unary_unary_rpc_method_handler( + servicer.ListServices, + request_deserializer=openshell__pb2.ListServicesRequest.FromString, + response_serializer=openshell__pb2.ListServicesResponse.SerializeToString, + ), + 'DeleteService': grpc.unary_unary_rpc_method_handler( + servicer.DeleteService, + request_deserializer=openshell__pb2.DeleteServiceRequest.FromString, + response_serializer=openshell__pb2.DeleteServiceResponse.SerializeToString, + ), + 'RevokeSshSession': grpc.unary_unary_rpc_method_handler( + servicer.RevokeSshSession, + request_deserializer=openshell__pb2.RevokeSshSessionRequest.FromString, + response_serializer=openshell__pb2.RevokeSshSessionResponse.SerializeToString, + ), + 'ExecSandbox': grpc.unary_stream_rpc_method_handler( + servicer.ExecSandbox, + request_deserializer=openshell__pb2.ExecSandboxRequest.FromString, + response_serializer=openshell__pb2.ExecSandboxEvent.SerializeToString, + ), + 'ForwardTcp': grpc.stream_stream_rpc_method_handler( + servicer.ForwardTcp, + request_deserializer=openshell__pb2.TcpForwardFrame.FromString, + response_serializer=openshell__pb2.TcpForwardFrame.SerializeToString, + ), + 'ExecSandboxInteractive': grpc.stream_stream_rpc_method_handler( + servicer.ExecSandboxInteractive, + request_deserializer=openshell__pb2.ExecSandboxInput.FromString, + response_serializer=openshell__pb2.ExecSandboxEvent.SerializeToString, + ), + 'CreateProvider': grpc.unary_unary_rpc_method_handler( + servicer.CreateProvider, + request_deserializer=openshell__pb2.CreateProviderRequest.FromString, + response_serializer=openshell__pb2.ProviderResponse.SerializeToString, + ), + 'GetProvider': grpc.unary_unary_rpc_method_handler( + servicer.GetProvider, + request_deserializer=openshell__pb2.GetProviderRequest.FromString, + response_serializer=openshell__pb2.ProviderResponse.SerializeToString, + ), + 'ListProviders': grpc.unary_unary_rpc_method_handler( + servicer.ListProviders, + request_deserializer=openshell__pb2.ListProvidersRequest.FromString, + response_serializer=openshell__pb2.ListProvidersResponse.SerializeToString, + ), + 'ListProviderProfiles': grpc.unary_unary_rpc_method_handler( + servicer.ListProviderProfiles, + request_deserializer=openshell__pb2.ListProviderProfilesRequest.FromString, + response_serializer=openshell__pb2.ListProviderProfilesResponse.SerializeToString, + ), + 'GetProviderProfile': grpc.unary_unary_rpc_method_handler( + servicer.GetProviderProfile, + request_deserializer=openshell__pb2.GetProviderProfileRequest.FromString, + response_serializer=openshell__pb2.ProviderProfileResponse.SerializeToString, + ), + 'ImportProviderProfiles': grpc.unary_unary_rpc_method_handler( + servicer.ImportProviderProfiles, + request_deserializer=openshell__pb2.ImportProviderProfilesRequest.FromString, + response_serializer=openshell__pb2.ImportProviderProfilesResponse.SerializeToString, + ), + 'UpdateProviderProfiles': grpc.unary_unary_rpc_method_handler( + servicer.UpdateProviderProfiles, + request_deserializer=openshell__pb2.UpdateProviderProfilesRequest.FromString, + response_serializer=openshell__pb2.UpdateProviderProfilesResponse.SerializeToString, + ), + 'LintProviderProfiles': grpc.unary_unary_rpc_method_handler( + servicer.LintProviderProfiles, + request_deserializer=openshell__pb2.LintProviderProfilesRequest.FromString, + response_serializer=openshell__pb2.LintProviderProfilesResponse.SerializeToString, + ), + 'UpdateProvider': grpc.unary_unary_rpc_method_handler( + servicer.UpdateProvider, + request_deserializer=openshell__pb2.UpdateProviderRequest.FromString, + response_serializer=openshell__pb2.ProviderResponse.SerializeToString, + ), + 'GetProviderRefreshStatus': grpc.unary_unary_rpc_method_handler( + servicer.GetProviderRefreshStatus, + request_deserializer=openshell__pb2.GetProviderRefreshStatusRequest.FromString, + response_serializer=openshell__pb2.GetProviderRefreshStatusResponse.SerializeToString, + ), + 'ConfigureProviderRefresh': grpc.unary_unary_rpc_method_handler( + servicer.ConfigureProviderRefresh, + request_deserializer=openshell__pb2.ConfigureProviderRefreshRequest.FromString, + response_serializer=openshell__pb2.ConfigureProviderRefreshResponse.SerializeToString, + ), + 'RotateProviderCredential': grpc.unary_unary_rpc_method_handler( + servicer.RotateProviderCredential, + request_deserializer=openshell__pb2.RotateProviderCredentialRequest.FromString, + response_serializer=openshell__pb2.RotateProviderCredentialResponse.SerializeToString, + ), + 'DeleteProviderRefresh': grpc.unary_unary_rpc_method_handler( + servicer.DeleteProviderRefresh, + request_deserializer=openshell__pb2.DeleteProviderRefreshRequest.FromString, + response_serializer=openshell__pb2.DeleteProviderRefreshResponse.SerializeToString, + ), + 'DeleteProvider': grpc.unary_unary_rpc_method_handler( + servicer.DeleteProvider, + request_deserializer=openshell__pb2.DeleteProviderRequest.FromString, + response_serializer=openshell__pb2.DeleteProviderResponse.SerializeToString, + ), + 'DeleteProviderProfile': grpc.unary_unary_rpc_method_handler( + servicer.DeleteProviderProfile, + request_deserializer=openshell__pb2.DeleteProviderProfileRequest.FromString, + response_serializer=openshell__pb2.DeleteProviderProfileResponse.SerializeToString, + ), + 'GetSandboxConfig': grpc.unary_unary_rpc_method_handler( + servicer.GetSandboxConfig, + request_deserializer=sandbox__pb2.GetSandboxConfigRequest.FromString, + response_serializer=sandbox__pb2.GetSandboxConfigResponse.SerializeToString, + ), + 'GetGatewayConfig': grpc.unary_unary_rpc_method_handler( + servicer.GetGatewayConfig, + request_deserializer=sandbox__pb2.GetGatewayConfigRequest.FromString, + response_serializer=sandbox__pb2.GetGatewayConfigResponse.SerializeToString, + ), + 'UpdateConfig': grpc.unary_unary_rpc_method_handler( + servicer.UpdateConfig, + request_deserializer=openshell__pb2.UpdateConfigRequest.FromString, + response_serializer=openshell__pb2.UpdateConfigResponse.SerializeToString, + ), + 'GetSandboxPolicyStatus': grpc.unary_unary_rpc_method_handler( + servicer.GetSandboxPolicyStatus, + request_deserializer=openshell__pb2.GetSandboxPolicyStatusRequest.FromString, + response_serializer=openshell__pb2.GetSandboxPolicyStatusResponse.SerializeToString, + ), + 'ListSandboxPolicies': grpc.unary_unary_rpc_method_handler( + servicer.ListSandboxPolicies, + request_deserializer=openshell__pb2.ListSandboxPoliciesRequest.FromString, + response_serializer=openshell__pb2.ListSandboxPoliciesResponse.SerializeToString, + ), + 'ReportPolicyStatus': grpc.unary_unary_rpc_method_handler( + servicer.ReportPolicyStatus, + request_deserializer=openshell__pb2.ReportPolicyStatusRequest.FromString, + response_serializer=openshell__pb2.ReportPolicyStatusResponse.SerializeToString, + ), + 'GetSandboxProviderEnvironment': grpc.unary_unary_rpc_method_handler( + servicer.GetSandboxProviderEnvironment, + request_deserializer=openshell__pb2.GetSandboxProviderEnvironmentRequest.FromString, + response_serializer=openshell__pb2.GetSandboxProviderEnvironmentResponse.SerializeToString, + ), + 'GetSandboxLogs': grpc.unary_unary_rpc_method_handler( + servicer.GetSandboxLogs, + request_deserializer=openshell__pb2.GetSandboxLogsRequest.FromString, + response_serializer=openshell__pb2.GetSandboxLogsResponse.SerializeToString, + ), + 'PushSandboxLogs': grpc.stream_unary_rpc_method_handler( + servicer.PushSandboxLogs, + request_deserializer=openshell__pb2.PushSandboxLogsRequest.FromString, + response_serializer=openshell__pb2.PushSandboxLogsResponse.SerializeToString, + ), + 'ConnectSupervisor': grpc.stream_stream_rpc_method_handler( + servicer.ConnectSupervisor, + request_deserializer=openshell__pb2.SupervisorMessage.FromString, + response_serializer=openshell__pb2.GatewayMessage.SerializeToString, + ), + 'RelayStream': grpc.stream_stream_rpc_method_handler( + servicer.RelayStream, + request_deserializer=openshell__pb2.RelayFrame.FromString, + response_serializer=openshell__pb2.RelayFrame.SerializeToString, + ), + 'WatchSandbox': grpc.unary_stream_rpc_method_handler( + servicer.WatchSandbox, + request_deserializer=openshell__pb2.WatchSandboxRequest.FromString, + response_serializer=openshell__pb2.SandboxStreamEvent.SerializeToString, + ), + 'SubmitPolicyAnalysis': grpc.unary_unary_rpc_method_handler( + servicer.SubmitPolicyAnalysis, + request_deserializer=openshell__pb2.SubmitPolicyAnalysisRequest.FromString, + response_serializer=openshell__pb2.SubmitPolicyAnalysisResponse.SerializeToString, + ), + 'GetDraftPolicy': grpc.unary_unary_rpc_method_handler( + servicer.GetDraftPolicy, + request_deserializer=openshell__pb2.GetDraftPolicyRequest.FromString, + response_serializer=openshell__pb2.GetDraftPolicyResponse.SerializeToString, + ), + 'ApproveDraftChunk': grpc.unary_unary_rpc_method_handler( + servicer.ApproveDraftChunk, + request_deserializer=openshell__pb2.ApproveDraftChunkRequest.FromString, + response_serializer=openshell__pb2.ApproveDraftChunkResponse.SerializeToString, + ), + 'RejectDraftChunk': grpc.unary_unary_rpc_method_handler( + servicer.RejectDraftChunk, + request_deserializer=openshell__pb2.RejectDraftChunkRequest.FromString, + response_serializer=openshell__pb2.RejectDraftChunkResponse.SerializeToString, + ), + 'ApproveAllDraftChunks': grpc.unary_unary_rpc_method_handler( + servicer.ApproveAllDraftChunks, + request_deserializer=openshell__pb2.ApproveAllDraftChunksRequest.FromString, + response_serializer=openshell__pb2.ApproveAllDraftChunksResponse.SerializeToString, + ), + 'EditDraftChunk': grpc.unary_unary_rpc_method_handler( + servicer.EditDraftChunk, + request_deserializer=openshell__pb2.EditDraftChunkRequest.FromString, + response_serializer=openshell__pb2.EditDraftChunkResponse.SerializeToString, + ), + 'UndoDraftChunk': grpc.unary_unary_rpc_method_handler( + servicer.UndoDraftChunk, + request_deserializer=openshell__pb2.UndoDraftChunkRequest.FromString, + response_serializer=openshell__pb2.UndoDraftChunkResponse.SerializeToString, + ), + 'ClearDraftChunks': grpc.unary_unary_rpc_method_handler( + servicer.ClearDraftChunks, + request_deserializer=openshell__pb2.ClearDraftChunksRequest.FromString, + response_serializer=openshell__pb2.ClearDraftChunksResponse.SerializeToString, + ), + 'GetDraftHistory': grpc.unary_unary_rpc_method_handler( + servicer.GetDraftHistory, + request_deserializer=openshell__pb2.GetDraftHistoryRequest.FromString, + response_serializer=openshell__pb2.GetDraftHistoryResponse.SerializeToString, + ), + 'IssueSandboxToken': grpc.unary_unary_rpc_method_handler( + servicer.IssueSandboxToken, + request_deserializer=openshell__pb2.IssueSandboxTokenRequest.FromString, + response_serializer=openshell__pb2.IssueSandboxTokenResponse.SerializeToString, + ), + 'RefreshSandboxToken': grpc.unary_unary_rpc_method_handler( + servicer.RefreshSandboxToken, + request_deserializer=openshell__pb2.RefreshSandboxTokenRequest.FromString, + response_serializer=openshell__pb2.RefreshSandboxTokenResponse.SerializeToString, + ), + 'CreateWorkspace': grpc.unary_unary_rpc_method_handler( + servicer.CreateWorkspace, + request_deserializer=openshell__pb2.CreateWorkspaceRequest.FromString, + response_serializer=openshell__pb2.CreateWorkspaceResponse.SerializeToString, + ), + 'GetWorkspace': grpc.unary_unary_rpc_method_handler( + servicer.GetWorkspace, + request_deserializer=openshell__pb2.GetWorkspaceRequest.FromString, + response_serializer=openshell__pb2.GetWorkspaceResponse.SerializeToString, + ), + 'ListWorkspaces': grpc.unary_unary_rpc_method_handler( + servicer.ListWorkspaces, + request_deserializer=openshell__pb2.ListWorkspacesRequest.FromString, + response_serializer=openshell__pb2.ListWorkspacesResponse.SerializeToString, + ), + 'DeleteWorkspace': grpc.unary_unary_rpc_method_handler( + servicer.DeleteWorkspace, + request_deserializer=openshell__pb2.DeleteWorkspaceRequest.FromString, + response_serializer=openshell__pb2.DeleteWorkspaceResponse.SerializeToString, + ), + 'AddWorkspaceMember': grpc.unary_unary_rpc_method_handler( + servicer.AddWorkspaceMember, + request_deserializer=openshell__pb2.AddWorkspaceMemberRequest.FromString, + response_serializer=openshell__pb2.AddWorkspaceMemberResponse.SerializeToString, + ), + 'RemoveWorkspaceMember': grpc.unary_unary_rpc_method_handler( + servicer.RemoveWorkspaceMember, + request_deserializer=openshell__pb2.RemoveWorkspaceMemberRequest.FromString, + response_serializer=openshell__pb2.RemoveWorkspaceMemberResponse.SerializeToString, + ), + 'ListWorkspaceMembers': grpc.unary_unary_rpc_method_handler( + servicer.ListWorkspaceMembers, + request_deserializer=openshell__pb2.ListWorkspaceMembersRequest.FromString, + response_serializer=openshell__pb2.ListWorkspaceMembersResponse.SerializeToString, + ), + } + generic_handler = grpc.method_handlers_generic_handler( + 'openshell.v1.OpenShell', rpc_method_handlers) + server.add_generic_rpc_handlers((generic_handler,)) + server.add_registered_method_handlers('openshell.v1.OpenShell', rpc_method_handlers) + + + # This class is part of an EXPERIMENTAL API. +class OpenShell(object): + """OpenShell service provides sandbox, provider, and runtime management capabilities. + + Conventions: + - This file owns the public API resource model exposed to OpenShell clients. + - `Sandbox`, `SandboxSpec`, `SandboxStatus`, and `SandboxPhase` are gateway-owned + public types. Internal compute drivers must not import or return them directly. + - The gateway translates internal compute-driver observations into these public + resource messages before persisting or returning them to clients. + """ + + @staticmethod + def Health(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/openshell.v1.OpenShell/Health', + openshell__pb2.HealthRequest.SerializeToString, + openshell__pb2.HealthResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def GetCurrentUser(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/openshell.v1.OpenShell/GetCurrentUser', + openshell__pb2.GetCurrentUserRequest.SerializeToString, + openshell__pb2.GetCurrentUserResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def GetGatewayInfo(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/openshell.v1.OpenShell/GetGatewayInfo', + openshell__pb2.GetGatewayInfoRequest.SerializeToString, + openshell__pb2.GetGatewayInfoResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def CreateSandbox(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/openshell.v1.OpenShell/CreateSandbox', + openshell__pb2.CreateSandboxRequest.SerializeToString, + openshell__pb2.SandboxResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def GetSandbox(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/openshell.v1.OpenShell/GetSandbox', + openshell__pb2.GetSandboxRequest.SerializeToString, + openshell__pb2.SandboxResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def ListSandboxes(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/openshell.v1.OpenShell/ListSandboxes', + openshell__pb2.ListSandboxesRequest.SerializeToString, + openshell__pb2.ListSandboxesResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def ListSandboxProviders(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/openshell.v1.OpenShell/ListSandboxProviders', + openshell__pb2.ListSandboxProvidersRequest.SerializeToString, + openshell__pb2.ListSandboxProvidersResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def AttachSandboxProvider(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/openshell.v1.OpenShell/AttachSandboxProvider', + openshell__pb2.AttachSandboxProviderRequest.SerializeToString, + openshell__pb2.AttachSandboxProviderResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def DetachSandboxProvider(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/openshell.v1.OpenShell/DetachSandboxProvider', + openshell__pb2.DetachSandboxProviderRequest.SerializeToString, + openshell__pb2.DetachSandboxProviderResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def DeleteSandbox(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/openshell.v1.OpenShell/DeleteSandbox', + openshell__pb2.DeleteSandboxRequest.SerializeToString, + openshell__pb2.DeleteSandboxResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def CreateSshSession(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/openshell.v1.OpenShell/CreateSshSession', + openshell__pb2.CreateSshSessionRequest.SerializeToString, + openshell__pb2.CreateSshSessionResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def ExposeService(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/openshell.v1.OpenShell/ExposeService', + openshell__pb2.ExposeServiceRequest.SerializeToString, + openshell__pb2.ServiceEndpointResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def GetService(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/openshell.v1.OpenShell/GetService', + openshell__pb2.GetServiceRequest.SerializeToString, + openshell__pb2.ServiceEndpointResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def ListServices(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/openshell.v1.OpenShell/ListServices', + openshell__pb2.ListServicesRequest.SerializeToString, + openshell__pb2.ListServicesResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def DeleteService(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/openshell.v1.OpenShell/DeleteService', + openshell__pb2.DeleteServiceRequest.SerializeToString, + openshell__pb2.DeleteServiceResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def RevokeSshSession(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/openshell.v1.OpenShell/RevokeSshSession', + openshell__pb2.RevokeSshSessionRequest.SerializeToString, + openshell__pb2.RevokeSshSessionResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def ExecSandbox(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_stream( + request, + target, + '/openshell.v1.OpenShell/ExecSandbox', + openshell__pb2.ExecSandboxRequest.SerializeToString, + openshell__pb2.ExecSandboxEvent.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def ForwardTcp(request_iterator, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.stream_stream( + request_iterator, + target, + '/openshell.v1.OpenShell/ForwardTcp', + openshell__pb2.TcpForwardFrame.SerializeToString, + openshell__pb2.TcpForwardFrame.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def ExecSandboxInteractive(request_iterator, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.stream_stream( + request_iterator, + target, + '/openshell.v1.OpenShell/ExecSandboxInteractive', + openshell__pb2.ExecSandboxInput.SerializeToString, + openshell__pb2.ExecSandboxEvent.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def CreateProvider(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/openshell.v1.OpenShell/CreateProvider', + openshell__pb2.CreateProviderRequest.SerializeToString, + openshell__pb2.ProviderResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def GetProvider(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/openshell.v1.OpenShell/GetProvider', + openshell__pb2.GetProviderRequest.SerializeToString, + openshell__pb2.ProviderResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def ListProviders(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/openshell.v1.OpenShell/ListProviders', + openshell__pb2.ListProvidersRequest.SerializeToString, + openshell__pb2.ListProvidersResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def ListProviderProfiles(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/openshell.v1.OpenShell/ListProviderProfiles', + openshell__pb2.ListProviderProfilesRequest.SerializeToString, + openshell__pb2.ListProviderProfilesResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def GetProviderProfile(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/openshell.v1.OpenShell/GetProviderProfile', + openshell__pb2.GetProviderProfileRequest.SerializeToString, + openshell__pb2.ProviderProfileResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def ImportProviderProfiles(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/openshell.v1.OpenShell/ImportProviderProfiles', + openshell__pb2.ImportProviderProfilesRequest.SerializeToString, + openshell__pb2.ImportProviderProfilesResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def UpdateProviderProfiles(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/openshell.v1.OpenShell/UpdateProviderProfiles', + openshell__pb2.UpdateProviderProfilesRequest.SerializeToString, + openshell__pb2.UpdateProviderProfilesResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def LintProviderProfiles(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/openshell.v1.OpenShell/LintProviderProfiles', + openshell__pb2.LintProviderProfilesRequest.SerializeToString, + openshell__pb2.LintProviderProfilesResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def UpdateProvider(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/openshell.v1.OpenShell/UpdateProvider', + openshell__pb2.UpdateProviderRequest.SerializeToString, + openshell__pb2.ProviderResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def GetProviderRefreshStatus(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/openshell.v1.OpenShell/GetProviderRefreshStatus', + openshell__pb2.GetProviderRefreshStatusRequest.SerializeToString, + openshell__pb2.GetProviderRefreshStatusResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def ConfigureProviderRefresh(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/openshell.v1.OpenShell/ConfigureProviderRefresh', + openshell__pb2.ConfigureProviderRefreshRequest.SerializeToString, + openshell__pb2.ConfigureProviderRefreshResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def RotateProviderCredential(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/openshell.v1.OpenShell/RotateProviderCredential', + openshell__pb2.RotateProviderCredentialRequest.SerializeToString, + openshell__pb2.RotateProviderCredentialResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def DeleteProviderRefresh(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/openshell.v1.OpenShell/DeleteProviderRefresh', + openshell__pb2.DeleteProviderRefreshRequest.SerializeToString, + openshell__pb2.DeleteProviderRefreshResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def DeleteProvider(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/openshell.v1.OpenShell/DeleteProvider', + openshell__pb2.DeleteProviderRequest.SerializeToString, + openshell__pb2.DeleteProviderResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def DeleteProviderProfile(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/openshell.v1.OpenShell/DeleteProviderProfile', + openshell__pb2.DeleteProviderProfileRequest.SerializeToString, + openshell__pb2.DeleteProviderProfileResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def GetSandboxConfig(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/openshell.v1.OpenShell/GetSandboxConfig', + sandbox__pb2.GetSandboxConfigRequest.SerializeToString, + sandbox__pb2.GetSandboxConfigResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def GetGatewayConfig(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/openshell.v1.OpenShell/GetGatewayConfig', + sandbox__pb2.GetGatewayConfigRequest.SerializeToString, + sandbox__pb2.GetGatewayConfigResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def UpdateConfig(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/openshell.v1.OpenShell/UpdateConfig', + openshell__pb2.UpdateConfigRequest.SerializeToString, + openshell__pb2.UpdateConfigResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def GetSandboxPolicyStatus(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/openshell.v1.OpenShell/GetSandboxPolicyStatus', + openshell__pb2.GetSandboxPolicyStatusRequest.SerializeToString, + openshell__pb2.GetSandboxPolicyStatusResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def ListSandboxPolicies(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/openshell.v1.OpenShell/ListSandboxPolicies', + openshell__pb2.ListSandboxPoliciesRequest.SerializeToString, + openshell__pb2.ListSandboxPoliciesResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def ReportPolicyStatus(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/openshell.v1.OpenShell/ReportPolicyStatus', + openshell__pb2.ReportPolicyStatusRequest.SerializeToString, + openshell__pb2.ReportPolicyStatusResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def GetSandboxProviderEnvironment(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/openshell.v1.OpenShell/GetSandboxProviderEnvironment', + openshell__pb2.GetSandboxProviderEnvironmentRequest.SerializeToString, + openshell__pb2.GetSandboxProviderEnvironmentResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def GetSandboxLogs(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/openshell.v1.OpenShell/GetSandboxLogs', + openshell__pb2.GetSandboxLogsRequest.SerializeToString, + openshell__pb2.GetSandboxLogsResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def PushSandboxLogs(request_iterator, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.stream_unary( + request_iterator, + target, + '/openshell.v1.OpenShell/PushSandboxLogs', + openshell__pb2.PushSandboxLogsRequest.SerializeToString, + openshell__pb2.PushSandboxLogsResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def ConnectSupervisor(request_iterator, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.stream_stream( + request_iterator, + target, + '/openshell.v1.OpenShell/ConnectSupervisor', + openshell__pb2.SupervisorMessage.SerializeToString, + openshell__pb2.GatewayMessage.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def RelayStream(request_iterator, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.stream_stream( + request_iterator, + target, + '/openshell.v1.OpenShell/RelayStream', + openshell__pb2.RelayFrame.SerializeToString, + openshell__pb2.RelayFrame.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def WatchSandbox(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_stream( + request, + target, + '/openshell.v1.OpenShell/WatchSandbox', + openshell__pb2.WatchSandboxRequest.SerializeToString, + openshell__pb2.SandboxStreamEvent.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def SubmitPolicyAnalysis(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/openshell.v1.OpenShell/SubmitPolicyAnalysis', + openshell__pb2.SubmitPolicyAnalysisRequest.SerializeToString, + openshell__pb2.SubmitPolicyAnalysisResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def GetDraftPolicy(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/openshell.v1.OpenShell/GetDraftPolicy', + openshell__pb2.GetDraftPolicyRequest.SerializeToString, + openshell__pb2.GetDraftPolicyResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def ApproveDraftChunk(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/openshell.v1.OpenShell/ApproveDraftChunk', + openshell__pb2.ApproveDraftChunkRequest.SerializeToString, + openshell__pb2.ApproveDraftChunkResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def RejectDraftChunk(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/openshell.v1.OpenShell/RejectDraftChunk', + openshell__pb2.RejectDraftChunkRequest.SerializeToString, + openshell__pb2.RejectDraftChunkResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def ApproveAllDraftChunks(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/openshell.v1.OpenShell/ApproveAllDraftChunks', + openshell__pb2.ApproveAllDraftChunksRequest.SerializeToString, + openshell__pb2.ApproveAllDraftChunksResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def EditDraftChunk(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/openshell.v1.OpenShell/EditDraftChunk', + openshell__pb2.EditDraftChunkRequest.SerializeToString, + openshell__pb2.EditDraftChunkResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def UndoDraftChunk(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/openshell.v1.OpenShell/UndoDraftChunk', + openshell__pb2.UndoDraftChunkRequest.SerializeToString, + openshell__pb2.UndoDraftChunkResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def ClearDraftChunks(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/openshell.v1.OpenShell/ClearDraftChunks', + openshell__pb2.ClearDraftChunksRequest.SerializeToString, + openshell__pb2.ClearDraftChunksResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def GetDraftHistory(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/openshell.v1.OpenShell/GetDraftHistory', + openshell__pb2.GetDraftHistoryRequest.SerializeToString, + openshell__pb2.GetDraftHistoryResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def IssueSandboxToken(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/openshell.v1.OpenShell/IssueSandboxToken', + openshell__pb2.IssueSandboxTokenRequest.SerializeToString, + openshell__pb2.IssueSandboxTokenResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def RefreshSandboxToken(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/openshell.v1.OpenShell/RefreshSandboxToken', + openshell__pb2.RefreshSandboxTokenRequest.SerializeToString, + openshell__pb2.RefreshSandboxTokenResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def CreateWorkspace(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/openshell.v1.OpenShell/CreateWorkspace', + openshell__pb2.CreateWorkspaceRequest.SerializeToString, + openshell__pb2.CreateWorkspaceResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def GetWorkspace(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/openshell.v1.OpenShell/GetWorkspace', + openshell__pb2.GetWorkspaceRequest.SerializeToString, + openshell__pb2.GetWorkspaceResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def ListWorkspaces(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/openshell.v1.OpenShell/ListWorkspaces', + openshell__pb2.ListWorkspacesRequest.SerializeToString, + openshell__pb2.ListWorkspacesResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def DeleteWorkspace(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/openshell.v1.OpenShell/DeleteWorkspace', + openshell__pb2.DeleteWorkspaceRequest.SerializeToString, + openshell__pb2.DeleteWorkspaceResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def AddWorkspaceMember(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/openshell.v1.OpenShell/AddWorkspaceMember', + openshell__pb2.AddWorkspaceMemberRequest.SerializeToString, + openshell__pb2.AddWorkspaceMemberResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def RemoveWorkspaceMember(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/openshell.v1.OpenShell/RemoveWorkspaceMember', + openshell__pb2.RemoveWorkspaceMemberRequest.SerializeToString, + openshell__pb2.RemoveWorkspaceMemberResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def ListWorkspaceMembers(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/openshell.v1.OpenShell/ListWorkspaceMembers', + openshell__pb2.ListWorkspaceMembersRequest.SerializeToString, + openshell__pb2.ListWorkspaceMembersResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) diff --git a/python/openshell/_proto/options_pb2.py b/python/openshell/_proto/options_pb2.py new file mode 100644 index 0000000000..395a2d32ec --- /dev/null +++ b/python/openshell/_proto/options_pb2.py @@ -0,0 +1,37 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: options.proto +# Protobuf Python Version: 6.31.1 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 6, + 31, + 1, + '', + 'options.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from google.protobuf import descriptor_pb2 as google_dot_protobuf_dot_descriptor__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\roptions.proto\x12\x14openshell.options.v1\x1a google/protobuf/descriptor.proto\"b\n\x11\x41uthorizationRule\x12\x11\n\tauth_mode\x18\x01 \x01(\t\x12\x16\n\x0eworkspace_role\x18\x02 \x01(\t\x12\x13\n\x0bglobal_role\x18\x03 \x01(\t\x12\r\n\x05scope\x18\x04 \x01(\t:`\n\rauthorization\x12\x1e.google.protobuf.MethodOptions\x18\xd0\x86\x03 \x01(\x0b\x32\'.openshell.options.v1.AuthorizationRule:/\n\x06secret\x12\x1d.google.protobuf.FieldOptions\x18\xd1\x86\x03 \x01(\x08\x62\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'options_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + DESCRIPTOR._loaded_options = None + _globals['_AUTHORIZATIONRULE']._serialized_start=73 + _globals['_AUTHORIZATIONRULE']._serialized_end=171 +# @@protoc_insertion_point(module_scope) diff --git a/python/openshell/_proto/options_pb2.pyi b/python/openshell/_proto/options_pb2.pyi new file mode 100644 index 0000000000..4398ccc23d --- /dev/null +++ b/python/openshell/_proto/options_pb2.pyi @@ -0,0 +1,22 @@ +from google.protobuf import descriptor_pb2 as _descriptor_pb2 +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from typing import ClassVar as _ClassVar, Optional as _Optional + +DESCRIPTOR: _descriptor.FileDescriptor +AUTHORIZATION_FIELD_NUMBER: _ClassVar[int] +authorization: _descriptor.FieldDescriptor +SECRET_FIELD_NUMBER: _ClassVar[int] +secret: _descriptor.FieldDescriptor + +class AuthorizationRule(_message.Message): + __slots__ = ("auth_mode", "workspace_role", "global_role", "scope") + AUTH_MODE_FIELD_NUMBER: _ClassVar[int] + WORKSPACE_ROLE_FIELD_NUMBER: _ClassVar[int] + GLOBAL_ROLE_FIELD_NUMBER: _ClassVar[int] + SCOPE_FIELD_NUMBER: _ClassVar[int] + auth_mode: str + workspace_role: str + global_role: str + scope: str + def __init__(self, auth_mode: _Optional[str] = ..., workspace_role: _Optional[str] = ..., global_role: _Optional[str] = ..., scope: _Optional[str] = ...) -> None: ... diff --git a/python/openshell/_proto/options_pb2_grpc.py b/python/openshell/_proto/options_pb2_grpc.py new file mode 100644 index 0000000000..03f9cc990a --- /dev/null +++ b/python/openshell/_proto/options_pb2_grpc.py @@ -0,0 +1,24 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" +import grpc +import warnings + + +GRPC_GENERATED_VERSION = '1.78.0' +GRPC_VERSION = grpc.__version__ +_version_not_supported = False + +try: + from grpc._utilities import first_version_is_lower + _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION) +except ImportError: + _version_not_supported = True + +if _version_not_supported: + raise RuntimeError( + f'The grpc package installed is at version {GRPC_VERSION},' + + ' but the generated code in options_pb2_grpc.py depends on' + + f' grpcio>={GRPC_GENERATED_VERSION}.' + + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}' + + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.' + ) diff --git a/python/openshell/_proto/sandbox_pb2.py b/python/openshell/_proto/sandbox_pb2.py new file mode 100644 index 0000000000..2fa5c5f1d7 --- /dev/null +++ b/python/openshell/_proto/sandbox_pb2.py @@ -0,0 +1,121 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: sandbox.proto +# Protobuf Python Version: 6.31.1 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 6, + 31, + 1, + '', + 'sandbox.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from google.protobuf import struct_pb2 as google_dot_protobuf_dot_struct__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\rsandbox.proto\x12\x14openshell.sandbox.v1\x1a\x1cgoogle/protobuf/struct.proto\"\xc3\x04\n\rSandboxPolicy\x12\x0f\n\x07version\x18\x01 \x01(\r\x12:\n\nfilesystem\x18\x02 \x01(\x0b\x32&.openshell.sandbox.v1.FilesystemPolicy\x12\x36\n\x08landlock\x18\x03 \x01(\x0b\x32$.openshell.sandbox.v1.LandlockPolicy\x12\x34\n\x07process\x18\x04 \x01(\x0b\x32#.openshell.sandbox.v1.ProcessPolicy\x12R\n\x10network_policies\x18\x05 \x03(\x0b\x32\x38.openshell.sandbox.v1.SandboxPolicy.NetworkPoliciesEntry\x12X\n\x13network_middlewares\x18\x06 \x03(\x0b\x32;.openshell.sandbox.v1.SandboxPolicy.NetworkMiddlewaresEntry\x1a_\n\x14NetworkPoliciesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x36\n\x05value\x18\x02 \x01(\x0b\x32\'.openshell.sandbox.v1.NetworkPolicyRule:\x02\x38\x01\x1ah\n\x17NetworkMiddlewaresEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12<\n\x05value\x18\x02 \x01(\x0b\x32-.openshell.sandbox.v1.NetworkMiddlewareConfig:\x02\x38\x01\"R\n\x10\x46ilesystemPolicy\x12\x17\n\x0finclude_workdir\x18\x01 \x01(\x08\x12\x11\n\tread_only\x18\x02 \x03(\t\x12\x12\n\nread_write\x18\x03 \x03(\t\"\'\n\x0eLandlockPolicy\x12\x15\n\rcompatibility\x18\x01 \x01(\t\":\n\rProcessPolicy\x12\x13\n\x0brun_as_user\x18\x01 \x01(\t\x12\x14\n\x0crun_as_group\x18\x02 \x01(\t\"\x92\x01\n\x11NetworkPolicyRule\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x38\n\tendpoints\x18\x02 \x03(\x0b\x32%.openshell.sandbox.v1.NetworkEndpoint\x12\x35\n\x08\x62inaries\x18\x03 \x03(\x0b\x32#.openshell.sandbox.v1.NetworkBinary\"\xca\x01\n\x17NetworkMiddlewareConfig\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x12\n\nmiddleware\x18\x02 \x01(\t\x12\'\n\x06\x63onfig\x18\x03 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x10\n\x08on_error\x18\x04 \x01(\t\x12\x43\n\tendpoints\x18\x05 \x01(\x0b\x32\x30.openshell.sandbox.v1.MiddlewareEndpointSelector\x12\r\n\x05order\x18\x06 \x01(\x05\">\n\x1aMiddlewareEndpointSelector\x12\x0f\n\x07include\x18\x01 \x03(\t\x12\x0f\n\x07\x65xclude\x18\x02 \x03(\t\"\xb3\x06\n\x0fNetworkEndpoint\x12\x0c\n\x04host\x18\x01 \x01(\t\x12\x0c\n\x04port\x18\x02 \x01(\r\x12\x10\n\x08protocol\x18\x03 \x01(\t\x12\x0b\n\x03tls\x18\x04 \x01(\t\x12\x13\n\x0b\x65nforcement\x18\x05 \x01(\t\x12\x0e\n\x06\x61\x63\x63\x65ss\x18\x06 \x01(\t\x12+\n\x05rules\x18\x07 \x03(\x0b\x32\x1c.openshell.sandbox.v1.L7Rule\x12\x13\n\x0b\x61llowed_ips\x18\x08 \x03(\t\x12\r\n\x05ports\x18\t \x03(\r\x12\x34\n\ndeny_rules\x18\n \x03(\x0b\x32 .openshell.sandbox.v1.L7DenyRule\x12\x1b\n\x13\x61llow_encoded_slash\x18\x0b \x01(\x08\x12\x19\n\x11persisted_queries\x18\x0c \x01(\t\x12\x65\n\x19graphql_persisted_queries\x18\r \x03(\x0b\x32\x42.openshell.sandbox.v1.NetworkEndpoint.GraphqlPersistedQueriesEntry\x12\x1e\n\x16graphql_max_body_bytes\x18\x0e \x01(\r\x12\x0c\n\x04path\x18\x0f \x01(\t\x12$\n\x1cwebsocket_credential_rewrite\x18\x10 \x01(\x08\x12\'\n\x1frequest_body_credential_rewrite\x18\x11 \x01(\x08\x12\x18\n\x10\x61\x64visor_proposed\x18\x12 \x01(\x08\x12\x1a\n\x12\x63redential_signing\x18\x13 \x01(\t\x12\x17\n\x0fsigning_service\x18\x14 \x01(\t\x12\x16\n\x0esigning_region\x18\x15 \x01(\t\x12\x1f\n\x17json_rpc_max_body_bytes\x18\x16 \x01(\r\x12-\n\x03mcp\x18\x17 \x01(\x0b\x32 .openshell.sandbox.v1.McpOptions\x1a\x66\n\x1cGraphqlPersistedQueriesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x35\n\x05value\x18\x02 \x01(\x0b\x32&.openshell.sandbox.v1.GraphqlOperation:\x02\x38\x01\"\x8c\x01\n\nMcpOptions\x12\x1e\n\x11strict_tool_names\x18\x01 \x01(\x08H\x00\x88\x01\x01\x12(\n\x1b\x61llow_all_known_mcp_methods\x18\x02 \x01(\x08H\x01\x88\x01\x01\x42\x14\n\x12_strict_tool_namesB\x1e\n\x1c_allow_all_known_mcp_methods\"R\n\x10GraphqlOperation\x12\x16\n\x0eoperation_type\x18\x01 \x01(\t\x12\x16\n\x0eoperation_name\x18\x02 \x01(\t\x12\x0e\n\x06\x66ields\x18\x03 \x03(\t\"\xa4\x03\n\nL7DenyRule\x12\x0e\n\x06method\x18\x01 \x01(\t\x12\x0c\n\x04path\x18\x02 \x01(\t\x12\x0f\n\x07\x63ommand\x18\x03 \x01(\t\x12:\n\x05query\x18\x04 \x03(\x0b\x32+.openshell.sandbox.v1.L7DenyRule.QueryEntry\x12\x16\n\x0eoperation_type\x18\x05 \x01(\t\x12\x16\n\x0eoperation_name\x18\x06 \x01(\t\x12\x0e\n\x06\x66ields\x18\x07 \x03(\t\x12<\n\x06params\x18\t \x03(\x0b\x32,.openshell.sandbox.v1.L7DenyRule.ParamsEntry\x1aR\n\nQueryEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x33\n\x05value\x18\x02 \x01(\x0b\x32$.openshell.sandbox.v1.L7QueryMatcher:\x02\x38\x01\x1aS\n\x0bParamsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x33\n\x05value\x18\x02 \x01(\x0b\x32$.openshell.sandbox.v1.L7QueryMatcher:\x02\x38\x01J\x04\x08\x08\x10\t\"6\n\x06L7Rule\x12,\n\x05\x61llow\x18\x01 \x01(\x0b\x32\x1d.openshell.sandbox.v1.L7Allow\"\x9b\x03\n\x07L7Allow\x12\x0e\n\x06method\x18\x01 \x01(\t\x12\x0c\n\x04path\x18\x02 \x01(\t\x12\x0f\n\x07\x63ommand\x18\x03 \x01(\t\x12\x37\n\x05query\x18\x04 \x03(\x0b\x32(.openshell.sandbox.v1.L7Allow.QueryEntry\x12\x16\n\x0eoperation_type\x18\x05 \x01(\t\x12\x16\n\x0eoperation_name\x18\x06 \x01(\t\x12\x0e\n\x06\x66ields\x18\x07 \x03(\t\x12\x39\n\x06params\x18\t \x03(\x0b\x32).openshell.sandbox.v1.L7Allow.ParamsEntry\x1aR\n\nQueryEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x33\n\x05value\x18\x02 \x01(\x0b\x32$.openshell.sandbox.v1.L7QueryMatcher:\x02\x38\x01\x1aS\n\x0bParamsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x33\n\x05value\x18\x02 \x01(\x0b\x32$.openshell.sandbox.v1.L7QueryMatcher:\x02\x38\x01J\x04\x08\x08\x10\t\"+\n\x0eL7QueryMatcher\x12\x0c\n\x04glob\x18\x01 \x01(\t\x12\x0b\n\x03\x61ny\x18\x02 \x03(\t\"2\n\rNetworkBinary\x12\x0c\n\x04path\x18\x01 \x01(\t\x12\x13\n\x07harness\x18\x02 \x01(\x08\x42\x02\x18\x01\"-\n\x17GetSandboxConfigRequest\x12\x12\n\nsandbox_id\x18\x01 \x01(\t\"\x19\n\x17GetGatewayConfigRequest\"\xda\x01\n\x18GetGatewayConfigResponse\x12N\n\x08settings\x18\x01 \x03(\x0b\x32<.openshell.sandbox.v1.GetGatewayConfigResponse.SettingsEntry\x12\x19\n\x11settings_revision\x18\x02 \x01(\x04\x1aS\n\rSettingsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x31\n\x05value\x18\x02 \x01(\x0b\x32\".openshell.sandbox.v1.SettingValue:\x02\x38\x01\"q\n\x0cSettingValue\x12\x16\n\x0cstring_value\x18\x01 \x01(\tH\x00\x12\x14\n\nbool_value\x18\x02 \x01(\x08H\x00\x12\x13\n\tint_value\x18\x03 \x01(\x03H\x00\x12\x15\n\x0b\x62ytes_value\x18\x04 \x01(\x0cH\x00\x42\x07\n\x05value\"x\n\x10\x45\x66\x66\x65\x63tiveSetting\x12\x31\n\x05value\x18\x01 \x01(\x0b\x32\".openshell.sandbox.v1.SettingValue\x12\x31\n\x05scope\x18\x02 \x01(\x0e\x32\".openshell.sandbox.v1.SettingScope\"\xc6\x04\n\x18GetSandboxConfigResponse\x12\x33\n\x06policy\x18\x01 \x01(\x0b\x32#.openshell.sandbox.v1.SandboxPolicy\x12\x0f\n\x07version\x18\x02 \x01(\r\x12\x13\n\x0bpolicy_hash\x18\x03 \x01(\t\x12N\n\x08settings\x18\x04 \x03(\x0b\x32<.openshell.sandbox.v1.GetSandboxConfigResponse.SettingsEntry\x12\x17\n\x0f\x63onfig_revision\x18\x05 \x01(\x04\x12\x39\n\rpolicy_source\x18\x06 \x01(\x0e\x32\".openshell.sandbox.v1.PolicySource\x12\x1d\n\x15global_policy_version\x18\x07 \x01(\r\x12\x1d\n\x15provider_env_revision\x18\x08 \x01(\x04\x12Y\n\x1esupervisor_middleware_services\x18\t \x03(\x0b\x32\x31.openshell.sandbox.v1.SupervisorMiddlewareService\x12\x11\n\tworkspace\x18\n \x01(\t\x12&\n\x1epolicy_validation_failure_mode\x18\x0b \x01(\t\x1aW\n\rSettingsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x35\n\x05value\x18\x02 \x01(\x0b\x32&.openshell.sandbox.v1.EffectiveSetting:\x02\x38\x01\"k\n\x1bSupervisorMiddlewareService\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x15\n\rgrpc_endpoint\x18\x02 \x01(\t\x12\x16\n\x0emax_body_bytes\x18\x03 \x01(\x04\x12\x0f\n\x07timeout\x18\x04 \x01(\t*b\n\x0cSettingScope\x12\x1d\n\x19SETTING_SCOPE_UNSPECIFIED\x10\x00\x12\x19\n\x15SETTING_SCOPE_SANDBOX\x10\x01\x12\x18\n\x14SETTING_SCOPE_GLOBAL\x10\x02*b\n\x0cPolicySource\x12\x1d\n\x19POLICY_SOURCE_UNSPECIFIED\x10\x00\x12\x19\n\x15POLICY_SOURCE_SANDBOX\x10\x01\x12\x18\n\x14POLICY_SOURCE_GLOBAL\x10\x02\x62\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'sandbox_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + DESCRIPTOR._loaded_options = None + _globals['_SANDBOXPOLICY_NETWORKPOLICIESENTRY']._loaded_options = None + _globals['_SANDBOXPOLICY_NETWORKPOLICIESENTRY']._serialized_options = b'8\001' + _globals['_SANDBOXPOLICY_NETWORKMIDDLEWARESENTRY']._loaded_options = None + _globals['_SANDBOXPOLICY_NETWORKMIDDLEWARESENTRY']._serialized_options = b'8\001' + _globals['_NETWORKENDPOINT_GRAPHQLPERSISTEDQUERIESENTRY']._loaded_options = None + _globals['_NETWORKENDPOINT_GRAPHQLPERSISTEDQUERIESENTRY']._serialized_options = b'8\001' + _globals['_L7DENYRULE_QUERYENTRY']._loaded_options = None + _globals['_L7DENYRULE_QUERYENTRY']._serialized_options = b'8\001' + _globals['_L7DENYRULE_PARAMSENTRY']._loaded_options = None + _globals['_L7DENYRULE_PARAMSENTRY']._serialized_options = b'8\001' + _globals['_L7ALLOW_QUERYENTRY']._loaded_options = None + _globals['_L7ALLOW_QUERYENTRY']._serialized_options = b'8\001' + _globals['_L7ALLOW_PARAMSENTRY']._loaded_options = None + _globals['_L7ALLOW_PARAMSENTRY']._serialized_options = b'8\001' + _globals['_NETWORKBINARY'].fields_by_name['harness']._loaded_options = None + _globals['_NETWORKBINARY'].fields_by_name['harness']._serialized_options = b'\030\001' + _globals['_GETGATEWAYCONFIGRESPONSE_SETTINGSENTRY']._loaded_options = None + _globals['_GETGATEWAYCONFIGRESPONSE_SETTINGSENTRY']._serialized_options = b'8\001' + _globals['_GETSANDBOXCONFIGRESPONSE_SETTINGSENTRY']._loaded_options = None + _globals['_GETSANDBOXCONFIGRESPONSE_SETTINGSENTRY']._serialized_options = b'8\001' + _globals['_SETTINGSCOPE']._serialized_start=4519 + _globals['_SETTINGSCOPE']._serialized_end=4617 + _globals['_POLICYSOURCE']._serialized_start=4619 + _globals['_POLICYSOURCE']._serialized_end=4717 + _globals['_SANDBOXPOLICY']._serialized_start=70 + _globals['_SANDBOXPOLICY']._serialized_end=649 + _globals['_SANDBOXPOLICY_NETWORKPOLICIESENTRY']._serialized_start=448 + _globals['_SANDBOXPOLICY_NETWORKPOLICIESENTRY']._serialized_end=543 + _globals['_SANDBOXPOLICY_NETWORKMIDDLEWARESENTRY']._serialized_start=545 + _globals['_SANDBOXPOLICY_NETWORKMIDDLEWARESENTRY']._serialized_end=649 + _globals['_FILESYSTEMPOLICY']._serialized_start=651 + _globals['_FILESYSTEMPOLICY']._serialized_end=733 + _globals['_LANDLOCKPOLICY']._serialized_start=735 + _globals['_LANDLOCKPOLICY']._serialized_end=774 + _globals['_PROCESSPOLICY']._serialized_start=776 + _globals['_PROCESSPOLICY']._serialized_end=834 + _globals['_NETWORKPOLICYRULE']._serialized_start=837 + _globals['_NETWORKPOLICYRULE']._serialized_end=983 + _globals['_NETWORKMIDDLEWARECONFIG']._serialized_start=986 + _globals['_NETWORKMIDDLEWARECONFIG']._serialized_end=1188 + _globals['_MIDDLEWAREENDPOINTSELECTOR']._serialized_start=1190 + _globals['_MIDDLEWAREENDPOINTSELECTOR']._serialized_end=1252 + _globals['_NETWORKENDPOINT']._serialized_start=1255 + _globals['_NETWORKENDPOINT']._serialized_end=2074 + _globals['_NETWORKENDPOINT_GRAPHQLPERSISTEDQUERIESENTRY']._serialized_start=1972 + _globals['_NETWORKENDPOINT_GRAPHQLPERSISTEDQUERIESENTRY']._serialized_end=2074 + _globals['_MCPOPTIONS']._serialized_start=2077 + _globals['_MCPOPTIONS']._serialized_end=2217 + _globals['_GRAPHQLOPERATION']._serialized_start=2219 + _globals['_GRAPHQLOPERATION']._serialized_end=2301 + _globals['_L7DENYRULE']._serialized_start=2304 + _globals['_L7DENYRULE']._serialized_end=2724 + _globals['_L7DENYRULE_QUERYENTRY']._serialized_start=2551 + _globals['_L7DENYRULE_QUERYENTRY']._serialized_end=2633 + _globals['_L7DENYRULE_PARAMSENTRY']._serialized_start=2635 + _globals['_L7DENYRULE_PARAMSENTRY']._serialized_end=2718 + _globals['_L7RULE']._serialized_start=2726 + _globals['_L7RULE']._serialized_end=2780 + _globals['_L7ALLOW']._serialized_start=2783 + _globals['_L7ALLOW']._serialized_end=3194 + _globals['_L7ALLOW_QUERYENTRY']._serialized_start=2551 + _globals['_L7ALLOW_QUERYENTRY']._serialized_end=2633 + _globals['_L7ALLOW_PARAMSENTRY']._serialized_start=2635 + _globals['_L7ALLOW_PARAMSENTRY']._serialized_end=2718 + _globals['_L7QUERYMATCHER']._serialized_start=3196 + _globals['_L7QUERYMATCHER']._serialized_end=3239 + _globals['_NETWORKBINARY']._serialized_start=3241 + _globals['_NETWORKBINARY']._serialized_end=3291 + _globals['_GETSANDBOXCONFIGREQUEST']._serialized_start=3293 + _globals['_GETSANDBOXCONFIGREQUEST']._serialized_end=3338 + _globals['_GETGATEWAYCONFIGREQUEST']._serialized_start=3340 + _globals['_GETGATEWAYCONFIGREQUEST']._serialized_end=3365 + _globals['_GETGATEWAYCONFIGRESPONSE']._serialized_start=3368 + _globals['_GETGATEWAYCONFIGRESPONSE']._serialized_end=3586 + _globals['_GETGATEWAYCONFIGRESPONSE_SETTINGSENTRY']._serialized_start=3503 + _globals['_GETGATEWAYCONFIGRESPONSE_SETTINGSENTRY']._serialized_end=3586 + _globals['_SETTINGVALUE']._serialized_start=3588 + _globals['_SETTINGVALUE']._serialized_end=3701 + _globals['_EFFECTIVESETTING']._serialized_start=3703 + _globals['_EFFECTIVESETTING']._serialized_end=3823 + _globals['_GETSANDBOXCONFIGRESPONSE']._serialized_start=3826 + _globals['_GETSANDBOXCONFIGRESPONSE']._serialized_end=4408 + _globals['_GETSANDBOXCONFIGRESPONSE_SETTINGSENTRY']._serialized_start=4321 + _globals['_GETSANDBOXCONFIGRESPONSE_SETTINGSENTRY']._serialized_end=4408 + _globals['_SUPERVISORMIDDLEWARESERVICE']._serialized_start=4410 + _globals['_SUPERVISORMIDDLEWARESERVICE']._serialized_end=4517 +# @@protoc_insertion_point(module_scope) diff --git a/python/openshell/_proto/sandbox_pb2.pyi b/python/openshell/_proto/sandbox_pb2.pyi new file mode 100644 index 0000000000..9101dbb51a --- /dev/null +++ b/python/openshell/_proto/sandbox_pb2.pyi @@ -0,0 +1,370 @@ +from google.protobuf import struct_pb2 as _struct_pb2 +from google.protobuf.internal import containers as _containers +from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from collections.abc import Iterable as _Iterable, Mapping as _Mapping +from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union + +DESCRIPTOR: _descriptor.FileDescriptor + +class SettingScope(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + SETTING_SCOPE_UNSPECIFIED: _ClassVar[SettingScope] + SETTING_SCOPE_SANDBOX: _ClassVar[SettingScope] + SETTING_SCOPE_GLOBAL: _ClassVar[SettingScope] + +class PolicySource(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + POLICY_SOURCE_UNSPECIFIED: _ClassVar[PolicySource] + POLICY_SOURCE_SANDBOX: _ClassVar[PolicySource] + POLICY_SOURCE_GLOBAL: _ClassVar[PolicySource] +SETTING_SCOPE_UNSPECIFIED: SettingScope +SETTING_SCOPE_SANDBOX: SettingScope +SETTING_SCOPE_GLOBAL: SettingScope +POLICY_SOURCE_UNSPECIFIED: PolicySource +POLICY_SOURCE_SANDBOX: PolicySource +POLICY_SOURCE_GLOBAL: PolicySource + +class SandboxPolicy(_message.Message): + __slots__ = ("version", "filesystem", "landlock", "process", "network_policies", "network_middlewares") + class NetworkPoliciesEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: NetworkPolicyRule + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[NetworkPolicyRule, _Mapping]] = ...) -> None: ... + class NetworkMiddlewaresEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: NetworkMiddlewareConfig + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[NetworkMiddlewareConfig, _Mapping]] = ...) -> None: ... + VERSION_FIELD_NUMBER: _ClassVar[int] + FILESYSTEM_FIELD_NUMBER: _ClassVar[int] + LANDLOCK_FIELD_NUMBER: _ClassVar[int] + PROCESS_FIELD_NUMBER: _ClassVar[int] + NETWORK_POLICIES_FIELD_NUMBER: _ClassVar[int] + NETWORK_MIDDLEWARES_FIELD_NUMBER: _ClassVar[int] + version: int + filesystem: FilesystemPolicy + landlock: LandlockPolicy + process: ProcessPolicy + network_policies: _containers.MessageMap[str, NetworkPolicyRule] + network_middlewares: _containers.MessageMap[str, NetworkMiddlewareConfig] + def __init__(self, version: _Optional[int] = ..., filesystem: _Optional[_Union[FilesystemPolicy, _Mapping]] = ..., landlock: _Optional[_Union[LandlockPolicy, _Mapping]] = ..., process: _Optional[_Union[ProcessPolicy, _Mapping]] = ..., network_policies: _Optional[_Mapping[str, NetworkPolicyRule]] = ..., network_middlewares: _Optional[_Mapping[str, NetworkMiddlewareConfig]] = ...) -> None: ... + +class FilesystemPolicy(_message.Message): + __slots__ = ("include_workdir", "read_only", "read_write") + INCLUDE_WORKDIR_FIELD_NUMBER: _ClassVar[int] + READ_ONLY_FIELD_NUMBER: _ClassVar[int] + READ_WRITE_FIELD_NUMBER: _ClassVar[int] + include_workdir: bool + read_only: _containers.RepeatedScalarFieldContainer[str] + read_write: _containers.RepeatedScalarFieldContainer[str] + def __init__(self, include_workdir: bool = ..., read_only: _Optional[_Iterable[str]] = ..., read_write: _Optional[_Iterable[str]] = ...) -> None: ... + +class LandlockPolicy(_message.Message): + __slots__ = ("compatibility",) + COMPATIBILITY_FIELD_NUMBER: _ClassVar[int] + compatibility: str + def __init__(self, compatibility: _Optional[str] = ...) -> None: ... + +class ProcessPolicy(_message.Message): + __slots__ = ("run_as_user", "run_as_group") + RUN_AS_USER_FIELD_NUMBER: _ClassVar[int] + RUN_AS_GROUP_FIELD_NUMBER: _ClassVar[int] + run_as_user: str + run_as_group: str + def __init__(self, run_as_user: _Optional[str] = ..., run_as_group: _Optional[str] = ...) -> None: ... + +class NetworkPolicyRule(_message.Message): + __slots__ = ("name", "endpoints", "binaries") + NAME_FIELD_NUMBER: _ClassVar[int] + ENDPOINTS_FIELD_NUMBER: _ClassVar[int] + BINARIES_FIELD_NUMBER: _ClassVar[int] + name: str + endpoints: _containers.RepeatedCompositeFieldContainer[NetworkEndpoint] + binaries: _containers.RepeatedCompositeFieldContainer[NetworkBinary] + def __init__(self, name: _Optional[str] = ..., endpoints: _Optional[_Iterable[_Union[NetworkEndpoint, _Mapping]]] = ..., binaries: _Optional[_Iterable[_Union[NetworkBinary, _Mapping]]] = ...) -> None: ... + +class NetworkMiddlewareConfig(_message.Message): + __slots__ = ("name", "middleware", "config", "on_error", "endpoints", "order") + NAME_FIELD_NUMBER: _ClassVar[int] + MIDDLEWARE_FIELD_NUMBER: _ClassVar[int] + CONFIG_FIELD_NUMBER: _ClassVar[int] + ON_ERROR_FIELD_NUMBER: _ClassVar[int] + ENDPOINTS_FIELD_NUMBER: _ClassVar[int] + ORDER_FIELD_NUMBER: _ClassVar[int] + name: str + middleware: str + config: _struct_pb2.Struct + on_error: str + endpoints: MiddlewareEndpointSelector + order: int + def __init__(self, name: _Optional[str] = ..., middleware: _Optional[str] = ..., config: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ..., on_error: _Optional[str] = ..., endpoints: _Optional[_Union[MiddlewareEndpointSelector, _Mapping]] = ..., order: _Optional[int] = ...) -> None: ... + +class MiddlewareEndpointSelector(_message.Message): + __slots__ = ("include", "exclude") + INCLUDE_FIELD_NUMBER: _ClassVar[int] + EXCLUDE_FIELD_NUMBER: _ClassVar[int] + include: _containers.RepeatedScalarFieldContainer[str] + exclude: _containers.RepeatedScalarFieldContainer[str] + def __init__(self, include: _Optional[_Iterable[str]] = ..., exclude: _Optional[_Iterable[str]] = ...) -> None: ... + +class NetworkEndpoint(_message.Message): + __slots__ = ("host", "port", "protocol", "tls", "enforcement", "access", "rules", "allowed_ips", "ports", "deny_rules", "allow_encoded_slash", "persisted_queries", "graphql_persisted_queries", "graphql_max_body_bytes", "path", "websocket_credential_rewrite", "request_body_credential_rewrite", "advisor_proposed", "credential_signing", "signing_service", "signing_region", "json_rpc_max_body_bytes", "mcp") + class GraphqlPersistedQueriesEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: GraphqlOperation + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[GraphqlOperation, _Mapping]] = ...) -> None: ... + HOST_FIELD_NUMBER: _ClassVar[int] + PORT_FIELD_NUMBER: _ClassVar[int] + PROTOCOL_FIELD_NUMBER: _ClassVar[int] + TLS_FIELD_NUMBER: _ClassVar[int] + ENFORCEMENT_FIELD_NUMBER: _ClassVar[int] + ACCESS_FIELD_NUMBER: _ClassVar[int] + RULES_FIELD_NUMBER: _ClassVar[int] + ALLOWED_IPS_FIELD_NUMBER: _ClassVar[int] + PORTS_FIELD_NUMBER: _ClassVar[int] + DENY_RULES_FIELD_NUMBER: _ClassVar[int] + ALLOW_ENCODED_SLASH_FIELD_NUMBER: _ClassVar[int] + PERSISTED_QUERIES_FIELD_NUMBER: _ClassVar[int] + GRAPHQL_PERSISTED_QUERIES_FIELD_NUMBER: _ClassVar[int] + GRAPHQL_MAX_BODY_BYTES_FIELD_NUMBER: _ClassVar[int] + PATH_FIELD_NUMBER: _ClassVar[int] + WEBSOCKET_CREDENTIAL_REWRITE_FIELD_NUMBER: _ClassVar[int] + REQUEST_BODY_CREDENTIAL_REWRITE_FIELD_NUMBER: _ClassVar[int] + ADVISOR_PROPOSED_FIELD_NUMBER: _ClassVar[int] + CREDENTIAL_SIGNING_FIELD_NUMBER: _ClassVar[int] + SIGNING_SERVICE_FIELD_NUMBER: _ClassVar[int] + SIGNING_REGION_FIELD_NUMBER: _ClassVar[int] + JSON_RPC_MAX_BODY_BYTES_FIELD_NUMBER: _ClassVar[int] + MCP_FIELD_NUMBER: _ClassVar[int] + host: str + port: int + protocol: str + tls: str + enforcement: str + access: str + rules: _containers.RepeatedCompositeFieldContainer[L7Rule] + allowed_ips: _containers.RepeatedScalarFieldContainer[str] + ports: _containers.RepeatedScalarFieldContainer[int] + deny_rules: _containers.RepeatedCompositeFieldContainer[L7DenyRule] + allow_encoded_slash: bool + persisted_queries: str + graphql_persisted_queries: _containers.MessageMap[str, GraphqlOperation] + graphql_max_body_bytes: int + path: str + websocket_credential_rewrite: bool + request_body_credential_rewrite: bool + advisor_proposed: bool + credential_signing: str + signing_service: str + signing_region: str + json_rpc_max_body_bytes: int + mcp: McpOptions + def __init__(self, host: _Optional[str] = ..., port: _Optional[int] = ..., protocol: _Optional[str] = ..., tls: _Optional[str] = ..., enforcement: _Optional[str] = ..., access: _Optional[str] = ..., rules: _Optional[_Iterable[_Union[L7Rule, _Mapping]]] = ..., allowed_ips: _Optional[_Iterable[str]] = ..., ports: _Optional[_Iterable[int]] = ..., deny_rules: _Optional[_Iterable[_Union[L7DenyRule, _Mapping]]] = ..., allow_encoded_slash: bool = ..., persisted_queries: _Optional[str] = ..., graphql_persisted_queries: _Optional[_Mapping[str, GraphqlOperation]] = ..., graphql_max_body_bytes: _Optional[int] = ..., path: _Optional[str] = ..., websocket_credential_rewrite: bool = ..., request_body_credential_rewrite: bool = ..., advisor_proposed: bool = ..., credential_signing: _Optional[str] = ..., signing_service: _Optional[str] = ..., signing_region: _Optional[str] = ..., json_rpc_max_body_bytes: _Optional[int] = ..., mcp: _Optional[_Union[McpOptions, _Mapping]] = ...) -> None: ... + +class McpOptions(_message.Message): + __slots__ = ("strict_tool_names", "allow_all_known_mcp_methods") + STRICT_TOOL_NAMES_FIELD_NUMBER: _ClassVar[int] + ALLOW_ALL_KNOWN_MCP_METHODS_FIELD_NUMBER: _ClassVar[int] + strict_tool_names: bool + allow_all_known_mcp_methods: bool + def __init__(self, strict_tool_names: bool = ..., allow_all_known_mcp_methods: bool = ...) -> None: ... + +class GraphqlOperation(_message.Message): + __slots__ = ("operation_type", "operation_name", "fields") + OPERATION_TYPE_FIELD_NUMBER: _ClassVar[int] + OPERATION_NAME_FIELD_NUMBER: _ClassVar[int] + FIELDS_FIELD_NUMBER: _ClassVar[int] + operation_type: str + operation_name: str + fields: _containers.RepeatedScalarFieldContainer[str] + def __init__(self, operation_type: _Optional[str] = ..., operation_name: _Optional[str] = ..., fields: _Optional[_Iterable[str]] = ...) -> None: ... + +class L7DenyRule(_message.Message): + __slots__ = ("method", "path", "command", "query", "operation_type", "operation_name", "fields", "params") + class QueryEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: L7QueryMatcher + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[L7QueryMatcher, _Mapping]] = ...) -> None: ... + class ParamsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: L7QueryMatcher + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[L7QueryMatcher, _Mapping]] = ...) -> None: ... + METHOD_FIELD_NUMBER: _ClassVar[int] + PATH_FIELD_NUMBER: _ClassVar[int] + COMMAND_FIELD_NUMBER: _ClassVar[int] + QUERY_FIELD_NUMBER: _ClassVar[int] + OPERATION_TYPE_FIELD_NUMBER: _ClassVar[int] + OPERATION_NAME_FIELD_NUMBER: _ClassVar[int] + FIELDS_FIELD_NUMBER: _ClassVar[int] + PARAMS_FIELD_NUMBER: _ClassVar[int] + method: str + path: str + command: str + query: _containers.MessageMap[str, L7QueryMatcher] + operation_type: str + operation_name: str + fields: _containers.RepeatedScalarFieldContainer[str] + params: _containers.MessageMap[str, L7QueryMatcher] + def __init__(self, method: _Optional[str] = ..., path: _Optional[str] = ..., command: _Optional[str] = ..., query: _Optional[_Mapping[str, L7QueryMatcher]] = ..., operation_type: _Optional[str] = ..., operation_name: _Optional[str] = ..., fields: _Optional[_Iterable[str]] = ..., params: _Optional[_Mapping[str, L7QueryMatcher]] = ...) -> None: ... + +class L7Rule(_message.Message): + __slots__ = ("allow",) + ALLOW_FIELD_NUMBER: _ClassVar[int] + allow: L7Allow + def __init__(self, allow: _Optional[_Union[L7Allow, _Mapping]] = ...) -> None: ... + +class L7Allow(_message.Message): + __slots__ = ("method", "path", "command", "query", "operation_type", "operation_name", "fields", "params") + class QueryEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: L7QueryMatcher + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[L7QueryMatcher, _Mapping]] = ...) -> None: ... + class ParamsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: L7QueryMatcher + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[L7QueryMatcher, _Mapping]] = ...) -> None: ... + METHOD_FIELD_NUMBER: _ClassVar[int] + PATH_FIELD_NUMBER: _ClassVar[int] + COMMAND_FIELD_NUMBER: _ClassVar[int] + QUERY_FIELD_NUMBER: _ClassVar[int] + OPERATION_TYPE_FIELD_NUMBER: _ClassVar[int] + OPERATION_NAME_FIELD_NUMBER: _ClassVar[int] + FIELDS_FIELD_NUMBER: _ClassVar[int] + PARAMS_FIELD_NUMBER: _ClassVar[int] + method: str + path: str + command: str + query: _containers.MessageMap[str, L7QueryMatcher] + operation_type: str + operation_name: str + fields: _containers.RepeatedScalarFieldContainer[str] + params: _containers.MessageMap[str, L7QueryMatcher] + def __init__(self, method: _Optional[str] = ..., path: _Optional[str] = ..., command: _Optional[str] = ..., query: _Optional[_Mapping[str, L7QueryMatcher]] = ..., operation_type: _Optional[str] = ..., operation_name: _Optional[str] = ..., fields: _Optional[_Iterable[str]] = ..., params: _Optional[_Mapping[str, L7QueryMatcher]] = ...) -> None: ... + +class L7QueryMatcher(_message.Message): + __slots__ = ("glob", "any") + GLOB_FIELD_NUMBER: _ClassVar[int] + ANY_FIELD_NUMBER: _ClassVar[int] + glob: str + any: _containers.RepeatedScalarFieldContainer[str] + def __init__(self, glob: _Optional[str] = ..., any: _Optional[_Iterable[str]] = ...) -> None: ... + +class NetworkBinary(_message.Message): + __slots__ = ("path", "harness") + PATH_FIELD_NUMBER: _ClassVar[int] + HARNESS_FIELD_NUMBER: _ClassVar[int] + path: str + harness: bool + def __init__(self, path: _Optional[str] = ..., harness: bool = ...) -> None: ... + +class GetSandboxConfigRequest(_message.Message): + __slots__ = ("sandbox_id",) + SANDBOX_ID_FIELD_NUMBER: _ClassVar[int] + sandbox_id: str + def __init__(self, sandbox_id: _Optional[str] = ...) -> None: ... + +class GetGatewayConfigRequest(_message.Message): + __slots__ = () + def __init__(self) -> None: ... + +class GetGatewayConfigResponse(_message.Message): + __slots__ = ("settings", "settings_revision") + class SettingsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: SettingValue + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[SettingValue, _Mapping]] = ...) -> None: ... + SETTINGS_FIELD_NUMBER: _ClassVar[int] + SETTINGS_REVISION_FIELD_NUMBER: _ClassVar[int] + settings: _containers.MessageMap[str, SettingValue] + settings_revision: int + def __init__(self, settings: _Optional[_Mapping[str, SettingValue]] = ..., settings_revision: _Optional[int] = ...) -> None: ... + +class SettingValue(_message.Message): + __slots__ = ("string_value", "bool_value", "int_value", "bytes_value") + STRING_VALUE_FIELD_NUMBER: _ClassVar[int] + BOOL_VALUE_FIELD_NUMBER: _ClassVar[int] + INT_VALUE_FIELD_NUMBER: _ClassVar[int] + BYTES_VALUE_FIELD_NUMBER: _ClassVar[int] + string_value: str + bool_value: bool + int_value: int + bytes_value: bytes + def __init__(self, string_value: _Optional[str] = ..., bool_value: bool = ..., int_value: _Optional[int] = ..., bytes_value: _Optional[bytes] = ...) -> None: ... + +class EffectiveSetting(_message.Message): + __slots__ = ("value", "scope") + VALUE_FIELD_NUMBER: _ClassVar[int] + SCOPE_FIELD_NUMBER: _ClassVar[int] + value: SettingValue + scope: SettingScope + def __init__(self, value: _Optional[_Union[SettingValue, _Mapping]] = ..., scope: _Optional[_Union[SettingScope, str]] = ...) -> None: ... + +class GetSandboxConfigResponse(_message.Message): + __slots__ = ("policy", "version", "policy_hash", "settings", "config_revision", "policy_source", "global_policy_version", "provider_env_revision", "supervisor_middleware_services", "workspace", "policy_validation_failure_mode") + class SettingsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: EffectiveSetting + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[EffectiveSetting, _Mapping]] = ...) -> None: ... + POLICY_FIELD_NUMBER: _ClassVar[int] + VERSION_FIELD_NUMBER: _ClassVar[int] + POLICY_HASH_FIELD_NUMBER: _ClassVar[int] + SETTINGS_FIELD_NUMBER: _ClassVar[int] + CONFIG_REVISION_FIELD_NUMBER: _ClassVar[int] + POLICY_SOURCE_FIELD_NUMBER: _ClassVar[int] + GLOBAL_POLICY_VERSION_FIELD_NUMBER: _ClassVar[int] + PROVIDER_ENV_REVISION_FIELD_NUMBER: _ClassVar[int] + SUPERVISOR_MIDDLEWARE_SERVICES_FIELD_NUMBER: _ClassVar[int] + WORKSPACE_FIELD_NUMBER: _ClassVar[int] + POLICY_VALIDATION_FAILURE_MODE_FIELD_NUMBER: _ClassVar[int] + policy: SandboxPolicy + version: int + policy_hash: str + settings: _containers.MessageMap[str, EffectiveSetting] + config_revision: int + policy_source: PolicySource + global_policy_version: int + provider_env_revision: int + supervisor_middleware_services: _containers.RepeatedCompositeFieldContainer[SupervisorMiddlewareService] + workspace: str + policy_validation_failure_mode: str + def __init__(self, policy: _Optional[_Union[SandboxPolicy, _Mapping]] = ..., version: _Optional[int] = ..., policy_hash: _Optional[str] = ..., settings: _Optional[_Mapping[str, EffectiveSetting]] = ..., config_revision: _Optional[int] = ..., policy_source: _Optional[_Union[PolicySource, str]] = ..., global_policy_version: _Optional[int] = ..., provider_env_revision: _Optional[int] = ..., supervisor_middleware_services: _Optional[_Iterable[_Union[SupervisorMiddlewareService, _Mapping]]] = ..., workspace: _Optional[str] = ..., policy_validation_failure_mode: _Optional[str] = ...) -> None: ... + +class SupervisorMiddlewareService(_message.Message): + __slots__ = ("name", "grpc_endpoint", "max_body_bytes", "timeout") + NAME_FIELD_NUMBER: _ClassVar[int] + GRPC_ENDPOINT_FIELD_NUMBER: _ClassVar[int] + MAX_BODY_BYTES_FIELD_NUMBER: _ClassVar[int] + TIMEOUT_FIELD_NUMBER: _ClassVar[int] + name: str + grpc_endpoint: str + max_body_bytes: int + timeout: str + def __init__(self, name: _Optional[str] = ..., grpc_endpoint: _Optional[str] = ..., max_body_bytes: _Optional[int] = ..., timeout: _Optional[str] = ...) -> None: ... diff --git a/python/openshell/_proto/sandbox_pb2_grpc.py b/python/openshell/_proto/sandbox_pb2_grpc.py new file mode 100644 index 0000000000..52a9192464 --- /dev/null +++ b/python/openshell/_proto/sandbox_pb2_grpc.py @@ -0,0 +1,24 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" +import grpc +import warnings + + +GRPC_GENERATED_VERSION = '1.78.0' +GRPC_VERSION = grpc.__version__ +_version_not_supported = False + +try: + from grpc._utilities import first_version_is_lower + _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION) +except ImportError: + _version_not_supported = True + +if _version_not_supported: + raise RuntimeError( + f'The grpc package installed is at version {GRPC_VERSION},' + + ' but the generated code in sandbox_pb2_grpc.py depends on' + + f' grpcio>={GRPC_GENERATED_VERSION}.' + + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}' + + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.' + ) diff --git a/tasks/ci.toml b/tasks/ci.toml index 954656ca07..f69c97be1a 100644 --- a/tasks/ci.toml +++ b/tasks/ci.toml @@ -51,7 +51,7 @@ hide = true [lint] description = "Run repository lint checks" -depends = ["license:check", "rust:format:check", "rust:lint", "python:format:check", "python:lint", "helm:lint", "helm:docs:check", "markdown:lint"] +depends = ["license:check", "rust:format:check", "rust:lint", "python:proto:check", "python:format:check", "python:lint", "helm:lint", "helm:docs:check", "markdown:lint"] hide = true [ci] diff --git a/tasks/python.toml b/tasks/python.toml index e04bf27bb4..ffa8bffd2d 100644 --- a/tasks/python.toml +++ b/tasks/python.toml @@ -275,3 +275,16 @@ for path, rules in line_rewrites.items(): PY """ hide = true + +["python:proto:check"] +description = "Verify committed proto stubs are up to date" +depends = ["python:proto"] +run = """ +#!/usr/bin/env bash +set -euo pipefail +if ! git diff --exit-code python/openshell/_proto/; then + echo "error: proto stubs are stale. Run 'mise run python:proto' and commit the result." >&2 + exit 1 +fi +""" +hide = true