feat: import agents_and_robots platform as unibots (Matrix-out, unibus transport)

Reemplaza el scaffold del echobot por la plataforma completa de bots traida
desde ~/DataProyects/Github/agents_and_robots tras la operacion Matrix-out:
los bots ya no hablan por Matrix sino por el bus unibus (modelo todo-rooms +
E2E via shell/transportunibus sobre github.com/enmanuel/unibus/pkg/client).

- go.mod: replace de unibus -> ../unibus y de fn-registry -> ../../../.. (paths
  relativos reajustados a la nueva ubicacion dentro de fn_registry).
- app.md: bump a 0.2.0, descripcion + arquitectura + comandos + gotchas reales.
- modulo Go conservado como github.com/enmanuel/agents (sin reescribir imports).

agents_and_robots queda archivado como museo de la era Matrix.
This commit is contained in:
agent
2026-06-07 11:50:13 +02:00
parent bb5b0e09b1
commit fc644ecd6e
308 changed files with 38829 additions and 474 deletions
+68
View File
@@ -0,0 +1,68 @@
#!/usr/bin/env bash
# reset-password.sh — resetea la contraseña de un bot existente y la escribe en .env
#
# A diferencia de register.sh, este script NO crea una nueva sesión ni cambia el device ID.
# El token de acceso actual sigue siendo válido.
# Útil para añadir MATRIX_PASSWORD_X a .env en bots ya registrados.
#
# Uso:
# ./dev-scripts/agent/reset-password.sh <agent-id>
#
# Ejemplo:
# ./dev-scripts/agent/reset-password.sh assistant-bot
#
# Requiere en .env:
# MATRIX_ADMIN_TOKEN=syt_...
# MATRIX_HOMESERVER=https://...
# MATRIX_SERVER_NAME=...
source "$(dirname "$0")/../_common.sh"
load_env
need_arg "${1:-}"
ID="$1"
USERNAME="$ID"
PASSWORD_ENV_VAR="MATRIX_PASSWORD_$(echo "$ID" | tr '[:lower:]-' '[:upper:]_' | sed 's/_BOT$//')"
[[ -n "${MATRIX_ADMIN_TOKEN:-}" ]] || fail "MATRIX_ADMIN_TOKEN no está en .env"
[[ -n "${MATRIX_HOMESERVER:-}" ]] || fail "MATRIX_HOMESERVER no está en .env"
[[ -n "${MATRIX_SERVER_NAME:-}" ]] || fail "MATRIX_SERVER_NAME no está en .env"
USER_ID="@${USERNAME}:${MATRIX_SERVER_NAME}"
# Generar nueva contraseña aleatoria
NEW_PASSWORD=$(head -c 24 /dev/urandom | od -A n -t x1 | tr -d ' \n')
info "Reseteando contraseña de ${USER_ID}..."
info "(El token de acceso actual NO cambia — solo la contraseña)"
# Synapse admin API: reset password sin cerrar sesiones existentes
RESPONSE=$(curl -s -w "\n%{http_code}" -X POST \
"${MATRIX_HOMESERVER}/_synapse/admin/v1/reset_password/${USER_ID}" \
-H "Authorization: Bearer ${MATRIX_ADMIN_TOKEN}" \
-H "Content-Type: application/json" \
-d "{\"new_password\": \"${NEW_PASSWORD}\", \"logout_devices\": false}")
HTTP_CODE=$(echo "$RESPONSE" | tail -1)
BODY=$(echo "$RESPONSE" | head -1)
if [[ "$HTTP_CODE" != "200" ]]; then
fail "Admin API devolvió HTTP $HTTP_CODE: $BODY"
fi
# Escribir en .env
if grep -q "^${PASSWORD_ENV_VAR}=" .env; then
awk -v key="$PASSWORD_ENV_VAR" -v val="$NEW_PASSWORD" \
'index($0, key "=") == 1 { print key "=" val; next } { print }' \
.env > /tmp/_env_tmp && mv /tmp/_env_tmp .env
ok "$PASSWORD_ENV_VAR actualizado en .env"
else
printf '\n%s=%s\n' "$PASSWORD_ENV_VAR" "$NEW_PASSWORD" >> .env
ok "$PASSWORD_ENV_VAR añadido a .env"
fi
echo ""
ok "Contraseña reseteada para ${USER_ID}"
dim " El bot usará esta contraseña para cross-signing bootstrap en el próximo arranque."
dim " Reinícialo con: ./dev-scripts/server/stop.sh $ID && ./dev-scripts/server/start.sh $ID"