feat: initial project structure
This commit is contained in:
commit
cf4957010f
10 changed files with 621 additions and 0 deletions
93
scripts/setup-shared-projects.sh
Executable file
93
scripts/setup-shared-projects.sh
Executable file
|
|
@ -0,0 +1,93 @@
|
|||
#!/usr/bin/env bash
|
||||
#
|
||||
# setup-shared-projects.sh
|
||||
#
|
||||
# Prepare the shared Claude Code projects/ tree used by claude-failover
|
||||
# to preserve session resume across account swaps.
|
||||
#
|
||||
# Creates /home/ubuntu/.claude-projects-shared (if missing), then rewires
|
||||
# each account's ~/.claude/projects to point at it. Existing per-account
|
||||
# transcripts are merged into the shared tree (rsync -a, no overwrite of
|
||||
# newer files).
|
||||
#
|
||||
# Usage:
|
||||
# scripts/setup-shared-projects.sh [--shared DIR] [--dry-run] \
|
||||
# account_home_1 account_home_2 [account_home_N...]
|
||||
#
|
||||
# Example:
|
||||
# scripts/setup-shared-projects.sh \
|
||||
# /home/ubuntu/.claude-compte1 \
|
||||
# /home/ubuntu/.claude-compte2
|
||||
#
|
||||
# Safe to rerun: it never deletes account-private files (credentials,
|
||||
# statsig cache, settings). It only touches the `projects/` subdir.
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
SHARED="/home/ubuntu/.claude-projects-shared"
|
||||
DRY_RUN=0
|
||||
ACCOUNTS=()
|
||||
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case "$1" in
|
||||
--shared)
|
||||
SHARED="$2"
|
||||
shift 2
|
||||
;;
|
||||
--dry-run)
|
||||
DRY_RUN=1
|
||||
shift
|
||||
;;
|
||||
-h|--help)
|
||||
sed -n '2,22p' "$0"
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
ACCOUNTS+=("$1")
|
||||
shift
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [[ ${#ACCOUNTS[@]} -lt 1 ]]; then
|
||||
echo "error: at least one account home must be provided" >&2
|
||||
exit 2
|
||||
fi
|
||||
|
||||
run() {
|
||||
if [[ $DRY_RUN -eq 1 ]]; then
|
||||
echo "DRY: $*"
|
||||
else
|
||||
echo "+ $*"
|
||||
"$@"
|
||||
fi
|
||||
}
|
||||
|
||||
run mkdir -p "$SHARED"
|
||||
|
||||
for home in "${ACCOUNTS[@]}"; do
|
||||
if [[ ! -d "$home" ]]; then
|
||||
echo "warn: account home not found: $home (skipping)" >&2
|
||||
continue
|
||||
fi
|
||||
proj="$home/.claude/projects"
|
||||
run mkdir -p "$home/.claude"
|
||||
|
||||
if [[ -L "$proj" ]]; then
|
||||
current="$(readlink "$proj")"
|
||||
if [[ "$current" == "$SHARED" ]]; then
|
||||
echo "ok: $proj already -> $SHARED"
|
||||
continue
|
||||
fi
|
||||
echo "replacing symlink $proj ($current -> $SHARED)"
|
||||
run rm "$proj"
|
||||
elif [[ -d "$proj" ]]; then
|
||||
echo "merging $proj -> $SHARED"
|
||||
run rsync -a --ignore-existing "$proj/" "$SHARED/"
|
||||
run rm -rf "$proj"
|
||||
fi
|
||||
|
||||
run ln -s "$SHARED" "$proj"
|
||||
done
|
||||
|
||||
echo "done. shared projects tree: $SHARED"
|
||||
Loading…
Add table
Add a link
Reference in a new issue