import type { HerdrSemanticState } from "./semantic.js"; /** * Herdr pane environment exported into managed pane processes: * HERDR_ENV=1, HERDR_PANE_ID, HERDR_SOCKET_PATH, HERDR_BIN_PATH. * See herdr.dev/docs/socket-api. */ export interface HerdrEnv { /** True only when OMX is running inside a Herdr-managed pane. */ enabled: boolean; paneId: string | null; socketPath: string | null; binPath: string | null; } export declare function detectHerdrEnv(env?: NodeJS.ProcessEnv): HerdrEnv; export interface HerdrAgentReport { paneId: string; source: string; agent: string; state: HerdrSemanticState; message?: string; seq: number; metadata?: Record; } export interface HerdrReleaseReport { paneId: string; source: string; seq: number; } export interface HerdrTransportResult { ok: boolean; transport: "cli" | "socket"; detail: string; error?: string; } export interface HerdrTransport { readonly kind: "cli" | "socket"; reportAgent(report: HerdrAgentReport): Promise; releaseAgent(report: HerdrReleaseReport): Promise; } type ExecFileFn = (file: string, args: string[], callback: (error: Error | null) => void) => void; /** Build argv for `herdr pane report-agent` (no shell; execFile argv array). */ export declare function buildReportAgentArgs(report: HerdrAgentReport): string[]; export declare function buildReleaseAgentArgs(report: HerdrReleaseReport): string[]; /** * Trust-pin the Herdr binary: only an absolute path to an existing regular file * is accepted. A bare `herdr` (PATH-resolved) is never used, to avoid PATH * hijack. Returns the trusted absolute path or null. */ export declare function resolveTrustedHerdrBin(binPath: string | null | undefined): string | null; export interface CliTransportOptions { binPath?: string | null; /** Injectable for tests; defaults to node:child_process execFile. */ execFileFn?: ExecFileFn; timeoutMs?: number; } /** * Argv-safe CLI transport. Requires a trust-pinned absolute Herdr binary; never * shells out and never falls back to a PATH-resolved `herdr`. */ export declare class CliHerdrTransport implements HerdrTransport { readonly kind: "cli"; private readonly bin; private readonly execFileFn; constructor(options?: CliTransportOptions); /** True only when a trust-pinned binary is available. */ get available(): boolean; reportAgent(report: HerdrAgentReport): Promise; releaseAgent(report: HerdrReleaseReport): Promise; private run; } export interface SocketRequest { id: string; method: string; params: Record; } export interface SocketResponse { id?: string; result?: unknown; error?: { code?: string; message?: string; } | string; } /** * Send one request and await the correlated response. Implementations must only * resolve `ok` when Herdr accepted the request (a matching `{id,result}`), * reject on `{id,error}`, and enforce bounded framing/timeout/backpressure. */ export type SocketExchange = (socketPath: string, request: SocketRequest) => Promise; export interface SocketTransportOptions { socketPath: string; /** Injectable request/response exchange; defaults to a real Unix-socket NDJSON round-trip. */ exchange?: SocketExchange; timeoutMs?: number; maxFrameBytes?: number; } /** * Raw Herdr socket transport with request/response correlation. Herdr uses * newline-delimited JSON over a local Unix domain socket; method names use dot * notation (pane.report_agent, pane.release_agent). Success is only reported * when a correlated `{id,result}` reply is received (Herdr acceptance), not when * bytes flush. */ export declare class SocketHerdrTransport implements HerdrTransport { readonly kind: "socket"; private readonly socketPath; private readonly exchange; private counter; constructor(options: SocketTransportOptions); reportAgent(report: HerdrAgentReport): Promise; releaseAgent(report: HerdrReleaseReport): Promise; private send; } export {}; //# sourceMappingURL=transport.d.ts.map