Python SDK reference
This reference lists the public Python SDK interfaces, including signatures, resource helpers, and model types, so you can look up how to call the SDK and interpret its results. Start with Getting started with the SDK; see Errors and recovery for connection lifetime, deadlines, and retries.
Hypervisor
class Hypervisor(Client): connections: Connections credentials: Credentials debug: Debug images: Images mcp: Mcp networks: Networks def __init__(self, url: str | None=None, token: str | None=None, *, run_dir: str | Path | None=None, timeout: float=30) -> None: ... @classmethod def connect(cls, url: str | None=None, token: str | None=None, *, run_dir: str | Path | None=None, timeout: float=30) -> Self: 'Create a `Hypervisor` client using gateway discovery when `url` or `token` is omitted.' ... async def info(self) -> models.HypervisorInfo: ... async def list(self) -> models.ListResponse: ... def vm(self, *, name: str | None=None, id: str | None=None) -> VM: "A handle for an existing VM on this hypervisor's transport, selected by\nexactly one nonempty name or id." ... async def create(self, *, name: str='', cpus: int | None=None, memory: int | None=None, env: dict[str, str] | None=None, labels: dict[str, str] | None=None, networks: Sequence[models.NetworkInfo]=(), image: str | None=None, command: Sequence[str]=(), registry: Registry | None=None) -> VM: 'Provision a VM or container workload.\n\nArgs:\n name: Persistent VM name; omit or pass empty string for an ephemeral VM.\n cpus: Optional vCPU count override.\n memory: Optional RAM size in GiB.\n env: Optional environment variables for the VM or container workload.\n labels: Optional string labels attached at creation.\n networks: Private networks to attach to the VM at creation.\n image: Optional OCI image reference to run as a container workload.\n command: Optional command argv override for the container workload.\n registry: Optional custom OCI registry configuration for pulling ``image``.' ... def managed(self, *, cpus: int | None=None, memory: int | None=None, env: dict[str, str] | None=None, labels: dict[str, str] | None=None, networks: Sequence[models.NetworkInfo]=(), image: str | None=None, command: Sequence[str]=(), registry: Registry | None=None) -> ManagedSession: 'An ephemeral ownership scope: renew while entered, await cleanup on exit.' ... async def log(self, source: models.HostLogSource=models.HostLogSource.SERVICE, *, grep: str | None=None, tail: int | None=None, max_bytes: int | None=None) -> models.HostLogsResponse: ... async def run(self, command: str, *, timeout_secs: int | None=None, cpus: int | None=None, memory: int | None=None, env: dict[str, str] | None=None) -> ExecResult: ... async def purge(self, *, all: bool=False) -> models.PurgeResponse: ... async def update(self) -> models.UpdateActionResponse: ... async def restart(self) -> models.RestartResponse: 'Restart an idle managed service; reconnect with a new gateway token.' ...VM
class VM(Client): container: Container credential_grants: CredentialGrants files: Files networks: VmNetworks ports: Ports stats: Stats def __init__(self, url: str | None=None, token: str | None=None, *, name: str | None=None, id: str | None=None, run_dir: str | Path | None=None, timeout: float=30) -> None: ... @property def id(self) -> str | None: 'Canonical ID, populated by the first request when selecting by name.' ... @property def name(self) -> str | None: ... async def info(self) -> models.SandboxInfo: ... async def exec(self, command: str, *, timeout_secs: int | None=None, target: models.ExecTarget | None=None) -> ExecResult: ... async def start(self) -> models.ProvisionResponse: ... async def persist(self, name: str) -> models.PersistResponse: ... async def stop(self) -> models.StopResponse: ... async def pause(self) -> models.VmActionResponse: ... async def resume(self) -> models.ProvisionResponse: ... async def delete(self) -> models.VmActionResponse: ... async def fork(self, name: str, *, description: str | None=None, labels: dict[str, str] | None=None) -> VM: "Fork this VM into a new persistent VM.\n\nArgs:\n name: Persistent name for the forked VM.\n description: Optional description for the forked VM.\n labels: Optional labels overriding the source VM's labels (`{}` clears)." ... async def log(self, *, grep: str | None=None, tail: int | None=None, max_bytes: int | None=None) -> models.LogsResponse: ... async def history(self, *, limit: int | None=None, offset: int | None=None, search: str | None=None, layer: models.HistoryLayerFilter | None=None) -> models.HistoryResponse: ... async def timeline(self, *, trace_id: str | None=None, since: str | None=None, limit: int | None=None, layers: Sequence[models.TimelineLayer] | None=None) -> models.TimelineResponse: ...ManagedSession
class ManagedSession(): 'Use ``async with hv.managed(...) as vm`` for an owned ephemeral VM.\n\nOne create is issued. Connection loss, cancellation and close never replay\nit. A client crash stops renewal; the service owns finite lease expiry.' def __init__(self, transport: Transport, request: models.ProvisionRequest) -> None: ... @property def ownership(self) -> models.ManagedSessionOwnership | None: 'Verified nonsecret metadata; the capability is never exposed here.' ... async def __aenter__(self) -> VM: ... async def __aexit__(self, _kind: type[BaseException] | None, error: BaseException | None, _traceback: TracebackType | None) -> None: ... async def close(self, outcome: models.ManagedSessionOutcome=models.ManagedSessionOutcome.COMPLETED) -> None: 'Join cleanup, including repeated cancellation; a failed close may be retried explicitly.' ...ExecResult
class ExecResult(ExecResponse): 'Command result with exact byte access and a useful string form.' @property def stdout_bytes(self) -> bytes: ... @property def stderr_bytes(self) -> bytes: ... def __str__(self) -> str: ... @classmethod def from_wire(cls, response: ExecResponse) -> ExecResult: ...Registry
class Registry(): username: str | None = None password: str | None = None ca_pem: str | None = NoneConnections, CredentialGrants
class Connections(): 'Consent never implicitly grants a VM access or launches a browser.' def __init__(self, transport: Transport) -> None: ... async def list(self, *, limit: int | None=None, cursor: str | None=None, request_timeout: float | None=None) -> models.ConnectionListResponse: ... async def authorize_google(self, request: models.AuthorizeGoogleRequest, *, request_timeout: float | None=None) -> models.AuthorizeGoogleResponse: 'The caller retains the request ID, opens the URL and polls explicitly.' ... async def authorization(self, id: str, *, request_timeout: float | None=None) -> models.AuthorizationTransaction: ... async def cancel_authorization(self, id: str, *, request_timeout: float | None=None) -> models.AuthorizationTransaction: ... async def get(self, id: str, *, request_timeout: float | None=None) -> models.ConnectionSummary: ... async def disconnect(self, id: str, *, request_timeout: float | None=None) -> models.DisconnectResponse: 'Fence grants; poll explicitly to confirm provider retirement.' ...
class CredentialGrants(): def __init__(self, vm: VM) -> None: ... async def list(self, *, request_timeout: float | None=None) -> models.SessionGrantListResponse: ... async def create(self, request: models.CreateSessionGrantRequest, *, request_timeout: float | None=None) -> models.SessionGrantSummary: 'Explicit approval for this owner; never reconnect or replay a mutation.' ... async def revoke(self, grant_id: str, *, request_timeout: float | None=None) -> models.RevokeSessionGrantResponse: ...Container
class Container(): def __init__(self, vm: _Vm) -> None: ... async def status(self) -> models.ContainerStatusResponse: ...Credentials
class Credentials(): def __init__(self, transport: Transport) -> None: ... async def inject(self, provider: str, value: str, *, storage: str='file', request_timeout: float | None=None) -> models.CredentialInjectResponse: 'Register host material and use its reference in a VM environment.\n\nMemory storage lasts for this service lifetime. This operation never\nretries or starts consent, and does not refresh supplied OAuth tokens.' ...Debug
class Debug(): def __init__(self, transport: Transport) -> None: ... async def panics(self, *, since: str | None=None, limit: int | None=None) -> models.PanicsResponse: ... async def triage(self, *, vm_id: str | None=None, since: str | None=None, limit: int | None=None) -> models.TriageResponse: ...Images
class Images(): def __init__(self, transport: Transport) -> None: ... async def list(self, *, refresh: bool=False, request_timeout: float | None=None) -> models.ImageListResponse: "Return catalog identity, compatible pins and the service's cache state." ... async def pull(self, image: str, *, registry: Registry | None=None, request_timeout: float | None=None) -> models.ImagePullResponse: 'Prefetch an admitted image; registry access belongs to this call only.' ...McpTools, McpServer, Mcp
class McpTools(): def __init__(self, transport: Transport, server_id: str) -> None: ... async def list(self) -> models.McpToolsListResponse: ... async def call(self, name: str, arguments: models.Value) -> models.Value: ...
class McpServer(): info: object tools: McpTools def __init__(self, transport: Transport, info: models.McpServerInfoResponse) -> None: ... async def refresh(self) -> models.McpRefreshResponse: ...
class Mcp(): def __init__(self, transport: Transport) -> None: ... async def info(self) -> models.McpInfoResponse: ... async def servers(self) -> models.McpServersListResponse: ... async def default_permission(self) -> models.McpDefaultPermissionResponse: ... async def get(self, name: str) -> McpServer: ...Networks, VmNetworks
class Networks(): def __init__(self, transport: Transport) -> None: ... async def create(self, name: str) -> models.NetworkInfo: ... async def list(self) -> builtins.list[models.NetworkInfo]: ... async def inspect(self, network_id: str) -> models.NetworkInfo: ... async def delete(self, network: models.NetworkInfo) -> models.VmActionResponse: ... async def logs(self, network: models.NetworkInfo, *, cursor: str | None=None, limit: int | None=None, vm: str | None=None, connection: str | None=None, event_type: str | None=None, decision: str | None=None, since: int | None=None, until: int | None=None) -> models.NetworkLogsResponse: ...
class VmNetworks(): def __init__(self, vm: VM) -> None: ... async def list(self) -> builtins.list[models.NetworkInfo]: ... async def attach(self, network: models.NetworkInfo) -> models.NetworkInfo: ... async def detach(self, network: models.NetworkInfo) -> models.NetworkInfo: ...Port, Ports
class Port(): id: str guest: int host: int | None authenticate: bool url: str | None = None bootstrap_token: str | None = None expires_in_seconds: int | None = None
class Ports(): def __init__(self, vm: _Vm) -> None: ... async def open(self, guest: int, *, host: int=0, authenticate: bool=False) -> Port: ... async def list(self) -> builtins.list[Port]: ... async def close(self, port: Port) -> models.VmActionResponse: ...Files, Stats
class Files(Resource): "Paths are the guest's: `/root/x` in a VM, `/workspace/x` in its container,\nor `x` relative to the workspace. `exact=True` takes a path literally,\nrelative to the workspace root, even when it is absolute." async def read(self, path: str, *, exact: bool=False) -> bytes: ... async def write(self, path: str, data: bytes, *, exact: bool=False) -> models.UploadResponse: ... async def list(self, path: str='', *, depth: int | None=None, exact: bool=False) -> models.FileListResponse: 'An empty `path` lists the workspace root.' ...
class Stats(Resource): async def summary(self) -> models.VmStatsSummaryResponse: ... async def details(self) -> models.VmStatsDetailResponse: ...CapsemError, HttpError
class CapsemError(Exception): 'Base exception for Capsem SDK errors.'
class HttpError(CapsemError): 'The gateway returned an unsuccessful HTTP status.' args: object body: object code: object response: ErrorResponse.model_validate_json status: object status: int body: str response: ErrorResponse | None code: ErrorCode | None def __init__(self, status: int, body: str) -> None: ... @property def credential_code(self) -> CredentialErrorCode | None: 'Known credential refusal code; future/non-JSON errors remain HTTP errors.' ...GatewayEndpoint
class GatewayEndpoint(): 'Resolved HTTP gateway base URL and bearer token.' url: str token: str = field(repr=False) run_dir: Path | None = NoneCapsemTimeoutError, CreateTimeoutError, ExecTimeoutError, VmNotFoundError
class CapsemTimeoutError(TimeoutError, CapsemError): 'Base exception for Capsem SDK operation timeouts.' body: object command: object deadline_secs: object status: object timeout_secs: object vm: object vm_id: object vm_name: object status: int | None body: str | None vm_id: str | None vm_name: str | None vm: VM | None command: str | None timeout_secs: int | None deadline_secs: float | None def __init__(self, message: str, *, vm_id: str | None=None, vm_name: str | None=None, vm: VM | None=None, command: str | None=None, timeout_secs: int | None=None, deadline_secs: float | None=None, status: int | None=None, body: str | None=None) -> None: ...
class CreateTimeoutError(CapsemTimeoutError): 'Raised when `Hypervisor.create` crosses the HTTP 504 or client deadline.'
class ExecTimeoutError(CapsemTimeoutError): 'Raised when `VM.exec` or `Hypervisor.run` times out on the service or client.'
class VmNotFoundError(HttpError, LookupError): 'Raised when a VM handle cannot be resolved by name or ID (HTTP 404).' vm_id: object vm_name: object vm_id: str | None vm_name: str | None def __init__(self, body: str, *, vm_id: str | None=None, vm_name: str | None=None, status: int=404) -> None: ...models.ArchivedEventBody
class ArchivedEventBody(Model): body_hash: StrictStr content: StrictStr content_type: StrictStr | None = None direction: StrictStr encoding: BodyEncoding event_id: StrictStr original_bytes: Annotated[StrictInt, Field(ge=0)] source_table: StrictStr stored_bytes: Annotated[StrictInt, Field(ge=0)] truncated: StrictBool truncated_for_transport: StrictBoolmodels.AssetFileState
class AssetFileState(StrEnum): PRESENT = 'present' MISSING = 'missing' INVALID = 'invalid'models.AssetFileStatus
class AssetFileStatus(Model): actual_size: Annotated[StrictInt, Field(ge=0)] | None = None expected_hash: StrictStr expected_size: Annotated[StrictInt, Field(ge=0)] | None = None kind: StrictStr name: StrictStr path: StrictStr status: AssetFileStatemodels.AssetManifestStatus
class AssetManifestStatus(Model): assets_current: StrictStr | None = None binaries_current: StrictStr | None = None blake3: StrictStr | None = None format: Annotated[StrictInt, Field(ge=0)] | None = None origin: StrictStr origin_path: StrictStr | None = None origin_source: StrictStr | None = None packaged_at: StrictStr | None = None path: StrictStr refresh_policy: StrictStr | None = None refreshed_at: StrictStr | None = None validation_error: StrictStr | None = None validation_status: ValidationStatusmodels.AssetStatus
class AssetStatus(Model): asset_version: StrictStr | None = None assets: list[AssetFileStatus] bytes_done: Annotated[StrictInt, Field(ge=0)] | None = None bytes_total: Annotated[StrictInt, Field(ge=0)] | None = None current_arch: StrictStr current_asset: StrictStr | None = None downloaded: Annotated[StrictInt, Field(ge=0)] | None = None downloading: StrictBool errors: list[StrictStr] manifest: AssetManifestStatus ready: StrictBool reconcile_error: StrictStr | None = None started: StrictBool | None = Nonemodels.AuditEvent
class AuditEvent(Model): argv: StrictStr audit_id: StrictStr | None = None comm: StrictStr | None = None credential_ref: StrictStr | None = None cwd: StrictStr | None = None event_id: StrictStr exe: StrictStr exec_event_id: StrictInt | None = None exit_code: StrictInt | None = None parent_exe: StrictStr | None = None pid: Annotated[StrictInt, Field(ge=0)] ppid: Annotated[StrictInt, Field(ge=0)] session_id: Annotated[StrictInt, Field(ge=0)] | None = None timestamp: StrictStr trace_id: StrictStr | None = None tty: StrictStr | None = None uid: Annotated[StrictInt, Field(ge=0)]models.AuditHistoryDetails
class AuditHistoryDetails(Model): audit_id: StrictStr | None = None comm: StrictStr | None = None cwd: StrictStr | None = None exe: StrictStr parent_exe: StrictStr | None = None pid: Annotated[StrictInt, Field(ge=0)] ppid: Annotated[StrictInt, Field(ge=0)] session_id: Annotated[StrictInt, Field(ge=0)] | None = None tty: StrictStr | None = None uid: Annotated[StrictInt, Field(ge=0)]models.AuthorizationTransaction
class AuthorizationTransaction(Model): connection_id: StrictStr | None error_code: CredentialErrorCode | None expires_at: DateTimeString id: StrictStr state: TransactionStatemodels.AuthorizeGoogleRequest
class AuthorizeGoogleRequest(Model): reconnect_connection_id: StrictStr | None request_id: UuidString scope_profile_id: StrictStrmodels.AuthorizeGoogleResponse
class AuthorizeGoogleResponse(Model): authorization_url: StrictStr | None transaction: AuthorizationTransactionmodels.BodyEncoding
class BodyEncoding(StrEnum): UTF8 = 'utf8' BASE64 = 'base64'models.BrowserAcknowledgeRequest
class BrowserAcknowledgeRequest(Model): owner_generation: StrictStr request_id: Annotated[StrictInt, Field(ge=0)]models.BrowserAcknowledgeResponse
class BrowserAcknowledgeResponse(Model): owner_generation: StrictStr request_id: Annotated[StrictInt, Field(ge=0)] vm_id: StrictStrmodels.BrowserRequest
class BrowserRequest(Model): id: Annotated[StrictInt, Field(ge=0)] owner_generation: StrictStr | None = None url: Annotated[StrictStr, Field(max_length=8192)]models.CapabilitySummary
class CapabilitySummary(Model): consumer: StrictStr id: StrictStr label: StrictStr required_scopes: list[StrictStr] supported: StrictBoolmodels.CaptureStatus
class CaptureStatus(StrEnum): COMPLETE = 'complete' TRUNCATED = 'truncated' UNKNOWN = 'unknown'models.CapturedPayload
class CapturedPayload(Model): content: CapturedContent status: CaptureStatusmodels.CatalogInfo
class CatalogInfo(Model): channel: StrictStr digest: StrictStr generated_at: StrictStr | None = None reference: StrictStrmodels.ConnectionListResponse
class ConnectionListResponse(Model): connections: list[ConnectionSummary] next_cursor: StrictStr | None scope_profiles: list[ScopeProfileSummary]models.ConnectionProvider
class ConnectionProvider(StrEnum): GOOGLE = 'google'models.ConnectionState
class ConnectionState(StrEnum): CONNECTED = 'connected' REAUTH_REQUIRED = 'reauth_required' DISCONNECTING = 'disconnecting' DISCONNECTED = 'disconnected' DEGRADED = 'degraded'models.ConnectionSummary
class ConnectionSummary(Model): account_label: StrictStr | None available_capabilities: list[StrictStr] created_at: DateTimeString error_code: CredentialErrorCode | None granted_scopes: list[StrictStr] id: StrictStr last_refresh_at: DateTimeString | None provider: ConnectionProvider provider_revocation: ProviderRevocationState revision: Annotated[Annotated[StrictInt, Field(ge=0)], Field(le=9007199254740991)] scope_profile_id: StrictStr state: ConnectionState updated_at: DateTimeStringmodels.ContainerSpec
class ContainerSpec(Model): nonnullable_optional = frozenset(['args', 'attach', 'env']) args: list[StrictStr] | None = None attach: StrictBool | None = None env: dict[str, StrictStr] | None = None image: StrictStr registry: RegistryAccess | None = Nonemodels.ContainerState
class ContainerState(StrEnum): PULLING = 'pulling' STAGING = 'staging' STAGED = 'staged' STARTING = 'starting' RUNNING = 'running' EXITED = 'exited' FAILED = 'failed'models.ContainerStatusResponse
class ContainerStatusResponse(Model): digest: StrictStr | None = None error: StrictStr | None = None exit_code: StrictInt | None = None image: StrictStr resolved: StrictStr | None = None state: ContainerState surface: ContainerSurface | None = Nonemodels.ContainerSurface
class ContainerSurface(Model): exposure_id: StrictStr | None = None kind: ContainerSurfaceKind port: Annotated[StrictInt, Field(ge=0)]models.ContainerSurfaceKind
class ContainerSurfaceKind(StrEnum): XPRA = 'xpra'models.CostCoverage
class CostCoverage(Model): priced_calls: Annotated[StrictInt, Field(ge=0)] unknown_calls: Annotated[StrictInt, Field(ge=0)] unpriced_calls: Annotated[StrictInt, Field(ge=0)]models.CreateNetworkRequest
class CreateNetworkRequest(Model): name: StrictStrmodels.CreateProxyRequest
class CreateProxyRequest(Model): bind: StrictStr port: Annotated[StrictInt, Field(ge=0)] provider: StrictStrmodels.CreateProxyResponse
class CreateProxyResponse(Model): base_url: StrictStr bind: StrictStr lease_expires_unix_ms: Annotated[StrictInt, Field(ge=0)] lease_token: StrictStr port: Annotated[StrictInt, Field(ge=0)] provider: StrictStr session_id: StrictStrmodels.CreateSessionGrantRequest
class CreateSessionGrantRequest(Model): capability_ids: list[StrictStr] connection_id: StrictStr expected_owner_generation: UuidString expires_at: DateTimeString | None request_id: UuidStringmodels.CredentialErrorCode
class CredentialErrorCode(StrEnum): CONFIGURATION_REQUIRED = 'configuration_required' UNSUPPORTED_CAPABILITY = 'unsupported_capability' UNKNOWN_SCOPE_PROFILE = 'unknown_scope_profile' POLICY_DENIED = 'policy_denied' SCOPE_DENIED = 'scope_denied' CONNECTION_UNAVAILABLE = 'connection_unavailable' REAUTH_REQUIRED = 'reauth_required' STORAGE_UNAVAILABLE = 'storage_unavailable' STORAGE_COMMIT_FAILED = 'storage_commit_failed' TRANSACTION_EXPIRED = 'transaction_expired' TRANSACTION_CANCELLED = 'transaction_cancelled' INVALID_CALLBACK = 'invalid_callback' PROVIDER_REJECTED = 'provider_rejected' PROVIDER_TIMEOUT = 'provider_timeout' OWNER_CHANGED = 'owner_changed' SESSION_UNAVAILABLE = 'session_unavailable' GRANT_UNAVAILABLE = 'grant_unavailable' REQUEST_CONFLICT = 'request_conflict' REVOCATION_PENDING = 'revocation_pending'models.CredentialEvent
class CredentialEvent(Model): context_json: StrictStr | None = None event_id: StrictStr event_type: CredentialEventType | None = None material_class: MaterialClass origin: CredentialEventType | None = None provider: StrictStr | None = None source: StrictStr timestamp: StrictStr trace_id: StrictStr | None = None verb: CredentialOutcomemodels.CredentialEventType
class CredentialEventType(StrEnum): HTTP_REQUEST = 'http.request' HTTP_RESPONSE = 'http.response' MODEL_CALL = 'model.call' MCP_TOOL_CALL = 'mcp.tool_call' MCP_TOOL_LIST = 'mcp.tool_list' MCP_EVENT = 'mcp.event' DNS_QUERY = 'dns.query' FILE_EVENT = 'file.event' FILE_IMPORT = 'file.import' FILE_EXPORT = 'file.export' PROCESS_EXEC = 'process.exec' PROCESS_EXEC_COMPLETE = 'process.exec_complete' PROCESS_AUDIT = 'process.audit' CREDENTIAL_SUBSTITUTION = 'credential.substitution' SECURITY_RULE = 'security.rule' SECURITY_ASK = 'security.ask'models.CredentialInjectProvider
class CredentialInjectProvider(StrEnum): ANTHROPIC = 'anthropic' GOOGLE = 'google' OPENAI = 'openai' GITHUB = 'github' MCP = 'mcp'models.CredentialInjectRequest
class CredentialInjectRequest(Model): private_input = True nonnullable_optional = frozenset(['storage']) provider: CredentialInjectProvider storage: CredentialStorage | None = None value: StrictStr = Field(repr=False)models.CredentialInjectResponse
class CredentialInjectResponse(Model): credential_ref: StrictStr storage: CredentialStoragemodels.CredentialOutcome
class CredentialOutcome(StrEnum): CAPTURED = 'captured' BROKERED = 'brokered' INJECTED = 'injected' ERROR = 'error'models.CredentialStorage
class CredentialStorage(StrEnum): FILE = 'file' MEMORY = 'memory'models.DisconnectResponse
class DisconnectResponse(Model): connection: ConnectionSummary local_authority: LocalCredentialAuthority revoked_grant_count: Annotated[StrictInt, Field(ge=0)]models.DnsEvent
class DnsEvent(Model): credential_ref: StrictStr | None = None decision: NetworkDecision event_id: StrictStr matched_rule: StrictStr | None = None policy_rule: StrictStr | None = None process_name: StrictStr | None = None qclass: Annotated[StrictInt, Field(ge=0)] qname: StrictStr qtype: Annotated[StrictInt, Field(ge=0)] rcode: Annotated[StrictInt, Field(ge=0)] source_proto: NetworkProtocol | None = None timestamp: StrictStr trace_id: StrictStr | None = None upstream_resolver_ms: Annotated[StrictInt, Field(ge=0)] | None = Nonemodels.EnrollmentKind
class EnrollmentKind(StrEnum): OWNED_OAUTH_CLIENT = 'owned_oauth_client' NATIVE_CONSUMER_SIGN_IN = 'native_consumer_sign_in'models.ErrorCode
class ErrorCode(StrEnum): VM_NOT_FOUND = 'vm_not_found' CREATE_TIMEOUT = 'create_timeout' EXEC_TIMEOUT = 'exec_timeout' CONFIGURATION_REQUIRED = 'configuration_required' UNSUPPORTED_CAPABILITY = 'unsupported_capability' UNKNOWN_SCOPE_PROFILE = 'unknown_scope_profile' POLICY_DENIED = 'policy_denied' SCOPE_DENIED = 'scope_denied' CONNECTION_UNAVAILABLE = 'connection_unavailable' REAUTH_REQUIRED = 'reauth_required' STORAGE_UNAVAILABLE = 'storage_unavailable' STORAGE_COMMIT_FAILED = 'storage_commit_failed' TRANSACTION_EXPIRED = 'transaction_expired' TRANSACTION_CANCELLED = 'transaction_cancelled' INVALID_CALLBACK = 'invalid_callback' PROVIDER_REJECTED = 'provider_rejected' PROVIDER_TIMEOUT = 'provider_timeout' OWNER_CHANGED = 'owner_changed' SESSION_UNAVAILABLE = 'session_unavailable' GRANT_UNAVAILABLE = 'grant_unavailable' REQUEST_CONFLICT = 'request_conflict' REVOCATION_PENDING = 'revocation_pending'models.ErrorEvent
class ErrorEvent(Model): binary: StrictStr level: StrictStr message: StrictStr target: StrictStr | None = None ts: StrictStrmodels.ErrorResponse
class ErrorResponse(Model): code: ErrorCode | None = None error: StrictStr timeout_secs: Annotated[StrictInt, Field(ge=0)] | None = None vm_id: StrictStr | None = Nonemodels.EventBodiesResponse
class EventBodiesResponse(Model): bodies: list[ArchivedEventBody] event_id: StrictStrmodels.EventBody
class EventBody(Model): body_hash: StrictStr content_type: StrictStr | None = None direction: StrictStr event_id: StrictStr original_bytes: Annotated[StrictInt, Field(ge=0)] source_table: StrictStr stored_bytes: Annotated[StrictInt, Field(ge=0)] truncated: StrictBoolmodels.ExecHistoryDetails
class ExecHistoryDetails(Model): exec_id: Annotated[StrictInt, Field(ge=0)] process_name: StrictStr | None = None source: ExecSource trace_id: StrictStr | None = Nonemodels.ExecOutput
class ExecOutput(Model): data: StrictStr encoding: ExecOutputEncodingmodels.ExecOutputEncoding
class ExecOutputEncoding(StrEnum): UTF8 = 'utf8' BASE64 = 'base64'models.ExecRequest
class ExecRequest(Model): command: StrictStr target: ExecTarget | None = None timeout_secs: Annotated[StrictInt, Field(ge=0)] | None = Nonemodels.ExecResponse
class ExecResponse(Model): nonnullable_optional = frozenset(['truncated']) exit_code: StrictInt stderr: ExecOutput stdout: ExecOutput truncated: StrictBool | None = Nonemodels.ExecSource
class ExecSource(StrEnum): API = 'api' CLI = 'cli' MCP = 'mcp' FRONTEND = 'frontend'models.ExecTarget
class ExecTarget(StrEnum): WORKLOAD = 'workload' VM = 'vm'models.ExposureAccess
class ExposureAccess(StrEnum): LOOPBACK_TCP = 'loopback_tcp' HTTP_PREVIEW = 'http_preview'models.ExposureInfo
class ExposureInfo(Model): access: ExposureAccess guest_port: Annotated[StrictInt, Field(ge=0)] host_port: Annotated[StrictInt, Field(ge=0)] | None = None id: StrictStr target: ExposureTargetmodels.ExposureListResponse
class ExposureListResponse(Model): exposures: list[ExposureInfo] owner_generation: StrictStrmodels.ExposureRequest
class ExposureRequest(Model): nonnullable_optional = frozenset(['access', 'host_port', 'target']) access: ExposureAccess | None = None guest_port: Annotated[StrictInt, Field(ge=0)] host_port: Annotated[StrictInt, Field(ge=0)] | None = None target: ExposureTarget | None = Nonemodels.ExposureTarget
class ExposureTarget(StrEnum): CONTAINER = 'container' VM = 'vm'models.FileActionCount
class FileActionCount(Model): action: FileEventAction count: Annotated[StrictInt, Field(ge=0)]models.FileEntryType
class FileEntryType(StrEnum): FILE = 'file' DIRECTORY = 'directory'models.FileEvent
class FileEvent(Model): action: FileEventAction credential_ref: StrictStr | None = None event_id: StrictStr path: StrictStr size: Annotated[StrictInt, Field(ge=0)] | None = None timestamp: StrictStr trace_id: StrictStr | None = Nonemodels.FileEventAction
class FileEventAction(StrEnum): CREATED = 'created' MODIFIED = 'modified' DELETED = 'deleted' RESTORED = 'restored' READ = 'read' IMPORT = 'import' EXPORT = 'export'models.FileListEntry
class FileListEntry(Model): children: list[FileListEntry] | None = None is_text: StrictBool | None = None label: StrictStr | None = None mime: StrictStr | None = None mtime: Annotated[StrictInt, Field(ge=0)] name: StrictStr path: StrictStr size: Annotated[StrictInt, Field(ge=0)] type: FileEntryTypemodels.FileListResponse
class FileListResponse(Model): entries: list[FileListEntry]models.ForkRequest
class ForkRequest(Model): description: StrictStr | None = None labels: dict[str, StrictStr] | None = None name: StrictStrmodels.ForkResponse
class ForkResponse(Model): id: StrictStr name: StrictStr size_bytes: Annotated[StrictInt, Field(ge=0)]models.GrantState
class GrantState(StrEnum): ACTIVE = 'active' REVOKED = 'revoked' EXPIRED = 'expired'models.HistoryEntry
class HistoryEntry(Model): command: StrictStr details: HistoryDetails duration_ms: Annotated[StrictInt, Field(ge=0)] | None = None exit_code: StrictInt | None = None layer: HistoryLayer stderr_preview: StrictStr | None = None stdout_preview: StrictStr | None = None timestamp: StrictStrmodels.HistoryLayer
class HistoryLayer(StrEnum): EXEC = 'exec' AUDIT = 'audit'models.HistoryLayerFilter
class HistoryLayerFilter(StrEnum): ALL = 'all' EXEC = 'exec' AUDIT = 'audit'models.HistoryResponse
class HistoryResponse(Model): commands: list[HistoryEntry] has_more: StrictBool total: Annotated[StrictInt, Field(ge=0)]models.HostLogSource
class HostLogSource(StrEnum): SERVICE = 'service' MCP = 'mcp' GATEWAY = 'gateway' TRAY = 'tray' APP = 'app'models.HostLogsResponse
class HostLogsResponse(Model): source: HostLogSource text: StrictStrmodels.HostTriageResponse
class HostTriageResponse(Model): errors: list[ErrorEvent] panics: list[PanicEvent] slow_ops: list[SlowOpEvent]models.HttpEvent
class HttpEvent(Model): bytes_received: Annotated[StrictInt, Field(ge=0)] | None = None bytes_sent: Annotated[StrictInt, Field(ge=0)] | None = None credential_ref: StrictStr | None = None decision: NetworkDecision domain: StrictStr duration_ms: Annotated[StrictInt, Field(ge=0)] | None = None event_id: StrictStr matched_rule: StrictStr | None = None method: StrictStr | None = None path: StrictStr | None = None policy_rule: StrictStr | None = None port: Annotated[StrictInt, Field(ge=0)] | None = None query: StrictStr | None = None request_headers: StrictStr | None = None response_headers: StrictStr | None = None status_code: Annotated[StrictInt, Field(ge=0)] | None = None timestamp: StrictStr trace_id: StrictStr | None = Nonemodels.HypervisorInfo
class HypervisorInfo(Model): assets: AssetStatus | None = None gateway_version: StrictStr resource_summary: ResourceSummary | None = None service: ServiceAvailability updates: UpdateStatusResponse | None = None vm_count: Annotated[StrictInt, Field(ge=0)] vms: list[VmSummary]models.ImageApp
class ImageApp(Model): nonnullable_optional = frozenset(['evidence', 'interfaces']) architecture: StrictStr catalog_name: StrictStr category: StrictStr | None = None description: StrictStr display_name: StrictStr evidence: list[ImageEvidence] | None = None icon: StrictStr | None = None image: StrictStr interfaces: list[ImageInterface] | None = None publisher: StrictStr | None = None url: StrictStr | None = Nonemodels.ImageCacheState
class ImageCacheState(StrEnum): UNKNOWN = 'unknown' MISSING = 'missing' PARTIAL = 'partial' READY = 'ready'models.ImageDownloadPhase
class ImageDownloadPhase(StrEnum): PREPARING = 'preparing' DOWNLOADING = 'downloading' VERIFYING = 'verifying'models.ImageDownloadProgress
class ImageDownloadProgress(Model): completed_bytes: Annotated[StrictInt, Field(ge=0)] phase: ImageDownloadPhase total_bytes: Annotated[StrictInt, Field(ge=0)] | None = Nonemodels.ImageEvidence
class ImageEvidence(Model): kind: ImageEvidenceKind media_type: StrictStr reference: StrictStrmodels.ImageEvidenceKind
class ImageEvidenceKind(StrEnum): OBOM = 'obom' SBOM = 'sbom' ABOM = 'abom' PACKAGE_INVENTORY = 'package_inventory'models.ImageInfo
class ImageInfo(Model): app: ImageApp | None = None architectures: list[StrictStr] cached: ImageCacheState description: StrictStr image: StrictStr | None = None name: StrictStr previous_image: StrictStr | None = None progress: ImageDownloadProgress | None = None surface: ImageSurface | None = Nonemodels.ImageInterface
class ImageInterface(StrEnum): TERMINAL = 'terminal' GRAPHICAL = 'graphical' WEB = 'web' API = 'api'models.ImageInventoryResponse
class ImageInventoryResponse(Model): architecture: StrictStr artifact_reference: StrictStr | None = None image: StrictStr inventory: ImagePackageInventory | None = Nonemodels.ImageListResponse
class ImageListResponse(Model): catalog: CatalogInfo | None = None images: list[ImageInfo]models.ImagePackage
class ImagePackage(Model): architecture: StrictStr name: StrictStr version: StrictStrmodels.ImagePackageInventory
class ImagePackageInventory(Model): architecture: StrictStr packages: list[ImagePackage] schema_: StrictStr = Field(alias='schema') subject: StrictStr tools: list[ImageTool]models.ImagePullRequest
class ImagePullRequest(Model): image: StrictStr registry: RegistryAccess | None = Nonemodels.ImagePullResponse
class ImagePullResponse(Model): digest: StrictStr image: StrictStr resolved: StrictStrmodels.ImageSurface
class ImageSurface(StrEnum): TERMINAL = 'terminal' XPRA = 'xpra'models.ImageTool
class ImageTool(Model): name: StrictStr version: StrictStrmodels.Interaction
class Interaction(Model): content: InteractionContent event_id: StrictStr item_index: Annotated[StrictInt, Field(ge=0)] | None = None model_call_id: StrictInt | None = None model_event_id: StrictStr | None = None timestamp: StrictStr trace_id: StrictStr | None = None turn_id: StrictStr | None = Nonemodels.InteractionBlock
class InteractionBlock(Model): kind: InteractionBlockKind payload: CapturedPayload | None = Nonemodels.InteractionBlockKind
class InteractionBlockKind(StrEnum): TEXT = 'text' REASONING = 'reasoning'models.InteractionBody
class InteractionBody(Model): body_hash: StrictStr content_type: StrictStr | None = None direction: StrictStr event_id: StrictStr original_bytes: Annotated[StrictInt, Field(ge=0)] source_table: StrictStr stored_bytes: Annotated[StrictInt, Field(ge=0)] truncated: StrictBoolmodels.InteractionMessage
class InteractionMessage(Model): blocks: list[InteractionBlock] kind: InteractionMessageKind role: InteractionRolemodels.InteractionMessageKind
class InteractionMessageKind(StrEnum): MESSAGE = 'message'models.InteractionReport
class InteractionReport(Model): bodies: list[InteractionBody] items: list[Interaction]models.InteractionRequest
class InteractionRequest(Model): kind: InteractionRequestKind payload: CapturedPayload | None = Nonemodels.InteractionRequestKind
class InteractionRequestKind(StrEnum): REQUEST_PREVIEW = 'request_preview'models.InteractionRole
class InteractionRole(StrEnum): ASSISTANT = 'assistant'models.InteractionToolCall
class InteractionToolCall(Model): arguments: CapturedPayload | None = None call_id: StrictStr decision: ToolDecision kind: InteractionToolCallKind origin: ToolOrigin request: CapturedPayload | None = None result: InteractionToolResult | None = None server_name: StrictStr | None = None tool_name: StrictStrmodels.InteractionToolCallKind
class InteractionToolCallKind(StrEnum): TOOL_CALL = 'tool_call'models.InteractionToolResult
class InteractionToolResult(Model): call_id: StrictStr error_message: StrictStr | None = None is_error: StrictBool | None = None kind: InteractionToolResultKind payload: CapturedPayload | None = None response: CapturedPayload | None = Nonemodels.InteractionToolResultKind
class InteractionToolResultKind(StrEnum): TOOL_RESULT = 'tool_result'models.JsonContent
class JsonContent(Model): kind: JsonContentKind value: JsonValuemodels.JsonContentKind
class JsonContentKind(StrEnum): JSON = 'json'models.ListResponse
class ListResponse(Model): sandboxes: list[SandboxInfo]models.LocalCredentialAuthority
class LocalCredentialAuthority(StrEnum): REVOKING = 'revoking' REVOKED = 'revoked'models.LogsResponse
class LogsResponse(Model): logs: StrictStr process_logs: StrictStr | None = None serial_logs: StrictStr | None = Nonemodels.ManagedSessionClaimRequest
class ManagedSessionClaimRequest(Model): private_input = True ownership_token: Annotated[StrictStr, Field(pattern='^[0-9a-f]{64}$', min_length=64, max_length=64)] = Field(repr=False)models.ManagedSessionClaimResponse
class ManagedSessionClaimResponse(Model): error: ManagedSessionFailure | None = None ownership: ManagedSessionOwnership session: ProvisionResponse | None = None state: ManagedSessionStatemodels.ManagedSessionCloseRequest
class ManagedSessionCloseRequest(Model): private_input = True outcome: ManagedSessionOutcome ownership_token: Annotated[StrictStr, Field(pattern='^[0-9a-f]{64}$', min_length=64, max_length=64)] = Field(repr=False)models.ManagedSessionCloseResponse
class ManagedSessionCloseResponse(Model): evidence_retained: StrictBool generation: StrictStr request_id: StrictStr session_id: StrictStr | None = None state: ManagedSessionClosedStatemodels.ManagedSessionClosedState
class ManagedSessionClosedState(StrEnum): CLOSED = 'closed'models.ManagedSessionCreate
class ManagedSessionCreate(Model): private_input = True ownership_token: Annotated[StrictStr, Field(pattern='^[0-9a-f]{64}$', min_length=64, max_length=64)] = Field(repr=False) request_id: UuidStringmodels.ManagedSessionErrorCode
class ManagedSessionErrorCode(StrEnum): INVALID_REQUEST = 'invalid_request' FORBIDDEN = 'forbidden' NOT_FOUND = 'not_found' DUPLICATE_REQUEST = 'duplicate_request' EXPIRED = 'expired' CREATION_FAILED = 'creation_failed' CLEANUP_FAILED = 'cleanup_failed' RECOVERY_PENDING = 'recovery_pending' STORE_UNAVAILABLE = 'store_unavailable'models.ManagedSessionFailure
class ManagedSessionFailure(Model): code: ManagedSessionErrorCode error: StrictStrmodels.ManagedSessionOutcome
class ManagedSessionOutcome(StrEnum): COMPLETED = 'completed' FAILED = 'failed' CANCELLED = 'cancelled'models.ManagedSessionOwnership
class ManagedSessionOwnership(Model): expires_at: StrictStr generation: StrictStr lease_seconds: Annotated[StrictInt, Field(ge=0)] renew_after_seconds: Annotated[StrictInt, Field(ge=0)] request_id: StrictStrmodels.ManagedSessionState
class ManagedSessionState(StrEnum): PENDING = 'pending' ACTIVE = 'active' CLOSING = 'closing' CLOSED = 'closed' FAILED = 'failed'models.MaterialClass
class MaterialClass(StrEnum): CREDENTIAL = 'credential'models.McpDefaultPermissionResponse
class McpDefaultPermissionResponse(Model): action: McpPermissionAction rule_id: StrictStr | None = None source: StrictStrmodels.McpInfoResponse
class McpInfoResponse(Model): builtin_local_enabled: StrictBool manual_server_count: Annotated[StrictInt, Field(ge=0)] server_count: Annotated[StrictInt, Field(ge=0)]models.McpPermissionAction
class McpPermissionAction(StrEnum): ALLOW = 'allow' ASK = 'ask' BLOCK = 'block' PREPROCESS = 'preprocess' REWRITE = 'rewrite' POSTPROCESS = 'postprocess'models.McpRefreshResponse
class McpRefreshResponse(Model): instances: Annotated[StrictInt, Field(ge=0)] server_id: StrictStr success: StrictBoolmodels.McpServerInfoResponse
class McpServerInfoResponse(Model): custom_header_count: Annotated[StrictInt, Field(ge=0)] enabled: StrictBool has_auth_credential: StrictBool is_stdio: StrictBool name: StrictStr running: StrictBool source: StrictStr tool_count: Annotated[StrictInt, Field(ge=0)] url: StrictStrmodels.McpToolInfoResponse
class McpToolInfoResponse(Model): annotations: JsonValue = None description: StrictStr | None = None namespaced_name: StrictStr original_name: StrictStr permission_action: McpPermissionAction permission_source: StrictStr pin_changed: StrictBool pin_hash: StrictStr | None = None server_name: StrictStrmodels.McpUsage
class McpUsage(Model): bytes_received: Annotated[StrictInt, Field(ge=0)] bytes_sent: Annotated[StrictInt, Field(ge=0)] call_count: Annotated[StrictInt, Field(ge=0)] duration_ms: Annotated[StrictInt, Field(ge=0)] server_name: StrictStr | None = None tool_name: StrictStrmodels.Model
class Model(BaseModel): nonnullable_optional: ClassVar[frozenset[str]] = frozenset() private_input: ClassVar[bool] = False @model_validator(mode='wrap') @classmethod def redact_private_validation(cls, value: object, handler: ValidatorFunctionWrapHandler) -> object: ... @model_validator(mode='before') @classmethod def reject_explicit_null(cls, value: object) -> object: ...models.ModelEvent
class ModelEvent(Model): credential_ref: StrictStr | None = None duration_ms: Annotated[StrictInt, Field(ge=0)] | None = None event_id: StrictStr input_tokens: Annotated[StrictInt, Field(ge=0)] | None = None method: StrictStr model: StrictStr | None = None output_tokens: Annotated[StrictInt, Field(ge=0)] | None = None path: StrictStr provider: StrictStr response_bytes: Annotated[StrictInt, Field(ge=0)] | None = None status_code: Annotated[StrictInt, Field(ge=0)] | None = None stop_reason: StrictStr | None = None timestamp: StrictStr trace_id: StrictStr | None = Nonemodels.ModelUsage
class ModelUsage(Model): call_count: Annotated[StrictInt, Field(ge=0)] cost_coverage: CostCoverage | None = None duration_ms: Annotated[StrictInt, Field(ge=0)] estimated_cost_usd: StrictFloat input_tokens: Annotated[StrictInt, Field(ge=0)] model: StrictStr output_tokens: Annotated[StrictInt, Field(ge=0)] provider: StrictStrmodels.NetworkDecision
class NetworkDecision(StrEnum): ALLOWED = 'allowed' DENIED = 'denied' ERROR = 'error' REDIRECTED = 'redirected'models.NetworkInfo
class NetworkInfo(Model): created_unix_ms: StrictInt id: StrictStr members: list[NetworkMemberInfo] name: StrictStr subnet: StrictStrmodels.NetworkListResponse
class NetworkListResponse(Model): networks: list[NetworkInfo]models.NetworkLogEvent
class NetworkLogEvent(Model): connection_id: StrictStr | None = None event: JsonValue event_id: StrictStr event_type: StrictStr sequence: StrictInt timestamp_unix_ms: StrictIntmodels.NetworkLogsResponse
class NetworkLogsResponse(Model): cursor: StrictStr events: list[NetworkLogEvent] next_cursor: StrictStr | None = Nonemodels.NetworkMemberInfo
class NetworkMemberInfo(Model): address: IPv4Address state: NetworkMemberState updated_unix_ms: StrictInt vm_id: StrictStrmodels.NetworkMemberState
class NetworkMemberState(StrEnum): DECLARED = 'declared' ATTACHING = 'attaching' READY = 'ready' FAILED = 'failed'models.NetworkProtocol
class NetworkProtocol(StrEnum): TCP = 'tcp' UDP = 'udp'models.PanicEvent
class PanicEvent(Model): binary: StrictStr frames: list[StrictStr] location: StrictStr | None = None message: StrictStr thread: StrictStr | None = None ts: StrictStrmodels.PanicsResponse
class PanicsResponse(Model): panics: list[PanicEvent]models.PersistRequest
class PersistRequest(Model): name: StrictStrmodels.PersistResponse
class PersistResponse(Model): name: StrictStr success: StrictBoolmodels.PreviewSessionResponse
class PreviewSessionResponse(Model): bootstrap_token: StrictStr expires_in_seconds: Annotated[StrictInt, Field(ge=0)] url: StrictStrmodels.PreviewSessionsRevokedResponse
class PreviewSessionsRevokedResponse(Model): revoked: Annotated[StrictInt, Field(ge=0)]models.ProcessEvent
class ProcessEvent(Model): command: StrictStr credential_ref: StrictStr | None = None duration_ms: Annotated[StrictInt, Field(ge=0)] | None = None event_id: StrictStr exec_id: Annotated[StrictInt, Field(ge=0)] exit_code: StrictInt | None = None pid: Annotated[StrictInt, Field(ge=0)] | None = None process_name: StrictStr | None = None source: ExecSource stderr_bytes: Annotated[StrictInt, Field(ge=0)] | None = None stdout_bytes: Annotated[StrictInt, Field(ge=0)] | None = None timestamp: StrictStr trace_id: StrictStr | None = Nonemodels.ProviderRevocationState
class ProviderRevocationState(StrEnum): NOT_STARTED = 'not_started' PENDING = 'pending' SUCCEEDED = 'succeeded' FAILED = 'failed'models.ProvisionRequest
class ProvisionRequest(Model): private_input = True nonnullable_optional = frozenset(['networks', 'persistent']) container: ContainerSpec | None = None cpus: Annotated[StrictInt, Field(ge=0)] | None = None env: dict[str, StrictStr] | None = None from_: StrictStr | None = Field(default=None, alias='from') labels: dict[str, StrictStr] | None = None managed: ManagedSessionCreate | None = None name: StrictStr | None = None networks: list[StrictStr] | None = None persistent: StrictBool | None = None ram_mb: Annotated[StrictInt, Field(ge=0)] | None = Nonemodels.ProvisionResponse
class ProvisionResponse(Model): nonnullable_optional = frozenset(['can_resume', 'persistent']) available_actions: list[VmAction] can_resume: StrictBool | None = None id: StrictStr name: StrictStr ownership: ManagedSessionOwnership | None = None persistent: StrictBool | None = None status: VmLifecycleStatemodels.ProxyHeartbeatResponse
class ProxyHeartbeatResponse(Model): lease_expires_unix_ms: Annotated[StrictInt, Field(ge=0)] session_id: StrictStrmodels.ProxyLeaseRequest
class ProxyLeaseRequest(Model): lease_token: StrictStrmodels.PurgeRequest
class PurgeRequest(Model): nonnullable_optional = frozenset(['all']) all: StrictBool | None = Nonemodels.PurgeResponse
class PurgeResponse(Model): ephemeral_purged: Annotated[StrictInt, Field(ge=0)] persistent_purged: Annotated[StrictInt, Field(ge=0)] purged: Annotated[StrictInt, Field(ge=0)]models.RawContent
class RawContent(Model): kind: RawContentKind raw: StrictStr reason: RawContentReasonmodels.RawContentKind
class RawContentKind(StrEnum): RAW = 'raw'models.RawContentReason
class RawContentReason(StrEnum): TRUNCATED = 'truncated' INVALID_JSON = 'invalid_json' UNPARSED = 'unparsed'models.RegistryAccess
class RegistryAccess(Model): ca_pem: StrictStr | None = None password: StrictStr | None = None username: StrictStr | None = Nonemodels.ResourceSummary
class ResourceSummary(Model): running_count: Annotated[StrictInt, Field(ge=0)] stopped_count: Annotated[StrictInt, Field(ge=0)] suspended_count: Annotated[StrictInt, Field(ge=0)] total_cpus: Annotated[StrictInt, Field(ge=0)] total_ram_mb: Annotated[StrictInt, Field(ge=0)]models.RestartAuthentication
class RestartAuthentication(StrEnum): NEW_TOKEN_REQUIRED = 'new_token_required'models.RestartResponse
class RestartResponse(Model): authentication: RestartAuthentication manager: ServiceManager status: RestartStatusmodels.RestartStatus
class RestartStatus(StrEnum): ACCEPTED = 'accepted'models.RevokeSessionGrantResponse
class RevokeSessionGrantResponse(Model): grant: SessionGrantSummary local_authority: RevokedCredentialAuthoritymodels.RevokedCredentialAuthority
class RevokedCredentialAuthority(StrEnum): REVOKED = 'revoked'models.RunRequest
class RunRequest(Model): command: StrictStr cpus: Annotated[StrictInt, Field(ge=0)] | None = None env: dict[str, StrictStr] | None = None ram_mb: Annotated[StrictInt, Field(ge=0)] | None = None timeout_secs: Annotated[StrictInt, Field(ge=0)] | None = Nonemodels.SandboxInfo
class SandboxInfo(Model): nonnullable_optional = frozenset(['can_resume', 'pending_approval_count', 'persistent']) ai: VmAiInfo | None = None allowed_requests: Annotated[StrictInt, Field(ge=0)] | None = None app: ImageApp | None = None available_actions: list[VmAction] browser_request: BrowserRequest | None = None can_resume: StrictBool | None = None cost_coverage: CostCoverage | None = None cpus: Annotated[StrictInt, Field(ge=0)] | None = None created_at: StrictStr | None = None denied_requests: Annotated[StrictInt, Field(ge=0)] | None = None description: StrictStr | None = None files: VmFilesInfo | None = None forked_from: StrictStr | None = None id: StrictStr labels: dict[str, StrictStr] | None = None last_error: StrictStr | None = None model_call_count: Annotated[StrictInt, Field(ge=0)] | None = None name: StrictStr | None = None network: VmNetworkInfo | None = None pending_approval_count: Annotated[StrictInt, Field(ge=0)] | None = None persistent: StrictBool | None = None pid: Annotated[StrictInt, Field(ge=0)] ram_mb: Annotated[StrictInt, Field(ge=0)] | None = None resume_blocked_reason: StrictStr | None = None session_db: SessionDbStatus | None = None size_bytes: Annotated[StrictInt, Field(ge=0)] | None = None status: VmLifecycleState storage: StorageDiagnostics | None = None terminal: TerminalSummary | None = None total_estimated_cost: StrictFloat | None = None total_file_events: Annotated[StrictInt, Field(ge=0)] | None = None total_input_tokens: Annotated[StrictInt, Field(ge=0)] | None = None total_output_tokens: Annotated[StrictInt, Field(ge=0)] | None = None total_requests: Annotated[StrictInt, Field(ge=0)] | None = None total_thinking_tokens: Annotated[StrictInt, Field(ge=0)] | None = None total_tool_calls: Annotated[StrictInt, Field(ge=0)] | None = None uptime_secs: Annotated[StrictInt, Field(ge=0)] | None = None version: StrictStr | None = Nonemodels.ScopeProfileSummary
class ScopeProfileSummary(Model): application_label: StrictStr capabilities: list[CapabilitySummary] enabled: StrictBool enrollment_kind: EnrollmentKind id: StrictStr label: StrictStr requested_scopes: list[StrictStr]models.SecurityAskDecision
class SecurityAskDecision(StrEnum): APPROVE = 'approve' DENY = 'deny'models.SecurityAskListResponse
class SecurityAskListResponse(Model): generation: StrictStr pending_count: Annotated[StrictInt, Field(ge=0)] requests: list[SecurityAskRequest] vm_id: StrictStrmodels.SecurityAskRequest
class SecurityAskRequest(Model): ask_id: StrictStr created_at_unix_ms: StrictInt event_id: StrictStr event_type: StrictStr expires_at_unix_ms: StrictInt resolution_reason: StrictStr | None = None resolved_at_unix_ms: StrictInt | None = None rule_id: StrictStr rule_name: StrictStr status: SecurityAskStatus summary: StrictStrmodels.SecurityAskResolveRequest
class SecurityAskResolveRequest(Model): decision: SecurityAskDecision generation: StrictStrmodels.SecurityAskStatus
class SecurityAskStatus(StrEnum): PENDING = 'pending' APPROVED = 'approved' DENIED = 'denied' EXPIRED = 'expired' CANCELLED = 'cancelled'models.ServiceAvailability
class ServiceAvailability(StrEnum): RUNNING = 'running' UNAVAILABLE = 'unavailable'models.ServiceManager
class ServiceManager(StrEnum): LAUNCHD = 'launchd' SYSTEMD = 'systemd'models.SessionDbStatus
class SessionDbStatus(Model): error: StrictStr | None = None ready: StrictBoolmodels.SessionGrantListResponse
class SessionGrantListResponse(Model): denied_capability_ids: list[StrictStr] grants: list[SessionGrantSummary] owner_generation: StrictStr session_id: StrictStrmodels.SessionGrantSummary
class SessionGrantSummary(Model): capability_ids: list[StrictStr] connection_id: StrictStr created_at: DateTimeString expires_at: DateTimeString id: StrictStr owner_generation: StrictStr revision: Annotated[Annotated[StrictInt, Field(ge=0)], Field(le=9007199254740991)] revoked_at: DateTimeString | None runtime_bound: StrictBool session_id: StrictStr state: GrantStatemodels.SlowOpEvent
class SlowOpEvent(Model): binary: StrictStr duration_ms: Annotated[StrictInt, Field(ge=0)] op: StrictStr ts: StrictStrmodels.StopProxyResponse
class StopProxyResponse(Model): session_id: StrictStr stopped: StrictBoolmodels.StopResponse
class StopResponse(Model): persistent: StrictBool success: StrictBoolmodels.StorageDiagnostics
class StorageDiagnostics(Model): guest_overlay_device: StrictStr guest_overlay_mount: StrictStr host_available_bytes: Annotated[StrictInt, Field(ge=0)] host_free_bytes: Annotated[StrictInt, Field(ge=0)] host_total_bytes: Annotated[StrictInt, Field(ge=0)] rootfs_image_logical_bytes: Annotated[StrictInt, Field(ge=0)] rootfs_image_path: StrictStr rootfs_image_physical_bytes: Annotated[StrictInt, Field(ge=0)]models.StreamControlCloseStdin
class StreamControlCloseStdin(Model): type: Literal['close_stdin']models.StreamControlFocus
class StreamControlFocus(Model): cols: Annotated[Annotated[StrictInt, Field(ge=1)], Field(le=512)] rows: Annotated[Annotated[StrictInt, Field(ge=1)], Field(le=256)] type: Literal['focus']models.StreamControlResize
class StreamControlResize(Model): cols: Annotated[Annotated[StrictInt, Field(ge=1)], Field(le=512)] rows: Annotated[Annotated[StrictInt, Field(ge=1)], Field(le=256)] type: Literal['resize']models.StreamControlStart
class StreamControlStart(Model): command: StrictStr | None = None kind: StreamKind type: Literal['start']models.StreamKind
class StreamKind(StrEnum): TERMINAL = 'terminal' EXEC = 'exec' CONTAINER = 'container'models.StreamStatusError
class StreamStatusError(Model): message: StrictStr type: Literal['error']models.StreamStatusExit
class StreamStatusExit(Model): code: StrictInt truncated: StrictBool type: Literal['exit']models.StreamStatusStarted
class StreamStatusStarted(Model): type: Literal['started']models.StreamStatusTerminal
class StreamStatusTerminal(Model): state: TerminalState type: Literal['terminal']models.SupplyChainChannelEvidence
class SupplyChainChannelEvidence(Model): sha256: StrictStr | None = None url: StrictStr | None = Nonemodels.SupplyChainEvidence
class SupplyChainEvidence(Model): attestations: list[SupplyChainReference] channel_index: SupplyChainChannelEvidence host_sbom: SupplyChainReference manifest: SupplyChainManifestEvidence vm_obom: SupplyChainReferencemodels.SupplyChainManifestEvidence
class SupplyChainManifestEvidence(Model): blake3: StrictStr | None = None origin: StrictStr | None = None path: StrictStr source: StrictStr | None = Nonemodels.SupplyChainReference
class SupplyChainReference(Model): format: StrictStr | None = None generator: StrictStr | None = None name: StrictStr release_artifact: StrictStr | None = None route: StrictStr | None = None scope: StrictStr | None = None workflow: StrictStr | None = Nonemodels.TerminalCursor
class TerminalCursor(Model): col: Annotated[StrictInt, Field(ge=0)] hidden: StrictBool row: Annotated[StrictInt, Field(ge=0)]models.TerminalEvent
class TerminalEvent(Model): kind: TerminalEventKind notification: TerminalNotification | None = None visual: StrictBoolmodels.TerminalEventKind
class TerminalEventKind(StrEnum): BELL = 'bell' NOTIFICATION = 'notification'models.TerminalModes
class TerminalModes(Model): alternate_screen: StrictBool application_cursor: StrictBool application_keypad: StrictBool bracketed_paste: StrictBool mouse_encoding: Annotated[StrictStr, Field(max_length=1024)] mouse_protocol: Annotated[StrictStr, Field(max_length=1024)]models.TerminalNotification
class TerminalNotification(Model): body: Annotated[StrictStr, Field(max_length=1024)] id: Annotated[StrictStr, Field(max_length=1024)] title: Annotated[StrictStr, Field(max_length=1024)]models.TerminalState
class TerminalState(Model): bell_count: Annotated[StrictInt, Field(ge=0)] cols: Annotated[Annotated[StrictInt, Field(ge=1)], Field(le=512)] cursor: TerminalCursor events: Annotated[list[TerminalEvent], Field(max_length=32)] icon_name: Annotated[StrictStr, Field(max_length=1024)] last_notification: TerminalNotification | None = None modes: TerminalModes reset: StrictBool revision: Annotated[StrictInt, Field(ge=0)] rows: Annotated[Annotated[StrictInt, Field(ge=1)], Field(le=256)] title: Annotated[StrictStr, Field(max_length=1024)]models.TerminalSummary
class TerminalSummary(Model): bell_count: Annotated[StrictInt, Field(ge=0)] last_notification: TerminalNotification | None = None revision: Annotated[StrictInt, Field(ge=0)] title: Annotated[StrictStr, Field(max_length=1024)]models.TextContent
class TextContent(Model): kind: TextContentKind text: StrictStrmodels.TextContentKind
class TextContentKind(StrEnum): TEXT = 'text'models.TimelineEvent
class TimelineEvent(Model): duration_ms: Annotated[StrictInt, Field(ge=0)] | None = None layer: TimelineLayer ref: TimelineReference status: TimelineStatus | None = None summary: StrictStr timestamp: StrictStr trace_id: StrictStr | None = Nonemodels.TimelineLayer
class TimelineLayer(StrEnum): EXEC = 'exec' TOOL = 'tool' NET = 'net' FS = 'fs' MODEL = 'model'models.TimelineResponse
class TimelineResponse(Model): events: list[TimelineEvent]models.ToolDecision
class ToolDecision(StrEnum): ALLOWED = 'allowed' DENIED = 'denied' WARNED = 'warned' ERROR = 'error'models.ToolEvent
class ToolEvent(Model): arguments: StrictStr | None = None bytes: Annotated[StrictInt, Field(ge=0)] call_id: StrictStr credential_ref: StrictStr | None = None decision: ToolDecision duration_ms: Annotated[StrictInt, Field(ge=0)] error_message: StrictStr | None = None event_id: StrictStr method: StrictStr | None = None model_call_id: StrictInt | None = None model_parent_missing: StrictBool process_name: StrictStr | None = None response_event_id: StrictStr | None = None response_preview: StrictStr | None = None server_name: StrictStr source: ToolOrigin timestamp: StrictStr | None = None tool_name: StrictStrmodels.ToolOrigin
class ToolOrigin(StrEnum): MODEL = 'model' NATIVE = 'native' MCP = 'mcp' BUILTIN = 'builtin' LOCAL = 'local' MCP_PROXY = 'mcp_proxy'models.TransactionState
class TransactionState(StrEnum): PENDING = 'pending' CONNECTED = 'connected' DENIED = 'denied' EXPIRED = 'expired' CANCELLED = 'cancelled' FAILED = 'failed'models.TriageResponse
class TriageResponse(Model): host: HostTriageResponse rank: list[StrictStr] session: JsonValue session_id: StrictStr | None = None since: StrictStrmodels.UpdateActionResponse
class UpdateActionResponse(Model): command: UpdateCommandPlan exit_code: StrictInt | None = None status: UpdateActionStatus stderr: StrictStr | None = None stdout: StrictStr | None = Nonemodels.UpdateActionStatus
class UpdateActionStatus(StrEnum): PLANNED = 'planned' SUCCEEDED = 'succeeded' FAILED = 'failed'models.UpdateApplyRequest
class UpdateApplyRequest(Model): nonnullable_optional = frozenset(['confirmed', 'dry_run']) confirmed: StrictBool | None = None dry_run: StrictBool | None = Nonemodels.UpdateCheckRequest
class UpdateCheckRequest(Model): nonnullable_optional = frozenset(['dry_run']) dry_run: StrictBool | None = Nonemodels.UpdateCommandPlan
class UpdateCommandPlan(Model): args: list[StrictStr] program: StrictStrmodels.UpdateCompatibilityState
class UpdateCompatibilityState(StrEnum): COMPATIBLE = 'compatible' UNKNOWN = 'unknown' NOT_APPLICABLE = 'not_applicable'models.UpdateStatusResponse
class UpdateStatusResponse(Model): assets: UpdateTrackStatus binary: UpdateTrackStatus channel_hash: StrictStr | None = None channel_url: StrictStr | None = None checked_at: Annotated[StrictInt, Field(ge=0)] | None = None images: UpdateTrackStatus last_error: StrictStr | None = None stale: StrictBool supply_chain: SupplyChainEvidence validation_error: StrictStr | None = None validation_status: ValidationStatus | None = Nonemodels.UpdateTrackState
class UpdateTrackState(StrEnum): CURRENT = 'current' UPDATE_AVAILABLE = 'update_available' UNKNOWN = 'unknown' NOT_PUBLISHED = 'not_published'models.UpdateTrackStatus
class UpdateTrackStatus(Model): blocked_reason: StrictStr | None = None compatibility: UpdateCompatibilityState current: StrictStr | None = None latest: StrictStr | None = None state: UpdateTrackState update_available: StrictBoolmodels.UploadResponse
class UploadResponse(Model): container_path: StrictStr | None = None size: Annotated[StrictInt, Field(ge=0)] success: StrictBool vm_path: StrictStrmodels.ValidationStatus
class ValidationStatus(StrEnum): VALID = 'valid' INVALID = 'invalid' MISSING = 'missing' FETCH_ERROR = 'fetch_error'models.VmAction
class VmAction(StrEnum): PAUSE = 'pause' STOP = 'stop' START = 'start' RESUME = 'resume' FORK = 'fork' DELETE = 'delete'models.VmActionResponse
class VmActionResponse(Model): success: StrictBoolmodels.VmAiInfo
class VmAiInfo(Model): cost_coverage: CostCoverage | None = None mcp: list[McpUsage] model_call_count: Annotated[StrictInt, Field(ge=0)] models: list[ModelUsage] total_estimated_cost_usd: StrictFloat total_input_tokens: Annotated[StrictInt, Field(ge=0)] total_output_tokens: Annotated[StrictInt, Field(ge=0)] total_thinking_tokens: Annotated[StrictInt, Field(ge=0)] total_tool_calls: Annotated[StrictInt, Field(ge=0)]models.VmFilesInfo
class VmFilesInfo(Model): actions: list[FileActionCount] total_events: Annotated[StrictInt, Field(ge=0)]models.VmLifecycleState
class VmLifecycleState(StrEnum): RUNNING = 'Running' STOPPED = 'Stopped' SUSPENDED = 'Suspended' DEFUNCT = 'Defunct' INCOMPATIBLE = 'Incompatible'models.VmNetworkInfo
class VmNetworkInfo(Model): allowed_requests: Annotated[StrictInt, Field(ge=0)] bytes_received: Annotated[StrictInt, Field(ge=0)] bytes_sent: Annotated[StrictInt, Field(ge=0)] denied_requests: Annotated[StrictInt, Field(ge=0)] errors: Annotated[StrictInt, Field(ge=0)] total_requests: Annotated[StrictInt, Field(ge=0)]models.VmStatsDetailResponse
class VmStatsDetailResponse(Model): audit_events: list[AuditEvent] body_blobs: dict[str, list[EventBody]] credential_events: list[CredentialEvent] dns_events: list[DnsEvent] file_events: list[FileEvent] http_events: list[HttpEvent] interactions: InteractionReport model_events: list[ModelEvent] model_stats: list[ModelUsage] process_events: list[ProcessEvent] tool_events: list[ToolEvent]models.VmStatsSummaryResponse
class VmStatsSummaryResponse(Model): allowed_requests: Annotated[StrictInt, Field(ge=0)] cost_coverage: CostCoverage | None = None denied_requests: Annotated[StrictInt, Field(ge=0)] total_estimated_cost: StrictFloat total_input_tokens: Annotated[StrictInt, Field(ge=0)] total_output_tokens: Annotated[StrictInt, Field(ge=0)] total_requests: Annotated[StrictInt, Field(ge=0)] total_thinking_tokens: Annotated[StrictInt, Field(ge=0)] total_tool_calls: Annotated[StrictInt, Field(ge=0)]models.VmStatusResponse
class VmStatusResponse(Model): nonnullable_optional = frozenset(['can_resume', 'pending_approval_count', 'persistent']) available_actions: list[VmAction] can_resume: StrictBool | None = None created_at: StrictStr | None = None id: StrictStr last_error: StrictStr | None = None name: StrictStr pending_approval_count: Annotated[StrictInt, Field(ge=0)] | None = None persistent: StrictBool | None = None pid: Annotated[StrictInt, Field(ge=0)] | None = None resume_blocked_reason: StrictStr | None = None status: VmLifecycleState storage: StorageDiagnostics | None = None uptime_secs: Annotated[StrictInt, Field(ge=0)] | None = Nonemodels.VmSummary
class VmSummary(Model): nonnullable_optional = frozenset(['can_resume', 'pending_approval_count']) allowed_requests: Annotated[StrictInt, Field(ge=0)] | None = None app: ImageApp | None = None available_actions: list[VmAction] browser_request: BrowserRequest | None = None can_resume: StrictBool | None = None cost_coverage: CostCoverage | None = None denied_requests: Annotated[StrictInt, Field(ge=0)] | None = None id: StrictStr last_error: StrictStr | None = None model_call_count: Annotated[StrictInt, Field(ge=0)] | None = None name: StrictStr | None = None pending_approval_count: Annotated[StrictInt, Field(ge=0)] | None = None persistent: StrictBool resume_blocked_reason: StrictStr | None = None status: VmLifecycleState terminal: TerminalSummary | None = None total_estimated_cost: StrictFloat | None = None total_file_events: Annotated[StrictInt, Field(ge=0)] | None = None total_input_tokens: Annotated[StrictInt, Field(ge=0)] | None = None total_output_tokens: Annotated[StrictInt, Field(ge=0)] | None = None total_requests: Annotated[StrictInt, Field(ge=0)] | None = None total_tool_calls: Annotated[StrictInt, Field(ge=0)] | None = None uptime_secs: Annotated[StrictInt, Field(ge=0)] | None = None