|
|
|
|
|
""" |
|
|
Antigravity VS Code IDE Launcher - Dark Theme |
|
|
Launches the actual Antigravity VS Code IDE with agents support |
|
|
""" |
|
|
|
|
|
from http.server import HTTPServer, BaseHTTPRequestHandler |
|
|
import subprocess |
|
|
import sys |
|
|
import os |
|
|
import json |
|
|
from urllib.parse import parse_qs |
|
|
import threading |
|
|
import time |
|
|
|
|
|
vscode_process = None |
|
|
|
|
|
class AntigravityHandler(BaseHTTPRequestHandler): |
|
|
def do_GET(self): |
|
|
if self.path == '/': |
|
|
self.send_response(200) |
|
|
self.send_header('Content-type', 'text/html') |
|
|
self.end_headers() |
|
|
|
|
|
|
|
|
try: |
|
|
result = subprocess.run(['antigravity', '--version'], |
|
|
capture_output=True, text=True, timeout=5) |
|
|
antigravity_status = "โ
Installed" if result.returncode == 0 else "โ Not Available" |
|
|
antigravity_version = result.stdout.strip() if result.returncode == 0 else "Error" |
|
|
except Exception as e: |
|
|
antigravity_status = "โ Error" |
|
|
antigravity_version = str(e) |
|
|
|
|
|
|
|
|
try: |
|
|
system_info = subprocess.run(['uname', '-a'], capture_output=True, text=True) |
|
|
system_details = system_info.stdout |
|
|
except: |
|
|
system_details = "System info unavailable" |
|
|
|
|
|
html = f""" |
|
|
<!DOCTYPE html> |
|
|
<html> |
|
|
<head> |
|
|
<title>Antigravity VS Code IDE</title> |
|
|
<style> |
|
|
body {{ |
|
|
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; |
|
|
margin: 0; |
|
|
padding: 20px; |
|
|
background: linear-gradient(135deg, #0d1117 0%, #161b22 100%); |
|
|
color: #e6edf3; |
|
|
min-height: 100vh; |
|
|
}} |
|
|
.container {{ |
|
|
background: #0d1117; |
|
|
color: #e6edf3; |
|
|
padding: 30px; |
|
|
border-radius: 15px; |
|
|
box-shadow: 0 10px 30px rgba(0,0,0,0.5); |
|
|
max-width: 1200px; |
|
|
margin: 0 auto; |
|
|
border: 1px solid #30363d; |
|
|
}} |
|
|
.header {{ |
|
|
text-align: center; |
|
|
margin-bottom: 30px; |
|
|
padding-bottom: 20px; |
|
|
border-bottom: 2px solid #1f6feb; |
|
|
}} |
|
|
.header h1 {{ |
|
|
color: #1f6feb; |
|
|
margin: 0; |
|
|
font-size: 2.5em; |
|
|
text-shadow: 0 0 10px rgba(31, 111, 235, 0.3); |
|
|
}} |
|
|
.vscode-badge {{ |
|
|
background: #1f6feb; |
|
|
color: #0d1117; |
|
|
padding: 8px 20px; |
|
|
border-radius: 25px; |
|
|
font-size: 0.9em; |
|
|
display: inline-block; |
|
|
margin: 10px 0; |
|
|
font-weight: bold; |
|
|
}} |
|
|
.grid {{ |
|
|
display: grid; |
|
|
grid-template-columns: repeat(auto-fit, minmax(350px, 1fr)); |
|
|
gap: 20px; |
|
|
margin: 30px 0; |
|
|
}} |
|
|
.card {{ |
|
|
background: #161b22; |
|
|
padding: 25px; |
|
|
border-radius: 12px; |
|
|
border-left: 5px solid #1f6feb; |
|
|
box-shadow: 0 4px 8px rgba(0,0,0,0.3); |
|
|
border: 1px solid #30363d; |
|
|
}} |
|
|
.card h3 {{ |
|
|
color: #58a6ff; |
|
|
margin-top: 0; |
|
|
font-size: 1.3em; |
|
|
}} |
|
|
.button {{ |
|
|
background: #1f6feb; |
|
|
color: #0d1117; |
|
|
padding: 12px 24px; |
|
|
border: none; |
|
|
border-radius: 8px; |
|
|
font-size: 1em; |
|
|
cursor: pointer; |
|
|
text-decoration: none; |
|
|
display: inline-block; |
|
|
margin: 8px 8px 8px 0; |
|
|
transition: all 0.3s; |
|
|
font-weight: bold; |
|
|
}} |
|
|
.button:hover {{ |
|
|
background: #388bfd; |
|
|
transform: translateY(-2px); |
|
|
}} |
|
|
.button.green {{ |
|
|
background: #3fb950; |
|
|
}} |
|
|
.button.green:hover {{ |
|
|
background: #56d364; |
|
|
transform: translateY(-2px); |
|
|
}} |
|
|
.button.orange {{ |
|
|
background: #fb8500; |
|
|
}} |
|
|
.button.orange:hover {{ |
|
|
background: #ffa947; |
|
|
transform: translateY(-2px); |
|
|
}} |
|
|
.button.red {{ |
|
|
background: #f85149; |
|
|
}} |
|
|
.button.red:hover {{ |
|
|
background: #ff7b72; |
|
|
transform: translateY(-2px); |
|
|
}} |
|
|
.button:disabled {{ |
|
|
opacity: 0.5; |
|
|
cursor: not-allowed; |
|
|
}} |
|
|
.status {{ |
|
|
padding: 15px; |
|
|
border-radius: 8px; |
|
|
margin: 15px 0; |
|
|
font-weight: bold; |
|
|
}} |
|
|
.success {{ |
|
|
background: rgba(63, 185, 80, 0.15); |
|
|
color: #3fb950; |
|
|
border: 1px solid #3fb950; |
|
|
}} |
|
|
.warning {{ |
|
|
background: rgba(251, 133, 0, 0.15); |
|
|
color: #fb8500; |
|
|
border: 1px solid #fb8500; |
|
|
}} |
|
|
.error {{ |
|
|
background: rgba(248, 81, 73, 0.15); |
|
|
color: #f85149; |
|
|
border: 1px solid #f85149; |
|
|
}} |
|
|
.pre {{ |
|
|
background: #0d1117; |
|
|
color: #79c0ff; |
|
|
padding: 15px; |
|
|
border-radius: 8px; |
|
|
overflow-x: auto; |
|
|
font-family: 'Courier New', monospace; |
|
|
margin: 10px 0; |
|
|
border: 1px solid #30363d; |
|
|
}} |
|
|
.terminal {{ |
|
|
background: #0d1117; |
|
|
color: #39ff14; |
|
|
padding: 15px; |
|
|
border-radius: 8px; |
|
|
font-family: 'Courier New', monospace; |
|
|
margin: 10px 0; |
|
|
border: 2px solid #1f6feb; |
|
|
}} |
|
|
.command-box {{ |
|
|
background: #0d1117; |
|
|
color: #79c0ff; |
|
|
border: 1px solid #30363d; |
|
|
padding: 12px; |
|
|
border-radius: 8px; |
|
|
margin: 10px 0; |
|
|
font-family: 'Courier New', monospace; |
|
|
}} |
|
|
</style> |
|
|
</head> |
|
|
<body> |
|
|
<div class="container"> |
|
|
<div class="header"> |
|
|
<h1>โก Antigravity VS Code IDE</h1> |
|
|
<div class="vscode-badge">Agents + Code Editor</div> |
|
|
<p>Professional development environment with Antigravity agents</p> |
|
|
</div> |
|
|
|
|
|
<div class="grid"> |
|
|
<div class="card"> |
|
|
<h3>๐ System Status</h3> |
|
|
<div class="status {'success' if antigravity_status == 'โ
Installed' else 'warning'}"> |
|
|
Antigravity: {antigravity_status} |
|
|
</div> |
|
|
<div><strong>Version:</strong> {antigravity_version}</div> |
|
|
<div><strong>Python:</strong> {sys.version.split()[0]}</div> |
|
|
<div><strong>Platform:</strong> {sys.platform}</div> |
|
|
<div><strong>Working Dir:</strong> {os.getcwd()}</div> |
|
|
</div> |
|
|
|
|
|
<div class="card"> |
|
|
<h3>๐ Launch IDE</h3> |
|
|
<p>Start Antigravity VS Code:</p> |
|
|
<button onclick="launchIDE()" class="button green" style="width: 100%; margin-top: 10px;"> |
|
|
โถ๏ธ Launch Antigravity IDE |
|
|
</button> |
|
|
<button onclick="launchAgents()" class="button orange" style="width: 100%; margin-top: 10px;"> |
|
|
๐ค Launch Agents |
|
|
</button> |
|
|
<button onclick="launchChat()" class="button" style="width: 100%; margin-top: 10px;"> |
|
|
๐ฌ AI Chat |
|
|
</button> |
|
|
</div> |
|
|
|
|
|
<div class="card"> |
|
|
<h3>๐ Available Commands</h3> |
|
|
<div class="pre" style="font-size: 12px;">antigravity --serve-web |
|
|
antigravity chat |
|
|
antigravity agents |
|
|
antigravity --list-extensions |
|
|
antigravity --help</div> |
|
|
</div> |
|
|
|
|
|
<div class="card"> |
|
|
<h3>๐ฅ๏ธ System Details</h3> |
|
|
<div class="terminal" style="font-size: 12px;">{system_details}</div> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
<div class="card" style="margin-top: 20px;"> |
|
|
<h3>โก Antigravity Agents</h3> |
|
|
<p>Use AI-powered agents to code, debug, and create:</p> |
|
|
<div class="command-box">$ antigravity agents</div> |
|
|
<p style="color: #8b949e; font-size: 14px;">Agents enable autonomous code generation, testing, and debugging with natural language commands.</p> |
|
|
</div> |
|
|
|
|
|
<div class="card" style="margin-top: 20px;"> |
|
|
<h3>๐ Quick Start</h3> |
|
|
<ol style="color: #e6edf3;"> |
|
|
<li>Click <strong>"Launch Antigravity IDE"</strong> to open VS Code</li> |
|
|
<li>Use <strong>"Launch Agents"</strong> to enable AI-powered coding</li> |
|
|
<li>Type your requirements in natural language</li> |
|
|
<li>Agents will generate and execute code automatically</li> |
|
|
<li>Use AI Chat for questions and assistance</li> |
|
|
</ol> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
<script> |
|
|
function launchIDE() {{ |
|
|
fetch('/launch-ide', {{ method: 'POST' }}) |
|
|
.then(r => r.json()) |
|
|
.then(d => {{ |
|
|
if (d.success) {{ |
|
|
alert('โ
Antigravity VS Code IDE launched!\\n\\nCheck the terminal or open http://localhost:8000'); |
|
|
}} else {{ |
|
|
alert('โ Error: ' + d.error); |
|
|
}} |
|
|
}}) |
|
|
.catch(e => alert('Error: ' + e)); |
|
|
}} |
|
|
|
|
|
function launchAgents() {{ |
|
|
fetch('/launch-agents', {{ method: 'POST' }}) |
|
|
.then(r => r.json()) |
|
|
.then(d => {{ |
|
|
if (d.success) {{ |
|
|
alert('โ
Antigravity Agents launched!\\n\\n' + d.message); |
|
|
}} else {{ |
|
|
alert('โ Error: ' + d.error); |
|
|
}} |
|
|
}}) |
|
|
.catch(e => alert('Error: ' + e)); |
|
|
}} |
|
|
|
|
|
function launchChat() {{ |
|
|
fetch('/launch-chat', {{ method: 'POST' }}) |
|
|
.then(r => r.json()) |
|
|
.then(d => {{ |
|
|
if (d.success) {{ |
|
|
alert('โ
AI Chat launched!\\n\\n' + d.message); |
|
|
}} else {{ |
|
|
alert('โ Error: ' + d.error); |
|
|
}} |
|
|
}}) |
|
|
.catch(e => alert('Error: ' + e)); |
|
|
}} |
|
|
</script> |
|
|
</body> |
|
|
</html> |
|
|
""" |
|
|
|
|
|
self.wfile.write(html.encode()) |
|
|
|
|
|
elif self.path == '/api/status': |
|
|
self.send_response(200) |
|
|
self.send_header('Content-type', 'application/json') |
|
|
self.end_headers() |
|
|
|
|
|
status_data = { |
|
|
'service': 'Antigravity VS Code Sandbox', |
|
|
'status': 'running', |
|
|
'antigravity_available': antigravity_status == 'Available', |
|
|
'features': [ |
|
|
'VS Code CLI', |
|
|
'File Management', |
|
|
'Extensions', |
|
|
'Web Interface', |
|
|
'AI Assistant', |
|
|
'Development Tools' |
|
|
], |
|
|
'quick_commands': [ |
|
|
'antigravity --serve-web', |
|
|
'antigravity chat', |
|
|
'antigravity --version', |
|
|
'antigravity --diff', |
|
|
'antigravity --list-extensions' |
|
|
] |
|
|
} |
|
|
self.wfile.write(json.dumps(status_data).encode()) |
|
|
else: |
|
|
self.send_response(404) |
|
|
self.end_headers() |
|
|
|
|
|
def log_message(self, format, *args): |
|
|
print(f"[Antigravity VS Code] {format % args}") |
|
|
|
|
|
def do_POST(self): |
|
|
global vscode_process |
|
|
|
|
|
if self.path == '/launch-ide': |
|
|
self.send_response(200) |
|
|
self.send_header('Content-type', 'application/json') |
|
|
self.end_headers() |
|
|
|
|
|
try: |
|
|
|
|
|
if vscode_process is None or vscode_process.poll() is not None: |
|
|
vscode_process = subprocess.Popen( |
|
|
['antigravity', '--serve-web'], |
|
|
stdout=subprocess.PIPE, |
|
|
stderr=subprocess.PIPE |
|
|
) |
|
|
time.sleep(2) |
|
|
|
|
|
response = { |
|
|
'success': True, |
|
|
'message': 'Antigravity VS Code IDE launched on http://localhost:8000' |
|
|
} |
|
|
except Exception as e: |
|
|
response = { |
|
|
'success': False, |
|
|
'error': str(e) |
|
|
} |
|
|
|
|
|
self.wfile.write(json.dumps(response).encode()) |
|
|
|
|
|
elif self.path == '/launch-agents': |
|
|
self.send_response(200) |
|
|
self.send_header('Content-type', 'application/json') |
|
|
self.end_headers() |
|
|
|
|
|
try: |
|
|
result = subprocess.run(['antigravity', 'agents'], |
|
|
capture_output=True, text=True, timeout=3) |
|
|
response = { |
|
|
'success': True, |
|
|
'message': 'Antigravity Agents activated!\n' + result.stdout |
|
|
} |
|
|
except Exception as e: |
|
|
response = { |
|
|
'success': False, |
|
|
'error': str(e) |
|
|
} |
|
|
|
|
|
self.wfile.write(json.dumps(response).encode()) |
|
|
|
|
|
elif self.path == '/launch-chat': |
|
|
self.send_response(200) |
|
|
self.send_header('Content-type', 'application/json') |
|
|
self.end_headers() |
|
|
|
|
|
try: |
|
|
result = subprocess.run(['antigravity', 'chat'], |
|
|
capture_output=True, text=True, timeout=3) |
|
|
response = { |
|
|
'success': True, |
|
|
'message': 'AI Chat opened!\n' + result.stdout |
|
|
} |
|
|
except Exception as e: |
|
|
response = { |
|
|
'success': False, |
|
|
'error': str(e) |
|
|
} |
|
|
|
|
|
self.wfile.write(json.dumps(response).encode()) |
|
|
|
|
|
else: |
|
|
self.send_response(404) |
|
|
self.end_headers() |
|
|
|
|
|
def main(): |
|
|
port = int(os.environ.get('PORT', 7860)) |
|
|
server = HTTPServer(('0.0.0.0', port), AntigravityHandler) |
|
|
print(f"๐ Antigravity VS Code Sandbox running on port {port}") |
|
|
print(f"๐ Access at: http://localhost:{port}") |
|
|
print(f"๐ VS Code features available via antigravity commands") |
|
|
try: |
|
|
server.serve_forever() |
|
|
except KeyboardInterrupt: |
|
|
print("\nShutting down Antigravity VS Code Sandbox...") |
|
|
server.shutdown() |
|
|
|
|
|
if __name__ == '__main__': |
|
|
main() |
|
|
|