diff --git a/package.json b/package.json
index ad4e3b9..8caa388 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"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",
"main": "src/index.js",
"type": "module",
diff --git a/public/index.html b/public/index.html
index ea8cf41..6cfa50a 100644
--- a/public/index.html
+++ b/public/index.html
@@ -77,8 +77,12 @@
-
-
V 1.0.0
+
+
GitHub
+ class="flex items-center gap-1.5 hover:text-neon-purple transition-colors">
+
+
GitHub
+
diff --git a/src/index.js b/src/index.js
index ec60504..6ec3be8 100644
--- a/src/index.js
+++ b/src/index.js
@@ -8,9 +8,12 @@ import { DEFAULT_PORT } from './constants.js';
import { logger } from './utils/logger.js';
import { config } from './config.js';
import { getStrategyLabel, STRATEGY_NAMES, DEFAULT_STRATEGY } from './account-manager/strategies/index.js';
+import { getPackageVersion } from './utils/helpers.js';
import path from 'path';
import os from 'os';
+const packageVersion = getPackageVersion();
+
// Parse command line arguments
const args = process.argv.slice(2);
const isDebug = args.includes('--debug') || process.env.DEBUG === 'true';
@@ -100,7 +103,7 @@ const server = app.listen(PORT, HOST, () => {
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}
diff --git a/src/utils/helpers.js b/src/utils/helpers.js
index b492c2a..02bdf4f 100644
--- a/src/utils/helpers.js
+++ b/src/utils/helpers.js
@@ -1,9 +1,30 @@
+import { readFileSync } from 'fs';
+import { fileURLToPath } from 'url';
+import path from 'path';
+
/**
* Shared Utility Functions
*
* 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
* @param {number} ms - Duration in milliseconds
diff --git a/src/webui/index.js b/src/webui/index.js
index dbaa09a..6f0f1a7 100644
--- a/src/webui/index.js
+++ b/src/webui/index.js
@@ -13,8 +13,6 @@
*/
import path from 'path';
-import { readFileSync } from 'fs';
-import { fileURLToPath } from 'url';
import express from 'express';
import { getPublicConfig, saveConfig, config } from '../config.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 { getAuthorizationUrl, completeOAuthFlow, startCallbackServer } from '../auth/oauth.js';
import { loadAccounts, saveAccounts } from '../account-manager/storage.js';
+import { getPackageVersion } from '../utils/helpers.js';
// Get package version
-const __filename = fileURLToPath(import.meta.url);
-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');
-}
+const packageVersion = getPackageVersion();
// OAuth state storage (state -> { server, verifier, state, timestamp })
// Maps state ID to active OAuth flow data