108 lines
4.9 KiB
JavaScript
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');
|
|
}
|
|
});
|