From 91b3a7ef20f6c0582f2b5dbdcf9afe9634ff021e Mon Sep 17 00:00:00 2001 From: CD Date: Sat, 7 Mar 2026 18:15:01 +0900 Subject: [PATCH] feat: LS ConnectRPC bridge for AI response relay to Discord --- extension/gravity-bridge-0.2.0.vsix | Bin 20559 -> 27637 bytes extension/out/extension.js | 244 ++++++++++++++++++++++ extension/out/extension.js.map | 2 +- extension/src/extension.ts | 301 ++++++++++++++++++++++------ 4 files changed, 484 insertions(+), 63 deletions(-) diff --git a/extension/gravity-bridge-0.2.0.vsix b/extension/gravity-bridge-0.2.0.vsix index 137f01e98d734053e66bb431ad463176c2d0413a..baac216eec5d5fd8c84bb412d29e77c919395f66 100644 GIT binary patch delta 25404 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 xcA6WueRo-e-?F#$)oP?mO}$K4xSZ^^&l0mS1d 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 BYwG|2 diff --git a/extension/out/extension.js b/extension/out/extension.js index fc3bc65..1c6241f 100644 --- a/extension/out/extension.js +++ b/extension/out/extension.js @@ -118,6 +118,250 @@ function activate(context) { context.subscriptions.push(statusBar); // Register commands context.subscriptions.push(vscode.commands.registerCommand('gravityBridge.start', startBridge), vscode.commands.registerCommand('gravityBridge.stop', stopBridge), vscode.commands.registerCommand('gravityBridge.connect', connectSession), vscode.commands.registerCommand('gravityBridge.approve', () => handleManualAction(true)), vscode.commands.registerCommand('gravityBridge.reject', () => handleManualAction(false))); + // === LS ConnectRPC Bridge: Relay AI responses to Discord === + let lsPort = null; + let lsCsrf = ''; + let lsPid = null; + let lastStepIndex = {}; // cascadeId → last known step index + async function discoverLS() { + return new Promise((resolve) => { + // Phase 1: Find LS process → PID + CSRF token + cp.exec('powershell -NoProfile -Command "Get-CimInstance Win32_Process | Where-Object {$_.Name -eq \'language_server_exe.exe\' -or ($_.CommandLine -and $_.CommandLine -like \'*language_server*\' -and $_.CommandLine -notlike \'*powershell*\')} | Select-Object ProcessId, CommandLine | ConvertTo-Json"', { maxBuffer: 2 * 1024 * 1024 }, (err, stdout) => { + if (err || !stdout.trim()) { + console.log(`Gravity Bridge: [LS] process not found`); + resolve(false); + return; + } + try { + let procs = JSON.parse(stdout.trim()); + if (!Array.isArray(procs)) { + procs = [procs]; + } + // Find a process with csrf_token in command line + for (const proc of procs) { + const cmd = proc.CommandLine || ''; + const csrfM = cmd.match(/--csrf_token[= ]([^\s"]+)/); + if (csrfM) { + lsPid = proc.ProcessId; + lsCsrf = csrfM[1]; + console.log(`Gravity Bridge: [LS] PID=${lsPid}, CSRF=${lsCsrf.substring(0, 12)}...`); + break; + } + } + } + catch (e) { + console.log(`Gravity Bridge: [LS] parse error: ${e}`); + } + if (!lsPid || !lsCsrf) { + resolve(false); + return; + } + // Phase 2: netstat → find LS listening ports + cp.exec(`netstat -ano | findstr "LISTENING" | findstr " ${lsPid}"`, { maxBuffer: 512 * 1024 }, async (err2, stdout2) => { + if (err2 || !stdout2.trim()) { + console.log(`Gravity Bridge: [LS] no listening ports found for PID ${lsPid}`); + resolve(false); + return; + } + // Parse ports + const ports = []; + for (const line of stdout2.split('\n')) { + const m = line.match(/:(\d+)\s+.*LISTENING/); + if (m) { + ports.push(parseInt(m[1])); + } + } + const uniquePorts = [...new Set(ports)].sort((a, b) => a - b); + console.log(`Gravity Bridge: [LS] ports for PID ${lsPid}: ${uniquePorts.join(', ')}`); + // Try ConnectRPC probe on each port (HTTP first, then HTTPS) + for (const port of uniquePorts) { + const ok = await probeLSPort(port); + if (ok) { + lsPort = port; + console.log(`Gravity Bridge: [LS] ✅ ConnectRPC active on port ${port}`); + resolve(true); + return; + } + } + console.log(`Gravity Bridge: [LS] no ConnectRPC port responded`); + resolve(false); + }); + }); + }); + } + function probeLSPort(port) { + return new Promise((resolve) => { + const http = require('http'); + const https = require('https'); + // Try HTTP first (extension_server uses HTTP) + const tryProto = (proto, useTls) => { + const req = proto.request({ + hostname: '127.0.0.1', + port, + path: '/exa.language_server_pb.LanguageServerService/GetTrajectoryDescriptions', + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'x-codeium-csrf-token': lsCsrf, + }, + rejectUnauthorized: false, + timeout: 2000, + }, (res) => { + let data = ''; + res.on('data', (chunk) => { data += chunk; }); + res.on('end', () => { + // Any response (even error) means ConnectRPC is here + console.log(`Gravity Bridge: [LS] port ${port} (${useTls ? 'https' : 'http'}) status=${res.statusCode} body=${data.substring(0, 200)}`); + resolve(res.statusCode !== 404); + }); + }); + req.on('error', () => { + if (!useTls) { + // Try HTTPS + tryProto(https, true); + } + else { + resolve(false); + } + }); + req.on('timeout', () => { req.destroy(); resolve(false); }); + req.write('{}'); + req.end(); + }; + tryProto(http, false); + }); + } + async function lsRPC(method, payload = {}) { + if (!lsPort || !lsCsrf) { + return null; + } + return new Promise((resolve) => { + const http = require('http'); + const https = require('https'); + const proto = lsPort > 40000 ? https : http; // heuristic + const body = JSON.stringify(payload); + const req = proto.request({ + hostname: '127.0.0.1', + port: lsPort, + path: `/exa.language_server_pb.LanguageServerService/${method}`, + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'x-codeium-csrf-token': lsCsrf, + 'Content-Length': Buffer.byteLength(body), + }, + rejectUnauthorized: false, + timeout: 5000, + }, (res) => { + let data = ''; + res.on('data', (chunk) => { data += chunk; }); + res.on('end', () => { + try { + resolve(JSON.parse(data)); + } + catch { + resolve(data); + } + }); + }); + req.on('error', (e) => { + console.log(`Gravity Bridge: [LS RPC] ${method} error: ${e.message}`); + resolve(null); + }); + req.on('timeout', () => { req.destroy(); resolve(null); }); + req.write(body); + req.end(); + }); + } + async function pollConversations() { + if (!lsPort) { + return; + } + try { + // Get trajectory descriptions — lightweight list of all conversations + const result = await lsRPC('GetTrajectoryDescriptions'); + if (!result) { + return; + } + // Debug: log structure on first call + if (Object.keys(lastStepIndex).length === 0) { + console.log(`Gravity Bridge: [LS] trajectories: ${JSON.stringify(result).substring(0, 500)}`); + } + const trajectories = result.trajectories || result.trajectory_descriptions || []; + if (!Array.isArray(trajectories)) { + return; + } + for (const traj of trajectories) { + const id = traj.googleAgentId || traj.google_agent_id || traj.id || ''; + const stepIdx = traj.lastStepIndex ?? traj.last_step_index ?? traj.step_count ?? 0; + const prev = lastStepIndex[id]; + if (prev !== undefined && stepIdx > prev) { + // New steps! Fetch full trajectory to get AI response + console.log(`Gravity Bridge: [LS] ${id.substring(0, 8)} new steps: ${prev} → ${stepIdx}`); + const full = await lsRPC('GetCascadeTrajectory', { + googleAgentId: id, + trajectoryId: traj.trajectoryId || traj.trajectory_id || '', + }); + if (full) { + extractAndRelay(full, prev, stepIdx); + } + } + lastStepIndex[id] = stepIdx; + } + } + catch (e) { + console.log(`Gravity Bridge: [LS poll] error: ${e}`); + } + } + function extractAndRelay(trajectory, fromStep, toStep) { + // Extract PlannerResponse or assistant messages from trajectory steps + const steps = trajectory.steps || trajectory.cortex_steps || []; + const messages = []; + for (const step of steps) { + const idx = step.index ?? step.step_index ?? 0; + if (idx <= fromStep) { + continue; + } + const type = step.type || step.step_type || ''; + const content = step.content || step.summary || step.text || ''; + // PlannerResponse = AI's text output to user + if ((type === 'PlannerResponse' || type === 'planner_response') && content) { + messages.push(content); + } + // Also capture user-facing messages + if (step.data?.content && typeof step.data.content === 'string') { + messages.push(step.data.content); + } + } + // Fallback: if no detailed steps, try messages array + if (messages.length === 0) { + const msgs = trajectory.messages || trajectory.chat_messages || []; + for (const msg of msgs) { + if (msg.role === 'assistant' && msg.content) { + messages.push(msg.content); + } + } + } + if (messages.length > 0) { + const combined = messages.join('\n\n---\n\n'); + writeChatSnapshot(combined); + console.log(`Gravity Bridge: [LS] relayed ${messages.length} response(s) to Discord`); + } + } + // Start LS bridge after a delay + setTimeout(async () => { + const found = await discoverLS(); + if (found) { + console.log(`Gravity Bridge: [LS] bridge active — polling every 5s`); + // Initialize step counts + await pollConversations(); + // Start polling loop + setInterval(pollConversations, 5000); + } + else { + console.log(`Gravity Bridge: [LS] bridge NOT available — AI responses won't relay`); + } + }, 8000); // Chat document change listener — captures AI text responses context.subscriptions.push(vscode.workspace.onDidChangeTextDocument((event) => { handleChatDocumentChange(event); diff --git a/extension/out/extension.js.map b/extension/out/extension.js.map index 06ffaef..93af7f4 100644 --- a/extension/out/extension.js.map +++ b/extension/out/extension.js.map @@ -1 +1 @@ -{"version":3,"file":"extension.js","sourceRoot":"","sources":["../src/extension.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"extension.js","sourceRoot":"","sources":["../src/extension.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/extension/src/extension.ts b/extension/src/extension.ts index 58bb780..4fbe971 100644 --- a/extension/src/extension.ts +++ b/extension/src/extension.ts @@ -97,79 +97,256 @@ export function activate(context: vscode.ExtensionContext) { vscode.commands.registerCommand('gravityBridge.reject', () => handleManualAction(false)), ); - // === PROBE: Find where AI conversation text lives === - setTimeout(async () => { - console.log('Gravity Bridge: === PROBE START ==='); + // === LS ConnectRPC Bridge: Relay AI responses to Discord === + let lsPort: number | null = null; + let lsCsrf: string = ''; + let lsPid: number | null = null; + let lastStepIndex: Record = {}; // cascadeId → last known step index - // Probe 1: getManagerTrace — may contain step-level data - try { - const trace: any = await vscode.commands.executeCommand('antigravity.getManagerTrace'); - console.log(`Gravity Bridge: [getManagerTrace] type=${typeof trace}`); - if (trace) { - const str = typeof trace === 'string' ? trace : JSON.stringify(trace); - console.log(` length=${str.length}`); - console.log(` sample: ${str.substring(0, 500)}`); - // If object, show keys - const parsed = typeof trace === 'string' ? JSON.parse(trace) : trace; - if (parsed && typeof parsed === 'object') { - console.log(` keys: ${Object.keys(parsed).join(', ')}`); - } - } - } catch (e) { - console.log(`Gravity Bridge: [getManagerTrace] error: ${e}`); - } - - // Probe 2: getWorkbenchTrace — may contain conversation/step data - try { - const trace: any = await vscode.commands.executeCommand('antigravity.getWorkbenchTrace'); - console.log(`Gravity Bridge: [getWorkbenchTrace] type=${typeof trace}`); - if (trace) { - const str = typeof trace === 'string' ? trace : JSON.stringify(trace); - console.log(` length=${str.length}`); - console.log(` sample: ${str.substring(0, 500)}`); - } - } catch (e) { - console.log(`Gravity Bridge: [getWorkbenchTrace] error: ${e}`); - } - - // Probe 3: Find LS process for ConnectRPC port + CSRF token - try { - const { exec } = require('child_process'); - exec( - 'powershell -Command "Get-CimInstance Win32_Process | Where-Object {$_.CommandLine -like \'*language_server*\'} | Select-Object ProcessId, CommandLine | Format-List"', - { maxBuffer: 1024 * 1024 }, - (err: any, stdout: string) => { - if (err) { - console.log(`Gravity Bridge: [LS discovery] error: ${err.message}`); + async function discoverLS(): Promise { + return new Promise((resolve) => { + // Phase 1: Find LS process → PID + CSRF token + cp.exec( + 'powershell -NoProfile -Command "Get-CimInstance Win32_Process | Where-Object {$_.Name -eq \'language_server_exe.exe\' -or ($_.CommandLine -and $_.CommandLine -like \'*language_server*\' -and $_.CommandLine -notlike \'*powershell*\')} | Select-Object ProcessId, CommandLine | ConvertTo-Json"', + { maxBuffer: 2 * 1024 * 1024 }, + (err, stdout) => { + if (err || !stdout.trim()) { + console.log(`Gravity Bridge: [LS] process not found`); + resolve(false); return; } - if (stdout.trim()) { - console.log(`Gravity Bridge: [LS process found]`); - // Extract port and csrf_token from command line - const portMatch = stdout.match(/--(?:port|httpPort|httpsPort)[= ](\d+)/); - const csrfMatch = stdout.match(/--csrf_token[= ]([^\s"]+)/); - const extPortMatch = stdout.match(/--extension_server_port[= ](\d+)/); - console.log(` port: ${portMatch?.[1] || 'not found'}`); - console.log(` csrf: ${csrfMatch?.[1]?.substring(0, 12) || 'not found'}...`); - console.log(` ext_port: ${extPortMatch?.[1] || 'not found'}`); - // Show full command line for analysis - const lines = stdout.split('\n'); - for (const line of lines) { - if (line.includes('CommandLine')) { - console.log(` cmdline: ${line.substring(0, 500)}`); + try { + let procs = JSON.parse(stdout.trim()); + if (!Array.isArray(procs)) { procs = [procs]; } + // Find a process with csrf_token in command line + for (const proc of procs) { + const cmd = proc.CommandLine || ''; + const csrfM = cmd.match(/--csrf_token[= ]([^\s"]+)/); + if (csrfM) { + lsPid = proc.ProcessId; + lsCsrf = csrfM[1]; + console.log(`Gravity Bridge: [LS] PID=${lsPid}, CSRF=${lsCsrf.substring(0, 12)}...`); + break; } } - } else { - console.log(`Gravity Bridge: [LS process] not found`); + } catch (e) { + console.log(`Gravity Bridge: [LS] parse error: ${e}`); } + + if (!lsPid || !lsCsrf) { + resolve(false); + return; + } + + // Phase 2: netstat → find LS listening ports + cp.exec( + `netstat -ano | findstr "LISTENING" | findstr " ${lsPid}"`, + { maxBuffer: 512 * 1024 }, + async (err2, stdout2) => { + if (err2 || !stdout2.trim()) { + console.log(`Gravity Bridge: [LS] no listening ports found for PID ${lsPid}`); + resolve(false); + return; + } + // Parse ports + const ports: number[] = []; + for (const line of stdout2.split('\n')) { + const m = line.match(/:(\d+)\s+.*LISTENING/); + if (m) { ports.push(parseInt(m[1])); } + } + const uniquePorts = [...new Set(ports)].sort((a, b) => a - b); + console.log(`Gravity Bridge: [LS] ports for PID ${lsPid}: ${uniquePorts.join(', ')}`); + + // Try ConnectRPC probe on each port (HTTP first, then HTTPS) + for (const port of uniquePorts) { + const ok = await probeLSPort(port); + if (ok) { + lsPort = port; + console.log(`Gravity Bridge: [LS] ✅ ConnectRPC active on port ${port}`); + resolve(true); + return; + } + } + console.log(`Gravity Bridge: [LS] no ConnectRPC port responded`); + resolve(false); + } + ); } ); + }); + } + + function probeLSPort(port: number): Promise { + return new Promise((resolve) => { + const http = require('http'); + const https = require('https'); + + // Try HTTP first (extension_server uses HTTP) + const tryProto = (proto: any, useTls: boolean) => { + const req = proto.request({ + hostname: '127.0.0.1', + port, + path: '/exa.language_server_pb.LanguageServerService/GetTrajectoryDescriptions', + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'x-codeium-csrf-token': lsCsrf, + }, + rejectUnauthorized: false, + timeout: 2000, + }, (res: any) => { + let data = ''; + res.on('data', (chunk: any) => { data += chunk; }); + res.on('end', () => { + // Any response (even error) means ConnectRPC is here + console.log(`Gravity Bridge: [LS] port ${port} (${useTls ? 'https' : 'http'}) status=${res.statusCode} body=${data.substring(0, 200)}`); + resolve(res.statusCode !== 404); + }); + }); + req.on('error', () => { + if (!useTls) { + // Try HTTPS + tryProto(https, true); + } else { + resolve(false); + } + }); + req.on('timeout', () => { req.destroy(); resolve(false); }); + req.write('{}'); + req.end(); + }; + tryProto(http, false); + }); + } + + async function lsRPC(method: string, payload: any = {}): Promise { + if (!lsPort || !lsCsrf) { return null; } + return new Promise((resolve) => { + const http = require('http'); + const https = require('https'); + const proto = lsPort! > 40000 ? https : http; // heuristic + const body = JSON.stringify(payload); + const req = proto.request({ + hostname: '127.0.0.1', + port: lsPort, + path: `/exa.language_server_pb.LanguageServerService/${method}`, + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'x-codeium-csrf-token': lsCsrf, + 'Content-Length': Buffer.byteLength(body), + }, + rejectUnauthorized: false, + timeout: 5000, + }, (res: any) => { + let data = ''; + res.on('data', (chunk: any) => { data += chunk; }); + res.on('end', () => { + try { resolve(JSON.parse(data)); } catch { resolve(data); } + }); + }); + req.on('error', (e: any) => { + console.log(`Gravity Bridge: [LS RPC] ${method} error: ${e.message}`); + resolve(null); + }); + req.on('timeout', () => { req.destroy(); resolve(null); }); + req.write(body); + req.end(); + }); + } + + async function pollConversations() { + if (!lsPort) { return; } + try { + // Get trajectory descriptions — lightweight list of all conversations + const result = await lsRPC('GetTrajectoryDescriptions'); + if (!result) { return; } + + // Debug: log structure on first call + if (Object.keys(lastStepIndex).length === 0) { + console.log(`Gravity Bridge: [LS] trajectories: ${JSON.stringify(result).substring(0, 500)}`); + } + + const trajectories = result.trajectories || result.trajectory_descriptions || []; + if (!Array.isArray(trajectories)) { return; } + + for (const traj of trajectories) { + const id = traj.googleAgentId || traj.google_agent_id || traj.id || ''; + const stepIdx = traj.lastStepIndex ?? traj.last_step_index ?? traj.step_count ?? 0; + const prev = lastStepIndex[id]; + + if (prev !== undefined && stepIdx > prev) { + // New steps! Fetch full trajectory to get AI response + console.log(`Gravity Bridge: [LS] ${id.substring(0, 8)} new steps: ${prev} → ${stepIdx}`); + const full = await lsRPC('GetCascadeTrajectory', { + googleAgentId: id, + trajectoryId: traj.trajectoryId || traj.trajectory_id || '', + }); + + if (full) { + extractAndRelay(full, prev, stepIdx); + } + } + lastStepIndex[id] = stepIdx; + } } catch (e) { - console.log(`Gravity Bridge: [LS discovery] error: ${e}`); + console.log(`Gravity Bridge: [LS poll] error: ${e}`); + } + } + + function extractAndRelay(trajectory: any, fromStep: number, toStep: number) { + // Extract PlannerResponse or assistant messages from trajectory steps + const steps = trajectory.steps || trajectory.cortex_steps || []; + const messages: string[] = []; + + for (const step of steps) { + const idx = step.index ?? step.step_index ?? 0; + if (idx <= fromStep) { continue; } + + const type = step.type || step.step_type || ''; + const content = step.content || step.summary || step.text || ''; + + // PlannerResponse = AI's text output to user + if ((type === 'PlannerResponse' || type === 'planner_response') && content) { + messages.push(content); + } + // Also capture user-facing messages + if (step.data?.content && typeof step.data.content === 'string') { + messages.push(step.data.content); + } } - console.log('Gravity Bridge: === PROBE END ==='); - }, 5000); + // Fallback: if no detailed steps, try messages array + if (messages.length === 0) { + const msgs = trajectory.messages || trajectory.chat_messages || []; + for (const msg of msgs) { + if (msg.role === 'assistant' && msg.content) { + messages.push(msg.content); + } + } + } + + if (messages.length > 0) { + const combined = messages.join('\n\n---\n\n'); + writeChatSnapshot(combined); + console.log(`Gravity Bridge: [LS] relayed ${messages.length} response(s) to Discord`); + } + } + + // Start LS bridge after a delay + setTimeout(async () => { + const found = await discoverLS(); + if (found) { + console.log(`Gravity Bridge: [LS] bridge active — polling every 5s`); + // Initialize step counts + await pollConversations(); + // Start polling loop + setInterval(pollConversations, 5000); + } else { + console.log(`Gravity Bridge: [LS] bridge NOT available — AI responses won't relay`); + } + }, 8000); + // Chat document change listener — captures AI text responses context.subscriptions.push(