import type { ITtscProjectInputSnapshot } from "../../structures/internal/ITtscProjectInputSnapshot";
type InitialLSPProjectInputSnapshot = ITtscProjectInputSnapshot & {
    reloadDirectoryDigests: Readonly<Record<string, string>>;
    reloadFileDigests: Readonly<Record<string, string>>;
};
/**
 * Drive the ttscserver native binary from a node launcher. The launcher is
 * deliberately thin: argument parsing, version banners, and help text are owned
 * by the Go binary so future flags only need to change one layer. The JS side
 * performs the Node-owned setup that depends on package resolution:
 *
 * - Resolve the platform binary,
 * - Resolve the project TypeScript-Go binary for the native wrapper,
 * - Resolve the project config and materialize the private LSP plugin manifest,
 * - Inject the Node/ttsx helper paths used by disk-backed LSP sidecars,
 * - Inject `--stdio` when the first arg is not a meta-command,
 * - Delegate to the binary with inherited stdio so OS-level signals reach the
 *   child via the parent's process group.
 */
export declare function runTtscserver(argv?: readonly string[]): number;
export declare function materializeLSPPluginManifest(manifest: unknown): {
    dispose(): void;
    path: string;
};
export declare function fingerprintInitialLSPProjectInputSnapshot(snapshot: ITtscProjectInputSnapshot): InitialLSPProjectInputSnapshot;
export declare function initialLSPProjectInputSnapshotIsCurrent(snapshot: InitialLSPProjectInputSnapshot): boolean;
/**
 * `--stdio` is the only transport the native host accepts today. The launcher
 * injects it only when the first argv token looks like a forwarded option;
 * meta-commands (`-v`, `--help`, `version`, etc.) pass through untouched so the
 * Go binary owns the canonical banner. This mirrors
 * `cmd/ttscserver/main.go::run`, which dispatches on `args[0]` only.
 */
export declare function needsStdio(argv: readonly string[]): boolean;
export {};
