import { z } from "zod"; import type { TransportConfig } from "./transport/types.js"; /** Map-frame AABB for navigation goals. All four edges required when set. */ export declare const WorkspaceLimitsSchema: z.ZodObject<{ xMin: z.ZodNumber; xMax: z.ZodNumber; yMin: z.ZodNumber; yMax: z.ZodNumber; }, "strip", z.ZodTypeAny, { xMin: number; xMax: number; yMin: number; yMax: number; }, { xMin: number; xMax: number; yMin: number; yMax: number; }>; export type WorkspaceLimits = z.infer; /** * Per-robot safety overlay. Unset fields inherit `config.safety`. * `workspaceLimits` is replaced as a whole when present on the robot. */ export declare const RobotSafetyOverlaySchema: z.ZodObject<{ maxLinearVelocity: z.ZodOptional; maxAngularVelocity: z.ZodOptional; workspaceLimits: z.ZodOptional>; }, "strip", z.ZodTypeAny, { maxLinearVelocity?: number | undefined; maxAngularVelocity?: number | undefined; workspaceLimits?: { xMin: number; xMax: number; yMin: number; yMax: number; } | undefined; }, { maxLinearVelocity?: number | undefined; maxAngularVelocity?: number | undefined; workspaceLimits?: { xMin: number; xMax: number; yMin: number; yMax: number; } | undefined; }>; export type RobotSafetyOverlay = z.infer; /** * Per-robot transport override schema (Phase 1.d-resolve). * * Discriminated union on `mode`, each variant `.strict()` so that a * typo like `{ mode: "zenoh", local: {...} }` fails fast at parse time * instead of being silently stripped. Sub-sections are optional — * `{ mode: "zenoh" }` is a valid override that inherits everything * from the top-level `config.zenoh`. A partial sub-section like * `{ mode: "zenoh", zenoh: { routerEndpoint: "ws://field:10000" } }` * is merged per-field over the global config — see the resolver. * * Why a discriminated union (vs the top-level shape of sibling fields): * - Keeps the override self-contained at one JSON property * - Matches TransportConfig's runtime discriminated union 1:1 * - Trivially validatable per-robot without leaking across siblings */ declare const RobotTransportOverrideSchema: z.ZodDiscriminatedUnion<"mode", [z.ZodObject<{ mode: z.ZodLiteral<"rosbridge">; rosbridge: z.ZodOptional; reconnect: z.ZodOptional; reconnectInterval: z.ZodOptional; }, "strip", z.ZodTypeAny, { url?: string | undefined; reconnect?: boolean | undefined; reconnectInterval?: number | undefined; }, { url?: string | undefined; reconnect?: boolean | undefined; reconnectInterval?: number | undefined; }>>; }, "strict", z.ZodTypeAny, { mode: "rosbridge"; rosbridge?: { url?: string | undefined; reconnect?: boolean | undefined; reconnectInterval?: number | undefined; } | undefined; }, { mode: "rosbridge"; rosbridge?: { url?: string | undefined; reconnect?: boolean | undefined; reconnectInterval?: number | undefined; } | undefined; }>, z.ZodObject<{ mode: z.ZodLiteral<"local">; local: z.ZodOptional; }, "strip", z.ZodTypeAny, { domainId?: number | undefined; }, { domainId?: number | undefined; }>>; }, "strict", z.ZodTypeAny, { mode: "local"; local?: { domainId?: number | undefined; } | undefined; }, { mode: "local"; local?: { domainId?: number | undefined; } | undefined; }>, z.ZodObject<{ mode: z.ZodLiteral<"zenoh">; zenoh: z.ZodOptional; domainId: z.ZodOptional; keyFormat: z.ZodOptional>; bridgeNamespace: z.ZodOptional; }, "strip", z.ZodTypeAny, { routerEndpoint?: string | undefined; domainId?: number | undefined; keyFormat?: "ros2dds" | "rmw_zenoh" | undefined; bridgeNamespace?: string | undefined; }, { routerEndpoint?: string | undefined; domainId?: number | undefined; keyFormat?: "ros2dds" | "rmw_zenoh" | undefined; bridgeNamespace?: string | undefined; }>>; }, "strict", z.ZodTypeAny, { mode: "zenoh"; zenoh?: { routerEndpoint?: string | undefined; domainId?: number | undefined; keyFormat?: "ros2dds" | "rmw_zenoh" | undefined; bridgeNamespace?: string | undefined; } | undefined; }, { mode: "zenoh"; zenoh?: { routerEndpoint?: string | undefined; domainId?: number | undefined; keyFormat?: "ros2dds" | "rmw_zenoh" | undefined; bridgeNamespace?: string | undefined; } | undefined; }>, z.ZodObject<{ mode: z.ZodLiteral<"webrtc">; webrtc: z.ZodOptional; apiUrl: z.ZodOptional; robotId: z.ZodOptional; robotKey: z.ZodOptional; iceServers: z.ZodOptional]>; username: z.ZodOptional; credential: z.ZodOptional; }, "strip", z.ZodTypeAny, { urls: string | string[]; username?: string | undefined; credential?: string | undefined; }, { urls: string | string[]; username?: string | undefined; credential?: string | undefined; }>, "many">>; }, "strip", z.ZodTypeAny, { signalingUrl?: string | undefined; apiUrl?: string | undefined; robotId?: string | undefined; robotKey?: string | undefined; iceServers?: { urls: string | string[]; username?: string | undefined; credential?: string | undefined; }[] | undefined; }, { signalingUrl?: string | undefined; apiUrl?: string | undefined; robotId?: string | undefined; robotKey?: string | undefined; iceServers?: { urls: string | string[]; username?: string | undefined; credential?: string | undefined; }[] | undefined; }>>; }, "strict", z.ZodTypeAny, { mode: "webrtc"; webrtc?: { signalingUrl?: string | undefined; apiUrl?: string | undefined; robotId?: string | undefined; robotKey?: string | undefined; iceServers?: { urls: string | string[]; username?: string | undefined; credential?: string | undefined; }[] | undefined; } | undefined; }, { mode: "webrtc"; webrtc?: { signalingUrl?: string | undefined; apiUrl?: string | undefined; robotId?: string | undefined; robotKey?: string | undefined; iceServers?: { urls: string | string[]; username?: string | undefined; credential?: string | undefined; }[] | undefined; } | undefined; }>]>; export type RobotTransportOverride = z.infer; export declare const AgenticROSConfigSchema: z.ZodObject<{ transport: z.ZodDefault>; }, "strip", z.ZodTypeAny, { mode: "rosbridge" | "local" | "webrtc" | "zenoh"; }, { mode?: "rosbridge" | "local" | "webrtc" | "zenoh" | undefined; }>>; zenoh: z.ZodDefault; domainId: z.ZodDefault; /** "ros2dds" = zenoh-bridge-ros2dds key format (slashes kept). "rmw_zenoh" = rmw_zenoh key format (domain + %). */ keyFormat: z.ZodDefault>; /** * Must match zenoh-bridge-ros2dds `plugins.ros2dds.namespace` when it is not the default "/". * Example: bridge has `namespace: "/bot1"` → set `bridgeNamespace` to "/bot1" or "bot1". * Omit or use "/" when the bridge uses the default (only the ROS topic path is the zenoh key). */ bridgeNamespace: z.ZodOptional; }, "strip", z.ZodTypeAny, { routerEndpoint: string; domainId: number; keyFormat: "ros2dds" | "rmw_zenoh"; bridgeNamespace?: string | undefined; }, { routerEndpoint?: string | undefined; domainId?: number | undefined; keyFormat?: "ros2dds" | "rmw_zenoh" | undefined; bridgeNamespace?: string | undefined; }>>; rosbridge: z.ZodDefault; reconnect: z.ZodDefault; reconnectInterval: z.ZodDefault; }, "strip", z.ZodTypeAny, { url: string; reconnect: boolean; reconnectInterval: number; }, { url?: string | undefined; reconnect?: boolean | undefined; reconnectInterval?: number | undefined; }>>; local: z.ZodDefault; }, "strip", z.ZodTypeAny, { domainId: number; }, { domainId?: number | undefined; }>>; webrtc: z.ZodDefault; apiUrl: z.ZodDefault; robotId: z.ZodDefault; robotKey: z.ZodDefault; iceServers: z.ZodDefault]>; username: z.ZodOptional; credential: z.ZodOptional; }, "strip", z.ZodTypeAny, { urls: string | string[]; username?: string | undefined; credential?: string | undefined; }, { urls: string | string[]; username?: string | undefined; credential?: string | undefined; }>, "many">>; }, "strip", z.ZodTypeAny, { signalingUrl: string; apiUrl: string; robotId: string; robotKey: string; iceServers: { urls: string | string[]; username?: string | undefined; credential?: string | undefined; }[]; }, { signalingUrl?: string | undefined; apiUrl?: string | undefined; robotId?: string | undefined; robotKey?: string | undefined; iceServers?: { urls: string | string[]; username?: string | undefined; credential?: string | undefined; }[] | undefined; }>>; robot: z.ZodDefault; namespace: z.ZodDefault; /** Camera topic for "what do you see?" (e.g. /camera/camera/color/image_raw/compressed). If set, used as default in ros2_camera_snapshot and in context. */ cameraTopic: z.ZodDefault; }, "strip", z.ZodTypeAny, { name: string; namespace: string; cameraTopic: string; }, { name?: string | undefined; namespace?: string | undefined; cameraTopic?: string | undefined; }>>; /** * Phase 1.d multi-robot list. When non-empty, this is the source of * truth for `ros2_list_robots` and (in a follow-up) the per-tool * `robot_id` parameter. When empty, the legacy single-robot * `config.robot` above is synthesised into a one-entry list at * resolution time (see packages/core/src/robots.ts). Existing configs * keep working unchanged; this field is opt-in. * * Mark one entry with `default: true` to make it the active robot * even when it isn't the first in the list. Otherwise the first entry * wins. */ robots: z.ZodDefault; namespace: z.ZodDefault; cameraTopic: z.ZodDefault; default: z.ZodOptional; /** * Phase 1.e robot kind ("amr" | "arm" | "drone" | "rover" | …). * * Free-form string so users can invent their own taxonomy, but the * documented set is `amr` (autonomous mobile robot), `arm`, * `drone`, and `rover`. Consumed by `ros2_find_robots_for(kind=…)` * so an agent can ask "find me an AMR with a depth camera that * can follow_person" and the platform filters the fleet. * * Defaults to "amr" (back-compat: every existing robot today is * an AMR), so the field stays useful even when the user hasn't * tagged their robots explicitly. */ kind: z.ZodDefault; /** * Phase 1.e sensor/hardware tags. * * Lets `ros2_find_robots_for` answer questions like "which * robots have a depth camera" without subscribing to topics or * inspecting the URDF. All flags default to false — set them * explicitly per robot via the CLI (`--sensors=has_realsense`) * or by hand-editing `~/.agenticros/config.json`. * * The list is intentionally short for Phase 1; expand it as we * accumulate seed-catalog skills that depend on a specific * hardware capability (lidar SLAM, arm grasping, etc.). */ sensors: z.ZodDefault; has_lidar: z.ZodDefault; has_arm: z.ZodDefault; }, "strip", z.ZodTypeAny, { has_realsense: boolean; has_lidar: boolean; has_arm: boolean; }, { has_realsense?: boolean | undefined; has_lidar?: boolean | undefined; has_arm?: boolean | undefined; }>>; /** * Phase 1.e optional per-robot capability allowlist. * * When set, restricts which capabilities `ros2_find_robots_for` * considers this robot capable of. When unset (the common * case), the robot inherits the gateway's global capability * registry (the union of built-in verbs plus every loaded * skill's capabilities). Useful in heterogeneous fleets where * one robot has the arm skill loaded and another doesn't. */ capabilities: z.ZodOptional>; /** * Hardware profile: features this body has + ROS bindings. * Optional. When unset, verb filtering is skipped (gateway-wide * registry — today's behaviour). When set, advertised verbs are * the intersection of installed skills and `profile.features`. */ profile: z.ZodOptional>; features: z.ZodDefault>; bindings: z.ZodDefault>; }, "strip", z.ZodTypeAny, { schema: "agenticros.profile.v1"; features: string[]; bindings: Record; }, { schema?: "agenticros.profile.v1" | undefined; features?: string[] | undefined; bindings?: Record | undefined; }>>; /** * Optional per-robot safety overlay. Each field, when set, * replaces the gateway `config.safety` value for that robot. * Unset fields inherit the gateway defaults. Used so a 0.3 m/s * indoor AMR and a 1.5 m/s rover can share one gateway. */ safety: z.ZodOptional; maxAngularVelocity: z.ZodOptional; workspaceLimits: z.ZodOptional>; }, "strip", z.ZodTypeAny, { maxLinearVelocity?: number | undefined; maxAngularVelocity?: number | undefined; workspaceLimits?: { xMin: number; xMax: number; yMin: number; yMax: number; } | undefined; }, { maxLinearVelocity?: number | undefined; maxAngularVelocity?: number | undefined; workspaceLimits?: { xMin: number; xMax: number; yMin: number; yMax: number; } | undefined; }>>; /** * Phase 1.d-resolve per-robot transport override. * * When set, this robot uses its own transport instead of the * top-level `config.transport.*`. Useful when one host drives * BOTH a local sim (mode: "local") AND a real robot reached via * an off-robot bridge (mode: "zenoh" / "rosbridge") — each * robot connects through the right path with no global config * juggling. * * Sub-sections (`zenoh`, `rosbridge`, `local`, `webrtc`) are * optional inside the override: omit them to inherit the global * `config.
` defaults; set them to override only the * fields you need (e.g. a different router endpoint). * * Consumed by `getTransportConfigForRobot(config, robotId)` in * robots.ts. Adapters opt in to multi-transport pools — when * the override is absent they keep using the single global * transport, so existing single-robot deployments are * unaffected. */ transport: z.ZodOptional; rosbridge: z.ZodOptional; reconnect: z.ZodOptional; reconnectInterval: z.ZodOptional; }, "strip", z.ZodTypeAny, { url?: string | undefined; reconnect?: boolean | undefined; reconnectInterval?: number | undefined; }, { url?: string | undefined; reconnect?: boolean | undefined; reconnectInterval?: number | undefined; }>>; }, "strict", z.ZodTypeAny, { mode: "rosbridge"; rosbridge?: { url?: string | undefined; reconnect?: boolean | undefined; reconnectInterval?: number | undefined; } | undefined; }, { mode: "rosbridge"; rosbridge?: { url?: string | undefined; reconnect?: boolean | undefined; reconnectInterval?: number | undefined; } | undefined; }>, z.ZodObject<{ mode: z.ZodLiteral<"local">; local: z.ZodOptional; }, "strip", z.ZodTypeAny, { domainId?: number | undefined; }, { domainId?: number | undefined; }>>; }, "strict", z.ZodTypeAny, { mode: "local"; local?: { domainId?: number | undefined; } | undefined; }, { mode: "local"; local?: { domainId?: number | undefined; } | undefined; }>, z.ZodObject<{ mode: z.ZodLiteral<"zenoh">; zenoh: z.ZodOptional; domainId: z.ZodOptional; keyFormat: z.ZodOptional>; bridgeNamespace: z.ZodOptional; }, "strip", z.ZodTypeAny, { routerEndpoint?: string | undefined; domainId?: number | undefined; keyFormat?: "ros2dds" | "rmw_zenoh" | undefined; bridgeNamespace?: string | undefined; }, { routerEndpoint?: string | undefined; domainId?: number | undefined; keyFormat?: "ros2dds" | "rmw_zenoh" | undefined; bridgeNamespace?: string | undefined; }>>; }, "strict", z.ZodTypeAny, { mode: "zenoh"; zenoh?: { routerEndpoint?: string | undefined; domainId?: number | undefined; keyFormat?: "ros2dds" | "rmw_zenoh" | undefined; bridgeNamespace?: string | undefined; } | undefined; }, { mode: "zenoh"; zenoh?: { routerEndpoint?: string | undefined; domainId?: number | undefined; keyFormat?: "ros2dds" | "rmw_zenoh" | undefined; bridgeNamespace?: string | undefined; } | undefined; }>, z.ZodObject<{ mode: z.ZodLiteral<"webrtc">; webrtc: z.ZodOptional; apiUrl: z.ZodOptional; robotId: z.ZodOptional; robotKey: z.ZodOptional; iceServers: z.ZodOptional]>; username: z.ZodOptional; credential: z.ZodOptional; }, "strip", z.ZodTypeAny, { urls: string | string[]; username?: string | undefined; credential?: string | undefined; }, { urls: string | string[]; username?: string | undefined; credential?: string | undefined; }>, "many">>; }, "strip", z.ZodTypeAny, { signalingUrl?: string | undefined; apiUrl?: string | undefined; robotId?: string | undefined; robotKey?: string | undefined; iceServers?: { urls: string | string[]; username?: string | undefined; credential?: string | undefined; }[] | undefined; }, { signalingUrl?: string | undefined; apiUrl?: string | undefined; robotId?: string | undefined; robotKey?: string | undefined; iceServers?: { urls: string | string[]; username?: string | undefined; credential?: string | undefined; }[] | undefined; }>>; }, "strict", z.ZodTypeAny, { mode: "webrtc"; webrtc?: { signalingUrl?: string | undefined; apiUrl?: string | undefined; robotId?: string | undefined; robotKey?: string | undefined; iceServers?: { urls: string | string[]; username?: string | undefined; credential?: string | undefined; }[] | undefined; } | undefined; }, { mode: "webrtc"; webrtc?: { signalingUrl?: string | undefined; apiUrl?: string | undefined; robotId?: string | undefined; robotKey?: string | undefined; iceServers?: { urls: string | string[]; username?: string | undefined; credential?: string | undefined; }[] | undefined; } | undefined; }>]>>; }, "strip", z.ZodTypeAny, { name: string; namespace: string; cameraTopic: string; id: string; kind: string; sensors: { has_realsense: boolean; has_lidar: boolean; has_arm: boolean; }; transport?: { mode: "rosbridge"; rosbridge?: { url?: string | undefined; reconnect?: boolean | undefined; reconnectInterval?: number | undefined; } | undefined; } | { mode: "local"; local?: { domainId?: number | undefined; } | undefined; } | { mode: "zenoh"; zenoh?: { routerEndpoint?: string | undefined; domainId?: number | undefined; keyFormat?: "ros2dds" | "rmw_zenoh" | undefined; bridgeNamespace?: string | undefined; } | undefined; } | { mode: "webrtc"; webrtc?: { signalingUrl?: string | undefined; apiUrl?: string | undefined; robotId?: string | undefined; robotKey?: string | undefined; iceServers?: { urls: string | string[]; username?: string | undefined; credential?: string | undefined; }[] | undefined; } | undefined; } | undefined; default?: boolean | undefined; capabilities?: string[] | undefined; profile?: { schema: "agenticros.profile.v1"; features: string[]; bindings: Record; } | undefined; safety?: { maxLinearVelocity?: number | undefined; maxAngularVelocity?: number | undefined; workspaceLimits?: { xMin: number; xMax: number; yMin: number; yMax: number; } | undefined; } | undefined; }, { id: string; transport?: { mode: "rosbridge"; rosbridge?: { url?: string | undefined; reconnect?: boolean | undefined; reconnectInterval?: number | undefined; } | undefined; } | { mode: "local"; local?: { domainId?: number | undefined; } | undefined; } | { mode: "zenoh"; zenoh?: { routerEndpoint?: string | undefined; domainId?: number | undefined; keyFormat?: "ros2dds" | "rmw_zenoh" | undefined; bridgeNamespace?: string | undefined; } | undefined; } | { mode: "webrtc"; webrtc?: { signalingUrl?: string | undefined; apiUrl?: string | undefined; robotId?: string | undefined; robotKey?: string | undefined; iceServers?: { urls: string | string[]; username?: string | undefined; credential?: string | undefined; }[] | undefined; } | undefined; } | undefined; name?: string | undefined; namespace?: string | undefined; cameraTopic?: string | undefined; default?: boolean | undefined; kind?: string | undefined; sensors?: { has_realsense?: boolean | undefined; has_lidar?: boolean | undefined; has_arm?: boolean | undefined; } | undefined; capabilities?: string[] | undefined; profile?: { schema?: "agenticros.profile.v1" | undefined; features?: string[] | undefined; bindings?: Record | undefined; } | undefined; safety?: { maxLinearVelocity?: number | undefined; maxAngularVelocity?: number | undefined; workspaceLimits?: { xMin: number; xMax: number; yMin: number; yMax: number; } | undefined; } | undefined; }>, "many">>; /** Phase 3 teleop web app: camera + twist controls. */ teleop: z.ZodDefault; /** Explicit list of camera sources for the selector; if empty, derived from listTopics() filtered by Image/CompressedImage. */ cameraTopics: z.ZodDefault; }, "strip", z.ZodTypeAny, { topic: string; label?: string | undefined; }, { topic: string; label?: string | undefined; }>, "many">>; /** cmd_vel topic override (default from robot namespace). */ cmdVelTopic: z.ZodDefault; /** Default linear speed (m/s) for teleop. */ speedDefault: z.ZodDefault; /** Camera poll interval in ms for the teleop page. */ cameraPollMs: z.ZodDefault; }, "strip", z.ZodTypeAny, { cameraTopic: string; cameraTopics: { topic: string; label?: string | undefined; }[]; cmdVelTopic: string; speedDefault: number; cameraPollMs: number; }, { cameraTopic?: string | undefined; cameraTopics?: { topic: string; label?: string | undefined; }[] | undefined; cmdVelTopic?: string | undefined; speedDefault?: number | undefined; cameraPollMs?: number | undefined; }>>; safety: z.ZodDefault; maxAngularVelocity: z.ZodDefault; /** * Optional geofence for navigation goals (map frame). Unset = * not enforced. Absence of a bound is pass-through; a set but * inverted bound (xMin > xMax) fails closed. */ workspaceLimits: z.ZodOptional>; }, "strip", z.ZodTypeAny, { maxLinearVelocity: number; maxAngularVelocity: number; workspaceLimits?: { xMin: number; xMax: number; yMin: number; yMax: number; } | undefined; }, { maxLinearVelocity?: number | undefined; maxAngularVelocity?: number | undefined; workspaceLimits?: { xMin: number; xMax: number; yMin: number; yMax: number; } | undefined; }>>; /** * Optional in-plugin image describer. * * When the primary chat model is text-only (e.g. Ollama qwen2.5:7b), * OpenClaw filters image content blocks out of tool results before the * LLM ever sees them, so `ros2_camera_snapshot` cannot be described. * Configuring an OpenAI-compatible chat completions endpoint here lets * the plugin call a vision model itself and embed the description text * directly in the snapshot tool result. * * Recommended Jetson setup: point at local Ollama with a VL model: * url: "http://host.docker.internal:11434/v1/chat/completions" * model: "qwen2.5vl:7b" * * If `enabled: false`, the snapshot result includes only the camera URL * and the agent is on its own (suitable when the primary model is * multimodal and OpenClaw does not need to filter images). */ describer: z.ZodDefault; /** OpenAI-compat chat completions endpoint URL. */ url: z.ZodDefault; /** Optional Bearer token / API key for the endpoint. */ apiKey: z.ZodOptional; /** Vision model id (must accept OpenAI `image_url` content blocks). */ model: z.ZodDefault; /** Prompt sent alongside the image. */ prompt: z.ZodDefault; /** Max tokens for the description. */ maxTokens: z.ZodDefault; /** Request timeout in ms. */ timeoutMs: z.ZodDefault; /** * Resize images larger than this max dimension before sending to the * VL model. Reduces token usage and latency. Set to 0 to disable. */ maxImageDimension: z.ZodDefault; }, "strip", z.ZodTypeAny, { url: string; enabled: boolean; model: string; prompt: string; maxTokens: number; timeoutMs: number; maxImageDimension: number; apiKey?: string | undefined; }, { url?: string | undefined; enabled?: boolean | undefined; apiKey?: string | undefined; model?: string | undefined; prompt?: string | undefined; maxTokens?: number | undefined; timeoutMs?: number | undefined; maxImageDimension?: number | undefined; }>>; /** * Optional cross-adapter semantic memory subsystem. * * When `enabled: true`, OpenClaw, Claude Code, and Gemini adapters all * register four memory tools (memory_remember / memory_recall / * memory_forget / memory_status) backed by a shared store. Default is * off — zero new deps when disabled. * * See docs/memory.md for ready-to-paste recipes. */ memory: z.ZodDefault; /** Which backend to use. "local" has no extra deps; "mem0" needs `pnpm add mem0ai`. */ backend: z.ZodDefault>; /** Override the per-record namespace. Defaults to robot.namespace at call time. */ namespace: z.ZodOptional; local: z.ZodDefault; }, "strip", z.ZodTypeAny, { storePath: string; }, { storePath?: string | undefined; }>>; mem0: z.ZodDefault; /** SQLite history db path (mem0 historyDbPath). Supports leading "~/". */ historyDbPath: z.ZodDefault; /** * Embedder passed verbatim to `new Memory({ embedder })`. * When omitted, the factory auto-detects: Ollama (if reachable) * → OpenAI (if OPENAI_API_KEY set) → error. */ embedder: z.ZodOptional; }, "strip", z.ZodTypeAny, { provider: string; config: Record; }, { provider: string; config: Record; }>>; /** Vector store passed verbatim to `new Memory({ vectorStore })`. */ vectorStore: z.ZodOptional; }, "strip", z.ZodTypeAny, { provider: string; config: Record; }, { provider: string; config: Record; }>>; /** LLM passed verbatim to `new Memory({ llm })`. Only used when inferOnWrite is true. */ llm: z.ZodOptional; }, "strip", z.ZodTypeAny, { provider: string; config: Record; }, { provider: string; config: Record; }>>; }, "strip", z.ZodTypeAny, { inferOnWrite: boolean; historyDbPath: string; embedder?: { provider: string; config: Record; } | undefined; vectorStore?: { provider: string; config: Record; } | undefined; llm?: { provider: string; config: Record; } | undefined; }, { inferOnWrite?: boolean | undefined; historyDbPath?: string | undefined; embedder?: { provider: string; config: Record; } | undefined; vectorStore?: { provider: string; config: Record; } | undefined; llm?: { provider: string; config: Record; } | undefined; }>>; }, "strip", z.ZodTypeAny, { local: { storePath: string; }; enabled: boolean; mem0: { inferOnWrite: boolean; historyDbPath: string; embedder?: { provider: string; config: Record; } | undefined; vectorStore?: { provider: string; config: Record; } | undefined; llm?: { provider: string; config: Record; } | undefined; }; backend: "local" | "mem0"; namespace?: string | undefined; }, { local?: { storePath?: string | undefined; } | undefined; namespace?: string | undefined; enabled?: boolean | undefined; mem0?: { inferOnWrite?: boolean | undefined; historyDbPath?: string | undefined; embedder?: { provider: string; config: Record; } | undefined; vectorStore?: { provider: string; config: Record; } | undefined; llm?: { provider: string; config: Record; } | undefined; } | undefined; backend?: "local" | "mem0" | undefined; }>>; /** * Optional fleet hive (Corebrum HTTP on :6502). Sibling of `memory`, not a * memory backend. When `enabled: false` (default), createHiveClient returns * null and adapters skip hive_* tools. See docs/hive.md. */ hive: z.ZodDefault; /** Corebrum web base URL. Omit → http://127.0.0.1:6502 */ url: z.ZodOptional; /** Corebrum identity key_id. Omit → ARC ROBOT_ID */ identityId: z.ZodOptional; /** Corebrum hive_id after create/join. Omit → find/create by org name */ hiveId: z.ZodOptional; /** Named recipes the fleet should run. YAML never lives in this repo. */ recipes: z.ZodDefault; describe: z.ZodDefault; health: z.ZodDefault; }, "strip", z.ZodTypeAny, { detect: boolean; describe: boolean; health: boolean; }, { detect?: boolean | undefined; describe?: boolean | undefined; health?: boolean | undefined; }>>; }, "strip", z.ZodTypeAny, { enabled: boolean; recipes: { detect: boolean; describe: boolean; health: boolean; }; url?: string | undefined; identityId?: string | undefined; hiveId?: string | undefined; }, { url?: string | undefined; enabled?: boolean | undefined; identityId?: string | undefined; hiveId?: string | undefined; recipes?: { detect?: boolean | undefined; describe?: boolean | undefined; health?: boolean | undefined; } | undefined; }>>; /** Per-skill config. Keys are skill ids (e.g. followme). Each skill validates its own slice. */ skills: z.ZodDefault>; /** Directories to scan for skill packages (package.json with an `agenticros` block). Resolved at gateway start. */ skillPaths: z.ZodDefault>; /** Npm (or local) package names to load as skills. Resolved via require.resolve from plugin context. */ skillPackages: z.ZodDefault>; /** * Marketplace skill refs to auto-fetch into `~/.agenticros/skills-cache/` * (e.g. `agenticros/navigate-to` or `owner/skill@main`). Resolved at * adapter startup into effective skillPaths. Never auto-upgrades pins. * Distinct from `skills` (per-skill runtime config object). */ skillRefs: z.ZodDefault>; }, "strip", z.ZodTypeAny, { rosbridge: { url: string; reconnect: boolean; reconnectInterval: number; }; local: { domainId: number; }; webrtc: { signalingUrl: string; apiUrl: string; robotId: string; robotKey: string; iceServers: { urls: string | string[]; username?: string | undefined; credential?: string | undefined; }[]; }; zenoh: { routerEndpoint: string; domainId: number; keyFormat: "ros2dds" | "rmw_zenoh"; bridgeNamespace?: string | undefined; }; transport: { mode: "rosbridge" | "local" | "webrtc" | "zenoh"; }; robot: { name: string; namespace: string; cameraTopic: string; }; safety: { maxLinearVelocity: number; maxAngularVelocity: number; workspaceLimits?: { xMin: number; xMax: number; yMin: number; yMax: number; } | undefined; }; robots: { name: string; namespace: string; cameraTopic: string; id: string; kind: string; sensors: { has_realsense: boolean; has_lidar: boolean; has_arm: boolean; }; transport?: { mode: "rosbridge"; rosbridge?: { url?: string | undefined; reconnect?: boolean | undefined; reconnectInterval?: number | undefined; } | undefined; } | { mode: "local"; local?: { domainId?: number | undefined; } | undefined; } | { mode: "zenoh"; zenoh?: { routerEndpoint?: string | undefined; domainId?: number | undefined; keyFormat?: "ros2dds" | "rmw_zenoh" | undefined; bridgeNamespace?: string | undefined; } | undefined; } | { mode: "webrtc"; webrtc?: { signalingUrl?: string | undefined; apiUrl?: string | undefined; robotId?: string | undefined; robotKey?: string | undefined; iceServers?: { urls: string | string[]; username?: string | undefined; credential?: string | undefined; }[] | undefined; } | undefined; } | undefined; default?: boolean | undefined; capabilities?: string[] | undefined; profile?: { schema: "agenticros.profile.v1"; features: string[]; bindings: Record; } | undefined; safety?: { maxLinearVelocity?: number | undefined; maxAngularVelocity?: number | undefined; workspaceLimits?: { xMin: number; xMax: number; yMin: number; yMax: number; } | undefined; } | undefined; }[]; teleop: { cameraTopic: string; cameraTopics: { topic: string; label?: string | undefined; }[]; cmdVelTopic: string; speedDefault: number; cameraPollMs: number; }; describer: { url: string; enabled: boolean; model: string; prompt: string; maxTokens: number; timeoutMs: number; maxImageDimension: number; apiKey?: string | undefined; }; memory: { local: { storePath: string; }; enabled: boolean; mem0: { inferOnWrite: boolean; historyDbPath: string; embedder?: { provider: string; config: Record; } | undefined; vectorStore?: { provider: string; config: Record; } | undefined; llm?: { provider: string; config: Record; } | undefined; }; backend: "local" | "mem0"; namespace?: string | undefined; }; hive: { enabled: boolean; recipes: { detect: boolean; describe: boolean; health: boolean; }; url?: string | undefined; identityId?: string | undefined; hiveId?: string | undefined; }; skills: Record; skillPaths: string[]; skillPackages: string[]; skillRefs: string[]; }, { rosbridge?: { url?: string | undefined; reconnect?: boolean | undefined; reconnectInterval?: number | undefined; } | undefined; local?: { domainId?: number | undefined; } | undefined; webrtc?: { signalingUrl?: string | undefined; apiUrl?: string | undefined; robotId?: string | undefined; robotKey?: string | undefined; iceServers?: { urls: string | string[]; username?: string | undefined; credential?: string | undefined; }[] | undefined; } | undefined; zenoh?: { routerEndpoint?: string | undefined; domainId?: number | undefined; keyFormat?: "ros2dds" | "rmw_zenoh" | undefined; bridgeNamespace?: string | undefined; } | undefined; transport?: { mode?: "rosbridge" | "local" | "webrtc" | "zenoh" | undefined; } | undefined; robot?: { name?: string | undefined; namespace?: string | undefined; cameraTopic?: string | undefined; } | undefined; safety?: { maxLinearVelocity?: number | undefined; maxAngularVelocity?: number | undefined; workspaceLimits?: { xMin: number; xMax: number; yMin: number; yMax: number; } | undefined; } | undefined; robots?: { id: string; transport?: { mode: "rosbridge"; rosbridge?: { url?: string | undefined; reconnect?: boolean | undefined; reconnectInterval?: number | undefined; } | undefined; } | { mode: "local"; local?: { domainId?: number | undefined; } | undefined; } | { mode: "zenoh"; zenoh?: { routerEndpoint?: string | undefined; domainId?: number | undefined; keyFormat?: "ros2dds" | "rmw_zenoh" | undefined; bridgeNamespace?: string | undefined; } | undefined; } | { mode: "webrtc"; webrtc?: { signalingUrl?: string | undefined; apiUrl?: string | undefined; robotId?: string | undefined; robotKey?: string | undefined; iceServers?: { urls: string | string[]; username?: string | undefined; credential?: string | undefined; }[] | undefined; } | undefined; } | undefined; name?: string | undefined; namespace?: string | undefined; cameraTopic?: string | undefined; default?: boolean | undefined; kind?: string | undefined; sensors?: { has_realsense?: boolean | undefined; has_lidar?: boolean | undefined; has_arm?: boolean | undefined; } | undefined; capabilities?: string[] | undefined; profile?: { schema?: "agenticros.profile.v1" | undefined; features?: string[] | undefined; bindings?: Record | undefined; } | undefined; safety?: { maxLinearVelocity?: number | undefined; maxAngularVelocity?: number | undefined; workspaceLimits?: { xMin: number; xMax: number; yMin: number; yMax: number; } | undefined; } | undefined; }[] | undefined; teleop?: { cameraTopic?: string | undefined; cameraTopics?: { topic: string; label?: string | undefined; }[] | undefined; cmdVelTopic?: string | undefined; speedDefault?: number | undefined; cameraPollMs?: number | undefined; } | undefined; describer?: { url?: string | undefined; enabled?: boolean | undefined; apiKey?: string | undefined; model?: string | undefined; prompt?: string | undefined; maxTokens?: number | undefined; timeoutMs?: number | undefined; maxImageDimension?: number | undefined; } | undefined; memory?: { local?: { storePath?: string | undefined; } | undefined; namespace?: string | undefined; enabled?: boolean | undefined; mem0?: { inferOnWrite?: boolean | undefined; historyDbPath?: string | undefined; embedder?: { provider: string; config: Record; } | undefined; vectorStore?: { provider: string; config: Record; } | undefined; llm?: { provider: string; config: Record; } | undefined; } | undefined; backend?: "local" | "mem0" | undefined; } | undefined; hive?: { url?: string | undefined; enabled?: boolean | undefined; identityId?: string | undefined; hiveId?: string | undefined; recipes?: { detect?: boolean | undefined; describe?: boolean | undefined; health?: boolean | undefined; } | undefined; } | undefined; skills?: Record | undefined; skillPaths?: string[] | undefined; skillPackages?: string[] | undefined; skillRefs?: string[] | undefined; }>; export type AgenticROSConfig = z.infer; /** * Parse and validate raw config against the schema. * Returns a fully-defaulted, typed config object. * Backward compat: if raw.followMe is set, it is merged into raw.skills.followme before parsing. */ export declare function parseConfig(raw: Record): AgenticROSConfig; /** * Strip Zod defaults that were never present in the raw config before parse. * The config page validates via parseConfig() but should not inject keys the * user never set — e.g. `robots: []` from the schema default breaks OpenClaw's * strict plugin configSchema when that field isn't declared yet. */ export declare function prepareConfigForPersistence(parsed: AgenticROSConfig, raw: Record): Record; /** * Build TransportConfig from full config for createTransport(). */ export declare function getTransportConfig(config: AgenticROSConfig): TransportConfig; export {}; //# sourceMappingURL=config.d.ts.map