ROOT_DIR := $(shell pwd) # Prefer PYTHON= override. Else shebang of `mytoolkit` on PATH. Else python3. ifndef PYTHON CLI_BIN := $(shell command -v mytoolkit 2>/dev/null) ifneq ($(CLI_BIN),) PYTHON := $(shell head -1 "$(CLI_BIN)" 2>/dev/null | sed 's|^#!||') endif ifeq ($(strip $(PYTHON)),) PYTHON := python3 endif endif .PHONY: help install uninstall sync-skill test help: @echo "Usage: make [target]" @echo "" @echo " install Editable install into CLI Python + sync skill" @echo " (refuse GHA runner/_work trees; PYTHON=$(PYTHON))" @echo " sync-skill Copy the bundled agent skill to ~/.agents/skills/mytoolkit/" @echo " test Run the pytest suite" @echo " uninstall Uninstall mytoolkit and remove shell completions" # Truth source for day-to-day work: xiaohe-agent/packages/mytoolkit (submodule). # Refuse ephemeral GHA runner checkouts so PATH CLI cannot silently point at _work. install: @case "$(ROOT_DIR)" in \ */_work/*|*/.xiaohe/actions-runner/*) \ echo "ERROR: refuse install from GHA runner worktree: $(ROOT_DIR)" >&2; \ echo "Use: cd /packages/mytoolkit && make install" >&2; \ echo " or: cd && make update / ./setup.sh" >&2; \ exit 1 ;; \ esac @echo "Installing editable mytoolkit" @echo " ROOT=$(ROOT_DIR)" @echo " PYTHON=$(PYTHON)" $(PYTHON) -m pip install -e "$(ROOT_DIR)" --upgrade @echo "Installing shell completions…" @mytoolkit completion install || echo "Warning: completion install failed" @$(MAKE) -s sync-skill @echo "Editable install:" @$(PYTHON) -m pip show mytoolkit | awk '/^(Name|Version|Location|Editable project location):/' @ed="$$($(PYTHON) -m pip show mytoolkit | awk -F': ' '/Editable project location:/ {print $$2}')"; \ case "$$ed" in \ */_work/*|*/.xiaohe/actions-runner/*) \ echo "ERROR: Editable still points at runner tree: $$ed" >&2; exit 1 ;; \ esac sync-skill: @echo "Syncing agent skill to ~/.agents/skills/mytoolkit/ ..." @mkdir -p "$(HOME)/.agents/skills" @if command -v rsync >/dev/null 2>&1; then \ rsync -av --delete "$(ROOT_DIR)/.agents/skills/mytoolkit/" "$(HOME)/.agents/skills/mytoolkit/"; \ else \ rm -rf "$(HOME)/.agents/skills/mytoolkit"; \ cp -R "$(ROOT_DIR)/.agents/skills/mytoolkit" "$(HOME)/.agents/skills/mytoolkit"; \ fi uninstall: @mytoolkit uninstall || $(PYTHON) -m pip uninstall mytoolkit -y test: @cd "$(ROOT_DIR)" && \ if command -v uv >/dev/null 2>&1; then \ uv run pytest tests/ -q; \ else \ $(PYTHON) -m pytest tests/ -q; \ fi