44#
55# Usage: baudbot doctor [--fix]
66
7- set -euo pipefail
7+ SCRIPT_DIR=" $( cd " $( dirname " $0 " ) " && pwd) "
8+ # shellcheck source=bin/lib/shell-common.sh
9+ source " $SCRIPT_DIR /lib/shell-common.sh"
10+ # shellcheck source=bin/lib/doctor-common.sh
11+ source " $SCRIPT_DIR /lib/doctor-common.sh"
12+ bb_enable_strict_mode
813
914for arg in " $@ " ; do
1015 case " $arg " in
@@ -16,17 +21,15 @@ for arg in "$@"; do
1621done
1722
1823BAUDBOT_HOME=" /home/baudbot_agent"
19- PASS=0
20- FAIL=0
21- WARN=0
24+ doctor_init_counters
2225IS_ROOT=0
2326if [ " $( id -u) " -eq 0 ]; then
2427 IS_ROOT=1
2528fi
2629
27- pass () { echo " ✓ $1 " ; PASS= $(( PASS + 1 )) ; }
28- fail () { echo " ✗ $1 " ; FAIL= $(( FAIL + 1 )) ; }
29- warn () { echo " ⚠ $1 " ; WARN= $(( WARN + 1 )) ; }
30+ pass () { doctor_pass " $1 " ; }
31+ fail () { doctor_fail " $1 " ; }
32+ warn () { doctor_warn " $1 " ; }
3033
3134echo " Baudbot Doctor"
3235echo " "
@@ -103,10 +106,10 @@ echo "Admin config:"
103106
104107# Check for admin config/env source
105108ADMIN_USER=" ${SUDO_USER:- $(whoami)} "
106- ADMIN_HOME=$( getent passwd " $ADMIN_USER " | cut -d: -f6 2> /dev/null || echo " " )
109+ ADMIN_HOME=" $( bb_resolve_user_home " $ADMIN_USER " || true ) "
107110ADMIN_CONFIG=" $ADMIN_HOME /.baudbot/.env"
108111BACKEND_CONF=" $ADMIN_HOME /.baudbot/env-store.conf"
109- RENDER_ENV_SCRIPT=" ${BAUDBOT_ROOT:- $(cd " $( dirname " $0 " ) /.." && pwd)} /bin/render-env.sh"
112+ RENDER_ENV_SCRIPT=" ${BAUDBOT_ROOT:- $(cd " $SCRIPT_DIR /.." && pwd)} /bin/render-env.sh"
110113
111114ADMIN_BACKEND=" file"
112115if [ -f " $BACKEND_CONF " ]; then
@@ -139,21 +142,10 @@ if [ -f "$ENV_FILE" ]; then
139142 fail " .env owned by $OWNER (should be baudbot_agent)"
140143 fi
141144
142- env_value () {
143- local key=" $1 "
144- local line
145- line=$( grep -E " ^${key} =" " $ENV_FILE " 2> /dev/null | tail -n 1 || true)
146- if [ -z " $line " ]; then
147- echo " "
148- return 0
149- fi
150- echo " ${line#* =} "
151- }
152-
153145 # LLM key validation: require at least one valid key, and flag malformed configured keys.
154146 VALID_LLM_COUNT=0
155147
156- ANTHROPIC_VALUE=" $( env_value ANTHROPIC_API_KEY) "
148+ ANTHROPIC_VALUE=" $( bb_read_env_value " $ENV_FILE " ANTHROPIC_API_KEY) "
157149 if [ -n " $ANTHROPIC_VALUE " ]; then
158150 if [[ " $ANTHROPIC_VALUE " == sk-ant-* ]]; then
159151 VALID_LLM_COUNT=$(( VALID_LLM_COUNT + 1 ))
@@ -162,7 +154,7 @@ if [ -f "$ENV_FILE" ]; then
162154 fi
163155 fi
164156
165- OPENAI_VALUE=" $( env_value OPENAI_API_KEY) "
157+ OPENAI_VALUE=" $( bb_read_env_value " $ENV_FILE " OPENAI_API_KEY) "
166158 if [ -n " $OPENAI_VALUE " ]; then
167159 if [[ " $OPENAI_VALUE " == sk-* ]]; then
168160 VALID_LLM_COUNT=$(( VALID_LLM_COUNT + 1 ))
@@ -171,12 +163,12 @@ if [ -f "$ENV_FILE" ]; then
171163 fi
172164 fi
173165
174- GEMINI_VALUE=" $( env_value GEMINI_API_KEY) "
166+ GEMINI_VALUE=" $( bb_read_env_value " $ENV_FILE " GEMINI_API_KEY) "
175167 if [ -n " $GEMINI_VALUE " ]; then
176168 VALID_LLM_COUNT=$(( VALID_LLM_COUNT + 1 ))
177169 fi
178170
179- OPENCODE_VALUE=" $( env_value OPENCODE_ZEN_API_KEY) "
171+ OPENCODE_VALUE=" $( bb_read_env_value " $ENV_FILE " OPENCODE_ZEN_API_KEY) "
180172 if [ -n " $OPENCODE_VALUE " ]; then
181173 VALID_LLM_COUNT=$(( VALID_LLM_COUNT + 1 ))
182174 fi
@@ -199,15 +191,15 @@ if [ -f "$ENV_FILE" ]; then
199191
200192 BROKER_MODE_READY=true
201193 for key in " ${BROKER_REQUIRED_KEYS[@]} " ; do
202- if [ -z " $( env_value " $key " ) " ]; then
194+ if [ -z " $( bb_read_env_value " $ENV_FILE " " $key " ) " ]; then
203195 BROKER_MODE_READY=false
204196 break
205197 fi
206198 done
207199
208200 SOCKET_MODE_READY=true
209201 for key in SLACK_BOT_TOKEN SLACK_APP_TOKEN; do
210- if [ -z " $( env_value " $key " ) " ]; then
202+ if [ -z " $( bb_read_env_value " $ENV_FILE " " $key " ) " ]; then
211203 SOCKET_MODE_READY=false
212204 break
213205 fi
@@ -216,15 +208,15 @@ if [ -f "$ENV_FILE" ]; then
216208 if [ " $BROKER_MODE_READY " = true ]; then
217209 pass " broker mode configured (SLACK_BROKER_*)"
218210 for key in SLACK_BOT_TOKEN SLACK_APP_TOKEN; do
219- if [ -n " $( env_value " $key " ) " ]; then
211+ if [ -n " $( bb_read_env_value " $ENV_FILE " " $key " ) " ]; then
220212 pass " $key is set"
221213 else
222214 pass " $key not required in broker mode"
223215 fi
224216 done
225217 else
226218 for key in SLACK_BOT_TOKEN SLACK_APP_TOKEN; do
227- if [ -n " $( env_value " $key " ) " ]; then
219+ if [ -n " $( bb_read_env_value " $ENV_FILE " " $key " ) " ]; then
228220 pass " $key is set"
229221 else
230222 warn " $key is not set"
357349echo " "
358350echo " Agent:"
359351
360- if command -v systemctl & > /dev/null && [ -d /run/systemd/system ] ; then
352+ if bb_has_systemd ; then
361353 enabled_state=$( systemctl is-enabled baudbot 2>&1 || true)
362354 if [ " $enabled_state " = " enabled" ]; then
363355 pass " systemd unit enabled"
432424
433425# ── Summary ──────────────────────────────────────────────────────────────────
434426
435- echo " "
436- echo " ────────────────────────────"
437- echo " $PASS passed, $FAIL failed, $WARN warnings"
438-
439- if [ " $FAIL " -gt 0 ]; then
440- echo " "
441- echo " Fix failures before starting the agent."
442- exit 1
443- elif [ " $WARN " -gt 0 ]; then
444- echo " "
445- echo " Warnings are non-blocking but should be reviewed."
446- exit 0
447- else
448- echo " "
449- echo " All checks passed."
450- exit 0
451- fi
427+ doctor_summary_and_exit
0 commit comments