#!/usr/bin/env bash
# Remove desktop state owned by development bundle identifiers only.
# Production state (`xyz.block.buzz.app`, `~/.buzz`, and `buzz-desktop`) is
# deliberately outside every deletion pattern in this script.
set -euo pipefail
log() { printf '[desktop-dev-reset] %s\n' "$*"; }
remove_path() {
local path="$1"
if [[ -e "$path" || -L "$path" ]]; then
log "Removing $path"
rm -rf -- "$path"
fi
}
remove_bundle_state() {
local base="$1"
local suffix="${2:-}"
local prefix path
[[ -d "$base" ]] || return 0
shopt -s nullglob
for prefix in xyz.block.buzz.app.dev xyz.block.sprout.app.dev; do
# Match the canonical dev identifier and dot-delimited worktree variants.
# Do not use `${prefix}*`: that could match a non-dev prefix collision.
remove_path "$base/${prefix}${suffix}"
for path in "$base/${prefix}."*"${suffix}"; do
remove_path "$path"
done
done
shopt -u nullglob
}
case "$(uname -s)" in
Darwin)
remove_bundle_state "$HOME/Library/Application Support"
remove_bundle_state "$HOME/Library/Caches"
remove_bundle_state "$HOME/Library/WebKit"
remove_bundle_state "$HOME/Library/HTTPStorages"
remove_bundle_state "$HOME/Library/Saved Application State" ".savedState"
remove_bundle_state "$HOME/Library/Preferences" ".plist"
# SecretStore keeps all dev identity and agent keys in this dev-only item.
# Delete every matching item in case an older build used multiple accounts.
if command -v security >/dev/null 2>&1; then
while security delete-generic-password -s buzz-desktop-dev >/dev/null 2>&1; do :; done
while security delete-generic-password -s sprout-desktop-dev >/dev/null 2>&1; do :; done
fi
;;
Linux)
remove_bundle_state "${XDG_DATA_HOME:-$HOME/.local/share}"
remove_bundle_state "${XDG_CONFIG_HOME:-$HOME/.config}"
remove_bundle_state "${XDG_CACHE_HOME:-$HOME/.cache}"
;;
*)
log "Desktop bundle cleanup is not implemented for $(uname -s); continuing"
;;
esac
remove_path "$HOME/.buzz-dev"
remove_path "$HOME/.sprout-dev"
# A fresh dev nest must not re-import the installed app's ~/.buzz contents on
# its next boot. The sentinel is the same one used by migrate_dev_nest().
mkdir -p "$HOME/.buzz-dev"
: > "$HOME/.buzz-dev/.dev-nest-migrated"
log "Development desktop state removed; production Buzz state was not touched"