diffctx 1.18.3 → 1.18.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/README.md +42 -279
  2. package/checksums.json +6 -6
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -1,312 +1,75 @@
1
- # diffctx — smart diff context for LLM code review
1
+ # diffctx — what a git change reaches, and the code to review it
2
2
 
3
3
  [![CI](https://github.com/nikolay-e/diffctx/actions/workflows/ci.yml/badge.svg)](https://github.com/nikolay-e/diffctx/actions/workflows/ci.yml)
4
4
  [![PyPI](https://img.shields.io/pypi/v/diffctx)](https://pypi.org/project/diffctx/)
5
5
  [![crates.io](https://img.shields.io/crates/v/diffctx)](https://crates.io/crates/diffctx)
6
6
  [![npm](https://img.shields.io/npm/v/diffctx)](https://www.npmjs.com/package/diffctx)
7
- [![License](https://img.shields.io/pypi/l/diffctx)](https://pypi.org/project/diffctx/)
7
+ [![MCP Registry](https://img.shields.io/badge/MCP_Registry-io.github.nikolay--e%2Fdiffctx-blue)](https://registry.modelcontextprotocol.io/v0/servers?search=io.github.nikolay-e/diffctx)
8
8
 
9
- **diffctx selects the minimum code an LLM needs to review a git diff.**
10
- Instead of pasting whole files, it walks the dependency graph outward from the
11
- changed lines and stops once more context stops paying for itself.
9
+ **diffctx tells an agent or a reviewer what a change reaches outside its
10
+ diff** — the callers, the tests that reach them, the contracts it crosses —
11
+ **and selects the code needed to understand it** under a token budget. Local,
12
+ deterministic, no index, no model calls. Caller resolution is static and per
13
+ language; where it cannot resolve, the answer says so instead of printing a
14
+ zero.
12
15
 
13
16
  > Formerly published as `treemapper` — every command, flag, and API call works unchanged.
14
17
 
15
- ## How it compares
16
-
17
- Whole-repo packers (repomix and friends) seed on the repository and export
18
- everything; persistent code-graph servers answer structural queries against a
19
- maintained index. diffctx is **diff-seeded**: the input is a change, the
20
- output is the fragments needed to understand it, packed under a hard token
21
- budget — local, deterministic, no index, no model calls. Measured results and
22
- when the other two families fit better: [COMPARISON.md](COMPARISON.md).
23
-
24
18
  ## Install
25
19
 
26
20
  ```bash
27
- uvx diffctx . --diff HEAD~1 # zero-install, run once via uv
28
- pipx install diffctx # recommended: isolated CLI, no venv needed
29
- pip install diffctx # or: into an active environment
30
- pipx install 'diffctx[mcp]' # + MCP server for AI assistants
31
- ```
32
-
33
- Without Python:
34
-
35
- ```bash
36
- cargo install diffctx # native CLI from crates.io
37
- npx diffctx . --diff HEAD~1 # npm wrapper over the native binary
38
- docker run --rm -v "$PWD:/repo" ghcr.io/nikolay-e/diffctx . --diff HEAD~1
39
- ```
21
+ # Claude Code: the MCP server, /diffctx:impact, and hooks that run it before commit and push
22
+ claude plugin marketplace add nikolay-e/diffctx
23
+ claude plugin install diffctx@diffctx
40
24
 
41
- On Windows, via Scoop (this repository is the bucket):
25
+ # any MCP client
26
+ claude mcp add diffctx -- uvx --from 'diffctx[mcp]' diffctx-mcp
42
27
 
43
- ```powershell
44
- scoop bucket add diffctx https://github.com/nikolay-e/diffctx
45
- scoop install diffctx/diffctx
28
+ # CLI, zero-install
29
+ uvx diffctx . --diff HEAD~1
46
30
  ```
47
31
 
48
- Every [release](https://github.com/nikolay-e/diffctx/releases/latest) carries
49
- prebuilt binaries; the current target set is Linux (x86_64/aarch64), macOS
50
- (arm64/x86_64) and Windows (x64/arm64), and a release older than a target's
51
- first build lacks it (v1.16.0 predates the macOS x86_64 and Windows arm64
52
- archives). On Windows on ARM, `diffctx[mcp]` builds `cryptography` from source,
53
- which needs OpenSSL: that project publishes no wheel for the platform.
54
- Free-threaded CPython (`3.14t`) cannot load the `abi3` wheel, so each release
55
- after 1.16.0 also ships a `cp314t` wheel per platform (the extension runs with
56
- the GIL off); on 1.16.0 itself `pip` and `uv` fall back to compiling the sdist.
57
- The native binary and Docker image cover diff mode with YAML/JSON output and
58
- write to stdout (redirect to capture); tree mode, Markdown output, the `graph`
59
- subcommand and the MCP server live in the Python package.
60
-
61
- ## Quick start
62
-
63
- ```bash
64
- diffctx . --diff HEAD~1 # smart context for last commit → paste into Claude/ChatGPT
65
- diffctx . -f md -c # full codebase export → clipboard in Markdown
66
- ```
67
-
68
- ![diffctx demo](https://raw.githubusercontent.com/nikolay-e/diffctx/main/docs/demo/demo.gif)
69
-
70
- *`diffctx . --diff HEAD~1` selects only the fragments an LLM needs to review the
71
- last commit, instead of dumping every changed file in full.*
72
-
73
- ## Diff context mode
74
-
75
- Finds the minimal set of fragments needed to understand a change — imports,
76
- callers, type definitions, config dependencies — across 50+ file types. It
77
- builds a code graph (imports, co-changes, type refs), propagates relevance
78
- outward from the changed lines, and stops when relevance drops below `--tau` or
79
- the `--budget` token cap is hit.
80
-
81
- `--diff` takes a git range (`HEAD~1..HEAD`, `main..feature`) or a **duration
82
- window ending now** — `24h`, `8d`, `90min`, `1h30m`, `2w` (units `s`, `m`/`min`,
83
- `h`, `d`, `w`, composable). A window diffs the working tree against the last
84
- commit before it, so it covers the commits made inside the window *plus* the
85
- uncommitted and untracked work on top — `diffctx . --diff 24h` is "everything I
86
- touched today". A ref that happens to look like a duration (a branch `24h`)
87
- keeps its git meaning.
88
-
89
- | Flag | Default | Description |
90
- |-------------|---------|--------------------------------------------------------------------------|
91
- | `--scoring` | `ego` | `ego` = bounded expansion around changed nodes (fast, predictable radius); `ppr` = Personalized PageRank (global, smoother decay, slower); `bm25` = lexical retrieval against the diff hunks (baseline for sparse graphs); `rrf` = reciprocal-rank fusion of `ego` and `bm25` (widest recall, no scale calibration between the two signals); `pit` = the same fusion on score percentiles |
92
- | `--budget` | auto | Cap in o200k_base tokens on the whole rendered artifact (see [Token counting](docs/product/token-budget.md)): every changed file gets one witness first, relevance fills the rest, and the renderer drops context from the tail until the document fits. A budget smaller than the summary yields the summary alone. `N` = fixed cap, `-1` disables it, `0` is a strict-zero floor (no fragments; use `--full` for changed files only) |
93
- | `--alpha` | 0.60 | PPR continuation probability: higher = relevance travels further from the change, lower = tighter around it (`--scoring ppr` only) |
94
- | `--tau` | 0.05 | Relevance threshold for full fragment content; lower-scoring fragments are stubbed or dropped (lower = more context) |
95
- | `--full` | false | Only the changed files, every fragment, no related-code context |
96
- | `--timeout` | 300 | Wall-clock deadline in seconds; on expiry the run stops cooperatively and emits a partial artifact whose `coverage` block names the limit (exit 0). 124 is the watchdog behind it, 30 s later, for a phase that could not stop |
97
- | `--with-raw-diff` | false | Also embed git's raw unified diff ahead of the selected fragments — additive (selection unchanged), not charged to `--budget`, lock/ignored/secret-like sections omitted. Python CLI only |
98
- | `--mode` | `pack` | `locate` emits the same ranked selection as compact `diffctx.locate.v1` JSON — path, lines, score, provenance reasons, a blast-radius `summary` and per-item impact `group` (`test`/`type`/`config`), NO source bodies. Adds a `coverage` block naming what the run could not see (`unparsed_files`, `zero_edge_files`, `ppr_truncated`, `next_up`, a heuristic `confidence`) and an `overflow` ranking of what the budget left behind — omitted entirely when there is nothing to disclose. `impact` answers, under 2k tokens, what the change reaches outside its diff: callers in files the diff does not touch, whether a test guards each, cross-commit overlap, and the public API and schema changes (text by default, `diffctx.impact.v1` JSON with `-f json`). The MCP tool takes both as `mode` |
99
-
100
- Every JSON/YAML artifact opens with `schema: diffctx.context.v1` and validates
101
- against [`schemas/diffctx.context.v1.json`](schemas/diffctx.context.v1.json),
102
- generated from the engine's own type; it closes with a `provenance` block
103
- (engine version, input object ids, the effective configuration and its hash,
104
- the selection parameters, the tokenizer) and, when a limit stopped the run
105
- short, a `coverage` block naming it.
106
-
107
- ### `graph` subcommand
108
-
109
- Explore the underlying dependency graph directly, without a diff:
110
-
111
- ```bash
112
- diffctx graph . # Mermaid graph of directory deps (default)
113
- diffctx graph . --summary # cycles, hotspots, coupling metrics
114
- diffctx graph . --level fragment -f json # fragment-level graph as JSON
115
- diffctx graph . --level file -f graphml -o g.xml # file-level graph as GraphML
116
- ```
32
+ pipx, pip, cargo, npm, Docker, Scoop, other MCP clients and the Python API:
33
+ [integrations](docs/product/integrations.md).
117
34
 
118
35
  ## Usage
119
36
 
120
- <!-- BEGIN USAGE -->
121
37
  ```bash
122
- # full codebase export:
123
- diffctx . # Markdown to stdout + token count
124
- diffctx . -f md -c # Markdown → clipboard
125
- diffctx . -f json -o tree.json # JSON → file
126
- diffctx . --no-content # structure only, no file contents
127
- diffctx . --max-depth 3 # limit depth
128
- diffctx . -i custom.ignore # custom ignore patterns
129
-
130
- # diff context mode (requires git repo):
131
- diffctx . --diff # uncommitted changes (working tree vs HEAD)
132
- diffctx . --diff HEAD~1 # context for last commit
133
- diffctx . --diff main..feature # context for feature branch
134
- diffctx . --diff 24h # everything changed in the last 24 hours
135
- diffctx . --diff 8d # same over 8 days (also 90s, 10min, 1h30m, 2w)
136
- diffctx . --diff HEAD~1 --budget 30000 # limit to ~30k tokens
137
- diffctx . --diff HEAD~1 -c # diff context to clipboard
138
- diffctx . --diff HEAD~1 --with-raw-diff # raw patch + selected context
139
- diffctx . --diff HEAD~1 --mode locate # ranked navigation JSON, no source
38
+ diffctx . --diff --mode impact # uncommitted work: callers outside the diff, their tests, contracts
39
+ diffctx . --symbol parse_config # the same for a name, no change needed
40
+ diffctx . --diff main...feature # the code to review a branch, packed under the auto budget
41
+ diffctx . --diff HEAD~1 --budget 12000 # the last commit, capped at 12k o200k tokens
42
+ diffctx . --diff 24h --mode locate # today's work as ranked JSON, no source bodies
43
+ diffctx . # whole-tree export, Markdown
140
44
  ```
141
- <!-- END USAGE -->
142
-
143
- Every run reports token count and size on stderr — `12,847 tokens
144
- (o200k_base), 52.3 KB`. Counts are exact only for the GPT-4o family; Claude,
145
- Gemini and others tokenize differently, so treat `--budget` as an upper bound
146
- and leave headroom ([details](docs/product/token-budget.md)). Unreadable files
147
- become placeholders like `<binary file: N bytes>`.
148
45
 
149
- ## Python API
46
+ `--diff` takes a git range, `staged`, or a duration window ending now (`24h`,
47
+ `90min`, `2w`). Every flag, default and exit code:
48
+ [command-line reference](docs/product/cli.md).
150
49
 
151
- ```python
152
- from pathlib import Path
153
- from diffctx import build_diff_context, map_directory, to_json, to_markdown, to_text, to_yaml
154
-
155
- ctx = build_diff_context(
156
- Path("."),
157
- "HEAD~1..HEAD",
158
- budget_tokens=None, # None = auto; 0 = no fragments; -1 = uncapped; N = cap on the whole artifact
159
- alpha=0.6,
160
- tau=0.05,
161
- full=False,
162
- scoring_mode="ego",
163
- timeout=300,
164
- with_raw_diff=False, # True also embeds the raw unified diff (not charged to budget)
165
- )
166
- print(to_markdown(ctx))
167
-
168
- tree = map_directory(
169
- ".",
170
- max_depth=None,
171
- no_content=False,
172
- max_file_bytes=None,
173
- ignore_file=None,
174
- no_default_ignores=False,
175
- whitelist_file=None,
176
- )
177
- print(to_yaml(tree))
178
- ```
179
-
180
- ## MCP server
181
-
182
- [![MCP Registry](https://img.shields.io/badge/MCP_Registry-io.github.nikolay--e%2Fdiffctx-blue)](https://registry.modelcontextprotocol.io/v0/servers?search=io.github.nikolay-e/diffctx)
183
- [![diffctx MCP server](https://glama.ai/mcp/servers/nikolay-e/diffctx/badges/score.svg)](https://glama.ai/mcp/servers/nikolay-e/diffctx)
184
-
185
- diffctx includes an [MCP](https://modelcontextprotocol.io) server that lets AI
186
- assistants (Claude Code, Cursor, Windsurf, etc.) call diff context analysis
187
- automatically during code review. It is published in the official MCP registry
188
- as `io.github.nikolay-e/diffctx`. One-line setup (zero-install via
189
- [uv](https://docs.astral.sh/uv/)):
190
-
191
- ```bash
192
- # Claude Code plugin: the server plus /diffctx:diffctx and /diffctx:impact
193
- claude plugin marketplace add nikolay-e/diffctx
194
- claude plugin install diffctx@diffctx
195
- # Claude Code, server only
196
- claude mcp add diffctx -- uvx --from 'diffctx[mcp]' diffctx-mcp
197
- # Codex CLI
198
- codex mcp add diffctx -- uvx --from 'diffctx[mcp]' diffctx-mcp
199
- # Gemini CLI
200
- gemini mcp add diffctx uvx -- --from 'diffctx[mcp]' diffctx-mcp
201
- # VS Code
202
- code --add-mcp '{"name":"diffctx","command":"uvx","args":["--from","diffctx[mcp]","diffctx-mcp"]}'
203
- ```
204
-
205
- With `pip install 'diffctx[mcp]'` already done, replace the
206
- `uvx --from 'diffctx[mcp]' diffctx-mcp` tail with plain `diffctx-mcp`.
207
-
208
- The server exposes one tool, `diffctx_context`, that assistants call when
209
- reviewing PRs, explaining changes, or investigating broken tests. By default it
210
- answers what a change reaches outside its diff — callers, the tests that reach
211
- them, changed contracts — in under 2k tokens; `symbol` asks the same of a name
212
- with no change at all. `mode=locate` ranks the code that explains a diff and
213
- `fragment_ids` then reads only the fragments the assistant picked — two calls
214
- that pay for the selection instead of a whole pack. The wider
215
- `get_tree_map` and `get_file_context` tools are opt-in via
216
- `DIFFCTX_MCP_LEGACY_TOOLS=1`. Filesystem confinement via
217
- `DIFFCTX_ALLOWED_PATHS`: see [SECURITY.md](SECURITY.md).
218
-
219
- Every stdio client takes the same server shape; only the config file differs:
220
-
221
- | Client | Config file | Key |
222
- |---|---|---|
223
- | Claude Code (project) | `.mcp.json` | `mcpServers` |
224
- | Claude Desktop | `claude_desktop_config.json` | `mcpServers` |
225
- | Cursor | `~/.cursor/mcp.json` | `mcpServers` |
226
- | Windsurf | `~/.codeium/windsurf/mcp_config.json` | `mcpServers` |
227
- | Continue | `~/.continue/config.json` | `experimental.modelContextProtocolServers` (transport object) |
228
- | Zed | `~/.config/zed/settings.json` | `context_servers` (`command.path`) |
229
-
230
- ```json
231
- {
232
- "mcpServers": {
233
- "diffctx": {
234
- "command": "uvx",
235
- "args": ["--from", "diffctx[mcp]", "diffctx-mcp"]
236
- }
237
- }
238
- }
239
- ```
240
-
241
- With `pip install 'diffctx[mcp]'` already done, `"command": "diffctx-mcp"` with
242
- no args works everywhere instead. Use the `diffctx-mcp` entry point, not the
243
- `diffctx mcp` subcommand: the latter only exists from 1.12.3 onward and would
244
- map a directory named `mcp` on older releases.
245
-
246
- ## Ignore patterns
247
-
248
- Respects `.gitignore` and `.diffctx/ignore` automatically — hierarchically at
249
- every directory level, with full gitignore semantics (negation `!important.log`,
250
- anchored `/root_only.txt`), and in tree mode the output file is always
251
- auto-ignored (`--diff` reports a saved `tree.md` like any other change). Three
252
- controls are tree mode only and are refused with `--diff` and `graph`: `.diffctx/whitelist`
253
- (`-w`) as an include-only filter, `-i` for an extra ignore file, and
254
- `--no-default-ignores` / `--no-ignores` to drop the built-in patterns or every
255
- ignore rule.
256
-
257
- An excluded path never appears in the output in any role: in diff mode it is
258
- dropped both from `changed_files` and from the candidate universe, so it cannot
259
- come back as a related-context fragment either (including under `--full`). The
260
- same guarantee covers secret-like paths (`id_rsa`, `*.pem`, `*.key`, ...),
261
- which are filtered even without an ignore entry.
262
-
263
- ## Token cache
50
+ ![diffctx demo](https://raw.githubusercontent.com/nikolay-e/diffctx/main/docs/demo/demo.gif)
264
51
 
265
- Diff mode caches per-blob tokenization in the OS cache directory (e.g.
266
- `~/Library/Caches/diffctx/token-cache`) — a pure speedup, safe to delete.
267
- `DIFFCTX_TOKEN_CACHE_DIR` relocates it; `DIFFCTX_TOKEN_CACHE_MAX_BYTES` caps
268
- its size (default 512 MB, `0` disables eviction).
52
+ ## How it compares
269
53
 
270
- ## Exit codes
54
+ Whole-repo packers export everything; code-graph servers answer queries
55
+ against a maintained index. diffctx is **diff-seeded**: the input is a change,
56
+ the output is what it touches and what explains it. Measured results, and when
57
+ the other two fit better: [COMPARISON.md](COMPARISON.md).
271
58
 
272
- | Code | Meaning |
273
- |------|---------|
274
- | `0` | Success — output contains content |
275
- | `1` | Runtime error (bad path, permission denied, etc.) |
276
- | `2` | Usage error (invalid flags/arguments, an empty `--diff ""`, a malformed duration such as `1.5h`, an out-of-range `--alpha`/`--tau`/`--budget`/`--timeout`, or a tree-mode flag — `-i`/`-w`/`--no-default-ignores`/`--no-ignores` — given with `--diff` or `graph`) |
277
- | `3` | Environment error (`--diff` outside a git repo, in a bare one, or on a missing path, git not installed or refusing to start — its `fatal:` line is printed, no commits yet, a revision missing from a shallow clone) |
278
- | `4` | `--diff` produced no semantic context (clean tree, binary-only, everything filtered); output is still emitted. Deletion/rename/lockfile-only diffs list `deleted_files`/`renamed_files`/`lockfile_changes` and exit `0` |
279
- | `124`| `--diff` ran 30 s past the `--timeout` deadline without stopping cooperatively (the deadline itself yields a partial artifact and exit 0) |
280
- | `130`| Interrupted (Ctrl-C) |
281
- | `141`| Broken pipe (e.g. piping into `head`) |
59
+ ## More
282
60
 
283
- ## License
61
+ - [Documentation site](https://diffctx.com/) — the pipeline end to end
62
+ - [Command-line reference](docs/product/cli.md) — rendered from `diffctx --help`
63
+ - [Integrations](docs/product/integrations.md) — install, MCP clients, Python API
64
+ - [FAQ](docs/product/faq.md) — heuristic or oracle, ignore rules, monorepos, secrets
65
+ - [Token counting](docs/product/token-budget.md) — `--budget` for non-GPT models
66
+ - [GitHub Action](docs/product/github-action.md) — diff context as a CI step
67
+ - [Benchmarks](BENCHMARKS.md) and the [paper](https://doi.org/10.5281/zenodo.18824579)
68
+ - [Changelog](CHANGELOG.md) · [Security](SECURITY.md)
69
+ - [Parameter strategy](docs/engineering/parameter-strategy.md)
284
70
 
285
71
  Apache 2.0
286
72
 
287
73
  <!-- mcp-name: io.github.nikolay-e/diffctx -->
288
74
  <!-- Ownership marker read from the PyPI description by the MCP registry. -->
289
75
  <!-- Must survive edits verbatim: one space after the colon, case-sensitive. -->
290
-
291
- ---
292
-
293
- - [Documentation site](https://diffctx.com/) — the pipeline
294
- end to end: diff → fragments → graph → relevance → selection
295
- - [Command-line reference](docs/product/cli.md) — every flag with its default
296
- and meaning, rendered from `diffctx --help`
297
- - [GitHub Action](docs/product/github-action.md) — diff context as a CI step
298
- for LLM review
299
- - [Token counting](docs/product/token-budget.md) — which encoder, and what
300
- `--budget` means for non-GPT models
301
- - [Comparison](COMPARISON.md) — measured results, and when a whole-repo packer
302
- or a persistent code-graph server fits better
303
- - [Benchmarks](BENCHMARKS.md) — every published number with what it was
304
- measured on, and how to reproduce it
305
- - [FAQ](docs/product/faq.md) — heuristic or oracle, whose tokens, monorepos,
306
- the raw diff, secrets
307
- - [Paper](https://doi.org/10.5281/zenodo.18824579) — budgeted typed-graph
308
- retrieval for diff-aware context selection (Zenodo, 2026)
309
- - [Changelog](CHANGELOG.md)
310
- - [Security policy](SECURITY.md) — threat model and vulnerability reporting
311
- - [Parameter strategy](docs/engineering/parameter-strategy.md) — how `--alpha`,
312
- `--tau`, and edge weights are calibrated
package/checksums.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
- "diffctx-1.18.3-aarch64-apple-darwin.tar.gz": "efa8f2595854b5ba741ec6aef24286cdb660a1cbe31fa2f343849718087a3372",
3
- "diffctx-1.18.3-aarch64-pc-windows-msvc.zip": "40cf3bd4070e7a5e0ca40092d3975d9eb1aea0ea2fac41a4671edbfc2d63b742",
4
- "diffctx-1.18.3-aarch64-unknown-linux-gnu.tar.gz": "a0bdc3b5545c12ef8551e32690c2770205ed94762df459babbd7d14087ff242f",
5
- "diffctx-1.18.3-x86_64-apple-darwin.tar.gz": "2d7488ca94b38486900014d9b0ed9e8ffb8e8846919a1275f33df6e6a66e4803",
6
- "diffctx-1.18.3-x86_64-pc-windows-msvc.zip": "523357c566979bf2f35c7b6dc7858dd2fcf1154d0d60ab2140311f3dea1c47fe",
7
- "diffctx-1.18.3-x86_64-unknown-linux-gnu.tar.gz": "62fe25d1dfd11ad8b456ec37b00dafc56587e47db4db4893de44ec8a1231da6b"
2
+ "diffctx-1.18.4-aarch64-apple-darwin.tar.gz": "3e9c14ead118b7099bbafb1f106c8cfd141070712568107cf27f9510ac0b4991",
3
+ "diffctx-1.18.4-aarch64-pc-windows-msvc.zip": "dcd47a7019f306421330275b30e3773ad47a75f226e2f308b66b50bc33fbd765",
4
+ "diffctx-1.18.4-aarch64-unknown-linux-gnu.tar.gz": "d2e73658ec0630c3b37f198073c5634b9ab4d921d25cb6c0f2671e529f24140b",
5
+ "diffctx-1.18.4-x86_64-apple-darwin.tar.gz": "b44e0f7c2358c1a27067e03c0e2a66b2b97974cc658081f75ed5516a7b9d4d43",
6
+ "diffctx-1.18.4-x86_64-pc-windows-msvc.zip": "e02611f54c1bbd5ef5cf7c8c9b8ca8256b2787bf645dfc52136f8e325c38b940",
7
+ "diffctx-1.18.4-x86_64-unknown-linux-gnu.tar.gz": "b345f7e654d5accbb6f8bfdb931b37c22b6de70e2ceac921ab9dd1f661fed9dd"
8
8
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "diffctx",
3
3
  "mcpName": "io.github.nikolay-e/diffctx",
4
- "version": "1.18.3",
4
+ "version": "1.18.4",
5
5
  "description": "Selects the minimum code an LLM needs to review a git diff",
6
6
  "keywords": [
7
7
  "git",