v0.2.0
Added
- Dependency docs are fetched when not installed locally. Every registry
publishes the same artifact cgraph reads off disk, so it is downloaded and run
through the same parsers: npm.tgz(falling back to@types/<pkg>, since a
large share of npm ships no types of its own), NuGet.nupkg, Maven
-sources.jar, PyPI wheels. No scraping and no third-party service — the
result is version-exact because it is the published artifact. - Maven dependency docs, local and remote, now that a zip reader exists.
cgraph docs --refresh --guidesfetchesllms.txt
where a project publishes one. Package archives carry API reference because
that is what is in the source; they cannot carry setup guides, which were
never in the source. This is the only prose source, and coverage is partial.- tar.gz and zip readers built on
node:zlib, with no new dependencies. - C# language pack. Types, members, properties, namespaces, XML doc
summaries and access modifiers, withusingresolved to the file declaring
that namespace. LINQ and BCL calls are classified as runtime built-ins rather
than swamping the unresolved list. - Project technology discovery. Manifests (
*.csproj,package.json,
pom.xml,pyproject.toml,go.mod,Cargo.toml, …) are read before any
parsing, so only the packs a project actually needs are loaded and only their
grammars are fetched. Frameworks — Angular, React, ASP.NET, Entity Framework,
Spring, Django, FastAPI — are detected from every manifest in the tree, not
just the root. A file in an unpredicted language still loads its pack on
sight: discovery decides what loads eagerly, never what gets ignored. - .NET dependency documentation. NuGet ships compiled assemblies, so there
is no source to parse — but packages carry an XML documentation file beside
the DLL with every public member and its summary.docsnow reads it,
preferring the newest target framework present. - Local embedding models.
provider: "local"targets any OpenAI-compatible
endpoint (Ollama, LM Studio, llama.cpp, vLLM) withbaseUrl,modeland
optionaldimensions. Nothing leaves the machine and nothing costs money. The
returned vector width is verified againstdimensionson the first batch,
because a silent mismatch corrupts every similarity score in a way that is
close to untraceable. - The index refreshes itself. The MCP server checks for changes before
answering, so an agent never reads a graph that disagrees with the working
tree — after an editor save, a git checkout, a rebase, or another agent's
edit. No watcher, no hook, nothing to remember. Throttled (3s) so a burst of
tool calls costs one scan, and disabled with
autoRefresh.enabled: false. cgraph hooks install— pre-warms the index after checkout, merge and
rebase, the operations that change hundreds of files at once. Appends between
markers and never replaces an existing hook; backgrounded so it cannot delay
a git command.post-commitis excluded by default because committing does
not change the working tree.cgraph init --agentfor Claude Code, GitHub Copilot, opencode, Cursor and
Windsurf, writing both the MCP registration and an instruction block telling
the agent to use these tools instead of grep.
Changed
- No token-savings multiplier is published any more. The previous figures
compared cgraph against an invented grep-then-read baseline: an agent opens
every file grep matched, capped at ten, and reads each whole. No agent was
ever run. Change the cap, assume line windows instead of whole files, or
assume two probes instead of one, and the ratio moves by an order of
magnitude — the assumption determined the number, not the measurement.
Responses now report their own size, and where a concrete comparable exists
(the file an outline describes) both numbers are shown as facts with no
arithmetic between them.bench/remains as a regression guard on response
sizes, comparable only to itself. - Freshness checks no longer read the repository. A file whose size and
mtime match the index is skipped without being opened; only files that fail
that check are read and hashed. On llama.cpp a no-op pass drops from ~520ms
to ~170ms, which is what makes automatic refresh affordable. The content hash
still decides, so a file touched but not edited is read once and correctly not
re-parsed.
Breaking
SavingsLedgeris renamedUsageLedgerin the programmatic API, and records
tokens_returned/tokens_sourceinstead oftokens_baseline/
tokens_saved. The old name asserted a saving the tool cannot observe. Only
affects code importing it fromcgraph; the CLI and MCP surfaces are
unchanged.cgraph statsno longer prints a reduction factor, andcgraph doctorno
longer prints "tokens saved". Anything parsing that output needs updating.
Install
npm install -g cgraphPublished to npm as cgraph@0.2.0 with build provenance.