fix(panel): real auto-updating version + remove fake agent footer; rename companion -> Corrosion host agent
All checks were successful
Build Host Agent / build (push) Successful in 28s
Test Asgard Runner / test (push) Successful in 3s

Version badge: was hardcoded '1.0.8' — now single-sourced from frontend/package.json (1.0.0) via Vite define __APP_VERSION__, so it auto-updates on release. Sidebar agent footer: removed the FABRICATED 'asgard-01' host name and the fake 'Agent v1.0.8' line — now shows real server.connection data, or an honest 'No host agent connected' empty state when nothing is deployed (the operator's actual state). Renamed 'Companion agent' -> 'Corrosion host agent' across the UI (ServerView/SetupWizard/Dashboard/Plugins), the binary names (corrosion-host-agent-<os>-<arch>) + CDN path (/host-agent/), the Go Makefile build output, and the Gitea CI workflow — frontend download links and CI output now match. Marketing hero mock host names neutralized (asgard-01 -> rust-host/dune-host/conan-host). DB column names (companion_last_seen) left intact. Build green; zero 'asgard'/'1.0.8' remain in frontend/src.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Vantz Stockwell
2026-06-11 09:03:37 -04:00
parent 23decd9b08
commit 180631989a
11 changed files with 103 additions and 72 deletions

View File

@@ -1,4 +1,4 @@
name: Build Companion Agent name: Build Host Agent
on: on:
push: push:
@@ -26,19 +26,19 @@ jobs:
run: | run: |
cd companion-agent cd companion-agent
mkdir -p bin mkdir -p bin
GOOS=linux GOARCH=amd64 go build -ldflags "-s -w -X main.version=${{ steps.version.outputs.VERSION }}" -o bin/corrosion-companion-linux-amd64 ./cmd/agent GOOS=linux GOARCH=amd64 go build -ldflags "-s -w -X main.version=${{ steps.version.outputs.VERSION }}" -o bin/corrosion-host-agent-linux-amd64 ./cmd/agent
chmod +x bin/corrosion-companion-linux-amd64 chmod +x bin/corrosion-host-agent-linux-amd64
- name: Build Windows AMD64 - name: Build Windows AMD64
run: | run: |
cd companion-agent cd companion-agent
GOOS=windows GOARCH=amd64 go build -ldflags "-s -w -X main.version=${{ steps.version.outputs.VERSION }}" -o bin/corrosion-companion-windows-amd64.exe ./cmd/agent GOOS=windows GOARCH=amd64 go build -ldflags "-s -w -X main.version=${{ steps.version.outputs.VERSION }}" -o bin/corrosion-host-agent-windows-amd64.exe ./cmd/agent
- name: Generate checksums - name: Generate checksums
run: | run: |
cd companion-agent/bin cd companion-agent/bin
sha256sum corrosion-companion-linux-amd64 > checksums.txt sha256sum corrosion-host-agent-linux-amd64 > checksums.txt
sha256sum corrosion-companion-windows-amd64.exe >> checksums.txt sha256sum corrosion-host-agent-windows-amd64.exe >> checksums.txt
cat checksums.txt cat checksums.txt
- name: Create Release - name: Create Release
@@ -53,7 +53,7 @@ jobs:
RESPONSE=$(curl -s -X POST \ RESPONSE=$(curl -s -X POST \
-H "Authorization: token ${RELEASE_TOKEN}" \ -H "Authorization: token ${RELEASE_TOKEN}" \
-H "Content-Type: application/json" \ -H "Content-Type: application/json" \
-d "{\"tag_name\": \"${VERSION}\", \"name\": \"Companion Agent ${VERSION}\", \"body\": \"Companion Agent release ${VERSION}\", \"draft\": false, \"prerelease\": false}" \ -d "{\"tag_name\": \"${VERSION}\", \"name\": \"Corrosion Host Agent ${VERSION}\", \"body\": \"Corrosion Host Agent release ${VERSION}\", \"draft\": false, \"prerelease\": false}" \
"${API_URL}/repos/${REPO}/releases") "${API_URL}/repos/${REPO}/releases")
RELEASE_ID=$(echo "$RESPONSE" | grep -o '"id":[0-9]*' | head -1 | grep -o '[0-9]*') RELEASE_ID=$(echo "$RESPONSE" | grep -o '"id":[0-9]*' | head -1 | grep -o '[0-9]*')
@@ -68,15 +68,15 @@ jobs:
curl -s -X POST \ curl -s -X POST \
-H "Authorization: token ${RELEASE_TOKEN}" \ -H "Authorization: token ${RELEASE_TOKEN}" \
-H "Content-Type: application/octet-stream" \ -H "Content-Type: application/octet-stream" \
--data-binary @companion-agent/bin/corrosion-companion-linux-amd64 \ --data-binary @companion-agent/bin/corrosion-host-agent-linux-amd64 \
"${API_URL}/repos/${REPO}/releases/${RELEASE_ID}/assets?name=corrosion-companion-linux-amd64" "${API_URL}/repos/${REPO}/releases/${RELEASE_ID}/assets?name=corrosion-host-agent-linux-amd64"
# Upload Windows binary # Upload Windows binary
curl -s -X POST \ curl -s -X POST \
-H "Authorization: token ${RELEASE_TOKEN}" \ -H "Authorization: token ${RELEASE_TOKEN}" \
-H "Content-Type: application/octet-stream" \ -H "Content-Type: application/octet-stream" \
--data-binary @companion-agent/bin/corrosion-companion-windows-amd64.exe \ --data-binary @companion-agent/bin/corrosion-host-agent-windows-amd64.exe \
"${API_URL}/repos/${REPO}/releases/${RELEASE_ID}/assets?name=corrosion-companion-windows-amd64.exe" "${API_URL}/repos/${REPO}/releases/${RELEASE_ID}/assets?name=corrosion-host-agent-windows-amd64.exe"
# Upload checksums # Upload checksums
curl -s -X POST \ curl -s -X POST \
@@ -89,43 +89,43 @@ jobs:
run: | run: |
CDN_URL="https://cdn.corrosionmgmt.com" CDN_URL="https://cdn.corrosionmgmt.com"
# Upload Linux binary to /companion/latest/ # Upload Linux binary to /host-agent/latest/
curl -s -X POST \ curl -s -X POST \
-F "file=@companion-agent/bin/corrosion-companion-linux-amd64" \ -F "file=@companion-agent/bin/corrosion-host-agent-linux-amd64" \
"${CDN_URL}/companion/latest/corrosion-companion-linux-amd64" "${CDN_URL}/host-agent/latest/corrosion-host-agent-linux-amd64"
# Upload Windows binary to /companion/latest/ # Upload Windows binary to /host-agent/latest/
curl -s -X POST \ curl -s -X POST \
-F "file=@companion-agent/bin/corrosion-companion-windows-amd64.exe" \ -F "file=@companion-agent/bin/corrosion-host-agent-windows-amd64.exe" \
"${CDN_URL}/companion/latest/corrosion-companion-windows-amd64.exe" "${CDN_URL}/host-agent/latest/corrosion-host-agent-windows-amd64.exe"
# Upload checksums # Upload checksums
curl -s -X POST \ curl -s -X POST \
-F "file=@companion-agent/bin/checksums.txt" \ -F "file=@companion-agent/bin/checksums.txt" \
"${CDN_URL}/companion/latest/checksums.txt" "${CDN_URL}/host-agent/latest/checksums.txt"
# Also upload versioned copies # Also upload versioned copies
VERSION=${{ steps.version.outputs.VERSION }} VERSION=${{ steps.version.outputs.VERSION }}
curl -s -X POST \ curl -s -X POST \
-F "file=@companion-agent/bin/corrosion-companion-linux-amd64" \ -F "file=@companion-agent/bin/corrosion-host-agent-linux-amd64" \
"${CDN_URL}/companion/${VERSION}/corrosion-companion-linux-amd64" "${CDN_URL}/host-agent/${VERSION}/corrosion-host-agent-linux-amd64"
curl -s -X POST \ curl -s -X POST \
-F "file=@companion-agent/bin/corrosion-companion-windows-amd64.exe" \ -F "file=@companion-agent/bin/corrosion-host-agent-windows-amd64.exe" \
"${CDN_URL}/companion/${VERSION}/corrosion-companion-windows-amd64.exe" "${CDN_URL}/host-agent/${VERSION}/corrosion-host-agent-windows-amd64.exe"
curl -s -X POST \ curl -s -X POST \
-F "file=@companion-agent/bin/checksums.txt" \ -F "file=@companion-agent/bin/checksums.txt" \
"${CDN_URL}/companion/${VERSION}/checksums.txt" "${CDN_URL}/host-agent/${VERSION}/checksums.txt"
echo "CDN upload complete: ${CDN_URL}/companion/latest/" echo "CDN upload complete: ${CDN_URL}/host-agent/latest/"
- name: Build Summary - name: Build Summary
run: | run: |
echo "## Companion Agent Build Complete" >> $GITHUB_STEP_SUMMARY echo "## Corrosion Host Agent Build Complete" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY
echo "**Version:** ${{ steps.version.outputs.VERSION }}" >> $GITHUB_STEP_SUMMARY echo "**Version:** ${{ steps.version.outputs.VERSION }}" >> $GITHUB_STEP_SUMMARY
echo "**Commit:** ${GITHUB_SHA:0:7}" >> $GITHUB_STEP_SUMMARY echo "**Commit:** ${GITHUB_SHA:0:7}" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY
echo "### Built Artifacts:" >> $GITHUB_STEP_SUMMARY echo "### Built Artifacts:" >> $GITHUB_STEP_SUMMARY
echo "- Linux AMD64 ($(stat -c%s companion-agent/bin/corrosion-companion-linux-amd64) bytes)" >> $GITHUB_STEP_SUMMARY echo "- Linux AMD64 ($(stat -c%s companion-agent/bin/corrosion-host-agent-linux-amd64) bytes)" >> $GITHUB_STEP_SUMMARY
echo "- Windows AMD64 ($(stat -c%s companion-agent/bin/corrosion-companion-windows-amd64.exe) bytes)" >> $GITHUB_STEP_SUMMARY echo "- Windows AMD64 ($(stat -c%s companion-agent/bin/corrosion-host-agent-windows-amd64.exe) bytes)" >> $GITHUB_STEP_SUMMARY
echo "- SHA256 checksums" >> $GITHUB_STEP_SUMMARY echo "- SHA256 checksums" >> $GITHUB_STEP_SUMMARY

View File

@@ -1,7 +1,7 @@
.PHONY: all build build-linux build-windows clean test run .PHONY: all build build-linux build-windows clean test run
# Binary names # Binary names
BINARY_NAME=corrosion-companion BINARY_NAME=corrosion-host-agent
BINARY_LINUX=$(BINARY_NAME)-linux-amd64 BINARY_LINUX=$(BINARY_NAME)-linux-amd64
BINARY_WINDOWS=$(BINARY_NAME)-windows-amd64.exe BINARY_WINDOWS=$(BINARY_NAME)-windows-amd64.exe
@@ -66,10 +66,10 @@ run: build-local
install-service: install-service:
@echo "Installing systemd service..." @echo "Installing systemd service..."
@sudo cp $(BUILD_DIR)/$(BINARY_LINUX) /usr/local/bin/$(BINARY_NAME) @sudo cp $(BUILD_DIR)/$(BINARY_LINUX) /usr/local/bin/$(BINARY_NAME)
@sudo cp deployment/corrosion-companion.service /etc/systemd/system/ @sudo cp deployment/corrosion-host-agent.service /etc/systemd/system/
@sudo systemctl daemon-reload @sudo systemctl daemon-reload
@sudo systemctl enable corrosion-companion @sudo systemctl enable corrosion-host-agent
@echo "Service installed. Configure /etc/corrosion-companion/.env then start with: sudo systemctl start corrosion-companion" @echo "Service installed. Configure /etc/corrosion-host-agent/.env then start with: sudo systemctl start corrosion-host-agent"
# Development helpers # Development helpers
dev: build-local dev: build-local

View File

@@ -1,7 +1,7 @@
{ {
"name": "frontend", "name": "frontend",
"private": true, "private": true,
"version": "0.0.0", "version": "1.0.0",
"type": "module", "type": "module",
"scripts": { "scripts": {
"dev": "vite", "dev": "vite",

1
frontend/src/app-version.d.ts vendored Normal file
View File

@@ -0,0 +1 @@
declare const __APP_VERSION__: string

View File

@@ -13,6 +13,7 @@ import { useServerStore } from '@/stores/server'
import { useThemeGame } from '@/composables/useThemeGame' import { useThemeGame } from '@/composables/useThemeGame'
import { useGameProfile } from '@/config/gameProfiles' import { useGameProfile } from '@/config/gameProfiles'
import type { NavSection, NavItemDef } from '@/config/gameProfiles' import type { NavSection, NavItemDef } from '@/config/gameProfiles'
import { safeDate } from '@/utils/formatters'
import Logo from '@/components/ds/brand/Logo.vue' import Logo from '@/components/ds/brand/Logo.vue'
import Badge from '@/components/ds/core/Badge.vue' import Badge from '@/components/ds/core/Badge.vue'
import StatusDot from '@/components/ds/core/StatusDot.vue' import StatusDot from '@/components/ds/core/StatusDot.vue'
@@ -36,7 +37,7 @@ const sidebarOpen = ref(false)
function closeSidebar() { sidebarOpen.value = false } function closeSidebar() { sidebarOpen.value = false }
// ---- App version ---- // ---- App version ----
const APP_VERSION = '1.0.8' const APP_VERSION = __APP_VERSION__
// ---- Game switcher ---- // ---- Game switcher ----
const GAME_OPTIONS: GameOption[] = [ const GAME_OPTIONS: GameOption[] = [
@@ -94,6 +95,8 @@ function hasVisibleItems(section: NavSection): boolean {
} }
// ---- Agent health ---- // ---- Agent health ----
const hasAgent = computed(() => server.connection !== null)
const agentTone = computed(() => { const agentTone = computed(() => {
const cs = server.connection?.connection_status const cs = server.connection?.connection_status
if (cs === 'connected') return 'online' as const if (cs === 'connected') return 'online' as const
@@ -106,9 +109,17 @@ const agentLabel = computed(() => {
if (cs === 'degraded') return 'Degraded' if (cs === 'degraded') return 'Degraded'
return 'Offline' return 'Offline'
}) })
const agentName = computed(() => { const agentName = computed(() => server.connection?.server_ip ?? 'Host agent')
const ip = server.connection?.server_ip
return ip ?? 'asgard-01' const agentMetaLine = computed(() => {
const cs = server.connection?.connection_status
let line = cs === 'connected' ? 'Connected' : server.connection?.companion_last_seen
? `Last seen ${safeDate(server.connection.companion_last_seen)}`
: 'Awaiting first heartbeat'
if (server.stats) {
line += ` · ${server.stats.player_count}/${server.stats.max_players} players`
}
return line
}) })
// ---- Topbar ---- // ---- Topbar ----
@@ -184,18 +195,24 @@ const themeIcon = computed(() => theme.value === 'dark' ? 'sun' : 'moon')
</div> </div>
</nav> </nav>
<!-- Agent health footer --> <!-- Host agent footer -->
<div class="side__foot"> <div class="side__foot">
<div class="agent"> <!-- Connected: real IP + status badge + meta line -->
<div v-if="hasAgent" class="agent">
<div class="agent__row"> <div class="agent__row">
<StatusDot :tone="agentTone" :pulse="agentTone === 'online'" /> <StatusDot :tone="agentTone" :pulse="agentTone === 'online'" />
<span class="agent__name">{{ agentName }}</span> <span class="agent__name">{{ agentName }}</span>
<Badge :tone="agentTone" size="md">{{ agentLabel }}</Badge> <Badge :tone="agentTone" size="md">{{ agentLabel }}</Badge>
</div> </div>
<div class="agent__meta"> <div class="agent__meta">{{ agentMetaLine }}</div>
Agent v{{ APP_VERSION }} </div>
<template v-if="server.stats"> · {{ server.stats.player_count }}/{{ server.stats.max_players }} players</template> <!-- Not connected: honest empty state -->
<div v-else class="agent agent--empty">
<div class="agent__row">
<StatusDot tone="offline" />
<span class="agent__name agent__name--muted">No host agent connected</span>
</div> </div>
<div class="agent__meta">Install the Corrosion host agent from the Server page</div>
</div> </div>
<!-- User / logout row --> <!-- User / logout row -->
<div class="side__user"> <div class="side__user">
@@ -373,6 +390,13 @@ body { margin: 0; overflow: hidden; }
padding-left: 16px; padding-left: 16px;
} }
.agent--empty { opacity: 0.7; }
.agent__name--muted {
color: var(--text-tertiary);
font-style: italic;
}
.side__user { .side__user {
display: flex; display: flex;
align-items: center; align-items: center;

View File

@@ -259,7 +259,7 @@ function navServer() { router.push('/server') }
<EmptyState <EmptyState
icon="server" icon="server"
title="No server connected" title="No server connected"
description="Install the companion agent on your host machine to begin managing your server from Corrosion." description="Install the Corrosion host agent on your host machine to begin managing your server from Corrosion."
> >
<template #action> <template #action>
<Button icon="server" @click="navServer">Set up server</Button> <Button icon="server" @click="navServer">Set up server</Button>
@@ -404,7 +404,7 @@ function navServer() { router.push('/server') }
<div class="dash__col dash__col--side"> <div class="dash__col dash__col--side">
<!-- Resources real stats from agent; null = '—' --> <!-- Resources real stats from agent; null = '—' -->
<Panel title="Resources" subtitle="Companion agent telemetry"> <Panel title="Resources" subtitle="Host agent telemetry">
<div class="solo-meters"> <div class="solo-meters">
<ResourceMeter <ResourceMeter
label="CPU" label="CPU"
@@ -418,7 +418,7 @@ function navServer() { router.push('/server') }
/> />
</div> </div>
<div v-if="soloCpu === null && soloRamMb === null" class="meters-note"> <div v-if="soloCpu === null && soloRamMb === null" class="meters-note">
Resource metrics arrive via the companion agent heartbeat. Resource metrics arrive via the host agent heartbeat.
<Button size="sm" variant="ghost" icon="server" class="meters-cta" @click="navServer"> <Button size="sm" variant="ghost" icon="server" class="meters-cta" @click="navServer">
Agent setup Agent setup
</Button> </Button>

View File

@@ -485,7 +485,7 @@ onMounted(() => {
</Panel> </Panel>
<Alert tone="info"> <Alert tone="info">
The plugin will be registered in your plugin list immediately. Your companion agent must be connected The plugin will be registered in your plugin list immediately. Your host agent must be connected
for the file to be delivered to the game server. If the agent is offline, re-upload once it reconnects. for the file to be delivered to the game server. If the agent is offline, re-upload once it reconnects.
</Alert> </Alert>
</div> </div>

View File

@@ -100,22 +100,22 @@ const agentLastSeenLabel = computed(() => {
const licenseKey = computed(() => auth.license?.license_key || 'YOUR-LICENSE-KEY') const licenseKey = computed(() => auth.license?.license_key || 'YOUR-LICENSE-KEY')
const linuxCommands = computed(() => `# Download the agent const linuxCommands = computed(() => `# Download the agent
curl -LO https://cdn.corrosionmgmt.com/companion/latest/corrosion-companion-linux-amd64 curl -LO https://cdn.corrosionmgmt.com/host-agent/latest/corrosion-host-agent-linux-amd64
chmod +x corrosion-companion-linux-amd64 chmod +x corrosion-host-agent-linux-amd64
# Start with your license key # Start with your license key
export LICENSE_ID="${licenseKey.value}" export LICENSE_ID="${licenseKey.value}"
export NATS_URL="nats://nats.corrosionmgmt.com:4222" export NATS_URL="nats://nats.corrosionmgmt.com:4222"
./corrosion-companion-linux-amd64`) ./corrosion-host-agent-linux-amd64`)
const windowsCommands = computed(() => `# Requires PowerShell (not Command Prompt) const windowsCommands = computed(() => `# Requires PowerShell (not Command Prompt)
# Download the agent # Download the agent
Invoke-WebRequest -Uri "https://cdn.corrosionmgmt.com/companion/latest/corrosion-companion-windows-amd64.exe" -OutFile "corrosion-companion-windows-amd64.exe" Invoke-WebRequest -Uri "https://cdn.corrosionmgmt.com/host-agent/latest/corrosion-host-agent-windows-amd64.exe" -OutFile "corrosion-host-agent-windows-amd64.exe"
# Start with your license key # Start with your license key
$env:LICENSE_ID="${licenseKey.value}" $env:LICENSE_ID="${licenseKey.value}"
$env:NATS_URL="nats://nats.corrosionmgmt.com:4222" $env:NATS_URL="nats://nats.corrosionmgmt.com:4222"
.\\corrosion-companion-windows-amd64.exe`) .\\corrosion-host-agent-windows-amd64.exe`)
async function copySetupCommands() { async function copySetupCommands() {
try { try {
@@ -387,8 +387,8 @@ onMounted(async () => {
</div> </div>
</Panel> </Panel>
<!-- Companion agent --> <!-- Host agent -->
<Panel title="Companion agent" subtitle="Bare-metal server management binary"> <Panel title="Host agent" subtitle="Bare-metal server management binary">
<template #actions> <template #actions>
<Badge :tone="isAgentConnected ? 'online' : 'offline'" :dot="true" :pulse="isAgentConnected"> <Badge :tone="isAgentConnected ? 'online' : 'offline'" :dot="true" :pulse="isAgentConnected">
{{ isAgentConnected ? 'Active' : 'Inactive' }} {{ isAgentConnected ? 'Active' : 'Inactive' }}
@@ -417,20 +417,20 @@ onMounted(async () => {
<!-- Download --> <!-- Download -->
<div class="sv__section-head"> <div class="sv__section-head">
<Icon name="download" :size="14" /> <Icon name="download" :size="14" />
<span>Download companion agent</span> <span>Download host agent</span>
</div> </div>
<div class="sv__downloads sv__mb"> <div class="sv__downloads sv__mb">
<a <a
href="https://cdn.corrosionmgmt.com/companion/latest/corrosion-companion-linux-amd64" href="https://cdn.corrosionmgmt.com/host-agent/latest/corrosion-host-agent-linux-amd64"
download="corrosion-companion-linux-amd64" download="corrosion-host-agent-linux-amd64"
class="sv__dl-link" class="sv__dl-link"
> >
<Icon name="download" :size="15" /> <Icon name="download" :size="15" />
Linux (amd64) Linux (amd64)
</a> </a>
<a <a
href="https://cdn.corrosionmgmt.com/companion/latest/corrosion-companion-windows-amd64.exe" href="https://cdn.corrosionmgmt.com/host-agent/latest/corrosion-host-agent-windows-amd64.exe"
download="corrosion-companion-windows-amd64.exe" download="corrosion-host-agent-windows-amd64.exe"
class="sv__dl-link" class="sv__dl-link"
> >
<Icon name="download" :size="15" /> <Icon name="download" :size="15" />
@@ -461,23 +461,23 @@ onMounted(async () => {
<!-- Linux commands --> <!-- Linux commands -->
<div v-if="setupTab === 'linux'" class="sv__codeblock"> <div v-if="setupTab === 'linux'" class="sv__codeblock">
<p class="sv__cmt"># Download the agent</p> <p class="sv__cmt"># Download the agent</p>
<p>curl -LO https://cdn.corrosionmgmt.com/companion/latest/corrosion-companion-linux-amd64</p> <p>curl -LO https://cdn.corrosionmgmt.com/host-agent/latest/corrosion-host-agent-linux-amd64</p>
<p>chmod +x corrosion-companion-linux-amd64</p> <p>chmod +x corrosion-host-agent-linux-amd64</p>
<p class="sv__cmt sv__mt">&#x23; Start with your license key</p> <p class="sv__cmt sv__mt">&#x23; Start with your license key</p>
<p>export LICENSE_ID=<span class="sv__accent">"{{ licenseKey }}"</span></p> <p>export LICENSE_ID=<span class="sv__accent">"{{ licenseKey }}"</span></p>
<p>export NATS_URL=<span class="sv__accent">"nats://nats.corrosionmgmt.com:4222"</span></p> <p>export NATS_URL=<span class="sv__accent">"nats://nats.corrosionmgmt.com:4222"</span></p>
<p>./corrosion-companion-linux-amd64</p> <p>./corrosion-host-agent-linux-amd64</p>
</div> </div>
<!-- Windows commands --> <!-- Windows commands -->
<div v-if="setupTab === 'windows'" class="sv__codeblock"> <div v-if="setupTab === 'windows'" class="sv__codeblock">
<p class="sv__cmt"># Requires PowerShell (not Command Prompt)</p> <p class="sv__cmt"># Requires PowerShell (not Command Prompt)</p>
<p class="sv__cmt"># Download the agent</p> <p class="sv__cmt"># Download the agent</p>
<p>Invoke-WebRequest -Uri <span class="sv__accent">"https://cdn.corrosionmgmt.com/companion/latest/corrosion-companion-windows-amd64.exe"</span> -OutFile <span class="sv__accent">"corrosion-companion-windows-amd64.exe"</span></p> <p>Invoke-WebRequest -Uri <span class="sv__accent">"https://cdn.corrosionmgmt.com/host-agent/latest/corrosion-host-agent-windows-amd64.exe"</span> -OutFile <span class="sv__accent">"corrosion-host-agent-windows-amd64.exe"</span></p>
<p class="sv__cmt sv__mt">&#x23; Start with your license key</p> <p class="sv__cmt sv__mt">&#x23; Start with your license key</p>
<p>$env:LICENSE_ID=<span class="sv__accent">"{{ licenseKey }}"</span></p> <p>$env:LICENSE_ID=<span class="sv__accent">"{{ licenseKey }}"</span></p>
<p>$env:NATS_URL=<span class="sv__accent">"nats://nats.corrosionmgmt.com:4222"</span></p> <p>$env:NATS_URL=<span class="sv__accent">"nats://nats.corrosionmgmt.com:4222"</span></p>
<p>.\corrosion-companion-windows-amd64.exe</p> <p>.\corrosion-host-agent-windows-amd64.exe</p>
</div> </div>
</Panel> </Panel>
@@ -609,7 +609,7 @@ onMounted(async () => {
<EmptyState <EmptyState
icon="box" icon="box"
title="Docker-managed deployment" title="Docker-managed deployment"
:description="profile.label + ' servers are managed via Docker Compose. Connect the companion agent on your Docker host to enable lifecycle management.'" :description="profile.label + ' servers are managed via Docker Compose. Connect the host agent on your Docker host to enable lifecycle management.'"
> >
<template #action> <template #action>
<Badge tone="info">Docker · Compose</Badge> <Badge tone="info">Docker · Compose</Badge>
@@ -724,7 +724,7 @@ onMounted(async () => {
<EmptyState <EmptyState
icon="network" icon="network"
title="Cluster management coming soon" title="Cluster management coming soon"
:description="'Connect a ' + profile.label + ' host to manage the main-client cluster from this panel. Cluster configuration requires the companion agent.'" :description="'Connect a ' + profile.label + ' host to manage the main-client cluster from this panel. Cluster configuration requires the host agent.'"
/> />
</Panel> </Panel>
@@ -737,7 +737,7 @@ onMounted(async () => {
<EmptyState <EmptyState
icon="map" icon="map"
title="Sietch management requires a connected Dune host" title="Sietch management requires a connected Dune host"
description="Connect the companion agent on your Dune: Awakening Docker host to manage BattleGroups and Sietches from this panel." description="Connect the host agent on your Dune: Awakening Docker host to manage BattleGroups and Sietches from this panel."
/> />
</Panel> </Panel>

View File

@@ -35,7 +35,7 @@ function syncPorts() {
} }
const connectionTypes = [ const connectionTypes = [
{ value: 'bare_metal', label: 'Bare metal / VPS', desc: 'Direct connection via Companion Agent' }, { value: 'bare_metal', label: 'Bare metal / VPS', desc: 'Direct connection via Corrosion host agent' },
{ value: 'amp', label: 'AMP (CubeCoders)', desc: 'Connect through AMP panel API' }, { value: 'amp', label: 'AMP (CubeCoders)', desc: 'Connect through AMP panel API' },
{ value: 'pterodactyl', label: 'Pterodactyl', desc: 'Connect through Pterodactyl panel API' }, { value: 'pterodactyl', label: 'Pterodactyl', desc: 'Connect through Pterodactyl panel API' },
] ]
@@ -183,7 +183,7 @@ async function completeSetup() {
</form> </form>
</div> </div>
<!-- Step 2: Companion agent install --> <!-- Step 2: Corrosion host agent install -->
<div v-if="step === 2" class="setup-card"> <div v-if="step === 2" class="setup-card">
<div class="setup-card__head setup-card__head--center"> <div class="setup-card__head setup-card__head--center">
<div class="setup-icon"> <div class="setup-icon">
@@ -191,12 +191,12 @@ async function completeSetup() {
<path d="M5 12.55a11 11 0 0 1 14.08 0M1.42 9a16 16 0 0 1 21.16 0M8.53 16.11a6 6 0 0 1 6.95 0M12 20h.01" /> <path d="M5 12.55a11 11 0 0 1 14.08 0M1.42 9a16 16 0 0 1 21.16 0M8.53 16.11a6 6 0 0 1 6.95 0M12 20h.01" />
</svg> </svg>
</div> </div>
<h1 class="setup-card__title">Install the Companion Agent</h1> <h1 class="setup-card__title">Install the Corrosion host agent</h1>
<p class="setup-card__sub">The agent runs on your server and connects to Corrosion — no inbound ports required.</p> <p class="setup-card__sub">The agent runs on your server and connects to Corrosion — no inbound ports required.</p>
</div> </div>
<div class="setup-code"> <div class="setup-code">
<p class="setup-code__comment"># Download and install the Companion Agent</p> <p class="setup-code__comment"># Download and install the Corrosion host agent</p>
<p class="setup-code__cmd">curl -sSL https://get.corrosionmgmt.com | sh</p> <p class="setup-code__cmd">curl -sSL https://get.corrosionmgmt.com | sh</p>
<p class="setup-code__comment setup-code__comment--mt"># Start the agent with your license key</p> <p class="setup-code__comment setup-code__comment--mt"># Start the agent with your license key</p>
<p class="setup-code__cmd">corrosion-agent start --key {{ auth.license?.license_key ?? 'YOUR-LICENSE-KEY' }}</p> <p class="setup-code__cmd">corrosion-agent start --key {{ auth.license?.license_key ?? 'YOUR-LICENSE-KEY' }}</p>

View File

@@ -185,7 +185,7 @@ const mockActiveGame = activeGame
<span class="g"><Icon name="box" :size="13" /></span> <span class="g"><Icon name="box" :size="13" /></span>
<span class="nm"> <span class="nm">
Main · 2x Vanilla Main · 2x Vanilla
<small>asgard-01 · rust</small> <small>rust-host · rust</small>
</span> </span>
<span class="st"><b />online</span> <span class="st"><b />online</span>
</div> </div>
@@ -193,7 +193,7 @@ const mockActiveGame = activeGame
<span class="g"><Icon name="sun" :size="13" /></span> <span class="g"><Icon name="sun" :size="13" /></span>
<span class="nm"> <span class="nm">
Arrakis · Hardcore Arrakis · Hardcore
<small>asgard-01 · dune</small> <small>dune-host · dune</small>
</span> </span>
<span class="st"><b />online</span> <span class="st"><b />online</span>
</div> </div>
@@ -201,7 +201,7 @@ const mockActiveGame = activeGame
<span class="g"><Icon name="swords" :size="13" /></span> <span class="g"><Icon name="swords" :size="13" /></span>
<span class="nm"> <span class="nm">
Exiled Lands · PvP-C Exiled Lands · PvP-C
<small>asgard-02 · conan</small> <small>conan-host · conan</small>
</span> </span>
<span class="st"><b />online</span> <span class="st"><b />online</span>
</div> </div>

View File

@@ -2,12 +2,18 @@ import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue' import vue from '@vitejs/plugin-vue'
import tailwindcss from '@tailwindcss/vite' import tailwindcss from '@tailwindcss/vite'
import { fileURLToPath, URL } from 'node:url' import { fileURLToPath, URL } from 'node:url'
import { readFileSync } from 'node:fs'
const pkg = JSON.parse(readFileSync(new URL('./package.json', import.meta.url), 'utf-8'))
export default defineConfig({ export default defineConfig({
plugins: [ plugins: [
vue(), vue(),
tailwindcss(), tailwindcss(),
], ],
define: {
__APP_VERSION__: JSON.stringify(pkg.version),
},
resolve: { resolve: {
alias: { alias: {
'@': fileURLToPath(new URL('./src', import.meta.url)), '@': fileURLToPath(new URL('./src', import.meta.url)),