What's changed
Features
- Feat: custom OpenAI- and Anthropic-compatible endpoints.
OPENAI_BASE_URL/OPENAI_MODELandANTHROPIC_BASE_URL/ANTHROPIC_MODELpoint either backend at a self-hosted or proxy server (vLLM, llama.cpp, LM Studio, LiteLLM, gateways); defaults preserveapi.openai.com/api.anthropic.comandGRAPHIFY_OPENAI_MODELstill wins overOPENAI_MODEL. Wired through extraction and community labeling (#1273). - Feat: PowerShell
.psm1modules indexed..psm1was missing fromCODE_EXTENSIONSand the dispatch table, so modules and their dependents were silently absent from the graph (#1315)..psd1manifests andImport-Module/dot-source edges remain a follow-up. - Feat: JS/TS AST extracts assignment-form symbols —
this.X = () => {}/this.X = function(){},exports.X/module.exports.X,Foo.prototype.X, class arrow/function fields, andconst f = function(){}expressions. Constructor-style and CommonJS codebases (DAOs, route handlers, services) previously lost most callable symbols. Arbitraryobj.x = fnstays excluded (preserves the #1077 god-node guard) (#1322).
Fixes
- Fix: Swift
importedges no longer silently dropped. The import target previously had no backing node, sobuild.pypruned 100% of Swift imports; the module node is now synthesized so the edge survives (#1327). - Fix:
--no-cluster/ incrementalupdateno longer accumulate duplicate edges. These paths bypass theDiGraphthat collapses parallel edges, so repeatedupdategrew edge counts and diverged across build modes. Edges are now deduped by(source, target, relation)— deterministic and idempotent (#1317). - Fix: community names shown after
cluster-only.query/explain/MCP now surface the human-readable community name instead of a blank/numeric id; backward-compatible with old graphs (#1305). - Fix:
graphify-mcpandgraphify.serveaccept--graph <path>as an alias for the positional arg, consistent with other subcommands (#1304). - Fix: AST extraction no longer crashes on Windows with >61 logical cores — the 61-worker
ProcessPoolExecutorcap now applies to all worker-count paths (#1298). - Fix: ghost-merge skips ambiguous
(basename, label)collisions so same-named symbols in same-named files across directories no longer mis-point edges (#1257). - Fix: startup no longer crashes on unreadable
.graphify_version(restricted installs / network mounts) — FS probes wrapped intry/except OSError(#1299). - Fix:
prs.pyclaude-cli backend resolvesclaude.cmdon Windows (WinError 2 on npm installs) (#1288).
Performance
- Perf:
save_manifestfile hashing parallelized with aThreadPoolExecutor(#1295). - Perf:
_walk_js_treeconverted from recursive generator to iterative walk (#1294).
CI / Docs
- CI: bandit + pip-audit
security-scanjob added as non-blocking advisory signal (continue-on-error) (#1209). - Docs: RFC for file-level node summaries (
docs/node-summaries-rfc.md) (#1166).