#!/usr/bin/env bash set -euo pipefail fail() { printf 'focus-session restart: %s\n' "$1" >&2 exit 1 } cleanup() { qs ipc call focus end >/dev/null 2>&1 || true } trap cleanup EXIT qs ipc call focus end >/dev/null 2>&1 || true qs ipc call focus start >/dev/null qs ipc call focus pause >/dev/null before=$(qs ipc call focus status) qs kill >/dev/null qs --daemonize >/dev/null status="" for _ in $(seq 1 60); do status=$(qs ipc call focus status 2>/dev/null || true) if jq -e '.active == true and .paused == true' <<<"$status" >/dev/null 2>&1; then break fi sleep 0.2 done jq -e '.active == true' <<<"$status" >/dev/null || fail 'active session was not restored' jq -e '.paused == true' <<<"$status" >/dev/null || fail 'paused state was not restored' [[ "$(jq -r .remaining <<<"$status")" == "$(jq -r .remaining <<<"$before")" ]] || fail 'paused remainder changed across restart' jq -e '.doNotDisturb == true' <<<"$status" >/dev/null || fail 'Do Not Disturb was not reclaimed' jq -e '.caffeine == true' <<<"$status" >/dev/null || fail 'Caffeine was not reclaimed' cleanup trap - EXIT printf 'focus-session restart: PASS\n'