#!/usr/bin/env bash # reset-sindra-stores.sh — wipe ratatoskr's Bifrost provider stores (memory + # affect/persona for the single-tenant Tier-3 agent, sindra) and restart the # combined :8392 provider empty. # # Usage: # scripts/reset-sindra-stores.sh # wipe, keep ONE rolling backup (default) # scripts/reset-sindra-stores.sh --hard # wipe with NO backup (zero-trace) # # The rolling backup (db-reset-backup/, gitignored via *.db*) is overwritten # every run — it never accumulates; it's a one-level undo, nothing more. # # Why stop the provider first: the combined provider holds the SQLite files open # (WAL) and caches state in memory, so an out-of-band file move without a restart # would be shadowed. Stop -> move -> restart lets it recreate empty schema # (CREATE TABLE IF NOT EXISTS on open). PORT=8392 BACKUP_DIR="db-reset-backup" ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" cd "$ROOT" || { echo "reset: cannot cd to repo root $ROOT" >&2; exit 1; } # shellcheck disable=SC1091 source ./env.sh >/dev/null 2>&1 || { echo "reset: failed to source env.sh" >&2; exit 1; } AFFECT_DB="${RATATOSKR_AFFECT_DB:-affect.db}" MEMORY_DB="${RATATOSKR_MEMORY_DB:-memory.db}" HARD=0; [ "${1:-}" = "--hard" ] && HARD=1 echo "== ratatoskr provider-store reset (memory + persona) ==" echo " affect: $AFFECT_DB" echo " memory: $MEMORY_DB" # 1. stop the combined provider holding the DBs PID="$(ss -ltnp 2>/dev/null | grep ":$PORT" | grep -oE 'pid=[0-9]+' | head -1 | cut -d= -f2)" if [ -n "${PID:-}" ]; then kill -9 "$PID" 2>/dev/null && echo "-- stopped provider :$PORT (pid $PID)" else echo "-- no provider on :$PORT (already down)" fi # 2. wipe (optional rolling backup) files=("$AFFECT_DB" "$AFFECT_DB-wal" "$AFFECT_DB-shm" "$MEMORY_DB" "$MEMORY_DB-wal" "$MEMORY_DB-shm") if [ "$HARD" -eq 1 ]; then for f in "${files[@]}"; do [ -e "$f" ] && rm -f "$f" && echo "-- removed $f"; done echo "-- HARD wipe (no backup)" else rm -rf "$BACKUP_DIR"; mkdir -p "$BACKUP_DIR" for f in "${files[@]}"; do [ -e "$f" ] && mv "$f" "$BACKUP_DIR"/ && echo "-- $f -> $BACKUP_DIR/"; done echo "-- rolling backup: $BACKUP_DIR/ (overwritten each run)" fi # 3. restart the combined provider (recreates empty schema on open) nohup "$ROOT/.venv/bin/ratatoskr-combined-provider" >/tmp/ratatoskr-combined.log 2>&1 & disown echo "-- restarted combined provider (pid $!)" # 4. verify bound + empty curl -s -o /dev/null -w "-- :$PORT -> HTTP %{http_code}\n" --retry 25 --retry-connrefused --retry-delay 1 "http://127.0.0.1:$PORT/" echo "-- affect_snapshots (persona): $(sqlite3 "$AFFECT_DB" 'SELECT COUNT(*) FROM affect_snapshots' 2>&1)" echo "-- memory_chunks (memory): $(sqlite3 "$MEMORY_DB" 'SELECT COUNT(*) FROM memory_chunks' 2>&1)" echo "== done — sindra memory + persona reset =="