2026-06-11 09:20:49 +00:00
|
|
|
#!/bin/sh
|
|
|
|
|
# Reset a Claude Dev Vault TEST folder to its canonical state — fast vault reset
|
|
|
|
|
# between tests. ONLY Alpha/Beta; NEVER the "Stashpad" folder (real data) or
|
|
|
|
|
# "_deleted". Usage: scripts/reset-test-folder {Alpha|Beta}
|
2026-07-03 04:31:31 +00:00
|
|
|
#
|
|
|
|
|
# 2026-07-02: routes through obs-dev when the dedicated dev instance is up (it
|
|
|
|
|
# OWNS the Claude Dev Vault, so the obsidian-cli can't reach it), else falls back
|
|
|
|
|
# to the obsidian-cli. Both calls are wrapped in a hard timeout so a driver that
|
|
|
|
|
# can't reach the vault fails FAST instead of hanging forever (the overnight bug:
|
|
|
|
|
# reset-test-folder blocked >2min because `obs` targeted the main instance while
|
|
|
|
|
# obs-dev held the vault, with no timeout).
|
2026-06-11 09:20:49 +00:00
|
|
|
DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
|
|
|
F="$1"
|
|
|
|
|
case "$F" in
|
|
|
|
|
Alpha|Beta) ;;
|
|
|
|
|
*) echo "usage: reset-test-folder {Alpha|Beta} (never touches Stashpad)" >&2; exit 1;;
|
|
|
|
|
esac
|
2026-07-03 04:31:31 +00:00
|
|
|
|
|
|
|
|
# Portable 45s timeout: use timeout/gtimeout if present (Linux / brew coreutils),
|
|
|
|
|
# else a pure-sh shim (macOS ships neither). Returns 124 on timeout, like GNU.
|
|
|
|
|
TIMEOUT_SECS=45
|
|
|
|
|
if command -v timeout >/dev/null 2>&1; then
|
|
|
|
|
run() { timeout "$TIMEOUT_SECS" "$@"; }
|
|
|
|
|
elif command -v gtimeout >/dev/null 2>&1; then
|
|
|
|
|
run() { gtimeout "$TIMEOUT_SECS" "$@"; }
|
|
|
|
|
else
|
|
|
|
|
run() {
|
|
|
|
|
"$@" & cmd_pid=$!
|
|
|
|
|
( sleep "$TIMEOUT_SECS"; kill -TERM "$cmd_pid" 2>/dev/null ) & watch_pid=$!
|
|
|
|
|
wait "$cmd_pid" 2>/dev/null; rc=$?
|
|
|
|
|
# Discriminator: if the watcher is STILL alive (sleeping), the command
|
|
|
|
|
# finished first → keep its real rc and cancel the watcher. If the watcher
|
|
|
|
|
# is already gone, it fired the TERM → this was a timeout (124).
|
|
|
|
|
if kill -0 "$watch_pid" 2>/dev/null; then
|
|
|
|
|
kill "$watch_pid" 2>/dev/null; wait "$watch_pid" 2>/dev/null
|
|
|
|
|
else
|
|
|
|
|
rc=124
|
|
|
|
|
fi
|
|
|
|
|
return "$rc"
|
|
|
|
|
}
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
# Which driver owns the vault? obs-dev listens on :9222 when running. Its eval
|
|
|
|
|
# takes JS positionally; the obsidian-cli takes it as `code=<js>`.
|
|
|
|
|
if curl -s --max-time 2 "http://localhost:9222/json/version" >/dev/null 2>&1; then
|
|
|
|
|
echo "reset-test-folder: using obs-dev (dedicated instance holds the vault)"
|
|
|
|
|
run "$DIR/obs-dev" eval "window.__resetFolder='$F'" >/dev/null 2>&1
|
|
|
|
|
run "$DIR/obs-dev" eval-file "$DIR/reset-test-folder.js"
|
|
|
|
|
rc=$?
|
|
|
|
|
else
|
|
|
|
|
echo "reset-test-folder: using obsidian-cli (obs-dev not running)"
|
|
|
|
|
run "$DIR/obs" eval code="window.__resetFolder='$F'" >/dev/null 2>&1
|
|
|
|
|
run "$DIR/obs" eval-file "$DIR/reset-test-folder.js"
|
|
|
|
|
rc=$?
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
if [ "$rc" = 124 ]; then
|
|
|
|
|
echo "reset-test-folder: TIMED OUT after 45s — is the right instance holding the Claude Dev Vault?" >&2
|
|
|
|
|
echo " (obs-dev running? it's used automatically. Else put your main Obsidian on the Claude Dev Vault.)" >&2
|
|
|
|
|
fi
|
|
|
|
|
exit "$rc"
|