Skip to content

Releases: compforge/hostel

Hostel v0.1.39

Choose a tag to compare

@qiankunli qiankunli released this 21 Oct 04:16
7f48512

Snapshot of GitHub main at 7f48512f0885072ce090529af77ac3d9ed4fea11, preserving the current Bed runtime baseline before the planned Bed/Pillow model changes.

Upgrade Notes

  • Bed management responses now return the Hostel lifecycle identity in id and the caller-supplied routing identity in name. Use name for request routing and business correlation; request paths and X-Hostel-Bed still accept that name. See the identity migration guide.
  • Filesystem declarations use per-Bed path_mappings and sync_paths; replace legacy instance-wide projection configuration. The carrier data root is configured with --beds-root / HOSTEL_BEDS_ROOT.
  • Services reference named Bed port mappings. Discover actual Bed/Host ports from status.port_mappings or the Service access response; callers supply the reachable Carrier host instead of consuming a generated endpoint URL.
  • Room types describe file isolation guarantees. Read component status for actual identity, network, process and resource capabilities; mechanism diagnostics use tools.

New Features

  • OpenSandbox Execd adapters for command execution, persistent sessions, file operations and execution logs, with optional per-Bed authentication.
  • Named Bed TCP port mappings with Service ownership and discovery across shared or private networking.
  • Optional Executor PID namespaces, with procfs and filesystem views tied to Executor lifecycle.
  • CPU and memory pressure signals for Carrier scheduling decisions, including early pressure thresholds.
  • A standalone, standard-library-only protocol Go module supporting Go 1.25 consumers independently of the daemon toolchain.

Bug Fixes

  • Commands, sessions and Services share Bed-native data paths and temporary files; file APIs remain usable when process path redirection is unavailable.
  • Prepare privileged Bed resources before dropping workload credentials, and preserve the selected isolation contract when Executors are replaced.
  • Preserve execution-history and preparation-error boundaries, handle oversized supervisor start requests, and support IPv4 NAT on older Linux kernels.
  • Smooth CPU pressure over a ten-second window to reduce transient scheduling noise.

Full Changelog: v0.1.14...v0.1.39

Hostel v0.1.14

Choose a tag to compare

@qiankunli qiankunli released this 14 Sep 09:24
4d9c91c

This release brings together the Bed runtime and component changes since v0.0.5, including declarative services, process configuration, lifecycle renewal, and capability-aware isolation.

Upgrade Notes

  • Update status consumers for /v1/status schema version 5. Host observations are split into host.fact and host.status; managed port allocations are under host.status.ports, and configuration-source observations are under components.configuration. Bed lifecycle and component status are reported separately.
  • Review the current Bed creation, service, and component configuration contracts before upgrading older clients. Bed services use caller-provided ServiceSpec declarations; the runtime image supplies their executables and dependencies.
  • Named configuration sources and absolute env_files references are intended for a trusted control plane. Source registration is not tenant authorization, and environment injection does not establish filesystem or process isolation.

New Features

  • Bed services: optional per-Bed managed processes share the Bed execution environment and lifecycle, with restart policies, readiness checks, HTTP access discovery, optional bearer authentication, and daemon-wide TCP port allocation shared with Amenities.
  • Configuration management: ordinary execution and services independently select env, env_files, env_from, and env_value_from. Named host directories can supply projected configuration; resolved file values stay out of persisted declarations and status responses.
  • Lifecycle and execution: a shared Bed model separates persistent Bed identity, replaceable Executors, and individual Executions. Asynchronous initialization waits for data restore and environment preparation. Bed renewal extends retention without creating or waking a Bed.
  • Capability-aware isolation: filesystem, identity, and network components compose their actual guarantees into Bed room profiles. Optional network namespaces and policies, scoped Unix users, and PRoot/pathshim process views support different host capabilities while reporting limitations explicitly.
  • Storage and integrations: configurable BedFS paths, per-Bed store selection, explicit S3 and restic transfers, Bed-scoped remote MCP access, structured execution events, and OpenTelemetry tracing.

Bug Fixes

  • Separate service readiness from process supervision and support readiness checks when network inspection privileges are unavailable.
  • Verify service listeners in the Bed network scope and use UUIDv7 transfer instance IDs.
  • Harden initialization, cleanup, executor failure handling, and filesystem boundaries; preserve command stdin and heredoc behavior across execution paths.

Full Changelog: v0.0.5...v0.1.14

hostel v0.0.5

Choose a tag to compare

@qiankunli qiankunli released this 07 Aug 11:34
b28b167

Changes

  • PR #78 build: add explicit project version
  • PR #77 feat: separate bed pressure from hard capacity
  • PR #76 feat: add bed restore readiness and affinity signals
  • PR #75 feat: model pinned bed capacity and store sync
  • PR #74 fix: preserve synced idle admission state
  • PR #73 fix: preserve resident beds under carrier pressure
  • PR #72 feat: expose bed pressure admission signal
  • PR #71 fix: keep exec SSE streams alive
  • PR #70 docs: describe hostel as a small kubelet
  • PR #69 feat: add carrier resource admission
  • PR #68 feat: isolate bed envs and cap active beds
  • PR #67 feat: session primitive + evict revoke + bounded operation timeout + merged /v1/beds
  • PR #66 feat: share carrier software across beds
  • PR #65 fix: keep default bed out of isolated session view
  • PR #64 fix: reject deleting the default isolated session
  • PR #63 fix: serialize process signals with reaping
  • PR #62 feat: add isolated session bed adapter
  • PR #61 fix: serialize process signals with reaping
  • PR #60 fix: close received rights on protocol errors
  • PR #59 fix: preserve bedinit IPC message boundaries
  • PR #58 fix: keep health checks independent of bed locks
  • PR #57 feat: model bed lifecycle as operation state
  • PR #56 feat: expose bed lifecycle observability
  • PR #55 fix: protect active beds with exec-aware expiry
  • PR #54 feat: add per-bed resource metrics
  • PR #53 fix(store): use seekable bodies for S3 PutObject
  • PR #52 refactor(store): scope S3 objects directly by bed
  • PR #51 fix(store): make S3 addressing style configurable
  • PR #50 fix(hostel): preserve exact exec stream bytes
  • PR #49 fix(store): exclude bed tmp from S3 snapshots

hostel v0.0.3

Choose a tag to compare

@qiankunli qiankunli released this 09 Jul 05:40
68b367d

Release cut from current main after v0.0.2.

Highlights:

  • Add bed-init based process supervision and per-bed process tree cleanup.
  • Improve command execution isolation, cwd handling, and workdir creation.
  • Add Chromium amenity supervision plus per-bed CDP proxy support.
  • Refine bed path modeling and log readability around bed ids.
  • Reach suite isolation in non-privileged Kubernetes pods and surface AppArmor facts.
  • Move shared helpers to go-stdx and tighten build/check workflow.

hostel v0.0.1

Choose a tag to compare

@qiankunli qiankunli released this 03 Jul 11:25
2e751b2

First versioned release.

hostel is a sandbox runtime for AI agents: one process manages many isolated execution units (beds) behind an OpenSandbox-compatible HTTP API.

Highlights

Bed model

  • bed = guest unit = one sandbox to the caller (workspace + long-lived shell, state persists across commands); default bed fallback for single-tenant callers
  • explicit lifecycle ACTIVE → EVICTING → DORMANT — the snapshot is the durable identity; --max-beds backpressure (429) for upstream schedulers

Data isolation tiers (hostel-metaphor levels, not mechanism names)

  • dorm (no walls) / room (your data locked, commons shared) / suite (fully private view) / auto = environment ceiling; effective = min(requested, ceiling), over-asks degrade honestly
  • mechanisms behind the levels: direct · Landlock (__confine re-exec, zero caps) · per-bed uid (no-Landlock kernels, NNP-hardened) · bwrap (private mount ns)
  • host facts collected once, surfaced in /healthz; every mechanism proves itself with a boot smoke — declared capability ≠ enforced

Persistence (S3-compatible)

  • --store auto (default): configure --s3-bucket and beds persist via cas — the workspace is catar-serialized and CDC-chunked (via desync); only chunks new since the previous snapshot upload, an unchanged workspace re-persists with zero uploads
  • tarball layout as explicit fallback (one tar.gz per bed)
  • dual-activation conflict detector: persist refuses to overwrite a newer generation (first-writer-wins, ErrConflict)
  • luggage: evicted beds leave a local warm copy; same-instance resume skips the download (generation-based freshness), disk bounded by watermark GC; GET /v1/inventory gives schedulers capacity + per-bed freshness in one call

Amenities

  • shared heavyweight facilities sliced by app-native tenancy: Chromium (one browser, per-bed BrowserContext) with full interaction verbs

Image

docker run hub.byted.org/epscprelease/hostel:v0.0.1

Multi-arch (linux/amd64, linux/arm64), bwrap + chromium included; hostel --health as HEALTHCHECK.