File size: 4,818 Bytes
064bfd6 96f34e3 064bfd6 b926515 96f34e3 064bfd6 2421679 f7a8a02 064bfd6 2421679 064bfd6 96f34e3 064bfd6 96f34e3 064bfd6 96f34e3 064bfd6 96f34e3 064bfd6 96f34e3 064bfd6 96f34e3 064bfd6 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 | #!/usr/bin/env bash
set -euo pipefail
# codev installer
# Usage: curl -fsSL https://raw.githubusercontent.com/paoloanzn/free-code/main/install.sh | bash
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
CYAN='\033[0;36m'
BOLD='\033[1m'
DIM='\033[2m'
RESET='\033[0m'
REPO="https://huggingface.co/chenbhao/codev"
INSTALL_DIR="$HOME/codev"
BUN_MIN_VERSION="1.3.11"
info() { printf "${CYAN}[*]${RESET} %s\n" "$*"; }
ok() { printf "${GREEN}[+]${RESET} %s\n" "$*"; }
warn() { printf "${YELLOW}[!]${RESET} %s\n" "$*"; }
fail() {
printf "${RED}[x]${RESET} %s\n" "$*"
exit 1
}
header() {
echo ""
printf "${BOLD}${CYAN}"
cat <<'ART'
____ _
/ ___|___ __| | _____ __
| | / _ \ / _` |/ _ \ \ / /
| |__| (_) | (_| | __/\ V /
\____\___/ \__,_|\___| \_/
ART
printf "${RESET}"
printf "${DIM} The free build of Claude Code${RESET}\n"
echo ""
}
# -------------------------------------------------------------------
# System checks
# -------------------------------------------------------------------
check_os() {
case "$(uname -s)" in
Darwin) OS="macos" ;;
Linux) OS="linux" ;;
*) fail "Unsupported OS: $(uname -s). macOS or Linux required." ;;
esac
ok "OS: $(uname -s) $(uname -m)"
}
check_git() {
if ! command -v git &>/dev/null; then
fail "git is not installed. Install it first:
macOS: xcode-select --install
Linux: sudo pacman -S git (or your distro's equivalent eg: sudo apt install git)"
fi
ok "git: $(git --version | head -1)"
}
# Compare semver: returns 0 if $1 >= $2
version_gte() {
[ "$(printf '%s\n' "$1" "$2" | sort -V | head -1)" = "$2" ]
}
check_bun() {
if command -v bun &>/dev/null; then
local ver
ver="$(bun --version 2>/dev/null || echo "0.0.0")"
if version_gte "$ver" "$BUN_MIN_VERSION"; then
ok "bun: v${ver}"
return
fi
warn "bun v${ver} found but v${BUN_MIN_VERSION}+ required. Upgrading..."
else
info "bun not found. Installing..."
fi
install_bun
}
install_bun() {
curl -fsSL https://bun.sh/install | bash
# Source the updated profile so bun is on PATH for this session
export BUN_INSTALL="${BUN_INSTALL:-$HOME/.bun}"
export PATH="$BUN_INSTALL/bin:$PATH"
if ! command -v bun &>/dev/null; then
fail "bun installation succeeded but binary not found on PATH.
Add this to your shell profile and restart:
export PATH=\"\$HOME/.bun/bin:\$PATH\""
fi
ok "bun: v$(bun --version) (just installed)"
}
# -------------------------------------------------------------------
# Clone & build
# -------------------------------------------------------------------
clone_repo() {
if [ -d "$INSTALL_DIR" ]; then
warn "$INSTALL_DIR already exists"
if [ -d "$INSTALL_DIR/.git" ]; then
info "Pulling latest changes..."
git -C "$INSTALL_DIR" pull --ff-only origin main 2>/dev/null || {
warn "Pull failed, continuing with existing copy"
}
fi
else
info "Cloning repository..."
git clone --depth 1 "$REPO" "$INSTALL_DIR"
fi
ok "Source: $INSTALL_DIR"
}
install_deps() {
info "Installing dependencies..."
cd "$INSTALL_DIR"
bun install --frozen-lockfile 2>/dev/null || bun install
ok "Dependencies installed"
}
build_binary() {
info "Building Codev (all experimental features enabled)..."
cd "$INSTALL_DIR"
bun run build:dev:full
ok "Binary built: $INSTALL_DIR/Codev"
}
link_binary() {
local link_dir="$HOME/.local/bin"
mkdir -p "$link_dir"
ln -sf "$INSTALL_DIR/Codev" "$link_dir/codev"
ok "Symlinked: $link_dir/codev"
if ! echo "$PATH" | tr ':' '\n' | grep -qx "$link_dir"; then
warn "$link_dir is not on your PATH"
echo ""
printf "${YELLOW} Add this to your shell profile (~/.bashrc, ~/.zshrc, etc.):${RESET}\n"
printf "${BOLD} export PATH=\"\$HOME/.local/bin:\$PATH\"${RESET}\n"
echo ""
fi
}
# -------------------------------------------------------------------
# Main
# -------------------------------------------------------------------
header
info "Starting installation..."
echo ""
check_os
check_git
check_bun
echo ""
clone_repo
install_deps
build_binary
link_binary
echo ""
printf "${GREEN}${BOLD} Installation complete!${RESET}\n"
echo ""
printf " ${BOLD}Run it:${RESET}\n"
printf " ${CYAN}codev${RESET} # interactive REPL\n"
printf " ${CYAN}codev -p \"your prompt\"${RESET} # one-shot mode\n"
echo ""
printf " ${BOLD}Set your API key:${RESET}\n"
printf " ${CYAN}export ANTHROPIC_API_KEY=\"sk-ant-...\"${RESET}\n"
echo ""
printf " ${BOLD}Or log in with Claude.ai:${RESET}\n"
printf " ${CYAN}codev /login${RESET}\n"
echo ""
printf " ${DIM}Source: $INSTALL_DIR${RESET}\n"
printf " ${DIM}Binary: $INSTALL_DIR/Codev${RESET}\n"
printf " ${DIM}Link: ~/.local/bin/codev${RESET}\n"
echo ""
|