@nanonets/graft 0.2.0 → 0.3.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/dist/ask/ask.d.ts +7 -0
- package/dist/ask/ask.d.ts.map +1 -1
- package/dist/ask/ask.js +55 -4
- package/dist/ask/ask.js.map +1 -1
- package/dist/claude/format.d.ts +24 -0
- package/dist/claude/format.d.ts.map +1 -0
- package/dist/claude/format.js +86 -0
- package/dist/claude/format.js.map +1 -0
- package/dist/claude/hooks.d.ts +3 -0
- package/dist/claude/hooks.d.ts.map +1 -0
- package/dist/claude/hooks.js +108 -0
- package/dist/claude/hooks.js.map +1 -0
- package/dist/claude/init.d.ts +11 -0
- package/dist/claude/init.d.ts.map +1 -0
- package/dist/claude/init.js +34 -0
- package/dist/claude/init.js.map +1 -0
- package/dist/claude/settings-merge.d.ts +7 -0
- package/dist/claude/settings-merge.d.ts.map +1 -0
- package/dist/claude/settings-merge.js +40 -0
- package/dist/claude/settings-merge.js.map +1 -0
- package/dist/claude/shim-template.d.ts +3 -0
- package/dist/claude/shim-template.d.ts.map +1 -0
- package/dist/claude/shim-template.js +18 -0
- package/dist/claude/shim-template.js.map +1 -0
- package/dist/claude/state.d.ts +29 -0
- package/dist/claude/state.d.ts.map +1 -0
- package/dist/claude/state.js +83 -0
- package/dist/claude/state.js.map +1 -0
- package/dist/claude/stats.d.ts +5 -0
- package/dist/claude/stats.d.ts.map +1 -0
- package/dist/claude/stats.js +23 -0
- package/dist/claude/stats.js.map +1 -0
- package/dist/claude/statusline.d.ts +12 -0
- package/dist/claude/statusline.d.ts.map +1 -0
- package/dist/claude/statusline.js +40 -0
- package/dist/claude/statusline.js.map +1 -0
- package/dist/claude/sync-run.d.ts +3 -0
- package/dist/claude/sync-run.d.ts.map +1 -0
- package/dist/claude/sync-run.js +38 -0
- package/dist/claude/sync-run.js.map +1 -0
- package/dist/cli.d.ts +7 -5
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +49 -10
- package/dist/cli.js.map +1 -1
- package/dist/engine.d.ts +3 -0
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +2 -1
- package/dist/engine.js.map +1 -1
- package/dist/graph/build.d.ts +2 -0
- package/dist/graph/build.d.ts.map +1 -1
- package/dist/graph/build.js +1 -0
- package/dist/graph/build.js.map +1 -1
- package/dist/graph/cards.d.ts.map +1 -1
- package/dist/graph/cards.js +3 -5
- package/dist/graph/cards.js.map +1 -1
- package/dist/graph/enrich.d.ts +3 -1
- package/dist/graph/enrich.d.ts.map +1 -1
- package/dist/graph/enrich.js +30 -17
- package/dist/graph/enrich.js.map +1 -1
- package/package.json +6 -3
- package/scripts/build-viewer.mjs +28 -0
- package/scripts/postinstall.mjs +11 -0
package/dist/graph/enrich.d.ts
CHANGED
|
@@ -24,7 +24,9 @@ import type { NodeV1 } from "./types.js";
|
|
|
24
24
|
export interface EnrichOptions {
|
|
25
25
|
/** When present, (re)compute meaning for stale/pending nodes. Absent → cache only. */
|
|
26
26
|
summarizer?: CruxSummarizer;
|
|
27
|
-
/**
|
|
27
|
+
/** Max files summarized in parallel (each is one LLM call). Default {@link DEFAULT_CONCURRENCY}. */
|
|
28
|
+
concurrency?: number;
|
|
29
|
+
/** Progress is reported per file (one LLM call each), as files finish — not per node. */
|
|
28
30
|
onProgress?: (info: {
|
|
29
31
|
index: number;
|
|
30
32
|
total: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"enrich.d.ts","sourceRoot":"","sources":["../../src/graph/enrich.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,KAAK,EAAE,cAAc,EAAqB,MAAM,eAAe,CAAC;AACvE,OAAO,KAAK,EAAQ,MAAM,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"enrich.d.ts","sourceRoot":"","sources":["../../src/graph/enrich.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,KAAK,EAAE,cAAc,EAAqB,MAAM,eAAe,CAAC;AACvE,OAAO,KAAK,EAAQ,MAAM,EAAE,MAAM,YAAY,CAAC;AAQ/C,MAAM,WAAW,aAAa;IAC5B,sFAAsF;IACtF,UAAU,CAAC,EAAE,cAAc,CAAC;IAC5B,oGAAoG;IACpG,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yFAAyF;IACzF,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;CAC7E;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,wBAAsB,WAAW,CAC/B,KAAK,EAAE,MAAM,EAAE,EACf,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAC1B,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5B,IAAI,GAAE,aAAkB,GACvB,OAAO,CAAC,WAAW,CAAC,CAmFtB"}
|
package/dist/graph/enrich.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
/** Cap on the stored crux: an over-long pick is trimmed to its leading slice. */
|
|
2
2
|
const MAX_CRUX_LINES = 12;
|
|
3
|
+
/** Files summarized at once. Each is an independent LLM call; order is preserved. */
|
|
4
|
+
const DEFAULT_CONCURRENCY = 5;
|
|
3
5
|
export async function enrichGraph(nodes, prior, sources, opts = {}) {
|
|
4
6
|
const stats = { cached: 0, computed: 0, stale: 0, pending: 0, errors: [] };
|
|
5
7
|
// Which nodes actually need an LLM call this run (after cache carry-over).
|
|
@@ -41,34 +43,30 @@ export async function enrichGraph(nodes, prior, sources, opts = {}) {
|
|
|
41
43
|
else
|
|
42
44
|
byFile.set(node.path, [node]);
|
|
43
45
|
}
|
|
46
|
+
// Each file is an independent LLM call, so run several in flight at once —
|
|
47
|
+
// the slow part is the round-trip, not local work. Files never share state:
|
|
48
|
+
// one file's nodes and source stand alone, so parallelism can't corrupt the
|
|
49
|
+
// per-file line numbers the crux slicing depends on. `stats` mutation is safe
|
|
50
|
+
// because JS is single-threaded — increments run between awaits, never during.
|
|
51
|
+
const summarizer = opts.summarizer;
|
|
44
52
|
const files = [...byFile.keys()];
|
|
45
|
-
|
|
46
|
-
|
|
53
|
+
const limit = Math.max(1, opts.concurrency ?? DEFAULT_CONCURRENCY);
|
|
54
|
+
let done = 0;
|
|
55
|
+
await mapWithConcurrency(files, limit, async (path) => {
|
|
47
56
|
const fileNodes = byFile.get(path);
|
|
48
57
|
const source = sources.get(path);
|
|
49
58
|
const lineCount = source.split("\n").length;
|
|
50
|
-
opts.onProgress?.({ index: i, total: files.length, node: path });
|
|
51
59
|
const refs = fileNodes.map((n) => {
|
|
52
60
|
const [startLine, endLine] = spanLines(n.span, lineCount);
|
|
53
61
|
return { id: n.id, kind: n.kind, signature: n.signature, startLine, endLine };
|
|
54
62
|
});
|
|
55
|
-
const { results, error } = await collectFileCrux(
|
|
63
|
+
const { results, error } = await collectFileCrux(summarizer, path, source, refs);
|
|
56
64
|
if (error)
|
|
57
65
|
stats.errors.push(`${path}: ${error}`);
|
|
58
|
-
if (results.size === 0) {
|
|
59
|
-
// whole-file call failed: leave every node as-is (stale hint or pending).
|
|
60
|
-
for (const node of fileNodes) {
|
|
61
|
-
if (node.summary_state === "stale")
|
|
62
|
-
stats.stale++;
|
|
63
|
-
else
|
|
64
|
-
stats.pending++;
|
|
65
|
-
}
|
|
66
|
-
continue;
|
|
67
|
-
}
|
|
68
66
|
for (const node of fileNodes) {
|
|
69
|
-
const r = results.get(node.id);
|
|
67
|
+
const r = results.size > 0 ? results.get(node.id) : undefined;
|
|
70
68
|
if (!r) {
|
|
71
|
-
// model skipped this symbol
|
|
69
|
+
// whole-file call failed, or the model skipped this symbol: keep what it had.
|
|
72
70
|
if (node.summary_state === "stale")
|
|
73
71
|
stats.stale++;
|
|
74
72
|
else
|
|
@@ -80,9 +78,24 @@ export async function enrichGraph(nodes, prior, sources, opts = {}) {
|
|
|
80
78
|
node.summary_state = "ready";
|
|
81
79
|
stats.computed++;
|
|
82
80
|
}
|
|
83
|
-
|
|
81
|
+
// Report on completion so the counter climbs monotonically under concurrency.
|
|
82
|
+
opts.onProgress?.({ index: done++, total: files.length, node: path });
|
|
83
|
+
});
|
|
84
84
|
return stats;
|
|
85
85
|
}
|
|
86
|
+
/** Run `fn` over `items` with at most `limit` in flight, preserving result order. */
|
|
87
|
+
async function mapWithConcurrency(items, limit, fn) {
|
|
88
|
+
const results = new Array(items.length);
|
|
89
|
+
let next = 0;
|
|
90
|
+
const workers = Array.from({ length: Math.min(limit, items.length) }, async () => {
|
|
91
|
+
while (next < items.length) {
|
|
92
|
+
const i = next++;
|
|
93
|
+
results[i] = await fn(items[i], i);
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
await Promise.all(workers);
|
|
97
|
+
return results;
|
|
98
|
+
}
|
|
86
99
|
/**
|
|
87
100
|
* Describe every requested definition in a file, re-asking for any the model
|
|
88
101
|
* omits (it sometimes drops entries from a batch). Returns whatever it collected
|
package/dist/graph/enrich.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"enrich.js","sourceRoot":"","sources":["../../src/graph/enrich.ts"],"names":[],"mappings":"AAwBA,iFAAiF;AACjF,MAAM,cAAc,GAAG,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"enrich.js","sourceRoot":"","sources":["../../src/graph/enrich.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nanonets/graft",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "Build a repo's context graph as a folder of linked markdown files that live in the repo and stay in sync with the code through git.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ai",
|
|
@@ -30,13 +30,15 @@
|
|
|
30
30
|
".": {
|
|
31
31
|
"types": "./dist/index.d.ts",
|
|
32
32
|
"import": "./dist/index.js"
|
|
33
|
-
}
|
|
33
|
+
},
|
|
34
|
+
"./package.json": "./package.json"
|
|
34
35
|
},
|
|
35
36
|
"bin": {
|
|
36
37
|
"graft": "dist/cli.js"
|
|
37
38
|
},
|
|
38
39
|
"files": [
|
|
39
40
|
"dist",
|
|
41
|
+
"scripts",
|
|
40
42
|
"README.md",
|
|
41
43
|
"LICENSE"
|
|
42
44
|
],
|
|
@@ -47,7 +49,8 @@
|
|
|
47
49
|
"bench": "tsx bench/run.ts",
|
|
48
50
|
"test": "node --import tsx --test test/*.test.ts",
|
|
49
51
|
"prepare": "npm run build",
|
|
50
|
-
"prepublishOnly": "npm run build"
|
|
52
|
+
"prepublishOnly": "npm run build",
|
|
53
|
+
"postinstall": "node scripts/postinstall.mjs"
|
|
51
54
|
},
|
|
52
55
|
"engines": {
|
|
53
56
|
"node": ">=20"
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bundles the viewer into dist/viewer/ (app.js via esbuild + copied static
|
|
3
|
+
* assets). Runs as part of `npm run build`; the bundle ships in the package
|
|
4
|
+
* so `graft viz` needs no install or build step at runtime.
|
|
5
|
+
*/
|
|
6
|
+
import { build } from "esbuild";
|
|
7
|
+
import { mkdirSync, copyFileSync } from "node:fs";
|
|
8
|
+
import { dirname, join } from "node:path";
|
|
9
|
+
import { fileURLToPath } from "node:url";
|
|
10
|
+
|
|
11
|
+
const root = dirname(dirname(fileURLToPath(import.meta.url)));
|
|
12
|
+
const outDir = join(root, "dist", "viewer");
|
|
13
|
+
mkdirSync(outDir, { recursive: true });
|
|
14
|
+
|
|
15
|
+
await build({
|
|
16
|
+
entryPoints: [join(root, "viewer", "main.ts")],
|
|
17
|
+
bundle: true,
|
|
18
|
+
minify: true,
|
|
19
|
+
format: "esm",
|
|
20
|
+
target: "es2022",
|
|
21
|
+
outfile: join(outDir, "app.js"),
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
for (const asset of ["index.html", "style.css"]) {
|
|
25
|
+
copyFileSync(join(root, "viewer", asset), join(outDir, asset));
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
console.log("viewer bundle → dist/viewer/");
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// Prints a one-line nudge after install. Never fails the install.
|
|
2
|
+
try {
|
|
3
|
+
if (process.env.CI) process.exit(0);
|
|
4
|
+
const { existsSync } = await import('node:fs');
|
|
5
|
+
const { join } = await import('node:path');
|
|
6
|
+
const dir = process.env.INIT_CWD || process.cwd();
|
|
7
|
+
if (existsSync(join(dir, '.claude', 'helpers', 'graft-statusline.cjs'))) process.exit(0);
|
|
8
|
+
console.log('\n Graft installed. Run `npx graft init` to enable the Claude Code integration (statusline + hooks + auto-sync).\n');
|
|
9
|
+
} catch {
|
|
10
|
+
/* never fail an install */
|
|
11
|
+
}
|