0a8784cc1b
Stop combined :8392 provider -> move memory.db+affect.db to a single rolling backup (--hard skips it) -> restart -> verify empty. Codifies the manual reset flow so it's a one-command CLI op. Rolling backup gitignored via *.db*.
62 lines
2.7 KiB
Bash
Executable File
62 lines
2.7 KiB
Bash
Executable File
#!/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 =="
|