Files
antigravity-claude-proxy/src/index.js
2026-01-03 18:01:21 +05:30

108 lines
4.9 KiB
JavaScript

/**
* Antigravity Claude Proxy
* Entry point - starts the proxy server
*/
import app from './server.js';
import { DEFAULT_PORT } from './constants.js';
import { logger } from './utils/logger.js';
import path from 'path';
import os from 'os';
// Parse command line arguments
const args = process.argv.slice(2);
const isDebug = args.includes('--debug') || process.env.DEBUG === 'true';
const isFallbackEnabled = args.includes('--fallback') || process.env.FALLBACK === 'true';
// Initialize logger
logger.setDebug(isDebug);
if (isDebug) {
logger.debug('Debug mode enabled');
}
if (isFallbackEnabled) {
logger.info('Model fallback mode enabled');
}
// Export fallback flag for server to use
export const FALLBACK_ENABLED = isFallbackEnabled;
const PORT = process.env.PORT || DEFAULT_PORT;
// Home directory for account storage
const HOME_DIR = os.homedir();
const CONFIG_DIR = path.join(HOME_DIR, '.antigravity-claude-proxy');
app.listen(PORT, () => {
// Clear console for a clean start
console.clear();
const border = '║';
// align for 2-space indent (60 chars), align4 for 4-space indent (58 chars)
const align = (text) => text + ' '.repeat(Math.max(0, 60 - text.length));
const align4 = (text) => text + ' '.repeat(Math.max(0, 58 - text.length));
// Build Control section dynamically
let controlSection = '║ Control: ║\n';
if (!isDebug) {
controlSection += '║ --debug Enable debug logging ║\n';
}
if (!isFallbackEnabled) {
controlSection += '║ --fallback Enable model fallback on quota exhaust ║\n';
}
controlSection += '║ Ctrl+C Stop server ║';
// Build status section if any modes are active
let statusSection = '';
if (isDebug || isFallbackEnabled) {
statusSection = '║ ║\n';
statusSection += '║ Active Modes: ║\n';
if (isDebug) {
statusSection += '║ ✓ Debug mode enabled ║\n';
}
if (isFallbackEnabled) {
statusSection += '║ ✓ Model fallback enabled ║\n';
}
}
logger.log(`
╔══════════════════════════════════════════════════════════════╗
║ Antigravity Claude Proxy Server ║
╠══════════════════════════════════════════════════════════════╣
║ ║
${border} ${align(`Server running at: http://localhost:${PORT}`)}${border}
${statusSection}║ ║
${controlSection}
║ ║
║ Endpoints: ║
║ POST /v1/messages - Anthropic Messages API ║
║ GET /v1/models - List available models ║
║ GET /health - Health check ║
║ GET /account-limits - Account status & quotas ║
║ POST /refresh-token - Force token refresh ║
║ ║
${border} ${align(`Configuration:`)}${border}
${border} ${align4(`Storage: ${CONFIG_DIR}`)}${border}
║ ║
║ Usage with Claude Code: ║
${border} ${align4(`export ANTHROPIC_BASE_URL=http://localhost:${PORT}`)}${border}
║ export ANTHROPIC_API_KEY=dummy ║
║ claude ║
║ ║
║ Add Google accounts: ║
║ npm run accounts ║
║ ║
║ Prerequisites (if no accounts configured): ║
║ - Antigravity must be running ║
║ - Have a chat panel open in Antigravity ║
║ ║
╚══════════════════════════════════════════════════════════════╝
`);
logger.success(`Server started successfully on port ${PORT}`);
if (isDebug) {
logger.warn('Running in DEBUG mode - verbose logs enabled');
}
});