agenticros 0.0.1 → 0.1.1

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 (330) hide show
  1. package/LICENSE +192 -0
  2. package/README.md +90 -4
  3. package/dist/commands/config.d.ts +20 -0
  4. package/dist/commands/config.d.ts.map +1 -0
  5. package/dist/commands/config.js +179 -0
  6. package/dist/commands/config.js.map +1 -0
  7. package/dist/commands/doctor.d.ts +33 -0
  8. package/dist/commands/doctor.d.ts.map +1 -0
  9. package/dist/commands/doctor.js +232 -0
  10. package/dist/commands/doctor.js.map +1 -0
  11. package/dist/commands/down.d.ts +15 -0
  12. package/dist/commands/down.d.ts.map +1 -0
  13. package/dist/commands/down.js +91 -0
  14. package/dist/commands/down.js.map +1 -0
  15. package/dist/commands/init.d.ts +21 -0
  16. package/dist/commands/init.d.ts.map +1 -0
  17. package/dist/commands/init.js +259 -0
  18. package/dist/commands/init.js.map +1 -0
  19. package/dist/commands/logs.d.ts +18 -0
  20. package/dist/commands/logs.d.ts.map +1 -0
  21. package/dist/commands/logs.js +67 -0
  22. package/dist/commands/logs.js.map +1 -0
  23. package/dist/commands/status.d.ts +12 -0
  24. package/dist/commands/status.d.ts.map +1 -0
  25. package/dist/commands/status.js +56 -0
  26. package/dist/commands/status.js.map +1 -0
  27. package/dist/commands/up.d.ts +20 -0
  28. package/dist/commands/up.d.ts.map +1 -0
  29. package/dist/commands/up.js +70 -0
  30. package/dist/commands/up.js.map +1 -0
  31. package/dist/index.d.ts +12 -0
  32. package/dist/index.d.ts.map +1 -0
  33. package/dist/index.js +107 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/menu.d.ts +9 -0
  36. package/dist/menu.d.ts.map +1 -0
  37. package/dist/menu.js +96 -0
  38. package/dist/menu.js.map +1 -0
  39. package/dist/runners/real-robot.d.ts +15 -0
  40. package/dist/runners/real-robot.d.ts.map +1 -0
  41. package/dist/runners/real-robot.js +46 -0
  42. package/dist/runners/real-robot.js.map +1 -0
  43. package/dist/runners/sim.d.ts +19 -0
  44. package/dist/runners/sim.d.ts.map +1 -0
  45. package/dist/runners/sim.js +53 -0
  46. package/dist/runners/sim.js.map +1 -0
  47. package/dist/util/env.d.ts +24 -0
  48. package/dist/util/env.d.ts.map +1 -0
  49. package/dist/util/env.js +53 -0
  50. package/dist/util/env.js.map +1 -0
  51. package/dist/util/logger.d.ts +24 -0
  52. package/dist/util/logger.d.ts.map +1 -0
  53. package/dist/util/logger.js +62 -0
  54. package/dist/util/logger.js.map +1 -0
  55. package/dist/util/paths.d.ts +57 -0
  56. package/dist/util/paths.d.ts.map +1 -0
  57. package/dist/util/paths.js +132 -0
  58. package/dist/util/paths.js.map +1 -0
  59. package/dist/util/pidfile.d.ts +16 -0
  60. package/dist/util/pidfile.d.ts.map +1 -0
  61. package/dist/util/pidfile.js +63 -0
  62. package/dist/util/pidfile.js.map +1 -0
  63. package/dist/util/state.d.ts +26 -0
  64. package/dist/util/state.d.ts.map +1 -0
  65. package/dist/util/state.js +55 -0
  66. package/dist/util/state.js.map +1 -0
  67. package/package.json +60 -1
  68. package/runtime/BUNDLE.json +11 -0
  69. package/runtime/LICENSE +192 -0
  70. package/runtime/README.md +273 -0
  71. package/runtime/docs/architecture.md +366 -0
  72. package/runtime/docs/cli.md +140 -0
  73. package/runtime/docs/memory.md +292 -0
  74. package/runtime/docs/robot-setup.md +347 -0
  75. package/runtime/package.json +28 -0
  76. package/runtime/packages/agenticros/agenticros-agenticros-0.0.1.tgz +0 -0
  77. package/runtime/packages/agenticros/openclaw.plugin.json +451 -0
  78. package/runtime/packages/agenticros/package.json +41 -0
  79. package/runtime/packages/agenticros/src/camera-snapshot-cache.ts +59 -0
  80. package/runtime/packages/agenticros/src/camera-snapshot-routes.ts +44 -0
  81. package/runtime/packages/agenticros/src/commands/estop.ts +41 -0
  82. package/runtime/packages/agenticros/src/commands/transport.ts +195 -0
  83. package/runtime/packages/agenticros/src/config-file.ts +136 -0
  84. package/runtime/packages/agenticros/src/config-page.ts +498 -0
  85. package/runtime/packages/agenticros/src/context/robot-context.ts +373 -0
  86. package/runtime/packages/agenticros/src/depth.ts +313 -0
  87. package/runtime/packages/agenticros/src/describer.ts +157 -0
  88. package/runtime/packages/agenticros/src/image-binary-trim.ts +16 -0
  89. package/runtime/packages/agenticros/src/index.ts +85 -0
  90. package/runtime/packages/agenticros/src/landing-page.ts +38 -0
  91. package/runtime/packages/agenticros/src/memory.ts +44 -0
  92. package/runtime/packages/agenticros/src/plugin-api.ts +173 -0
  93. package/runtime/packages/agenticros/src/plugin-image-base64.ts +69 -0
  94. package/runtime/packages/agenticros/src/preflight.ts +110 -0
  95. package/runtime/packages/agenticros/src/routes.ts +328 -0
  96. package/runtime/packages/agenticros/src/safety/validator.ts +43 -0
  97. package/runtime/packages/agenticros/src/service.ts +359 -0
  98. package/runtime/packages/agenticros/src/skill-api.ts +65 -0
  99. package/runtime/packages/agenticros/src/skill-loader.ts +146 -0
  100. package/runtime/packages/agenticros/src/teleop/page.ts +498 -0
  101. package/runtime/packages/agenticros/src/teleop/routes.ts +650 -0
  102. package/runtime/packages/agenticros/src/tools/index.ts +26 -0
  103. package/runtime/packages/agenticros/src/tools/ros2-action.ts +50 -0
  104. package/runtime/packages/agenticros/src/tools/ros2-camera.ts +221 -0
  105. package/runtime/packages/agenticros/src/tools/ros2-depth-distance.ts +58 -0
  106. package/runtime/packages/agenticros/src/tools/ros2-introspect.ts +62 -0
  107. package/runtime/packages/agenticros/src/tools/ros2-memory.ts +158 -0
  108. package/runtime/packages/agenticros/src/tools/ros2-param.ts +87 -0
  109. package/runtime/packages/agenticros/src/tools/ros2-publish.ts +52 -0
  110. package/runtime/packages/agenticros/src/tools/ros2-service.ts +46 -0
  111. package/runtime/packages/agenticros/src/tools/ros2-subscribe.ts +71 -0
  112. package/runtime/packages/agenticros/tsconfig.json +9 -0
  113. package/runtime/packages/agenticros-claude-code/README.md +260 -0
  114. package/runtime/packages/agenticros-claude-code/config.example.json +9 -0
  115. package/runtime/packages/agenticros-claude-code/dist/config.d.ts +8 -0
  116. package/runtime/packages/agenticros-claude-code/dist/config.d.ts.map +1 -0
  117. package/runtime/packages/agenticros-claude-code/dist/config.js +93 -0
  118. package/runtime/packages/agenticros-claude-code/dist/config.js.map +1 -0
  119. package/runtime/packages/agenticros-claude-code/dist/depth.d.ts +20 -0
  120. package/runtime/packages/agenticros-claude-code/dist/depth.d.ts.map +1 -0
  121. package/runtime/packages/agenticros-claude-code/dist/depth.js +126 -0
  122. package/runtime/packages/agenticros-claude-code/dist/depth.js.map +1 -0
  123. package/runtime/packages/agenticros-claude-code/dist/find-object/coco-classes.d.ts +6 -0
  124. package/runtime/packages/agenticros-claude-code/dist/find-object/coco-classes.d.ts.map +1 -0
  125. package/runtime/packages/agenticros-claude-code/dist/find-object/coco-classes.js +36 -0
  126. package/runtime/packages/agenticros-claude-code/dist/find-object/coco-classes.js.map +1 -0
  127. package/runtime/packages/agenticros-claude-code/dist/find-object/find-object.d.ts +33 -0
  128. package/runtime/packages/agenticros-claude-code/dist/find-object/find-object.d.ts.map +1 -0
  129. package/runtime/packages/agenticros-claude-code/dist/find-object/find-object.js +134 -0
  130. package/runtime/packages/agenticros-claude-code/dist/find-object/find-object.js.map +1 -0
  131. package/runtime/packages/agenticros-claude-code/dist/follow-me/controller.d.ts +43 -0
  132. package/runtime/packages/agenticros-claude-code/dist/follow-me/controller.d.ts.map +1 -0
  133. package/runtime/packages/agenticros-claude-code/dist/follow-me/controller.js +73 -0
  134. package/runtime/packages/agenticros-claude-code/dist/follow-me/controller.js.map +1 -0
  135. package/runtime/packages/agenticros-claude-code/dist/follow-me/detector.d.ts +58 -0
  136. package/runtime/packages/agenticros-claude-code/dist/follow-me/detector.d.ts.map +1 -0
  137. package/runtime/packages/agenticros-claude-code/dist/follow-me/detector.js +251 -0
  138. package/runtime/packages/agenticros-claude-code/dist/follow-me/detector.js.map +1 -0
  139. package/runtime/packages/agenticros-claude-code/dist/follow-me/loop.d.ts +61 -0
  140. package/runtime/packages/agenticros-claude-code/dist/follow-me/loop.d.ts.map +1 -0
  141. package/runtime/packages/agenticros-claude-code/dist/follow-me/loop.js +268 -0
  142. package/runtime/packages/agenticros-claude-code/dist/follow-me/loop.js.map +1 -0
  143. package/runtime/packages/agenticros-claude-code/dist/index.d.ts +3 -0
  144. package/runtime/packages/agenticros-claude-code/dist/index.d.ts.map +1 -0
  145. package/runtime/packages/agenticros-claude-code/dist/index.js +111 -0
  146. package/runtime/packages/agenticros-claude-code/dist/index.js.map +1 -0
  147. package/runtime/packages/agenticros-claude-code/dist/memory.d.ts +17 -0
  148. package/runtime/packages/agenticros-claude-code/dist/memory.d.ts.map +1 -0
  149. package/runtime/packages/agenticros-claude-code/dist/memory.js +44 -0
  150. package/runtime/packages/agenticros-claude-code/dist/memory.js.map +1 -0
  151. package/runtime/packages/agenticros-claude-code/dist/safety.d.ts +10 -0
  152. package/runtime/packages/agenticros-claude-code/dist/safety.d.ts.map +1 -0
  153. package/runtime/packages/agenticros-claude-code/dist/safety.js +34 -0
  154. package/runtime/packages/agenticros-claude-code/dist/safety.js.map +1 -0
  155. package/runtime/packages/agenticros-claude-code/dist/tools.d.ts +36 -0
  156. package/runtime/packages/agenticros-claude-code/dist/tools.d.ts.map +1 -0
  157. package/runtime/packages/agenticros-claude-code/dist/tools.js +777 -0
  158. package/runtime/packages/agenticros-claude-code/dist/tools.js.map +1 -0
  159. package/runtime/packages/agenticros-claude-code/dist/transport.d.ts +17 -0
  160. package/runtime/packages/agenticros-claude-code/dist/transport.d.ts.map +1 -0
  161. package/runtime/packages/agenticros-claude-code/dist/transport.js +46 -0
  162. package/runtime/packages/agenticros-claude-code/dist/transport.js.map +1 -0
  163. package/runtime/packages/agenticros-claude-code/dist/zero-shot/detector.d.ts +42 -0
  164. package/runtime/packages/agenticros-claude-code/dist/zero-shot/detector.d.ts.map +1 -0
  165. package/runtime/packages/agenticros-claude-code/dist/zero-shot/detector.js +114 -0
  166. package/runtime/packages/agenticros-claude-code/dist/zero-shot/detector.js.map +1 -0
  167. package/runtime/packages/agenticros-claude-code/package.json +29 -0
  168. package/runtime/packages/agenticros-claude-code/src/config.ts +96 -0
  169. package/runtime/packages/agenticros-claude-code/src/depth.ts +173 -0
  170. package/runtime/packages/agenticros-claude-code/src/find-object/coco-classes.ts +38 -0
  171. package/runtime/packages/agenticros-claude-code/src/find-object/find-object.ts +190 -0
  172. package/runtime/packages/agenticros-claude-code/src/follow-me/controller.ts +109 -0
  173. package/runtime/packages/agenticros-claude-code/src/follow-me/depth-loop.ts +420 -0
  174. package/runtime/packages/agenticros-claude-code/src/follow-me/detector.ts +303 -0
  175. package/runtime/packages/agenticros-claude-code/src/follow-me/loop.ts +330 -0
  176. package/runtime/packages/agenticros-claude-code/src/index.ts +125 -0
  177. package/runtime/packages/agenticros-claude-code/src/memory.ts +51 -0
  178. package/runtime/packages/agenticros-claude-code/src/safety.ts +44 -0
  179. package/runtime/packages/agenticros-claude-code/src/tools.ts +891 -0
  180. package/runtime/packages/agenticros-claude-code/src/transport.ts +58 -0
  181. package/runtime/packages/agenticros-claude-code/src/zero-shot/detector.ts +169 -0
  182. package/runtime/packages/agenticros-claude-code/tsconfig.json +9 -0
  183. package/runtime/packages/agenticros-claude-code/yolo-debug.mjs +106 -0
  184. package/runtime/packages/agenticros-gemini/README.md +139 -0
  185. package/runtime/packages/agenticros-gemini/package.json +28 -0
  186. package/runtime/packages/agenticros-gemini/scripts/smoke-api.mjs +42 -0
  187. package/runtime/packages/agenticros-gemini/src/chat.ts +139 -0
  188. package/runtime/packages/agenticros-gemini/src/config.ts +92 -0
  189. package/runtime/packages/agenticros-gemini/src/depth.ts +173 -0
  190. package/runtime/packages/agenticros-gemini/src/index.ts +58 -0
  191. package/runtime/packages/agenticros-gemini/src/memory.ts +32 -0
  192. package/runtime/packages/agenticros-gemini/src/safety.ts +44 -0
  193. package/runtime/packages/agenticros-gemini/src/tools.ts +516 -0
  194. package/runtime/packages/agenticros-gemini/src/transport.ts +58 -0
  195. package/runtime/packages/agenticros-gemini/tsconfig.json +8 -0
  196. package/runtime/packages/core/package.json +47 -0
  197. package/runtime/packages/core/src/banner.ts +32 -0
  198. package/runtime/packages/core/src/cmd-vel-twist.ts +31 -0
  199. package/runtime/packages/core/src/config.ts +279 -0
  200. package/runtime/packages/core/src/index.ts +54 -0
  201. package/runtime/packages/core/src/memory/__tests__/factory.test.ts +70 -0
  202. package/runtime/packages/core/src/memory/__tests__/local-provider.test.ts +195 -0
  203. package/runtime/packages/core/src/memory/__tests__/mem0-provider.test.ts +192 -0
  204. package/runtime/packages/core/src/memory/__tests__/smart-defaults.test.ts +46 -0
  205. package/runtime/packages/core/src/memory/factory.ts +63 -0
  206. package/runtime/packages/core/src/memory/index.ts +10 -0
  207. package/runtime/packages/core/src/memory/local/provider.ts +229 -0
  208. package/runtime/packages/core/src/memory/mem0/provider.ts +379 -0
  209. package/runtime/packages/core/src/memory/types.ts +96 -0
  210. package/runtime/packages/core/src/topic-utils.ts +95 -0
  211. package/runtime/packages/core/src/transport/factory.ts +47 -0
  212. package/runtime/packages/core/src/transport/local/conversion.ts +333 -0
  213. package/runtime/packages/core/src/transport/local/entities.ts +129 -0
  214. package/runtime/packages/core/src/transport/local/transport.ts +406 -0
  215. package/runtime/packages/core/src/transport/rosbridge/actions.ts +81 -0
  216. package/runtime/packages/core/src/transport/rosbridge/adapter.ts +157 -0
  217. package/runtime/packages/core/src/transport/rosbridge/client.ts +438 -0
  218. package/runtime/packages/core/src/transport/rosbridge/services.ts +41 -0
  219. package/runtime/packages/core/src/transport/rosbridge/topics.ts +60 -0
  220. package/runtime/packages/core/src/transport/rosbridge/types.ts +118 -0
  221. package/runtime/packages/core/src/transport/transport.ts +77 -0
  222. package/runtime/packages/core/src/transport/types.ts +137 -0
  223. package/runtime/packages/core/src/transport/webrtc/signaling-client.ts +196 -0
  224. package/runtime/packages/core/src/transport/webrtc/signaling-types.ts +130 -0
  225. package/runtime/packages/core/src/transport/webrtc/transport.ts +516 -0
  226. package/runtime/packages/core/src/transport/zenoh/adapter.ts +357 -0
  227. package/runtime/packages/core/src/transport/zenoh/cdr.ts +183 -0
  228. package/runtime/packages/core/src/transport/zenoh/keys.ts +51 -0
  229. package/runtime/packages/core/tsconfig.json +9 -0
  230. package/runtime/packages/ros-camera/package.json +30 -0
  231. package/runtime/packages/ros-camera/src/index.ts +13 -0
  232. package/runtime/packages/ros-camera/src/snapshot.ts +372 -0
  233. package/runtime/packages/ros-camera/tsconfig.json +9 -0
  234. package/runtime/pnpm-lock.yaml +5260 -0
  235. package/runtime/pnpm-workspace.yaml +2 -0
  236. package/runtime/ros2_ws/src/agenticros_agent/agenticros_agent/__init__.py +0 -0
  237. package/runtime/ros2_ws/src/agenticros_agent/agenticros_agent/agent_node.py +561 -0
  238. package/runtime/ros2_ws/src/agenticros_agent/package.xml +25 -0
  239. package/runtime/ros2_ws/src/agenticros_agent/resource/agenticros_agent +0 -0
  240. package/runtime/ros2_ws/src/agenticros_agent/setup.cfg +4 -0
  241. package/runtime/ros2_ws/src/agenticros_agent/setup.py +25 -0
  242. package/runtime/ros2_ws/src/agenticros_bringup/README.md +128 -0
  243. package/runtime/ros2_ws/src/agenticros_bringup/agenticros_bringup/__init__.py +1 -0
  244. package/runtime/ros2_ws/src/agenticros_bringup/agenticros_bringup/cmd_vel_relay.py +33 -0
  245. package/runtime/ros2_ws/src/agenticros_bringup/launch/cmd_vel_bridge.launch.py +58 -0
  246. package/runtime/ros2_ws/src/agenticros_bringup/launch/gazebo_turtlebot3.launch.py +69 -0
  247. package/runtime/ros2_ws/src/agenticros_bringup/launch/mode_a_gazebo.launch.py +55 -0
  248. package/runtime/ros2_ws/src/agenticros_bringup/launch/mode_a_gazebo_rviz.launch.py +48 -0
  249. package/runtime/ros2_ws/src/agenticros_bringup/launch/realsense_rosbridge.launch.py +154 -0
  250. package/runtime/ros2_ws/src/agenticros_bringup/launch/rosbridge_gazebo.launch.py +54 -0
  251. package/runtime/ros2_ws/src/agenticros_bringup/launch/rviz.launch.py +38 -0
  252. package/runtime/ros2_ws/src/agenticros_bringup/launch/turtlebot3_gazebo_rviz.launch.py +42 -0
  253. package/runtime/ros2_ws/src/agenticros_bringup/package.xml +24 -0
  254. package/runtime/ros2_ws/src/agenticros_bringup/resource/agenticros_bringup +0 -0
  255. package/runtime/ros2_ws/src/agenticros_bringup/rviz/turtlebot3_agenticros.rviz +174 -0
  256. package/runtime/ros2_ws/src/agenticros_bringup/setup.cfg +4 -0
  257. package/runtime/ros2_ws/src/agenticros_bringup/setup.py +28 -0
  258. package/runtime/ros2_ws/src/agenticros_discovery/agenticros_discovery/__init__.py +0 -0
  259. package/runtime/ros2_ws/src/agenticros_discovery/agenticros_discovery/discovery_node.py +172 -0
  260. package/runtime/ros2_ws/src/agenticros_discovery/package.xml +22 -0
  261. package/runtime/ros2_ws/src/agenticros_discovery/resource/agenticros_discovery +0 -0
  262. package/runtime/ros2_ws/src/agenticros_discovery/setup.cfg +5 -0
  263. package/runtime/ros2_ws/src/agenticros_discovery/setup.py +25 -0
  264. package/runtime/ros2_ws/src/agenticros_follow_me/README.md +66 -0
  265. package/runtime/ros2_ws/src/agenticros_follow_me/agenticros_follow_me/__init__.py +1 -0
  266. package/runtime/ros2_ws/src/agenticros_follow_me/agenticros_follow_me/__main__.py +5 -0
  267. package/runtime/ros2_ws/src/agenticros_follow_me/agenticros_follow_me/follow_me_node.py +278 -0
  268. package/runtime/ros2_ws/src/agenticros_follow_me/agenticros_follow_me/follower_controller.py +631 -0
  269. package/runtime/ros2_ws/src/agenticros_follow_me/agenticros_follow_me/person_tracker.py +635 -0
  270. package/runtime/ros2_ws/src/agenticros_follow_me/package.xml +22 -0
  271. package/runtime/ros2_ws/src/agenticros_follow_me/resource/agenticros_follow_me +0 -0
  272. package/runtime/ros2_ws/src/agenticros_follow_me/setup.py +25 -0
  273. package/runtime/ros2_ws/src/agenticros_msgs/CMakeLists.txt +26 -0
  274. package/runtime/ros2_ws/src/agenticros_msgs/msg/CapabilityManifest.msg +9 -0
  275. package/runtime/ros2_ws/src/agenticros_msgs/package.xml +22 -0
  276. package/runtime/ros2_ws/src/agenticros_msgs/srv/FollowMeGetStatus.srv +11 -0
  277. package/runtime/ros2_ws/src/agenticros_msgs/srv/FollowMeSetDistance.srv +4 -0
  278. package/runtime/ros2_ws/src/agenticros_msgs/srv/FollowMeSetTarget.srv +6 -0
  279. package/runtime/ros2_ws/src/agenticros_msgs/srv/FollowMeStart.srv +5 -0
  280. package/runtime/ros2_ws/src/agenticros_msgs/srv/FollowMeStop.srv +3 -0
  281. package/runtime/ros2_ws/src/agenticros_msgs/srv/GetCapabilities.srv +5 -0
  282. package/runtime/ros2_ws/src/agenticros_sim/CMakeLists.txt +24 -0
  283. package/runtime/ros2_ws/src/agenticros_sim/README.md +120 -0
  284. package/runtime/ros2_ws/src/agenticros_sim/config/agenticros-sim.config.json +28 -0
  285. package/runtime/ros2_ws/src/agenticros_sim/config/amr_bridge.yaml +111 -0
  286. package/runtime/ros2_ws/src/agenticros_sim/config/amr_view.rviz +172 -0
  287. package/runtime/ros2_ws/src/agenticros_sim/env-hooks/gz_resource_path.dsv.in +3 -0
  288. package/runtime/ros2_ws/src/agenticros_sim/env-hooks/gz_resource_path.sh.in +7 -0
  289. package/runtime/ros2_ws/src/agenticros_sim/launch/sim_amr.launch.py +159 -0
  290. package/runtime/ros2_ws/src/agenticros_sim/models/agenticros_amr/model.config +17 -0
  291. package/runtime/ros2_ws/src/agenticros_sim/models/agenticros_amr/model.sdf +244 -0
  292. package/runtime/ros2_ws/src/agenticros_sim/package.xml +27 -0
  293. package/runtime/ros2_ws/src/agenticros_sim/worlds/agenticros_indoor.sdf +183 -0
  294. package/runtime/scripts/activate_workspace.sh +285 -0
  295. package/runtime/scripts/agenticros-describer.policy.yaml +96 -0
  296. package/runtime/scripts/agenticros-proxy.cjs +99 -0
  297. package/runtime/scripts/agenticros-rosbridge.policy.yaml +62 -0
  298. package/runtime/scripts/check-cli-tarball-size.mjs +42 -0
  299. package/runtime/scripts/configure_agenticros.sh +200 -0
  300. package/runtime/scripts/configure_for_sim.sh +64 -0
  301. package/runtime/scripts/fix-openclaw-control-ui-path.sh +20 -0
  302. package/runtime/scripts/install_cli.sh +94 -0
  303. package/runtime/scripts/install_rosbridge_from_source.sh +67 -0
  304. package/runtime/scripts/lib/agenticros-banner.sh +28 -0
  305. package/runtime/scripts/onboard_robot.sh +75 -0
  306. package/runtime/scripts/openai.policy.yaml +77 -0
  307. package/runtime/scripts/openclaw-dashboard-url.cjs +49 -0
  308. package/runtime/scripts/pack-runtime.mjs +245 -0
  309. package/runtime/scripts/run_demo_native.sh +43 -0
  310. package/runtime/scripts/run_nemoclaw_host_stack.sh +91 -0
  311. package/runtime/scripts/run_robot_rosbridge.sh +36 -0
  312. package/runtime/scripts/sandbox_rosbridge_relay.py +137 -0
  313. package/runtime/scripts/setup-openclaw-local.cjs +75 -0
  314. package/runtime/scripts/setup_gateway_plugin.sh +329 -0
  315. package/runtime/scripts/setup_robot.sh +113 -0
  316. package/runtime/scripts/setup_workspace.sh +484 -0
  317. package/runtime/scripts/sim/run_sim.sh +146 -0
  318. package/runtime/scripts/smoke_test_nemoclaw.sh +123 -0
  319. package/runtime/scripts/start_demo.sh +55 -0
  320. package/runtime/scripts/sync-skill-tools.mjs +335 -0
  321. package/runtime/scripts/test-follow-me-sim.mjs +135 -0
  322. package/runtime/scripts/test-mcp-e2e.mjs +184 -0
  323. package/runtime/scripts/test-rclnodejs.mts +129 -0
  324. package/runtime/scripts/use-openclaw-2026.2.26.sh +19 -0
  325. package/runtime/scripts/use-openclaw-2026.3.11.sh +19 -0
  326. package/runtime/scripts/zenoh-bridge-ros2dds-robot.json5 +30 -0
  327. package/runtime/scripts/zenohd-agenticros.json5 +11 -0
  328. package/runtime/scripts/zenohd-rosclaw.json5 +11 -0
  329. package/runtime/tsconfig.base.json +19 -0
  330. package/index.js +0 -6
@@ -0,0 +1,292 @@
1
+ # Memory
2
+
3
+ AgenticROS ships an **optional**, **off-by-default** cross-adapter semantic memory subsystem. When enabled, OpenClaw, Claude Code MCP, Claude Desktop (via MCP), and Gemini CLI all expose the same four tools — `memory_remember`, `memory_recall`, `memory_forget`, `memory_status` — backed by a **shared, file-backed store**. The default namespace is the robot namespace, so every adapter talking to the same robot sees the same memories across processes, sessions, and restarts.
4
+
5
+ When disabled (the default), the memory tools are not registered at all. There are no new dependencies, no new files on disk, and no behavior change for existing users.
6
+
7
+ > **Cross-process out of the box.** With the `mem0` backend, the underlying `mem0ai/oss` package writes to `~/.mem0/vector_store.db` (SQLite + vectors) so a fact you remember from Claude Desktop is immediately recall-able from OpenClaw — and vice versa — without any extra setup or running server. With the `local` backend, the shared file is `~/.agenticros/memory.json`. See [Cross-adapter behavior](#cross-adapter-behavior) below.
8
+
9
+ ---
10
+
11
+ ## When to enable
12
+
13
+ Useful when:
14
+
15
+ - You use **multiple AI agents** with the same robot (e.g. OpenClaw on desktop + Claude Code on your phone via Claude Dispatch). Each agent sees what the others learned.
16
+ - You want **facts to persist across sessions** (preferences, room layouts, names, routines) without re-explaining them every conversation.
17
+ - You want the robot to **build up environment knowledge** over time ("the rug in the hallway is fragile", "the cat gets startled by fast turns").
18
+
19
+ Not necessarily worth it when:
20
+
21
+ - You only ever talk to the robot in single one-shot sessions.
22
+ - Your needs fit in a static system prompt or config file.
23
+
24
+ ---
25
+
26
+ ## The four tools
27
+
28
+ | Tool | Use |
29
+ |---|---|
30
+ | `memory_remember` | Store a fact: `{ content, tags?, path?, namespace? }`. Returns the persisted record id. |
31
+ | `memory_recall` | Search by free-text query: `{ query, limit?, namespace? }`. Returns ranked matches. |
32
+ | `memory_forget` | Delete: `{ id }`, `{ query, namespace }`, or `{ namespace }`. Irreversible. |
33
+ | `memory_status` | Health check: `{ enabled, backend, namespace, recordCount, lastWriteAt, embedder? }`. |
34
+
35
+ Tool descriptions in each adapter remind the agent to **store selectively** — memory is for facts the user wants remembered, not for transcribing every conversation.
36
+
37
+ ---
38
+
39
+ ## Namespace
40
+
41
+ By default the namespace is `config.robot.namespace`, so memories are scoped per robot. Override with `config.memory.namespace` (e.g. to share across robots, or to scope per-user). Tools also accept a one-off `namespace` argument.
42
+
43
+ | Scenario | Effective namespace |
44
+ |---|---|
45
+ | Default | `config.robot.namespace` |
46
+ | Per-user override | Set `config.memory.namespace` to the user id |
47
+ | Per-call override | Pass `namespace` in the tool args |
48
+
49
+ > Heads up: with the default, two robots **never** see each other's memories. With a shared override, all robots with that namespace do.
50
+
51
+ ---
52
+
53
+ ## Backends
54
+
55
+ | Backend | Deps | Search quality | Best for |
56
+ |---|---|---|---|
57
+ | `local` (default when enabled) | None | Keyword + recency | Zero-friction setup, "remember this fact" style use |
58
+ | `mem0` | `pnpm add mem0ai` + an embedder | Semantic | Production, fuzzy recall ("what did I say about the kitchen?") |
59
+
60
+ Both store data on the local filesystem. No cloud is involved unless you point `mem0`'s embedder/LLM at one.
61
+
62
+ ---
63
+
64
+ ## Recipes
65
+
66
+ ### Recipe 1: local (zero deps)
67
+
68
+ Edit `~/.agenticros/config.json` (or use the OpenClaw config UI at `/agenticros/config`):
69
+
70
+ ```json
71
+ {
72
+ "memory": {
73
+ "enabled": true,
74
+ "backend": "local"
75
+ }
76
+ }
77
+ ```
78
+
79
+ Restart the gateway (OpenClaw) or just the next tool call (Claude Code MCP re-reads config on every call; Gemini reads on every invocation).
80
+
81
+ That's it. Memories live in `~/.agenticros/memory.json`.
82
+
83
+ ### Recipe 2: `mem0` + OpenAI (cloud embedder)
84
+
85
+ ```bash
86
+ pnpm add mem0ai
87
+ export OPENAI_API_KEY=sk-...
88
+ ```
89
+
90
+ ```json
91
+ {
92
+ "memory": {
93
+ "enabled": true,
94
+ "backend": "mem0"
95
+ }
96
+ }
97
+ ```
98
+
99
+ The factory auto-detects the OpenAI key and configures the embedder as `text-embedding-3-small`. Operational data is written under `~/.mem0/` (persistent SQLite + vector store, shared across all processes on this host) and the operation history audit log lives at `~/.agenticros/memory-history.db`.
100
+
101
+ ### Recipe 3: `mem0` + Ollama (fully local)
102
+
103
+ ```bash
104
+ pnpm add mem0ai
105
+ ollama pull nomic-embed-text
106
+ ```
107
+
108
+ ```json
109
+ {
110
+ "memory": {
111
+ "enabled": true,
112
+ "backend": "mem0",
113
+ "mem0": {
114
+ "embedder": {
115
+ "provider": "ollama",
116
+ "config": { "model": "nomic-embed-text" }
117
+ }
118
+ }
119
+ }
120
+ }
121
+ ```
122
+
123
+ The factory detects Ollama running at `http://localhost:11434` and uses it for embeddings. Nothing leaves the host.
124
+
125
+ ---
126
+
127
+ ## Cross-adapter behavior
128
+
129
+ Memories are stored on the **local filesystem** and indexed by namespace. Any process on the same host that uses the same backend, same namespace, and same store paths sees the same memories.
130
+
131
+ | Adapter | When it picks up new memories |
132
+ |---|---|
133
+ | **OpenClaw plugin** | At the start of the next chat session (the system context refetches the recently-remembered list every `before_agent_start`). For live `memory_recall` calls, immediately. |
134
+ | **Claude Code MCP** | Immediately on every tool call (config is reloaded on each call). |
135
+ | **Claude Desktop (MCP)** | Same as Claude Code — fresh tool call sees fresh data. |
136
+ | **Gemini CLI** | Each `agenticros-gemini` invocation is a fresh process; it sees everything written so far. |
137
+
138
+ Files written when memory is enabled:
139
+
140
+ - `~/.mem0/vector_store.db` — mem0's SQLite + vectors (mem0 backend only).
141
+ - `~/.mem0/config.json` — mem0 internal config (mem0 backend only).
142
+ - `~/.agenticros/memory-history.db` — mem0 operation history audit log (mem0 backend only; path configurable via `memory.mem0.historyDbPath`).
143
+ - `~/.agenticros/memory.json` — JSON store for the local backend (path configurable via `memory.local.storePath`).
144
+
145
+ To clear everything for a namespace: use the OpenClaw config UI's **Clear all in namespace** button, or call `memory_forget` from any adapter with no `id` and no `query` (just the namespace).
146
+
147
+ ### Verifying cross-process sharing works
148
+
149
+ ```bash
150
+ # From any adapter, e.g. Claude Desktop:
151
+ "Remember that the robot has a RealSense D435i for its eyes."
152
+
153
+ # Then, from OpenClaw chat in a browser tab:
154
+ "What do I have for eyes?"
155
+ ```
156
+
157
+ OpenClaw should answer **from memory** (no `ros2_camera_snapshot`, no ROS topic query). If it instead reaches for ROS tools, that means the chat session was opened **before** the fact was stored — close the chat and start a new one so the system context can refresh.
158
+
159
+ ### OpenClaw chat context injection
160
+
161
+ When the OpenClaw plugin starts each chat session and memory is enabled, the plugin injects a short **Memory** section into the system prompt:
162
+
163
+ - Instructions telling the LLM to call `memory_recall` **before** answering personal-context questions like *"what do I have for X"*, *"what's my Y"*, *"where is the Z"*.
164
+ - A snapshot of up to 10 **recently-remembered** facts (newest first), so the most common personal-context questions can be answered **without** a tool call.
165
+
166
+ The snapshot is produced via the new `MemoryProvider.recent(namespace, limit)` method on `@agenticros/core`. Both backends implement it; for the `mem0` backend it uses `memory.getAll({ filters: { user_id: namespace } })` and sorts by `created_at` desc.
167
+
168
+ ---
169
+
170
+ ## Smart-defaults auto-detection
171
+
172
+ When `backend === "mem0"` and you have **not** set `memory.mem0.embedder`, the factory probes:
173
+
174
+ 1. Ollama at `http://localhost:11434/api/tags` (200 ms timeout). On success, embedder defaults to `{ provider: "ollama", config: { model: "nomic-embed-text" } }`.
175
+ 2. Otherwise, `OPENAI_API_KEY` in the environment. On success, embedder defaults to `{ provider: "openai", config: { model: "text-embedding-3-small" } }`.
176
+ 3. Otherwise, throws a single-line actionable error pointing you back here.
177
+
178
+ If you want explicit control, set `memory.mem0.embedder` and the auto-detection is bypassed.
179
+
180
+ ---
181
+
182
+ ## `inferOnWrite`: raw store vs LLM extraction
183
+
184
+ `mem0ai/oss` can optionally run LLM-driven fact extraction on `add` — the model rewrites your input into one or more atomic facts before storing.
185
+
186
+ | `inferOnWrite` | Behavior | Cost on write |
187
+ |---|---|---|
188
+ | `false` (default) | Content stored verbatim. Agent decides what to remember. | No LLM call |
189
+ | `true` | mem0 calls its configured `llm` to extract facts. | ~200–500 ms + tokens |
190
+
191
+ When unsure, leave it `false`. Flip it on later if recall quality on conversational text isn't enough.
192
+
193
+ ```json
194
+ {
195
+ "memory": {
196
+ "enabled": true,
197
+ "backend": "mem0",
198
+ "mem0": {
199
+ "inferOnWrite": true,
200
+ "llm": { "provider": "openai", "config": { "model": "gpt-4o-mini" } }
201
+ }
202
+ }
203
+ }
204
+ ```
205
+
206
+ ---
207
+
208
+ ## OpenClaw config UI
209
+
210
+ Visit `/agenticros/config` (e.g. `http://localhost:18790/agenticros/config` via the proxy). The Memory section has:
211
+
212
+ - **Off / Local / Mem0** radio buttons.
213
+ - For Mem0: `inferOnWrite` checkbox and an editable `historyDbPath`.
214
+ - **Test** button — calls `GET /agenticros/memory/status` and shows the parsed JSON inline.
215
+ - **Clear all in namespace** button — calls `POST /agenticros/memory/clear` after confirmation. Useful when you've been experimenting and want a clean slate.
216
+
217
+ ---
218
+
219
+ ## Verifying setup
220
+
221
+ From any adapter, call:
222
+
223
+ ```text
224
+ memory_status({})
225
+ ```
226
+
227
+ Expected response when memory is enabled:
228
+
229
+ ```json
230
+ {
231
+ "success": true,
232
+ "enabled": true,
233
+ "backend": "local",
234
+ "namespace": "robot3946b404c33e4aa39a8d16deb1c5c593",
235
+ "recordCount": 0,
236
+ "lastWriteAt": null
237
+ }
238
+ ```
239
+
240
+ If `enabled` comes back `false`, double-check `memory.enabled` in your config file. If you set `backend: "mem0"` but get an embedder error, follow the auto-detect order above.
241
+
242
+ ---
243
+
244
+ ## Troubleshooting
245
+
246
+ | Symptom | Cause | Fix |
247
+ |---|---|---|
248
+ | `Memory is not enabled.` returned from a memory tool | Config has `memory.enabled: false` (or no `memory` block) | Set `memory.enabled: true` and restart the consumer (gateway / MCP server) |
249
+ | `memory: backend "mem0" requires the "mem0ai" package.` | `pnpm add mem0ai` not run | Run `pnpm add mem0ai` in the workspace |
250
+ | `memory: backend "mem0" needs an embedder.` | No Ollama, no `OPENAI_API_KEY`, no explicit `embedder` | Run Ollama, set the env var, or configure `memory.mem0.embedder` |
251
+ | Memory tools missing from `tools/list` (Claude Code / Claude Desktop) | `memory.enabled` is false in `~/.agenticros/config.json` (MCP server reads that file, not OpenClaw's gateway config) | Add the `memory` block to `~/.agenticros/config.json` and restart the MCP client |
252
+ | `Tool error: Transport connection timed out after 15s. Is zenohd running?` on a memory call | Older build that routed memory tools through the Zenoh transport | Rebuild adapter (`pnpm --filter @agenticros/claude-code build`, or `pnpm --filter @agenticros/gemini build`) — memory tools no longer touch the transport |
253
+ | Memories don't follow across adapters | Different `robot.namespace` between adapters | Make sure all adapters use the same robot namespace (or override `memory.namespace`) |
254
+ | OpenClaw chat doesn't seem to know about a fact you just stored | Chat session was opened before the fact was stored | Close and reopen the chat — the `Memory` system-context block is built at `before_agent_start` and refreshes per session |
255
+ | OpenClaw chat reaches for `ros2_*` tools instead of `memory_recall` for a personal-fact question | Old build without the system-context "Memory" injection | Rebuild the plugin (`pnpm --filter agenticros build`) and restart the gateway |
256
+ | MCP server logs | — | `/tmp/agenticros-mcp.log` (Claude Code); OpenClaw gateway log under `/tmp/openclaw/` for the OpenClaw plugin |
257
+
258
+ ---
259
+
260
+ ## Architecture in one diagram
261
+
262
+ ```
263
+ +----------------+ +-------------------+ +---------------+
264
+ | OpenClaw | | Claude Code / | | Gemini CLI |
265
+ | plugin | | Claude Desktop | | |
266
+ | | | (MCP / stdio) | | |
267
+ +--------+-------+ +---------+---------+ +-------+-------+
268
+ | | |
269
+ | memory_remember / recall / forget / status |
270
+ | | |
271
+ +---------+-----------+-----------+---------+
272
+ |
273
+ v
274
+ +-------------------------+
275
+ | @agenticros/core |
276
+ | createMemory(config) |
277
+ +----------+----+---------+
278
+ | |
279
+ +-----+ +-----+
280
+ v v
281
+ +-----------+ +-----------------+
282
+ | Local | | Mem0 |
283
+ | provider | | provider |
284
+ +-----+-----+ +--------+--------+
285
+ | |
286
+ v v
287
+ ~/.agenticros/memory.json ~/.mem0/vector_store.db
288
+ +
289
+ embedder (Ollama / OpenAI / ...)
290
+ ```
291
+
292
+ No network sidecar. The mem0 backend runs in-process and writes to `~/.mem0/`. Multiple processes (OpenClaw gateway, Claude Desktop MCP server, ad-hoc `agenticros-gemini` invocations) all read and write the same files — that's how cross-adapter sharing works.
@@ -0,0 +1,347 @@
1
+ # AgenticROS Robot Setup Guide
2
+
3
+ This guide gets the AgenticROS project running on your robot (Ubuntu + ROS2 + OpenClaw) for testing and demos.
4
+
5
+ ## Onboarding (quick path)
6
+
7
+ For a **new robot**, use the setup scripts after cloning the repo:
8
+
9
+ ```bash
10
+ git clone https://github.com/agenticros/agenticros.git
11
+ cd agenticros
12
+ ```
13
+
14
+ - **Interactive wizard** (asks robot vs gateway, then runs the right steps):
15
+ ```bash
16
+ ./scripts/onboard_robot.sh
17
+ ```
18
+
19
+ - **Robot only** (run on the robot):
20
+ ```bash
21
+ ./scripts/setup_robot.sh
22
+ ```
23
+ Optionally: `--ros-distro jazzy` or `humble`, `--skip-apt` to skip apt and build rosbridge from source.
24
+
25
+ - **Gateway only** (run where OpenClaw runs):
26
+ ```bash
27
+ ./scripts/setup_gateway_plugin.sh
28
+ ```
29
+ Optionally: `--rosbridge-url ws://ROBOT_IP:9090`, `--robot-namespace YOUR_NAMESPACE` to document config.
30
+
31
+ Then start the bridges on the robot with `./scripts/run_demo_native.sh` and restart the OpenClaw gateway. See the rest of this doc for manual steps and troubleshooting.
32
+
33
+ ---
34
+
35
+ ## Deployment modes
36
+
37
+ | Setup | OpenClaw runs on | Robot runs | Use case |
38
+ |-------|------------------|------------|----------|
39
+ | **Mode A** (same machine) | The robot | ROS2 + (optional) rosbridge on localhost | Single robot, all-in-one demo |
40
+ | **Mode B** (network) | Your laptop or server | ROS2 + rosbridge_server | Dev/testing, multi-robot |
41
+ | **Mode C** (cloud / remote) | Cloud or VPS | ROS2 + agenticros_agent (WebRTC node) | Remote ops, robot behind NAT |
42
+ | **Mode D** (Zenoh) | Any | ROS2 with zenoh-bridge-ros2dds or Zenoh RMW | Zenoh-based stacks |
43
+
44
+ Choose **Mode A** if OpenClaw is installed on the robot. Choose **Mode B** if OpenClaw runs on another machine on the same network. Choose **Mode C** if OpenClaw is in the cloud and the robot is behind NAT (see [Architecture](architecture.md#deployment-mode-c-cloud--remote)). Choose **Mode D** if your robot uses Zenoh.
45
+
46
+ ---
47
+
48
+ ## Prerequisites on the robot
49
+
50
+ - Ubuntu (22.04 or 24.04 recommended)
51
+ - ROS2 **Humble** or **Jazzy** (match your existing install)
52
+ - (For Mode A) OpenClaw installed on the robot
53
+ - (For Mode B) Robot and OpenClaw machine on the same network
54
+
55
+ ---
56
+
57
+ ## Step 1: Clone and prepare the repo on the robot
58
+
59
+ On the robot (or on your dev machine if you’ll copy the built workspace to the robot):
60
+
61
+ ```bash
62
+ cd ~ # or your preferred path
63
+ git clone https://github.com/agenticros/agenticros.git
64
+ cd agenticros
65
+ ```
66
+
67
+ Use `--ros-distro` to match your ROS2 install (e.g. `humble` or `jazzy`):
68
+
69
+ ```bash
70
+ ./scripts/setup_workspace.sh --ros-distro humble
71
+ ```
72
+
73
+ If you already have ROS2 and only need the AgenticROS workspace built:
74
+
75
+ ```bash
76
+ # Use your distro: humble, jazzy, or kilted
77
+ source /opt/ros/humble/setup.bash # or jazzy
78
+ cd agenticros/ros2_ws
79
+ colcon build --symlink-install
80
+ source install/setup.bash
81
+ ```
82
+
83
+ ---
84
+
85
+ ## Step 2: Install the rosbridge WebSocket server (required for plugin)
86
+
87
+ The plugin talks to ROS2 via **rosbridge** over WebSocket. The robot needs the **rosbridge_suite** (which provides the WebSocket server). Install it for your distro:
88
+
89
+ ```bash
90
+ # Ubuntu/Debian — use your ROS2 distro (humble or jazzy)
91
+ sudo apt update
92
+ sudo apt install -y ros-<DISTRO>-rosbridge-suite
93
+ ```
94
+
95
+ Example for Humble:
96
+
97
+ ```bash
98
+ sudo apt install -y ros-humble-rosbridge-suite
99
+ ```
100
+
101
+ Example for Jazzy:
102
+
103
+ ```bash
104
+ sudo apt install -y ros-jazzy-rosbridge-suite
105
+ ```
106
+
107
+ ---
108
+
109
+ ## Step 3: Run the robot-side stack
110
+
111
+ Activate the workspace and start **rosbridge** (and optionally **agenticros_discovery**).
112
+
113
+ ### Option A: Activate once, then run (recommended)
114
+
115
+ ```bash
116
+ cd /path/to/agenticros
117
+ source scripts/activate_workspace.sh ros_env humble # or jazzy
118
+ ```
119
+
120
+ In **one terminal**, start the rosbridge WebSocket server (port 9090):
121
+
122
+ ```bash
123
+ ros2 launch rosbridge_server rosbridge_websocket_launch.xml
124
+ ```
125
+
126
+ In a **second terminal** (optional but useful for the AI agent), start the discovery node so the plugin knows your topics/services/actions:
127
+
128
+ ```bash
129
+ source /path/to/agenticros/scripts/activate_workspace.sh ros_env humble
130
+ ros2 run agenticros_discovery discovery_node
131
+ ```
132
+
133
+ Keep both running while you use OpenClaw.
134
+
135
+ ### Option B: Use the launch script
136
+
137
+ From the repo root:
138
+
139
+ ```bash
140
+ ./scripts/run_robot_rosbridge.sh [humble|jazzy]
141
+ ```
142
+
143
+ This sources the workspace and starts `rosbridge_server`. In another terminal, run the discovery node as above if you want it.
144
+
145
+ ---
146
+
147
+ ## Step 4: Configure OpenClaw and the AgenticROS plugin
148
+
149
+ > **Install note (OpenClaw 2026.6+).** The OpenClaw install-time code-safety
150
+ > scan rejects any `node_modules/*` symlink that resolves outside the plugin
151
+ > install root. pnpm workspaces always trip this (every dep is a symlink into
152
+ > the hoisted store), so `openclaw plugins install -l ./packages/agenticros`
153
+ > no longer works against the source tree. The supported flow is to flatten
154
+ > the plugin into a deploy directory first with `pnpm deploy --prod`, then
155
+ > link that. The helper script `scripts/setup_gateway_plugin.sh` does this
156
+ > end-to-end; the commands below show the manual steps it runs.
157
+
158
+ ### If OpenClaw is on the robot (Mode A) — default
159
+
160
+ Mode A uses **local DDS** (`LocalTransport`): OpenClaw runs on the **same machine** as ROS 2, and the plugin talks to the ROS graph directly (no rosbridge or Zenoh router required). `ROS_DOMAIN_ID` must match your stack (often **`0`**). **This is the default** — `transport.mode` defaults to `local` in the plugin schema, so you can skip the transport block entirely on the robot.
161
+
162
+ One-shot install with the helper script:
163
+
164
+ ```bash
165
+ cd /path/to/agenticros
166
+ ./scripts/setup_gateway_plugin.sh \
167
+ --robot-namespace robot3946b404c33e4aa39a8d16deb1c5c593 \
168
+ --camera-topic /camera/camera/color/image_raw/compressed
169
+ ```
170
+
171
+ Or the manual equivalent:
172
+
173
+ ```bash
174
+ cd /path/to/agenticros
175
+ pnpm install
176
+ pnpm --filter @agenticros/core build
177
+ pnpm --filter @agenticros/ros-camera build
178
+ pnpm --filter ./packages/agenticros build
179
+
180
+ # Flatten into a deploy dir OpenClaw will accept
181
+ pnpm --filter ./packages/agenticros deploy --prod ~/.agenticros/plugin-deploy
182
+ rm -f ~/.agenticros/plugin-deploy/node_modules/.pnpm/node_modules/agenticros
183
+
184
+ # Register with OpenClaw (linked from the deploy dir, not the workspace)
185
+ openclaw plugins install -l ~/.agenticros/plugin-deploy
186
+
187
+ # Apply
188
+ systemctl --user restart openclaw-gateway.service # or however you run the gateway
189
+ ```
190
+
191
+ (Optional) **Gazebo + TurtleBot3 simulation** on the same host, aligned with the repo bringup package:
192
+
193
+ ```bash
194
+ source /opt/ros/jazzy/setup.bash
195
+ cd /path/to/agenticros/ros2_ws && source install/setup.bash
196
+ ros2 launch agenticros_bringup mode_a_gazebo.launch.py
197
+ ```
198
+
199
+ Or with RViz: `ros2 launch agenticros_bringup mode_a_gazebo_rviz.launch.py`. Use `ros_domain_id:=N` if the plugin uses a non-zero domain. See the repository README section **“RViz2 and Gazebo”**.
200
+
201
+ If you prefer rosbridge on localhost instead (e.g. for debugging), you can still run **`rosbridge_server`** and set **Transport mode** to **`rosbridge`** with **`ws://localhost:9090`** — that is closer to Mode B wiring, not strict Mode A.
202
+
203
+ **Re-deploying after a code change.** The deploy directory is a snapshot, not a symlink to the workspace. After editing the plugin source, re-run `scripts/setup_gateway_plugin.sh` (it's idempotent), or repeat the `pnpm --filter ./packages/agenticros build` + `pnpm deploy --prod ~/.agenticros/plugin-deploy` + gateway-restart steps.
204
+
205
+ ### If OpenClaw is on another machine (Mode B)
206
+
207
+ 1. On your **laptop/server** where OpenClaw runs:
208
+ ```bash
209
+ cd /path/to/agenticros
210
+ ./scripts/setup_gateway_plugin.sh \
211
+ --transport rosbridge \
212
+ --rosbridge-url "ws://<ROBOT_IP>:9090" \
213
+ --robot-namespace <YOUR_NAMESPACE>
214
+ ```
215
+ Or the manual equivalent of the deploy flow shown in Mode A.
216
+ 2. Find the robot’s IP (on the robot run `hostname -I` or check your router).
217
+ 3. In OpenClaw, the plugin config will already have:
218
+ - **Transport mode:** `rosbridge`
219
+ - **Rosbridge URL:** `ws://<ROBOT_IP>:9090`
220
+ Example: `ws://192.168.1.50:9090`
221
+ 4. Ensure the robot’s firewall allows TCP port **9090** (rosbridge):
222
+ ```bash
223
+ sudo ufw allow 9090/tcp
224
+ sudo ufw reload
225
+ ```
226
+ 5. Start OpenClaw and your messaging app; the plugin will connect to the robot at that URL.
227
+
228
+ ### If using cloud + WebRTC (Mode C)
229
+
230
+ OpenClaw runs in the cloud; the robot runs the **AgenticROS Agent Node** (`agenticros_agent`) and connects via WebRTC (STUN/TURN). Setup is different from A/B/D: the robot does **not** run rosbridge or Zenoh — it runs the WebRTC agent node and talks to the cloud plugin over a data channel. For full steps, see [Deployment Mode C: Cloud / Remote](architecture.md#deployment-mode-c-cloud--remote) in the Architecture doc. Configure the plugin with **Transport mode:** `webrtc` and the appropriate signaling URL, API URL, robot ID, and key.
231
+
232
+ ### If using Zenoh (Mode D)
233
+
234
+ 1. Run a Zenoh router (**zenohd**) with **zenoh-plugin-remote-api** so the plugin can connect. AgenticROS uses **zenoh-ts**, which connects only via **WebSocket** (e.g. `ws://localhost:10000`), not native TCP. If you only start `zenohd` with default TCP (7447), native tools like `z_sub -e tcp/127.0.0.1:7447` will see traffic but AgenticROS will not. See [Zenoh setup for AgenticROS](zenoh-agenticros.md) for a config that enables the remote-api WebSocket on port 10000.
235
+ 2. Install the plugin via the helper script with Zenoh wiring:
236
+ ```bash
237
+ cd /path/to/agenticros
238
+ ./scripts/setup_gateway_plugin.sh \
239
+ --transport zenoh \
240
+ --zenoh-endpoint "ws://<ROUTER_IP>:10000" \
241
+ --robot-namespace <YOUR_NAMESPACE>
242
+ ```
243
+ 3. Or set the AgenticROS plugin config manually:
244
+ - **Transport mode:** `zenoh`
245
+ - **Zenoh Router Endpoint:** `ws://<ROUTER_IP>:10000` (or the URL your router advertises)
246
+ - **Zenoh Domain ID:** match your `ROS_DOMAIN_ID` (default `0`)
247
+ 4. Optionally set **ROS2 Robot Namespace** (e.g. `robot-uuid`). Topics will be namespaced (e.g. `/robot-uuid/cmd_vel`). This applies to all transport modes.
248
+
249
+ ### ROS2 topic namespace
250
+
251
+ The **robot.namespace** config (e.g. `robot-uuid`) makes the plugin use namespaced topics: root-level names like `cmd_vel` become `/robot-uuid/cmd_vel`. Use this when multiple robots share the same ROS 2 / Zenoh network. Documented in the plugin config as “ROS2 topic namespace; e.g. robot-uuid gives topics like /robot-uuid/cmd_vel”.
252
+
253
+ ---
254
+
255
+ ## Quick checks
256
+
257
+ - **Rosbridge listening:** On the robot, with rosbridge running:
258
+ ```bash
259
+ ss -tlnp | grep 9090
260
+ ```
261
+ You should see something like `*:9090`.
262
+
263
+ - **Discovery:** With discovery running, you can inspect what the agent will see:
264
+ ```bash
265
+ ros2 topic echo /agenticros/capabilities --once
266
+ ```
267
+
268
+ - **Plugin connection:** In OpenClaw, after starting a chat, the plugin should connect to the robot; check OpenClaw logs for AgenticROS connection messages.
269
+
270
+ ---
271
+
272
+ ## Try a demo
273
+
274
+ Once everything is running:
275
+
276
+ 1. Send a message to your bot, e.g. **“Move forward 1 meter”** (if your robot has `/cmd_vel`).
277
+ **If the robot doesn’t move:** the base may subscribe to a **namespaced** cmd_vel (e.g. `/robot3946b404c33e4aa39a8d16deb1c5c593/cmd_vel`). Set **robot.namespace** in the plugin config to that prefix (e.g. `robot3946b404c33e4aa39a8d16deb1c5c593`), then restart the gateway. From the repo: `./scripts/configure_agenticros.sh --mode zenoh --zenoh-endpoint ws://localhost:10000 --namespace robot3946b404c33e4aa39a8d16deb1c5c593`.
278
+ 2. Or **“What do you see?”** if you have a camera topic.
279
+ 3. Use **`/estop`** for emergency stop (bypasses the AI).
280
+
281
+ ---
282
+
283
+ ## Troubleshooting
284
+
285
+ | Issue | What to check |
286
+ |-------|----------------|
287
+ | Plugin won’t connect | Rosbridge URL correct? Robot IP (Mode B)? Firewall allows 9090? |
288
+ | “Package not found” (rosbridge_server) | Install `ros-<distro>-rosbridge-suite` (Step 2). |
289
+ | “Package not found” (agenticros_discovery) | Run `source scripts/activate_workspace.sh` and ensure `ros2_ws` is built. |
290
+ | Different ROS distro | Use `--ros-distro humble` or `jazzy` in `setup_workspace.sh` and when sourcing. |
291
+
292
+ ### "Rate limited" in webchat (OpenAI)
293
+
294
+ The message comes from **OpenAI's API limits**, not from AgenticROS. The gateway sends your chat to OpenAI; when OpenAI returns 429 (rate limit), OpenClaw shows "rate limited".
295
+
296
+ 1. **Confirm it's OpenAI** — Check gateway logs:
297
+ `journalctl --user -u openclaw-gateway.service -n 100 --no-pager | grep -i "429\|rate\|limit\|error"`
298
+ 2. **Check your OpenAI account** — [Usage](https://platform.openai.com/usage), [API keys](https://platform.openai.com/api-keys). Free/low tiers have strict RPM/TPM and can stay limited for a while.
299
+ 3. **What helps** — Wait (RPM/TPM reset in minutes; daily limits at UTC midnight). Or in OpenClaw switch to a model with higher limits if available.
300
+ 4. **AgenticROS** — We only trim context/tool output to use fewer tokens; we can't remove OpenAI's limits.
301
+
302
+ ### 404 errors when installing rosbridge_suite
303
+
304
+ If `sudo apt install ros-jazzy-rosbridge-suite` fails with **404 Not Found** (stale ROS or Ubuntu mirror):
305
+
306
+ 1. **Refresh and retry**
307
+ ```bash
308
+ sudo apt update
309
+ sudo apt install -y ros-jazzy-rosbridge-suite
310
+ ```
311
+
312
+ 2. **If it still fails**, install **from source** so you don't depend on the broken packages:
313
+ ```bash
314
+ cd /home/ubuntu/Projects/agenticros
315
+ ./scripts/install_rosbridge_from_source.sh jazzy
316
+ ```
317
+ Then run rosbridge with:
318
+ ```bash
319
+ source /opt/ros/jazzy/setup.bash
320
+ source ros2_ws/install/setup.bash
321
+ ros2 launch rosbridge_server rosbridge_websocket_launch.xml
322
+ ```
323
+
324
+ For deployment with OpenClaw in the cloud and the robot behind NAT, see **Mode C** in [Architecture](architecture.md) (WebRTC + `agenticros_agent` on the robot).
325
+
326
+ ---
327
+
328
+ ## Launch script (mode and namespace)
329
+
330
+ Use the configuration script to set transport mode, robot namespace, and optional Docker in one go:
331
+
332
+ ```bash
333
+ ./scripts/configure_agenticros.sh --interactive
334
+ ```
335
+
336
+ Or with flags:
337
+
338
+ | Goal | Example |
339
+ |------|---------|
340
+ | Mode A (OpenClaw on robot) | `--mode A` |
341
+ | Mode B (robot on network) | `--mode B --robot-ip 192.168.1.50` |
342
+ | Mode C (cloud + WebRTC) | `--mode C` (then set signaling/API/robot in config) |
343
+ | Mode D (Zenoh) | `--mode D --zenoh-endpoint ws://localhost:10000` |
344
+ | Robot namespace | `--namespace robot-uuid` (topics like `/robot-uuid/cmd_vel`) |
345
+ | Demo with Docker (Mode B + local rosbridge) | `--docker` |
346
+
347
+ The script updates `~/.openclaw/openclaw.json` (or `OPENCLAW_CONFIG`) with `plugins.entries.agenticros.config`. It requires **jq** for JSON edits; without jq it prints the options for you to set manually. With `--docker`, it also starts the Docker Compose ROS2+rosbridge service so you can point the plugin at `ws://localhost:9090`.
@@ -0,0 +1,28 @@
1
+ {
2
+ "name": "agenticros-monorepo",
3
+ "version": "0.0.1",
4
+ "private": true,
5
+ "type": "module",
6
+ "description": "AgenticROS — monorepo for ROS2 + AI agent integrations. The publishable CLI lives in packages/agenticros-cli (npm: `agenticros`).",
7
+ "scripts": {
8
+ "build": "pnpm -r build",
9
+ "clean": "pnpm -r exec rm -rf dist tsconfig.tsbuildinfo",
10
+ "lint": "pnpm -r lint",
11
+ "typecheck": "pnpm -r typecheck",
12
+ "mcp:kill": "pkill -f 'node packages/agenticros-claude-code/dist/index.js' || true",
13
+ "sync-skill-tools": "node scripts/sync-skill-tools.mjs",
14
+ "sync-skill-tools:dry": "node scripts/sync-skill-tools.mjs --dry-run --verbose"
15
+ },
16
+ "engines": {
17
+ "node": ">=20.0.0",
18
+ "pnpm": ">=9.0.0"
19
+ },
20
+ "packageManager": "pnpm@9.15.4",
21
+ "author": "PlaiPin",
22
+ "license": "Apache-2.0",
23
+ "pnpm": {
24
+ "patchedDependencies": {
25
+ "@eclipse-zenoh/zenoh-ts@1.9.0": "patches/@eclipse-zenoh__zenoh-ts@1.9.0.patch"
26
+ }
27
+ }
28
+ }