mincut-context 1.0.0 → 1.1.0

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 CHANGED
@@ -3,23 +3,58 @@
3
3
  # `mincut-context`
4
4
 
5
5
  **Token-minimal context selection for AI coding agents.**
6
- A symbol graph of your repo + personalized PageRank + budget-constrained min-cut — picks the smallest provably-relevant context for any task.
7
6
 
8
- [![npm](https://img.shields.io/npm/v/mincut-context?logo=npm)](https://www.npmjs.com/package/mincut-context)
9
- [![license](https://img.shields.io/badge/license-MIT-green)](./LICENSE)
7
+ A symbol graph of your repo + personalized PageRank + budget-constrained min-cut
8
+ — picks the smallest provably-relevant context for any task.
9
+
10
+ [![npm version](https://img.shields.io/npm/v/mincut-context?logo=npm&color=cb3837&label=npm)](https://www.npmjs.com/package/mincut-context)
11
+ [![downloads](https://img.shields.io/npm/dm/mincut-context?color=success&label=downloads)](https://www.npmjs.com/package/mincut-context)
12
+ [![bundle size](https://img.shields.io/bundlephobia/minzip/mincut-context?label=size)](https://bundlephobia.com/package/mincut-context)
13
+ [![types](https://img.shields.io/badge/types-TypeScript-3178c6?logo=typescript&logoColor=white)](./src)
14
+ [![node](https://img.shields.io/badge/node-%E2%89%A518.17-43853d?logo=nodedotjs&logoColor=white)](./package.json)
10
15
  [![tests](https://img.shields.io/badge/tests-116%20passing-brightgreen)](./tests)
11
- [![types](https://img.shields.io/badge/types-TypeScript-blue)](./src)
12
- [![node](https://img.shields.io/badge/node-%3E%3D18.17-success)](./package.json)
16
+ [![license](https://img.shields.io/badge/license-MIT-green)](./LICENSE)
13
17
 
14
18
  </div>
15
19
 
16
20
  <p align="center"><img src="docs/demo.gif" alt="mcx pack demo — keyword + semantic search on a real repo" width="900" /></p>
17
21
 
22
+ <div align="center">
23
+
24
+ ```bash
25
+ npm install -g mincut-context # global CLI: mcx
26
+ npx mincut-context pack "fix the login validation bug" --budget 4000
27
+ ```
28
+
29
+ </div>
30
+
18
31
  > One sentence: an agent that opens `mincut-context` first gets the minimum cohesive *region* of code its task depends on — not a grep hit, not a whole file, not the whole repo.
19
32
 
20
33
  ---
21
34
 
22
- ## The problem
35
+ <details>
36
+ <summary><b>Table of contents</b></summary>
37
+
38
+ - [Why](#why)
39
+ - [The idea](#the-idea)
40
+ - [Install](#install)
41
+ - [Quick start](#quick-start)
42
+ - [Use it three ways](#use-it-three-ways) — [MCP server](#1-as-an-mcp-server--recommended-for-agents) · [CLI](#2-as-a-cli) · [Library](#3-as-a-library)
43
+ - [How it works](#how-it-works)
44
+ - [Real-world examples](#real-world-examples)
45
+ - [Languages](#languages)
46
+ - [CLI reference](#cli-reference)
47
+ - [How it compares](#how-it-compares)
48
+ - [Roadmap](#roadmap)
49
+ - [Tradeoffs (honest)](#tradeoffs-honest)
50
+ - [Contributing](#contributing)
51
+ - [License](#license)
52
+
53
+ </details>
54
+
55
+ ---
56
+
57
+ ## Why
23
58
 
24
59
  AI coding agents waste your context window. Two failure modes:
25
60
 
@@ -47,16 +82,37 @@ The objective is **submodular**, so a greedy algorithm gives a `(1 - 1/e) ≈ 0.
47
82
  ## Install
48
83
 
49
84
  ```bash
50
- npm install -g mincut-context # global CLI
51
- # or
52
- npm install --save-dev mincut-context # per-project
85
+ # global CLI (recommended)
86
+ npm install -g mincut-context
87
+
88
+ # or per-project
89
+ npm install --save-dev mincut-context
90
+
91
+ # or one-shot, no install
92
+ npx mincut-context pack "your task" --budget 4000
93
+ ```
94
+
95
+ Requires **Node ≥ 18.17**. TypeScript types ship with the package.
96
+
97
+ ## Quick start
98
+
99
+ ```bash
100
+ # 1. Index any repo once (warms the cache)
101
+ mcx index .
102
+
103
+ # 2. Ask for context for a task
104
+ mcx pack "fix the login validation bug" --budget 4000
105
+
106
+ # 3. Pipe straight into your agent
107
+ mcx pack "..." --format markdown > context.md
108
+ mcx pack "..." --format json | jq '.files[].path'
53
109
  ```
54
110
 
55
- Requires Node 18.17+.
111
+ ---
56
112
 
57
113
  ## Use it three ways
58
114
 
59
- ### 1. As an MCP server — the recommended path for agents
115
+ ### 1. As an MCP server — recommended for agents
60
116
 
61
117
  Drop into Claude Code, Codex, Cursor, or any MCP-aware client:
62
118
 
@@ -109,10 +165,26 @@ for (const f of result.files) {
109
165
  // → src/auth/session.ts 0.408 483 · attached (60%)
110
166
  ```
111
167
 
168
+ Full TypeScript types — `pack`, `indexRepo`, `SymbolGraph`, `personalizedPageRank`, `greedySelect` are all exported.
169
+
112
170
  ---
113
171
 
114
172
  ## How it works
115
173
 
174
+ ```mermaid
175
+ flowchart LR
176
+ A[Repo files] -->|tree-sitter| B[Symbol graph<br/>V: functions/classes<br/>E: imports/calls]
177
+ T[Task string] -->|keyword IDF| S[Seeds S ⊆ V]
178
+ T -->|optional: --embed| S
179
+ B --> R[Personalized<br/>PageRank<br/>α=0.85]
180
+ S --> R
181
+ R --> C[Greedy<br/>budget min-cut<br/>1−1/e bound]
182
+ B --> C
183
+ C --> P[Packed context<br/>files + ranges<br/>+ per-node reason]
184
+ ```
185
+
186
+ The five steps in pseudocode:
187
+
116
188
  ```text
117
189
  pack(task, repo, budget):
118
190
  1. graph = index(repo) # tree-sitter → symbol+edge graph
@@ -130,7 +202,7 @@ pack(task, repo, budget):
130
202
 
131
203
  The "no isolated nodes" rule (`attach(v, T) > 0`) is what gives you the *cohesion guarantee* — adding a fully-detached node would strictly increase the cut without benefit, so the greedy refuses. That's why an "auth" task never drags in unrelated UI files even when budget permits.
132
204
 
133
- ### Why semantic embeddings? (optional)
205
+ ### Semantic embeddings (optional)
134
206
 
135
207
  Pure keyword matching misses semantic neighbors:
136
208
 
@@ -144,7 +216,8 @@ $ mcx pack "ranking and centrality algorithm" --repo . --embed --embed-weight 0.
144
216
  → src/seeds/keyword.ts 0.080 18 tok
145
217
  ```
146
218
 
147
- "Centrality" never appears in any symbol name — only embeddings could find this. Uses `@xenova/transformers` (Transformers.js + ONNX), runs fully local, ~22 MB model download on first use.
219
+ "Centrality" never appears in any symbol name — only embeddings could find this.
220
+ Uses [`@xenova/transformers`](https://github.com/xenova/transformers.js) (Transformers.js + ONNX). Fully local, ~22 MB model download on first use.
148
221
 
149
222
  ---
150
223
 
@@ -178,7 +251,8 @@ Adding a language is one parser file implementing `LanguageParser` + one line in
178
251
 
179
252
  ---
180
253
 
181
- ## CLI reference
254
+ <details>
255
+ <summary><b>CLI reference</b></summary>
182
256
 
183
257
  ```text
184
258
  Usage: mcx pack [options] <task...>
@@ -198,8 +272,21 @@ Options:
198
272
  --embed-weight <number> Blend 0..1 (0=keyword, 1=embedding only)
199
273
  --embed-model <id> HF model id (default Xenova/all-MiniLM-L6-v2)
200
274
  -i, --interactive Ink TUI for pin/exclude before output
275
+ --cache Use persistent parse cache (.mincut-cache/) — fast repeat runs
276
+ --cache-dir <path> Override cache directory (absolute path)
277
+ --community-boost <number> Louvain same-community boost (default 0.5, 0 = disabled)
201
278
  ```
202
279
 
280
+ Other commands:
281
+
282
+ ```text
283
+ mcx index [path] warm the parse cache (no output beyond stats)
284
+ mcx mcp run as an MCP server over stdio
285
+ mcx --version print the installed version
286
+ ```
287
+
288
+ </details>
289
+
203
290
  ---
204
291
 
205
292
  ## How it compares
@@ -210,28 +297,29 @@ Options:
210
297
  | **Grep / ripgrep** | ❌ | ❌ | ❌ | yes |
211
298
  | **Cursor/Continue RAG** | partial | ❌ | ✅ | hard |
212
299
  | **AST/symbol graph alone** | ❌ | ✅ | ❌ | yes |
213
- | **`mincut-context`** | ✅ (budget) | ✅ (graph) | ✅ (--embed) | per-node `reason` |
300
+ | **`mincut-context`** | ✅ (budget) | ✅ (graph) | ✅ (`--embed`) | per-node `reason` |
214
301
 
215
302
  ---
216
303
 
217
304
  ## Roadmap
218
305
 
219
- - [x] Core: graph + personalized PageRank + greedy min-cut
220
- - [x] TS/JS parser
221
- - [x] Python parser
222
- - [x] CLI (plain / JSON / markdown)
223
- - [x] MCP server
224
- - [x] Local embeddings (`@xenova/transformers`)
225
- - [x] Ink TUI
226
- - [ ] Persistent on-disk parse cache (incremental reindex)
227
- - [ ] Louvain community boost for explanation quality
306
+ - [x] Core: graph + personalized PageRank + greedy min-cut **(v1.0)**
307
+ - [x] TS/JS parser **(v1.0)**
308
+ - [x] Python parser **(v1.0)**
309
+ - [x] CLI (plain / JSON / markdown) **(v1.0)**
310
+ - [x] MCP server **(v1.0)**
311
+ - [x] Local embeddings (`@xenova/transformers`) **(v1.0)**
312
+ - [x] Ink TUI **(v1.0)**
313
+ - [x] Persistent on-disk parse cache (incremental reindex) **(v1.1)** — 5.2× warm-run speedup
314
+ - [x] Louvain community boost **(v1.1)**
228
315
  - [ ] Vue SFC / Svelte parsers
229
316
  - [ ] Rust / Go parsers
230
- - [ ] LSP-backed type-aware call resolution (post-1.0)
317
+ - [ ] LSP-backed type-aware call resolution
231
318
 
232
319
  ---
233
320
 
234
- ## Tradeoffs (honest)
321
+ <details>
322
+ <summary><b>Tradeoffs (honest)</b></summary>
235
323
 
236
324
  | What's not optimal | What we do |
237
325
  |---|---|
@@ -241,6 +329,8 @@ Options:
241
329
  | Cold start parses whole repo | `.mincut-cache/` per-file cache planned for v1.1 |
242
330
  | Python class-level constants aren't symbols yet | Only `def` and `class` for now |
243
331
 
332
+ </details>
333
+
244
334
  ---
245
335
 
246
336
  ## Contributing
@@ -255,14 +345,22 @@ node dist/adapters/cli/bin.js pack "..." --repo /path/to/some-repo
255
345
  ```
256
346
 
257
347
  PRs especially welcome for:
348
+
258
349
  - **New language parsers** — tree-sitter grammar + symbol queries
259
350
  - **LSP integration** — type-aware call resolution
260
351
  - **Cache layer** — persistent `.mincut-cache/`
261
352
 
262
353
  Each PR must keep the test suite green (`npm test`). New behavior requires tests first (TDD).
263
354
 
264
- ---
355
+ ## Built with
356
+
357
+ - [`tree-sitter`](https://tree-sitter.github.io/tree-sitter/) — incremental parsing
358
+ - [`graphology`](https://graphology.github.io/) — graph primitives
359
+ - [`@xenova/transformers`](https://github.com/xenova/transformers.js) — local ONNX embeddings
360
+ - [`@modelcontextprotocol/sdk`](https://github.com/modelcontextprotocol/typescript-sdk) — MCP server
361
+ - [`commander`](https://github.com/tj/commander.js) + [`ink`](https://github.com/vadimdemedes/ink) — CLI & TUI
362
+ - [`vitest`](https://vitest.dev/) — testing
265
363
 
266
364
  ## License
267
365
 
268
- [MIT](./LICENSE)
366
+ [MIT](./LICENSE) © [Dhrupo Nil](https://github.com/dhrupo)
@@ -30,7 +30,7 @@ const program = new Command();
30
30
  program
31
31
  .name('mcx')
32
32
  .description('mincut-context — token-minimal context selection for AI coding agents')
33
- .version('1.0.0');
33
+ .version('1.1.0');
34
34
  program
35
35
  .command('pack <task...>')
36
36
  .description('Pack a token-minimal context window for the given task')
@@ -46,6 +46,9 @@ program
46
46
  .option('--embed-weight <number>', 'Blend factor 0..1 (0=keyword, 1=embedding only)', (v) => Number(v), 0.5)
47
47
  .option('--embed-model <id>', 'Hugging Face model id', 'Xenova/all-MiniLM-L6-v2')
48
48
  .option('-i, --interactive', 'Interactive review — pin/exclude in a TUI before output', false)
49
+ .option('--cache', 'Use persistent parse cache at .mincut-cache/ (fast repeat runs)', false)
50
+ .option('--cache-dir <path>', 'Override cache directory (absolute path)')
51
+ .option('--community-boost <number>', 'Louvain same-community boost factor (0 = disabled)', (v) => Number(v), 0.5)
49
52
  .action(async (taskWords, opts) => {
50
53
  const task = taskWords.join(' ').trim();
51
54
  if (!task) {
@@ -68,6 +71,9 @@ program
68
71
  exclude: opts.exclude,
69
72
  embedder,
70
73
  embedWeight: opts.embedWeight,
74
+ cache: opts.cache,
75
+ cacheDir: opts.cacheDir,
76
+ communityBoost: opts.communityBoost,
71
77
  });
72
78
  const color = Boolean(opts.color) && process.stdout.isTTY;
73
79
  const fmt = (opts.format ?? 'plain').toLowerCase();
@@ -93,17 +99,24 @@ program
93
99
  });
94
100
  program
95
101
  .command('index')
96
- .description('Index the repo and print stats (warms the parse cache, if any)')
102
+ .description('Index the repo and print stats (optionally warm the on-disk parse cache)')
97
103
  .option('-r, --repo <path>', 'Repository root', process.cwd())
98
104
  .option('--include <pattern...>', 'Restrict to glob patterns')
105
+ .option('--cache', 'Use persistent parse cache at .mincut-cache/', false)
106
+ .option('--cache-dir <path>', 'Override cache directory (absolute path)')
99
107
  .action((opts) => {
100
108
  const t0 = Date.now();
101
109
  const { stats } = indexRepo(path.resolve(opts.repo), {
102
110
  include: opts.include,
111
+ cache: opts.cache,
112
+ cacheDir: opts.cacheDir,
103
113
  });
104
114
  const elapsed = Date.now() - t0;
115
+ const cacheNote = opts.cache
116
+ ? ` · cache: ${stats.cacheHits} hit / ${stats.cacheMisses} miss`
117
+ : '';
105
118
  process.stdout.write(`indexed ${stats.files} files · ${stats.symbols} symbols · ${stats.edges} edges ` +
106
- `(${stats.unresolvedCalls} unresolved calls) in ${elapsed} ms\n`);
119
+ `(${stats.unresolvedCalls} unresolved calls)${cacheNote} in ${elapsed} ms\n`);
107
120
  });
108
121
  program
109
122
  .command('mcp')
@@ -1 +1 @@
1
- {"version":3,"file":"bin.js","sourceRoot":"","sources":["../../../src/adapters/cli/bin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bin.js","sourceRoot":"","sources":["../../../src/adapters/cli/bin.ts"],"names":[],"mappings":"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"}
@@ -7,7 +7,7 @@ import { handleMcpCall, TOOLS } from './handler.js';
7
7
  * All business logic lives in the handler — this file only does transport.
8
8
  */
9
9
  export async function runMcpServer() {
10
- const server = new Server({ name: 'mincut-context', version: '1.0.0' }, { capabilities: { tools: {} } });
10
+ const server = new Server({ name: 'mincut-context', version: '1.1.0' }, { capabilities: { tools: {} } });
11
11
  server.setRequestHandler(ListToolsRequestSchema, async () => ({
12
12
  tools: TOOLS.map((t) => ({
13
13
  name: t.name,
@@ -0,0 +1,17 @@
1
+ import type { SymbolGraph } from './graph.js';
2
+ export interface CommunityOptions {
3
+ /** Optional deterministic RNG seed for reproducible runs. */
4
+ seed?: number;
5
+ }
6
+ /**
7
+ * Louvain community detection on the symbol graph.
8
+ *
9
+ * Why undirected? Community detection asks "which nodes are densely
10
+ * interconnected" — a directed call edge a→b should still place a and b in
11
+ * the same module. We collapse to an undirected weight-summed multigraph.
12
+ *
13
+ * Returns a Map<nodeId, communityId>. Community IDs are arbitrary integers;
14
+ * only equality is meaningful (two nodes share a community iff equal).
15
+ */
16
+ export declare function detectCommunities(symbols: SymbolGraph, options?: CommunityOptions): Map<string, number>;
17
+ //# sourceMappingURL=communities.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"communities.d.ts","sourceRoot":"","sources":["../../src/core/communities.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAqB9C,MAAM,WAAW,gBAAgB;IAC/B,6DAA6D;IAC7D,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,WAAW,EACpB,OAAO,GAAE,gBAAqB,GAC7B,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAuBrB"}
@@ -0,0 +1,54 @@
1
+ import { createRequire } from 'node:module';
2
+ // graphology + graphology-communities-louvain are CommonJS — bridge via require.
3
+ const require_ = createRequire(import.meta.url);
4
+ const { UndirectedGraph } = require_('graphology');
5
+ const louvain = require_('graphology-communities-louvain');
6
+ /**
7
+ * Louvain community detection on the symbol graph.
8
+ *
9
+ * Why undirected? Community detection asks "which nodes are densely
10
+ * interconnected" — a directed call edge a→b should still place a and b in
11
+ * the same module. We collapse to an undirected weight-summed multigraph.
12
+ *
13
+ * Returns a Map<nodeId, communityId>. Community IDs are arbitrary integers;
14
+ * only equality is meaningful (two nodes share a community iff equal).
15
+ */
16
+ export function detectCommunities(symbols, options = {}) {
17
+ const g = new UndirectedGraph();
18
+ for (const id of symbols.nodes())
19
+ g.addNode(id);
20
+ // Sum directed weights to a single undirected edge weight per pair.
21
+ for (const sourceId of symbols.nodes()) {
22
+ for (const e of symbols.outEdges(sourceId)) {
23
+ const a = sourceId;
24
+ const b = e.target;
25
+ if (a === b)
26
+ continue;
27
+ if (g.hasEdge(a, b)) {
28
+ g.updateEdgeAttribute(a, b, 'weight', (v) => Number(v ?? 0) + e.data.weight);
29
+ }
30
+ else {
31
+ g.addEdge(a, b, { weight: e.data.weight });
32
+ }
33
+ }
34
+ }
35
+ const rng = options.seed !== undefined ? mulberry32(options.seed) : Math.random;
36
+ // Louvain with no edges returns a single community for everything; for an
37
+ // isolated-node graph the library treats every node as its own community,
38
+ // which matches our test contract.
39
+ const raw = louvain(g, { rng });
40
+ return new Map(Object.entries(raw));
41
+ }
42
+ /** Tiny deterministic PRNG so tests can lock results across runs. */
43
+ function mulberry32(seed) {
44
+ let a = seed | 0;
45
+ return function rng() {
46
+ a |= 0;
47
+ a = (a + 0x6d2b79f5) | 0;
48
+ let t = a;
49
+ t = Math.imul(t ^ (t >>> 15), t | 1);
50
+ t ^= t + Math.imul(t ^ (t >>> 7), t | 61);
51
+ return ((t ^ (t >>> 14)) >>> 0) / 4294967296;
52
+ };
53
+ }
54
+ //# sourceMappingURL=communities.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"communities.js","sourceRoot":"","sources":["../../src/core/communities.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C,iFAAiF;AACjF,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAChD,MAAM,EAAE,eAAe,EAAE,GAAG,QAAQ,CAAC,YAAY,CAEhD,CAAC;AACF,MAAM,OAAO,GAAG,QAAQ,CAAC,gCAAgC,CAG9B,CAAC;AAgB5B;;;;;;;;;GASG;AACH,MAAM,UAAU,iBAAiB,CAC/B,OAAoB,EACpB,UAA4B,EAAE;IAE9B,MAAM,CAAC,GAAG,IAAI,eAAe,EAAE,CAAC;IAChC,KAAK,MAAM,EAAE,IAAI,OAAO,CAAC,KAAK,EAAE;QAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAChD,oEAAoE;IACpE,KAAK,MAAM,QAAQ,IAAI,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;QACvC,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC3C,MAAM,CAAC,GAAG,QAAQ,CAAC;YACnB,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;YACnB,IAAI,CAAC,KAAK,CAAC;gBAAE,SAAS;YACtB,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;gBACpB,CAAC,CAAC,mBAAmB,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC/E,CAAC;iBAAM,CAAC;gBACN,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;IAChF,0EAA0E;IAC1E,0EAA0E;IAC1E,mCAAmC;IACnC,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;IAChC,OAAO,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;AACtC,CAAC;AAED,qEAAqE;AACrE,SAAS,UAAU,CAAC,IAAY;IAC9B,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC;IACjB,OAAO,SAAS,GAAG;QACjB,CAAC,IAAI,CAAC,CAAC;QACP,CAAC,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;QACzB,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACrC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;QAC1C,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,UAAU,CAAC;IAC/C,CAAC,CAAC;AACJ,CAAC"}
@@ -4,4 +4,6 @@ export { personalizedPageRank } from './pagerank.js';
4
4
  export type { PageRankOptions } from './pagerank.js';
5
5
  export { greedySelect } from './select.js';
6
6
  export type { SelectOptions, SelectionEntry, SelectionResult } from './select.js';
7
+ export { detectCommunities } from './communities.js';
8
+ export type { CommunityOptions } from './communities.js';
7
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAClF,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAClF,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAClF,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,YAAY,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC"}
@@ -1,4 +1,5 @@
1
1
  export { SymbolGraph } from './graph.js';
2
2
  export { personalizedPageRank } from './pagerank.js';
3
3
  export { greedySelect } from './select.js';
4
+ export { detectCommunities } from './communities.js';
4
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAErD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAErD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC"}
@@ -17,12 +17,23 @@ export interface SelectOptions {
17
17
  * even at the cost of some rank.
18
18
  */
19
19
  attachmentWeight?: number;
20
+ /**
21
+ * Optional Louvain community labels per node. When provided AND
22
+ * `communityBoost > 0`, candidates sharing a community with any seed get
23
+ * a multiplicative boost in the greedy objective — surface results stay
24
+ * inside the task's natural module instead of drifting outside.
25
+ */
26
+ communities?: ReadonlyMap<string, number>;
27
+ /** Multiplicative boost for same-community candidates. Default 0 (off). */
28
+ communityBoost?: number;
20
29
  }
21
30
  export interface SelectionEntry {
22
31
  id: string;
23
32
  tokens: number;
24
33
  rank: number;
25
34
  reason: string;
35
+ /** Louvain community label, present only when communities were supplied. */
36
+ community?: number;
26
37
  }
27
38
  export interface SelectionResult {
28
39
  selected: Set<string>;
@@ -1 +1 @@
1
- {"version":3,"file":"select.d.ts","sourceRoot":"","sources":["../../src/core/select.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,MAAM,WAAW,aAAa;IAC5B,qDAAqD;IACrD,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC3B,6EAA6E;IAC7E,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,+CAA+C;IAC/C,MAAM,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACtB,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,aAAa,GAAG,eAAe,CAoFxF"}
1
+ {"version":3,"file":"select.d.ts","sourceRoot":"","sources":["../../src/core/select.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,MAAM,WAAW,aAAa;IAC5B,qDAAqD;IACrD,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC3B,6EAA6E;IAC7E,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,+CAA+C;IAC/C,MAAM,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;;;OAKG;IACH,WAAW,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,4EAA4E;IAC5E,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,4EAA4E;IAC5E,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACtB,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,aAAa,GAAG,eAAe,CA4GxF"}
@@ -25,7 +25,17 @@
25
25
  * the remaining budget.
26
26
  */
27
27
  export function greedySelect(graph, options) {
28
- const { seeds, ranks, budget, rankWeight = 1, attachmentWeight = 1, } = options;
28
+ const { seeds, ranks, budget, rankWeight = 1, attachmentWeight = 1, communities, communityBoost = 0, } = options;
29
+ // Pre-compute the set of community ids the seeds occupy — candidate gets
30
+ // the boost iff its community is in this set.
31
+ const seedCommunities = new Set();
32
+ if (communities && communityBoost > 0) {
33
+ for (const id of seeds) {
34
+ const c = communities.get(id);
35
+ if (c !== undefined)
36
+ seedCommunities.add(c);
37
+ }
38
+ }
29
39
  const selected = new Set();
30
40
  const entries = [];
31
41
  let usedTokens = 0;
@@ -44,6 +54,7 @@ export function greedySelect(graph, options) {
44
54
  tokens: data.tokens,
45
55
  rank: ranks.get(id) ?? 0,
46
56
  reason: 'seed — matched directly by task',
57
+ community: communities?.get(id),
47
58
  });
48
59
  }
49
60
  // 2. Greedy fill.
@@ -66,7 +77,16 @@ export function greedySelect(graph, options) {
66
77
  if (attach === 0)
67
78
  continue;
68
79
  const rank = ranks.get(id) ?? 0;
69
- const score = (rankWeight * rank * attach * attachmentWeight) / Math.max(data.tokens, 1);
80
+ let score = (rankWeight * rank * attach * attachmentWeight) / Math.max(data.tokens, 1);
81
+ // Multiplicative community boost: candidates inside any seed's community
82
+ // win ties. Caps at 2x by design so a wildly relevant outsider can
83
+ // still beat a same-community filler.
84
+ if (communities && communityBoost > 0) {
85
+ const c = communities.get(id);
86
+ if (c !== undefined && seedCommunities.has(c)) {
87
+ score *= 1 + communityBoost;
88
+ }
89
+ }
70
90
  if (!best || score > best.score) {
71
91
  best = { id, score, tokens: data.tokens, rank, attach };
72
92
  }
@@ -80,6 +100,7 @@ export function greedySelect(graph, options) {
80
100
  tokens: best.tokens,
81
101
  rank: best.rank,
82
102
  reason: reasonFor(best.attach, best.rank),
103
+ community: communities?.get(best.id),
83
104
  });
84
105
  }
85
106
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"select.js","sourceRoot":"","sources":["../../src/core/select.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"select.js","sourceRoot":"","sources":["../../src/core/select.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,11 @@
1
1
  import { SymbolGraph } from '../core/graph.js';
2
2
  import { type WalkOptions } from './walker.js';
3
+ export interface IndexOptions extends WalkOptions {
4
+ /** Enable persistent on-disk parse cache. Default false (in-memory only). */
5
+ cache?: boolean;
6
+ /** Override cache directory. Default `<repo>/.mincut-cache/`. */
7
+ cacheDir?: string;
8
+ }
3
9
  export interface IndexResult {
4
10
  graph: SymbolGraph;
5
11
  stats: {
@@ -7,7 +13,9 @@ export interface IndexResult {
7
13
  symbols: number;
8
14
  edges: number;
9
15
  unresolvedCalls: number;
16
+ cacheHits: number;
17
+ cacheMisses: number;
10
18
  };
11
19
  }
12
- export declare function indexRepo(root: string, options?: WalkOptions): IndexResult;
20
+ export declare function indexRepo(root: string, options?: IndexOptions): IndexResult;
13
21
  //# sourceMappingURL=builder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../src/index/builder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAI/C,OAAO,EAAQ,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAYrD,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,WAAW,CAAC;IACnB,KAAK,EAAE;QACL,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;QACd,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC;CACH;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,WAAW,CAwF9E"}
1
+ {"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../src/index/builder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAI/C,OAAO,EAAQ,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAarD,MAAM,WAAW,YAAa,SAAQ,WAAW;IAC/C,8EAA8E;IAC9E,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,kEAAkE;IAClE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,WAAW,CAAC;IACnB,KAAK,EAAE;QACL,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;QACd,eAAe,EAAE,MAAM,CAAC;QACxB,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;CACH;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,GAAG,WAAW,CA6G/E"}
@@ -3,6 +3,7 @@ import { SymbolGraph } from '../core/graph.js';
3
3
  import { parseTypeScript } from '../parsers/ts.js';
4
4
  import { parsePython } from '../parsers/py.js';
5
5
  import { walk } from './walker.js';
6
+ import { ParseCache, fileFingerprint } from './cache.js';
6
7
  const TS_EXT = new Set(['.ts', '.tsx', '.js', '.jsx', '.mjs', '.cjs']);
7
8
  const PY_EXT = new Set(['.py', '.pyi']);
8
9
  function parseForExt(file, source) {
@@ -15,6 +16,9 @@ function parseForExt(file, source) {
15
16
  }
16
17
  export function indexRepo(root, options = {}) {
17
18
  const graph = new SymbolGraph();
19
+ const cache = options.cache
20
+ ? new ParseCache(options.cacheDir ?? path.join(root, '.mincut-cache'))
21
+ : null;
18
22
  // Per-file accumulators we need for cross-file resolution.
19
23
  const fileImports = new Map();
20
24
  const symbolsByFile = new Map();
@@ -23,7 +27,24 @@ export function indexRepo(root, options = {}) {
23
27
  let fileCount = 0;
24
28
  let unresolved = 0;
25
29
  for (const file of walk(root, options)) {
26
- const parsed = parseForExt(file.relPath, file.source);
30
+ let parsed = null;
31
+ if (cache) {
32
+ const fp = fileFingerprint(file.absPath);
33
+ if (fp) {
34
+ const hit = cache.get(file.relPath, fp.mtimeMs, fp.size);
35
+ if (hit) {
36
+ parsed = hit;
37
+ }
38
+ else {
39
+ parsed = parseForExt(file.relPath, file.source);
40
+ if (parsed)
41
+ cache.put(file.relPath, fp.mtimeMs, fp.size, parsed);
42
+ }
43
+ }
44
+ }
45
+ else {
46
+ parsed = parseForExt(file.relPath, file.source);
47
+ }
27
48
  if (!parsed)
28
49
  continue;
29
50
  fileCount += 1;
@@ -91,6 +112,7 @@ export function indexRepo(root, options = {}) {
91
112
  }
92
113
  }
93
114
  }
115
+ const cacheStats = cache?.getStats() ?? { hits: 0, misses: 0 };
94
116
  return {
95
117
  graph,
96
118
  stats: {
@@ -98,6 +120,8 @@ export function indexRepo(root, options = {}) {
98
120
  symbols: graph.order(),
99
121
  edges: graph.size(),
100
122
  unresolvedCalls: unresolved,
123
+ cacheHits: cacheStats.hits,
124
+ cacheMisses: cacheStats.misses,
101
125
  },
102
126
  };
103
127
  }
@@ -1 +1 @@
1
- {"version":3,"file":"builder.js","sourceRoot":"","sources":["../../src/index/builder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"builder.js","sourceRoot":"","sources":["../../src/index/builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import type { ParseResult } from '../parsers/parser.js';
2
+ export interface CacheEntry {
3
+ version: string;
4
+ path: string;
5
+ mtimeMs: number;
6
+ size: number;
7
+ result: ParseResult;
8
+ }
9
+ export interface CacheStats {
10
+ hits: number;
11
+ misses: number;
12
+ }
13
+ export declare class ParseCache {
14
+ private readonly dir;
15
+ private stats;
16
+ constructor(cacheRoot: string);
17
+ getStats(): CacheStats;
18
+ /**
19
+ * Look up a cached parse result. Returns undefined on cache miss, OR if
20
+ * the cached entry's mtime/size do not match the current file on disk, OR
21
+ * if the schema version has drifted.
22
+ */
23
+ get(relPath: string, mtimeMs: number, size: number): ParseResult | undefined;
24
+ put(relPath: string, mtimeMs: number, size: number, result: ParseResult): void;
25
+ private entryPath;
26
+ }
27
+ export declare function fileFingerprint(absPath: string): {
28
+ mtimeMs: number;
29
+ size: number;
30
+ } | null;
31
+ //# sourceMappingURL=cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/index/cache.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAIxD,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,WAAW,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,KAAK,CAAsC;gBAEvC,SAAS,EAAE,MAAM;IAK7B,QAAQ,IAAI,UAAU;IAItB;;;;OAIG;IACH,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IA0B5E,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,IAAI;IAW9E,OAAO,CAAC,SAAS;CAQlB;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAOzF"}
@@ -0,0 +1,72 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { existsSync, mkdirSync, readFileSync, writeFileSync, statSync } from 'node:fs';
3
+ import path from 'node:path';
4
+ const CACHE_SCHEMA_VERSION = 'v1';
5
+ export class ParseCache {
6
+ dir;
7
+ stats = { hits: 0, misses: 0 };
8
+ constructor(cacheRoot) {
9
+ this.dir = path.join(cacheRoot, CACHE_SCHEMA_VERSION);
10
+ mkdirSync(this.dir, { recursive: true });
11
+ }
12
+ getStats() {
13
+ return { ...this.stats };
14
+ }
15
+ /**
16
+ * Look up a cached parse result. Returns undefined on cache miss, OR if
17
+ * the cached entry's mtime/size do not match the current file on disk, OR
18
+ * if the schema version has drifted.
19
+ */
20
+ get(relPath, mtimeMs, size) {
21
+ const file = this.entryPath(relPath);
22
+ if (!existsSync(file)) {
23
+ this.stats.misses += 1;
24
+ return undefined;
25
+ }
26
+ let raw;
27
+ try {
28
+ raw = JSON.parse(readFileSync(file, 'utf8'));
29
+ }
30
+ catch {
31
+ this.stats.misses += 1;
32
+ return undefined;
33
+ }
34
+ if (raw.version !== CACHE_SCHEMA_VERSION ||
35
+ raw.path !== relPath ||
36
+ raw.mtimeMs !== mtimeMs ||
37
+ raw.size !== size) {
38
+ this.stats.misses += 1;
39
+ return undefined;
40
+ }
41
+ this.stats.hits += 1;
42
+ return raw.result;
43
+ }
44
+ put(relPath, mtimeMs, size, result) {
45
+ const entry = {
46
+ version: CACHE_SCHEMA_VERSION,
47
+ path: relPath,
48
+ mtimeMs,
49
+ size,
50
+ result,
51
+ };
52
+ writeFileSync(this.entryPath(relPath), JSON.stringify(entry));
53
+ }
54
+ entryPath(relPath) {
55
+ // Stable, filesystem-safe filename from the source path. We hash so deeply
56
+ // nested paths don't blow the OS filename limit, and we prefix with a short
57
+ // human-readable hint so cache dirs are debuggable.
58
+ const hash = createHash('sha1').update(relPath).digest('hex').slice(0, 16);
59
+ const hint = relPath.replace(/[^a-zA-Z0-9_.-]+/g, '_').slice(0, 40);
60
+ return path.join(this.dir, `${hint}-${hash}.json`);
61
+ }
62
+ }
63
+ export function fileFingerprint(absPath) {
64
+ try {
65
+ const s = statSync(absPath);
66
+ return { mtimeMs: s.mtimeMs, size: s.size };
67
+ }
68
+ catch {
69
+ return null;
70
+ }
71
+ }
72
+ //# sourceMappingURL=cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/index/cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACvF,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B,MAAM,oBAAoB,GAAG,IAAI,CAAC;AAelC,MAAM,OAAO,UAAU;IACJ,GAAG,CAAS;IACrB,KAAK,GAAe,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;IAEnD,YAAY,SAAiB;QAC3B,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC;QACtD,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED,QAAQ;QACN,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;IAC3B,CAAC;IAED;;;;OAIG;IACH,GAAG,CAAC,OAAe,EAAE,OAAe,EAAE,IAAY;QAChD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACrC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACtB,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC;YACvB,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,IAAI,GAAe,CAAC;QACpB,IAAI,CAAC;YACH,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAe,CAAC;QAC7D,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC;YACvB,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,IACE,GAAG,CAAC,OAAO,KAAK,oBAAoB;YACpC,GAAG,CAAC,IAAI,KAAK,OAAO;YACpB,GAAG,CAAC,OAAO,KAAK,OAAO;YACvB,GAAG,CAAC,IAAI,KAAK,IAAI,EACjB,CAAC;YACD,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC;YACvB,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC;QACrB,OAAO,GAAG,CAAC,MAAM,CAAC;IACpB,CAAC;IAED,GAAG,CAAC,OAAe,EAAE,OAAe,EAAE,IAAY,EAAE,MAAmB;QACrE,MAAM,KAAK,GAAe;YACxB,OAAO,EAAE,oBAAoB;YAC7B,IAAI,EAAE,OAAO;YACb,OAAO;YACP,IAAI;YACJ,MAAM;SACP,CAAC;QACF,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;IAChE,CAAC;IAEO,SAAS,CAAC,OAAe;QAC/B,4EAA4E;QAC5E,4EAA4E;QAC5E,oDAAoD;QACpD,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC3E,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,mBAAmB,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACpE,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,IAAI,OAAO,CAAC,CAAC;IACrD,CAAC;CACF;AAED,MAAM,UAAU,eAAe,CAAC,OAAe;IAC7C,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC5B,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC9C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -21,6 +21,15 @@ export interface PackOptions {
21
21
  * Honored only when `embedder` is provided. Default 0.5.
22
22
  */
23
23
  embedWeight?: number;
24
+ /** Enable persistent on-disk parse cache. Default false. */
25
+ cache?: boolean;
26
+ /** Override cache directory. */
27
+ cacheDir?: string;
28
+ /**
29
+ * Multiplicative boost for selecting nodes that share a Louvain community
30
+ * with any seed. Default 0.5. Set to 0 to disable the boost entirely.
31
+ */
32
+ communityBoost?: number;
24
33
  }
25
34
  export interface FileRange {
26
35
  start: number;
@@ -32,6 +41,8 @@ export interface PackedFile {
32
41
  score: number;
33
42
  tokens: number;
34
43
  reasons: string[];
44
+ /** Louvain community labels touched by nodes selected from this file. */
45
+ communities?: number[];
35
46
  }
36
47
  export interface PackResult {
37
48
  files: PackedFile[];
@@ -1 +1 @@
1
- {"version":3,"file":"pack.d.ts","sourceRoot":"","sources":["../../src/select/pack.ts"],"names":[],"mappings":"AAKA,OAAO,EAAoB,KAAK,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAExE,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,qDAAqD;IACrD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8CAA8C;IAC9C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6BAA6B;IAC7B,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,6BAA6B;IAC7B,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB;;;OAGG;IACH,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE;QACL,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CA8FpE"}
1
+ {"version":3,"file":"pack.d.ts","sourceRoot":"","sources":["../../src/select/pack.ts"],"names":[],"mappings":"AAKA,OAAO,EAAoB,KAAK,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAExE,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,qDAAqD;IACrD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8CAA8C;IAC9C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6BAA6B;IAC7B,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,6BAA6B;IAC7B,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB;;;OAGG;IACH,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,4DAA4D;IAC5D,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,gCAAgC;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,yEAAyE;IACzE,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE;QACL,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAsHpE"}
@@ -1,13 +1,13 @@
1
- import { greedySelect, personalizedPageRank } from '../core/index.js';
1
+ import { detectCommunities, greedySelect, personalizedPageRank } from '../core/index.js';
2
2
  import { indexRepo } from '../index/builder.js';
3
3
  import { scoreSeeds } from '../seeds/keyword.js';
4
4
  import { scoreSeedsHybrid } from '../seeds/embedding.js';
5
5
  export async function pack(options) {
6
- const { task, repo, budget, seeds = 8, alpha = 0.85, include, exclude, embedder, embedWeight = 0.5, } = options;
6
+ const { task, repo, budget, seeds = 8, alpha = 0.85, include, exclude, embedder, embedWeight = 0.5, cache, cacheDir, communityBoost = 0.5, } = options;
7
7
  if (budget <= 0)
8
8
  throw new Error('budget must be positive');
9
9
  const walkOpts = { include, exclude };
10
- const { graph, stats } = indexRepo(repo, walkOpts);
10
+ const { graph, stats } = indexRepo(repo, { ...walkOpts, cache, cacheDir });
11
11
  if (graph.order() === 0) {
12
12
  return emptyResult('No supported source files found.', stats.symbols);
13
13
  }
@@ -35,10 +35,15 @@ export async function pack(options) {
35
35
  return emptyResult(`All matching symbols exceed the budget of ${budget} tokens. Try increasing --budget.`, stats.symbols);
36
36
  }
37
37
  const ranks = personalizedPageRank(graph, { seeds: fittedSeeds, alpha });
38
+ // Detect Louvain communities once and pass to greedySelect. Deterministic
39
+ // RNG so results are reproducible across runs (matters for caching tests).
40
+ const communities = communityBoost > 0 ? detectCommunities(graph, { seed: 1 }) : undefined;
38
41
  const selection = greedySelect(graph, {
39
42
  seeds: new Set(fittedSeeds.keys()),
40
43
  ranks,
41
44
  budget,
45
+ communities,
46
+ communityBoost,
42
47
  });
43
48
  const byFile = new Map();
44
49
  for (const entry of selection.entries) {
@@ -46,13 +51,21 @@ export async function pack(options) {
46
51
  if (!data)
47
52
  continue;
48
53
  const file = data.file;
49
- const acc = byFile.get(file) ?? { ranges: [], score: 0, tokens: 0, reasons: [] };
54
+ const acc = byFile.get(file) ?? {
55
+ ranges: [],
56
+ score: 0,
57
+ tokens: 0,
58
+ reasons: [],
59
+ communities: new Set(),
60
+ };
50
61
  if (data.startLine && data.endLine) {
51
62
  acc.ranges.push({ start: data.startLine, end: data.endLine });
52
63
  }
53
64
  acc.score += entry.rank;
54
65
  acc.tokens += entry.tokens;
55
66
  acc.reasons.push(entry.reason);
67
+ if (entry.community !== undefined)
68
+ acc.communities.add(entry.community);
56
69
  byFile.set(file, acc);
57
70
  }
58
71
  const files = [];
@@ -63,6 +76,7 @@ export async function pack(options) {
63
76
  score: acc.score,
64
77
  tokens: acc.tokens,
65
78
  reasons: dedupe(acc.reasons),
79
+ communities: acc.communities.size > 0 ? [...acc.communities].sort((a, b) => a - b) : undefined,
66
80
  });
67
81
  }
68
82
  files.sort((a, b) => b.score - a.score);
@@ -128,6 +142,17 @@ function buildExplain(task, seeds, selection, files, budget, fileCount) {
128
142
  for (const [id, score] of [...seeds].slice(0, 5)) {
129
143
  lines.push(` · ${id} (seed-score ${score.toFixed(3)})`);
130
144
  }
145
+ // Show distinct community labels touched by the selection (if any).
146
+ const communitySet = new Set();
147
+ for (const f of files) {
148
+ for (const c of f.communities ?? [])
149
+ communitySet.add(c);
150
+ }
151
+ if (communitySet.size > 0) {
152
+ lines.push(`touched ${communitySet.size} community${communitySet.size === 1 ? '' : 'ies'}: ${[...communitySet]
153
+ .sort((a, b) => a - b)
154
+ .join(', ')}`);
155
+ }
131
156
  lines.push(`selected ${selection.selected.size} symbols across ${files.length} files` +
132
157
  ` (${selection.tokens} / ${budget} tokens, cut cost ${selection.cutCost.toFixed(1)})`);
133
158
  return lines.join('\n');
@@ -1 +1 @@
1
- {"version":3,"file":"pack.js","sourceRoot":"","sources":["../../src/select/pack.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pack.js","sourceRoot":"","sources":["../../src/select/pack.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mincut-context",
3
- "version": "1.0.0",
3
+ "version": "1.1.0",
4
4
  "description": "Token-minimal context selection for AI coding agents. Builds a symbol graph of your repo and uses personalized PageRank + budget-constrained min-cut to pick the smallest provably-relevant context for any task.",
5
5
  "type": "module",
6
6
  "main": "./dist/adapters/lib/index.js",