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.
- package/dist/__tests__/robot-config.test.d.ts +2 -0
- package/dist/__tests__/robot-config.test.d.ts.map +1 -0
- package/dist/__tests__/robot-config.test.js +374 -0
- package/dist/__tests__/robot-config.test.js.map +1 -0
- package/dist/__tests__/transport-shorthand.test.d.ts +2 -0
- package/dist/__tests__/transport-shorthand.test.d.ts.map +1 -0
- package/dist/__tests__/transport-shorthand.test.js +88 -0
- package/dist/__tests__/transport-shorthand.test.js.map +1 -0
- package/dist/commands/robots.d.ts +57 -0
- package/dist/commands/robots.d.ts.map +1 -0
- package/dist/commands/robots.js +678 -0
- package/dist/commands/robots.js.map +1 -0
- package/dist/commands/skills.d.ts.map +1 -1
- package/dist/commands/skills.js +125 -2
- package/dist/commands/skills.js.map +1 -1
- package/dist/index.js +29 -1
- package/dist/index.js.map +1 -1
- package/dist/menu.js +22 -4
- package/dist/menu.js.map +1 -1
- package/dist/util/marketplace.d.ts +57 -0
- package/dist/util/marketplace.d.ts.map +1 -0
- package/dist/util/marketplace.js +144 -0
- package/dist/util/marketplace.js.map +1 -0
- package/dist/util/mcp-discovery.d.ts +57 -0
- package/dist/util/mcp-discovery.d.ts.map +1 -0
- package/dist/util/mcp-discovery.js +153 -0
- package/dist/util/mcp-discovery.js.map +1 -0
- package/dist/util/robot-config.d.ts +167 -0
- package/dist/util/robot-config.d.ts.map +1 -0
- package/dist/util/robot-config.js +375 -0
- package/dist/util/robot-config.js.map +1 -0
- package/dist/util/skills.d.ts +6 -6
- package/dist/util/skills.d.ts.map +1 -1
- package/dist/util/skills.js +14 -9
- package/dist/util/skills.js.map +1 -1
- package/dist/util/transport-shorthand.d.ts +66 -0
- package/dist/util/transport-shorthand.d.ts.map +1 -0
- package/dist/util/transport-shorthand.js +102 -0
- package/dist/util/transport-shorthand.js.map +1 -0
- package/package.json +12 -10
- package/runtime/BUNDLE.json +1 -1
- package/runtime/README.md +62 -1
- package/runtime/package.json +6 -1
- package/runtime/packages/agenticros/openclaw.plugin.json +7 -1
- package/runtime/packages/agenticros/package.json +2 -1
- package/runtime/packages/agenticros/src/__tests__/capabilities-plugin.test.ts +568 -0
- package/runtime/packages/agenticros/src/config-page.ts +1 -1
- package/runtime/packages/agenticros/src/mission-registry.ts +22 -0
- package/runtime/packages/agenticros/src/service.ts +120 -2
- package/runtime/packages/agenticros/src/skill-loader.ts +109 -30
- package/runtime/packages/agenticros/src/tools/_robot-helpers.ts +68 -0
- package/runtime/packages/agenticros/src/tools/index.ts +49 -9
- package/runtime/packages/agenticros/src/tools/mission-cancel.ts +70 -0
- package/runtime/packages/agenticros/src/tools/ros2-action.ts +11 -4
- package/runtime/packages/agenticros/src/tools/ros2-camera.ts +10 -4
- package/runtime/packages/agenticros/src/tools/ros2-capabilities.ts +63 -0
- package/runtime/packages/agenticros/src/tools/ros2-depth-distance.ts +11 -4
- package/runtime/packages/agenticros/src/tools/ros2-discover.ts +65 -0
- package/runtime/packages/agenticros/src/tools/ros2-find-robots-for.ts +128 -0
- package/runtime/packages/agenticros/src/tools/ros2-mission.ts +311 -0
- package/runtime/packages/agenticros/src/tools/ros2-param.ts +20 -7
- package/runtime/packages/agenticros/src/tools/ros2-publish.ts +15 -8
- package/runtime/packages/agenticros/src/tools/ros2-robots.ts +52 -0
- package/runtime/packages/agenticros/src/tools/ros2-service.ts +11 -4
- package/runtime/packages/agenticros/src/tools/ros2-subscribe.ts +11 -4
- package/runtime/packages/agenticros-claude-code/README.md +52 -9
- package/runtime/packages/agenticros-claude-code/dist/__tests__/capabilities-mcp.test.d.ts +2 -0
- package/runtime/packages/agenticros-claude-code/dist/__tests__/capabilities-mcp.test.d.ts.map +1 -0
- package/runtime/packages/agenticros-claude-code/dist/__tests__/capabilities-mcp.test.js +773 -0
- package/runtime/packages/agenticros-claude-code/dist/__tests__/capabilities-mcp.test.js.map +1 -0
- package/runtime/packages/agenticros-claude-code/dist/__tests__/follow-me-registry.test.d.ts +2 -0
- package/runtime/packages/agenticros-claude-code/dist/__tests__/follow-me-registry.test.d.ts.map +1 -0
- package/runtime/packages/agenticros-claude-code/dist/__tests__/follow-me-registry.test.js +97 -0
- package/runtime/packages/agenticros-claude-code/dist/__tests__/follow-me-registry.test.js.map +1 -0
- package/runtime/packages/agenticros-claude-code/dist/find-object/find-object.d.ts +2 -2
- package/runtime/packages/agenticros-claude-code/dist/find-object/find-object.d.ts.map +1 -1
- package/runtime/packages/agenticros-claude-code/dist/find-object/find-object.js +5 -5
- package/runtime/packages/agenticros-claude-code/dist/find-object/find-object.js.map +1 -1
- package/runtime/packages/agenticros-claude-code/dist/follow-me/depth-loop.d.ts +109 -0
- package/runtime/packages/agenticros-claude-code/dist/follow-me/depth-loop.d.ts.map +1 -0
- package/runtime/packages/agenticros-claude-code/dist/follow-me/depth-loop.js +392 -0
- package/runtime/packages/agenticros-claude-code/dist/follow-me/depth-loop.js.map +1 -0
- package/runtime/packages/agenticros-claude-code/dist/follow-me/loop.d.ts +8 -3
- package/runtime/packages/agenticros-claude-code/dist/follow-me/loop.d.ts.map +1 -1
- package/runtime/packages/agenticros-claude-code/dist/follow-me/loop.js +30 -12
- package/runtime/packages/agenticros-claude-code/dist/follow-me/loop.js.map +1 -1
- package/runtime/packages/agenticros-claude-code/dist/index.js +5 -5
- package/runtime/packages/agenticros-claude-code/dist/index.js.map +1 -1
- package/runtime/packages/agenticros-claude-code/dist/mission-registry.d.ts +16 -0
- package/runtime/packages/agenticros-claude-code/dist/mission-registry.d.ts.map +1 -0
- package/runtime/packages/agenticros-claude-code/dist/mission-registry.js +19 -0
- package/runtime/packages/agenticros-claude-code/dist/mission-registry.js.map +1 -0
- package/runtime/packages/agenticros-claude-code/dist/tools.d.ts +9 -0
- package/runtime/packages/agenticros-claude-code/dist/tools.d.ts.map +1 -1
- package/runtime/packages/agenticros-claude-code/dist/tools.js +700 -54
- package/runtime/packages/agenticros-claude-code/dist/tools.js.map +1 -1
- package/runtime/packages/agenticros-claude-code/dist/transport.d.ts +28 -8
- package/runtime/packages/agenticros-claude-code/dist/transport.d.ts.map +1 -1
- package/runtime/packages/agenticros-claude-code/dist/transport.js +37 -34
- package/runtime/packages/agenticros-claude-code/dist/transport.js.map +1 -1
- package/runtime/packages/agenticros-claude-code/package.json +2 -1
- package/runtime/packages/agenticros-claude-code/src/__tests__/capabilities-mcp.test.ts +965 -0
- package/runtime/packages/agenticros-claude-code/src/__tests__/follow-me-registry.test.ts +119 -0
- package/runtime/packages/agenticros-claude-code/src/find-object/find-object.ts +7 -6
- package/runtime/packages/agenticros-claude-code/src/follow-me/depth-loop.ts +41 -9
- package/runtime/packages/agenticros-claude-code/src/follow-me/loop.ts +40 -11
- package/runtime/packages/agenticros-claude-code/src/index.ts +5 -5
- package/runtime/packages/agenticros-claude-code/src/mission-registry.ts +21 -0
- package/runtime/packages/agenticros-claude-code/src/tools.ts +668 -56
- package/runtime/packages/agenticros-claude-code/src/transport.ts +43 -43
- package/runtime/packages/agenticros-gemini/package.json +1 -0
- package/runtime/packages/agenticros-gemini/src/__tests__/mission-cancel.test.ts +197 -0
- package/runtime/packages/agenticros-gemini/src/__tests__/mission-transcripts.test.ts +178 -0
- package/runtime/packages/agenticros-gemini/src/tools.ts +504 -21
- package/runtime/packages/agenticros-gemini/src/transport.ts +40 -43
- package/runtime/packages/core/LICENSE +192 -0
- package/runtime/packages/core/README.md +88 -0
- package/runtime/packages/core/package.json +36 -3
- package/runtime/packages/core/src/__tests__/capabilities.test.ts +266 -0
- package/runtime/packages/core/src/__tests__/discovery.test.ts +206 -0
- package/runtime/packages/core/src/__tests__/find-robots-for.test.ts +258 -0
- package/runtime/packages/core/src/__tests__/mission-cancel-transcript.test.ts +371 -0
- package/runtime/packages/core/src/__tests__/mission-transcript-sink.test.ts +189 -0
- package/runtime/packages/core/src/__tests__/mission.test.ts +501 -0
- package/runtime/packages/core/src/__tests__/planner.test.ts +279 -0
- package/runtime/packages/core/src/__tests__/robots.test.ts +406 -0
- package/runtime/packages/core/src/__tests__/topic-utils.test.ts +105 -0
- package/runtime/packages/core/src/__tests__/transport-pool.test.ts +295 -0
- package/runtime/packages/core/src/capabilities.ts +314 -0
- package/runtime/packages/core/src/config.ts +221 -39
- package/runtime/packages/core/src/discovery.ts +193 -0
- package/runtime/packages/core/src/find-robots-for.ts +164 -0
- package/runtime/packages/core/src/index.ts +67 -1
- package/runtime/packages/core/src/mission-registry.ts +142 -0
- package/runtime/packages/core/src/mission-transcript-sink.ts +81 -0
- package/runtime/packages/core/src/mission.ts +574 -0
- package/runtime/packages/core/src/planner/index.ts +564 -0
- package/runtime/packages/core/src/robots.ts +282 -0
- package/runtime/packages/core/src/topic-utils.ts +47 -9
- package/runtime/packages/core/src/transport-pool.ts +171 -0
- package/runtime/ros2_ws/src/agenticros_discovery/agenticros_discovery/discovery_node.py +108 -13
- package/runtime/ros2_ws/src/agenticros_msgs/CMakeLists.txt +1 -0
- package/runtime/ros2_ws/src/agenticros_msgs/msg/RobotInfo.msg +44 -0
- package/runtime/scripts/__tests__/refresh-skill-deps.test.mjs +222 -0
- package/runtime/scripts/configure_agenticros.sh +0 -0
- package/runtime/scripts/configure_for_sim.sh +0 -0
- package/runtime/scripts/fix-openclaw-control-ui-path.sh +0 -0
- package/runtime/scripts/install_cli.sh +0 -0
- package/runtime/scripts/install_rosbridge_from_source.sh +0 -0
- package/runtime/scripts/onboard_robot.sh +0 -0
- package/runtime/scripts/pack-runtime.mjs +0 -0
- package/runtime/scripts/refresh-skill-deps.mjs +381 -0
- package/runtime/scripts/run_demo_native.sh +0 -0
- package/runtime/scripts/run_nemoclaw_host_stack.sh +0 -0
- package/runtime/scripts/run_robot_rosbridge.sh +0 -0
- package/runtime/scripts/setup_gateway_plugin.sh +32 -5
- package/runtime/scripts/setup_robot.sh +0 -0
- package/runtime/scripts/setup_workspace.sh +0 -0
- package/runtime/scripts/sim/run_sim.sh +0 -0
- package/runtime/scripts/smoke_test_nemoclaw.sh +0 -0
- package/runtime/scripts/start_demo.sh +0 -0
- package/runtime/scripts/sync-skill-tools.mjs +69 -12
- package/runtime/scripts/use-openclaw-2026.2.26.sh +0 -0
- 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.
|
|
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
|
+
}
|
package/runtime/BUNDLE.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"packedAt": "2026-06-
|
|
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 `"
|
|
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
|
|
package/runtime/package.json
CHANGED
|
@@ -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
|
|
376
|
+
"description": "Directories to scan for skill packages (package.json with an `agenticros` block).",
|
|
371
377
|
"items": {
|
|
372
378
|
"type": "string"
|
|
373
379
|
},
|