agenticros 0.1.17 → 0.1.18
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"down.d.ts","sourceRoot":"","sources":["../../src/commands/down.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAOH,MAAM,WAAW,WAAW;IAC1B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,qEAAqE;IACrE,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAID,wBAAsB,WAAW,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"down.d.ts","sourceRoot":"","sources":["../../src/commands/down.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAOH,MAAM,WAAW,WAAW;IAC1B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,qEAAqE;IACrE,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAID,wBAAsB,WAAW,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAgDlE"}
|
package/dist/commands/down.js
CHANGED
|
@@ -29,9 +29,24 @@ export async function downCommand(opts) {
|
|
|
29
29
|
clearPid(name);
|
|
30
30
|
});
|
|
31
31
|
}
|
|
32
|
-
// Mop up
|
|
33
|
-
//
|
|
34
|
-
|
|
32
|
+
// Mop up stray subprocesses that don't have a pidfile we own. Two common
|
|
33
|
+
// sources of orphans:
|
|
34
|
+
// - `ros2 launch realsense2_camera rs_launch.py` writes the launch parent's
|
|
35
|
+
// PID to the pidfile, but the actual `realsense2_camera_node` is a
|
|
36
|
+
// detached child. If the launch parent dies (or start_demo.sh's "already
|
|
37
|
+
// running, skipping" path runs), the node keeps running with its IR
|
|
38
|
+
// projector lit and is invisible to our pidfile bookkeeping.
|
|
39
|
+
// - Sim children (gz sim, rviz, parameter_bridge) inherit termination from
|
|
40
|
+
// ros2 launch in most cases but not always.
|
|
41
|
+
// We pkill them all by name. -f matches the full command line; SIGTERM first,
|
|
42
|
+
// then a brief grace period, then SIGKILL anything still hanging on.
|
|
43
|
+
if (!opts.keepCamera) {
|
|
44
|
+
await pkillAndWait([
|
|
45
|
+
"realsense2_camera_node",
|
|
46
|
+
"ros2 launch realsense2_camera",
|
|
47
|
+
]);
|
|
48
|
+
}
|
|
49
|
+
await pkillAndWait(["gz sim", "ign gazebo", "rviz2", "parameter_bridge"]);
|
|
35
50
|
if (opts.stopGateway) {
|
|
36
51
|
await stopGatewayService();
|
|
37
52
|
}
|
|
@@ -72,6 +87,43 @@ async function tryKill(patterns) {
|
|
|
72
87
|
}
|
|
73
88
|
}
|
|
74
89
|
}
|
|
90
|
+
/**
|
|
91
|
+
* Send SIGTERM to anything matching `patterns`, wait for the kernel to schedule
|
|
92
|
+
* the exits, then SIGKILL any survivors. Crucially, this is what actually turns
|
|
93
|
+
* the RealSense IR projector off: SIGTERM gives the realsense2_camera_node a
|
|
94
|
+
* chance to release the USB device cleanly, and the SIGKILL fallback handles
|
|
95
|
+
* the case where it's wedged.
|
|
96
|
+
*/
|
|
97
|
+
async function pkillAndWait(patterns, termGraceMs = 1500) {
|
|
98
|
+
// Phase 1: gentle termination.
|
|
99
|
+
let matchedAny = false;
|
|
100
|
+
for (const pattern of patterns) {
|
|
101
|
+
try {
|
|
102
|
+
const { exitCode } = await execa("pkill", ["-TERM", "-f", pattern], {
|
|
103
|
+
reject: false,
|
|
104
|
+
});
|
|
105
|
+
// pkill exits 0 when at least one process matched, 1 when nothing did.
|
|
106
|
+
if (exitCode === 0)
|
|
107
|
+
matchedAny = true;
|
|
108
|
+
}
|
|
109
|
+
catch {
|
|
110
|
+
// pkill missing — nothing to do.
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
if (!matchedAny)
|
|
114
|
+
return;
|
|
115
|
+
// Phase 2: brief wait so well-behaved processes can exit cleanly.
|
|
116
|
+
await new Promise((r) => setTimeout(r, termGraceMs));
|
|
117
|
+
// Phase 3: SIGKILL anything that's still around.
|
|
118
|
+
for (const pattern of patterns) {
|
|
119
|
+
try {
|
|
120
|
+
await execa("pkill", ["-KILL", "-f", pattern], { reject: false });
|
|
121
|
+
}
|
|
122
|
+
catch {
|
|
123
|
+
// ignore
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
75
127
|
async function stopGatewayService() {
|
|
76
128
|
try {
|
|
77
129
|
const { exitCode } = await execa("systemctl", ["--user", "is-active", "openclaw-gateway.service"], { reject: false });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"down.js","sourceRoot":"","sources":["../../src/commands/down.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAE9B,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAuB,MAAM,oBAAoB,CAAC;AACxF,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAQ7E,MAAM,SAAS,GAAqB,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;AAE1E,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAiB;IACjD,MAAM,CAAC,4BAA4B,CAAC,CAAC;IAErC,IAAI,UAAU,GAAG,KAAK,CAAC;IACvB,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;QAC7B,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACzC,IAAI,CAAC,kCAAkC,CAAC,CAAC;YACzC,SAAS;QACX,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,SAAS;QAChC,UAAU,GAAG,IAAI,CAAC;QAClB,MAAM,WAAW,CAAC,YAAY,IAAI,EAAE,EAAE,KAAK,IAAI,EAAE;YAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YACrC,IAAI,GAAG,KAAK,SAAS;gBAAE,OAAO;YAC9B,MAAM,WAAW,CAAC,GAAG,CAAC,CAAC;YACvB,QAAQ,CAAC,IAAI,CAAC,CAAC;QACjB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,8EAA8E;IAC9E,
|
|
1
|
+
{"version":3,"file":"down.js","sourceRoot":"","sources":["../../src/commands/down.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agenticros",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.18",
|
|
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": [
|
package/runtime/BUNDLE.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"packedAt": "2026-06-09T22:
|
|
2
|
+
"packedAt": "2026-06-09T22:12:21.081Z",
|
|
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": {
|
|
@@ -36,11 +36,34 @@ echo "==> Starting RealSense camera (logs: $CAMERA_LOG)"
|
|
|
36
36
|
if [[ -f "$CAMERA_PID_FILE" ]] && kill -0 "$(cat "$CAMERA_PID_FILE")" 2>/dev/null; then
|
|
37
37
|
echo " Already running (pid $(cat "$CAMERA_PID_FILE")) — skipping"
|
|
38
38
|
elif pgrep -f "realsense2_camera_node" >/dev/null; then
|
|
39
|
-
|
|
39
|
+
# Camera node from a prior session is still running but our pidfile is gone.
|
|
40
|
+
# Re-adopt it so `agenticros down` can find and stop it (turning off the IR
|
|
41
|
+
# projector). We point the pidfile at the actual node, not a launch parent,
|
|
42
|
+
# because that's what's holding the USB device.
|
|
43
|
+
existing_pid=$(pgrep -f "realsense2_camera_node" | head -n 1)
|
|
44
|
+
echo "$existing_pid" >"$CAMERA_PID_FILE"
|
|
45
|
+
echo " Detected an existing realsense2_camera_node (pid $existing_pid) — adopted into $CAMERA_PID_FILE"
|
|
40
46
|
else
|
|
41
47
|
nohup ros2 launch realsense2_camera rs_launch.py >"$CAMERA_LOG" 2>&1 &
|
|
42
|
-
|
|
43
|
-
|
|
48
|
+
# $! is the `ros2 launch` parent; the actual camera node is a child that
|
|
49
|
+
# comes up a moment later. Wait briefly so we can record the node's PID
|
|
50
|
+
# (what holds the USB / projector) instead of the parent's.
|
|
51
|
+
launch_pid=$!
|
|
52
|
+
node_pid=""
|
|
53
|
+
for _ in 1 2 3 4 5 6 7 8 9 10; do
|
|
54
|
+
node_pid=$(pgrep -f "realsense2_camera_node" | head -n 1 || true)
|
|
55
|
+
[[ -n "$node_pid" ]] && break
|
|
56
|
+
sleep 0.5
|
|
57
|
+
done
|
|
58
|
+
if [[ -n "$node_pid" ]]; then
|
|
59
|
+
echo "$node_pid" >"$CAMERA_PID_FILE"
|
|
60
|
+
echo " Started (node pid $node_pid, launch pid $launch_pid)"
|
|
61
|
+
else
|
|
62
|
+
# Fallback: launch parent. `agenticros down` also pkills by name, so
|
|
63
|
+
# this still gets cleaned up even if we miss the node PID.
|
|
64
|
+
echo "$launch_pid" >"$CAMERA_PID_FILE"
|
|
65
|
+
echo " Started (launch pid $launch_pid — node not yet visible; pkill fallback will clean up)"
|
|
66
|
+
fi
|
|
44
67
|
fi
|
|
45
68
|
|
|
46
69
|
echo "==> Building TypeScript workspace (@agenticros/core, ros-camera, claude-code, ...)"
|