Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .github/workflows/semgrep.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ on:
permissions:
contents: read
pull-requests: write
# semgrep exchanges the job's OIDC token for short-lived model credentials.
id-token: write

jobs:
scan:
Expand Down
2 changes: 2 additions & 0 deletions .github/workflows/vuln-remediation.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ on:
permissions:
contents: write
pull-requests: write
# vuln-remediation exchanges the job's OIDC token for short-lived model credentials.
id-token: write

jobs:
remediate:
Expand Down
2 changes: 1 addition & 1 deletion .release-please-manifest.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
{
".": "0.28.0"
".": "0.29.0"
}
10 changes: 10 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,15 @@
# Changelog

## [0.29.0](https://github.com/kernel/hypeman-ts/compare/v0.28.0...v0.29.0) (2026-11-09)


### Features

* Add Windows hypervisor primitives ([a0b69e9](https://github.com/kernel/hypeman-ts/commit/a0b69e995022e8f39d2df180f7b71cdd9dc5231d))
* Integrate vendor VFIO vGPUs into the instance lifecycle ([2222034](https://github.com/kernel/hypeman-ts/commit/2222034d8980f9052f1b29774d3417bcbce8b05b))
* Place vGPU profiles the driver hides from creatable lists ([e7f429c](https://github.com/kernel/hypeman-ts/commit/e7f429c3dcf2021f62ee13ef5f036da064d668d3))
* Update Hypeman build toolchains to Go 1.26.10 ([26e9bdb](https://github.com/kernel/hypeman-ts/commit/26e9bdb59bd86802771ffde0289e2f96b0ffebc4))

## [0.28.0](https://github.com/kernel/hypeman-ts/compare/v0.27.0...v0.28.0) (2026-09-01)


Expand Down
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@onkernel/hypeman",
"version": "0.28.0",
"version": "0.29.0",
"description": "The official TypeScript library for the Hypeman API",
"author": "Hypeman <>",
"types": "dist/index.d.ts",
Expand Down
30 changes: 20 additions & 10 deletions src/resources/instances/instances.ts
Original file line number Diff line number Diff line change
Expand Up @@ -624,7 +624,12 @@ export namespace Instance {
*/
export interface GPU {
/**
* mdev device UUID
* sysfs path of the assigned vGPU device
*/
device_path?: string;

/**
* mdev device UUID (mdev hosts only)
*/
mdev_uuid?: string;

Expand Down Expand Up @@ -747,7 +752,8 @@ export interface InstanceStats {
memory_vms_bytes: number;

/**
* Total network bytes received by the VM (from TAP interface)
* Total network bytes received by the VM (from TAP interface). Always 0 for macOS
* guests, which use NAT with no per-instance interface.
*/
network_rx_bytes: number;

Expand Down Expand Up @@ -1140,15 +1146,16 @@ export interface InstanceCreateParams {
network?: InstanceCreateParams.Network;

/**
* Writable overlay disk size (human-readable format like "10GB", "50G")
* Writable overlay disk size (human-readable format like "10GB", "50G"). Omit this
* field for macOS guests, which clone the image's complete boot disk instead.
*/
overlay_size?: string;

/**
* 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]
* grammar is validated server-side and invalid values return 400 invalid_platform.
* Only os "linux" with arch amd64 or arm64 is accepted today.
* Target platform as os/arch[/variant]. Linux container guests support amd64 and
* arm64. Experimental darwin/arm64 guests require an offline-imported macOS disk
* image and vz on Apple silicon. Omit to use the cached native image or host
* platform.
*/
platform?: string;

Expand All @@ -1158,7 +1165,9 @@ export interface InstanceCreateParams {
restart_policy?: RestartPolicy;

/**
* Base memory size (human-readable format like "1GB", "512MB", "2G")
* Base memory size (human-readable format like "1GB", "512MB", "2G"). macOS guests
* default to their image's memory; explicit sizes must be at least 4 GiB in whole
* MiB and within VZ host limits.
*/
size?: string;

Expand Down Expand Up @@ -1197,7 +1206,8 @@ export interface InstanceCreateParams {
ttl?: string;

/**
* Number of virtual CPUs
* Number of virtual CPUs. macOS guests default to their image's vCPUs; explicit
* counts must be at least 2 and within VZ host limits.
*/
vcpus?: number;

Expand Down Expand Up @@ -1424,7 +1434,7 @@ export interface InstanceLogsParams {
* - vmm: Cloud Hypervisor VMM logs (hypervisor stdout+stderr)
* - hypeman: Hypeman operations log (actions taken on this instance)
*/
source?: 'app' | 'vmm' | 'hypeman';
source?: 'app' | 'vmm' | 'hypeman' | 'swtpm';

/**
* Number of lines to return from end
Expand Down
26 changes: 24 additions & 2 deletions src/resources/resources.ts
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,9 @@ export interface DiskBreakdown {
*/
export interface GPUProfile {
/**
* Number of instances that can be created with this profile
* Number of additional instances of this profile the host can take if only this
* profile is added. Counts for different profiles are not additive: an instance of
* one profile can reduce availability of others on the same GPU.
*/
available: number;

Expand All @@ -86,18 +88,31 @@ export interface GPUProfile {
* GPU resource status. Null if no GPUs available.
*/
export interface GPUResourceStatus {
/**
* Free slots eligible for placement, matching admission control (excludes
* quarantined VFs; 0 while VF health state is unavailable)
*/
allocatable_slots: number;

/**
* GPU mode (vgpu for SR-IOV/mdev, passthrough for whole GPU)
*/
mode: 'vgpu' | 'passthrough';

/**
* VFs quarantined after guest driver init failures (vGPU mode only). May overlap
* used_slots until the affected instance releases its VF.
*/
quarantined_slots: number;

/**
* Total slots (VFs for vGPU, physical GPUs for passthrough)
*/
total_slots: number;

/**
* Slots currently in use
* Slots currently in use. Includes quarantined VFs that are still assigned, so
* this can overlap quarantined_slots.
*/
used_slots: number;

Expand All @@ -106,6 +121,13 @@ export interface GPUResourceStatus {
*/
devices?: Array<PassthroughDevice>;

/**
* Present when allocatable_slots is 0 because the VF health state could not be
* read or written rather than because the host is full. vGPU placement is refused
* until the state file is repaired or the next write succeeds.
*/
placement_disabled_reason?: string;

/**
* Available vGPU profiles (only in vGPU mode)
*/
Expand Down
2 changes: 1 addition & 1 deletion src/version.ts
Original file line number Diff line number Diff line change
@@ -1 +1 @@
export const VERSION = '0.28.0'; // x-release-please-version
export const VERSION = '0.29.0'; // x-release-please-version
Loading