From 29fd98fd04c5748cb040930fe44edf3d6439678d Mon Sep 17 00:00:00 2001 From: safishamsi Date: Tue, 23 Jun 2026 13:21:38 +0100 Subject: [PATCH] Release 0.8.46 Query perf, a skill graph-health gate, and a batch of install/extraction fixes: - #1431 trigram query prefilter (faster, results unchanged) - #1437 Step 4.5 graph-health gate + semantic-cache anchored on the scan root - #1411 CUDA (.cu/.cuh) via the C++ extractor - #1402 cross-file type-annotation refs no longer duplicate nodes - #1403 hermes install -> %LOCALAPPDATA% on Windows - #1409 no punctuation-only Obsidian/Canvas filenames - #1413 opencode reminder backtick command-substitution fix - #1428 graphify extract --cargo handles missing Cargo.toml - #1429 prs.py F821 cleanup Co-Authored-By: Claude Opus 4.8 (1M context) --- .DS_Store | Bin 0 -> 10244 bytes CHANGELOG.md | 6 ++++++ docs/.DS_Store | Bin 0 -> 6148 bytes graphify/.DS_Store | Bin 0 -> 6148 bytes pyproject.toml | 2 +- tests/.DS_Store | Bin 0 -> 6148 bytes tools/.DS_Store | Bin 0 -> 6148 bytes worked/.DS_Store | Bin 0 -> 6148 bytes 8 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 .DS_Store create mode 100644 docs/.DS_Store create mode 100644 graphify/.DS_Store create mode 100644 tests/.DS_Store create mode 100644 tools/.DS_Store create mode 100644 worked/.DS_Store diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..7a11b0a4fcf61d4bf3d5eee992b40efffeec0e07 GIT binary patch literal 10244 zcmeHM&1(}u6n`6&Hl-Dd;0Fk05f6H(G=fs_5@XbZAl7>DBCToKG?==fO)D`6BX}qt z`~y6cf(I{xq8>a;QK=ub$ATvX^`sX)_<{5{AKko3cGCzV6=uThOXvOGyx;tGcD6Gi zA}2MSO%S<66h{@dy9<|qBK)E@l!$KWhjkE7g$Hz$#!BunJfOtO6TF z0lc$CiFYb%uT}x8fK|X(K&%fgs<26ItIEoy0~fgkfQ_PA7JTm(UtnErliF65g$Kn^ zp|C2{(OV2hg`?foxTLmKWmPyidh_Av%#PlnI5Io>cO{&hq_XyE6|f34Dj@dmQQA*A z%2UbMzgK>L;=Tzloz4`z4BFybW)pkPe0z4p^kBhX$q=L8N4DrcfygJ-;X!1 zUuum)`knA8yX`y!vEM}nfC7R*- z9;{Sem|o87$%Btq78NfR&-DvN@cf5Q%C}mKGEgf|1^$a5*%`=WZYWrF3s8 zCm-9N#v0>P|MkWEmC;!j_3uz$)<96>y^I!E_4UIw4(0(C(rR zqlzMMRb^!eE&?Lj<#9az5XbR*bz7gXqQIZjwyLZQN4pG%{YO6ru(Jfdr?LBgyZ;Z~ Q-Sb%zj4<}S|H1x$6+pGi`~Uy| literal 0 HcmV?d00001 diff --git a/CHANGELOG.md b/CHANGELOG.md index dc21703..da60cc1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,11 +4,17 @@ Full release notes with details on each version: [GitHub Releases](https://githu ## Unreleased +## 0.8.46 (2026-06-23) + - Perf: graph queries on large graphs are faster via a trigram candidate prefilter in the MCP/CLI query path. A trigram→node index (built once per graph and rebuilt on hot-reload) narrows the candidate set before the IDF-weighted scorer runs, cutting the previous O(N) scan. The prefilter is a strict superset of the exhaustive scorer (it indexes `norm_label`, `label_tokens`, `nid`, and `source_file`), so results and ranking are unchanged; short/CJK queries and low-selectivity terms fall back to the full scan (#1431; thanks @papinto). - Feat: the skill runbook adds a Step 4.5 graph-health gate that runs `diagnose_extraction` and surfaces dangling/self-loop/collapsed-edge warnings before labeling, and anchors the semantic cache on the scan root (`root='INPUT_PATH'`) so cache hits survive a non-cwd scan. Read-only — never aborts the build (#1437; thanks @bahcgscateringsa-design). - Fix: `graphify install --platform hermes` now installs to the right directory on Windows. Hermes scans `%LOCALAPPDATA%\hermes\skills`, but the installer always used the POSIX `~/.hermes/skills` (so on Windows the skill was never discovered). `_platform_skill_destination` gained a hermes branch that targets `%LOCALAPPDATA%\hermes\skills` on Windows and keeps `~/.hermes/skills` elsewhere (#1403). - Fix: cross-file type-annotation references no longer create phantom duplicate nodes. A class defined once but referenced via type annotations in N other files (`def f(x: Thing) -> Thing`) produced 1+N nodes — the extra ones with the referencing file's path baked into the id (`pkg_a_py_thing`). `ensure_named_node` minted a *sourced* stub for these cross-file refs, which `_disambiguate_colliding_node_ids` then collided into per-file ids and `_rewire_unique_stub_nodes` refused to collapse. The fallback now emits a *sourceless* stub (like the inheritance-base path), so the references resolve to the single canonical definition. Fixed uniformly across all six language extractors that share the helper (#1402). - Feat: CUDA (`.cu`/`.cuh`) source files are now extracted. CUDA is a C++ superset, so these files route through the existing C++ (`tree-sitter-cpp`) extractor — no new grammar dependency. `__global__`/`__device__` kernels, host functions, structs and `#include`s are captured, host call edges are inferred, and `<<>>` kernel-launch syntax parses without error. Detection and file-watching follow automatically since both derive their extension sets from the dispatch table / `CODE_EXTENSIONS` (#1411). +- Fix: `to_obsidian` / `to_canvas` no longer emit punctuation-only filenames (e.g. `@.md` from a `@/*` tsconfig `paths` key). Such a file is valid on disk but empty once a downstream tool re-slugs on word characters (it crashes `qmd update`), so an all-punctuation label now falls back to `unnamed` (#1409; thanks @Mylock51). +- Fix: the opencode plugin's search reminder no longer contains backticks. The hook prepends the reminder inside a double-quoted `echo`, where bash performed command substitution on the backticks — silently running `graphify query ""` on every search. The reminder is now plain text (#1413; thanks @WSHAPER). +- Fix: `graphify extract --cargo` exits with a clear error instead of a traceback when `Cargo.toml` is missing or unreadable (the introspection now also catches `OSError`) (#1428; thanks @DhruvTilva). +- Chore: resolve an `F821` (undefined `nx`) flagged in `prs.py` by importing `networkx` under `TYPE_CHECKING` for the quoted type annotation (#1429; thanks @DhruvTilva). ## 0.8.45 (2026-06-22) diff --git a/docs/.DS_Store b/docs/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..b7a8a999f7905632faa0857b88d97ae110593a5b GIT binary patch literal 6148 zcmeHKJ5Iwu5SqOFL4a_um5*rmQuK6G9DoCG0}jBOogs;3 z96^I3G$YNv_4w_2{5J9I5|JA$#wk&sh!QwsXCKWs#`oD9*3k&xba9R;RaDX=UDLF| zw!k(jz-!l|87;7KylSiUn-w?d@T#0tlJ?VmJ9ARz`KTyIU?gwv>Fe3Y%gHA8_!sQz zc0G${OiKqeN2ZtbfV>OfobK?e!&NQg-6PJtmAjsEI6wZ%c>{ly^-uVO;BqNGghxZ%a|f6y20=t% Owh@RjSYrzOsREybCt{ZX literal 0 HcmV?d00001 diff --git a/graphify/.DS_Store b/graphify/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..0020f419fd85f9a8931541fc76bdc67e69c51a3d GIT binary patch literal 6148 zcmeHKu}T9$5S@)dFUBIEg@whHVi&*Q63*5pb{2_A#E2I!5Jb`)Sc#3FWM?6Mfq!6a z7YpC)EXl3O1#CoQ24>&g?#$l1w{UYqM5cMuuM^dXD1bATDj1d+ud^>$$<1s5joqV1 zXVjwsol|=uS||RZ0(^E=oK~AgG{M=;&##?a)LXrDII^_&%csSW!!(Y&N!mq3uzj-k zHvM>RtcvdcAbK>&u{e0bwp0Pjgl;iTXbk2lU3*+?nWNd-!(aV>_C zbj*h?E^?R&N;(Hp+<2n>$pN{=Q8%`z?)KL{s1$+h8(+5x8f#V$<@|{m*ZL+!aHy_j>`mRDY&qu7_nT6cj4ABAMyn-a+nEX2Btp(Rt6nZ IfnQbN3&s_C-~a#s literal 0 HcmV?d00001 diff --git a/pyproject.toml b/pyproject.toml index 7db0ca1..8572550 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "graphifyy" -version = "0.8.45" +version = "0.8.46" description = "AI coding assistant skill (Claude Code, CodeBuddy, Codex, OpenCode, Kilo Code, Cursor, Gemini CLI, Aider, OpenClaw, Factory Droid, Trae, Hermes, Kiro, Pi, Devin CLI, Google Antigravity) - turn any folder of code, docs, papers, images, or videos into a queryable knowledge graph" readme = "README.md" license = { file = "LICENSE" } diff --git a/tests/.DS_Store b/tests/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..a5adcfce10ba9c4d3488c4777df4ab7e3d9b9479 GIT binary patch literal 6148 zcmeHKy-veG4EB`_fi9I05@TMWPe7=`6I8GukN z`E0d~(pF+YfNaV4U3~V%`7VlMB66MSuuaq=q7cg1*u=0zc%8K-4Yly1^Lq^Flm;}W z5v4V6GyFyd`0ScEt&|G7#o5izFP)sXyMsI{eAJ=Xvi_a;)u@<@4;;`Bn1T z>TzBs#(*(k4Ez-aP_tRWrl5_+fH7bU%oyPBLj+}v6-zA>Jy0AK*K7tFbr;Fw4; zRxAav0&x-wlu)NFhLdpEBlU|FOF;=Ir_G1cJ3H-AoWDEvkGwm%SkOjez!<19upyT% zuKx$C`~PZ?T^R$$z`tU^1xYvQ;E}Yp)*g;)Z3OK>S=g@>oP}WGOEG-86z@X4z#j1g V7%P^7ut4lbz|&xZG4P`dd;$L-T#^6) literal 0 HcmV?d00001 diff --git a/tools/.DS_Store b/tools/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..a188808df90d6ab2490a41a3ce0af69abdc73796 GIT binary patch literal 6148 zcmeHKK}y3=5S^)AMC+m}5k&Y`=nZ0tOIJNWw5_zo#uSR68_DSu#Cv!F58#_WL)(zH z;6_wt%KY~;f97ZMe#mr)i2D!Y9#NNw5~yJ75W^Ocba<$y%vzcS@as2qMIX3nx%5`@8{Azif#k?dp7iYj3 za0dPY1E|>|Nk`E~XTTY7238En_aQ(9Q^QIzemXG37690WISS^|OGr#GObshVtUy>p zff~xzVz7q89?UN_tQ0kz*qRTvJF|5t9Pf_(Lv$xj6@7FDoPjz62YT6+`hU5*|E~x6 zl{4TB{3`~yoei=+9?5EJ_H~L)UZ;71>%1M MA`Lz`13${Z7fg>=^Z)<= literal 0 HcmV?d00001 diff --git a/worked/.DS_Store b/worked/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..2484206f3bac81ee6caa8b158674df7fd7c264a6 GIT binary patch literal 6148 zcmeHKJx>Bb5S;~#M2*43!t#EA6m*)PISE!KHuwYhx&RS80+L{NzsEv+5sA{MSs=<0Q5KCcvxaVl@jADdrS!};P{@1q zsY^k(Rj4$=n75m73OEIpO#yy)S1F(|)u>0t``ha)swYozk6u_V*SldIE7|JD-s9=} z-O((sW&*E%o4*#5Y!PllE7Yb-{Q5Lj-x9r=dI{`RlgHWa{)C4S-wVGu%=WPIr#;TU zN#{^wfc!PEXwwztF$ypaX=pR@Z+`MOIo=*jIWEj$vQ8Rf)sd=l9UFL}9X#29ny8=w z_FU8GTMhJfy~x+(|J<7LpL=hUdlG+(x9~uPw!m|Uog|OG1NJSnJZh=Y1sabA)>9}R z-Y1JPYk7E`){-EfS=H|%t@?^pu5Vckdp28kU7_op0!{&^z*GVLK6q%1zQ#zQ{B)p` zM*v_3)6#IwX9SBMos~zz`s&JWXhFt2_@;hHC7z&wH{g(jg9>x ng)#)4-j3x3Z^b)k(y-?71<=