From 4aaabe20799dfadf514ff108c7830e9a6ac7e6b9 Mon Sep 17 00:00:00 2001 From: Ben Vinegar Date: Mon, 16 Mar 2026 21:30:18 -0400 Subject: [PATCH 1/2] runtime: support varlock binary path compatibility --- bin/baudbot.service | 2 +- bin/ci/setup-arch.sh | 6 +++--- bin/ci/setup-ubuntu.sh | 6 +++--- bin/doctor.sh | 4 +++- bin/lib/baudbot-runtime.sh | 2 +- bin/subagents.sh | 2 +- setup.sh | 9 ++++++++- start.sh | 4 ++-- 8 files changed, 22 insertions(+), 13 deletions(-) diff --git a/bin/baudbot.service b/bin/baudbot.service index 2aedb62..55f8f56 100644 --- a/bin/baudbot.service +++ b/bin/baudbot.service @@ -22,7 +22,7 @@ Restart=on-failure RestartSec=10 # Environment -Environment=PATH=/home/baudbot_agent/.varlock/bin:/home/baudbot_agent/opt/node/bin:/usr/local/bin:/usr/bin:/bin +Environment=PATH=/home/baudbot_agent/.varlock/bin:/home/baudbot_agent/.config/varlock/bin:/home/baudbot_agent/opt/node/bin:/usr/local/bin:/usr/bin:/bin Environment=HOME=/home/baudbot_agent # Security hardening diff --git a/bin/ci/setup-arch.sh b/bin/ci/setup-arch.sh index 4f86b7d..b033380 100755 --- a/bin/ci/setup-arch.sh +++ b/bin/ci/setup-arch.sh @@ -77,10 +77,10 @@ echo "$CLI_TARGET" | grep -qE '^/opt/baudbot/releases/.+/bin/baudbot$' baudbot --version HELP_OUT=$(baudbot --help) echo "$HELP_OUT" | grep -q "baudbot" -# varlock installed for agent user -test -x /home/baudbot_agent/.varlock/bin/varlock +# varlock installed for agent user (supports both legacy and current install paths) +test -x /home/baudbot_agent/.varlock/bin/varlock || test -x /home/baudbot_agent/.config/varlock/bin/varlock # Agent can load env (smoke test — varlock validates schema + .env) -sudo -u baudbot_agent bash -c 'export PATH="$HOME/.varlock/bin:$HOME/opt/node/bin:$PATH" && cd ~ && varlock load --path ~/.config/' +sudo -u baudbot_agent bash -c 'export PATH="$HOME/.varlock/bin:$HOME/.config/varlock/bin:$HOME/opt/node/bin:$PATH" && cd ~ && varlock load --path ~/.config/' echo " ✓ bootstrap + install verification passed" echo "=== Running CLI smoke checks ===" diff --git a/bin/ci/setup-ubuntu.sh b/bin/ci/setup-ubuntu.sh index d688fff..d8486dd 100755 --- a/bin/ci/setup-ubuntu.sh +++ b/bin/ci/setup-ubuntu.sh @@ -96,10 +96,10 @@ echo "$CLI_TARGET" | grep -qE '^/opt/baudbot/releases/.+/bin/baudbot$' baudbot --version HELP_OUT=$(baudbot --help) echo "$HELP_OUT" | grep -q "baudbot" -# varlock installed for agent user -test -x /home/baudbot_agent/.varlock/bin/varlock +# varlock installed for agent user (supports both legacy and current install paths) +test -x /home/baudbot_agent/.varlock/bin/varlock || test -x /home/baudbot_agent/.config/varlock/bin/varlock # Agent can load env (smoke test — varlock validates schema + .env) -sudo -u baudbot_agent bash -c 'export PATH="$HOME/.varlock/bin:$HOME/opt/node/bin:$PATH" && cd ~ && varlock load --path ~/.config/' +sudo -u baudbot_agent bash -c 'export PATH="$HOME/.varlock/bin:$HOME/.config/varlock/bin:$HOME/opt/node/bin:$PATH" && cd ~ && varlock load --path ~/.config/' echo " ✓ bootstrap + install verification passed" echo "=== Running CLI smoke checks ===" diff --git a/bin/doctor.sh b/bin/doctor.sh index 3d792eb..de3a5e6 100755 --- a/bin/doctor.sh +++ b/bin/doctor.sh @@ -80,10 +80,12 @@ if [ -n "${BAUDBOT_ROOT:-}" ] && command -v rg &>/dev/null; then fi fi -if command -v varlock &>/dev/null || [ -x "$BAUDBOT_HOME/.varlock/bin/varlock" ]; then +if command -v varlock &>/dev/null || [ -x "$BAUDBOT_HOME/.varlock/bin/varlock" ] || [ -x "$BAUDBOT_HOME/.config/varlock/bin/varlock" ]; then pass "varlock is installed" if [ -f "$BAUDBOT_HOME/.varlock/config.json" ] && grep -q '"anonymousId"' "$BAUDBOT_HOME/.varlock/config.json"; then warn "$BAUDBOT_HOME/.varlock/config.json includes anonymousId (export VARLOCK_TELEMETRY_DISABLED=1 or remove this field)" + elif [ -f "$BAUDBOT_HOME/.config/varlock/config.json" ] && grep -q '"anonymousId"' "$BAUDBOT_HOME/.config/varlock/config.json"; then + warn "$BAUDBOT_HOME/.config/varlock/config.json includes anonymousId (export VARLOCK_TELEMETRY_DISABLED=1 or remove this field)" fi else fail "varlock not found" diff --git a/bin/lib/baudbot-runtime.sh b/bin/lib/baudbot-runtime.sh index 2e89917..f3d8ba9 100644 --- a/bin/lib/baudbot-runtime.sh +++ b/bin/lib/baudbot-runtime.sh @@ -519,7 +519,7 @@ cmd_debug() { exec sudo -u "$AGENT_USER" bash -lc " unset PKG_EXECPATH - export PATH='$AGENT_HOME/.varlock/bin:$node_bin_dir':\$PATH + export PATH='$AGENT_HOME/.varlock/bin:$AGENT_HOME/.config/varlock/bin:$node_bin_dir':\$PATH export VARLOCK_TELEMETRY_DISABLED=1 cd ~ varlock run --path ~/.config/ -- pi \ diff --git a/bin/subagents.sh b/bin/subagents.sh index 4f6816d..7c1df32 100755 --- a/bin/subagents.sh +++ b/bin/subagents.sh @@ -283,7 +283,7 @@ spawn_one() { sudo -u "$AGENT_USER" mkdir -p "$AGENT_HOME/.pi/agent/logs" local tmux_cmd - tmux_cmd="cd $(shell_quote "$cwd") && export PATH=\"\$HOME/.varlock/bin:\$HOME/opt/node/bin:\$PATH\" && export PI_SESSION_NAME=$(shell_quote "$session_name") && exec varlock run --path \"\$HOME/.config/\" -- pi --session-control --skill $(shell_quote "$skill_path") --model $(shell_quote "$model") > $(shell_quote "$log_path") 2>&1" + tmux_cmd="cd $(shell_quote "$cwd") && export PATH=\"\$HOME/.varlock/bin:\$HOME/.config/varlock/bin:\$HOME/opt/node/bin:\$PATH\" && export PI_SESSION_NAME=$(shell_quote "$session_name") && exec varlock run --path \"\$HOME/.config/\" -- pi --session-control --skill $(shell_quote "$skill_path") --model $(shell_quote "$model") > $(shell_quote "$log_path") 2>&1" sudo -u "$AGENT_USER" tmux new-session -d -s "$session_name" "$tmux_cmd" local alias_path="$CONTROL_DIR/$ready_alias.alias" diff --git a/setup.sh b/setup.sh index 154eec5..64c78ce 100755 --- a/setup.sh +++ b/setup.sh @@ -252,12 +252,19 @@ echo "=== Installing varlock ===" # varlock must be available to the agent user (start.sh adds ~/.varlock/bin to PATH). # Install as agent user so it lands in the right home directory. AGENT_VARLOCK="$BAUDBOT_HOME/.varlock/bin/varlock" -if [ -x "$AGENT_VARLOCK" ]; then +AGENT_VARLOCK_CONFIG_BIN="$BAUDBOT_HOME/.config/varlock/bin/varlock" +if [ -x "$AGENT_VARLOCK" ] || [ -x "$AGENT_VARLOCK_CONFIG_BIN" ]; then echo "varlock already installed for baudbot_agent, skipping" else sudo -u baudbot_agent bash -c 'curl -sSfL https://varlock.dev/install.sh | sh -s' fi +# Newer varlock installers place the binary under ~/.config/varlock/bin. +# Keep a compatibility link at ~/.varlock/bin/varlock for existing runtime scripts. +if [ -x "$AGENT_VARLOCK_CONFIG_BIN" ]; then + sudo -u baudbot_agent bash -c "mkdir -p '$BAUDBOT_HOME/.varlock/bin' && ln -sf '$AGENT_VARLOCK_CONFIG_BIN' '$AGENT_VARLOCK'" +fi + echo "=== Publishing initial git-free /opt release ===" # Build an immutable release snapshot from the local source checkout, then deploy # from /opt/baudbot/releases/. This keeps live operations decoupled from diff --git a/start.sh b/start.sh index 7cce209..189f822 100755 --- a/start.sh +++ b/start.sh @@ -18,8 +18,8 @@ cd ~ NODE_BIN_DIR="$(bb_resolve_runtime_node_bin_dir "$HOME")" -# Set PATH -export PATH="$HOME/.varlock/bin:$NODE_BIN_DIR:$PATH" +# Set PATH (varlock may be installed in ~/.varlock/bin or ~/.config/varlock/bin) +export PATH="$HOME/.varlock/bin:$HOME/.config/varlock/bin:$NODE_BIN_DIR:$PATH" # Work around varlock telemetry config crash by opting out at runtime. export VARLOCK_TELEMETRY_DISABLED=1 From d666663495990a3b0923f5de0e29f3ffb99e87d5 Mon Sep 17 00:00:00 2001 From: Ben Vinegar Date: Mon, 16 Mar 2026 21:44:16 -0400 Subject: [PATCH 2/2] varlock: address review nits for telemetry check and symlink safety --- bin/doctor.sh | 3 ++- setup.sh | 7 ++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/bin/doctor.sh b/bin/doctor.sh index de3a5e6..11aec8f 100755 --- a/bin/doctor.sh +++ b/bin/doctor.sh @@ -84,7 +84,8 @@ if command -v varlock &>/dev/null || [ -x "$BAUDBOT_HOME/.varlock/bin/varlock" ] pass "varlock is installed" if [ -f "$BAUDBOT_HOME/.varlock/config.json" ] && grep -q '"anonymousId"' "$BAUDBOT_HOME/.varlock/config.json"; then warn "$BAUDBOT_HOME/.varlock/config.json includes anonymousId (export VARLOCK_TELEMETRY_DISABLED=1 or remove this field)" - elif [ -f "$BAUDBOT_HOME/.config/varlock/config.json" ] && grep -q '"anonymousId"' "$BAUDBOT_HOME/.config/varlock/config.json"; then + fi + if [ -f "$BAUDBOT_HOME/.config/varlock/config.json" ] && grep -q '"anonymousId"' "$BAUDBOT_HOME/.config/varlock/config.json"; then warn "$BAUDBOT_HOME/.config/varlock/config.json includes anonymousId (export VARLOCK_TELEMETRY_DISABLED=1 or remove this field)" fi else diff --git a/setup.sh b/setup.sh index 64c78ce..efab929 100755 --- a/setup.sh +++ b/setup.sh @@ -261,8 +261,13 @@ fi # Newer varlock installers place the binary under ~/.config/varlock/bin. # Keep a compatibility link at ~/.varlock/bin/varlock for existing runtime scripts. +# If a real legacy binary already exists, preserve it (do not replace with symlink). if [ -x "$AGENT_VARLOCK_CONFIG_BIN" ]; then - sudo -u baudbot_agent bash -c "mkdir -p '$BAUDBOT_HOME/.varlock/bin' && ln -sf '$AGENT_VARLOCK_CONFIG_BIN' '$AGENT_VARLOCK'" + if [ -x "$AGENT_VARLOCK" ] && [ ! -L "$AGENT_VARLOCK" ]; then + echo "Keeping existing legacy varlock binary at $AGENT_VARLOCK" + else + sudo -u baudbot_agent bash -c "mkdir -p '$BAUDBOT_HOME/.varlock/bin' && ln -sfn '$AGENT_VARLOCK_CONFIG_BIN' '$AGENT_VARLOCK'" + fi fi echo "=== Publishing initial git-free /opt release ==="