import type { HostContext } from './system-prompt.js';
import { type PublicSpawnLimits } from './spawn-rate-limiter.js';
export interface HostResolution extends HostContext {
    /** Comma-separated list of detected interface names — non-null only when
     *  lanIPv4 resolution failed. Surfaced as the `stderrTail` of a spawn
     *  rejection so the operator sees what was searched. */
    lanIPv4Diagnostic: string | null;
}
export interface ManagerConfig {
    port: number;
    persistDir: string;
    claudeBin: string;
    spawnCwd: string;
    urlCaptureTimeoutMs: number;
    killGraceMs: number;
    jsonlReadMaxBytes: number;
    /** Per-account concurrent specialist (`--agent`) PTYs. (N+1)th attempt
     *  evicts the oldest idle specialist; rejects 503 if none are idle.
     *  Env override: `CLAUDE_SESSION_MANAGER_SPECIALIST_CAP`. Default 3. */
    specialistCap: number;
    /** Slots reserved for operator (non-specialist) spawns. Specialist
     *  spawns are rejected with 503 `operator-slots-reserved` once
     *  `currentTotalLive >= totalPtyCap - operatorReserve`. Env:
     *  `CLAUDE_SESSION_MANAGER_OPERATOR_RESERVE`. Default 2. */
    operatorReserve: number;
    /** Hard ceiling on concurrent PTYs the manager will hold open. Taken
     *  as the min of `/proc/sys/kernel/pty/max` (Linux only; absent on
     *  Darwin) and `CLAUDE_SESSION_MANAGER_TOTAL_PTY_CAP` (default 64). */
    totalPtyCap: number;
    /** Reaper TTL: a specialist row with `status: idle` and no JSONL whose
     *  `updatedAt` is older than this is SIGTERMed. Env:
     *  `CLAUDE_SESSION_MANAGER_RECORDER_IDLE_TTL_MS`. Default 120 000. */
    recorderIdleTtlMs: number;
    host: HostResolution;
    /** per-account directory resolved at boot. Mirrors the
     *  installer's `resolveInstallAccountId` walk: the first sub-directory of
     *  `<installDir>/data/accounts/` containing `account.json`. Per-spawn the
     *  composer reads `<accountDir>/agents/<role>/{IDENTITY.md,SOUL.md}` and
     *  injects them as `<identity>` / `<soul>` sentinels in the
     *  `--append-system-prompt` block; absence of an account dir refuses
     *  manager start with `account-dir-unresolved` (no silent fallback to
     *  stock Claude Code). */
    accountDir: string;
    /** per-`role=public` spawn rate limit. Loaded from
     * `brand.json.publicSpawnLimits` if present, else defaults; env vars
     * `MAXY_PUBLIC_SPAWN_CAP` / `MAXY_PUBLIC_SPAWN_WINDOW_MS` override every
     * per-channel bucket (operator escape hatch). */
    publicSpawnLimits: PublicSpawnLimits;
    /** `brand.json.productName` ("Maxy", "Real Agent"). Used as the
     *  `claude rc` session-name prefix so the Remote Control device renders
     *  as `<productName> · <id>` in the composer instead of the OS hostname. */
    brandProductName: string;
}
export declare function loadConfig(env?: NodeJS.ProcessEnv): ManagerConfig;
//# sourceMappingURL=config.d.ts.map