@agenticros/core 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (151) hide show
  1. package/LICENSE +192 -0
  2. package/README.md +88 -0
  3. package/dist/banner.d.ts +7 -0
  4. package/dist/banner.d.ts.map +1 -0
  5. package/dist/banner.js +25 -0
  6. package/dist/banner.js.map +1 -0
  7. package/dist/capabilities.d.ts +101 -0
  8. package/dist/capabilities.d.ts.map +1 -0
  9. package/dist/capabilities.js +240 -0
  10. package/dist/capabilities.js.map +1 -0
  11. package/dist/cmd-vel-twist.d.ts +9 -0
  12. package/dist/cmd-vel-twist.d.ts.map +1 -0
  13. package/dist/cmd-vel-twist.js +32 -0
  14. package/dist/cmd-vel-twist.js.map +1 -0
  15. package/dist/config.d.ts +1195 -0
  16. package/dist/config.d.ts.map +1 -0
  17. package/dist/config.js +427 -0
  18. package/dist/config.js.map +1 -0
  19. package/dist/discovery.d.ts +113 -0
  20. package/dist/discovery.d.ts.map +1 -0
  21. package/dist/discovery.js +141 -0
  22. package/dist/discovery.js.map +1 -0
  23. package/dist/find-robots-for.d.ts +85 -0
  24. package/dist/find-robots-for.d.ts.map +1 -0
  25. package/dist/find-robots-for.js +120 -0
  26. package/dist/find-robots-for.js.map +1 -0
  27. package/dist/index.d.ts +32 -0
  28. package/dist/index.d.ts.map +1 -0
  29. package/dist/index.js +20 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/memory/factory.d.ts +18 -0
  32. package/dist/memory/factory.d.ts.map +1 -0
  33. package/dist/memory/factory.js +51 -0
  34. package/dist/memory/factory.js.map +1 -0
  35. package/dist/memory/index.d.ts +3 -0
  36. package/dist/memory/index.d.ts.map +1 -0
  37. package/dist/memory/index.js +2 -0
  38. package/dist/memory/index.js.map +1 -0
  39. package/dist/memory/local/provider.d.ts +29 -0
  40. package/dist/memory/local/provider.d.ts.map +1 -0
  41. package/dist/memory/local/provider.js +202 -0
  42. package/dist/memory/local/provider.js.map +1 -0
  43. package/dist/memory/mem0/provider.d.ts +66 -0
  44. package/dist/memory/mem0/provider.d.ts.map +1 -0
  45. package/dist/memory/mem0/provider.js +310 -0
  46. package/dist/memory/mem0/provider.js.map +1 -0
  47. package/dist/memory/types.d.ts +91 -0
  48. package/dist/memory/types.d.ts.map +1 -0
  49. package/dist/memory/types.js +10 -0
  50. package/dist/memory/types.js.map +1 -0
  51. package/dist/mission-registry.d.ts +94 -0
  52. package/dist/mission-registry.d.ts.map +1 -0
  53. package/dist/mission-registry.js +123 -0
  54. package/dist/mission-registry.js.map +1 -0
  55. package/dist/mission-transcript-sink.d.ts +33 -0
  56. package/dist/mission-transcript-sink.d.ts.map +1 -0
  57. package/dist/mission-transcript-sink.js +76 -0
  58. package/dist/mission-transcript-sink.js.map +1 -0
  59. package/dist/mission.d.ts +281 -0
  60. package/dist/mission.d.ts.map +1 -0
  61. package/dist/mission.js +331 -0
  62. package/dist/mission.js.map +1 -0
  63. package/dist/planner/index.d.ts +84 -0
  64. package/dist/planner/index.d.ts.map +1 -0
  65. package/dist/planner/index.js +486 -0
  66. package/dist/planner/index.js.map +1 -0
  67. package/dist/robots.d.ts +133 -0
  68. package/dist/robots.d.ts.map +1 -0
  69. package/dist/robots.js +220 -0
  70. package/dist/robots.js.map +1 -0
  71. package/dist/topic-utils.d.ts +47 -0
  72. package/dist/topic-utils.d.ts.map +1 -0
  73. package/dist/topic-utils.js +136 -0
  74. package/dist/topic-utils.js.map +1 -0
  75. package/dist/transport/factory.d.ts +10 -0
  76. package/dist/transport/factory.d.ts.map +1 -0
  77. package/dist/transport/factory.js +40 -0
  78. package/dist/transport/factory.js.map +1 -0
  79. package/dist/transport/local/conversion.d.ts +30 -0
  80. package/dist/transport/local/conversion.d.ts.map +1 -0
  81. package/dist/transport/local/conversion.js +340 -0
  82. package/dist/transport/local/conversion.js.map +1 -0
  83. package/dist/transport/local/entities.d.ts +34 -0
  84. package/dist/transport/local/entities.d.ts.map +1 -0
  85. package/dist/transport/local/entities.js +108 -0
  86. package/dist/transport/local/entities.js.map +1 -0
  87. package/dist/transport/local/transport.d.ts +53 -0
  88. package/dist/transport/local/transport.d.ts.map +1 -0
  89. package/dist/transport/local/transport.js +344 -0
  90. package/dist/transport/local/transport.js.map +1 -0
  91. package/dist/transport/rosbridge/actions.d.ts +30 -0
  92. package/dist/transport/rosbridge/actions.d.ts.map +1 -0
  93. package/dist/transport/rosbridge/actions.js +61 -0
  94. package/dist/transport/rosbridge/actions.js.map +1 -0
  95. package/dist/transport/rosbridge/adapter.d.ts +29 -0
  96. package/dist/transport/rosbridge/adapter.d.ts.map +1 -0
  97. package/dist/transport/rosbridge/adapter.js +108 -0
  98. package/dist/transport/rosbridge/adapter.js.map +1 -0
  99. package/dist/transport/rosbridge/client.d.ts +55 -0
  100. package/dist/transport/rosbridge/client.d.ts.map +1 -0
  101. package/dist/transport/rosbridge/client.js +375 -0
  102. package/dist/transport/rosbridge/client.js.map +1 -0
  103. package/dist/transport/rosbridge/services.d.ts +14 -0
  104. package/dist/transport/rosbridge/services.d.ts.map +1 -0
  105. package/dist/transport/rosbridge/services.js +25 -0
  106. package/dist/transport/rosbridge/services.js.map +1 -0
  107. package/dist/transport/rosbridge/topics.d.ts +28 -0
  108. package/dist/transport/rosbridge/topics.d.ts.map +1 -0
  109. package/dist/transport/rosbridge/topics.js +59 -0
  110. package/dist/transport/rosbridge/topics.js.map +1 -0
  111. package/dist/transport/rosbridge/types.d.ts +87 -0
  112. package/dist/transport/rosbridge/types.d.ts.map +1 -0
  113. package/dist/transport/rosbridge/types.js +6 -0
  114. package/dist/transport/rosbridge/types.js.map +1 -0
  115. package/dist/transport/transport.d.ts +39 -0
  116. package/dist/transport/transport.d.ts.map +1 -0
  117. package/dist/transport/transport.js +2 -0
  118. package/dist/transport/transport.js.map +1 -0
  119. package/dist/transport/types.d.ts +100 -0
  120. package/dist/transport/types.d.ts.map +1 -0
  121. package/dist/transport/types.js +5 -0
  122. package/dist/transport/types.js.map +1 -0
  123. package/dist/transport/webrtc/signaling-client.d.ts +38 -0
  124. package/dist/transport/webrtc/signaling-client.d.ts.map +1 -0
  125. package/dist/transport/webrtc/signaling-client.js +161 -0
  126. package/dist/transport/webrtc/signaling-client.js.map +1 -0
  127. package/dist/transport/webrtc/signaling-types.d.ts +112 -0
  128. package/dist/transport/webrtc/signaling-types.d.ts.map +1 -0
  129. package/dist/transport/webrtc/signaling-types.js +8 -0
  130. package/dist/transport/webrtc/signaling-types.js.map +1 -0
  131. package/dist/transport/webrtc/transport.d.ts +67 -0
  132. package/dist/transport/webrtc/transport.d.ts.map +1 -0
  133. package/dist/transport/webrtc/transport.js +406 -0
  134. package/dist/transport/webrtc/transport.js.map +1 -0
  135. package/dist/transport/zenoh/adapter.d.ts +47 -0
  136. package/dist/transport/zenoh/adapter.d.ts.map +1 -0
  137. package/dist/transport/zenoh/adapter.js +296 -0
  138. package/dist/transport/zenoh/adapter.js.map +1 -0
  139. package/dist/transport/zenoh/cdr.d.ts +17 -0
  140. package/dist/transport/zenoh/cdr.d.ts.map +1 -0
  141. package/dist/transport/zenoh/cdr.js +170 -0
  142. package/dist/transport/zenoh/cdr.js.map +1 -0
  143. package/dist/transport/zenoh/keys.d.ts +21 -0
  144. package/dist/transport/zenoh/keys.d.ts.map +1 -0
  145. package/dist/transport/zenoh/keys.js +44 -0
  146. package/dist/transport/zenoh/keys.js.map +1 -0
  147. package/dist/transport-pool.d.ts +74 -0
  148. package/dist/transport-pool.d.ts.map +1 -0
  149. package/dist/transport-pool.js +135 -0
  150. package/dist/transport-pool.js.map +1 -0
  151. package/package.json +80 -0
@@ -0,0 +1,1195 @@
1
+ import { z } from "zod";
2
+ import type { TransportConfig } from "./transport/types.js";
3
+ /**
4
+ * Per-robot transport override schema (Phase 1.d-resolve).
5
+ *
6
+ * Discriminated union on `mode`, each variant `.strict()` so that a
7
+ * typo like `{ mode: "zenoh", local: {...} }` fails fast at parse time
8
+ * instead of being silently stripped. Sub-sections are optional —
9
+ * `{ mode: "zenoh" }` is a valid override that inherits everything
10
+ * from the top-level `config.zenoh`. A partial sub-section like
11
+ * `{ mode: "zenoh", zenoh: { routerEndpoint: "ws://field:10000" } }`
12
+ * is merged per-field over the global config — see the resolver.
13
+ *
14
+ * Why a discriminated union (vs the top-level shape of sibling fields):
15
+ * - Keeps the override self-contained at one JSON property
16
+ * - Matches TransportConfig's runtime discriminated union 1:1
17
+ * - Trivially validatable per-robot without leaking across siblings
18
+ */
19
+ declare const RobotTransportOverrideSchema: z.ZodDiscriminatedUnion<"mode", [z.ZodObject<{
20
+ mode: z.ZodLiteral<"rosbridge">;
21
+ rosbridge: z.ZodOptional<z.ZodObject<{
22
+ url: z.ZodOptional<z.ZodString>;
23
+ reconnect: z.ZodOptional<z.ZodBoolean>;
24
+ reconnectInterval: z.ZodOptional<z.ZodNumber>;
25
+ }, "strip", z.ZodTypeAny, {
26
+ url?: string | undefined;
27
+ reconnect?: boolean | undefined;
28
+ reconnectInterval?: number | undefined;
29
+ }, {
30
+ url?: string | undefined;
31
+ reconnect?: boolean | undefined;
32
+ reconnectInterval?: number | undefined;
33
+ }>>;
34
+ }, "strict", z.ZodTypeAny, {
35
+ mode: "rosbridge";
36
+ rosbridge?: {
37
+ url?: string | undefined;
38
+ reconnect?: boolean | undefined;
39
+ reconnectInterval?: number | undefined;
40
+ } | undefined;
41
+ }, {
42
+ mode: "rosbridge";
43
+ rosbridge?: {
44
+ url?: string | undefined;
45
+ reconnect?: boolean | undefined;
46
+ reconnectInterval?: number | undefined;
47
+ } | undefined;
48
+ }>, z.ZodObject<{
49
+ mode: z.ZodLiteral<"local">;
50
+ local: z.ZodOptional<z.ZodObject<{
51
+ domainId: z.ZodOptional<z.ZodNumber>;
52
+ }, "strip", z.ZodTypeAny, {
53
+ domainId?: number | undefined;
54
+ }, {
55
+ domainId?: number | undefined;
56
+ }>>;
57
+ }, "strict", z.ZodTypeAny, {
58
+ mode: "local";
59
+ local?: {
60
+ domainId?: number | undefined;
61
+ } | undefined;
62
+ }, {
63
+ mode: "local";
64
+ local?: {
65
+ domainId?: number | undefined;
66
+ } | undefined;
67
+ }>, z.ZodObject<{
68
+ mode: z.ZodLiteral<"zenoh">;
69
+ zenoh: z.ZodOptional<z.ZodObject<{
70
+ routerEndpoint: z.ZodOptional<z.ZodString>;
71
+ domainId: z.ZodOptional<z.ZodNumber>;
72
+ keyFormat: z.ZodOptional<z.ZodEnum<["ros2dds", "rmw_zenoh"]>>;
73
+ bridgeNamespace: z.ZodOptional<z.ZodString>;
74
+ }, "strip", z.ZodTypeAny, {
75
+ routerEndpoint?: string | undefined;
76
+ domainId?: number | undefined;
77
+ keyFormat?: "ros2dds" | "rmw_zenoh" | undefined;
78
+ bridgeNamespace?: string | undefined;
79
+ }, {
80
+ routerEndpoint?: string | undefined;
81
+ domainId?: number | undefined;
82
+ keyFormat?: "ros2dds" | "rmw_zenoh" | undefined;
83
+ bridgeNamespace?: string | undefined;
84
+ }>>;
85
+ }, "strict", z.ZodTypeAny, {
86
+ mode: "zenoh";
87
+ zenoh?: {
88
+ routerEndpoint?: string | undefined;
89
+ domainId?: number | undefined;
90
+ keyFormat?: "ros2dds" | "rmw_zenoh" | undefined;
91
+ bridgeNamespace?: string | undefined;
92
+ } | undefined;
93
+ }, {
94
+ mode: "zenoh";
95
+ zenoh?: {
96
+ routerEndpoint?: string | undefined;
97
+ domainId?: number | undefined;
98
+ keyFormat?: "ros2dds" | "rmw_zenoh" | undefined;
99
+ bridgeNamespace?: string | undefined;
100
+ } | undefined;
101
+ }>, z.ZodObject<{
102
+ mode: z.ZodLiteral<"webrtc">;
103
+ webrtc: z.ZodOptional<z.ZodObject<{
104
+ signalingUrl: z.ZodOptional<z.ZodString>;
105
+ apiUrl: z.ZodOptional<z.ZodString>;
106
+ robotId: z.ZodOptional<z.ZodString>;
107
+ robotKey: z.ZodOptional<z.ZodString>;
108
+ iceServers: z.ZodOptional<z.ZodArray<z.ZodObject<{
109
+ urls: z.ZodUnion<[z.ZodString, z.ZodArray<z.ZodString, "many">]>;
110
+ username: z.ZodOptional<z.ZodString>;
111
+ credential: z.ZodOptional<z.ZodString>;
112
+ }, "strip", z.ZodTypeAny, {
113
+ urls: string | string[];
114
+ username?: string | undefined;
115
+ credential?: string | undefined;
116
+ }, {
117
+ urls: string | string[];
118
+ username?: string | undefined;
119
+ credential?: string | undefined;
120
+ }>, "many">>;
121
+ }, "strip", z.ZodTypeAny, {
122
+ signalingUrl?: string | undefined;
123
+ apiUrl?: string | undefined;
124
+ robotId?: string | undefined;
125
+ robotKey?: string | undefined;
126
+ iceServers?: {
127
+ urls: string | string[];
128
+ username?: string | undefined;
129
+ credential?: string | undefined;
130
+ }[] | undefined;
131
+ }, {
132
+ signalingUrl?: string | undefined;
133
+ apiUrl?: string | undefined;
134
+ robotId?: string | undefined;
135
+ robotKey?: string | undefined;
136
+ iceServers?: {
137
+ urls: string | string[];
138
+ username?: string | undefined;
139
+ credential?: string | undefined;
140
+ }[] | undefined;
141
+ }>>;
142
+ }, "strict", z.ZodTypeAny, {
143
+ mode: "webrtc";
144
+ webrtc?: {
145
+ signalingUrl?: string | undefined;
146
+ apiUrl?: string | undefined;
147
+ robotId?: string | undefined;
148
+ robotKey?: string | undefined;
149
+ iceServers?: {
150
+ urls: string | string[];
151
+ username?: string | undefined;
152
+ credential?: string | undefined;
153
+ }[] | undefined;
154
+ } | undefined;
155
+ }, {
156
+ mode: "webrtc";
157
+ webrtc?: {
158
+ signalingUrl?: string | undefined;
159
+ apiUrl?: string | undefined;
160
+ robotId?: string | undefined;
161
+ robotKey?: string | undefined;
162
+ iceServers?: {
163
+ urls: string | string[];
164
+ username?: string | undefined;
165
+ credential?: string | undefined;
166
+ }[] | undefined;
167
+ } | undefined;
168
+ }>]>;
169
+ export type RobotTransportOverride = z.infer<typeof RobotTransportOverrideSchema>;
170
+ export declare const AgenticROSConfigSchema: z.ZodObject<{
171
+ transport: z.ZodDefault<z.ZodObject<{
172
+ /**
173
+ * Default is "local" — assumes the gateway is co-located with the robot
174
+ * (Mode A: DDS direct via rclnodejs, no router). Switch to "rosbridge",
175
+ * "zenoh", or "webrtc" when the gateway runs off-robot.
176
+ */
177
+ mode: z.ZodDefault<z.ZodEnum<["rosbridge", "local", "webrtc", "zenoh"]>>;
178
+ }, "strip", z.ZodTypeAny, {
179
+ mode: "rosbridge" | "local" | "webrtc" | "zenoh";
180
+ }, {
181
+ mode?: "rosbridge" | "local" | "webrtc" | "zenoh" | undefined;
182
+ }>>;
183
+ zenoh: z.ZodDefault<z.ZodObject<{
184
+ /** WebSocket URL for zenoh-ts (zenoh-plugin-remote-api). Not tcp/ — use e.g. ws://localhost:10000 */
185
+ routerEndpoint: z.ZodDefault<z.ZodString>;
186
+ domainId: z.ZodDefault<z.ZodNumber>;
187
+ /** "ros2dds" = zenoh-bridge-ros2dds key format (slashes kept). "rmw_zenoh" = rmw_zenoh key format (domain + %). */
188
+ keyFormat: z.ZodDefault<z.ZodEnum<["ros2dds", "rmw_zenoh"]>>;
189
+ /**
190
+ * Must match zenoh-bridge-ros2dds `plugins.ros2dds.namespace` when it is not the default "/".
191
+ * Example: bridge has `namespace: "/bot1"` → set `bridgeNamespace` to "/bot1" or "bot1".
192
+ * Omit or use "/" when the bridge uses the default (only the ROS topic path is the zenoh key).
193
+ */
194
+ bridgeNamespace: z.ZodOptional<z.ZodString>;
195
+ }, "strip", z.ZodTypeAny, {
196
+ routerEndpoint: string;
197
+ domainId: number;
198
+ keyFormat: "ros2dds" | "rmw_zenoh";
199
+ bridgeNamespace?: string | undefined;
200
+ }, {
201
+ routerEndpoint?: string | undefined;
202
+ domainId?: number | undefined;
203
+ keyFormat?: "ros2dds" | "rmw_zenoh" | undefined;
204
+ bridgeNamespace?: string | undefined;
205
+ }>>;
206
+ rosbridge: z.ZodDefault<z.ZodObject<{
207
+ url: z.ZodDefault<z.ZodString>;
208
+ reconnect: z.ZodDefault<z.ZodBoolean>;
209
+ reconnectInterval: z.ZodDefault<z.ZodNumber>;
210
+ }, "strip", z.ZodTypeAny, {
211
+ url: string;
212
+ reconnect: boolean;
213
+ reconnectInterval: number;
214
+ }, {
215
+ url?: string | undefined;
216
+ reconnect?: boolean | undefined;
217
+ reconnectInterval?: number | undefined;
218
+ }>>;
219
+ local: z.ZodDefault<z.ZodObject<{
220
+ domainId: z.ZodDefault<z.ZodNumber>;
221
+ }, "strip", z.ZodTypeAny, {
222
+ domainId: number;
223
+ }, {
224
+ domainId?: number | undefined;
225
+ }>>;
226
+ webrtc: z.ZodDefault<z.ZodObject<{
227
+ signalingUrl: z.ZodDefault<z.ZodString>;
228
+ apiUrl: z.ZodDefault<z.ZodString>;
229
+ robotId: z.ZodDefault<z.ZodString>;
230
+ robotKey: z.ZodDefault<z.ZodString>;
231
+ iceServers: z.ZodDefault<z.ZodArray<z.ZodObject<{
232
+ urls: z.ZodUnion<[z.ZodString, z.ZodArray<z.ZodString, "many">]>;
233
+ username: z.ZodOptional<z.ZodString>;
234
+ credential: z.ZodOptional<z.ZodString>;
235
+ }, "strip", z.ZodTypeAny, {
236
+ urls: string | string[];
237
+ username?: string | undefined;
238
+ credential?: string | undefined;
239
+ }, {
240
+ urls: string | string[];
241
+ username?: string | undefined;
242
+ credential?: string | undefined;
243
+ }>, "many">>;
244
+ }, "strip", z.ZodTypeAny, {
245
+ signalingUrl: string;
246
+ apiUrl: string;
247
+ robotId: string;
248
+ robotKey: string;
249
+ iceServers: {
250
+ urls: string | string[];
251
+ username?: string | undefined;
252
+ credential?: string | undefined;
253
+ }[];
254
+ }, {
255
+ signalingUrl?: string | undefined;
256
+ apiUrl?: string | undefined;
257
+ robotId?: string | undefined;
258
+ robotKey?: string | undefined;
259
+ iceServers?: {
260
+ urls: string | string[];
261
+ username?: string | undefined;
262
+ credential?: string | undefined;
263
+ }[] | undefined;
264
+ }>>;
265
+ robot: z.ZodDefault<z.ZodObject<{
266
+ name: z.ZodDefault<z.ZodString>;
267
+ namespace: z.ZodDefault<z.ZodString>;
268
+ /** 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. */
269
+ cameraTopic: z.ZodDefault<z.ZodString>;
270
+ }, "strip", z.ZodTypeAny, {
271
+ name: string;
272
+ namespace: string;
273
+ cameraTopic: string;
274
+ }, {
275
+ name?: string | undefined;
276
+ namespace?: string | undefined;
277
+ cameraTopic?: string | undefined;
278
+ }>>;
279
+ /**
280
+ * Phase 1.d multi-robot list. When non-empty, this is the source of
281
+ * truth for `ros2_list_robots` and (in a follow-up) the per-tool
282
+ * `robot_id` parameter. When empty, the legacy single-robot
283
+ * `config.robot` above is synthesised into a one-entry list at
284
+ * resolution time (see packages/core/src/robots.ts). Existing configs
285
+ * keep working unchanged; this field is opt-in.
286
+ *
287
+ * Mark one entry with `default: true` to make it the active robot
288
+ * even when it isn't the first in the list. Otherwise the first entry
289
+ * wins.
290
+ */
291
+ robots: z.ZodDefault<z.ZodArray<z.ZodObject<{
292
+ /** Stable, human-readable identifier referenced by `robot_id` arguments. */
293
+ id: z.ZodString;
294
+ name: z.ZodDefault<z.ZodString>;
295
+ namespace: z.ZodDefault<z.ZodString>;
296
+ cameraTopic: z.ZodDefault<z.ZodString>;
297
+ default: z.ZodOptional<z.ZodBoolean>;
298
+ /**
299
+ * Phase 1.e robot kind ("amr" | "arm" | "drone" | "rover" | …).
300
+ *
301
+ * Free-form string so users can invent their own taxonomy, but the
302
+ * documented set is `amr` (autonomous mobile robot), `arm`,
303
+ * `drone`, and `rover`. Consumed by `ros2_find_robots_for(kind=…)`
304
+ * so an agent can ask "find me an AMR with a depth camera that
305
+ * can follow_person" and the platform filters the fleet.
306
+ *
307
+ * Defaults to "amr" (back-compat: every existing robot today is
308
+ * an AMR), so the field stays useful even when the user hasn't
309
+ * tagged their robots explicitly.
310
+ */
311
+ kind: z.ZodDefault<z.ZodString>;
312
+ /**
313
+ * Phase 1.e sensor/hardware tags.
314
+ *
315
+ * Lets `ros2_find_robots_for` answer questions like "which
316
+ * robots have a depth camera" without subscribing to topics or
317
+ * inspecting the URDF. All flags default to false — set them
318
+ * explicitly per robot via the CLI (`--sensors=has_realsense`)
319
+ * or by hand-editing `~/.agenticros/config.json`.
320
+ *
321
+ * The list is intentionally short for Phase 1; expand it as we
322
+ * accumulate seed-catalog skills that depend on a specific
323
+ * hardware capability (lidar SLAM, arm grasping, etc.).
324
+ */
325
+ sensors: z.ZodDefault<z.ZodObject<{
326
+ has_realsense: z.ZodDefault<z.ZodBoolean>;
327
+ has_lidar: z.ZodDefault<z.ZodBoolean>;
328
+ has_arm: z.ZodDefault<z.ZodBoolean>;
329
+ }, "strip", z.ZodTypeAny, {
330
+ has_realsense: boolean;
331
+ has_lidar: boolean;
332
+ has_arm: boolean;
333
+ }, {
334
+ has_realsense?: boolean | undefined;
335
+ has_lidar?: boolean | undefined;
336
+ has_arm?: boolean | undefined;
337
+ }>>;
338
+ /**
339
+ * Phase 1.e optional per-robot capability allowlist.
340
+ *
341
+ * When set, restricts which capabilities `ros2_find_robots_for`
342
+ * considers this robot capable of. When unset (the common
343
+ * case), the robot inherits the gateway's global capability
344
+ * registry (the union of built-in verbs plus every loaded
345
+ * skill's capabilities). Useful in heterogeneous fleets where
346
+ * one robot has the arm skill loaded and another doesn't.
347
+ */
348
+ capabilities: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
349
+ /**
350
+ * Phase 1.d-resolve per-robot transport override.
351
+ *
352
+ * When set, this robot uses its own transport instead of the
353
+ * top-level `config.transport.*`. Useful when one host drives
354
+ * BOTH a local sim (mode: "local") AND a real robot reached via
355
+ * an off-robot bridge (mode: "zenoh" / "rosbridge") — each
356
+ * robot connects through the right path with no global config
357
+ * juggling.
358
+ *
359
+ * Sub-sections (`zenoh`, `rosbridge`, `local`, `webrtc`) are
360
+ * optional inside the override: omit them to inherit the global
361
+ * `config.<section>` defaults; set them to override only the
362
+ * fields you need (e.g. a different router endpoint).
363
+ *
364
+ * Consumed by `getTransportConfigForRobot(config, robotId)` in
365
+ * robots.ts. Adapters opt in to multi-transport pools — when
366
+ * the override is absent they keep using the single global
367
+ * transport, so existing single-robot deployments are
368
+ * unaffected.
369
+ */
370
+ transport: z.ZodOptional<z.ZodDiscriminatedUnion<"mode", [z.ZodObject<{
371
+ mode: z.ZodLiteral<"rosbridge">;
372
+ rosbridge: z.ZodOptional<z.ZodObject<{
373
+ url: z.ZodOptional<z.ZodString>;
374
+ reconnect: z.ZodOptional<z.ZodBoolean>;
375
+ reconnectInterval: z.ZodOptional<z.ZodNumber>;
376
+ }, "strip", z.ZodTypeAny, {
377
+ url?: string | undefined;
378
+ reconnect?: boolean | undefined;
379
+ reconnectInterval?: number | undefined;
380
+ }, {
381
+ url?: string | undefined;
382
+ reconnect?: boolean | undefined;
383
+ reconnectInterval?: number | undefined;
384
+ }>>;
385
+ }, "strict", z.ZodTypeAny, {
386
+ mode: "rosbridge";
387
+ rosbridge?: {
388
+ url?: string | undefined;
389
+ reconnect?: boolean | undefined;
390
+ reconnectInterval?: number | undefined;
391
+ } | undefined;
392
+ }, {
393
+ mode: "rosbridge";
394
+ rosbridge?: {
395
+ url?: string | undefined;
396
+ reconnect?: boolean | undefined;
397
+ reconnectInterval?: number | undefined;
398
+ } | undefined;
399
+ }>, z.ZodObject<{
400
+ mode: z.ZodLiteral<"local">;
401
+ local: z.ZodOptional<z.ZodObject<{
402
+ domainId: z.ZodOptional<z.ZodNumber>;
403
+ }, "strip", z.ZodTypeAny, {
404
+ domainId?: number | undefined;
405
+ }, {
406
+ domainId?: number | undefined;
407
+ }>>;
408
+ }, "strict", z.ZodTypeAny, {
409
+ mode: "local";
410
+ local?: {
411
+ domainId?: number | undefined;
412
+ } | undefined;
413
+ }, {
414
+ mode: "local";
415
+ local?: {
416
+ domainId?: number | undefined;
417
+ } | undefined;
418
+ }>, z.ZodObject<{
419
+ mode: z.ZodLiteral<"zenoh">;
420
+ zenoh: z.ZodOptional<z.ZodObject<{
421
+ routerEndpoint: z.ZodOptional<z.ZodString>;
422
+ domainId: z.ZodOptional<z.ZodNumber>;
423
+ keyFormat: z.ZodOptional<z.ZodEnum<["ros2dds", "rmw_zenoh"]>>;
424
+ bridgeNamespace: z.ZodOptional<z.ZodString>;
425
+ }, "strip", z.ZodTypeAny, {
426
+ routerEndpoint?: string | undefined;
427
+ domainId?: number | undefined;
428
+ keyFormat?: "ros2dds" | "rmw_zenoh" | undefined;
429
+ bridgeNamespace?: string | undefined;
430
+ }, {
431
+ routerEndpoint?: string | undefined;
432
+ domainId?: number | undefined;
433
+ keyFormat?: "ros2dds" | "rmw_zenoh" | undefined;
434
+ bridgeNamespace?: string | undefined;
435
+ }>>;
436
+ }, "strict", z.ZodTypeAny, {
437
+ mode: "zenoh";
438
+ zenoh?: {
439
+ routerEndpoint?: string | undefined;
440
+ domainId?: number | undefined;
441
+ keyFormat?: "ros2dds" | "rmw_zenoh" | undefined;
442
+ bridgeNamespace?: string | undefined;
443
+ } | undefined;
444
+ }, {
445
+ mode: "zenoh";
446
+ zenoh?: {
447
+ routerEndpoint?: string | undefined;
448
+ domainId?: number | undefined;
449
+ keyFormat?: "ros2dds" | "rmw_zenoh" | undefined;
450
+ bridgeNamespace?: string | undefined;
451
+ } | undefined;
452
+ }>, z.ZodObject<{
453
+ mode: z.ZodLiteral<"webrtc">;
454
+ webrtc: z.ZodOptional<z.ZodObject<{
455
+ signalingUrl: z.ZodOptional<z.ZodString>;
456
+ apiUrl: z.ZodOptional<z.ZodString>;
457
+ robotId: z.ZodOptional<z.ZodString>;
458
+ robotKey: z.ZodOptional<z.ZodString>;
459
+ iceServers: z.ZodOptional<z.ZodArray<z.ZodObject<{
460
+ urls: z.ZodUnion<[z.ZodString, z.ZodArray<z.ZodString, "many">]>;
461
+ username: z.ZodOptional<z.ZodString>;
462
+ credential: z.ZodOptional<z.ZodString>;
463
+ }, "strip", z.ZodTypeAny, {
464
+ urls: string | string[];
465
+ username?: string | undefined;
466
+ credential?: string | undefined;
467
+ }, {
468
+ urls: string | string[];
469
+ username?: string | undefined;
470
+ credential?: string | undefined;
471
+ }>, "many">>;
472
+ }, "strip", z.ZodTypeAny, {
473
+ signalingUrl?: string | undefined;
474
+ apiUrl?: string | undefined;
475
+ robotId?: string | undefined;
476
+ robotKey?: string | undefined;
477
+ iceServers?: {
478
+ urls: string | string[];
479
+ username?: string | undefined;
480
+ credential?: string | undefined;
481
+ }[] | undefined;
482
+ }, {
483
+ signalingUrl?: string | undefined;
484
+ apiUrl?: string | undefined;
485
+ robotId?: string | undefined;
486
+ robotKey?: string | undefined;
487
+ iceServers?: {
488
+ urls: string | string[];
489
+ username?: string | undefined;
490
+ credential?: string | undefined;
491
+ }[] | undefined;
492
+ }>>;
493
+ }, "strict", z.ZodTypeAny, {
494
+ mode: "webrtc";
495
+ webrtc?: {
496
+ signalingUrl?: string | undefined;
497
+ apiUrl?: string | undefined;
498
+ robotId?: string | undefined;
499
+ robotKey?: string | undefined;
500
+ iceServers?: {
501
+ urls: string | string[];
502
+ username?: string | undefined;
503
+ credential?: string | undefined;
504
+ }[] | undefined;
505
+ } | undefined;
506
+ }, {
507
+ mode: "webrtc";
508
+ webrtc?: {
509
+ signalingUrl?: string | undefined;
510
+ apiUrl?: string | undefined;
511
+ robotId?: string | undefined;
512
+ robotKey?: string | undefined;
513
+ iceServers?: {
514
+ urls: string | string[];
515
+ username?: string | undefined;
516
+ credential?: string | undefined;
517
+ }[] | undefined;
518
+ } | undefined;
519
+ }>]>>;
520
+ }, "strip", z.ZodTypeAny, {
521
+ name: string;
522
+ namespace: string;
523
+ cameraTopic: string;
524
+ id: string;
525
+ kind: string;
526
+ sensors: {
527
+ has_realsense: boolean;
528
+ has_lidar: boolean;
529
+ has_arm: boolean;
530
+ };
531
+ transport?: {
532
+ mode: "rosbridge";
533
+ rosbridge?: {
534
+ url?: string | undefined;
535
+ reconnect?: boolean | undefined;
536
+ reconnectInterval?: number | undefined;
537
+ } | undefined;
538
+ } | {
539
+ mode: "local";
540
+ local?: {
541
+ domainId?: number | undefined;
542
+ } | undefined;
543
+ } | {
544
+ mode: "zenoh";
545
+ zenoh?: {
546
+ routerEndpoint?: string | undefined;
547
+ domainId?: number | undefined;
548
+ keyFormat?: "ros2dds" | "rmw_zenoh" | undefined;
549
+ bridgeNamespace?: string | undefined;
550
+ } | undefined;
551
+ } | {
552
+ mode: "webrtc";
553
+ webrtc?: {
554
+ signalingUrl?: string | undefined;
555
+ apiUrl?: string | undefined;
556
+ robotId?: string | undefined;
557
+ robotKey?: string | undefined;
558
+ iceServers?: {
559
+ urls: string | string[];
560
+ username?: string | undefined;
561
+ credential?: string | undefined;
562
+ }[] | undefined;
563
+ } | undefined;
564
+ } | undefined;
565
+ default?: boolean | undefined;
566
+ capabilities?: string[] | undefined;
567
+ }, {
568
+ id: string;
569
+ transport?: {
570
+ mode: "rosbridge";
571
+ rosbridge?: {
572
+ url?: string | undefined;
573
+ reconnect?: boolean | undefined;
574
+ reconnectInterval?: number | undefined;
575
+ } | undefined;
576
+ } | {
577
+ mode: "local";
578
+ local?: {
579
+ domainId?: number | undefined;
580
+ } | undefined;
581
+ } | {
582
+ mode: "zenoh";
583
+ zenoh?: {
584
+ routerEndpoint?: string | undefined;
585
+ domainId?: number | undefined;
586
+ keyFormat?: "ros2dds" | "rmw_zenoh" | undefined;
587
+ bridgeNamespace?: string | undefined;
588
+ } | undefined;
589
+ } | {
590
+ mode: "webrtc";
591
+ webrtc?: {
592
+ signalingUrl?: string | undefined;
593
+ apiUrl?: string | undefined;
594
+ robotId?: string | undefined;
595
+ robotKey?: string | undefined;
596
+ iceServers?: {
597
+ urls: string | string[];
598
+ username?: string | undefined;
599
+ credential?: string | undefined;
600
+ }[] | undefined;
601
+ } | undefined;
602
+ } | undefined;
603
+ name?: string | undefined;
604
+ namespace?: string | undefined;
605
+ cameraTopic?: string | undefined;
606
+ default?: boolean | undefined;
607
+ kind?: string | undefined;
608
+ sensors?: {
609
+ has_realsense?: boolean | undefined;
610
+ has_lidar?: boolean | undefined;
611
+ has_arm?: boolean | undefined;
612
+ } | undefined;
613
+ capabilities?: string[] | undefined;
614
+ }>, "many">>;
615
+ /** Phase 3 teleop web app: camera + twist controls. */
616
+ teleop: z.ZodDefault<z.ZodObject<{
617
+ /** Default camera topic when only one source or as default selection. Falls back to robot.cameraTopic then RealSense default. */
618
+ cameraTopic: z.ZodDefault<z.ZodString>;
619
+ /** Explicit list of camera sources for the selector; if empty, derived from listTopics() filtered by Image/CompressedImage. */
620
+ cameraTopics: z.ZodDefault<z.ZodArray<z.ZodObject<{
621
+ topic: z.ZodString;
622
+ label: z.ZodOptional<z.ZodString>;
623
+ }, "strip", z.ZodTypeAny, {
624
+ topic: string;
625
+ label?: string | undefined;
626
+ }, {
627
+ topic: string;
628
+ label?: string | undefined;
629
+ }>, "many">>;
630
+ /** cmd_vel topic override (default from robot namespace). */
631
+ cmdVelTopic: z.ZodDefault<z.ZodString>;
632
+ /** Default linear speed (m/s) for teleop. */
633
+ speedDefault: z.ZodDefault<z.ZodNumber>;
634
+ /** Camera poll interval in ms for the teleop page. */
635
+ cameraPollMs: z.ZodDefault<z.ZodNumber>;
636
+ }, "strip", z.ZodTypeAny, {
637
+ cameraTopic: string;
638
+ cameraTopics: {
639
+ topic: string;
640
+ label?: string | undefined;
641
+ }[];
642
+ cmdVelTopic: string;
643
+ speedDefault: number;
644
+ cameraPollMs: number;
645
+ }, {
646
+ cameraTopic?: string | undefined;
647
+ cameraTopics?: {
648
+ topic: string;
649
+ label?: string | undefined;
650
+ }[] | undefined;
651
+ cmdVelTopic?: string | undefined;
652
+ speedDefault?: number | undefined;
653
+ cameraPollMs?: number | undefined;
654
+ }>>;
655
+ safety: z.ZodDefault<z.ZodObject<{
656
+ maxLinearVelocity: z.ZodDefault<z.ZodNumber>;
657
+ maxAngularVelocity: z.ZodDefault<z.ZodNumber>;
658
+ workspaceLimits: z.ZodDefault<z.ZodObject<{
659
+ xMin: z.ZodDefault<z.ZodNumber>;
660
+ xMax: z.ZodDefault<z.ZodNumber>;
661
+ yMin: z.ZodDefault<z.ZodNumber>;
662
+ yMax: z.ZodDefault<z.ZodNumber>;
663
+ }, "strip", z.ZodTypeAny, {
664
+ xMin: number;
665
+ xMax: number;
666
+ yMin: number;
667
+ yMax: number;
668
+ }, {
669
+ xMin?: number | undefined;
670
+ xMax?: number | undefined;
671
+ yMin?: number | undefined;
672
+ yMax?: number | undefined;
673
+ }>>;
674
+ }, "strip", z.ZodTypeAny, {
675
+ maxLinearVelocity: number;
676
+ maxAngularVelocity: number;
677
+ workspaceLimits: {
678
+ xMin: number;
679
+ xMax: number;
680
+ yMin: number;
681
+ yMax: number;
682
+ };
683
+ }, {
684
+ maxLinearVelocity?: number | undefined;
685
+ maxAngularVelocity?: number | undefined;
686
+ workspaceLimits?: {
687
+ xMin?: number | undefined;
688
+ xMax?: number | undefined;
689
+ yMin?: number | undefined;
690
+ yMax?: number | undefined;
691
+ } | undefined;
692
+ }>>;
693
+ /**
694
+ * Optional in-plugin image describer.
695
+ *
696
+ * When the primary chat model is text-only (e.g. Ollama qwen2.5:7b),
697
+ * OpenClaw filters image content blocks out of tool results before the
698
+ * LLM ever sees them, so `ros2_camera_snapshot` cannot be described.
699
+ * Configuring an OpenAI-compatible chat completions endpoint here lets
700
+ * the plugin call a vision model itself and embed the description text
701
+ * directly in the snapshot tool result.
702
+ *
703
+ * Recommended Jetson setup: point at local Ollama with a VL model:
704
+ * url: "http://host.docker.internal:11434/v1/chat/completions"
705
+ * model: "qwen2.5vl:7b"
706
+ *
707
+ * If `enabled: false`, the snapshot result includes only the camera URL
708
+ * and the agent is on its own (suitable when the primary model is
709
+ * multimodal and OpenClaw does not need to filter images).
710
+ */
711
+ describer: z.ZodDefault<z.ZodObject<{
712
+ enabled: z.ZodDefault<z.ZodBoolean>;
713
+ /** OpenAI-compat chat completions endpoint URL. */
714
+ url: z.ZodDefault<z.ZodString>;
715
+ /** Optional Bearer token / API key for the endpoint. */
716
+ apiKey: z.ZodOptional<z.ZodString>;
717
+ /** Vision model id (must accept OpenAI `image_url` content blocks). */
718
+ model: z.ZodDefault<z.ZodString>;
719
+ /** Prompt sent alongside the image. */
720
+ prompt: z.ZodDefault<z.ZodString>;
721
+ /** Max tokens for the description. */
722
+ maxTokens: z.ZodDefault<z.ZodNumber>;
723
+ /** Request timeout in ms. */
724
+ timeoutMs: z.ZodDefault<z.ZodNumber>;
725
+ /**
726
+ * Resize images larger than this max dimension before sending to the
727
+ * VL model. Reduces token usage and latency. Set to 0 to disable.
728
+ */
729
+ maxImageDimension: z.ZodDefault<z.ZodNumber>;
730
+ }, "strip", z.ZodTypeAny, {
731
+ url: string;
732
+ enabled: boolean;
733
+ model: string;
734
+ prompt: string;
735
+ maxTokens: number;
736
+ timeoutMs: number;
737
+ maxImageDimension: number;
738
+ apiKey?: string | undefined;
739
+ }, {
740
+ url?: string | undefined;
741
+ enabled?: boolean | undefined;
742
+ apiKey?: string | undefined;
743
+ model?: string | undefined;
744
+ prompt?: string | undefined;
745
+ maxTokens?: number | undefined;
746
+ timeoutMs?: number | undefined;
747
+ maxImageDimension?: number | undefined;
748
+ }>>;
749
+ /**
750
+ * Optional cross-adapter semantic memory subsystem.
751
+ *
752
+ * When `enabled: true`, OpenClaw, Claude Code, and Gemini adapters all
753
+ * register four memory tools (memory_remember / memory_recall /
754
+ * memory_forget / memory_status) backed by a shared store. Default is
755
+ * off — zero new deps when disabled.
756
+ *
757
+ * See docs/memory.md for ready-to-paste recipes.
758
+ */
759
+ memory: z.ZodDefault<z.ZodObject<{
760
+ /** Master switch. When false, adapters skip registering memory tools. */
761
+ enabled: z.ZodDefault<z.ZodBoolean>;
762
+ /** Which backend to use. "local" has no extra deps; "mem0" needs `pnpm add mem0ai`. */
763
+ backend: z.ZodDefault<z.ZodEnum<["local", "mem0"]>>;
764
+ /** Override the per-record namespace. Defaults to robot.namespace at call time. */
765
+ namespace: z.ZodOptional<z.ZodString>;
766
+ local: z.ZodDefault<z.ZodObject<{
767
+ /** JSON-on-disk store path. Supports leading "~/". */
768
+ storePath: z.ZodDefault<z.ZodString>;
769
+ }, "strip", z.ZodTypeAny, {
770
+ storePath: string;
771
+ }, {
772
+ storePath?: string | undefined;
773
+ }>>;
774
+ mem0: z.ZodDefault<z.ZodObject<{
775
+ /**
776
+ * When true, mem0 runs its LLM-driven fact extraction on `add`.
777
+ * When false (default), content is stored as-is — predictable,
778
+ * no LLM call on write, agent stays in explicit control.
779
+ */
780
+ inferOnWrite: z.ZodDefault<z.ZodBoolean>;
781
+ /** SQLite history db path (mem0 historyDbPath). Supports leading "~/". */
782
+ historyDbPath: z.ZodDefault<z.ZodString>;
783
+ /**
784
+ * Embedder passed verbatim to `new Memory({ embedder })`.
785
+ * When omitted, the factory auto-detects: Ollama (if reachable)
786
+ * → OpenAI (if OPENAI_API_KEY set) → error.
787
+ */
788
+ embedder: z.ZodOptional<z.ZodObject<{
789
+ provider: z.ZodString;
790
+ config: z.ZodRecord<z.ZodString, z.ZodUnknown>;
791
+ }, "strip", z.ZodTypeAny, {
792
+ provider: string;
793
+ config: Record<string, unknown>;
794
+ }, {
795
+ provider: string;
796
+ config: Record<string, unknown>;
797
+ }>>;
798
+ /** Vector store passed verbatim to `new Memory({ vectorStore })`. */
799
+ vectorStore: z.ZodOptional<z.ZodObject<{
800
+ provider: z.ZodString;
801
+ config: z.ZodRecord<z.ZodString, z.ZodUnknown>;
802
+ }, "strip", z.ZodTypeAny, {
803
+ provider: string;
804
+ config: Record<string, unknown>;
805
+ }, {
806
+ provider: string;
807
+ config: Record<string, unknown>;
808
+ }>>;
809
+ /** LLM passed verbatim to `new Memory({ llm })`. Only used when inferOnWrite is true. */
810
+ llm: z.ZodOptional<z.ZodObject<{
811
+ provider: z.ZodString;
812
+ config: z.ZodRecord<z.ZodString, z.ZodUnknown>;
813
+ }, "strip", z.ZodTypeAny, {
814
+ provider: string;
815
+ config: Record<string, unknown>;
816
+ }, {
817
+ provider: string;
818
+ config: Record<string, unknown>;
819
+ }>>;
820
+ }, "strip", z.ZodTypeAny, {
821
+ inferOnWrite: boolean;
822
+ historyDbPath: string;
823
+ embedder?: {
824
+ provider: string;
825
+ config: Record<string, unknown>;
826
+ } | undefined;
827
+ vectorStore?: {
828
+ provider: string;
829
+ config: Record<string, unknown>;
830
+ } | undefined;
831
+ llm?: {
832
+ provider: string;
833
+ config: Record<string, unknown>;
834
+ } | undefined;
835
+ }, {
836
+ inferOnWrite?: boolean | undefined;
837
+ historyDbPath?: string | undefined;
838
+ embedder?: {
839
+ provider: string;
840
+ config: Record<string, unknown>;
841
+ } | undefined;
842
+ vectorStore?: {
843
+ provider: string;
844
+ config: Record<string, unknown>;
845
+ } | undefined;
846
+ llm?: {
847
+ provider: string;
848
+ config: Record<string, unknown>;
849
+ } | undefined;
850
+ }>>;
851
+ }, "strip", z.ZodTypeAny, {
852
+ local: {
853
+ storePath: string;
854
+ };
855
+ enabled: boolean;
856
+ mem0: {
857
+ inferOnWrite: boolean;
858
+ historyDbPath: string;
859
+ embedder?: {
860
+ provider: string;
861
+ config: Record<string, unknown>;
862
+ } | undefined;
863
+ vectorStore?: {
864
+ provider: string;
865
+ config: Record<string, unknown>;
866
+ } | undefined;
867
+ llm?: {
868
+ provider: string;
869
+ config: Record<string, unknown>;
870
+ } | undefined;
871
+ };
872
+ backend: "local" | "mem0";
873
+ namespace?: string | undefined;
874
+ }, {
875
+ local?: {
876
+ storePath?: string | undefined;
877
+ } | undefined;
878
+ namespace?: string | undefined;
879
+ enabled?: boolean | undefined;
880
+ mem0?: {
881
+ inferOnWrite?: boolean | undefined;
882
+ historyDbPath?: string | undefined;
883
+ embedder?: {
884
+ provider: string;
885
+ config: Record<string, unknown>;
886
+ } | undefined;
887
+ vectorStore?: {
888
+ provider: string;
889
+ config: Record<string, unknown>;
890
+ } | undefined;
891
+ llm?: {
892
+ provider: string;
893
+ config: Record<string, unknown>;
894
+ } | undefined;
895
+ } | undefined;
896
+ backend?: "local" | "mem0" | undefined;
897
+ }>>;
898
+ /** Per-skill config. Keys are skill ids (e.g. followme). Each skill validates its own slice. */
899
+ skills: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
900
+ /** Directories to scan for skill packages (package.json with an `agenticros` block). Resolved at gateway start. */
901
+ skillPaths: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
902
+ /** Npm (or local) package names to load as skills. Resolved via require.resolve from plugin context. */
903
+ skillPackages: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
904
+ }, "strip", z.ZodTypeAny, {
905
+ rosbridge: {
906
+ url: string;
907
+ reconnect: boolean;
908
+ reconnectInterval: number;
909
+ };
910
+ local: {
911
+ domainId: number;
912
+ };
913
+ webrtc: {
914
+ signalingUrl: string;
915
+ apiUrl: string;
916
+ robotId: string;
917
+ robotKey: string;
918
+ iceServers: {
919
+ urls: string | string[];
920
+ username?: string | undefined;
921
+ credential?: string | undefined;
922
+ }[];
923
+ };
924
+ zenoh: {
925
+ routerEndpoint: string;
926
+ domainId: number;
927
+ keyFormat: "ros2dds" | "rmw_zenoh";
928
+ bridgeNamespace?: string | undefined;
929
+ };
930
+ transport: {
931
+ mode: "rosbridge" | "local" | "webrtc" | "zenoh";
932
+ };
933
+ robot: {
934
+ name: string;
935
+ namespace: string;
936
+ cameraTopic: string;
937
+ };
938
+ robots: {
939
+ name: string;
940
+ namespace: string;
941
+ cameraTopic: string;
942
+ id: string;
943
+ kind: string;
944
+ sensors: {
945
+ has_realsense: boolean;
946
+ has_lidar: boolean;
947
+ has_arm: boolean;
948
+ };
949
+ transport?: {
950
+ mode: "rosbridge";
951
+ rosbridge?: {
952
+ url?: string | undefined;
953
+ reconnect?: boolean | undefined;
954
+ reconnectInterval?: number | undefined;
955
+ } | undefined;
956
+ } | {
957
+ mode: "local";
958
+ local?: {
959
+ domainId?: number | undefined;
960
+ } | undefined;
961
+ } | {
962
+ mode: "zenoh";
963
+ zenoh?: {
964
+ routerEndpoint?: string | undefined;
965
+ domainId?: number | undefined;
966
+ keyFormat?: "ros2dds" | "rmw_zenoh" | undefined;
967
+ bridgeNamespace?: string | undefined;
968
+ } | undefined;
969
+ } | {
970
+ mode: "webrtc";
971
+ webrtc?: {
972
+ signalingUrl?: string | undefined;
973
+ apiUrl?: string | undefined;
974
+ robotId?: string | undefined;
975
+ robotKey?: string | undefined;
976
+ iceServers?: {
977
+ urls: string | string[];
978
+ username?: string | undefined;
979
+ credential?: string | undefined;
980
+ }[] | undefined;
981
+ } | undefined;
982
+ } | undefined;
983
+ default?: boolean | undefined;
984
+ capabilities?: string[] | undefined;
985
+ }[];
986
+ teleop: {
987
+ cameraTopic: string;
988
+ cameraTopics: {
989
+ topic: string;
990
+ label?: string | undefined;
991
+ }[];
992
+ cmdVelTopic: string;
993
+ speedDefault: number;
994
+ cameraPollMs: number;
995
+ };
996
+ safety: {
997
+ maxLinearVelocity: number;
998
+ maxAngularVelocity: number;
999
+ workspaceLimits: {
1000
+ xMin: number;
1001
+ xMax: number;
1002
+ yMin: number;
1003
+ yMax: number;
1004
+ };
1005
+ };
1006
+ describer: {
1007
+ url: string;
1008
+ enabled: boolean;
1009
+ model: string;
1010
+ prompt: string;
1011
+ maxTokens: number;
1012
+ timeoutMs: number;
1013
+ maxImageDimension: number;
1014
+ apiKey?: string | undefined;
1015
+ };
1016
+ memory: {
1017
+ local: {
1018
+ storePath: string;
1019
+ };
1020
+ enabled: boolean;
1021
+ mem0: {
1022
+ inferOnWrite: boolean;
1023
+ historyDbPath: string;
1024
+ embedder?: {
1025
+ provider: string;
1026
+ config: Record<string, unknown>;
1027
+ } | undefined;
1028
+ vectorStore?: {
1029
+ provider: string;
1030
+ config: Record<string, unknown>;
1031
+ } | undefined;
1032
+ llm?: {
1033
+ provider: string;
1034
+ config: Record<string, unknown>;
1035
+ } | undefined;
1036
+ };
1037
+ backend: "local" | "mem0";
1038
+ namespace?: string | undefined;
1039
+ };
1040
+ skills: Record<string, unknown>;
1041
+ skillPaths: string[];
1042
+ skillPackages: string[];
1043
+ }, {
1044
+ rosbridge?: {
1045
+ url?: string | undefined;
1046
+ reconnect?: boolean | undefined;
1047
+ reconnectInterval?: number | undefined;
1048
+ } | undefined;
1049
+ local?: {
1050
+ domainId?: number | undefined;
1051
+ } | undefined;
1052
+ webrtc?: {
1053
+ signalingUrl?: string | undefined;
1054
+ apiUrl?: string | undefined;
1055
+ robotId?: string | undefined;
1056
+ robotKey?: string | undefined;
1057
+ iceServers?: {
1058
+ urls: string | string[];
1059
+ username?: string | undefined;
1060
+ credential?: string | undefined;
1061
+ }[] | undefined;
1062
+ } | undefined;
1063
+ zenoh?: {
1064
+ routerEndpoint?: string | undefined;
1065
+ domainId?: number | undefined;
1066
+ keyFormat?: "ros2dds" | "rmw_zenoh" | undefined;
1067
+ bridgeNamespace?: string | undefined;
1068
+ } | undefined;
1069
+ transport?: {
1070
+ mode?: "rosbridge" | "local" | "webrtc" | "zenoh" | undefined;
1071
+ } | undefined;
1072
+ robot?: {
1073
+ name?: string | undefined;
1074
+ namespace?: string | undefined;
1075
+ cameraTopic?: string | undefined;
1076
+ } | undefined;
1077
+ robots?: {
1078
+ id: string;
1079
+ transport?: {
1080
+ mode: "rosbridge";
1081
+ rosbridge?: {
1082
+ url?: string | undefined;
1083
+ reconnect?: boolean | undefined;
1084
+ reconnectInterval?: number | undefined;
1085
+ } | undefined;
1086
+ } | {
1087
+ mode: "local";
1088
+ local?: {
1089
+ domainId?: number | undefined;
1090
+ } | undefined;
1091
+ } | {
1092
+ mode: "zenoh";
1093
+ zenoh?: {
1094
+ routerEndpoint?: string | undefined;
1095
+ domainId?: number | undefined;
1096
+ keyFormat?: "ros2dds" | "rmw_zenoh" | undefined;
1097
+ bridgeNamespace?: string | undefined;
1098
+ } | undefined;
1099
+ } | {
1100
+ mode: "webrtc";
1101
+ webrtc?: {
1102
+ signalingUrl?: string | undefined;
1103
+ apiUrl?: string | undefined;
1104
+ robotId?: string | undefined;
1105
+ robotKey?: string | undefined;
1106
+ iceServers?: {
1107
+ urls: string | string[];
1108
+ username?: string | undefined;
1109
+ credential?: string | undefined;
1110
+ }[] | undefined;
1111
+ } | undefined;
1112
+ } | undefined;
1113
+ name?: string | undefined;
1114
+ namespace?: string | undefined;
1115
+ cameraTopic?: string | undefined;
1116
+ default?: boolean | undefined;
1117
+ kind?: string | undefined;
1118
+ sensors?: {
1119
+ has_realsense?: boolean | undefined;
1120
+ has_lidar?: boolean | undefined;
1121
+ has_arm?: boolean | undefined;
1122
+ } | undefined;
1123
+ capabilities?: string[] | undefined;
1124
+ }[] | undefined;
1125
+ teleop?: {
1126
+ cameraTopic?: string | undefined;
1127
+ cameraTopics?: {
1128
+ topic: string;
1129
+ label?: string | undefined;
1130
+ }[] | undefined;
1131
+ cmdVelTopic?: string | undefined;
1132
+ speedDefault?: number | undefined;
1133
+ cameraPollMs?: number | undefined;
1134
+ } | undefined;
1135
+ safety?: {
1136
+ maxLinearVelocity?: number | undefined;
1137
+ maxAngularVelocity?: number | undefined;
1138
+ workspaceLimits?: {
1139
+ xMin?: number | undefined;
1140
+ xMax?: number | undefined;
1141
+ yMin?: number | undefined;
1142
+ yMax?: number | undefined;
1143
+ } | undefined;
1144
+ } | undefined;
1145
+ describer?: {
1146
+ url?: string | undefined;
1147
+ enabled?: boolean | undefined;
1148
+ apiKey?: string | undefined;
1149
+ model?: string | undefined;
1150
+ prompt?: string | undefined;
1151
+ maxTokens?: number | undefined;
1152
+ timeoutMs?: number | undefined;
1153
+ maxImageDimension?: number | undefined;
1154
+ } | undefined;
1155
+ memory?: {
1156
+ local?: {
1157
+ storePath?: string | undefined;
1158
+ } | undefined;
1159
+ namespace?: string | undefined;
1160
+ enabled?: boolean | undefined;
1161
+ mem0?: {
1162
+ inferOnWrite?: boolean | undefined;
1163
+ historyDbPath?: string | undefined;
1164
+ embedder?: {
1165
+ provider: string;
1166
+ config: Record<string, unknown>;
1167
+ } | undefined;
1168
+ vectorStore?: {
1169
+ provider: string;
1170
+ config: Record<string, unknown>;
1171
+ } | undefined;
1172
+ llm?: {
1173
+ provider: string;
1174
+ config: Record<string, unknown>;
1175
+ } | undefined;
1176
+ } | undefined;
1177
+ backend?: "local" | "mem0" | undefined;
1178
+ } | undefined;
1179
+ skills?: Record<string, unknown> | undefined;
1180
+ skillPaths?: string[] | undefined;
1181
+ skillPackages?: string[] | undefined;
1182
+ }>;
1183
+ export type AgenticROSConfig = z.infer<typeof AgenticROSConfigSchema>;
1184
+ /**
1185
+ * Parse and validate raw config against the schema.
1186
+ * Returns a fully-defaulted, typed config object.
1187
+ * Backward compat: if raw.followMe is set, it is merged into raw.skills.followme before parsing.
1188
+ */
1189
+ export declare function parseConfig(raw: Record<string, unknown>): AgenticROSConfig;
1190
+ /**
1191
+ * Build TransportConfig from full config for createTransport().
1192
+ */
1193
+ export declare function getTransportConfig(config: AgenticROSConfig): TransportConfig;
1194
+ export {};
1195
+ //# sourceMappingURL=config.d.ts.map