#1586: the skill's interpreter-detection allowlist rejected any shebath path with a char outside [a-zA-Z0-9/_.-], so Homebrew's versioned python@3.13 path was skipped and detection fell through to a bare python3 without graphify. Allow @ in the skillgen source fragments (core/devin/aider/posix), regenerate all skill artifacts, and register the change as a sanctioned monolith diff. Injection chars (; $ ( etc.) are still rejected. #1606: graphify merge-graphs crashed with an unhandled NetworkXError when inputs disagreed on directed/multigraph. _to_simple only converted MultiGraph, leaving a DiGraph to fail compose. Normalize every input to a plain undirected Graph (the merged cross-repo view is undirected anyway). Also confirmed on v8: `graphify kilo install` (#1605) works (reporter was on an older version), and `pip3 install graphifyy` failing on macOS (#1585) is a broken Homebrew Python 3.14 / pyexpat env, not a graphify issue — pip crashes in its own vendored distlib before graphify is touched. skillgen --check / --monolith-roundtrip / --schema-singleton all green; shell smoke accepts python@3.13 and still rejects `; rm -rf /` and `$(evil)`. Full suite 2789. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1.8 KiB
1.8 KiB
# Detect the correct Python interpreter (handles uv tool, pipx, venv, system installs)
PYTHON=""
GRAPHIFY_BIN=$(which graphify 2>/dev/null)
# 1. uv tool installs — most reliable on modern Mac/Linux
if [ -z "$PYTHON" ] && command -v uv >/dev/null 2>&1; then
_UV_PY=$(uv tool run graphifyy python -c "import sys; print(sys.executable)" 2>/dev/null)
if [ -n "$_UV_PY" ]; then PYTHON="$_UV_PY"; fi
fi
# 2. Read shebang from graphify binary (pipx and direct pip installs)
if [ -z "$PYTHON" ] && [ -n "$GRAPHIFY_BIN" ]; then
_SHEBANG=$(head -1 "$GRAPHIFY_BIN" | tr -d '#!')
case "$_SHEBANG" in
*[!a-zA-Z0-9/_.@-]*) ;;
*) "$_SHEBANG" -c "import graphify" 2>/dev/null && PYTHON="$_SHEBANG" ;;
esac
fi
# 3. Fall back to python3
if [ -z "$PYTHON" ]; then PYTHON="python3"; fi
if ! "$PYTHON" -c "import graphify" 2>/dev/null; then
if command -v uv >/dev/null 2>&1; then
uv tool install --upgrade graphifyy -q 2>&1 | tail -3
_UV_PY=$(uv tool run graphifyy python -c "import sys; print(sys.executable)" 2>/dev/null)
if [ -n "$_UV_PY" ]; then PYTHON="$_UV_PY"; fi
else
"$PYTHON" -m pip install graphifyy -q 2>/dev/null \
|| "$PYTHON" -m pip install graphifyy -q --break-system-packages 2>&1 | tail -3
fi
fi
# Write interpreter path for all subsequent steps (persists across invocations)
mkdir -p graphify-out
"$PYTHON" -c "import sys; open('graphify-out/.graphify_python', 'w', encoding='utf-8').write(sys.executable)"
# Save scan root so `graphify update` (no args) knows where to look next time
echo "$(cd INPUT_PATH && pwd)" > graphify-out/.graphify_root
If the import succeeds, print nothing and move straight to Step 2.
In every subsequent bash block, replace python3 with $(cat graphify-out/.graphify_python) to use the correct interpreter.