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 @@
1
+ {"version":3,"file":"marketplace.js","sourceRoot":"","sources":["../../src/util/marketplace.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7D,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAE9B,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,CAAC,MAAM,gBAAgB,GAAG,mCAAmC,CAAC;AAEpE,MAAM,UAAU,OAAO;IACrB,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,gBAAgB,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACrF,CAAC;AA2BD,KAAK,UAAU,OAAO,CAAI,GAAW;IACnC,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE,EAAE,CAAC,CAAC;IAC1E,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,IAAI,IAAI,GAAG,EAAE,CAAC;QACd,IAAI,CAAC;YACH,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAC1B,CAAC;QAAC,MAAM,CAAC;YACP,YAAY;QACd,CAAC;QACD,MAAM,IAAI,gBAAgB,CACxB,mBAAmB,GAAG,CAAC,MAAM,OAAO,GAAG,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CACjE,CAAC;IACJ,CAAC;IACD,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAM,CAAC;AACjC,CAAC;AAED,MAAM,OAAO,gBAAiB,SAAQ,KAAK;CAAG;AAE9C,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,CAAS,EACT,OAA2E,EAAE;IAE7E,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,OAAO,EAAE,SAAS,CAAC,CAAC;IACzC,IAAI,CAAC;QAAE,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAClC,IAAI,IAAI,CAAC,QAAQ;QAAE,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IACjE,IAAI,IAAI,CAAC,IAAI;QAAE,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IACrD,IAAI,IAAI,CAAC,KAAK;QAAE,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAChE,MAAM,IAAI,GAAG,MAAM,OAAO,CAAiC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;IACzE,OAAO,IAAI,CAAC,MAAM,CAAC;AACrB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,IAAY;IACzC,OAAO,OAAO,CAAmB,GAAG,OAAO,EAAE,WAAW,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACtF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,IAAY;IACrD,OAAO,OAAO,CACZ,GAAG,OAAO,EAAE,WAAW,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAC1D,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,sBAAsB;AACtB,8EAA8E;AAE9E;;;;;GAKG;AACH,MAAM,UAAU,eAAe;IAC7B,MAAM,KAAK,GAAG,cAAc,EAAE,CAAC;IAC/B,uDAAuD;IACvD,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,IACE,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;YACjC,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC,EACrD,CAAC;YACD,OAAO,CAAC,CAAC;QACX,CAAC;IACH,CAAC;IACD,mDAAmD;IACnD,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC;IAChE,IAAI,YAAY;QAAE,OAAO,YAAY,CAAC;IACtC,oBAAoB;IACpB,OAAO,KAAK,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;AACnC,CAAC;AAOD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,UAA6B,EAC7B,OAA6E,EAAE;IAE/E,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAC5C,MAAM,OAAO,GAAG,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC;QACnD,CAAC,CAAC,UAAU,CAAC,SAAS;QACtB,CAAC,CAAC,GAAG,UAAU,CAAC,SAAS,MAAM,CAAC;IAClC,oEAAoE;IACpE,8DAA8D;IAC9D,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO;QACzB,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;QACvB,CAAC,CAAC,eAAe,EAAE,CAAC;IACtB,MAAM,QAAQ,GAAG,QAAQ,CACvB,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAC/D,CAAC;IACF,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAExC,IAAI,cAAc,GAAG,KAAK,CAAC;IAC3B,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzB,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAChB,GAAG,CAAC,qBAAqB,QAAQ,oBAAoB,CAAC,CAAC;YACvD,cAAc,GAAG,IAAI,CAAC;YACtB,MAAM,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,GAAG,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;SAAM,CAAC;QACN,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACvC,GAAG,CAAC,WAAW,OAAO,SAAS,QAAQ,GAAG,CAAC,CAAC;QAC5C,MAAM,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,GAAG,CAAC,CAAC;IAChE,CAAC;IAED,qEAAqE;IACrE,uCAAuC;IACvC,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IACvC,IAAI,MAAM,EAAE,CAAC;QACX,GAAG,CAAC,uCAAuC,CAAC,CAAC;QAC7C,MAAM,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC;QAC/C,MAAM,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC;IACtD,CAAC;SAAM,CAAC;QACN,MAAM,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC;QAChD,MAAM,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC;IACvD,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC;AACtC,CAAC;AAED,KAAK,UAAU,KAAK,CAClB,GAAW,EACX,GAAW,EACX,IAAc,EACd,GAA0B;IAE1B,GAAG,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC;IAC/C,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE;QAC3B,GAAG;QACH,MAAM,EAAE,SAAS;QACjB,MAAM,EAAE,SAAS;QACjB,MAAM,EAAE,IAAI;KACb,CAAC,CAAC;IACH,MAAM,GAAG,CAAC;AACZ,CAAC;AAED,KAAK,UAAU,MAAM,CAAC,IAAY;IAChC,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;QACzE,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,6EAA6E;AAC7E,MAAM,CAAC,MAAM,WAAW,GAAG,OAAO,CAAC"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Bridge from the CLI to the AgenticROS MCP server's `ros2_discover_robots` tool.
3
+ *
4
+ * Rather than re-implement live-topic discovery in the CLI (which would
5
+ * force `@agenticros/core` and its transport deps into the published
6
+ * `agenticros` tarball), we spawn the existing MCP server binary
7
+ * (`packages/agenticros-claude-code/dist/index.js`) and JSON-RPC the
8
+ * `ros2_discover_robots` tool — the exact code path Claude Code uses.
9
+ * This keeps the CLI light AND ensures the CLI sees the same robots
10
+ * the agent sees.
11
+ *
12
+ * Resilience: the spawn-and-rpc dance is wrapped in an overall timeout
13
+ * so a hung Zenoh router or a malformed reply can't lock up the CLI.
14
+ * The stderr stream is drained silently — the MCP server emits a
15
+ * connection banner that isn't useful for the CLI consumer.
16
+ */
17
+ export interface DetectedRobot {
18
+ id: string;
19
+ cmdVelTopic: string;
20
+ topicCount: number;
21
+ configuredRobotId: string | null;
22
+ }
23
+ export interface ConfiguredRobotSummary {
24
+ id: string;
25
+ name: string;
26
+ namespace: string;
27
+ cameraTopic: string;
28
+ source: "config" | "legacy";
29
+ }
30
+ export interface DiscoveryResult {
31
+ total_topics: number;
32
+ detected: DetectedRobot[];
33
+ configured_online: ConfiguredRobotSummary[];
34
+ configured_offline: ConfiguredRobotSummary[];
35
+ unknown_detected: DetectedRobot[];
36
+ }
37
+ /**
38
+ * Resolve the path to the AgenticROS MCP server entrypoint, mirroring
39
+ * the same lookup the rest of the CLI uses. Returns undefined when the
40
+ * dist hasn't been built yet (so the caller can surface an actionable
41
+ * error rather than a cryptic spawn failure).
42
+ */
43
+ export declare function findMcpEntry(): string | undefined;
44
+ /**
45
+ * Run `ros2_discover_robots` against the MCP server and return the
46
+ * parsed `DiscoveryResult`.
47
+ *
48
+ * Throws with an actionable message when:
49
+ * - the MCP server binary can't be found (suggests `pnpm build`)
50
+ * - the initialize handshake times out (suggests Zenoh / config issues)
51
+ * - the tool reports `isError: true` (surfaces the inner error)
52
+ *
53
+ * Always cleans up the child process — no orphan node processes after
54
+ * a failed call.
55
+ */
56
+ export declare function discoverViaMcp(): Promise<DiscoveryResult>;
57
+ //# sourceMappingURL=mcp-discovery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-discovery.d.ts","sourceRoot":"","sources":["../../src/util/mcp-discovery.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAWH,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC;AAED,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,QAAQ,GAAG,QAAQ,CAAC;CAC7B;AAED,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,iBAAiB,EAAE,sBAAsB,EAAE,CAAC;IAC5C,kBAAkB,EAAE,sBAAsB,EAAE,CAAC;IAC7C,gBAAgB,EAAE,aAAa,EAAE,CAAC;CACnC;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,IAAI,MAAM,GAAG,SAAS,CAIjD;AAiED;;;;;;;;;;;GAWG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,eAAe,CAAC,CAwD/D"}
@@ -0,0 +1,153 @@
1
+ /**
2
+ * Bridge from the CLI to the AgenticROS MCP server's `ros2_discover_robots` tool.
3
+ *
4
+ * Rather than re-implement live-topic discovery in the CLI (which would
5
+ * force `@agenticros/core` and its transport deps into the published
6
+ * `agenticros` tarball), we spawn the existing MCP server binary
7
+ * (`packages/agenticros-claude-code/dist/index.js`) and JSON-RPC the
8
+ * `ros2_discover_robots` tool — the exact code path Claude Code uses.
9
+ * This keeps the CLI light AND ensures the CLI sees the same robots
10
+ * the agent sees.
11
+ *
12
+ * Resilience: the spawn-and-rpc dance is wrapped in an overall timeout
13
+ * so a hung Zenoh router or a malformed reply can't lock up the CLI.
14
+ * The stderr stream is drained silently — the MCP server emits a
15
+ * connection banner that isn't useful for the CLI consumer.
16
+ */
17
+ import { spawn } from "node:child_process";
18
+ import { existsSync } from "node:fs";
19
+ import { join } from "node:path";
20
+ import { getCliPaths } from "./paths.js";
21
+ const DISCOVER_TIMEOUT_MS = 15_000;
22
+ const INIT_TIMEOUT_MS = 8_000;
23
+ /**
24
+ * Resolve the path to the AgenticROS MCP server entrypoint, mirroring
25
+ * the same lookup the rest of the CLI uses. Returns undefined when the
26
+ * dist hasn't been built yet (so the caller can surface an actionable
27
+ * error rather than a cryptic spawn failure).
28
+ */
29
+ export function findMcpEntry() {
30
+ const { mcpDistDir } = getCliPaths();
31
+ const entry = join(mcpDistDir, "index.js");
32
+ return existsSync(entry) ? entry : undefined;
33
+ }
34
+ /** Minimal stdio JSON-RPC client over a child process. */
35
+ class StdioRpc {
36
+ proc;
37
+ buffer = "";
38
+ nextId = 1;
39
+ pending = new Map();
40
+ constructor(proc) {
41
+ this.proc = proc;
42
+ proc.stdout.setEncoding("utf8");
43
+ proc.stdout.on("data", (chunk) => this.onChunk(chunk));
44
+ proc.stderr.setEncoding("utf8");
45
+ proc.stderr.on("data", () => { });
46
+ }
47
+ onChunk(chunk) {
48
+ this.buffer += chunk;
49
+ let idx;
50
+ while ((idx = this.buffer.indexOf("\n")) >= 0) {
51
+ const line = this.buffer.slice(0, idx).trim();
52
+ this.buffer = this.buffer.slice(idx + 1);
53
+ if (!line)
54
+ continue;
55
+ try {
56
+ const msg = JSON.parse(line);
57
+ if (typeof msg.id === "number" && this.pending.has(msg.id)) {
58
+ this.pending.get(msg.id)(msg);
59
+ this.pending.delete(msg.id);
60
+ }
61
+ }
62
+ catch {
63
+ /* ignore non-JSON noise — MCP server occasionally writes diagnostic banners to stdout */
64
+ }
65
+ }
66
+ }
67
+ rpc(method, params, timeoutMs) {
68
+ const id = this.nextId++;
69
+ return new Promise((resolve, reject) => {
70
+ const timer = setTimeout(() => {
71
+ this.pending.delete(id);
72
+ reject(new Error(`JSON-RPC '${method}' timed out after ${timeoutMs / 1000}s`));
73
+ }, timeoutMs);
74
+ this.pending.set(id, (msg) => {
75
+ clearTimeout(timer);
76
+ resolve(msg);
77
+ });
78
+ this.proc.stdin.write(`${JSON.stringify({ jsonrpc: "2.0", id, method, params })}\n`);
79
+ });
80
+ }
81
+ notify(method, params = {}) {
82
+ this.proc.stdin.write(`${JSON.stringify({ jsonrpc: "2.0", method, params })}\n`);
83
+ }
84
+ }
85
+ /**
86
+ * Run `ros2_discover_robots` against the MCP server and return the
87
+ * parsed `DiscoveryResult`.
88
+ *
89
+ * Throws with an actionable message when:
90
+ * - the MCP server binary can't be found (suggests `pnpm build`)
91
+ * - the initialize handshake times out (suggests Zenoh / config issues)
92
+ * - the tool reports `isError: true` (surfaces the inner error)
93
+ *
94
+ * Always cleans up the child process — no orphan node processes after
95
+ * a failed call.
96
+ */
97
+ export async function discoverViaMcp() {
98
+ const entry = findMcpEntry();
99
+ if (!entry) {
100
+ throw new Error("AgenticROS MCP server isn't built. Run `pnpm --filter @agenticros/claude-code build` (or `agenticros init`).");
101
+ }
102
+ // Forward AGENTICROS_* env so the MCP server picks up the same robot
103
+ // namespace + config path the CLI sees.
104
+ const proc = spawn("node", [entry], {
105
+ stdio: ["pipe", "pipe", "pipe"],
106
+ env: { ...process.env },
107
+ });
108
+ try {
109
+ const client = new StdioRpc(proc);
110
+ await client.rpc("initialize", {
111
+ protocolVersion: "2025-03-26",
112
+ clientInfo: { name: "agenticros-cli", version: "1.0" },
113
+ capabilities: {},
114
+ }, INIT_TIMEOUT_MS);
115
+ client.notify("notifications/initialized");
116
+ const callResp = await client.rpc("tools/call", { name: "ros2_discover_robots", arguments: {} }, DISCOVER_TIMEOUT_MS);
117
+ if (callResp.error) {
118
+ throw new Error(`MCP server returned error: ${callResp.error.message}`);
119
+ }
120
+ const result = callResp.result;
121
+ if (!result) {
122
+ throw new Error("MCP server returned no result for ros2_discover_robots.");
123
+ }
124
+ const text = result.content?.[0]?.text ?? "";
125
+ if (result.isError) {
126
+ throw new Error(`ros2_discover_robots failed: ${text}`);
127
+ }
128
+ const parsed = safeParse(text);
129
+ if (!parsed) {
130
+ throw new Error(`Unable to parse ros2_discover_robots response: ${text.slice(0, 200)}`);
131
+ }
132
+ return parsed;
133
+ }
134
+ finally {
135
+ proc.kill();
136
+ }
137
+ }
138
+ function safeParse(text) {
139
+ try {
140
+ const obj = JSON.parse(text);
141
+ return {
142
+ total_topics: Number(obj["total_topics"] ?? 0),
143
+ detected: obj["detected"] ?? [],
144
+ configured_online: obj["configured_online"] ?? [],
145
+ configured_offline: obj["configured_offline"] ?? [],
146
+ unknown_detected: obj["unknown_detected"] ?? [],
147
+ };
148
+ }
149
+ catch {
150
+ return null;
151
+ }
152
+ }
153
+ //# sourceMappingURL=mcp-discovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-discovery.js","sourceRoot":"","sources":["../../src/util/mcp-discovery.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,167 @@
1
+ /**
2
+ * Robot config R/W for the AgenticROS CLI.
3
+ *
4
+ * Lives in the CLI so the multi-robot persistence path does NOT pull
5
+ * `@agenticros/core` (and its transport deps) into the published
6
+ * `agenticros` tarball. The shape we read/write is intentionally a
7
+ * subset of `@agenticros/core`'s `AgenticROSConfig.robots`:
8
+ *
9
+ * robots: Array<{
10
+ * id: string;
11
+ * name?: string;
12
+ * namespace?: string;
13
+ * cameraTopic?: string;
14
+ * default?: boolean;
15
+ * }>
16
+ *
17
+ * Backwards compat with the legacy single-robot config:
18
+ * - If `config.robots` is absent/empty AND `config.robot` is set, we
19
+ * "promote" `config.robot` into `robots[0]` on the next write. The
20
+ * legacy `config.robot` field is LEFT in place (harmlessly — the
21
+ * core resolver prefers the explicit array when non-empty) so older
22
+ * adapters that only read `config.robot` keep working.
23
+ * - When the file is missing or empty we treat it as `{}`. Writes
24
+ * create both the file and its directory.
25
+ *
26
+ * All paths route through the CLI's own paths helper so workspace /
27
+ * installed / bundle modes pick up the same `~/.agenticros/config.json`.
28
+ */
29
+ /** Sensor/hardware tags on a robot — mirrors @agenticros/core's RobotSensors. */
30
+ export interface RobotSensors {
31
+ has_realsense?: boolean;
32
+ has_lidar?: boolean;
33
+ has_arm?: boolean;
34
+ }
35
+ /** What the CLI persists per robot. Matches the core config schema. */
36
+ export interface RobotEntry {
37
+ id: string;
38
+ name?: string;
39
+ namespace?: string;
40
+ cameraTopic?: string;
41
+ default?: boolean;
42
+ /**
43
+ * Phase 1.e robot kind ("amr" | "arm" | "drone" | "rover" | …).
44
+ * Free-form string; core defaults to "amr" when unset.
45
+ */
46
+ kind?: string;
47
+ /**
48
+ * Phase 1.e sensor/hardware tags. Same all-false default semantics
49
+ * as core — only the keys the user sets are written through.
50
+ */
51
+ sensors?: RobotSensors;
52
+ /**
53
+ * Phase 1.e optional per-robot capability allowlist. When set, the
54
+ * `ros2_find_robots_for` filter uses this list instead of the
55
+ * gateway's global capability registry. Stored verbatim — the CLI
56
+ * doesn't import the registry to validate against.
57
+ */
58
+ capabilities?: string[];
59
+ /**
60
+ * Optional per-robot transport override. Opaque JSON — the core's
61
+ * `RobotTransportOverrideSchema` is the schema-of-truth and will Zod-
62
+ * validate this at config-load time. The CLI doesn't import core, so
63
+ * we only carry the field through as a plain object.
64
+ */
65
+ transport?: Record<string, unknown>;
66
+ }
67
+ export declare function robotConfigPath(): string;
68
+ /** Parse `~/.agenticros/config.json` to a plain object, or `{}` when absent/bad. */
69
+ export declare function readConfigObject(path?: string): Record<string, unknown>;
70
+ /** Write the config object back, creating directories as needed. */
71
+ export declare function writeConfigObject(obj: Record<string, unknown>, path?: string): void;
72
+ /**
73
+ * Return the robots[] view the agent would see (explicit array when
74
+ * non-empty, otherwise a one-entry array synthesised from legacy
75
+ * `config.robot`). Read-only — the CLI uses this to render `robots list`
76
+ * without ever needing to import @agenticros/core.
77
+ */
78
+ export declare function readRobots(obj?: Record<string, unknown>): {
79
+ robots: RobotEntry[];
80
+ from: "explicit" | "legacy" | "none";
81
+ };
82
+ /**
83
+ * Compute the active robot id using the same precedence the core
84
+ * resolver does:
85
+ * 1. explicit robots[] entry with `default: true`
86
+ * 2. first entry in robots[] (with legacy fallback)
87
+ * 3. undefined when there are no robots at all
88
+ */
89
+ export declare function getActiveRobotId(obj?: Record<string, unknown>): string | undefined;
90
+ export interface AddRobotResult {
91
+ /** Whether the entry was actually written (false = a duplicate id was already present). */
92
+ added: boolean;
93
+ /** True when this write promoted the legacy `config.robot` into `robots[]`. */
94
+ promotedLegacy: boolean;
95
+ /** The final robots[] array after the write. */
96
+ robots: RobotEntry[];
97
+ }
98
+ /**
99
+ * Add a robot to `config.robots[]`.
100
+ *
101
+ * Promotes the legacy single-robot config on first multi-robot write —
102
+ * `config.robot` is copied as the first entry in the array, and any
103
+ * `default: true` flag we'd set on the new entry is held against that
104
+ * promoted incumbent (it stays the default unless the caller explicitly
105
+ * asks otherwise).
106
+ *
107
+ * Idempotent: re-adding an existing id updates name/namespace/cameraTopic
108
+ * in place but returns `added: false` so the CLI can render the right
109
+ * "already present" message.
110
+ */
111
+ export declare function addRobot(entry: RobotEntry, opts?: {
112
+ setDefault?: boolean;
113
+ obj?: Record<string, unknown>;
114
+ }): AddRobotResult;
115
+ /**
116
+ * Remove a robot from `config.robots[]` by id.
117
+ *
118
+ * Returns `removed: false` when the id isn't present. Removing the last
119
+ * entry leaves `robots: []` (which the core resolver then ignores in
120
+ * favour of the legacy `config.robot` fallback — so the deployment
121
+ * keeps working).
122
+ *
123
+ * Idempotent across re-runs.
124
+ */
125
+ export declare function removeRobot(id: string, obj?: Record<string, unknown>): {
126
+ removed: boolean;
127
+ robots: RobotEntry[];
128
+ };
129
+ /**
130
+ * Set `default: true` on exactly one robot in `config.robots[]`.
131
+ *
132
+ * Auto-promotes the legacy single-robot config first if needed (so
133
+ * marking the first new robot as default doesn't lose the previous
134
+ * incumbent). Throws when the id isn't present after promotion.
135
+ */
136
+ export declare function setDefaultRobot(id: string, obj?: Record<string, unknown>): {
137
+ robots: RobotEntry[];
138
+ promotedLegacy: boolean;
139
+ };
140
+ /**
141
+ * Apply a per-robot transport override to an existing robot.
142
+ *
143
+ * Auto-promotes legacy `config.robot` into `config.robots[]` so the
144
+ * caller can target the historical single-robot config by its derived
145
+ * id. Throws when the id can't be found after promotion — matching the
146
+ * UX of `setDefaultRobot`.
147
+ *
148
+ * The `override` argument is the plain JSON shape the core's
149
+ * `RobotTransportOverrideSchema` will validate at config-load time. The
150
+ * CLI doesn't validate field shapes — that lives in `@agenticros/core`.
151
+ */
152
+ export declare function setTransportForRobot(id: string, override: Record<string, unknown>, obj?: Record<string, unknown>): {
153
+ robots: RobotEntry[];
154
+ promotedLegacy: boolean;
155
+ };
156
+ /**
157
+ * Remove a per-robot transport override (so the robot inherits the
158
+ * global transport config). Idempotent — returns `cleared: false` when
159
+ * the robot didn't have an override to begin with. Throws on unknown id
160
+ * (we'd rather complain loudly than silently no-op against a typo).
161
+ */
162
+ export declare function clearTransportForRobot(id: string, obj?: Record<string, unknown>): {
163
+ cleared: boolean;
164
+ robots: RobotEntry[];
165
+ promotedLegacy: boolean;
166
+ };
167
+ //# sourceMappingURL=robot-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"robot-config.d.ts","sourceRoot":"","sources":["../../src/util/robot-config.ts"],"names":[],"mappings":"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"}