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.
- package/README.md +42 -279
- package/checksums.json +6 -6
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,312 +1,75 @@
|
|
|
1
|
-
# diffctx —
|
|
1
|
+
# diffctx — what a git change reaches, and the code to review it
|
|
2
2
|
|
|
3
3
|
[](https://github.com/nikolay-e/diffctx/actions/workflows/ci.yml)
|
|
4
4
|
[](https://pypi.org/project/diffctx/)
|
|
5
5
|
[](https://crates.io/crates/diffctx)
|
|
6
6
|
[](https://www.npmjs.com/package/diffctx)
|
|
7
|
-
[](https://registry.modelcontextprotocol.io/v0/servers?search=io.github.nikolay-e/diffctx)
|
|
8
8
|
|
|
9
|
-
**diffctx
|
|
10
|
-
|
|
11
|
-
|
|
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
|
-
|
|
28
|
-
|
|
29
|
-
|
|
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
|
-
|
|
25
|
+
# any MCP client
|
|
26
|
+
claude mcp add diffctx -- uvx --from 'diffctx[mcp]' diffctx-mcp
|
|
42
27
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
scoop install diffctx/diffctx
|
|
28
|
+
# CLI, zero-install
|
|
29
|
+
uvx diffctx . --diff HEAD~1
|
|
46
30
|
```
|
|
47
31
|
|
|
48
|
-
|
|
49
|
-
|
|
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
|
-

|
|
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
|
-
#
|
|
123
|
-
diffctx .
|
|
124
|
-
diffctx .
|
|
125
|
-
diffctx .
|
|
126
|
-
diffctx . --
|
|
127
|
-
diffctx .
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
[](https://registry.modelcontextprotocol.io/v0/servers?search=io.github.nikolay-e/diffctx)
|
|
183
|
-
[](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
|
+

|
|
264
51
|
|
|
265
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
"diffctx-1.18.
|
|
4
|
-
"diffctx-1.18.
|
|
5
|
-
"diffctx-1.18.
|
|
6
|
-
"diffctx-1.18.
|
|
7
|
-
"diffctx-1.18.
|
|
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
|
}
|