/** The three harness homes a portable schema-v3 package can be materialized into. */
export declare const PORTABLE_HARNESSES: readonly ["claude", "codex", "opencode"];
export type PortableHarness = (typeof PORTABLE_HARNESSES)[number];
export declare function isPortableHarness(value: string): value is PortableHarness;
/** Thrown for a bad front-door argument (harness / version / output home). Never `process.exit`. */
export declare class MaterializeGuardError extends Error {
    constructor(message: string);
}
/** Reject a harness that is not one of the three portable homes, with a message naming it. */
export declare function assertPortableHarness(harness: string): PortableHarness;
/** Reject a non-exact harness version (empty, malformed, or `@latest`). */
export declare function assertExactHarnessVersion(version: string): string;
/** True when `raw` still contains a `..` segment after splitting on both separators. */
export declare function outputHomeHasDotDot(raw: string): boolean;
/**
 * Resolve `--output-home` to an absolute path, refusing a target that climbs out
 * of cwd (relative), uses a `..` segment, IS the live home root, or targets (or
 * sits inside) an existing live Claude/Codex/OpenCode home — after canonicalizing
 * symlinks in the existing ancestors so a symlinked target/ancestor can't alias
 * `$HOME`. Every rejection carries a `Path escape:` prefix so callers surface one
 * consistent reason.
 *
 * If any protected home is instead a DANGLING symlink or chain, the function
 * fails closed and refuses EVERY output home (via {@link assertNoDanglingLiveHome}),
 * because the absent target it points at has no canonical spelling to compare a
 * candidate against and the materializer's first `mkdir -p` would follow the link
 * and re-create the operator's live home there (PHNX-3838). The existing-home
 * comparison uses a byte-exact `===` / `startsWith` on two `realpath`-canonical
 * paths, which is exact filesystem identity — no approximation of the volume's
 * case/Unicode collation, which an independent macOS review showed cannot be
 * reproduced in JS from the path text.
 *
 * This is a front-door convenience guard. The load-bearing containment invariant
 * (that no per-resource write/delete escapes the output home — including through
 * a symlink planted at the harness-config-dir join point, which this function
 * cannot see because the materializer forms that child itself) is enforced in
 * `materializeAgentPackage`, so a direct (non-CLI) caller is protected too.
 */
export declare function resolveOutputHome(raw: string, cwd?: string, home?: string): string;
