agenticros 0.1.18 → 0.2.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 (164) 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/commands/skills.d.ts.map +1 -1
  14. package/dist/commands/skills.js +125 -2
  15. package/dist/commands/skills.js.map +1 -1
  16. package/dist/index.js +29 -1
  17. package/dist/index.js.map +1 -1
  18. package/dist/menu.js +22 -4
  19. package/dist/menu.js.map +1 -1
  20. package/dist/util/marketplace.d.ts +57 -0
  21. package/dist/util/marketplace.d.ts.map +1 -0
  22. package/dist/util/marketplace.js +144 -0
  23. package/dist/util/marketplace.js.map +1 -0
  24. package/dist/util/mcp-discovery.d.ts +57 -0
  25. package/dist/util/mcp-discovery.d.ts.map +1 -0
  26. package/dist/util/mcp-discovery.js +153 -0
  27. package/dist/util/mcp-discovery.js.map +1 -0
  28. package/dist/util/robot-config.d.ts +167 -0
  29. package/dist/util/robot-config.d.ts.map +1 -0
  30. package/dist/util/robot-config.js +375 -0
  31. package/dist/util/robot-config.js.map +1 -0
  32. package/dist/util/skills.d.ts +6 -6
  33. package/dist/util/skills.d.ts.map +1 -1
  34. package/dist/util/skills.js +14 -9
  35. package/dist/util/skills.js.map +1 -1
  36. package/dist/util/transport-shorthand.d.ts +66 -0
  37. package/dist/util/transport-shorthand.d.ts.map +1 -0
  38. package/dist/util/transport-shorthand.js +102 -0
  39. package/dist/util/transport-shorthand.js.map +1 -0
  40. package/package.json +12 -10
  41. package/runtime/BUNDLE.json +1 -1
  42. package/runtime/README.md +62 -1
  43. package/runtime/package.json +6 -1
  44. package/runtime/packages/agenticros/openclaw.plugin.json +7 -1
  45. package/runtime/packages/agenticros/package.json +2 -1
  46. package/runtime/packages/agenticros/src/__tests__/capabilities-plugin.test.ts +568 -0
  47. package/runtime/packages/agenticros/src/config-page.ts +1 -1
  48. package/runtime/packages/agenticros/src/mission-registry.ts +22 -0
  49. package/runtime/packages/agenticros/src/service.ts +120 -2
  50. package/runtime/packages/agenticros/src/skill-loader.ts +109 -30
  51. package/runtime/packages/agenticros/src/tools/_robot-helpers.ts +68 -0
  52. package/runtime/packages/agenticros/src/tools/index.ts +49 -9
  53. package/runtime/packages/agenticros/src/tools/mission-cancel.ts +70 -0
  54. package/runtime/packages/agenticros/src/tools/ros2-action.ts +11 -4
  55. package/runtime/packages/agenticros/src/tools/ros2-camera.ts +10 -4
  56. package/runtime/packages/agenticros/src/tools/ros2-capabilities.ts +63 -0
  57. package/runtime/packages/agenticros/src/tools/ros2-depth-distance.ts +11 -4
  58. package/runtime/packages/agenticros/src/tools/ros2-discover.ts +65 -0
  59. package/runtime/packages/agenticros/src/tools/ros2-find-robots-for.ts +128 -0
  60. package/runtime/packages/agenticros/src/tools/ros2-mission.ts +311 -0
  61. package/runtime/packages/agenticros/src/tools/ros2-param.ts +20 -7
  62. package/runtime/packages/agenticros/src/tools/ros2-publish.ts +15 -8
  63. package/runtime/packages/agenticros/src/tools/ros2-robots.ts +52 -0
  64. package/runtime/packages/agenticros/src/tools/ros2-service.ts +11 -4
  65. package/runtime/packages/agenticros/src/tools/ros2-subscribe.ts +11 -4
  66. package/runtime/packages/agenticros-claude-code/README.md +52 -9
  67. package/runtime/packages/agenticros-claude-code/dist/__tests__/capabilities-mcp.test.d.ts +2 -0
  68. package/runtime/packages/agenticros-claude-code/dist/__tests__/capabilities-mcp.test.d.ts.map +1 -0
  69. package/runtime/packages/agenticros-claude-code/dist/__tests__/capabilities-mcp.test.js +773 -0
  70. package/runtime/packages/agenticros-claude-code/dist/__tests__/capabilities-mcp.test.js.map +1 -0
  71. package/runtime/packages/agenticros-claude-code/dist/__tests__/follow-me-registry.test.d.ts +2 -0
  72. package/runtime/packages/agenticros-claude-code/dist/__tests__/follow-me-registry.test.d.ts.map +1 -0
  73. package/runtime/packages/agenticros-claude-code/dist/__tests__/follow-me-registry.test.js +97 -0
  74. package/runtime/packages/agenticros-claude-code/dist/__tests__/follow-me-registry.test.js.map +1 -0
  75. package/runtime/packages/agenticros-claude-code/dist/find-object/find-object.d.ts +2 -2
  76. package/runtime/packages/agenticros-claude-code/dist/find-object/find-object.d.ts.map +1 -1
  77. package/runtime/packages/agenticros-claude-code/dist/find-object/find-object.js +5 -5
  78. package/runtime/packages/agenticros-claude-code/dist/find-object/find-object.js.map +1 -1
  79. package/runtime/packages/agenticros-claude-code/dist/follow-me/depth-loop.d.ts +109 -0
  80. package/runtime/packages/agenticros-claude-code/dist/follow-me/depth-loop.d.ts.map +1 -0
  81. package/runtime/packages/agenticros-claude-code/dist/follow-me/depth-loop.js +392 -0
  82. package/runtime/packages/agenticros-claude-code/dist/follow-me/depth-loop.js.map +1 -0
  83. package/runtime/packages/agenticros-claude-code/dist/follow-me/loop.d.ts +8 -3
  84. package/runtime/packages/agenticros-claude-code/dist/follow-me/loop.d.ts.map +1 -1
  85. package/runtime/packages/agenticros-claude-code/dist/follow-me/loop.js +30 -12
  86. package/runtime/packages/agenticros-claude-code/dist/follow-me/loop.js.map +1 -1
  87. package/runtime/packages/agenticros-claude-code/dist/index.js +5 -5
  88. package/runtime/packages/agenticros-claude-code/dist/index.js.map +1 -1
  89. package/runtime/packages/agenticros-claude-code/dist/mission-registry.d.ts +16 -0
  90. package/runtime/packages/agenticros-claude-code/dist/mission-registry.d.ts.map +1 -0
  91. package/runtime/packages/agenticros-claude-code/dist/mission-registry.js +19 -0
  92. package/runtime/packages/agenticros-claude-code/dist/mission-registry.js.map +1 -0
  93. package/runtime/packages/agenticros-claude-code/dist/tools.d.ts +9 -0
  94. package/runtime/packages/agenticros-claude-code/dist/tools.d.ts.map +1 -1
  95. package/runtime/packages/agenticros-claude-code/dist/tools.js +700 -54
  96. package/runtime/packages/agenticros-claude-code/dist/tools.js.map +1 -1
  97. package/runtime/packages/agenticros-claude-code/dist/transport.d.ts +28 -8
  98. package/runtime/packages/agenticros-claude-code/dist/transport.d.ts.map +1 -1
  99. package/runtime/packages/agenticros-claude-code/dist/transport.js +37 -34
  100. package/runtime/packages/agenticros-claude-code/dist/transport.js.map +1 -1
  101. package/runtime/packages/agenticros-claude-code/package.json +2 -1
  102. package/runtime/packages/agenticros-claude-code/src/__tests__/capabilities-mcp.test.ts +965 -0
  103. package/runtime/packages/agenticros-claude-code/src/__tests__/follow-me-registry.test.ts +119 -0
  104. package/runtime/packages/agenticros-claude-code/src/find-object/find-object.ts +7 -6
  105. package/runtime/packages/agenticros-claude-code/src/follow-me/depth-loop.ts +41 -9
  106. package/runtime/packages/agenticros-claude-code/src/follow-me/loop.ts +40 -11
  107. package/runtime/packages/agenticros-claude-code/src/index.ts +5 -5
  108. package/runtime/packages/agenticros-claude-code/src/mission-registry.ts +21 -0
  109. package/runtime/packages/agenticros-claude-code/src/tools.ts +668 -56
  110. package/runtime/packages/agenticros-claude-code/src/transport.ts +43 -43
  111. package/runtime/packages/agenticros-gemini/package.json +1 -0
  112. package/runtime/packages/agenticros-gemini/src/__tests__/mission-cancel.test.ts +197 -0
  113. package/runtime/packages/agenticros-gemini/src/__tests__/mission-transcripts.test.ts +178 -0
  114. package/runtime/packages/agenticros-gemini/src/tools.ts +504 -21
  115. package/runtime/packages/agenticros-gemini/src/transport.ts +40 -43
  116. package/runtime/packages/core/LICENSE +192 -0
  117. package/runtime/packages/core/README.md +88 -0
  118. package/runtime/packages/core/package.json +36 -3
  119. package/runtime/packages/core/src/__tests__/capabilities.test.ts +266 -0
  120. package/runtime/packages/core/src/__tests__/discovery.test.ts +206 -0
  121. package/runtime/packages/core/src/__tests__/find-robots-for.test.ts +258 -0
  122. package/runtime/packages/core/src/__tests__/mission-cancel-transcript.test.ts +371 -0
  123. package/runtime/packages/core/src/__tests__/mission-transcript-sink.test.ts +189 -0
  124. package/runtime/packages/core/src/__tests__/mission.test.ts +501 -0
  125. package/runtime/packages/core/src/__tests__/planner.test.ts +279 -0
  126. package/runtime/packages/core/src/__tests__/robots.test.ts +406 -0
  127. package/runtime/packages/core/src/__tests__/topic-utils.test.ts +105 -0
  128. package/runtime/packages/core/src/__tests__/transport-pool.test.ts +295 -0
  129. package/runtime/packages/core/src/capabilities.ts +314 -0
  130. package/runtime/packages/core/src/config.ts +221 -39
  131. package/runtime/packages/core/src/discovery.ts +193 -0
  132. package/runtime/packages/core/src/find-robots-for.ts +164 -0
  133. package/runtime/packages/core/src/index.ts +67 -1
  134. package/runtime/packages/core/src/mission-registry.ts +142 -0
  135. package/runtime/packages/core/src/mission-transcript-sink.ts +81 -0
  136. package/runtime/packages/core/src/mission.ts +574 -0
  137. package/runtime/packages/core/src/planner/index.ts +564 -0
  138. package/runtime/packages/core/src/robots.ts +282 -0
  139. package/runtime/packages/core/src/topic-utils.ts +47 -9
  140. package/runtime/packages/core/src/transport-pool.ts +171 -0
  141. package/runtime/ros2_ws/src/agenticros_discovery/agenticros_discovery/discovery_node.py +108 -13
  142. package/runtime/ros2_ws/src/agenticros_msgs/CMakeLists.txt +1 -0
  143. package/runtime/ros2_ws/src/agenticros_msgs/msg/RobotInfo.msg +44 -0
  144. package/runtime/scripts/__tests__/refresh-skill-deps.test.mjs +222 -0
  145. package/runtime/scripts/configure_agenticros.sh +0 -0
  146. package/runtime/scripts/configure_for_sim.sh +0 -0
  147. package/runtime/scripts/fix-openclaw-control-ui-path.sh +0 -0
  148. package/runtime/scripts/install_cli.sh +0 -0
  149. package/runtime/scripts/install_rosbridge_from_source.sh +0 -0
  150. package/runtime/scripts/onboard_robot.sh +0 -0
  151. package/runtime/scripts/pack-runtime.mjs +0 -0
  152. package/runtime/scripts/refresh-skill-deps.mjs +381 -0
  153. package/runtime/scripts/run_demo_native.sh +0 -0
  154. package/runtime/scripts/run_nemoclaw_host_stack.sh +0 -0
  155. package/runtime/scripts/run_robot_rosbridge.sh +0 -0
  156. package/runtime/scripts/setup_gateway_plugin.sh +32 -5
  157. package/runtime/scripts/setup_robot.sh +0 -0
  158. package/runtime/scripts/setup_workspace.sh +0 -0
  159. package/runtime/scripts/sim/run_sim.sh +0 -0
  160. package/runtime/scripts/smoke_test_nemoclaw.sh +0 -0
  161. package/runtime/scripts/start_demo.sh +0 -0
  162. package/runtime/scripts/sync-skill-tools.mjs +69 -12
  163. package/runtime/scripts/use-openclaw-2026.2.26.sh +0 -0
  164. package/runtime/scripts/use-openclaw-2026.3.11.sh +0 -0
@@ -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.2.0",
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": [
@@ -31,6 +31,16 @@
31
31
  "engines": {
32
32
  "node": ">=20.0.0"
33
33
  },
34
+ "scripts": {
35
+ "build": "tsc",
36
+ "typecheck": "tsc --noEmit",
37
+ "test": "node --test --test-force-exit \"dist/__tests__/*.test.js\"",
38
+ "clean": "rm -rf dist runtime tsconfig.tsbuildinfo",
39
+ "pack:runtime": "node ../../scripts/pack-runtime.mjs",
40
+ "size:check": "node ../../scripts/check-cli-tarball-size.mjs",
41
+ "tarball:check": "node ../../scripts/check-cli-tarball-install.mjs",
42
+ "prepublishOnly": "pnpm run clean && pnpm run build && pnpm run pack:runtime && pnpm run size:check && pnpm run tarball:check"
43
+ },
34
44
  "dependencies": {
35
45
  "@inquirer/prompts": "^7.0.0",
36
46
  "commander": "^12.1.0",
@@ -49,13 +59,5 @@
49
59
  "type": "git",
50
60
  "url": "git+https://github.com/agenticros/agenticros.git",
51
61
  "directory": "packages/agenticros-cli"
52
- },
53
- "scripts": {
54
- "build": "tsc",
55
- "typecheck": "tsc --noEmit",
56
- "clean": "rm -rf dist runtime tsconfig.tsbuildinfo",
57
- "pack:runtime": "node ../../scripts/pack-runtime.mjs",
58
- "size:check": "node ../../scripts/check-cli-tarball-size.mjs",
59
- "tarball:check": "node ../../scripts/check-cli-tarball-install.mjs"
60
62
  }
61
- }
63
+ }
@@ -1,5 +1,5 @@
1
1
  {
2
- "packedAt": "2026-06-09T22:12:21.081Z",
2
+ "packedAt": "2026-06-12T01:46:30.373Z",
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
@@ -25,6 +25,7 @@ With AgenticROS, your robot can describe what it sees, follow intent ("go check
25
25
  - **[OpenClaw](https://openclaw.ai)** — Native gateway plugin with ROS 2 tools, commands, a config UI, a teleop web app, and a skill loader. The flagship integration.
26
26
  - **[NVIDIA NemoClaw](https://github.com/NVIDIA/NemoClaw)** — Run AgenticROS inside NemoClaw's OpenShell sandbox with policy-enforced egress and managed NVIDIA inference; ROS 2, RealSense, and rosbridge stay on the host while the plugin runs sandboxed.
27
27
  - **[Anthropic Claude](https://www.anthropic.com/claude)** — A single MCP server powers **Claude Code** (terminal), **Claude Desktop** (macOS / Windows), and **Claude Dispatch** (iOS, paired to your Mac). Ask Claude what your robot sees, and it answers with a live camera snapshot and depth reading.
28
+ - **[OpenAI Codex CLI](https://developers.openai.com/codex/)** — The same MCP server registers cleanly via `codex mcp add agenticros — node …/packages/agenticros-claude-code/dist/index.js`, or via a `[mcp_servers.agenticros]` entry in `~/.codex/config.toml`. Same 15 tools, same JSON shapes. Setup: [packages/agenticros-claude-code/README.md#codex-cli-openai](packages/agenticros-claude-code/README.md#codex-cli-openai).
28
29
  - **[Google Gemini](https://ai.google.dev/)** — Standalone CLI that uses Gemini function calling against the same ROS 2 tools (no MCP required) — ideal for scripting and headless agents.
29
30
 
30
31
  AgenticROS is built so that new adapters (LangGraph, OpenAI, local models, voice stacks, etc.) can be added without touching the ROS 2 layer. The core transport and tool contract are platform-agnostic; adapters are thin shims that surface those tools to each agent runtime.
@@ -44,6 +45,61 @@ Claude (Code / desktop / Dispatch) → agenticros MCP server → Core → ROS2 r
44
45
  Gemini CLI → @agenticros/gemini (function calling) → Core → ROS2 robots
45
46
  ```
46
47
 
48
+ ## A shared mission language for robots
49
+
50
+ The same tool surface across every adapter — Claude Code, Codex, Gemini, OpenClaw — so two different agents on two different stacks can both speak the same dialect when controlling the same robot. Built around five capabilities.
51
+
52
+ ### Capability manifests — robots advertise *verbs*
53
+
54
+ Every AgenticROS-enabled robot exposes a typed list of named verbs through `ros2_list_capabilities`: `drive_base`, `take_snapshot`, `measure_depth`, `find_object`, `follow_person`, plus whatever a [skill package](#skills) contributes. The agent plans against the verbs instead of raw ROS 2 topics — and the manifest is shaped to double as an ACP / A2A agent card.
55
+
56
+ ### Mission chaining — `run_mission`
57
+
58
+ One MCP tool, `run_mission`, executes a declarative step graph. Each step is `{ id, capability, inputs, on_fail }`. Outputs from any step flow into later steps via `{{stepId.outputs.field}}` template references — so a detection wires straight into the next motion command with no glue code:
59
+
60
+ ```json
61
+ {
62
+ "steps": [
63
+ { "id": "find", "capability": "find_object", "inputs": { "target": "chair" } },
64
+ { "id": "approach", "capability": "drive_base",
65
+ "inputs": {
66
+ "linear_x": 0.2,
67
+ "angular_z": "{{find.outputs.horizontal_offset}}"
68
+ }
69
+ }
70
+ ]
71
+ }
72
+ ```
73
+
74
+ ### Natural-language goals
75
+
76
+ `run_mission` also accepts a `goal` field — plain English. A rule-based, deterministic planner in `@agenticros/core` compiles it into a runnable mission against the robot's capability registry:
77
+
78
+ - `"take a picture"` → `take_snapshot`
79
+ - `"follow me"` → `follow_person`
80
+ - `"drive forward at 0.3 m/s"` → `drive_base { linear_x: 0.3 }`
81
+ - `"find a chair and drive toward it"` → the two-step compound plan above
82
+
83
+ No LLM dependency (the planner is a few hundred lines of pattern matching, so the runtime doesn't require Ollama) and no fabricated calls (it only emits capabilities actually in the registry). Uncompilable goals return a clean error with the recognised-verb list so the agent can self-correct.
84
+
85
+ ### Multi-robot fleets
86
+
87
+ `ros2_list_robots`, `ros2_discover_robots`, and `ros2_find_robots_for({ capability, kind?, online? })` let an agent ask *"give me an AMR that can `follow_person` and is currently online"* and get back a ranked list. The CLI keeps fleet metadata in sync without hand-editing JSON:
88
+
89
+ ```bash
90
+ agenticros robots add my-amr \
91
+ --kind=amr --sensors=has_realsense,!has_arm \
92
+ --capabilities=drive_base,take_snapshot,follow_person
93
+ ```
94
+
95
+ On the ROS side, every robot publishes a 1 Hz heartbeat on `<ns>/agenticros/robot_info` so the online filter reflects what's actually reachable. A single mission can route different steps to different robots — *"the AMR finds the box, the arm picks it up"* runs as one mission.
96
+
97
+ ### Cancel + shared transcripts
98
+
99
+ `mission_cancel({ mission_id })` flips an in-process cancellation token; the runner stops at the next step boundary and marks remaining steps `cancelled`. When the [shared memory backend](#memory-optional) is on, every step is also written to `mission:<id>` in long-term memory, tagged with `step:<status>` and `capability:<id>`. A different agent — different process, different vendor — can `memory_recall` later and reconstruct exactly what happened, so two agents can collaborate on or hand off a mission.
100
+
101
+ Full architecture + design trade-offs: **[docs/strategy-ai-agents-plus-ros.md](docs/strategy-ai-agents-plus-ros.md)**.
102
+
47
103
  ## Repository layout
48
104
 
49
105
  - `**packages/core**` — Transport, types, config (Zod). Used by all adapters.
@@ -107,6 +163,7 @@ agenticros up real # real robot stack
107
163
  agenticros up sim-amr # simulated AMR (Gazebo + RViz, headless on Jetson)
108
164
  agenticros up sim-arm # simulated 6-DOF arm
109
165
  agenticros mode <real|sim> # swap the active config profile (namespace, transport)
166
+ agenticros robots # list / add / remove robots in the fleet (kind, sensors, capabilities)
110
167
  agenticros skills # list / add / remove AgenticROS skills (see below)
111
168
  agenticros doctor # coloured health check
112
169
  agenticros down # stop everything we started
@@ -382,7 +439,11 @@ Per-skill behaviour lives under `config.skills.<skillId>` (e.g. `config.skills.f
382
439
 
383
440
  ### Contract & writing your own skill
384
441
 
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.
442
+ A skill is a Node package with an `"agenticros": { "id": "..." }` block in `package.json` and a `registerSkill(api, config, context)` export from `main`. Publish it to **[skills.agenticros.com](https://skills.agenticros.com)** so others can install it with `npx agenticros skills install <slug>`. See **[docs/skills.md](docs/skills.md)** for the full contract and **[agenticros-skill-followme](https://github.com/agenticros/agenticros-skill-followme)** as a reference template.
443
+
444
+ ## Strategy & vision
445
+
446
+ Where AgenticROS is going next — beyond the shared mission language above, the roadmap covers turning capability manifests into agent cards on the wire (WebRTC / A2A so a robot can register itself as an agent in a mesh), an LLM-backed planner behind the existing `compileGoalToMission` contract, the `skills.agenticros.com` marketplace with declarative auto-fetch and in-agent installs, spatial memory, and cross-vendor agent collaboration via ACP / A2A: **[docs/strategy-ai-agents-plus-ros.md](docs/strategy-ai-agents-plus-ros.md)**.
386
447
 
387
448
  ## License
388
449
 
@@ -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",
@@ -367,7 +373,7 @@
367
373
  },
368
374
  "skillPaths": {
369
375
  "type": "array",
370
- "description": "Directories to scan for skill packages (package.json with agenticrosSkill: true).",
376
+ "description": "Directories to scan for skill packages (package.json with an `agenticros` block).",
371
377
  "items": {
372
378
  "type": "string"
373
379
  },
@@ -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": [