#!/usr/bin/env bash set -euo pipefail # Project-local agent setup: downloads ctx into ./ctx and wires env vars. # Usage in Claude Code / Codex terminal: # source <(curl -fsSL https://raw.githubusercontent.com/dchu917/ctx/main/scripts/agent_setup_local_ctx.sh) REPO_URL="https://github.com/dchu917/ctx" DEFAULT_REF="v0.1.1" CTX_REF="${CTX_VERSION:-$DEFAULT_REF}" if [[ "$CTX_REF" == "main" ]]; then ARCHIVE_URL="$REPO_URL/archive/refs/heads/main.tar.gz" else TAG_REF="${CTX_REF#refs/tags/}" ARCHIVE_URL="$REPO_URL/archive/refs/tags/$TAG_REF.tar.gz" fi PREFIX="$PWD/ctx" BIN_DIR="$PREFIX/bin" LIB_DIR="$PREFIX/lib" DB_PATH="$PREFIX/context.db" mkdir -p "$BIN_DIR" "$LIB_DIR" if [[ ! -d "$LIB_DIR/contextfun" ]]; then TMPDIR=$(mktemp -d) trap 'rm -rf "$TMPDIR"' EXIT echo "Downloading ctx into ./ctx (ref: $CTX_REF) ..." curl -fsSL "$ARCHIVE_URL" | tar xz -C "$TMPDIR" SRC_DIR=$(find "$TMPDIR" -mindepth 1 -maxdepth 1 -type d | head -n1) cp -R "$SRC_DIR/contextfun" "$LIB_DIR/" install -m 0755 "$SRC_DIR/scripts/ctx_cmd.py" "$BIN_DIR/ctx.py" cat > "$BIN_DIR/ctx" <<'SH' #!/usr/bin/env bash set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd -P)" BIN_DIR="$SCRIPT_DIR" PREFIX="$(cd "$BIN_DIR/.." && pwd -P)" LIB_DIR="$PREFIX/lib" export PYTHONPATH="$LIB_DIR${PYTHONPATH:+:$PYTHONPATH}" exec python3 "$BIN_DIR/ctx.py" "$@" SH chmod +x "$BIN_DIR/ctx" fi # Initialize DB if missing if [[ ! -f "$DB_PATH" ]]; then PYTHONPATH="$LIB_DIR" python3 -m contextfun --db "$DB_PATH" init >/dev/null || true fi # Export env vars for the current shell export ctx_DB="$DB_PATH" export PATH="$BIN_DIR:$PATH" echo "ctx ready in ./ctx (DB: $DB_PATH). Commands available: ctx, python3 -m contextfun"