mirror of
https://github.com/morluto/rea.git
synced 2026-11-05 06:15:59 +00:00
Reuse selected Ghidra projects through verified private read-only copies, with shared CLI/MCP configuration, committed project identity, import-SHA verification and explicit historical/unknown analysis semantics. Preserve exact cancellation and platform capability boundaries. Actual Ghidra 12.1.4/JDK21 Linux CLI/MCP investigations matched fresh import on 652-function ls and 14,338-function libcrypto inventories and pseudocode; authenticated complete Evidence, mismatch/staleness refusal, saved historical reports and shared /tmp projects verified. 958 focused tests passed with four platform skips; build/static/docs/format passed. Real macOS/Windows reuse remains unverified; Windows reuse is unavailable. See PR verification for measured whole-task costs and final CI attribution. Co-authored-by: akushonkamen <akushonkamen@163.com> Co-authored-by: morluto <76467478+morluto@users.noreply.github.com>
59 lines
2.5 KiB
TypeScript
59 lines
2.5 KiB
TypeScript
import type { Logger } from "pino";
|
|
import type { BridgeMaxRequestBytes } from "../config/bridgeMaxRequestBytes.js";
|
|
import type { Result } from "../domain/result.js";
|
|
import type { LinuxCgroupMemoryState } from "../process/LinuxCgroupMemory.js";
|
|
import type { GhidraLauncher } from "./GhidraLauncher.js";
|
|
import type { GhidraSessionError } from "./GhidraSessionError.js";
|
|
import type { GhidraSessionInfo } from "./GhidraSessionValues.js";
|
|
import type { GhidraTransportKind } from "./GhidraTransport.js";
|
|
|
|
/** Result of opening and authenticating one headless Ghidra session. */
|
|
export type GhidraStartResult = Result<GhidraSessionInfo, GhidraSessionError>;
|
|
|
|
/** Cancellation and deadline controls shared by authenticated requests. */
|
|
export interface GhidraRequestOptions {
|
|
readonly decompileTimeoutSeconds?: number | null;
|
|
readonly signal?: AbortSignal;
|
|
/** Internal startup/shutdown deadline; analysis calls have no fixed deadline. */
|
|
readonly timeoutMs?: number;
|
|
}
|
|
|
|
/** Safe lifecycle telemetry for one isolated Ghidra headless process. */
|
|
export type GhidraDiagnostic =
|
|
| {
|
|
readonly type: "launcher-output";
|
|
readonly stream: "stdout" | "stderr";
|
|
readonly bytes: number;
|
|
readonly totalBytes: number;
|
|
}
|
|
| {
|
|
readonly type: "launcher-exit";
|
|
readonly code: number | null;
|
|
readonly signal: NodeJS.Signals | null;
|
|
}
|
|
| { readonly type: "cleanup-incomplete"; readonly reason: string };
|
|
|
|
/** Dependencies and exact profile commitment for one headless Program session. */
|
|
export interface GhidraClientOptions {
|
|
readonly launcher: GhidraLauncher;
|
|
readonly runId?: string;
|
|
readonly targetPath: string;
|
|
readonly targetSha256: string;
|
|
readonly existingProject?: boolean;
|
|
/** Installation host shared by runtime allocation and snapshot admission. */
|
|
readonly platform?: NodeJS.Platform;
|
|
readonly transport?: GhidraTransportKind;
|
|
readonly providerVersion: string;
|
|
readonly profileDigest: string;
|
|
readonly expectedLanguageId?: string;
|
|
readonly expectedCompilerSpecId?: string;
|
|
readonly startupTimeoutMs?: number;
|
|
readonly readStartupTimeoutMs?: () => number;
|
|
readonly onDiagnostic?: (event: GhidraDiagnostic) => void;
|
|
readonly logger?: Logger;
|
|
/** Observes REA's memory cgroup around a run; defaults to the Linux cgroup v2 reader. */
|
|
readonly readMemoryCgroup?: () => Promise<LinuxCgroupMemoryState | undefined>;
|
|
/** Effective request ceiling; defaults to the configured bridge ceiling. */
|
|
readonly bridgeMaxRequestBytes?: BridgeMaxRequestBytes;
|
|
}
|