Refactor code structure for improved readability and maintainability

This commit is contained in:
2026-03-05 23:52:58 +00:00
parent a92fbff801
commit f2626f7007
6 changed files with 181 additions and 69 deletions
+10
View File
@@ -135,6 +135,16 @@ list_agents_raw() {
done
}
# ── Naming convention ─────────────────────────────────────────────────────
# Normalizes an agent ID to an env-var suffix.
# Convention: uppercase, hyphens → underscores. No stripping of suffixes.
# "assistant-bot" → "ASSISTANT_BOT"
# "asistente-2" → "ASISTENTE_2"
# "devops-bot" → "DEVOPS_BOT"
normalize_id() {
echo "$1" | tr '[:lower:]-' '[:upper:]_'
}
# ── Usage helper ──────────────────────────────────────────────────────────
need_arg() {
[[ -n "${1:-}" ]] || { echo "Usage: $0 <agent-id>"; exit 1; }
+10 -6
View File
@@ -23,6 +23,7 @@ need_arg "${1:-}"
ID="$1"
DISPLAYNAME="${2:-$ID}"
PACKAGE="$(echo "$ID" | tr '-' '_' | sed 's/_bot//')" # "monitor-bot" → "monitor"
NORM="$(normalize_id "$ID")" # "monitor-bot" → "MONITOR_BOT"
DIR="agents/$ID"
[[ -d "$DIR" ]] && fail "Ya existe agents/$ID — ¿ya fue creado?"
@@ -146,14 +147,15 @@ tools:
matrix:
homeserver: "${MATRIX_HOMESERVER}"
user_id: "@$ID:${MATRIX_SERVER_NAME}"
access_token_env: MATRIX_TOKEN_$(echo "$ID" | tr '[:lower:]-' '[:upper:]_' | sed 's/_BOT$//')
device_id: "$(echo "$ID" | tr '[:lower:]-' '[:upper:]_')01"
access_token_env: MATRIX_TOKEN_${NORM}
device_id: ""
encryption:
enabled: false
enabled: true
store_path: "./agents/${ID}/data/crypto/"
pickle_key_env: PICKLE_KEY_$(echo "$ID" | tr '[:lower:]-' '[:upper:]_')
pickle_key_env: PICKLE_KEY_${NORM}
trust_mode: tofu
recovery_key_env: SSSS_RECOVERY_KEY_${NORM}
rooms:
listen: []
@@ -386,7 +388,9 @@ else
fi
echo ""
echo -e "${YLW}Queda 1 paso:${RST} registrar el bot en Matrix y añadir su token a .env:"
echo -e "${YLW}Quedan 3 pasos:${RST}"
echo ""
echo -e " ${DIM}./dev-scripts/register.sh $ID \"$DISPLAYNAME\"${RST}"
echo -e " ${DIM}1. ./dev-scripts/register.sh $ID \"$DISPLAYNAME\"${RST} # registra en Matrix + genera token, password, pickle key"
echo -e " ${DIM}2. ./dev-scripts/verify.sh $ID${RST} # genera cross-signing keys + verifica device"
echo -e " ${DIM}3. ./dev-scripts/start.sh $ID${RST} # arranca el agente"
echo ""
+46 -20
View File
@@ -2,11 +2,16 @@
# register.sh — registra un nuevo bot en el servidor Matrix via Synapse admin API
#
# Uso:
# ./dev-scripts/register.sh <username> [displayname] [env-var-name]
# ./dev-scripts/register.sh <username> [displayname]
#
# Ejemplos:
# ./dev-scripts/register.sh assistant-bot "Assistant" MATRIX_TOKEN_ASSISTANT
# ./dev-scripts/register.sh devops-bot "DevOps Agent" MATRIX_TOKEN_DEVOPS
# ./dev-scripts/register.sh assistant-bot "Assistant"
# ./dev-scripts/register.sh devops-bot "DevOps Agent"
#
# Genera y guarda en .env:
# MATRIX_TOKEN_<NORM>=... (access token)
# MATRIX_PASSWORD_<NORM>=... (password para UIA)
# PICKLE_KEY_<NORM>=... (E2EE crypto store key)
#
# Requiere en .env:
# MATRIX_ADMIN_TOKEN=syt_...
@@ -19,12 +24,14 @@ need_arg "${1:-}"
USERNAME="$1"
DISPLAYNAME="${2:-$USERNAME}"
ENV_VAR="${3:-MATRIX_TOKEN_$(echo "$USERNAME" | tr '[:lower:]-' '[:upper:]_' | sed 's/_BOT$//')}"
NORM="$(normalize_id "$USERNAME")"
ENV_VAR="MATRIX_TOKEN_${NORM}"
[[ -n "${MATRIX_ADMIN_TOKEN:-}" ]] || fail "MATRIX_ADMIN_TOKEN no está en .env"
[[ -n "${MATRIX_HOMESERVER:-}" ]] || fail "MATRIX_HOMESERVER no está en .env"
info "Registrando @${USERNAME}:${MATRIX_SERVER_NAME:-$MATRIX_HOMESERVER}..."
dim " Env var prefix: ${NORM}"
echo ""
# Ejecutar cmd/register y capturar su output completo
@@ -37,23 +44,42 @@ OUTPUT=$("$GO" run ./cmd/register \
echo "$OUTPUT"
echo ""
# Extraer la línea ENV_VAR=token del output
TOKEN_LINE=$(echo "$OUTPUT" | grep "^${ENV_VAR}=")
[[ -n "$TOKEN_LINE" ]] || fail "No se encontró '${ENV_VAR}=' en el output de cmd/register"
# ── Parsear y guardar cada variable en .env ──────────────────────────────
TOKEN=$(echo "$TOKEN_LINE" | cut -d= -f2-)
[[ -n "$TOKEN" ]] || fail "Token vacío para $ENV_VAR"
save_env_var() {
local key="$1" value="$2"
[[ -n "$value" ]] || return
# Actualizar .env — reemplazar si ya existe, añadir si no
if grep -q "^${ENV_VAR}=" .env; then
awk -v key="$ENV_VAR" -v val="$TOKEN" \
'index($0, key "=") == 1 { print key "=" val; next } { print }' \
.env > /tmp/_env_tmp && mv /tmp/_env_tmp .env
ok "$ENV_VAR actualizado en .env"
else
printf '\n%s=%s\n' "$ENV_VAR" "$TOKEN" >> .env
ok "$ENV_VAR añadido a .env"
fi
# Quote values with spaces
if [[ "$value" == *" "* ]]; then
value="\"${value}\""
fi
if grep -q "^${key}=" .env; then
awk -v key="$key" -v val="$value" \
'index($0, key "=") == 1 { print key "=" val; next } { print }' \
.env > /tmp/_env_tmp && mv /tmp/_env_tmp .env
ok "$key actualizado en .env"
else
printf '%s=%s\n' "$key" "$value" >> .env
ok "$key añadido a .env"
fi
}
# Extract parseable lines from output
TOKEN=$(echo "$OUTPUT" | grep "^${ENV_VAR}=" | cut -d= -f2-)
PASSWORD=$(echo "$OUTPUT" | grep "^MATRIX_PASSWORD_${NORM}=" | cut -d= -f2-)
PICKLE_KEY=$(echo "$OUTPUT" | grep "^PICKLE_KEY_${NORM}=" | cut -d= -f2-)
[[ -n "$TOKEN" ]] || fail "No se encontró '${ENV_VAR}=' en el output"
save_env_var "$ENV_VAR" "$TOKEN"
save_env_var "MATRIX_PASSWORD_${NORM}" "$PASSWORD"
save_env_var "PICKLE_KEY_${NORM}" "$PICKLE_KEY"
echo ""
dim " Arranca el bot con: ./dev-scripts/start.sh $USERNAME"
echo -e "${YLW}Siguientes pasos:${RST}"
echo ""
echo -e " ${DIM}1. ./dev-scripts/verify.sh $USERNAME${RST} # genera cross-signing keys E2EE"
echo -e " ${DIM}2. ./dev-scripts/start.sh $USERNAME${RST} # arranca el agente"
echo ""