Merge pull request #210 from IrvanFza/feat/version-display

feat: display version prominently in CLI banner and WebUI navbar
This commit is contained in:
Badri Narayanan S
2026-02-01 16:14:40 +05:30
committed by GitHub
5 changed files with 42 additions and 20 deletions

View File

@@ -1,6 +1,6 @@
{ {
"name": "antigravity-claude-proxy", "name": "antigravity-claude-proxy",
"version": "1.2.6", "version": "2.4.2",
"description": "Proxy server to use Antigravity's Claude models with Claude Code CLI", "description": "Proxy server to use Antigravity's Claude models with Claude Code CLI",
"main": "src/index.js", "main": "src/index.js",
"type": "module", "type": "module",

View File

@@ -77,8 +77,12 @@
<div class="flex flex-col"> <div class="flex flex-col">
<span class="text-sm font-bold tracking-wide text-white" <span class="text-sm font-bold tracking-wide text-white"
x-text="$store.global.t('systemName')">ANTIGRAVITY</span> x-text="$store.global.t('systemName')">ANTIGRAVITY</span>
<span class="text-[10px] text-gray-500 font-mono tracking-wider" <div class="flex items-center gap-1.5">
x-text="$store.global.t('systemDesc')">CLAUDE PROXY SYSTEM</span> <span class="text-[10px] text-gray-500 font-mono tracking-wider"
x-text="$store.global.t('systemDesc')">CLAUDE PROXY SYSTEM</span>
<span class="text-[10px] text-gray-500 font-mono tracking-wider"
x-text="'v' + $store.global.version">v1.0.0</span>
</div>
</div> </div>
</div> </div>
@@ -211,11 +215,15 @@
</nav> </nav>
<!-- Footer Info --> <!-- Footer Info -->
<div class="mt-auto px-6 text-[10px] text-gray-700 font-mono"> <div class="mt-auto px-6 text-xs text-gray-400 font-mono">
<div class="flex justify-between"> <div class="flex justify-center">
<span x-text="'V ' + $store.global.version">V 1.0.0</span>
<a href="https://github.com/badri-s2001/antigravity-claude-proxy" target="_blank" rel="noopener noreferrer" <a href="https://github.com/badri-s2001/antigravity-claude-proxy" target="_blank" rel="noopener noreferrer"
class="hover:text-neon-purple transition-colors" x-text="$store.global.t('github')">GitHub</a> class="flex items-center gap-1.5 hover:text-neon-purple transition-colors">
<svg class="w-4 h-4" fill="currentColor" viewBox="0 0 24 24">
<path d="M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z"/>
</svg>
<span x-text="$store.global.t('github')">GitHub</span>
</a>
</div> </div>
</div> </div>
</div> </div>

View File

@@ -8,9 +8,12 @@ import { DEFAULT_PORT } from './constants.js';
import { logger } from './utils/logger.js'; import { logger } from './utils/logger.js';
import { config } from './config.js'; import { config } from './config.js';
import { getStrategyLabel, STRATEGY_NAMES, DEFAULT_STRATEGY } from './account-manager/strategies/index.js'; import { getStrategyLabel, STRATEGY_NAMES, DEFAULT_STRATEGY } from './account-manager/strategies/index.js';
import { getPackageVersion } from './utils/helpers.js';
import path from 'path'; import path from 'path';
import os from 'os'; import os from 'os';
const packageVersion = getPackageVersion();
// Parse command line arguments // Parse command line arguments
const args = process.argv.slice(2); const args = process.argv.slice(2);
const isDebug = args.includes('--debug') || process.env.DEBUG === 'true'; const isDebug = args.includes('--debug') || process.env.DEBUG === 'true';
@@ -100,7 +103,7 @@ const server = app.listen(PORT, HOST, () => {
logger.log(` logger.log(`
╔══════════════════════════════════════════════════════════════╗ ╔══════════════════════════════════════════════════════════════╗
║ Antigravity Claude Proxy Server Antigravity Claude Proxy Server v${packageVersion}
╠══════════════════════════════════════════════════════════════╣ ╠══════════════════════════════════════════════════════════════╣
║ ║ ║ ║
${border} ${align(`Server and WebUI running at: http://${HOST === '0.0.0.0' ? 'localhost' : HOST}:${PORT}`)}${border} ${border} ${align(`Server and WebUI running at: http://${HOST === '0.0.0.0' ? 'localhost' : HOST}:${PORT}`)}${border}

View File

@@ -1,9 +1,30 @@
import { readFileSync } from 'fs';
import { fileURLToPath } from 'url';
import path from 'path';
/** /**
* Shared Utility Functions * Shared Utility Functions
* *
* General-purpose helper functions used across multiple modules. * General-purpose helper functions used across multiple modules.
*/ */
/**
* Get the package version from package.json
* @param {string} [defaultVersion='1.0.0'] - Default version if package.json cannot be read
* @returns {string} The package version
*/
export function getPackageVersion(defaultVersion = '1.0.0') {
try {
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const packageJsonPath = path.join(__dirname, '../../package.json');
const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf8'));
return packageJson.version || defaultVersion;
} catch {
return defaultVersion;
}
}
/** /**
* Format duration in milliseconds to human-readable string * Format duration in milliseconds to human-readable string
* @param {number} ms - Duration in milliseconds * @param {number} ms - Duration in milliseconds

View File

@@ -13,8 +13,6 @@
*/ */
import path from 'path'; import path from 'path';
import { readFileSync } from 'fs';
import { fileURLToPath } from 'url';
import express from 'express'; import express from 'express';
import { getPublicConfig, saveConfig, config } from '../config.js'; import { getPublicConfig, saveConfig, config } from '../config.js';
import { DEFAULT_PORT, ACCOUNT_CONFIG_PATH, MAX_ACCOUNTS } from '../constants.js'; import { DEFAULT_PORT, ACCOUNT_CONFIG_PATH, MAX_ACCOUNTS } from '../constants.js';
@@ -22,18 +20,10 @@ import { readClaudeConfig, updateClaudeConfig, replaceClaudeConfig, getClaudeCon
import { logger } from '../utils/logger.js'; import { logger } from '../utils/logger.js';
import { getAuthorizationUrl, completeOAuthFlow, startCallbackServer } from '../auth/oauth.js'; import { getAuthorizationUrl, completeOAuthFlow, startCallbackServer } from '../auth/oauth.js';
import { loadAccounts, saveAccounts } from '../account-manager/storage.js'; import { loadAccounts, saveAccounts } from '../account-manager/storage.js';
import { getPackageVersion } from '../utils/helpers.js';
// Get package version // Get package version
const __filename = fileURLToPath(import.meta.url); const packageVersion = getPackageVersion();
const __dirname = path.dirname(__filename);
let packageVersion = '1.0.0';
try {
const packageJsonPath = path.join(__dirname, '../../package.json');
const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf8'));
packageVersion = packageJson.version;
} catch (error) {
logger.warn('[WebUI] Could not read package.json version, using default');
}
// OAuth state storage (state -> { server, verifier, state, timestamp }) // OAuth state storage (state -> { server, verifier, state, timestamp })
// Maps state ID to active OAuth flow data // Maps state ID to active OAuth flow data