{error}
{/if}{#if notice}{notice}
{/if} {#if loading}Loading host…
{:else if host} {#if host.decommission}{hostDeletionMessage(host)}
{#if host.decommission.error}{host.decommission.error}
{/if}Requested {new Date(host.decommission.requestedAt).toLocaleString()}. This page closes only after the cleanup worker confirms removal.
{#if host.decommission.stage === 'cleaned'}The agent is expected to go offline during uninstall. If final confirmation never arrives, inspect the machine; loss of contact alone does not prove completion.
{/if}Connected and ready. Each deployment also checks its latest game files, runtime, and ports.
{/if} - {#if canManage && !cleaning}{/if} -Draining blocks new deployments and migrates empty instances to other hosts with capacity. The host disables when migration is complete and it is empty. Enabling refreshes the runtime and verifies BO1 and BO2 game files before returning the host to the capacity pool.
+ {#if host.readiness !== 'ready' && tab !== 'setup'}{/if}Allowances update from observed container usage. Hosts reserve 5% CPU and 500 MB of memory. Startup and running usage are tracked separately.
+{host.inventory.instanceResourcesError}
{/if} + {#if calibration.startup.source === 'bootstrap' || calibration.running.source === 'bootstrap'}Use agent 1.4.6 or later for resource sampling. Measurements arrive with agent heartbeats and are combined into one peak sample per container per minute. The first five minutes after a container starts count toward startup; later measurements count toward running. Temporary allowances stay in use until enough measurements are available.
{/if} + {#key host.id}Current instances on this host, including any that are starting or unavailable.
@@ -84,35 +114,31 @@No instances are currently deployed on this host.
{/if}Allowances update from observed container usage. Hosts reserve 5% CPU and 500 MB of memory. Startup and running usage are tracked separately.
-{host.inventory.instanceResourcesError}
{/if} - {#if calibration.startup.source === 'bootstrap' || calibration.running.source === 'bootstrap'}Use agent 1.4.6 or later for resource sampling. Measurements arrive with agent heartbeats and are combined into one peak sample per container per minute. The first five minutes after a container starts count toward startup; later measurements count toward running. Temporary allowances stay in use until enough measurements are available.
{/if} - {#key host.id}Host configuration is managed by administrators.
{/if}Public addressing is separate from local port reservations. Configure your firewall and NAT for the game-port range.
This is the last reported update status. The host is offline.
{/if} {#if host.inventory.agentUpdate?.error}{host.inventory.agentUpdate.error}
{/if} {#if host.enrolled}{hostAgentUpdateMessage(host.inventory)}
{:else}The installer enables automatic updates when this host first enrolls.
{/if} - {#if host.enrolled && !hostAgentUpdatesEnabled(host.inventory)}{canManage ? 'Generate an installer under Agent access below, run it on this host, and wait for a fresh heartbeat. The installer preserves the existing host identity and game data.' : 'An administrator can generate an installer under Agent access and run it on this host.'}
{:else if hostAgentUpdatesEnabled(host.inventory)}The host checks this controller about every five minutes. Updates replace agent code between operations; running game containers continue.
{/if} + {#if host.enrolled && !hostAgentUpdatesEnabled(host.inventory)}{canManage ? 'Generate an installer under Agent access in Settings, run it on this host, and wait for a fresh heartbeat. The installer preserves the existing host identity and game data.' : 'An administrator can generate an installer under Agent access and run it on this host.'}
{:else if hostAgentUpdatesEnabled(host.inventory)}The host checks this controller about every five minutes. Updates replace agent code between operations; running game containers continue.
{/if}No cached game libraries reported yet.
{/if} +No cached game libraries reported yet.
{/if}Cached images: {host.inventory.runtimeImages?.join(', ') || 'None reported yet'}
{#if canManage}The configured default runtime is prepared automatically. Use this to prepare another image or retry a pull now.
Credentials: {host.credentialActive ? 'Active' : 'Not active'}. Enrollment links expire after 15 minutes and work once.
{#if canManage} +Draining blocks new deployments and migrates empty instances to other hosts with capacity. The host disables when migration is complete and it is empty. Enabling refreshes the runtime and verifies BO1 and BO2 game files before returning the host to the capacity pool.
Host configuration is managed by administrators.
{/if}Public addressing is separate from local port reservations. Configure your firewall and NAT for the game-port range.
Credentials: {host.credentialActive ? 'Active' : 'Not active'}. Enrollment links expire after 15 minutes and work once.
{#if canManage} {#if enrollment}Expires {new Date(enrollment.expiresAt).toLocaleString()}
{enrollment.command}{/if}{:else}Administrators manage enrollment and agent credentials.
{/if} -