Commit Graph
284 Commits
Author SHA1 Message Date
smngvlkz 251722cf17 Add graph.json schema version metadata
(cherry picked from commit 4fbf544949)
2026-10-06 20:54:15 +01:00
Mr-Neutr0n 2ce4a20764 Fix #3690: benchmarks: code-intelligence result inaccessible; BENCHMARK
Signed-off-by: Mr-Neutr0n <64578610+Mr-Neutr0n@users.noreply.github.com>
(cherry picked from commit c7bbf6c834)
2026-10-05 20:12:26 +01:00
Huanyi Xie 3f712fe309 fix(build): honor disabled same-file semantic deduplication
Pass dedup=False into graph construction so repeated labels do not collapse distinct non-AST identities. Preserve existing AST and document-file twin reconciliation. Fixes #4019.

Assisted-by: OpenAI Codex (GPT-6)
(cherry picked from commit 1f3805f16e)
2026-10-05 20:11:30 +01:00
safishamsiandClaude Opus 4.8 35adf432b9 docs(readme): shrink the Translations section to a one-liner
The top-of-README language switcher already lists every language; keep
the bottom section as a short pointer to docs/translations/ and the
PR-to-contribute call, instead of duplicating the full table.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-04 22:28:19 +01:00
safishamsiandClaude Opus 4.8 61f610d550 docs(readme): add a Translations section
List all 32 README languages in a dedicated Translations section (a
#translations anchor), like other large OSS READMEs, with a pointer to
docs/translations/ for improving or adding one.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-04 22:19:38 +01:00
safishamsiandClaude Opus 4.8 0b60d47e6c docs(readme): add VS Code one-click and Smithery MCP install
Add a one-click "Install in VS Code" button (uvx --from graphifyy[mcp]
graphify-mcp, no API key) and a Smithery install command for the MCP
server, plus a Smithery badge linking to the server page as the
ownership backlink Smithery verifies.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-02 23:12:01 +01:00
Alex Tumanov 4315c604d7 feat(extract): include Verilog header files
Register .vh with the existing Verilog detection and extraction paths,
including incremental and watch coverage.

Refs #3749

AI-Assisted-By: OpenAI Codex
(cherry picked from commit 3b74b8ad3d)
2026-10-02 17:10:08 +01:00
berce 8ae9878465 feat(cli): refresh stale skills after a package upgrade (#1805)
After `uv tool upgrade graphifyy` or `pip install -U graphifyy`, the
installed skills stay on the old version. `graphify install` only fixes
the platform it detects, so codex, opencode, gemini and the others keep
running outdated instructions until someone reinstalls each one by hand.

The CLI now checks the version stamp of every user-scope skill on its
first run after an upgrade, `graphify update` included, and re-copies
the ones that are older than the package. This is on by default and can
be turned off with GRAPHIFY_NO_AUTO_REFRESH=1.

It is deliberately conservative about what it touches:

- only skills graphify installed itself (stamp and SKILL.md both present)
- never a skill newer than the package, so nothing gets downgraded (#1568)
- never a directory that two installers write to, such as copilot and
  `graphify vscode install`, or two platform dirs symlinked to the same
  place, because the stamp can't say which variant lives there
- a locally edited SKILL.md is kept as SKILL.md.bak (#3144)

Install, uninstall and the refresh take the same lock per skill
directory, so two processes never write through each other's fixed
.tmp staging names, and an uninstall can't race a refresh that would
put the skill back. It is an OS file lock (flock on POSIX,
msvcrt.locking on Windows). The OS releases it however the holder
exits, so a crash never leaves a directory locked and there is no
staleness timeout to tune. The lock file lives under
~/.cache/graphify/skill-locks/ rather than in the skill directory, so a
project install leaves nothing behind in the repository. Install and
uninstall wait for the lock; the refresh skips a directory another
process holds and reads the stamp again once it has the lock. Where the
file system can't lock, install and uninstall run unlocked as they did
before, and the refresh leaves the skill to the version warning.

Output goes to stderr, one line per refreshed directory, so --json and
the MCP stdio server are unaffected. A failed refresh never breaks the
command the user actually ran: the stamp stays old and the existing
version warning still points to the manual fix.

While here, the version warning now also checks the gemini skill, which
it used to miss because gemini is not in _PLATFORM_CONFIG, and the vscode
skill path moved into _vscode_skill_destination() so install, uninstall
and the refresh share it. The README lists the new variable and mentions
the refresh in the version-mismatch troubleshooting entry.

(cherry picked from commit 50ebe642af)
2026-09-29 14:37:10 +01:00
safishamsiandClaude Opus 4.8 9fd5aadfd8 docs(readme): add contributors image (contrib.rocks)
Add a Contributors section rendering the contributor avatars via
contrib.rocks, linking to the contributors graph.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-09-29 11:50:32 +01:00
safishamsiandClaude Opus 4.8 17b007ab74 feat(cli): show the logo banner + app.graphify.com on graphify --help; 14-day trial copy
- The bare 'graphify' / 'graphify --help' screen now prints the logo
  banner on top (TTY-gated, reusing _print_banner) and the
  app.graphify.com hosted-platform line at the bottom, matching the
  install banner.
- Update the hosted-platform offer copy to 'Try the graphify platform
  free for 14 days' across the CLI help, the install banner, and the
  README early-access banner (was 'open free before the public v1 launch').

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-09-28 10:08:37 +01:00
safishamsiandClaude Opus 4.8 df65669489 docs(readme): surface docs site + CI/license badges, dedupe contributing
- Add CI status, Apache-2.0 license, and Docs (docs.graphify.com) badges
  to the top row (health signals were absent).
- Link docs.graphify.com from 'Learn more' and repoint the issue-template
  Documentation contact to the docs site (was README, 0 prior mentions).
- Replace the inline Contributing <details> block (duplicated CONTRIBUTING.md
  and prone to drift) with a short pointer to CONTRIBUTING.md/ARCHITECTURE.md;
  the issue-template Contributing link already targets CONTRIBUTING.md.
  README drops from ~64.8 KB to ~62 KB.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-09-27 21:29:20 +01:00
safishamsiandClaude Opus 4.8 0115e43122 docs: align #3845 contributor guide with maintainer policy
Follow-up edits on #3845 to match the settled maintainer decisions:
- CODE_OF_CONDUCT.md: set the enforcement/reporting contact to
  safi@graphify.com (was an unspecified 'email the maintainer if known').
- README team-graph section: add the machine-local never-commit list
  (.graphify_root, .graphify_python, .graphify_analysis.json, the AST
  cache, needs_update) and the re-extract-to-update note. manifest.json
  stays committable since #3781 made its keys portable.
- Add RELEASING.md (maintainer-facing): version bump + changelog +
  uv.lock, test on 3.10/3.13, push v8, gh release create -> PyPI via
  trusted publishing (no twine/token), verify with uvx --refresh.
- CONTRIBUTING Further Reading: drop the paid Gumroad link, point at
  RELEASING.md instead.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-09-26 13:57:39 +01:00
nikhil2004 98d73fe3a8 docs: clarify repository orientation and team graph sync rules
(cherry picked from commit 9d2592ea50)
2026-09-26 13:55:08 +01:00
safishamsiandClaude Opus 4.8 8e09034743 docs: standardize the Discord invite to discord.gg/XDnKVpzdXB
Point the README and he-IL translation at the single current invite (the old 2DDrEgvZb4/598Ad9zQZ links are retired). All Discord references now resolve to one canonical invite.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-09-25 13:52:21 +01:00
Abdullah aa5b334e69 Update link for graphify Enterprise
(cherry picked from commit ac219fa9e4)
2026-09-20 18:00:48 +01:00
Abdullah d3d2538731 docs: align repository links and translated README logos
(cherry picked from commit 3acbedb69a)
2026-09-20 13:59:25 +01:00
safishamsiandClaude Opus 4.8 26b02b5e34 docs: update README header logo to the Graphify card
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-09-16 20:41:38 +01:00
vstepko 161e5f2ef5 feat(terraform): resolve local module sources and directory topology
(cherry picked from commit e00593d10e)
2026-09-15 18:01:35 +01:00
taazbro 200f3a15b5 fix: address Python 3.14 review findings
(cherry picked from commit c49db38935)
2026-09-12 21:35:25 +01:00
safishamsi adf814fd5e docs(readme): replace the header card with the graphify logo (png) 2026-09-10 15:39:24 +01:00
safishamsi b15cc167ee docs(readme): replace the header logo with the animated graphify card 2026-09-10 15:30:39 +01:00
safishamsi a17a4bb8ab chore(readme): update Discord invite link 2026-09-05 01:19:53 +01:00
nshiveg 832256f824 feat: Robot Framework extractor for .robot/.resource files (#3192)
Add a Robot Framework extractor using the official robot.api parser (pure-Python, optional
[robot] extra), emitting suite/test/keyword nodes plus keyword-call, resource-import, and
library edges. Keyword resolution is case/space/underscore-insensitive (RF's real semantics)
and handles BDD prefixes and ${CURDIR}/${EXECDIR} path resolution; degrades to an actionable
error when robotframework is absent.
2026-08-30 15:14:33 +01:00
safishamsi a6e2a6827d docs(readme): tighten the git-workflow rebuild claims (#3112)
Two accuracy corrections to the Recommended workflow table: the post-checkout hook rebuilds
only on branch switches (not a file-only git checkout -- <path>), and the commit/switch
rebuilds run detached in the background so the graph can briefly lag the commit.
2026-08-27 18:32:51 +01:00
Mohammad-Palla df2f99b33e docs(readme): add explicit git-workflow guidance for keeping the graph in sync
Add a Recommended workflow section documenting that commits and branch switches rebuild the
graph automatically via the installed hooks, while a git pull/merge needs a manual
graphify update . (no pull hook exists), with a pull-alias shortcut and a troubleshooting
entry for a stale graph.
2026-08-27 18:03:28 +01:00
rajarshidattapy eccc6cf0bf feat(extract): add --no-dedup so incremental merges can skip fuzzy dedup (#2881)
Adds --no-dedup (default off, so dedup stays on) to skip the fuzzy near-duplicate merge
pass on build and incremental merge, for operators who would rather keep distinct symbols
that fuzzy-matched than pay the merge. Exact-id uniqueness is unaffected (it is a graph
structural invariant, not a dedup responsibility), and the flag arms the #479 shrink
guard so a surprising node drop is refused loudly. Mutually exclusive with --dedup-llm.
2026-08-20 16:10:49 +01:00
rajarshidattapy 69e2c0deae fix(llm): retry hollow responses instead of bisecting them (#2880)
A response that parses but carries no symbols (a "hollow" reply) was routed into the
truncation-bisection path, which just re-split a chunk the model had already answered
emptily, wasting calls. Give hollow its own finish_reason and route it through a bounded
same-chunk retry with backoff instead; on persistent hollow, give up loudly and mark the
files partial. GRAPHIFY_MAX_RETRY_DEPTH=0 now disables the hollow retry too, so a chunk
costs exactly one call. The #2866 timeout and the truncation paths still bisect.
2026-08-20 15:45:18 +01:00
fadeandClaude Opus 4.8 038ada6f0f feat(commonlisp): add Common Lisp .lisp/.cl/.lsp/.asd extractor (optional tree-sitter-commonlisp extra)
tree-sitter-commonlisp-backed extractor for packages, classes, functions,
methods, generics, macros, variable definers, and same-file calls. Handles the
grammar's dedicated defun node (defun/defmacro/defmethod/defgeneric via
defun_header) and the generic list_lit + leading-symbol forms (defvar/defclass/
defpackage), recurses into wrapper macros (eval-when/progn) and reader
conditionals, and maps CL operator chars (= < > ? ! + *) to readable id
suffixes. Wired into detect/extract dispatch, the extractor registry, a
[commonlisp] optional extra, and the README; ships a fixture and a 23-test suite
behind an importorskip guard.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-08-17 16:05:33 +01:00
safishamsiandClaude Opus 4.8 774b12fe9e docs(readme): add YouTube channel badge to the social links
Adds a YouTube badge linking to https://www.youtube.com/@graphifylabs in both
the header badge row and the footer social block, alongside Discord/LinkedIn/X.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-08-15 16:39:46 +01:00
safishamsiandClaude Opus 4.8 0302bfa7af feat(ocaml): add OCaml .ml/.mli extractor (optional tree-sitter-ocaml extra)
New graphify/extractors/ocaml.py handles both the implementation grammar
(language_ocaml, .ml) and the interface grammar (language_ocaml_interface,
.mli). Emits nodes for modules, top-level/module-level values and functions,
types and their variant constructors; edges for defines/contains, open ->
imports_from, and application -> calls. Qualified paths (Geo.area) resolve to
the final value name, not the module qualifier; local let ... in bindings do
not mint nodes or steal call attribution. Cross-file open/call targets are
sourceless stubs so the corpus rewire collapses them onto the unique real
definition (no #1402 sourced-stub leak).

Wired into detect.py (CODE_EXTENSIONS), extract.py (dispatch +
_EXTRA_FOR_EXTENSION), pyproject.toml ([ocaml] extra + all + dev dep), and
README. Adds tests/test_ocaml.py (behind importorskip).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-08-14 14:17:07 +01:00
Redzwan Mutalib 28aaf20197 docs: document Windows test prerequisites in the README 2026-08-12 20:56:28 +01:00
Redzwan Mutalib 6b40338d96 docs: document CI parity checks in the README 2026-08-12 20:56:28 +01:00
safishamsiandClaude Opus 4.8 3b243d644e docs(readme): early-access CTA at the top + refresh the waitlist line to app.graphify.com
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-08-01 01:52:47 +01:00
Kartik Gupta b4865ffcbf fix(serve): bound multi-project graph contexts (#2268) 2026-07-29 17:02:00 +01:00
Zhi Yan Liu a428378ad3 fix(llm): honor GRAPHIFY_API_TIMEOUT in the bedrock backend
The two bedrock-runtime clients (primary extraction in _call_bedrock and
the secondary dispatch path in _call_llm) were built with no botocore
config, so Converse used botocore's 60s default read timeout and ignored
GRAPHIFY_API_TIMEOUT / --api-timeout entirely. A long opus-class
generation then died with "Read timeout on endpoint URL" no matter how
high the timeout was set.

Both client constructions now pass a botocore.config.Config wiring
read_timeout to _resolve_api_timeout() (default 600s), a 10s
connect_timeout, and retries from _resolve_max_retries() in adaptive
mode. This mirrors the fixes that closed the same gap for the claude-cli
subprocess (#1112/#1111) and the secondary LLM dispatch path (#1442) --
bedrock was the last cloud backend still ignoring the knob.

Also updates the README env-var row, which listed the timeout as
applying to HTTP/claude-cli/Anthropic only, and the _fake_boto3 test
fixture to register botocore.config and capture the client config so the
new coverage can assert the timeout is wired.
2026-07-29 17:01:49 +01:00
safishamsiandClaude Opus 4.8 62b1d4370b docs(readme): link the YC badge to the company page
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-27 00:19:11 +01:00
Souptik Chakraborty 911d58178f fix: document the Codex PreToolUse hook as an intentional no-op (#2165)
`graphify codex install` registers `graphify hook-check` in .codex/hooks.json,
and #2165 reported that as a stale/unrecognized subcommand producing a silent
no-op. `hook-check` is in fact a real, deliberate no-op command: Codex Desktop
rejects hookSpecificOutput.additionalContext on PreToolUse, so the Codex hook
intentionally does nothing and AGENTS.md carries the always-on guidance
(cli.py dispatches `hook-check`; __main__.py lists it in _silent_cmds).
Repointing the installer at `hook-guard` would reintroduce the #522-class
breakage on Codex Desktop, so the behavior is left as is.

What actually misled the report was the documentation and the installer's own
output, which both describe the Codex hook as if it enforced graph usage:

- README: the Codex row claimed a PreToolUse hook that "fires before every Bash
  tool call, same always-on mechanism as Claude Code". It now states that the
  hook is a deliberate no-op, why (Codex Desktop rejects additionalContext), and
  that AGENTS.md is the always-on mechanism on this platform.
- `_install_codex_hook` printed "PreToolUse hook registered (... hook-check)"
  with no hint that the entry is inert. It now says so inline.

Also adds the regression guard the issue implicitly asks for: a test that reads
the command out of the generated .codex/hooks.json and asserts its subcommand is
one the CLI actually dispatches. A genuinely renamed/stale hook command now
fails the suite instead of shipping a permanently dead hook.

Note: contrary to the report, an unrecognized subcommand already exits non-zero
(`graphify totally-bogus-subcommand` -> "error: unknown command", exit 1), so no
change was needed there.
2026-07-26 11:10:35 +01:00
safishamsiandClaude Opus 4.8 363f036e5e docs(readme): drop the broken star-history chart
The inline api.star-history.com SVG rate-limits on a repo this large and
serves a 503 instead of a chart, so the image was permanently broken.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-22 22:30:22 +01:00
safishamsi a59abaf99d docs: --code-only is an extract flag, not a skill flag (follow-up to #2075) 2026-07-21 21:34:47 +01:00
HerenderKumar bb8f5bd675 docs(cli): surface --code-only in the extract usage and README (#2071)
The top-level `graphify --help` has listed --code-only since #1734, but the
`graphify extract` usage string and the README never mentioned it. A user
evaluating graphify on a "can this run with no network call" constraint sees
the extract usage / README first and can conclude the flag doesn't exist.

Add --code-only to the extract usage line, name it in the Privacy section and
the command reference, and add a test asserting the usage advertises it.
2026-07-21 21:33:12 +01:00
HerenderKumar abb85ccb03 docs(readme): troubleshoot an older graphifyy shadowing uv run (#1540)
`uv run --with graphifyy python -m graphify` runs the system interpreter, so an
older `graphifyy` in system site-packages loads before the uv-managed one — with
no error. Env overrides like OPENAI_BASE_URL are then ignored and requests 401
against the default endpoint. The existing `skill is from graphify X, package is
Y` warning is the real fingerprint, but users dismiss it as a stale skill.

Add a troubleshooting entry next to the uvx-resolution one: name the symptom,
show how to confirm which module actually loaded, and point at
`uvx --from graphifyy` / uninstalling the stale copy.
2026-07-21 21:32:43 +01:00
safishamsi abff1b1ca4 docs(readme): surface the graphify.com waitlist above the fold
GitHub is the top organic source of waitlist signups, but the only path to the
site was the logo and a CTA at the very bottom of the README. Add a short,
plain-voice waitlist line right after the value proposition, and change the
Enterprise-section CTA from "Learn more" to an explicit "Join the waitlist".
2026-07-20 17:08:15 +01:00
safishamsiandClaude Opus 4.8 9bf14a4931 docs: rebrand the built-on-graphify section to graphify Enterprise + add graphify.com website badge
Rename the "Penpax" section to "graphify Enterprise" (linking graphify.com) and
add a Website badge to the Community and links footer.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-18 14:59:12 +01:00
safishamsiandClaude Opus 4.8 fb992ce15e docs: cut 0.9.19, document install --strict, fix #1814 credit
Stamp the 0.9.19 release date, add a README note for the strict PreToolUse hook
(graphify install --project --strict), and credit both the #1814 reporter
(@Greg-Moskalenko) and the fix author (@alphanury).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-18 12:54:59 +01:00
mzt006 f17e2c5638 fix: add --no-gitignore extraction opt-out 2026-07-18 12:05:00 +01:00
safishamsiandClaude Opus 4.8 8cee776cee docs: cut 0.9.18 changelog and document the incomplete-build refusal (--allow-partial)
Stamp the 0.9.18 release date and add a README troubleshooting entry for the
new #1951 behavior: an incomplete extraction refuses to overwrite a larger
existing graph, with --allow-partial as the escape hatch.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-17 14:56:22 +01:00
safishamsiandClaude Opus 4.8 75b7279d92 docs(readme): point star-history at Graphify-Labs org; X handle to @graphify
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-15 00:00:56 +01:00
adam-pond-agentandClaude Opus 4.8 da71f8264f fix(querylog): make the query log opt-in, off by default (#1797)
querylog wrote every query/path/explain question + corpus path (and full
responses under GRAPHIFY_QUERY_LOG_RESPONSES) to a default-on, unbounded,
fail-silent plaintext file at ~/.cache/graphify-queries.log — outside any repo's
.gitignore/retention, and undocumented. A default-on plaintext record of
proprietary queries contradicts graphify's on-device / no-telemetry posture.

Flip to opt-in: _log_path() returns None unless GRAPHIFY_QUERY_LOG_ENABLE=1
(default path) or GRAPHIFY_QUERY_LOG=<path> is set; GRAPHIFY_QUERY_LOG_DISABLE=1
still forces it off (back-compat, wins). Document all four env vars in the
README (the old entries implied default-on). Regression tests cover
default-off, both enable paths, disable-wins, and that log_query writes nothing
without opt-in.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-12 10:36:00 +01:00
safishamsiandClaude Opus 4.8 0efb2a443c docs: point all website links at graphify.com
Switch every website URL from graphifylabs.ai to graphify.com — the hero logo,
the Penpax section, and the waitlist link — across the main README and the
translated READMEs. The contact email stays on graphifylabs.ai (mail is hosted
there); no mailto links were changed. graphify.com is the official graphify
product site; graphifylabs.ai remains the company site (org profile + email).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-11 18:07:57 +01:00
safishamsiandClaude Opus 4.8 4c075f90ab docs(readme): unlink YC S26 badge until the public company page is live
The badge's href pointed at www.ycombinator.com/companies/graphify, which 404s
— the public S26 company page isn't published yet. Show the badge without a
link rather than ship a dead click; re-add the href once YC publishes the page.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-10 11:52:56 +01:00