From 9145d064670b4eb38fea6f4bf0f5c9f3b46653d2 Mon Sep 17 00:00:00 2001
From: "kernel-internal[bot]"
<260533166+kernel-internal[bot]@users.noreply.github.com>
Date: Fri, 14 Aug 2026 15:23:19 +0000
Subject: [PATCH 1/3] feat: Point at pending stlc seal-tracking PRs
Stainless-Generated-From: 3b844df3156f6877d15d8eb40b30f5d76b62e959
---
src/resources/images.ts | 9 +++++++++
src/resources/pushes.ts | 18 ++++++++++++------
tests/api-resources/images.test.ts | 5 +++++
3 files changed, 26 insertions(+), 6 deletions(-)
diff --git a/src/resources/images.ts b/src/resources/images.ts
index 7ea89f4..1422968 100644
--- a/src/resources/images.ts
+++ b/src/resources/images.ts
@@ -1,6 +1,7 @@
// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
import { APIResource } from '../core/resource';
+import * as PushesAPI from './pushes';
import { APIPromise } from '../core/api-promise';
import { buildHeaders } from '../internal/headers';
import { RequestOptions } from '../internal/request-options';
@@ -139,6 +140,14 @@ export interface ImageCreateParams {
*/
name: string;
+ /**
+ * Docker-style registry credentials borrowed for one image pull or push request.
+ * They remain in memory and are never persisted or logged. When omitted or empty,
+ * the server's own registry credentials are used. An interrupted credentialed
+ * operation must be retried with fresh credentials.
+ */
+ credentials?: PushesAPI.PushCredentials;
+
/**
* Target platform as os/arch[/variant] (e.g. "linux/amd64"), matching Docker
* --platform. Omit for the host platform. Not a fixed enum: the os/arch[/variant]
diff --git a/src/resources/pushes.ts b/src/resources/pushes.ts
index 38a4488..76b03a7 100644
--- a/src/resources/pushes.ts
+++ b/src/resources/pushes.ts
@@ -61,8 +61,10 @@ export interface CreatePushRequest {
target: string;
/**
- * Registry credentials borrowed for this push only. When omitted, the server's own
- * registry credentials are used.
+ * Docker-style registry credentials borrowed for one image pull or push request.
+ * They remain in memory and are never persisted or logged. When omitted or empty,
+ * the server's own registry credentials are used. An interrupted credentialed
+ * operation must be retried with fresh credentials.
*/
credentials?: PushCredentials;
@@ -121,8 +123,10 @@ export interface Push {
}
/**
- * Registry credentials borrowed for this push only. When omitted, the server's own
- * registry credentials are used.
+ * Docker-style registry credentials borrowed for one image pull or push request.
+ * They remain in memory and are never persisted or logged. When omitted or empty,
+ * the server's own registry credentials are used. An interrupted credentialed
+ * operation must be retried with fresh credentials.
*/
export interface PushCredentials {
/**
@@ -157,8 +161,10 @@ export interface PushCreateParams {
target: string;
/**
- * Registry credentials borrowed for this push only. When omitted, the server's own
- * registry credentials are used.
+ * Docker-style registry credentials borrowed for one image pull or push request.
+ * They remain in memory and are never persisted or logged. When omitted or empty,
+ * the server's own registry credentials are used. An interrupted credentialed
+ * operation must be retried with fresh credentials.
*/
credentials?: PushCredentials;
diff --git a/tests/api-resources/images.test.ts b/tests/api-resources/images.test.ts
index 2e2514d..9d279e2 100644
--- a/tests/api-resources/images.test.ts
+++ b/tests/api-resources/images.test.ts
@@ -24,6 +24,11 @@ describe('resource images', () => {
test.skip('create: required and optional params', async () => {
const response = await client.images.create({
name: 'docker.io/library/nginx:latest',
+ credentials: {
+ password: 'password',
+ registry_token: 'registry_token',
+ username: 'username',
+ },
platform: 'linux/amd64',
tags: { team: 'backend', env: 'staging' },
});
From b038e6f5153fb7311cbefe74d7630ac81f19f12c Mon Sep 17 00:00:00 2001
From: "kernel-internal[bot]"
<260533166+kernel-internal[bot]@users.noreply.github.com>
Date: Mon, 17 Aug 2026 18:57:04 +0000
Subject: [PATCH 2/3] feat: add Python SDK WebSocket primitives
Stainless-Generated-From: c0758e9db2158528211faa1bc87054cce107602a
---
.stats.yml | 2 +-
api.md | 16 ++
src/client.ts | 20 +++
src/resources/capabilities.ts | 180 +++++++++++++++++++++++
src/resources/index.ts | 9 ++
tests/api-resources/capabilities.test.ts | 22 +++
6 files changed, 248 insertions(+), 1 deletion(-)
create mode 100644 src/resources/capabilities.ts
create mode 100644 tests/api-resources/capabilities.test.ts
diff --git a/.stats.yml b/.stats.yml
index 1c9b72d..2814bb7 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1 +1 @@
-configured_endpoints: 61
+configured_endpoints: 62
diff --git a/api.md b/api.md
index 8328676..a44fa0d 100644
--- a/api.md
+++ b/api.md
@@ -14,6 +14,22 @@ Methods:
- client.health.check() -> HealthCheckResponse
+# Capabilities
+
+Types:
+
+- Capabilities
+- CapabilitiesDefaultRuntime
+- CapabilitiesHost
+- CapabilitiesImages
+- CapabilitiesNetwork
+- CapabilitiesRuntime
+- CapabilitiesServer
+
+Methods:
+
+- client.capabilities.get() -> Capabilities
+
# Images
Types:
diff --git a/src/client.ts b/src/client.ts
index a7f4306..541b37f 100644
--- a/src/client.ts
+++ b/src/client.ts
@@ -37,6 +37,15 @@ import {
BuildStatus,
Builds,
} from './resources/builds';
+import {
+ Capabilities,
+ CapabilitiesDefaultRuntime,
+ CapabilitiesHost,
+ CapabilitiesImages,
+ CapabilitiesNetwork,
+ CapabilitiesRuntime,
+ CapabilitiesServer,
+} from './resources/capabilities';
import {
AvailableDevice,
Device,
@@ -850,6 +859,7 @@ export class Hypeman {
static toFile = Uploads.toFile;
health: API.Health = new API.Health(this);
+ capabilities: API.Capabilities = new API.Capabilities(this);
images: API.Images = new API.Images(this);
instances: API.Instances = new API.Instances(this);
snapshots: API.Snapshots = new API.Snapshots(this);
@@ -878,6 +888,16 @@ export declare namespace Hypeman {
export { Health as Health, type HealthCheckResponse as HealthCheckResponse };
+ export {
+ type Capabilities as Capabilities,
+ type CapabilitiesDefaultRuntime as CapabilitiesDefaultRuntime,
+ type CapabilitiesHost as CapabilitiesHost,
+ type CapabilitiesImages as CapabilitiesImages,
+ type CapabilitiesNetwork as CapabilitiesNetwork,
+ type CapabilitiesRuntime as CapabilitiesRuntime,
+ type CapabilitiesServer as CapabilitiesServer,
+ };
+
export {
Images as Images,
type Image as Image,
diff --git a/src/resources/capabilities.ts b/src/resources/capabilities.ts
new file mode 100644
index 0000000..4a24a52
--- /dev/null
+++ b/src/resources/capabilities.ts
@@ -0,0 +1,180 @@
+// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+import { APIResource } from '../core/resource';
+import { APIPromise } from '../core/api-promise';
+import { RequestOptions } from '../internal/request-options';
+
+export class Capabilities extends APIResource {
+ /**
+ * Returns machine-readable host capabilities: server and API version, host
+ * OS/architecture, every runtime available on this host with its per-runtime
+ * feature IDs, the configured default runtime and whether it is available, guest
+ * networking model and host gateway, supported image platforms, and stable
+ * server-level feature IDs.
+ *
+ * Runtime-derived values reflect the actual host (for example, snapshot and
+ * standby support on macOS is gated on the host OS version), so clients can gate
+ * behavior on capabilities without hard-coding hypervisor knowledge.
+ */
+ get(options?: RequestOptions): APIPromise {
+ return this._client.get('/capabilities', options);
+ }
+}
+
+export interface Capabilities {
+ default_runtime: CapabilitiesDefaultRuntime;
+
+ /**
+ * Stable server-level feature IDs: API surfaces this server exposes regardless of
+ * which runtime backs an instance. Always present: "instances", "images",
+ * "builds", "volumes", "ingress", "exec", "logs". Host-conditional: "devices"
+ * (device passthrough management, Linux hosts only) and "rosetta-emulation" (Apple
+ * Silicon macOS hosts with Rosetta currently installed, per the same availability
+ * probe launches enforce). Per-runtime features are reported under each runtimes[]
+ * entry.
+ */
+ features: Array;
+
+ host: CapabilitiesHost;
+
+ images: CapabilitiesImages;
+
+ network: CapabilitiesNetwork;
+
+ /**
+ * Every runtime this server build supports on this host platform, each with its
+ * own availability flag and feature IDs. Hosts commonly support several runtimes
+ * at once (for example cloud-hypervisor, firecracker, qemu, and qemu-microvm on
+ * linux/amd64). A listed runtime is only launchable when its "available" flag is
+ * true. Entries are sorted by name.
+ */
+ runtimes: Array;
+
+ server: CapabilitiesServer;
+}
+
+export interface CapabilitiesDefaultRuntime {
+ /**
+ * Whether the default runtime can launch on this host: it appears in runtimes and
+ * its launch prerequisites are met (matches that entry's "available"). When false,
+ * launches that rely on the default will fail until the server is reconfigured
+ * with an available runtime or the missing prerequisite (for example the QEMU
+ * system binary) is installed.
+ */
+ available: boolean;
+
+ /**
+ * Runtime used for launches that do not name one
+ */
+ name: string;
+}
+
+export interface CapabilitiesHost {
+ /**
+ * Host CPU architecture
+ */
+ arch: string;
+
+ /**
+ * Host operating system
+ */
+ os: string;
+}
+
+export interface CapabilitiesImages {
+ /**
+ * Image platform selected when a create request omits one
+ */
+ default_platform: string;
+
+ /**
+ * Image platforms (os/arch) this host can run. On Apple Silicon macOS this
+ * includes linux/amd64 only when Rosetta is currently installed — probed via the
+ * same Virtualization.framework availability check launches enforce — so a listed
+ * platform is launchable right now. Install Rosetta (softwareupdate
+ * --install-rosetta) to enable it.
+ */
+ platforms: Array;
+}
+
+export interface CapabilitiesNetwork {
+ /**
+ * Whether direct VM-to-VM traffic is permitted on the default network
+ */
+ guest_to_guest: boolean;
+
+ /**
+ * Guest networking model. "bridge" is a Linux bridge with per-VM TAP devices;
+ * "nat" is hypervisor-provided NAT (macOS).
+ */
+ model: 'bridge' | 'nat';
+
+ /**
+ * Guest-visible host gateway IP. Guests reach host services (including host
+ * ingress) through this address. Omitted when no default network has been resolved
+ * on this host yet.
+ */
+ gateway?: string;
+
+ /**
+ * Guest subnet CIDR
+ */
+ subnet?: string;
+}
+
+export interface CapabilitiesRuntime {
+ /**
+ * Whether this runtime's launch prerequisites are currently met on this host.
+ * Listed runtimes are supported by this server build on this platform;
+ * available=false means a host prerequisite is missing (for example qemu requires
+ * a runnable system-installed QEMU binary and the host vhost-vsock device) and
+ * launches naming this runtime will fail until it is installed.
+ */
+ available: boolean;
+
+ /**
+ * Stable feature IDs supported by this runtime on this host: "snapshots"
+ * (snapshot/restore), "standby" (pause + memory snapshot, with later restore),
+ * "fork" (clone an instance from a stopped source; forking a standby or running
+ * source restores/creates snapshots and additionally requires "standby"), "pause"
+ * (pause/resume), "hotplug-memory" (live memory resize), "balloon-control"
+ * (runtime balloon target changes), "vsock" (guest vsock communication),
+ * "gpu-passthrough" (GPU/PCI device passthrough), "disk-io-limit" (disk I/O rate
+ * limiting), "disk-resize" (live disk resize). Values are host- and
+ * configuration-truthful: vz omits snapshots and standby on macOS 13, which lacks
+ * Virtualization.framework VM save/restore, while still advertising fork
+ * (stopped-source clones need no save/restore there), and cloud-hypervisor reports
+ * "disk-resize" only when the configured default version supports it.
+ */
+ features: Array;
+
+ /**
+ * Runtime identifier
+ */
+ name: string;
+}
+
+export interface CapabilitiesServer {
+ /**
+ * API contract version (matches the OpenAPI document info version)
+ */
+ api_version: string;
+
+ /**
+ * Server build version (short git revision, with "-dirty" suffix for uncommitted
+ * builds, or "unknown")
+ */
+ version: string;
+}
+
+export declare namespace Capabilities {
+ export {
+ type Capabilities as Capabilities,
+ type CapabilitiesDefaultRuntime as CapabilitiesDefaultRuntime,
+ type CapabilitiesHost as CapabilitiesHost,
+ type CapabilitiesImages as CapabilitiesImages,
+ type CapabilitiesNetwork as CapabilitiesNetwork,
+ type CapabilitiesRuntime as CapabilitiesRuntime,
+ type CapabilitiesServer as CapabilitiesServer,
+ };
+}
diff --git a/src/resources/index.ts b/src/resources/index.ts
index 2a60e3b..6a44531 100644
--- a/src/resources/index.ts
+++ b/src/resources/index.ts
@@ -21,6 +21,15 @@ export {
type BuildListParams,
type BuildEventsParams,
} from './builds';
+export {
+ Capabilities,
+ type CapabilitiesDefaultRuntime,
+ type CapabilitiesHost,
+ type CapabilitiesImages,
+ type CapabilitiesNetwork,
+ type CapabilitiesRuntime,
+ type CapabilitiesServer,
+} from './capabilities';
export {
Devices,
type AvailableDevice,
diff --git a/tests/api-resources/capabilities.test.ts b/tests/api-resources/capabilities.test.ts
new file mode 100644
index 0000000..b427fca
--- /dev/null
+++ b/tests/api-resources/capabilities.test.ts
@@ -0,0 +1,22 @@
+// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+import Hypeman from '@onkernel/hypeman';
+
+const client = new Hypeman({
+ apiKey: 'My API Key',
+ baseURL: process.env['TEST_API_BASE_URL'] ?? 'http://127.0.0.1:4010',
+});
+
+describe('resource capabilities', () => {
+ // Mock server tests are disabled
+ test.skip('get', async () => {
+ const responsePromise = client.capabilities.get();
+ const rawResponse = await responsePromise.asResponse();
+ expect(rawResponse).toBeInstanceOf(Response);
+ const response = await responsePromise;
+ expect(response).not.toBeInstanceOf(Response);
+ const dataAndResponse = await responsePromise.withResponse();
+ expect(dataAndResponse.data).toBe(response);
+ expect(dataAndResponse.response).toBe(rawResponse);
+ });
+});
From 949aeb62f954325765038beb80e534babaac53c0 Mon Sep 17 00:00:00 2001
From: "kernel-internal[bot]"
<260533166+kernel-internal[bot]@users.noreply.github.com>
Date: Mon, 17 Aug 2026 19:00:33 +0000
Subject: [PATCH 3/3] release: 0.7.0
---
.release-please-manifest.json | 2 +-
CHANGELOG.md | 8 ++++++++
package-lock.json | 4 ++--
package.json | 2 +-
src/version.ts | 2 +-
5 files changed, 13 insertions(+), 5 deletions(-)
diff --git a/.release-please-manifest.json b/.release-please-manifest.json
index bcd0522..e7ca613 100644
--- a/.release-please-manifest.json
+++ b/.release-please-manifest.json
@@ -1,3 +1,3 @@
{
- ".": "0.6.0"
+ ".": "0.7.0"
}
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 1b98d52..163f9ef 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,13 @@
# Changelog
+## [0.7.0](https://github.com/kernel/hypeman-ts/compare/v0.6.0...v0.7.0) (2026-08-17)
+
+
+### Features
+
+* add Python SDK WebSocket primitives ([b038e6f](https://github.com/kernel/hypeman-ts/commit/b038e6f5153fb7311cbefe74d7630ac81f19f12c))
+* Point at pending stlc seal-tracking PRs ([9145d06](https://github.com/kernel/hypeman-ts/commit/9145d064670b4eb38fea6f4bf0f5c9f3b46653d2))
+
## [0.6.0](https://github.com/kernel/hypeman-ts/compare/v0.5.1...v0.6.0) (2026-08-12)
diff --git a/package-lock.json b/package-lock.json
index f8ffb73..1126dc1 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "@onkernel/hypeman",
- "version": "0.6.0",
+ "version": "0.7.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@onkernel/hypeman",
- "version": "0.6.0",
+ "version": "0.7.0",
"license": "Apache-2.0",
"dependencies": {
"dockerode": "^4.0.10",
diff --git a/package.json b/package.json
index 971dfb4..98efff1 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "@onkernel/hypeman",
- "version": "0.6.0",
+ "version": "0.7.0",
"description": "The official TypeScript library for the Hypeman API",
"author": "Hypeman <>",
"types": "dist/index.d.ts",
diff --git a/src/version.ts b/src/version.ts
index 30c2817..d9da9f7 100644
--- a/src/version.ts
+++ b/src/version.ts
@@ -1 +1 @@
-export const VERSION = '0.6.0'; // x-release-please-version
+export const VERSION = '0.7.0'; // x-release-please-version