/** * Mode profile storage for AgenticROS. * * Profiles live at ~/.agenticros/profiles/.json. The active profile is * copied into ~/.agenticros/config.json (which is what every adapter actually * reads). Swapping profiles is what `agenticros config use ` (and the * up-runners) does so users can flip between real-robot and simulation * without hand-editing JSON. * * Why profiles instead of a single config: the real robot and the sim AMR * have different namespaces, transports, safety limits, and camera topics. * Tracking both in one file requires the MCP server to know "which mode is * active right now," which is exactly the problem `.mcp.json` env override * already tried to solve - badly, because env vars unconditionally win and * silently break the other mode. With profiles + a live ~/.agenticros/ * config.json, everything reads from one place; the CLI just swaps it. * * Profile bootstrap policy: * * On first use, if ~/.agenticros/config.json exists but no profiles do, * we treat the current config as the user's last-used mode and seed * profiles from defaults for both modes (preserving any namespace the * user already had for whichever mode matches it). * * Otherwise we write the canonical defaults below. */ export type Mode = "real" | "sim"; export declare function profilesDir(): string; export declare function profilePath(mode: Mode): string; export declare function activeConfigPath(): string; export declare function modeMarkerPath(): string; export declare function readActiveMode(): Mode | null; /** * Ensure both real and sim profile files exist. Returns true if anything was * written (so callers can log it). */ export declare function ensureProfilesExist(): boolean; /** * Swap ~/.agenticros/config.json to the requested mode and persist the * active-mode marker. Returns the absolute path to the active config. * * Idempotent: calling switchMode("sim") when sim is already active just * re-copies the profile (cheap, ensures freshness). */ export declare function switchMode(mode: Mode): string; /** * Mutate a single field inside the profile JSON (e.g. real.robot.namespace). * Use sparingly - profiles are normally edited by hand or via `agenticros * config set` against the active config. */ export declare function patchProfile(mode: Mode, path: string[], value: unknown): void; //# sourceMappingURL=profiles.d.ts.map