UNPKG

socraticode

Version:

SocratiCode — MCP server for local codebase indexing, semantic search, and code dependency graphs. All private, all local via Docker.

41 lines • 1.83 kB
// SPDX-License-Identifier: AGPL-3.0-only // Copyright (C) 2026 Giancarlo Erra - Altaire Limited /** * Cross-platform helpers for the interactive graph viewer: * 1. Write a generated HTML document to a stable path inside the OS * temp directory (one file per project, deterministic by projectId). * 2. Open that path in the user's default browser using the `open` * package — handles macOS (`open`), Linux (`xdg-open`), and * Windows (`start`) with zero external deps. * * `open` is called with `wait: false` so the call returns immediately; * on headless Linux systems where no browser is registered the function * swallows the error and lets the caller surface the path instead. */ import fs from "node:fs/promises"; import os from "node:os"; import path from "node:path"; import open from "open"; import { logger } from "./logger.js"; /** Write HTML to a deterministic file under the OS temp dir. */ export async function writeInteractiveGraphFile(projectId, html) { const dir = path.join(os.tmpdir(), "socraticode-graph"); await fs.mkdir(dir, { recursive: true }); const file = path.join(dir, `${projectId}.html`); await fs.writeFile(file, html, "utf-8"); logger.info("Wrote interactive graph HTML", { file, bytes: html.length }); return file; } /** Open the given file path in the user's default browser (best-effort). */ export async function openInBrowser(filePath) { try { await open(filePath, { wait: false }); return { opened: true }; } catch (err) { const message = err instanceof Error ? err.message : String(err); logger.warn("Failed to open browser — user can open manually", { filePath, error: message }); return { opened: false, error: message }; } } //# sourceMappingURL=graph-visualize-browser.js.map