#!/bin/sh # Installs packagetrackdev, the PackageTrack CLI, and packagetrackdev-mcp, # the PackageTrack server for coding agents. https://packagetrack.dev # Needs no root access. Everything lands in your own home directory. set -eu CLI_WHEEL="packagetrackdev-0.2.2-py3-none-any.whl" CLI_WHEEL_URL="https://packagetrack.dev/cli/packagetrackdev-0.2.2-py3-none-any.whl" MCP_WHEEL="packagetrackdev_mcp-0.1.1-py3-none-any.whl" MCP_WHEEL_URL="https://packagetrack.dev/cli/packagetrackdev_mcp-0.1.1-py3-none-any.whl" case "$(uname -s 2>/dev/null || echo unknown)" in Linux|Darwin) ;; MINGW*|MSYS*|CYGWIN*) echo "This installer is for Linux and macOS." echo "On Windows, use WSL, or install directly with uv:" echo " uv tool install 'packagetrackdev @ $CLI_WHEEL_URL'" echo " uv tool install 'packagetrackdev-mcp @ $MCP_WHEEL_URL'" exit 1 ;; *) echo "Unsupported platform: $(uname -s)." echo "If you have uv, you can install directly:" echo " uv tool install 'packagetrackdev @ $CLI_WHEEL_URL'" echo " uv tool install 'packagetrackdev-mcp @ $MCP_WHEEL_URL'" exit 1 ;; esac if ! command -v uv >/dev/null 2>&1; then echo "packagetrackdev is installed with uv, which is not on this machine yet." echo "Installing uv from astral.sh (their official installer, no root)." curl -fsSL https://astral.sh/uv/install.sh | sh # uv lands in ~/.local/bin; make it visible to the rest of this script. PATH="$HOME/.local/bin:$PATH" export PATH fi TMP_DIR="$(mktemp -d)" trap 'rm -rf "$TMP_DIR"' EXIT # Download one wheel, check it against the checksum published next to it, # and install it as a uv tool. A mismatch installs nothing. install_wheel() { name="$1" wheel="$2" url="$3" echo "Downloading $url" curl -fsSL -o "$TMP_DIR/$wheel" "$url" expected="$(curl -fsSL "$url.sha256")" if command -v sha256sum >/dev/null 2>&1; then actual="$(sha256sum "$TMP_DIR/$wheel" | cut -d' ' -f1)" elif command -v shasum >/dev/null 2>&1; then actual="$(shasum -a 256 "$TMP_DIR/$wheel" | cut -d' ' -f1)" else echo "No sha256 tool found; skipping checksum verification." actual="$expected" fi if [ "$actual" != "$expected" ]; then echo "Checksum mismatch for $wheel. Not installing." echo " expected: $expected" echo " got: $actual" exit 1 fi echo "Installing $name" uv tool install --force "$name @ file://$TMP_DIR/$wheel" } install_wheel packagetrackdev "$CLI_WHEEL" "$CLI_WHEEL_URL" install_wheel packagetrackdev-mcp "$MCP_WHEEL" "$MCP_WHEEL_URL" ok=1 for cmd in packagetrackdev packagetrackdev-mcp; do command -v "$cmd" >/dev/null 2>&1 && "$cmd" --version >/dev/null 2>&1 || ok=0 done if [ "$ok" = 1 ]; then echo "Installed: $(packagetrackdev --version), $(packagetrackdev-mcp --version)" echo "Try: packagetrackdev check" echo "For your coding agent: claude mcp add -s user packagetrackdev -- packagetrackdev-mcp" else echo "Installed, but the commands are not on your PATH in this shell." echo "Run:" echo " uv tool update-shell" echo "then open a new terminal and try: packagetrackdev --version" fi