v0.8.26
Graphify-Labs/graphifyv0.8.26May 30, 2026by safishamsi
AI Summary
Adds circular import cycle detection and custom LLM provider registry for any OpenAI-compatible endpoint.
Key Highlights
- Circular import cycle detection in GRAPH_REPORT.md
- Custom LLM provider registry
- extract_files_direct() backend default fix
- pnpm-workspace.yaml crash fix
- Anchored .graphifyignore patterns fix
New Features
- Johnson's algorithm for import cycles
- OpenAI-compatible provider registration
- NVIDIA NIM, vLLM, OpenRouter support
Full Release Notes
## What's new
### New features
**Circular import cycle detection** — `GRAPH_REPORT.md` now includes an `## Import Cycles` section showing file-level circular dependencies. Uses Johnson's algorithm on a directed file-level import graph, deduplicates rotations, and sorts by cycle length (tightest coupling first). Also available programmatically via `find_import_cycles(G)` in `graphify.analyze`. (#961 — thanks @deXterbed)
**Custom LLM provider registry** — Register any OpenAI-compatible endpoint without touching source code:
\`\`\`bash
graphify provider add nvidia \
--base-url https://integrate.api.nvidia.com/v1 \
--default-model minimaxai/minimax-m2.7 \
--env-key NVIDIA_API_KEY
graphify provider list / show / remove
\`\`\`
Providers stored in `~/.graphify/providers.json`. Custom providers are auto-detected after all built-ins in `detect_backend()` priority so they never shadow a configured paid key. Works for any OpenAI-compatible endpoint: NVIDIA NIM, vLLM, OpenRouter, Together AI, LiteLLM, Fireworks, etc. (#1084 — thanks @timburman)
### Bug fixes
**`extract_files_direct()` no longer silently defaults to kimi (Moonshot AI)** — `backend=None` now calls `detect_backend()` and picks whichever API key you have set, matching CLI behavior. Raises a clear `ValueError` listing all options if nothing is configured. README Privacy section updated with data-residency notes and provider priority order. (#1086 — thanks @EmanuelFaria)
**`pnpm-workspace.yaml` crash on Python 3.10 fixed** — `packages: - '.'` (single-package-at-root workspace) caused `IndexError: tuple index out of range` in `_load_workspace_packages`, silently skipping every JS/TS file in the project. Fixed with a one-line guard: `[root]` is used directly instead of `root.glob('.')`. Also added `GRAPHIFY_DEBUG=1` env var to `_safe_extract` — set it to print full tracebacks instead of the terse one-liner warning. (#1083 — thanks @santiagotorres-united)
**Anchored `.graphifyignore` patterns no longer match deep in the tree** — `/inbox/` should only match `inbox/` at the repo root, not `src/inbox/` anywhere in the tree. The basename shortcut and per-segment loop in `_matches()` now respect the `anchored` flag. Anchored patterns do an exact anchor-relative path match only. Same fix applied to `_is_included()`. (#1087 — thanks @cheerc)
### Docs
Filipino (fil-PH) README translation added. (#1080 — thanks @Reihanboo)
## Upgrade
\`\`\`bash
uv tool upgrade graphifyy
# or
pip install --upgrade graphifyy
\`\`\`