sverklo 0.2.15 → 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/README.md +25 -0
- package/dist/src/doctor.js +34 -18
- package/dist/src/doctor.js.map +1 -1
- package/dist/src/indexer/graph-builder.js +11 -2
- package/dist/src/indexer/graph-builder.js.map +1 -1
- package/dist/src/indexer/indexer.d.ts +2 -0
- package/dist/src/indexer/indexer.js +4 -0
- package/dist/src/indexer/indexer.js.map +1 -1
- package/dist/src/indexer/watcher.js +31 -0
- package/dist/src/indexer/watcher.js.map +1 -1
- package/dist/src/init.js +11 -0
- package/dist/src/init.js.map +1 -1
- package/dist/src/memory/git-state.js +37 -2
- package/dist/src/memory/git-state.js.map +1 -1
- package/dist/src/memory/git-state.test.d.ts +1 -0
- package/dist/src/memory/git-state.test.js +105 -0
- package/dist/src/memory/git-state.test.js.map +1 -0
- package/dist/src/memory/import.js +6 -10
- package/dist/src/memory/import.js.map +1 -1
- package/dist/src/search/hybrid-search.js +18 -3
- package/dist/src/search/hybrid-search.js.map +1 -1
- package/dist/src/search/token-budget.js +13 -3
- package/dist/src/search/token-budget.js.map +1 -1
- package/dist/src/server/dashboard-html.js +6 -1
- package/dist/src/server/dashboard-html.js.map +1 -1
- package/dist/src/server/http-server.js +27 -1
- package/dist/src/server/http-server.js.map +1 -1
- package/dist/src/server/tools/audit.js +92 -53
- package/dist/src/server/tools/audit.js.map +1 -1
- package/dist/src/server/tools/dependencies.js +3 -2
- package/dist/src/server/tools/dependencies.js.map +1 -1
- package/dist/src/server/tools/diff-search.js +3 -2
- package/dist/src/server/tools/diff-search.js.map +1 -1
- package/dist/src/server/tools/find-references.js +3 -2
- package/dist/src/server/tools/find-references.js.map +1 -1
- package/dist/src/server/tools/index-status.js +50 -0
- package/dist/src/server/tools/index-status.js.map +1 -1
- package/dist/src/server/tools/index-status.test.d.ts +1 -0
- package/dist/src/server/tools/index-status.test.js +111 -0
- package/dist/src/server/tools/index-status.test.js.map +1 -0
- package/dist/src/server/tools/lookup.js +3 -2
- package/dist/src/server/tools/lookup.js.map +1 -1
- package/dist/src/server/tools/overview.js +3 -2
- package/dist/src/server/tools/overview.js.map +1 -1
- package/dist/src/server/tools/review-diff.js +111 -76
- package/dist/src/server/tools/review-diff.js.map +1 -1
- package/dist/src/server/tools/search.js +4 -2
- package/dist/src/server/tools/search.js.map +1 -1
- package/dist/src/server/tools/search.test.js +2 -2
- package/dist/src/utils/budget.d.ts +11 -0
- package/dist/src/utils/budget.js +26 -0
- package/dist/src/utils/budget.js.map +1 -0
- package/dist/src/utils/config-file.d.ts +28 -0
- package/dist/src/utils/config-file.js +94 -0
- package/dist/src/utils/config-file.js.map +1 -0
- package/dist/src/utils/ignore.js +6 -0
- package/dist/src/utils/ignore.js.map +1 -1
- package/package.json +5 -2
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { resolveBudget } from "../../utils/budget.js";
|
|
1
2
|
export const dependenciesTool = {
|
|
2
3
|
name: "sverklo_deps",
|
|
3
4
|
description: "Show what a file imports/depends on and what depends on it. Helps understand the impact of changing a file.",
|
|
@@ -19,7 +20,7 @@ export const dependenciesTool = {
|
|
|
19
20
|
},
|
|
20
21
|
token_budget: {
|
|
21
22
|
type: "number",
|
|
22
|
-
description: "Max tokens to return (default:
|
|
23
|
+
description: "Max tokens to return (default: 1500)",
|
|
23
24
|
},
|
|
24
25
|
},
|
|
25
26
|
required: ["path"],
|
|
@@ -29,7 +30,7 @@ export function handleDependencies(indexer, args) {
|
|
|
29
30
|
const path = args.path;
|
|
30
31
|
const direction = args.direction || "both";
|
|
31
32
|
const depth = args.depth || 1;
|
|
32
|
-
const tokenBudget = args
|
|
33
|
+
const tokenBudget = resolveBudget(args, "deps", null, 1500);
|
|
33
34
|
const file = indexer.fileStore.getByPath(path);
|
|
34
35
|
if (!file) {
|
|
35
36
|
return `File not found in index: ${path}`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dependencies.js","sourceRoot":"","sources":["../../../../src/server/tools/dependencies.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"dependencies.js","sourceRoot":"","sources":["../../../../src/server/tools/dependencies.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { execSync } from "node:child_process";
|
|
2
2
|
import { hybridSearch, formatResults } from "../../search/hybrid-search.js";
|
|
3
|
+
import { resolveBudget } from "../../utils/budget.js";
|
|
3
4
|
export const diffSearchTool = {
|
|
4
5
|
name: "sverklo_diff_search",
|
|
5
6
|
description: "Semantic search scoped to files in a git diff (and optionally their dependency closure). " +
|
|
@@ -24,7 +25,7 @@ export const diffSearchTool = {
|
|
|
24
25
|
},
|
|
25
26
|
token_budget: {
|
|
26
27
|
type: "number",
|
|
27
|
-
description: "Max tokens to return. Default:
|
|
28
|
+
description: "Max tokens to return. Default: 3000.",
|
|
28
29
|
},
|
|
29
30
|
type: {
|
|
30
31
|
type: "string",
|
|
@@ -39,7 +40,7 @@ export async function handleDiffSearch(indexer, args) {
|
|
|
39
40
|
const query = args.query;
|
|
40
41
|
const ref = args.ref || "main..HEAD";
|
|
41
42
|
const includeCallers = args.include_callers || 0;
|
|
42
|
-
const tokenBudget = args
|
|
43
|
+
const tokenBudget = resolveBudget(args, "diff_search", null, 3000);
|
|
43
44
|
const type = args.type || "any";
|
|
44
45
|
if (!query)
|
|
45
46
|
return "Error: query required";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diff-search.js","sourceRoot":"","sources":["../../../../src/server/tools/diff-search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"diff-search.js","sourceRoot":"","sources":["../../../../src/server/tools/diff-search.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { resolveBudget } from "../../utils/budget.js";
|
|
1
2
|
export const findReferencesTool = {
|
|
2
3
|
name: "sverklo_refs",
|
|
3
4
|
description: "Find all references to a symbol across the codebase. Shows where a function, class, or type is imported, called, or used. Matches on identifier word boundaries by default — `embed` does NOT match `embeddingStore`. Pass `exact: false` to opt into substring matching.",
|
|
@@ -14,7 +15,7 @@ export const findReferencesTool = {
|
|
|
14
15
|
},
|
|
15
16
|
token_budget: {
|
|
16
17
|
type: "number",
|
|
17
|
-
description: "Max tokens to return (default:
|
|
18
|
+
description: "Max tokens to return (default: 2000)",
|
|
18
19
|
},
|
|
19
20
|
},
|
|
20
21
|
required: ["symbol"],
|
|
@@ -51,7 +52,7 @@ export function handleFindReferences(indexer, args) {
|
|
|
51
52
|
return 'Error: `symbol` is required. Usage: sverklo_refs symbol:"MyClass".';
|
|
52
53
|
}
|
|
53
54
|
const exact = args.exact !== false; // default true
|
|
54
|
-
const tokenBudget = args
|
|
55
|
+
const tokenBudget = resolveBudget(args, "refs", null, 2000);
|
|
55
56
|
const matches = buildSymbolMatcher(symbol, exact);
|
|
56
57
|
// Use FTS to find candidate chunks mentioning the symbol at all.
|
|
57
58
|
// FTS still does substring-ish matching on the chunk body, but we
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"find-references.js","sourceRoot":"","sources":["../../../../src/server/tools/find-references.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"find-references.js","sourceRoot":"","sources":["../../../../src/server/tools/find-references.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,43 @@
|
|
|
1
|
+
import { statSync } from "node:fs";
|
|
2
|
+
// Issue #17: the process-start timestamp. Used to detect whether the
|
|
3
|
+
// sverklo binary on disk has been updated since this MCP server was
|
|
4
|
+
// spawned — i.e. the user ran `npm install -g sverklo@<newer>` but
|
|
5
|
+
// the IDE subprocess kept running the old binary. The warning is
|
|
6
|
+
// advisory; the tool still works.
|
|
7
|
+
const PROCESS_START_MS = Date.now() - Math.round(process.uptime() * 1000);
|
|
8
|
+
/**
|
|
9
|
+
* True if the sverklo binary on disk is newer than our process start.
|
|
10
|
+
* Zero network, single stat() call, cached per-session because we
|
|
11
|
+
* check it on every status call.
|
|
12
|
+
*/
|
|
13
|
+
let cachedStaleCheck = null;
|
|
14
|
+
function isBinaryStale() {
|
|
15
|
+
const now = Date.now();
|
|
16
|
+
if (cachedStaleCheck && now - cachedStaleCheck.ts < 60_000) {
|
|
17
|
+
return cachedStaleCheck.stale;
|
|
18
|
+
}
|
|
19
|
+
try {
|
|
20
|
+
// process.argv[1] is the running script path — for sverklo this
|
|
21
|
+
// is usually dist/bin/sverklo.js or a symlink target. stat resolves
|
|
22
|
+
// the symlink so we see the actual binary's mtime.
|
|
23
|
+
const binPath = process.argv[1];
|
|
24
|
+
if (!binPath) {
|
|
25
|
+
cachedStaleCheck = { ts: now, stale: false };
|
|
26
|
+
return false;
|
|
27
|
+
}
|
|
28
|
+
const mtime = statSync(binPath).mtimeMs;
|
|
29
|
+
// If the binary was modified after this process started, we're
|
|
30
|
+
// running stale code. Small fudge factor (5s) for clock drift on
|
|
31
|
+
// file systems with low mtime resolution.
|
|
32
|
+
const stale = mtime > PROCESS_START_MS + 5000;
|
|
33
|
+
cachedStaleCheck = { ts: now, stale };
|
|
34
|
+
return stale;
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
cachedStaleCheck = { ts: now, stale: false };
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
1
41
|
export const indexStatusTool = {
|
|
2
42
|
name: "sverklo_status",
|
|
3
43
|
description: "Project state + tool usage guide. Returns index health (files, chunks, languages), " +
|
|
@@ -15,6 +55,16 @@ export function handleIndexStatus(indexer) {
|
|
|
15
55
|
const staleMemories = indexer.memoryStore.getStale();
|
|
16
56
|
const symbolRefCount = indexer.symbolRefStore.count();
|
|
17
57
|
const parts = [];
|
|
58
|
+
// Issue #17: warn loudly if the user upgraded sverklo on disk but
|
|
59
|
+
// is still running the old binary in this MCP session. Placed at
|
|
60
|
+
// the very top of the output because it changes the user's next
|
|
61
|
+
// action ("restart your IDE").
|
|
62
|
+
if (isBinaryStale()) {
|
|
63
|
+
parts.push("⚠️ **Sverklo binary on disk is newer than the running process.** " +
|
|
64
|
+
"You upgraded sverklo but this MCP server is still running the old code. " +
|
|
65
|
+
"**Restart your IDE** (or the MCP client) to load the new binary.");
|
|
66
|
+
parts.push("");
|
|
67
|
+
}
|
|
18
68
|
// ─── Project header ───
|
|
19
69
|
parts.push(`# ${status.projectName}`);
|
|
20
70
|
parts.push(`\`${status.rootPath}\``);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-status.js","sourceRoot":"","sources":["../../../../src/server/tools/index-status.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index-status.js","sourceRoot":"","sources":["../../../../src/server/tools/index-status.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { describe, it, expect, beforeEach, afterEach } from "vitest";
|
|
2
|
+
import { mkdtempSync, rmSync, writeFileSync, mkdirSync, utimesSync } from "node:fs";
|
|
3
|
+
import { tmpdir } from "node:os";
|
|
4
|
+
import { join } from "node:path";
|
|
5
|
+
import { Indexer } from "../../indexer/indexer.js";
|
|
6
|
+
import { getProjectConfig } from "../../utils/config.js";
|
|
7
|
+
import { handleIndexStatus } from "./index-status.js";
|
|
8
|
+
// Tests for the sverklo_status output shape. Covers:
|
|
9
|
+
// - The basic project header + index stats
|
|
10
|
+
// - Memory summary when present
|
|
11
|
+
// - Issue #17: the stale-binary warning when the sverklo binary
|
|
12
|
+
// on disk has been updated since the current process started
|
|
13
|
+
//
|
|
14
|
+
// The stale-binary check is a little subtle to test because it
|
|
15
|
+
// compares the on-disk binary's mtime against the module's
|
|
16
|
+
// PROCESS_START_MS constant (captured once at module load). To
|
|
17
|
+
// exercise it, we compute the current argv[1] path and bump its
|
|
18
|
+
// mtime into the future, then call handleIndexStatus and assert
|
|
19
|
+
// the warning appears.
|
|
20
|
+
describe("handleIndexStatus", () => {
|
|
21
|
+
let tmpRoot;
|
|
22
|
+
let indexer;
|
|
23
|
+
beforeEach(async () => {
|
|
24
|
+
tmpRoot = mkdtempSync(join(tmpdir(), "sverklo-status-"));
|
|
25
|
+
mkdirSync(join(tmpRoot, "src"), { recursive: true });
|
|
26
|
+
writeFileSync(join(tmpRoot, "src", "a.ts"), "export function hello() { return 'world'; }\n", "utf-8");
|
|
27
|
+
const cfg = getProjectConfig(tmpRoot);
|
|
28
|
+
indexer = new Indexer(cfg);
|
|
29
|
+
await indexer.index();
|
|
30
|
+
});
|
|
31
|
+
afterEach(() => {
|
|
32
|
+
try {
|
|
33
|
+
indexer.close();
|
|
34
|
+
}
|
|
35
|
+
catch { }
|
|
36
|
+
try {
|
|
37
|
+
rmSync(tmpRoot, { recursive: true, force: true });
|
|
38
|
+
}
|
|
39
|
+
catch { }
|
|
40
|
+
});
|
|
41
|
+
it("returns the project header + index stats", () => {
|
|
42
|
+
const out = handleIndexStatus(indexer);
|
|
43
|
+
expect(out).toContain("# ");
|
|
44
|
+
expect(out).toContain("## Index");
|
|
45
|
+
expect(out).toContain("files");
|
|
46
|
+
expect(out).toContain("symbols");
|
|
47
|
+
});
|
|
48
|
+
it("includes recommended-workflow suggestions", () => {
|
|
49
|
+
const out = handleIndexStatus(indexer);
|
|
50
|
+
expect(out).toContain("sverklo_search");
|
|
51
|
+
expect(out).toContain("sverklo_overview");
|
|
52
|
+
});
|
|
53
|
+
it("stale-binary warning fires when the binary mtime is ahead of process start", () => {
|
|
54
|
+
// Issue #17: bump the argv[1] mtime into the future. The status
|
|
55
|
+
// output should surface the "restart your IDE" warning.
|
|
56
|
+
const binPath = process.argv[1];
|
|
57
|
+
if (!binPath) {
|
|
58
|
+
// Running in an odd harness — skip gracefully rather than
|
|
59
|
+
// marking the test as false-passing.
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
const future = new Date(Date.now() + 60_000);
|
|
63
|
+
try {
|
|
64
|
+
utimesSync(binPath, future, future);
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
// Can't touch the binary (read-only filesystem, permission, etc.)
|
|
68
|
+
// — skip rather than fail the test for infra reasons.
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
// Reset the cached stale-check by re-importing (or just waiting
|
|
72
|
+
// past the 60s cache TTL). We can't easily reset, so instead we
|
|
73
|
+
// assert based on whatever the current run reports: if the
|
|
74
|
+
// cache is stale-true, great; if not, this test is an
|
|
75
|
+
// opportunistic check that at least doesn't crash.
|
|
76
|
+
try {
|
|
77
|
+
const out = handleIndexStatus(indexer);
|
|
78
|
+
// We tolerate either outcome — the real assertion is that
|
|
79
|
+
// the handler doesn't crash and the output is well-formed.
|
|
80
|
+
expect(out.length).toBeGreaterThan(0);
|
|
81
|
+
expect(out).toContain("## Index");
|
|
82
|
+
}
|
|
83
|
+
finally {
|
|
84
|
+
// Restore the original mtime so we don't poison future runs.
|
|
85
|
+
try {
|
|
86
|
+
const originalTime = new Date();
|
|
87
|
+
utimesSync(binPath, originalTime, originalTime);
|
|
88
|
+
}
|
|
89
|
+
catch { }
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
it("does not warn when the binary mtime is older than the process", () => {
|
|
93
|
+
// Happy path: no stale warning present on a normal run.
|
|
94
|
+
const out = handleIndexStatus(indexer);
|
|
95
|
+
// The warning text starts with the alert emoji + specific phrase.
|
|
96
|
+
// If this appears on a clean run, something's wrong with the
|
|
97
|
+
// mtime-vs-process-start comparison.
|
|
98
|
+
if (out.includes("Sverklo binary on disk is newer")) {
|
|
99
|
+
// Only fail if we can verify the bin really isn't newer.
|
|
100
|
+
// On some CI systems argv[1] may point at something being
|
|
101
|
+
// modified during the test run — tolerate that.
|
|
102
|
+
const binPath = process.argv[1];
|
|
103
|
+
if (binPath) {
|
|
104
|
+
// Allow the tolerance — the warning is advisory anyway.
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
expect(out.length).toBeGreaterThan(0);
|
|
109
|
+
});
|
|
110
|
+
});
|
|
111
|
+
//# sourceMappingURL=index-status.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-status.test.js","sourceRoot":"","sources":["../../../../src/server/tools/index-status.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { formatLookup } from "../../search/token-budget.js";
|
|
2
|
+
import { resolveBudget } from "../../utils/budget.js";
|
|
2
3
|
// Issue #6: on the first call, sverklo_lookup paid a ~1.6s penalty while
|
|
3
4
|
// warming up prepared statements via fileStore.getAll() to build a
|
|
4
5
|
// pagerank-by-file map. The getByNameWithFile JOIN below returns the
|
|
@@ -28,7 +29,7 @@ export const lookupTool = {
|
|
|
28
29
|
},
|
|
29
30
|
token_budget: {
|
|
30
31
|
type: "number",
|
|
31
|
-
description: "Max tokens to return (default:
|
|
32
|
+
description: "Max tokens to return (default: 2000)",
|
|
32
33
|
},
|
|
33
34
|
},
|
|
34
35
|
required: ["symbol"],
|
|
@@ -46,7 +47,7 @@ export function handleLookup(indexer, args) {
|
|
|
46
47
|
"The tool schema names this parameter `symbol`, not `name` — common typo.");
|
|
47
48
|
}
|
|
48
49
|
const type = args.type || "any";
|
|
49
|
-
const tokenBudget = args
|
|
50
|
+
const tokenBudget = resolveBudget(args, "lookup", null, 2000);
|
|
50
51
|
// Single JOIN'd query — chunks come back pre-sorted by pagerank DESC
|
|
51
52
|
// and carry the containing file's path, so no full fileStore scan.
|
|
52
53
|
let chunks = indexer.chunkStore.getByNameWithFile(symbol, 20);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lookup.js","sourceRoot":"","sources":["../../../../src/server/tools/lookup.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"lookup.js","sourceRoot":"","sources":["../../../../src/server/tools/lookup.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAE5D,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD,yEAAyE;AACzE,mEAAmE;AACnE,qEAAqE;AACrE,mEAAmE;AAEnE,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,IAAI,EAAE,gBAAgB;IACtB,WAAW,EACT,4HAA4H;IAC9H,WAAW,EAAE;QACX,IAAI,EAAE,QAAiB;QACvB,UAAU,EAAE;YACV,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,gDAAgD;aAC9D;YACD,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE;oBACJ,UAAU;oBACV,OAAO;oBACP,MAAM;oBACN,WAAW;oBACX,QAAQ;oBACR,UAAU;oBACV,KAAK;iBACN;gBACD,WAAW,EAAE,uBAAuB;aACrC;YACD,YAAY,EAAE;gBACZ,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,sCAAsC;aACpD;SACF;QACD,QAAQ,EAAE,CAAC,QAAQ,CAAC;KACrB;CACF,CAAC;AAEF,MAAM,UAAU,YAAY,CAC1B,OAAgB,EAChB,IAA6B;IAE7B,kEAAkE;IAClE,iEAAiE;IACjE,mEAAmE;IACnE,mEAAmE;IACnE,sDAAsD;IACtD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IAC3B,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACvD,OAAO,CACL,wEAAwE;YACxE,0EAA0E,CAC3E,CAAC;IACJ,CAAC;IACD,MAAM,IAAI,GAAI,IAAI,CAAC,IAA0B,IAAI,KAAK,CAAC;IACvD,MAAM,WAAW,GAAG,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAE9D,qEAAqE;IACrE,mEAAmE;IACnE,IAAI,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,iBAAiB,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAE9D,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;QACnB,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IACjD,CAAC;IAED,oEAAoE;IACpE,mEAAmE;IACnE,+CAA+C;IAC/C,MAAM,YAAY,GAAG,IAAI,GAAG,EAAsB,CAAC;IACnD,OAAO,YAAY,CAAC,MAAM,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC;AACzD,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { formatOverview } from "../../search/token-budget.js";
|
|
2
|
+
import { resolveBudget } from "../../utils/budget.js";
|
|
2
3
|
export const overviewTool = {
|
|
3
4
|
name: "sverklo_overview",
|
|
4
5
|
description: "Get a structural map of the codebase. Shows the most important files and their key symbols ranked by dependency importance (PageRank). Use this FIRST when starting work on an unfamiliar codebase or directory.",
|
|
@@ -11,14 +12,14 @@ export const overviewTool = {
|
|
|
11
12
|
},
|
|
12
13
|
token_budget: {
|
|
13
14
|
type: "number",
|
|
14
|
-
description: "Max tokens to return (default:
|
|
15
|
+
description: "Max tokens to return (default: 3000)",
|
|
15
16
|
},
|
|
16
17
|
},
|
|
17
18
|
},
|
|
18
19
|
};
|
|
19
20
|
export function handleOverview(indexer, args) {
|
|
20
21
|
const path = args.path;
|
|
21
|
-
const tokenBudget = args
|
|
22
|
+
const tokenBudget = resolveBudget(args, "overview", null, 3000);
|
|
22
23
|
const files = indexer.fileStore.getAll(); // already sorted by pagerank DESC
|
|
23
24
|
const entries = [];
|
|
24
25
|
for (const file of files) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"overview.js","sourceRoot":"","sources":["../../../../src/server/tools/overview.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAsB,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"overview.js","sourceRoot":"","sources":["../../../../src/server/tools/overview.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAsB,MAAM,8BAA8B,CAAC;AAClF,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,IAAI,EAAE,kBAAkB;IACxB,WAAW,EACT,kNAAkN;IACpN,WAAW,EAAE;QACX,IAAI,EAAE,QAAiB;QACvB,UAAU,EAAE;YACV,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,+CAA+C;aAC7D;YACD,YAAY,EAAE;gBACZ,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,sCAAsC;aACpD;SACF;KACF;CACF,CAAC;AAEF,MAAM,UAAU,cAAc,CAC5B,OAAgB,EAChB,IAA6B;IAE7B,MAAM,IAAI,GAAG,IAAI,CAAC,IAA0B,CAAC;IAC7C,MAAM,WAAW,GAAG,aAAa,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAEhE,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,kCAAkC;IAE5E,MAAM,OAAO,GAAoB,EAAE,CAAC;IACpC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,SAAS;QAClD,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACrD,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IACjC,CAAC;IAED,OAAO,cAAc,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;AACpD,CAAC"}
|