Migrate from Claude Code to OpenCode structure

- Move legacy content to legacy/ folder (old, old2, docs, learnings, scripts)
- Create new .opencode/ structure with skills/, tools/, agents/ folders
- Update Makefile to symlink to ~/.config/opencode/ instead of ~/.claude/
- Update Makefile to manage skills, tools, and agents (remove settings.json)
- Simplify install/uninstall (no backup logic)
- Add README.md documenting the new structure
- Keep settings.json as historical reference
This commit is contained in:
2026-05-02 13:41:59 +02:00
parent 26e5f6a597
commit cc72ad68ed
82 changed files with 176 additions and 28 deletions

View File

@@ -0,0 +1,56 @@
#!/bin/bash
set -euo pipefail
# Clean up git worktrees
#
# Usage:
# ./cleanup-worktrees.sh <path> # Remove specific worktree
# ./cleanup-worktrees.sh <directory> # Remove all worktrees in directory
# ./cleanup-worktrees.sh --force <path> # Force remove even if dirty
FORCE=false
if [ "$1" = "--force" ]; then
FORCE=true
shift
fi
TARGET="$1"
REPO_PATH=$(git rev-parse --show-toplevel 2>/dev/null || pwd)
cd "$REPO_PATH"
remove_worktree() {
local worktree_path="$1"
if [ ! -d "$worktree_path" ]; then
return 0
fi
if [ "$FORCE" = true ]; then
git worktree remove "$worktree_path" --force 2>/dev/null || true
else
git worktree remove "$worktree_path" 2>/dev/null || true
fi
}
# Check if target is a directory containing multiple worktrees
if [ -d "$TARGET" ]; then
# Check if it's a worktree itself or a directory of worktrees
if git worktree list | grep -q "$TARGET\$"; then
# It's a single worktree
remove_worktree "$TARGET"
else
# It's a directory, remove all worktrees inside
for worktree in "$TARGET"/*; do
if [ -d "$worktree" ]; then
remove_worktree "$worktree"
fi
done
# Try to remove the directory if empty
rmdir "$TARGET" 2>/dev/null || true
fi
else
echo "Error: Path does not exist: $TARGET" >&2
exit 1
fi

View File

@@ -0,0 +1,74 @@
#!/bin/bash
set -euo pipefail
# Create a git worktree for issue work or PR review
#
# Usage:
# ./create-worktree.sh issue <issue-number>
# ./create-worktree.sh review <pr-number> <branch-name>
#
# Returns: Absolute path to created worktree (stdout)
MODE="$1"
REPO_PATH=$(git rev-parse --show-toplevel 2>/dev/null || pwd)
REPO_NAME=$(basename "$REPO_PATH")
WORKTREES_DIR="${REPO_PATH}/../worktrees"
# Ensure worktrees directory exists
mkdir -p "$WORKTREES_DIR"
# Fetch latest from origin
cd "$REPO_PATH"
git fetch origin >/dev/null 2>&1
case "$MODE" in
issue)
ISSUE_NUMBER="$2"
WORKTREE_NAME="${REPO_NAME}-issue-${ISSUE_NUMBER}"
WORKTREE_PATH="${WORKTREES_DIR}/${WORKTREE_NAME}"
# Get issue title for branch name (tea issues output has title on line 2: " # #1 Title here")
ISSUE_TITLE=$(tea issues "$ISSUE_NUMBER" 2>/dev/null | sed -n '2p' | sed 's/.*#[0-9]* //' | xargs || echo "untitled")
# Create safe branch name
BRANCH_NAME="issue-${ISSUE_NUMBER}-$(echo "$ISSUE_TITLE" | tr '[:upper:]' '[:lower:]' | tr ' ' '-' | tr -cd '[:alnum:]-' | cut -c1-50)"
# Remove worktree if it already exists
if [ -d "$WORKTREE_PATH" ]; then
git worktree remove "$WORKTREE_PATH" --force 2>/dev/null || true
fi
# Delete branch if it exists
git branch -D "$BRANCH_NAME" 2>/dev/null || true
# Create worktree with new branch from main
git worktree add "$WORKTREE_PATH" -b "$BRANCH_NAME" origin/main >/dev/null 2>&1
echo "$WORKTREE_PATH"
;;
review)
PR_NUMBER="$2"
BRANCH_NAME="$3"
WORKTREE_NAME="${REPO_NAME}-review-${PR_NUMBER}"
WORKTREE_PATH="${WORKTREES_DIR}/${WORKTREE_NAME}"
# Remove worktree if it already exists
if [ -d "$WORKTREE_PATH" ]; then
git worktree remove "$WORKTREE_PATH" --force 2>/dev/null || true
fi
# Create worktree from existing branch
git worktree add "$WORKTREE_PATH" "origin/${BRANCH_NAME}" >/dev/null 2>&1
echo "$WORKTREE_PATH"
;;
*)
echo "Error: Invalid mode '$MODE'. Use 'issue' or 'review'" >&2
echo "Usage:" >&2
echo " $0 issue <issue-number>" >&2
echo " $0 review <pr-number> <branch-name>" >&2
exit 1
;;
esac

View File

@@ -0,0 +1,13 @@
#!/bin/bash
set -euo pipefail
# List all active git worktrees
#
# Usage:
# ./list-worktrees.sh
REPO_PATH=$(git rev-parse --show-toplevel 2>/dev/null || pwd)
cd "$REPO_PATH"
echo "Active worktrees:"
git worktree list