agenticros 0.1.18 → 0.1.19

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 (96) hide show
  1. package/dist/__tests__/robot-config.test.d.ts +2 -0
  2. package/dist/__tests__/robot-config.test.d.ts.map +1 -0
  3. package/dist/__tests__/robot-config.test.js +374 -0
  4. package/dist/__tests__/robot-config.test.js.map +1 -0
  5. package/dist/__tests__/transport-shorthand.test.d.ts +2 -0
  6. package/dist/__tests__/transport-shorthand.test.d.ts.map +1 -0
  7. package/dist/__tests__/transport-shorthand.test.js +88 -0
  8. package/dist/__tests__/transport-shorthand.test.js.map +1 -0
  9. package/dist/commands/robots.d.ts +57 -0
  10. package/dist/commands/robots.d.ts.map +1 -0
  11. package/dist/commands/robots.js +678 -0
  12. package/dist/commands/robots.js.map +1 -0
  13. package/dist/index.js +28 -0
  14. package/dist/index.js.map +1 -1
  15. package/dist/util/mcp-discovery.d.ts +57 -0
  16. package/dist/util/mcp-discovery.d.ts.map +1 -0
  17. package/dist/util/mcp-discovery.js +153 -0
  18. package/dist/util/mcp-discovery.js.map +1 -0
  19. package/dist/util/robot-config.d.ts +167 -0
  20. package/dist/util/robot-config.d.ts.map +1 -0
  21. package/dist/util/robot-config.js +375 -0
  22. package/dist/util/robot-config.js.map +1 -0
  23. package/dist/util/transport-shorthand.d.ts +66 -0
  24. package/dist/util/transport-shorthand.d.ts.map +1 -0
  25. package/dist/util/transport-shorthand.js +102 -0
  26. package/dist/util/transport-shorthand.js.map +1 -0
  27. package/package.json +2 -1
  28. package/runtime/BUNDLE.json +1 -1
  29. package/runtime/README.md +4 -0
  30. package/runtime/package.json +6 -1
  31. package/runtime/packages/agenticros/openclaw.plugin.json +6 -0
  32. package/runtime/packages/agenticros/package.json +2 -1
  33. package/runtime/packages/agenticros/src/__tests__/capabilities-plugin.test.ts +568 -0
  34. package/runtime/packages/agenticros/src/mission-registry.ts +22 -0
  35. package/runtime/packages/agenticros/src/service.ts +120 -2
  36. package/runtime/packages/agenticros/src/skill-loader.ts +9 -1
  37. package/runtime/packages/agenticros/src/tools/_robot-helpers.ts +68 -0
  38. package/runtime/packages/agenticros/src/tools/index.ts +49 -9
  39. package/runtime/packages/agenticros/src/tools/mission-cancel.ts +70 -0
  40. package/runtime/packages/agenticros/src/tools/ros2-action.ts +11 -4
  41. package/runtime/packages/agenticros/src/tools/ros2-camera.ts +10 -4
  42. package/runtime/packages/agenticros/src/tools/ros2-capabilities.ts +63 -0
  43. package/runtime/packages/agenticros/src/tools/ros2-depth-distance.ts +11 -4
  44. package/runtime/packages/agenticros/src/tools/ros2-discover.ts +65 -0
  45. package/runtime/packages/agenticros/src/tools/ros2-find-robots-for.ts +128 -0
  46. package/runtime/packages/agenticros/src/tools/ros2-mission.ts +311 -0
  47. package/runtime/packages/agenticros/src/tools/ros2-param.ts +20 -7
  48. package/runtime/packages/agenticros/src/tools/ros2-publish.ts +15 -8
  49. package/runtime/packages/agenticros/src/tools/ros2-robots.ts +52 -0
  50. package/runtime/packages/agenticros/src/tools/ros2-service.ts +11 -4
  51. package/runtime/packages/agenticros/src/tools/ros2-subscribe.ts +11 -4
  52. package/runtime/packages/agenticros-claude-code/package.json +2 -1
  53. package/runtime/packages/agenticros-claude-code/src/__tests__/capabilities-mcp.test.ts +964 -0
  54. package/runtime/packages/agenticros-claude-code/src/__tests__/follow-me-registry.test.ts +119 -0
  55. package/runtime/packages/agenticros-claude-code/src/find-object/find-object.ts +7 -6
  56. package/runtime/packages/agenticros-claude-code/src/follow-me/depth-loop.ts +41 -9
  57. package/runtime/packages/agenticros-claude-code/src/follow-me/loop.ts +40 -11
  58. package/runtime/packages/agenticros-claude-code/src/index.ts +5 -5
  59. package/runtime/packages/agenticros-claude-code/src/mission-registry.ts +21 -0
  60. package/runtime/packages/agenticros-claude-code/src/tools.ts +668 -56
  61. package/runtime/packages/agenticros-claude-code/src/transport.ts +43 -43
  62. package/runtime/packages/agenticros-gemini/package.json +1 -0
  63. package/runtime/packages/agenticros-gemini/src/__tests__/mission-cancel.test.ts +197 -0
  64. package/runtime/packages/agenticros-gemini/src/__tests__/mission-transcripts.test.ts +178 -0
  65. package/runtime/packages/agenticros-gemini/src/tools.ts +504 -21
  66. package/runtime/packages/agenticros-gemini/src/transport.ts +40 -43
  67. package/runtime/packages/core/package.json +1 -1
  68. package/runtime/packages/core/src/__tests__/capabilities.test.ts +261 -0
  69. package/runtime/packages/core/src/__tests__/discovery.test.ts +206 -0
  70. package/runtime/packages/core/src/__tests__/find-robots-for.test.ts +258 -0
  71. package/runtime/packages/core/src/__tests__/mission-cancel-transcript.test.ts +371 -0
  72. package/runtime/packages/core/src/__tests__/mission-transcript-sink.test.ts +189 -0
  73. package/runtime/packages/core/src/__tests__/mission.test.ts +501 -0
  74. package/runtime/packages/core/src/__tests__/planner.test.ts +279 -0
  75. package/runtime/packages/core/src/__tests__/robots.test.ts +406 -0
  76. package/runtime/packages/core/src/__tests__/topic-utils.test.ts +105 -0
  77. package/runtime/packages/core/src/__tests__/transport-pool.test.ts +295 -0
  78. package/runtime/packages/core/src/capabilities.ts +340 -0
  79. package/runtime/packages/core/src/config.ts +220 -38
  80. package/runtime/packages/core/src/discovery.ts +193 -0
  81. package/runtime/packages/core/src/find-robots-for.ts +164 -0
  82. package/runtime/packages/core/src/index.ts +67 -1
  83. package/runtime/packages/core/src/mission-registry.ts +142 -0
  84. package/runtime/packages/core/src/mission-transcript-sink.ts +81 -0
  85. package/runtime/packages/core/src/mission.ts +574 -0
  86. package/runtime/packages/core/src/planner/index.ts +564 -0
  87. package/runtime/packages/core/src/robots.ts +282 -0
  88. package/runtime/packages/core/src/topic-utils.ts +47 -9
  89. package/runtime/packages/core/src/transport-pool.ts +171 -0
  90. package/runtime/ros2_ws/src/agenticros_discovery/agenticros_discovery/discovery_node.py +108 -13
  91. package/runtime/ros2_ws/src/agenticros_msgs/CMakeLists.txt +1 -0
  92. package/runtime/ros2_ws/src/agenticros_msgs/msg/RobotInfo.msg +44 -0
  93. package/runtime/scripts/__tests__/refresh-skill-deps.test.mjs +222 -0
  94. package/runtime/scripts/refresh-skill-deps.mjs +381 -0
  95. package/runtime/scripts/setup_gateway_plugin.sh +32 -5
  96. package/runtime/scripts/sync-skill-tools.mjs +67 -10
@@ -0,0 +1,375 @@
1
+ /**
2
+ * Robot config R/W for the AgenticROS CLI.
3
+ *
4
+ * Lives in the CLI so the multi-robot persistence path does NOT pull
5
+ * `@agenticros/core` (and its transport deps) into the published
6
+ * `agenticros` tarball. The shape we read/write is intentionally a
7
+ * subset of `@agenticros/core`'s `AgenticROSConfig.robots`:
8
+ *
9
+ * robots: Array<{
10
+ * id: string;
11
+ * name?: string;
12
+ * namespace?: string;
13
+ * cameraTopic?: string;
14
+ * default?: boolean;
15
+ * }>
16
+ *
17
+ * Backwards compat with the legacy single-robot config:
18
+ * - If `config.robots` is absent/empty AND `config.robot` is set, we
19
+ * "promote" `config.robot` into `robots[0]` on the next write. The
20
+ * legacy `config.robot` field is LEFT in place (harmlessly — the
21
+ * core resolver prefers the explicit array when non-empty) so older
22
+ * adapters that only read `config.robot` keep working.
23
+ * - When the file is missing or empty we treat it as `{}`. Writes
24
+ * create both the file and its directory.
25
+ *
26
+ * All paths route through the CLI's own paths helper so workspace /
27
+ * installed / bundle modes pick up the same `~/.agenticros/config.json`.
28
+ */
29
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
30
+ import { dirname, join } from "node:path";
31
+ import { getCliPaths } from "./paths.js";
32
+ /** Default value carried over when the legacy `config.robot` is promoted. */
33
+ const DEFAULT_ROBOT_NAME = "Robot";
34
+ export function robotConfigPath() {
35
+ return join(getCliPaths().userDataDir, "config.json");
36
+ }
37
+ /** Parse `~/.agenticros/config.json` to a plain object, or `{}` when absent/bad. */
38
+ export function readConfigObject(path = robotConfigPath()) {
39
+ if (!existsSync(path))
40
+ return {};
41
+ try {
42
+ const parsed = JSON.parse(readFileSync(path, "utf8"));
43
+ if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) {
44
+ return parsed;
45
+ }
46
+ }
47
+ catch {
48
+ /* fallthrough — return {} on parse error */
49
+ }
50
+ return {};
51
+ }
52
+ /** Write the config object back, creating directories as needed. */
53
+ export function writeConfigObject(obj, path = robotConfigPath()) {
54
+ mkdirSync(dirname(path), { recursive: true });
55
+ writeFileSync(path, `${JSON.stringify(obj, null, 2)}\n`);
56
+ }
57
+ /**
58
+ * Resolve the legacy `config.robot` to a RobotEntry, mirroring the core
59
+ * resolver. `id` falls back to namespace (or "default"), `name` to "Robot".
60
+ * Returns `null` if neither the legacy object nor a usable namespace exists.
61
+ */
62
+ function legacyToEntry(legacy) {
63
+ if (!legacy || typeof legacy !== "object" || Array.isArray(legacy))
64
+ return null;
65
+ const r = legacy;
66
+ const namespace = typeof r["namespace"] === "string" ? r["namespace"] : "";
67
+ const name = typeof r["name"] === "string" && r["name"].trim() ? r["name"] : DEFAULT_ROBOT_NAME;
68
+ const cameraTopic = typeof r["cameraTopic"] === "string" ? r["cameraTopic"] : "";
69
+ // Synthesise id from namespace, falling back to "default" — same as
70
+ // @agenticros/core's `listRobots()` legacy fallback.
71
+ const id = namespace.trim() || "default";
72
+ return { id, name, namespace, cameraTopic };
73
+ }
74
+ /**
75
+ * Return the robots[] view the agent would see (explicit array when
76
+ * non-empty, otherwise a one-entry array synthesised from legacy
77
+ * `config.robot`). Read-only — the CLI uses this to render `robots list`
78
+ * without ever needing to import @agenticros/core.
79
+ */
80
+ export function readRobots(obj = readConfigObject()) {
81
+ const explicit = Array.isArray(obj["robots"]) ? obj["robots"] : [];
82
+ if (explicit.length > 0) {
83
+ const robots = explicit
84
+ .filter((r) => !!r && typeof r === "object" && !Array.isArray(r))
85
+ .map((r) => ({
86
+ id: String(r["id"] ?? ""),
87
+ name: typeof r["name"] === "string" ? r["name"] : undefined,
88
+ namespace: typeof r["namespace"] === "string" ? r["namespace"] : undefined,
89
+ cameraTopic: typeof r["cameraTopic"] === "string" ? r["cameraTopic"] : undefined,
90
+ default: r["default"] === true ? true : undefined,
91
+ kind: typeof r["kind"] === "string" ? r["kind"] : undefined,
92
+ sensors: r["sensors"] && typeof r["sensors"] === "object" && !Array.isArray(r["sensors"])
93
+ ? r["sensors"]
94
+ : undefined,
95
+ capabilities: Array.isArray(r["capabilities"])
96
+ ? r["capabilities"].filter((c) => typeof c === "string")
97
+ : undefined,
98
+ transport: r["transport"] && typeof r["transport"] === "object" && !Array.isArray(r["transport"])
99
+ ? r["transport"]
100
+ : undefined,
101
+ }))
102
+ .filter((r) => r.id.length > 0);
103
+ return { robots, from: "explicit" };
104
+ }
105
+ const legacy = legacyToEntry(obj["robot"]);
106
+ if (legacy)
107
+ return { robots: [legacy], from: "legacy" };
108
+ return { robots: [], from: "none" };
109
+ }
110
+ /**
111
+ * Compute the active robot id using the same precedence the core
112
+ * resolver does:
113
+ * 1. explicit robots[] entry with `default: true`
114
+ * 2. first entry in robots[] (with legacy fallback)
115
+ * 3. undefined when there are no robots at all
116
+ */
117
+ export function getActiveRobotId(obj = readConfigObject()) {
118
+ const explicit = Array.isArray(obj["robots"]) ? obj["robots"] : [];
119
+ if (explicit.length > 0) {
120
+ const flagged = explicit.find((r) => r != null &&
121
+ typeof r === "object" &&
122
+ !Array.isArray(r) &&
123
+ r["default"] === true);
124
+ if (flagged && typeof flagged["id"] === "string" && flagged["id"]) {
125
+ return flagged["id"];
126
+ }
127
+ }
128
+ const { robots } = readRobots(obj);
129
+ return robots[0]?.id;
130
+ }
131
+ /**
132
+ * Add a robot to `config.robots[]`.
133
+ *
134
+ * Promotes the legacy single-robot config on first multi-robot write —
135
+ * `config.robot` is copied as the first entry in the array, and any
136
+ * `default: true` flag we'd set on the new entry is held against that
137
+ * promoted incumbent (it stays the default unless the caller explicitly
138
+ * asks otherwise).
139
+ *
140
+ * Idempotent: re-adding an existing id updates name/namespace/cameraTopic
141
+ * in place but returns `added: false` so the CLI can render the right
142
+ * "already present" message.
143
+ */
144
+ export function addRobot(entry, opts = {}) {
145
+ const obj = opts.obj ?? readConfigObject();
146
+ const explicit = Array.isArray(obj["robots"]) ? [...obj["robots"]] : [];
147
+ let promotedLegacy = false;
148
+ if (explicit.length === 0) {
149
+ const legacy = legacyToEntry(obj["robot"]);
150
+ if (legacy) {
151
+ // Promote: legacy becomes the (default) first entry. We mark it
152
+ // default so the existing behavior — "the single configured robot
153
+ // is the active one" — is preserved unless the caller of this
154
+ // add explicitly sets the new entry as default below.
155
+ explicit.push({ ...legacy, default: true });
156
+ promotedLegacy = true;
157
+ }
158
+ }
159
+ // De-dup by id. If the id already exists, update in place and return
160
+ // added=false. This is what makes `agenticros robots add <id>` a
161
+ // safe idempotent operation.
162
+ const existingIdx = explicit.findIndex((r) => r != null &&
163
+ typeof r === "object" &&
164
+ !Array.isArray(r) &&
165
+ String(r["id"] ?? "") === entry.id);
166
+ const next = {
167
+ id: entry.id,
168
+ name: entry.name ?? DEFAULT_ROBOT_NAME,
169
+ namespace: entry.namespace ?? "",
170
+ cameraTopic: entry.cameraTopic ?? "",
171
+ };
172
+ if (opts.setDefault)
173
+ next["default"] = true;
174
+ // Caller may carry an explicit per-robot transport override into the
175
+ // entry. When omitted on an in-place update we preserve the prior
176
+ // override (see below) so re-running `robots add` without --transport
177
+ // doesn't silently drop a previously-configured override.
178
+ if (entry.transport !== undefined)
179
+ next["transport"] = entry.transport;
180
+ // Same preserve-on-update story for kind / sensors / capabilities —
181
+ // these are sticky Phase 1.e fleet-metadata fields that survive a
182
+ // `robots add <id> --name=...`.
183
+ if (entry.kind !== undefined)
184
+ next["kind"] = entry.kind;
185
+ if (entry.sensors !== undefined)
186
+ next["sensors"] = entry.sensors;
187
+ if (entry.capabilities !== undefined)
188
+ next["capabilities"] = entry.capabilities;
189
+ let added;
190
+ if (existingIdx >= 0) {
191
+ // Update in place. Preserve any `default` already on the entry
192
+ // unless the caller is explicitly setting it.
193
+ const prev = explicit[existingIdx];
194
+ if (opts.setDefault === undefined && prev["default"] === true)
195
+ next["default"] = true;
196
+ if (entry.transport === undefined &&
197
+ prev["transport"] &&
198
+ typeof prev["transport"] === "object" &&
199
+ !Array.isArray(prev["transport"])) {
200
+ next["transport"] = prev["transport"];
201
+ }
202
+ if (entry.kind === undefined && typeof prev["kind"] === "string") {
203
+ next["kind"] = prev["kind"];
204
+ }
205
+ if (entry.sensors === undefined &&
206
+ prev["sensors"] &&
207
+ typeof prev["sensors"] === "object" &&
208
+ !Array.isArray(prev["sensors"])) {
209
+ next["sensors"] = prev["sensors"];
210
+ }
211
+ if (entry.capabilities === undefined && Array.isArray(prev["capabilities"])) {
212
+ next["capabilities"] = prev["capabilities"];
213
+ }
214
+ explicit[existingIdx] = next;
215
+ added = false;
216
+ }
217
+ else {
218
+ explicit.push(next);
219
+ added = true;
220
+ }
221
+ // If the caller is making this new entry the default, strip default
222
+ // off every other entry — only one robot is default at a time.
223
+ if (opts.setDefault) {
224
+ for (let i = 0; i < explicit.length; i++) {
225
+ const r = explicit[i];
226
+ if (i === (existingIdx >= 0 ? existingIdx : explicit.length - 1))
227
+ continue;
228
+ if (r && r["default"] === true) {
229
+ const { default: _drop, ...rest } = r;
230
+ void _drop;
231
+ explicit[i] = rest;
232
+ }
233
+ }
234
+ }
235
+ obj["robots"] = explicit;
236
+ return {
237
+ added,
238
+ promotedLegacy,
239
+ robots: explicit.map((r) => r),
240
+ };
241
+ }
242
+ /**
243
+ * Remove a robot from `config.robots[]` by id.
244
+ *
245
+ * Returns `removed: false` when the id isn't present. Removing the last
246
+ * entry leaves `robots: []` (which the core resolver then ignores in
247
+ * favour of the legacy `config.robot` fallback — so the deployment
248
+ * keeps working).
249
+ *
250
+ * Idempotent across re-runs.
251
+ */
252
+ export function removeRobot(id, obj = readConfigObject()) {
253
+ const explicit = Array.isArray(obj["robots"]) ? [...obj["robots"]] : [];
254
+ const idx = explicit.findIndex((r) => r != null &&
255
+ typeof r === "object" &&
256
+ !Array.isArray(r) &&
257
+ String(r["id"] ?? "") === id);
258
+ if (idx < 0) {
259
+ return { removed: false, robots: explicit };
260
+ }
261
+ explicit.splice(idx, 1);
262
+ obj["robots"] = explicit;
263
+ return { removed: true, robots: explicit };
264
+ }
265
+ /**
266
+ * Set `default: true` on exactly one robot in `config.robots[]`.
267
+ *
268
+ * Auto-promotes the legacy single-robot config first if needed (so
269
+ * marking the first new robot as default doesn't lose the previous
270
+ * incumbent). Throws when the id isn't present after promotion.
271
+ */
272
+ export function setDefaultRobot(id, obj = readConfigObject()) {
273
+ const explicit = Array.isArray(obj["robots"]) ? [...obj["robots"]] : [];
274
+ let promotedLegacy = false;
275
+ if (explicit.length === 0) {
276
+ const legacy = legacyToEntry(obj["robot"]);
277
+ if (legacy) {
278
+ explicit.push({ ...legacy, default: false });
279
+ promotedLegacy = true;
280
+ }
281
+ }
282
+ const idx = explicit.findIndex((r) => r != null &&
283
+ typeof r === "object" &&
284
+ !Array.isArray(r) &&
285
+ String(r["id"] ?? "") === id);
286
+ if (idx < 0) {
287
+ const known = explicit
288
+ .map((r) => String(r["id"] ?? ""))
289
+ .filter((s) => s.length > 0)
290
+ .join(", ");
291
+ throw new Error(`Unknown robot id "${id}". Known: ${known || "(none — add it first with `agenticros robots add`)"}.`);
292
+ }
293
+ for (let i = 0; i < explicit.length; i++) {
294
+ const r = { ...explicit[i] };
295
+ if (i === idx)
296
+ r["default"] = true;
297
+ else
298
+ delete r["default"];
299
+ explicit[i] = r;
300
+ }
301
+ obj["robots"] = explicit;
302
+ return { robots: explicit, promotedLegacy };
303
+ }
304
+ /**
305
+ * Apply a per-robot transport override to an existing robot.
306
+ *
307
+ * Auto-promotes legacy `config.robot` into `config.robots[]` so the
308
+ * caller can target the historical single-robot config by its derived
309
+ * id. Throws when the id can't be found after promotion — matching the
310
+ * UX of `setDefaultRobot`.
311
+ *
312
+ * The `override` argument is the plain JSON shape the core's
313
+ * `RobotTransportOverrideSchema` will validate at config-load time. The
314
+ * CLI doesn't validate field shapes — that lives in `@agenticros/core`.
315
+ */
316
+ export function setTransportForRobot(id, override, obj = readConfigObject()) {
317
+ const explicit = Array.isArray(obj["robots"]) ? [...obj["robots"]] : [];
318
+ let promotedLegacy = false;
319
+ if (explicit.length === 0) {
320
+ const legacy = legacyToEntry(obj["robot"]);
321
+ if (legacy) {
322
+ explicit.push({ ...legacy, default: true });
323
+ promotedLegacy = true;
324
+ }
325
+ }
326
+ const idx = explicit.findIndex((r) => r != null &&
327
+ typeof r === "object" &&
328
+ !Array.isArray(r) &&
329
+ String(r["id"] ?? "") === id);
330
+ if (idx < 0) {
331
+ const known = explicit
332
+ .map((r) => String(r["id"] ?? ""))
333
+ .filter((s) => s.length > 0)
334
+ .join(", ");
335
+ throw new Error(`Unknown robot id "${id}". Known: ${known || "(none — add it first with `agenticros robots add`)"}.`);
336
+ }
337
+ explicit[idx] = { ...explicit[idx], transport: override };
338
+ obj["robots"] = explicit;
339
+ return { robots: explicit, promotedLegacy };
340
+ }
341
+ /**
342
+ * Remove a per-robot transport override (so the robot inherits the
343
+ * global transport config). Idempotent — returns `cleared: false` when
344
+ * the robot didn't have an override to begin with. Throws on unknown id
345
+ * (we'd rather complain loudly than silently no-op against a typo).
346
+ */
347
+ export function clearTransportForRobot(id, obj = readConfigObject()) {
348
+ const explicit = Array.isArray(obj["robots"]) ? [...obj["robots"]] : [];
349
+ let promotedLegacy = false;
350
+ if (explicit.length === 0) {
351
+ const legacy = legacyToEntry(obj["robot"]);
352
+ if (legacy) {
353
+ explicit.push({ ...legacy, default: true });
354
+ promotedLegacy = true;
355
+ }
356
+ }
357
+ const idx = explicit.findIndex((r) => r != null &&
358
+ typeof r === "object" &&
359
+ !Array.isArray(r) &&
360
+ String(r["id"] ?? "") === id);
361
+ if (idx < 0) {
362
+ const known = explicit
363
+ .map((r) => String(r["id"] ?? ""))
364
+ .filter((s) => s.length > 0)
365
+ .join(", ");
366
+ throw new Error(`Unknown robot id "${id}". Known: ${known || "(none — add it first with `agenticros robots add`)"}.`);
367
+ }
368
+ const prev = { ...explicit[idx] };
369
+ const hadOverride = prev["transport"] !== undefined;
370
+ delete prev["transport"];
371
+ explicit[idx] = prev;
372
+ obj["robots"] = explicit;
373
+ return { cleared: hadOverride, robots: explicit, promotedLegacy };
374
+ }
375
+ //# sourceMappingURL=robot-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"robot-config.js","sourceRoot":"","sources":["../../src/util/robot-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AA0CzC,6EAA6E;AAC7E,MAAM,kBAAkB,GAAG,OAAO,CAAC;AAEnC,MAAM,UAAU,eAAe;IAC7B,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;AACxD,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,gBAAgB,CAAC,IAAI,GAAG,eAAe,EAAE;IACvD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IACjC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAY,CAAC;QACjE,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACnE,OAAO,MAAiC,CAAC;QAC3C,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,4CAA4C;IAC9C,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,oEAAoE;AACpE,MAAM,UAAU,iBAAiB,CAAC,GAA4B,EAAE,IAAI,GAAG,eAAe,EAAE;IACtF,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,aAAa,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;AAC3D,CAAC;AAED;;;;GAIG;AACH,SAAS,aAAa,CAAC,MAAe;IACpC,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QAAE,OAAO,IAAI,CAAC;IAChF,MAAM,CAAC,GAAG,MAAiC,CAAC;IAC5C,MAAM,SAAS,GAAG,OAAO,CAAC,CAAC,WAAW,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3E,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC;IAChG,MAAM,WAAW,GAAG,OAAO,CAAC,CAAC,aAAa,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACjF,oEAAoE;IACpE,qDAAqD;IACrD,MAAM,EAAE,GAAG,SAAS,CAAC,IAAI,EAAE,IAAI,SAAS,CAAC;IACzC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC;AAC9C,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CACxB,MAA+B,gBAAgB,EAAE;IAEjD,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAE,GAAG,CAAC,QAAQ,CAAe,CAAC,CAAC,CAAC,EAAE,CAAC;IAClF,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,MAAM,GAAG,QAAQ;aACpB,MAAM,CAAC,CAAC,CAAC,EAAgC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;aAC9F,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACX,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACzB,IAAI,EAAE,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;YAC3D,SAAS,EAAE,OAAO,CAAC,CAAC,WAAW,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS;YAC1E,WAAW,EAAE,OAAO,CAAC,CAAC,aAAa,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS;YAChF,OAAO,EAAE,CAAC,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;YACjD,IAAI,EAAE,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;YAC3D,OAAO,EACL,CAAC,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,CAAC,SAAS,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;gBAC9E,CAAC,CAAE,CAAC,CAAC,SAAS,CAAkB;gBAChC,CAAC,CAAC,SAAS;YACf,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC;gBAC5C,CAAC,CAAE,CAAC,CAAC,cAAc,CAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC;gBACpF,CAAC,CAAC,SAAS;YACb,SAAS,EACP,CAAC,CAAC,WAAW,CAAC,IAAI,OAAO,CAAC,CAAC,WAAW,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;gBACpF,CAAC,CAAE,CAAC,CAAC,WAAW,CAA6B;gBAC7C,CAAC,CAAC,SAAS;SAChB,CAAC,CAAC;aACF,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAClC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;IACtC,CAAC;IAED,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;IAC3C,IAAI,MAAM;QAAE,OAAO,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IACxD,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AACtC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAA+B,gBAAgB,EAAE;IAChF,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAE,GAAG,CAAC,QAAQ,CAAe,CAAC,CAAC,CAAC,EAAE,CAAC;IAClF,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAC3B,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,IAAI,IAAI;YACT,OAAO,CAAC,KAAK,QAAQ;YACrB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;YAChB,CAA6B,CAAC,SAAS,CAAC,KAAK,IAAI,CACd,CAAC;QACzC,IAAI,OAAO,IAAI,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YAClE,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IACD,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;IACnC,OAAO,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AACvB,CAAC;AAWD;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,QAAQ,CACtB,KAAiB,EACjB,OAAgE,EAAE;IAElE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,gBAAgB,EAAE,CAAC;IAC3C,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAI,GAAG,CAAC,QAAQ,CAAe,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAEvF,IAAI,cAAc,GAAG,KAAK,CAAC;IAC3B,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;QAC3C,IAAI,MAAM,EAAE,CAAC;YACX,gEAAgE;YAChE,kEAAkE;YAClE,8DAA8D;YAC9D,sDAAsD;YACtD,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;YAC5C,cAAc,GAAG,IAAI,CAAC;QACxB,CAAC;IACH,CAAC;IAED,qEAAqE;IACrE,iEAAiE;IACjE,6BAA6B;IAC7B,MAAM,WAAW,GAAG,QAAQ,CAAC,SAAS,CACpC,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,IAAI,IAAI;QACT,OAAO,CAAC,KAAK,QAAQ;QACrB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QACjB,MAAM,CAAE,CAA6B,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,KAAK,CAAC,EAAE,CAClE,CAAC;IAEF,MAAM,IAAI,GAA4B;QACpC,EAAE,EAAE,KAAK,CAAC,EAAE;QACZ,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,kBAAkB;QACtC,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,EAAE;QAChC,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,EAAE;KACrC,CAAC;IACF,IAAI,IAAI,CAAC,UAAU;QAAE,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;IAC5C,qEAAqE;IACrE,kEAAkE;IAClE,sEAAsE;IACtE,0DAA0D;IAC1D,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS;QAAE,IAAI,CAAC,WAAW,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC;IACvE,oEAAoE;IACpE,kEAAkE;IAClE,gCAAgC;IAChC,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS;QAAE,IAAI,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC;IACxD,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS;QAAE,IAAI,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC;IACjE,IAAI,KAAK,CAAC,YAAY,KAAK,SAAS;QAAE,IAAI,CAAC,cAAc,CAAC,GAAG,KAAK,CAAC,YAAY,CAAC;IAEhF,IAAI,KAAc,CAAC;IACnB,IAAI,WAAW,IAAI,CAAC,EAAE,CAAC;QACrB,+DAA+D;QAC/D,8CAA8C;QAC9C,MAAM,IAAI,GAAG,QAAQ,CAAC,WAAW,CAA4B,CAAC;QAC9D,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI;YAAE,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;QACtF,IACE,KAAK,CAAC,SAAS,KAAK,SAAS;YAC7B,IAAI,CAAC,WAAW,CAAC;YACjB,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,QAAQ;YACrC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,EACjC,CAAC;YACD,IAAI,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;QACxC,CAAC;QACD,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,QAAQ,EAAE,CAAC;YACjE,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;QAC9B,CAAC;QACD,IACE,KAAK,CAAC,OAAO,KAAK,SAAS;YAC3B,IAAI,CAAC,SAAS,CAAC;YACf,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,QAAQ;YACnC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAC/B,CAAC;YACD,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;QACpC,CAAC;QACD,IAAI,KAAK,CAAC,YAAY,KAAK,SAAS,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC;YAC5E,IAAI,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC;QAC9C,CAAC;QACD,QAAQ,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;QAC7B,KAAK,GAAG,KAAK,CAAC;IAChB,CAAC;SAAM,CAAC;QACN,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpB,KAAK,GAAG,IAAI,CAAC;IACf,CAAC;IAED,oEAAoE;IACpE,+DAA+D;IAC/D,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACzC,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAA4B,CAAC;YACjD,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;gBAAE,SAAS;YAC3E,IAAI,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE,CAAC;gBAC/B,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,GAAG,CAAC,CAAC;gBACtC,KAAK,KAAK,CAAC;gBACX,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;YACrB,CAAC;QACH,CAAC;IACH,CAAC;IAED,GAAG,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC;IACzB,OAAO;QACL,KAAK;QACL,cAAc;QACd,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAe,CAAC;KAC7C,CAAC;AACJ,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,WAAW,CACzB,EAAU,EACV,MAA+B,gBAAgB,EAAE;IAEjD,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAI,GAAG,CAAC,QAAQ,CAAe,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACvF,MAAM,GAAG,GAAG,QAAQ,CAAC,SAAS,CAC5B,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,IAAI,IAAI;QACT,OAAO,CAAC,KAAK,QAAQ;QACrB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QACjB,MAAM,CAAE,CAA6B,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,CAC5D,CAAC;IACF,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC;QACZ,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,QAAwB,EAAE,CAAC;IAC9D,CAAC;IACD,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IACxB,GAAG,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC;IACzB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAwB,EAAE,CAAC;AAC7D,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAC7B,EAAU,EACV,MAA+B,gBAAgB,EAAE;IAEjD,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAI,GAAG,CAAC,QAAQ,CAAe,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACvF,IAAI,cAAc,GAAG,KAAK,CAAC;IAE3B,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;QAC3C,IAAI,MAAM,EAAE,CAAC;YACX,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;YAC7C,cAAc,GAAG,IAAI,CAAC;QACxB,CAAC;IACH,CAAC;IAED,MAAM,GAAG,GAAG,QAAQ,CAAC,SAAS,CAC5B,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,IAAI,IAAI;QACT,OAAO,CAAC,KAAK,QAAQ;QACrB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QACjB,MAAM,CAAE,CAA6B,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,CAC5D,CAAC;IAEF,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC;QACZ,MAAM,KAAK,GAAG,QAAQ;aACnB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAE,CAA6B,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;aAC9D,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;aAC3B,IAAI,CAAC,IAAI,CAAC,CAAC;QACd,MAAM,IAAI,KAAK,CACb,qBAAqB,EAAE,aAAa,KAAK,IAAI,oDAAoD,GAAG,CACrG,CAAC;IACJ,CAAC;IAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACzC,MAAM,CAAC,GAAG,EAAE,GAAI,QAAQ,CAAC,CAAC,CAA6B,EAAE,CAAC;QAC1D,IAAI,CAAC,KAAK,GAAG;YAAE,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;;YAC9B,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC;QACzB,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAClB,CAAC;IAED,GAAG,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC;IACzB,OAAO,EAAE,MAAM,EAAE,QAAwB,EAAE,cAAc,EAAE,CAAC;AAC9D,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,oBAAoB,CAClC,EAAU,EACV,QAAiC,EACjC,MAA+B,gBAAgB,EAAE;IAEjD,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAI,GAAG,CAAC,QAAQ,CAAe,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACvF,IAAI,cAAc,GAAG,KAAK,CAAC;IAE3B,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;QAC3C,IAAI,MAAM,EAAE,CAAC;YACX,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;YAC5C,cAAc,GAAG,IAAI,CAAC;QACxB,CAAC;IACH,CAAC;IAED,MAAM,GAAG,GAAG,QAAQ,CAAC,SAAS,CAC5B,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,IAAI,IAAI;QACT,OAAO,CAAC,KAAK,QAAQ;QACrB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QACjB,MAAM,CAAE,CAA6B,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,CAC5D,CAAC;IAEF,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC;QACZ,MAAM,KAAK,GAAG,QAAQ;aACnB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAE,CAA6B,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;aAC9D,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;aAC3B,IAAI,CAAC,IAAI,CAAC,CAAC;QACd,MAAM,IAAI,KAAK,CACb,qBAAqB,EAAE,aAAa,KAAK,IAAI,oDAAoD,GAAG,CACrG,CAAC;IACJ,CAAC;IAED,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,GAAI,QAAQ,CAAC,GAAG,CAA6B,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;IACvF,GAAG,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC;IACzB,OAAO,EAAE,MAAM,EAAE,QAAwB,EAAE,cAAc,EAAE,CAAC;AAC9D,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CACpC,EAAU,EACV,MAA+B,gBAAgB,EAAE;IAEjD,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAI,GAAG,CAAC,QAAQ,CAAe,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACvF,IAAI,cAAc,GAAG,KAAK,CAAC;IAE3B,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;QAC3C,IAAI,MAAM,EAAE,CAAC;YACX,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;YAC5C,cAAc,GAAG,IAAI,CAAC;QACxB,CAAC;IACH,CAAC;IAED,MAAM,GAAG,GAAG,QAAQ,CAAC,SAAS,CAC5B,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,IAAI,IAAI;QACT,OAAO,CAAC,KAAK,QAAQ;QACrB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QACjB,MAAM,CAAE,CAA6B,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,CAC5D,CAAC;IAEF,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC;QACZ,MAAM,KAAK,GAAG,QAAQ;aACnB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAE,CAA6B,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;aAC9D,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;aAC3B,IAAI,CAAC,IAAI,CAAC,CAAC;QACd,MAAM,IAAI,KAAK,CACb,qBAAqB,EAAE,aAAa,KAAK,IAAI,oDAAoD,GAAG,CACrG,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GAAG,EAAE,GAAI,QAAQ,CAAC,GAAG,CAA6B,EAAE,CAAC;IAC/D,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,SAAS,CAAC;IACpD,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC;IACzB,QAAQ,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;IACrB,GAAG,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC;IACzB,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,QAAwB,EAAE,cAAc,EAAE,CAAC;AACpF,CAAC"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Parse a `--transport=<shorthand>` flag into the JSON-shaped object the
3
+ * core resolver expects under `config.robots[i].transport`.
4
+ *
5
+ * Shorthand grammar (most-common-case-first):
6
+ *
7
+ * <mode>[:<primary-value>]
8
+ *
9
+ * - `zenoh` ⇒ inherit everything from global config.zenoh
10
+ * - `zenoh:<routerEndpoint>` ⇒ override the router endpoint only
11
+ * - `rosbridge` ⇒ inherit global rosbridge config
12
+ * - `rosbridge:<url>` ⇒ override rosbridge url
13
+ * - `local` ⇒ inherit global local config
14
+ * - `local:<domainId>` ⇒ override DDS domain id (integer ≥ 0)
15
+ * - `webrtc` ⇒ inherit global webrtc config
16
+ * - `webrtc:<signalingUrl>` ⇒ override signaling url
17
+ *
18
+ * Anything more elaborate (multiple sub-fields, custom iceServers, etc.)
19
+ * should use `--transport-json=...` which is passed straight through to
20
+ * the core Zod schema. The CLI deliberately doesn't model the full set
21
+ * of sub-fields — that would couple this layer to every transport
22
+ * adapter's settings shape. The shorthand exists for the 95% of users
23
+ * who only want to point one robot at a different router.
24
+ *
25
+ * Errors are intentionally specific — they tell the user the exact
26
+ * accepted forms so they can recover without hunting through docs.
27
+ */
28
+ export type TransportOverrideJson = {
29
+ mode: "zenoh";
30
+ zenoh?: {
31
+ routerEndpoint?: string;
32
+ };
33
+ } | {
34
+ mode: "rosbridge";
35
+ rosbridge?: {
36
+ url?: string;
37
+ };
38
+ } | {
39
+ mode: "local";
40
+ local?: {
41
+ domainId?: number;
42
+ };
43
+ } | {
44
+ mode: "webrtc";
45
+ webrtc?: {
46
+ signalingUrl?: string;
47
+ };
48
+ };
49
+ /**
50
+ * Parse a `--transport=<shorthand>` value. Throws with an actionable
51
+ * message on malformed input. The returned object is a plain JSON
52
+ * structure that the core `RobotTransportOverrideSchema` will then
53
+ * validate at config-load time, so this parser doesn't have to repeat
54
+ * field-level validation — it only needs to produce well-shaped JSON.
55
+ */
56
+ export declare function parseTransportShorthand(raw: string): TransportOverrideJson;
57
+ /**
58
+ * Validate a raw JSON string passed via `--transport-json`. Returns the
59
+ * parsed object on success; throws a friendly error on parse failure or
60
+ * when the JSON doesn't look at all like a transport override (missing
61
+ * `mode`). Field-level validation is deferred to the core Zod schema at
62
+ * config-load time — this is just a smoke check so an obviously-wrong
63
+ * JSON string doesn't slip into the file.
64
+ */
65
+ export declare function parseTransportJson(raw: string): Record<string, unknown>;
66
+ //# sourceMappingURL=transport-shorthand.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport-shorthand.d.ts","sourceRoot":"","sources":["../../src/util/transport-shorthand.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,MAAM,MAAM,qBAAqB,GAC7B;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE;QAAE,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GACtD;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,SAAS,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GACnD;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GAChD;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,CAAC,EAAE;QAAE,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC;AAS3D;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,qBAAqB,CA2C1E;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAoBvE"}
@@ -0,0 +1,102 @@
1
+ /**
2
+ * Parse a `--transport=<shorthand>` flag into the JSON-shaped object the
3
+ * core resolver expects under `config.robots[i].transport`.
4
+ *
5
+ * Shorthand grammar (most-common-case-first):
6
+ *
7
+ * <mode>[:<primary-value>]
8
+ *
9
+ * - `zenoh` ⇒ inherit everything from global config.zenoh
10
+ * - `zenoh:<routerEndpoint>` ⇒ override the router endpoint only
11
+ * - `rosbridge` ⇒ inherit global rosbridge config
12
+ * - `rosbridge:<url>` ⇒ override rosbridge url
13
+ * - `local` ⇒ inherit global local config
14
+ * - `local:<domainId>` ⇒ override DDS domain id (integer ≥ 0)
15
+ * - `webrtc` ⇒ inherit global webrtc config
16
+ * - `webrtc:<signalingUrl>` ⇒ override signaling url
17
+ *
18
+ * Anything more elaborate (multiple sub-fields, custom iceServers, etc.)
19
+ * should use `--transport-json=...` which is passed straight through to
20
+ * the core Zod schema. The CLI deliberately doesn't model the full set
21
+ * of sub-fields — that would couple this layer to every transport
22
+ * adapter's settings shape. The shorthand exists for the 95% of users
23
+ * who only want to point one robot at a different router.
24
+ *
25
+ * Errors are intentionally specific — they tell the user the exact
26
+ * accepted forms so they can recover without hunting through docs.
27
+ */
28
+ const VALID_MODES = ["zenoh", "rosbridge", "local", "webrtc"];
29
+ function isValidMode(s) {
30
+ return VALID_MODES.includes(s);
31
+ }
32
+ /**
33
+ * Parse a `--transport=<shorthand>` value. Throws with an actionable
34
+ * message on malformed input. The returned object is a plain JSON
35
+ * structure that the core `RobotTransportOverrideSchema` will then
36
+ * validate at config-load time, so this parser doesn't have to repeat
37
+ * field-level validation — it only needs to produce well-shaped JSON.
38
+ */
39
+ export function parseTransportShorthand(raw) {
40
+ const input = raw.trim();
41
+ if (!input) {
42
+ throw new Error("--transport requires a value. Examples: --transport=zenoh, --transport=zenoh:ws://farm:10000, --transport=local:1");
43
+ }
44
+ const colon = input.indexOf(":");
45
+ const modeRaw = (colon < 0 ? input : input.slice(0, colon)).trim().toLowerCase();
46
+ const valueRaw = colon < 0 ? "" : input.slice(colon + 1).trim();
47
+ if (!isValidMode(modeRaw)) {
48
+ throw new Error(`Unknown transport mode "${modeRaw}". Accepted: ${VALID_MODES.join(", ")}. ` +
49
+ "Example: --transport=zenoh:ws://farm:10000");
50
+ }
51
+ switch (modeRaw) {
52
+ case "zenoh":
53
+ return valueRaw
54
+ ? { mode: "zenoh", zenoh: { routerEndpoint: valueRaw } }
55
+ : { mode: "zenoh" };
56
+ case "rosbridge":
57
+ return valueRaw
58
+ ? { mode: "rosbridge", rosbridge: { url: valueRaw } }
59
+ : { mode: "rosbridge" };
60
+ case "local": {
61
+ if (!valueRaw)
62
+ return { mode: "local" };
63
+ const n = Number(valueRaw);
64
+ if (!Number.isInteger(n) || n < 0) {
65
+ throw new Error(`--transport=local:<domainId> requires a non-negative integer (got "${valueRaw}"). ` +
66
+ "Example: --transport=local:1");
67
+ }
68
+ return { mode: "local", local: { domainId: n } };
69
+ }
70
+ case "webrtc":
71
+ return valueRaw
72
+ ? { mode: "webrtc", webrtc: { signalingUrl: valueRaw } }
73
+ : { mode: "webrtc" };
74
+ }
75
+ }
76
+ /**
77
+ * Validate a raw JSON string passed via `--transport-json`. Returns the
78
+ * parsed object on success; throws a friendly error on parse failure or
79
+ * when the JSON doesn't look at all like a transport override (missing
80
+ * `mode`). Field-level validation is deferred to the core Zod schema at
81
+ * config-load time — this is just a smoke check so an obviously-wrong
82
+ * JSON string doesn't slip into the file.
83
+ */
84
+ export function parseTransportJson(raw) {
85
+ let obj;
86
+ try {
87
+ obj = JSON.parse(raw);
88
+ }
89
+ catch (e) {
90
+ throw new Error(`--transport-json: invalid JSON (${e instanceof Error ? e.message : String(e)}). ` +
91
+ 'Example: --transport-json=\'{"mode":"zenoh","zenoh":{"routerEndpoint":"ws://farm:10000"}}\'');
92
+ }
93
+ if (!obj || typeof obj !== "object" || Array.isArray(obj)) {
94
+ throw new Error("--transport-json: must be a JSON object, e.g. {\"mode\":\"zenoh\"}");
95
+ }
96
+ const mode = obj["mode"];
97
+ if (typeof mode !== "string" || !isValidMode(mode)) {
98
+ throw new Error(`--transport-json: missing or invalid "mode" (expected one of ${VALID_MODES.join(", ")}).`);
99
+ }
100
+ return obj;
101
+ }
102
+ //# sourceMappingURL=transport-shorthand.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport-shorthand.js","sourceRoot":"","sources":["../../src/util/transport-shorthand.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agenticros",
3
- "version": "0.1.18",
3
+ "version": "0.1.19",
4
4
  "type": "module",
5
5
  "description": "AgenticROS - agentic AI for ROS-powered robots. Single CLI to launch real-robot or simulated demos, manage configuration, and inspect status.",
6
6
  "keywords": [
@@ -53,6 +53,7 @@
53
53
  "scripts": {
54
54
  "build": "tsc",
55
55
  "typecheck": "tsc --noEmit",
56
+ "test": "node --test --test-force-exit \"dist/__tests__/*.test.js\"",
56
57
  "clean": "rm -rf dist runtime tsconfig.tsbuildinfo",
57
58
  "pack:runtime": "node ../../scripts/pack-runtime.mjs",
58
59
  "size:check": "node ../../scripts/check-cli-tarball-size.mjs",
@@ -1,5 +1,5 @@
1
1
  {
2
- "packedAt": "2026-06-09T22:12:21.081Z",
2
+ "packedAt": "2026-06-10T22:14:39.896Z",
3
3
  "repo": "https://github.com/PlaiPin/agenticros",
4
4
  "note": "This directory is a snapshot of the agenticros monorepo source. `agenticros init` will copy it to ~/agenticros and run pnpm install + colcon build there.",
5
5
  "layout": {
package/runtime/README.md CHANGED
@@ -384,6 +384,10 @@ Per-skill behaviour lives under `config.skills.<skillId>` (e.g. `config.skills.f
384
384
 
385
385
  A skill is a Node package with `"agenticrosSkill": true` in `package.json` and a `registerSkill(api, config, context)` export from `main`. See **[docs/skills.md](docs/skills.md)** for the full contract and **[agenticros-skill-followme](https://github.com/your-org/agenticros-skill-followme)** as a reference template.
386
386
 
387
+ ## Strategy & vision
388
+
389
+ Where AgenticROS is going next — the four-phase roadmap covering capability registry + skill chaining + multi-robot fleet discovery, the `skills.agenticros.com` marketplace with declarative auto-fetch, spatial memory, and cross-vendor agent collaboration via ACP / A2A: **[docs/strategy-ai-agents-plus-ros.md](docs/strategy-ai-agents-plus-ros.md)**.
390
+
387
391
  ## License
388
392
 
389
393
  Apache-2.0
@@ -9,9 +9,14 @@
9
9
  "clean": "pnpm -r exec rm -rf dist tsconfig.tsbuildinfo",
10
10
  "lint": "pnpm -r lint",
11
11
  "typecheck": "pnpm -r typecheck",
12
+ "test": "pnpm test:scripts && pnpm -r --workspace-concurrency 1 --if-present test",
13
+ "test:scripts": "node --test scripts/__tests__/*.test.mjs",
12
14
  "mcp:kill": "pkill -f 'node packages/agenticros-claude-code/dist/index.js' || true",
13
15
  "sync-skill-tools": "node scripts/sync-skill-tools.mjs",
14
- "sync-skill-tools:dry": "node scripts/sync-skill-tools.mjs --dry-run --verbose"
16
+ "sync-skill-tools:dry": "node scripts/sync-skill-tools.mjs --dry-run --verbose",
17
+ "refresh:skills": "node scripts/refresh-skill-deps.mjs",
18
+ "refresh:skills:dry": "node scripts/refresh-skill-deps.mjs --dry-run --verbose",
19
+ "deploy:plugin": "bash scripts/setup_gateway_plugin.sh --skip-build --no-systemd --no-restart"
15
20
  },
16
21
  "engines": {
17
22
  "node": ">=20.0.0",
@@ -15,6 +15,12 @@
15
15
  "ros2_param_get",
16
16
  "ros2_param_set",
17
17
  "ros2_list_topics",
18
+ "ros2_list_capabilities",
19
+ "ros2_list_robots",
20
+ "ros2_discover_robots",
21
+ "ros2_find_robots_for",
22
+ "run_mission",
23
+ "mission_cancel",
18
24
  "ros2_camera_snapshot",
19
25
  "ros2_depth_distance",
20
26
  "memory_remember",
@@ -14,7 +14,8 @@
14
14
  },
15
15
  "scripts": {
16
16
  "build": "tsc",
17
- "typecheck": "tsc --noEmit"
17
+ "typecheck": "tsc --noEmit",
18
+ "test": "node --test --test-force-exit \"dist/__tests__/*.test.js\""
18
19
  },
19
20
  "openclaw": {
20
21
  "extensions": [