refactor(bridge): migrate gravity bridge to pure websocket gateway architecture, deleting legacy local file scanners and dependencies
This commit is contained in:
@@ -120,15 +120,6 @@ function detectProjectName() {
|
||||
return 'default';
|
||||
}
|
||||
// ─── Bridge File I/O ───
|
||||
function ensureBridgeDir() {
|
||||
const dirs = ['', 'response', 'commands', 'chat_snapshots'];
|
||||
for (const d of dirs) {
|
||||
const p = path.join(bridgePath, d);
|
||||
if (!fs.existsSync(p)) {
|
||||
fs.mkdirSync(p, { recursive: true });
|
||||
}
|
||||
}
|
||||
}
|
||||
// Module-level activeSessionId so writeChatSnapshot can register sessions lazily
|
||||
let activeSessionId = '';
|
||||
let activeTrajectoryId = '';
|
||||
@@ -136,39 +127,16 @@ let activeTrajectoryId = '';
|
||||
const recentDiscordSentTexts = new Map();
|
||||
function writeChatSnapshot(text) {
|
||||
try {
|
||||
// WS route (preferred) — skip file write to prevent duplicate Discord delivery
|
||||
if (wsBridge && wsBridge.isConnected()) {
|
||||
wsBridge.sendChat({
|
||||
content: text,
|
||||
conversation_id: activeSessionId,
|
||||
conversation_id: (0, step_probe_1.getActiveSessionId)(),
|
||||
project_name: projectName,
|
||||
});
|
||||
logToFile(`[SNAPSHOT-WS] sent (${text.length} chars)`);
|
||||
if (activeSessionId) {
|
||||
(0, step_probe_1.writeRegistration)(activeSessionId);
|
||||
if ((0, step_probe_1.getActiveSessionId)()) {
|
||||
(0, step_probe_1.writeRegistration)((0, step_probe_1.getActiveSessionId)());
|
||||
}
|
||||
return;
|
||||
}
|
||||
// File route (fallback — only when WS is NOT connected)
|
||||
const snapshotDir = path.join(bridgePath, 'chat_snapshots');
|
||||
if (!fs.existsSync(snapshotDir)) {
|
||||
fs.mkdirSync(snapshotDir, { recursive: true });
|
||||
}
|
||||
const id = Date.now().toString();
|
||||
const data = {
|
||||
id,
|
||||
project_name: projectName,
|
||||
content: text,
|
||||
timestamp: Date.now() / 1000,
|
||||
};
|
||||
const filePath = path.join(snapshotDir, `${id}.json`);
|
||||
fs.writeFileSync(filePath, JSON.stringify(data, null, 2), 'utf-8');
|
||||
console.log(`Gravity Bridge: chat snapshot written (${text.length} chars) → ${id}.json`);
|
||||
logToFile(`[SNAPSHOT] written ${id}.json (${text.length} chars)`);
|
||||
logToFile(`[SNAPSHOT] content: ${text.substring(0, 200)}`);
|
||||
// Lazily register session → project mapping (correct because projectName is per-window)
|
||||
if (activeSessionId) {
|
||||
(0, step_probe_1.writeRegistration)(activeSessionId);
|
||||
}
|
||||
}
|
||||
catch (e) {
|
||||
@@ -177,38 +145,17 @@ function writeChatSnapshot(text) {
|
||||
}
|
||||
function writeChatSnapshotWithFiles(text, files) {
|
||||
try {
|
||||
// WS route (preferred) — skip file write to prevent duplicate Discord delivery
|
||||
if (wsBridge && wsBridge.isConnected()) {
|
||||
wsBridge.sendChat({
|
||||
content: text,
|
||||
attached_files: files,
|
||||
conversation_id: activeSessionId,
|
||||
conversation_id: (0, step_probe_1.getActiveSessionId)(),
|
||||
project_name: projectName,
|
||||
});
|
||||
logToFile(`[SNAPSHOT-WS] sent with ${files.length} files (${text.length} chars)`);
|
||||
if (activeSessionId) {
|
||||
(0, step_probe_1.writeRegistration)(activeSessionId);
|
||||
if ((0, step_probe_1.getActiveSessionId)()) {
|
||||
(0, step_probe_1.writeRegistration)((0, step_probe_1.getActiveSessionId)());
|
||||
}
|
||||
return;
|
||||
}
|
||||
// File route (fallback — only when WS is NOT connected)
|
||||
const snapshotDir = path.join(bridgePath, 'chat_snapshots');
|
||||
if (!fs.existsSync(snapshotDir)) {
|
||||
fs.mkdirSync(snapshotDir, { recursive: true });
|
||||
}
|
||||
const id = Date.now().toString();
|
||||
const data = {
|
||||
id,
|
||||
project_name: projectName,
|
||||
content: text,
|
||||
attached_files: files,
|
||||
timestamp: Date.now() / 1000,
|
||||
};
|
||||
const filePath = path.join(snapshotDir, `${id}.json`);
|
||||
fs.writeFileSync(filePath, JSON.stringify(data, null, 2), 'utf-8');
|
||||
logToFile(`[SNAPSHOT] written ${id}.json (${text.length} chars, ${files.length} files)`);
|
||||
if (activeSessionId) {
|
||||
(0, step_probe_1.writeRegistration)(activeSessionId);
|
||||
}
|
||||
}
|
||||
catch (e) {
|
||||
@@ -405,7 +352,6 @@ async function activate(context) {
|
||||
const config = vscode.workspace.getConfiguration('gravityBridge');
|
||||
const configPath = config.get('bridgePath');
|
||||
bridgePath = configPath || path.join(os.homedir(), '.gemini', 'antigravity', 'bridge');
|
||||
ensureBridgeDir();
|
||||
console.log(`Gravity Bridge: bridge path: ${bridgePath}`);
|
||||
// ── WebSocket Hub Connection ──
|
||||
const hubUrl = process.env.GRAVITY_HUB_URL || config.get('hubUrl') || '';
|
||||
@@ -541,6 +487,7 @@ async function activate(context) {
|
||||
get activeSessionId() { return (0, step_probe_1.getStepProbeContext)().activeSessionId; },
|
||||
get sessionStalled() { return (0, step_probe_1.getStepProbeContext)().sessionStalled; },
|
||||
get lastPendingStepIndex() { return (0, step_probe_1.getStepProbeContext)().lastPendingStepIndex; },
|
||||
writeChatSnapshot,
|
||||
};
|
||||
const bridgePort = await (0, http_bridge_1.startHttpBridge)(httpBridgeCtx, sdk);
|
||||
let localPort = bridgePort;
|
||||
|
||||
Reference in New Issue
Block a user