Skip to content

v0.2.0

Choose a tag to compare

@github-actions github-actions released this 25 Jul 19:16
· 24 commits to main since this release

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 --guides fetches llms.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, with using resolved 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. docs now reads it,
    preferring the newest target framework present.
  • Local embedding models. provider: "local" targets any OpenAI-compatible
    endpoint (Ollama, LM Studio, llama.cpp, vLLM) with baseUrl, model and
    optional dimensions. Nothing leaves the machine and nothing costs money. The
    returned vector width is verified against dimensions on 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-commit is excluded by default because committing does
    not change the working tree.
  • cgraph init --agent for 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

  • SavingsLedger is renamed UsageLedger in the programmatic API, and records
    tokens_returned / tokens_source instead of tokens_baseline /
    tokens_saved. The old name asserted a saving the tool cannot observe. Only
    affects code importing it from cgraph; the CLI and MCP surfaces are
    unchanged.
  • cgraph stats no longer prints a reduction factor, and cgraph doctor no
    longer prints "tokens saved". Anything parsing that output needs updating.

Install

npm install -g cgraph

Published to npm as cgraph@0.2.0 with build provenance.