refactor: remove duplicate script from SKILL.md, use reference instead

This commit is contained in:
shokollm
2026-03-27 13:05:09 +00:00
parent 63b89eed6d
commit b1dc002b09

View File

@@ -61,155 +61,6 @@ chmod +x ~/.local/bin/opencode-worktree
. opencode-worktree.sh --cleanup session-20260327-a1b2c3-refactor-auth
```
---
## Script
## Script Source
```bash
#!/bin/bash
# opencode-worktree - Isolated OpenCode sessions via git worktrees
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
WORKTREE_BASE="$PWD/.git/worktrees"
PURPOSE=""
CLEANUP_ONLY=false
CLEANUP_NAME=""
usage() {
cat <<EOF
Usage: $(basename "$0") [purpose] [--cleanup [name]]
Create isolated OpenCode sessions via git worktrees.
Arguments:
purpose Purpose string for the session (optional)
--cleanup Remove all session-* worktrees
--cleanup <name> Remove specific worktree by name
Examples:
$(basename "$0") # session-20260327-a1b2c3
$(basename "$0") refactor-auth # session-20260327-a1b2c3-refactor-auth
$(basename "$0") --cleanup # remove all session-* worktrees
EOF
}
parse_args() {
while [[ $# -gt 0 ]]; do
case "$1" in
--cleanup)
CLEANUP_ONLY=true
if [[ $# -gt 1 && ! "$2" =~ ^-- ]]; then
CLEANUP_NAME="$2"
shift
fi
;;
-h|--help)
usage
exit 0
;;
*)
if [[ -z "$PURPOSE" ]]; then
PURPOSE="$1"
fi
;;
esac
shift
done
}
cleanup_stale() {
if [[ ! -d "$WORKTREE_BASE" ]]; then
return
fi
for wt in "$WORKTREE_BASE"/session-*; do
[[ -d "$wt" ]] || continue
branch=$(git -C "$wt" rev-parse --abbrev-ref HEAD 2>/dev/null) || continue
echo "Removing stale worktree: $(basename "$wt")"
git worktree remove "$wt" --force 2>/dev/null || true
if [[ -n "$branch" && "$branch" != "HEAD" ]]; then
git branch -D "$branch" 2>/dev/null || true
fi
done
}
cleanup_single() {
local name="$1"
local wt_path="$WORKTREE_BASE/$name"
if [[ ! -d "$wt_path" ]]; then
echo "Worktree '$name' not found"
return
fi
branch=$(git -C "$wt_path" rev-parse --abbrev-ref HEAD 2>/dev/null) || branch=""
echo "Removing worktree: $name"
git worktree remove "$wt_path" --force 2>/dev/null || true
if [[ -n "$branch" && "$branch" != "HEAD" ]]; then
git branch -D "$branch" 2>/dev/null || true
fi
}
create_worktree() {
local timestamp=$(date +%Y%m%d-%H%M%S)
local random=$(head -c 3 /dev/urandom | xxd -p | head -c 6)
local worktree_name="session-${timestamp}-${random}"
local branch_name="$worktree_name"
if [[ -n "$PURPOSE" ]]; then
worktree_name="${worktree_name}-${PURPOSE}"
branch_name="$worktree_name"
fi
local worktree_path="$WORKTREE_BASE/$worktree_name"
# Cleanup any existing with same name
if [[ -d "$worktree_path" ]]; then
echo "Removing existing worktree: $worktree_name"
git worktree remove "$worktree_path" --force 2>/dev/null || true
fi
# Ensure main exists and is up to date
if ! git show-ref --quiet refs/heads/main 2>/dev/null; then
echo "Error: 'main' branch does not exist"
exit 1
fi
# Create worktree from main
echo "Creating worktree: $worktree_name"
git worktree add -b "$branch_name" "$worktree_path" main
# Launch opencode in worktree
echo "Entering worktree and launching opencode..."
cd "$worktree_path"
exec opencode
}
main() {
# Verify we're in a git repo
if ! git rev-parse --is-inside-work-tree 2>/dev/null; then
echo "Error: Must be run inside a git repository"
exit 1
fi
if [[ "$CLEANUP_ONLY" == true ]]; then
if [[ -n "$CLEANUP_NAME" ]]; then
cleanup_single "$CLEANUP_NAME"
else
cleanup_stale
fi
exit 0
fi
cleanup_stale
create_worktree
}
parse_args "$@"
main
```
See [opencode-worktree.sh](./opencode-worktree.sh) for the full source.