Skip to main content

Canonical contracts for Runtm: manifest schema, types, errors

Project description

runtm-shared

Canonical contracts for Runtm: manifest schema, types, errors, and shared utilities.

Installation

pip install runtm-shared

Contents

Core Modules

Module Description
types.py Deployment state machine, enums, session types, API types
manifest.py Pydantic models for runtm.yaml validation
errors.py Typed error hierarchy with recovery hints
ids.py Deterministic deployment ID generation
env.py Environment variable handling and validation

Session & Sandbox Types

Module Description
types.py Session, SessionState, SessionMode, SandboxConfig, AgentType

Discovery & Requests

Module Description
discovery.py Discovery metadata for searchable deployments
requests.py Agent request/proposal handling (runtm.requests.yaml)
lockfiles.py Lockfile validation and drift detection

Infrastructure

Module Description
storage/base.py Abstract storage interface for artifacts
dns/ DNS provider abstraction (Cloudflare)
redis.py Redis connection utilities
urls.py URL generation for deployments
deploy_tracking.py Deployment tracking and state management

Telemetry

Module Description
telemetry/ Anonymous usage telemetry (opt-out available)

Usage

Types and State Machine

from runtm_shared.types import (
    DeploymentState,
    can_transition,
    MachineTier,
    # Session types
    Session,
    SessionState,
    SessionMode,
    SandboxConfig,
    AgentType,
)

# Check if state transition is valid
if can_transition(DeploymentState.BUILDING, DeploymentState.DEPLOYING):
    # proceed with transition
    pass

Manifest Validation

from runtm_shared.manifest import Manifest

# Load and validate runtm.yaml
manifest = Manifest.from_yaml("runtm.yaml")
print(manifest.name, manifest.template, manifest.runtime)

Error Handling

from runtm_shared.errors import (
    RuntmError,
    ManifestValidationError,
    DeploymentError,
    AuthenticationError,
)

try:
    # ... operation
except ManifestValidationError as e:
    print(f"Invalid manifest: {e}")
    print(f"Recovery: {e.recovery_hint}")

ID Generation

from runtm_shared.ids import generate_deployment_id

# Generate deterministic deployment ID
dep_id = generate_deployment_id(project_name="my-api", user_id="usr_123")
# Returns: dep_abc123...

Session Types

from runtm_shared.types import (
    Session,
    SessionState,
    SessionMode,
    AgentType,
    SandboxConfig,
)

# Create a session config
config = SandboxConfig(
    agent=AgentType.CLAUDE_CODE,
    template="backend-service",
)

# Session states
SessionState.RUNNING
SessionState.STOPPED
SessionState.DESTROYED

# Session modes
SessionMode.AUTOPILOT   # Agent controlled via prompts
SessionMode.INTERACTIVE # User controls agent manually

Discovery Metadata

from runtm_shared.discovery import DiscoveryMetadata

# Load discovery metadata
discovery = DiscoveryMetadata.from_yaml("runtm.discovery.yaml")
print(discovery.description)
print(discovery.tags)
print(discovery.capabilities)

Development

# Install with dev dependencies
pip install -e ".[dev]"

# Run tests
pytest

# Type checking
mypy runtm_shared

Package Structure

runtm_shared/
├── __init__.py
├── types.py          # Core types and state machine
├── manifest.py       # Manifest schema (Pydantic)
├── errors.py         # Error hierarchy
├── ids.py            # ID generation
├── env.py            # Environment handling
├── discovery.py      # Discovery metadata
├── requests.py       # Agent requests
├── lockfiles.py      # Lockfile validation
├── urls.py           # URL generation
├── redis.py          # Redis utilities
├── deploy_tracking.py # Deployment tracking
├── storage/
│   └── base.py       # Storage interface
├── dns/
│   ├── base.py       # DNS provider interface
│   └── cloudflare.py # Cloudflare implementation
└── telemetry/
    ├── base.py       # Telemetry base
    ├── service.py    # Telemetry service
    └── ...           # Other telemetry modules

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

runtm_shared-0.2.3.tar.gz (119.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

runtm_shared-0.2.3-py3-none-any.whl (58.2 kB view details)

Uploaded Python 3

File details

Details for the file runtm_shared-0.2.3.tar.gz.

File metadata

  • Download URL: runtm_shared-0.2.3.tar.gz
  • Upload date:
  • Size: 119.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.2

File hashes

Hashes for runtm_shared-0.2.3.tar.gz
Algorithm Hash digest
SHA256 b2b7d3e34ad5fb9d11ecd8bfeaaad229a3c339e31dd41e8851f445aa20df7818
MD5 015f1570c4719e2005065cd42bc4ac86
BLAKE2b-256 1a4b9da036fbf282412ae6d03fd937287d900e64ca4674300ce66bf70e8e6efa

See more details on using hashes here.

File details

Details for the file runtm_shared-0.2.3-py3-none-any.whl.

File metadata

  • Download URL: runtm_shared-0.2.3-py3-none-any.whl
  • Upload date:
  • Size: 58.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.2

File hashes

Hashes for runtm_shared-0.2.3-py3-none-any.whl
Algorithm Hash digest
SHA256 cd22fb291bb62cd497e4d83194c8eeab4bf49eddb6062fac36b1b643e70b328d
MD5 4958079ffa1dd1ca675b4467317c9c27
BLAKE2b-256 26c9f737f29bca49e062d2ac9b1a00fec4b5bf6c0f25bb66f407b543a26a3595

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page