sverklo 0.2.6 → 0.2.8
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 +18 -0
- package/dist/src/doctor.js +57 -0
- package/dist/src/doctor.js.map +1 -1
- package/dist/src/indexer/indexer.d.ts +13 -0
- package/dist/src/indexer/indexer.js +41 -0
- package/dist/src/indexer/indexer.js.map +1 -1
- package/dist/src/indexer/parser.js +43 -2
- package/dist/src/indexer/parser.js.map +1 -1
- package/dist/src/init.js +36 -0
- package/dist/src/init.js.map +1 -1
- package/dist/src/search/hybrid-search.d.ts +3 -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 +20 -2
- package/dist/src/search/token-budget.js.map +1 -1
- package/dist/src/server/mcp-server.js +27 -23
- package/dist/src/server/mcp-server.js.map +1 -1
- package/dist/src/server/tools/ast-grep.js +4 -13
- package/dist/src/server/tools/ast-grep.js.map +1 -1
- package/dist/src/server/tools/audit.js +18 -7
- package/dist/src/server/tools/audit.js.map +1 -1
- package/dist/src/server/tools/diff-search.d.ts +33 -0
- package/dist/src/server/tools/diff-search.js +121 -0
- package/dist/src/server/tools/diff-search.js.map +1 -0
- package/dist/src/server/tools/impact.js +1 -4
- package/dist/src/server/tools/impact.js.map +1 -1
- package/dist/src/server/tools/index-status.js +38 -0
- package/dist/src/server/tools/index-status.js.map +1 -1
- package/dist/src/server/tools/remember.js +7 -19
- package/dist/src/server/tools/remember.js.map +1 -1
- package/dist/src/server/tools/review-diff.d.ts +27 -0
- package/dist/src/server/tools/review-diff.js +414 -0
- package/dist/src/server/tools/review-diff.js.map +1 -0
- package/dist/src/server/tools/test-map.d.ts +19 -0
- package/dist/src/server/tools/test-map.js +227 -0
- package/dist/src/server/tools/test-map.js.map +1 -0
- package/dist/src/server/tools/wakeup.js +1 -3
- package/dist/src/server/tools/wakeup.js.map +1 -1
- package/package.json +3 -2
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
import { execSync } from "node:child_process";
|
|
2
|
+
import { basename, dirname, join } from "node:path";
|
|
3
|
+
export const testMapTool = {
|
|
4
|
+
name: "sverklo_test_map",
|
|
5
|
+
description: "Map a git diff to its test coverage. Given a ref/range, lists which tests likely cover " +
|
|
6
|
+
"each changed source file (via name heuristics + import graph), flags changed source files " +
|
|
7
|
+
"with NO matching tests, and shows which test files were modified in the diff. Use this " +
|
|
8
|
+
"during MR/PR review to answer 'what tests should I run?' and 'is this change tested?' " +
|
|
9
|
+
"without grepping the whole repo. Coverage is heuristic — sverklo doesn't run code, so " +
|
|
10
|
+
"treat results as candidates, not ground truth.",
|
|
11
|
+
inputSchema: {
|
|
12
|
+
type: "object",
|
|
13
|
+
properties: {
|
|
14
|
+
ref: {
|
|
15
|
+
type: "string",
|
|
16
|
+
description: "Git ref or range. Default: main..HEAD",
|
|
17
|
+
},
|
|
18
|
+
include_importers: {
|
|
19
|
+
type: "boolean",
|
|
20
|
+
description: "Also surface test files that import the changed file via the dependency graph (not just name matches). Default: true.",
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
},
|
|
24
|
+
};
|
|
25
|
+
// Filename patterns that indicate a test file across common ecosystems.
|
|
26
|
+
// Kept regex-light so additions are easy.
|
|
27
|
+
const TEST_FILE_PATTERNS = [
|
|
28
|
+
/\.test\.[jt]sx?$/,
|
|
29
|
+
/\.spec\.[jt]sx?$/,
|
|
30
|
+
/(^|\/)__tests__\//,
|
|
31
|
+
/(^|\/)tests?\//,
|
|
32
|
+
/_test\.go$/,
|
|
33
|
+
/_test\.py$/,
|
|
34
|
+
/(^|\/)test_[^/]+\.py$/,
|
|
35
|
+
/Test\.java$/,
|
|
36
|
+
/Tests\.java$/,
|
|
37
|
+
/Spec\.scala$/,
|
|
38
|
+
/_spec\.rb$/,
|
|
39
|
+
/(^|\/)spec\//,
|
|
40
|
+
/\.test\.exs$/,
|
|
41
|
+
/(^|\/)test\/.*\.exs$/,
|
|
42
|
+
];
|
|
43
|
+
function isTestPath(path) {
|
|
44
|
+
return TEST_FILE_PATTERNS.some((re) => re.test(path));
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Generate the candidate test filenames that conventionally cover a source file.
|
|
48
|
+
* Examples:
|
|
49
|
+
* src/foo/bar.ts → bar.test.ts, bar.spec.ts, __tests__/bar.test.ts
|
|
50
|
+
* src/foo/bar.py → test_bar.py, bar_test.py
|
|
51
|
+
* com/Foo.java → FooTest.java, FooTests.java
|
|
52
|
+
*/
|
|
53
|
+
function candidateTestNames(sourcePath) {
|
|
54
|
+
const file = basename(sourcePath);
|
|
55
|
+
const dot = file.lastIndexOf(".");
|
|
56
|
+
if (dot <= 0)
|
|
57
|
+
return [];
|
|
58
|
+
const stem = file.slice(0, dot);
|
|
59
|
+
const ext = file.slice(dot); // includes leading dot
|
|
60
|
+
const names = [];
|
|
61
|
+
// JS/TS family
|
|
62
|
+
if (/\.[jt]sx?$/.test(ext)) {
|
|
63
|
+
names.push(`${stem}.test${ext}`, `${stem}.spec${ext}`);
|
|
64
|
+
}
|
|
65
|
+
// Python
|
|
66
|
+
if (ext === ".py") {
|
|
67
|
+
names.push(`test_${stem}.py`, `${stem}_test.py`);
|
|
68
|
+
}
|
|
69
|
+
// Go
|
|
70
|
+
if (ext === ".go") {
|
|
71
|
+
names.push(`${stem}_test.go`);
|
|
72
|
+
}
|
|
73
|
+
// Java/Kotlin/Scala
|
|
74
|
+
if (ext === ".java" || ext === ".kt" || ext === ".scala") {
|
|
75
|
+
names.push(`${stem}Test${ext}`, `${stem}Tests${ext}`, `${stem}Spec${ext}`);
|
|
76
|
+
}
|
|
77
|
+
// Ruby
|
|
78
|
+
if (ext === ".rb") {
|
|
79
|
+
names.push(`${stem}_spec.rb`, `${stem}_test.rb`);
|
|
80
|
+
}
|
|
81
|
+
// Rust — convention is inline #[cfg(test)] modules; sibling file uncommon
|
|
82
|
+
if (ext === ".rs") {
|
|
83
|
+
names.push(`${stem}_test.rs`);
|
|
84
|
+
}
|
|
85
|
+
// Elixir
|
|
86
|
+
if (ext === ".ex") {
|
|
87
|
+
names.push(`${stem}_test.exs`);
|
|
88
|
+
}
|
|
89
|
+
return names;
|
|
90
|
+
}
|
|
91
|
+
export function handleTestMap(indexer, args) {
|
|
92
|
+
const ref = args.ref || "main..HEAD";
|
|
93
|
+
const includeImporters = args.include_importers !== false;
|
|
94
|
+
// 1. Get changed files from git diff
|
|
95
|
+
let changedPaths;
|
|
96
|
+
try {
|
|
97
|
+
const out = execSync(`git diff --name-only --diff-filter=ACMRT ${ref}`, { cwd: indexer.rootPath, encoding: "utf-8", timeout: 8000, maxBuffer: 5 * 1024 * 1024 });
|
|
98
|
+
changedPaths = out.trim().split("\n").filter(Boolean);
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
return `Error: not a git repository or invalid ref \`${ref}\`. Try \`sverklo_test_map ref:"HEAD~1..HEAD"\`.`;
|
|
102
|
+
}
|
|
103
|
+
if (changedPaths.length === 0) {
|
|
104
|
+
return `No file changes between \`${ref}\`.`;
|
|
105
|
+
}
|
|
106
|
+
// 2. Partition into source vs test files
|
|
107
|
+
const changedTests = [];
|
|
108
|
+
const changedSources = [];
|
|
109
|
+
for (const p of changedPaths) {
|
|
110
|
+
if (isTestPath(p))
|
|
111
|
+
changedTests.push(p);
|
|
112
|
+
else
|
|
113
|
+
changedSources.push(p);
|
|
114
|
+
}
|
|
115
|
+
// 3. Build a quick lookup of all known test files in the index
|
|
116
|
+
const allFiles = indexer.fileStore.getAll();
|
|
117
|
+
const testFiles = allFiles.filter((f) => isTestPath(f.path));
|
|
118
|
+
const testFilesByBasename = new Map();
|
|
119
|
+
for (const tf of testFiles) {
|
|
120
|
+
const b = basename(tf.path);
|
|
121
|
+
const list = testFilesByBasename.get(b) || [];
|
|
122
|
+
list.push(tf.path);
|
|
123
|
+
testFilesByBasename.set(b, list);
|
|
124
|
+
}
|
|
125
|
+
// 4. Build file id ↔ path maps for graph lookups
|
|
126
|
+
const idToPath = new Map();
|
|
127
|
+
const pathToId = new Map();
|
|
128
|
+
for (const f of allFiles) {
|
|
129
|
+
idToPath.set(f.id, f.path);
|
|
130
|
+
pathToId.set(f.path, f.id);
|
|
131
|
+
}
|
|
132
|
+
const coverage = [];
|
|
133
|
+
const uncovered = [];
|
|
134
|
+
for (const src of changedSources) {
|
|
135
|
+
const nameMatches = new Set();
|
|
136
|
+
// Heuristic 1: conventional test filenames anywhere in the index
|
|
137
|
+
for (const cand of candidateTestNames(src)) {
|
|
138
|
+
const hits = testFilesByBasename.get(cand);
|
|
139
|
+
if (hits)
|
|
140
|
+
hits.forEach((h) => nameMatches.add(h));
|
|
141
|
+
}
|
|
142
|
+
// Heuristic 2: same-directory test file (rare but possible)
|
|
143
|
+
const dir = dirname(src);
|
|
144
|
+
for (const cand of candidateTestNames(src)) {
|
|
145
|
+
const sibling = join(dir, cand);
|
|
146
|
+
if (pathToId.has(sibling))
|
|
147
|
+
nameMatches.add(sibling);
|
|
148
|
+
}
|
|
149
|
+
// Heuristic 3: dependency-graph importers that happen to be test files
|
|
150
|
+
const importerTests = new Set();
|
|
151
|
+
if (includeImporters) {
|
|
152
|
+
const id = pathToId.get(src);
|
|
153
|
+
if (id !== undefined) {
|
|
154
|
+
for (const edge of indexer.graphStore.getImporters(id)) {
|
|
155
|
+
const importerPath = idToPath.get(edge.source_file_id);
|
|
156
|
+
if (importerPath && isTestPath(importerPath)) {
|
|
157
|
+
importerTests.add(importerPath);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
// Subtract name matches from importer matches to avoid double-listing
|
|
163
|
+
for (const nm of nameMatches)
|
|
164
|
+
importerTests.delete(nm);
|
|
165
|
+
if (nameMatches.size === 0 && importerTests.size === 0) {
|
|
166
|
+
uncovered.push(src);
|
|
167
|
+
}
|
|
168
|
+
else {
|
|
169
|
+
coverage.push({
|
|
170
|
+
source: src,
|
|
171
|
+
nameMatches: [...nameMatches].sort(),
|
|
172
|
+
importerTests: [...importerTests].sort(),
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
// 6. Format output
|
|
177
|
+
const lines = [];
|
|
178
|
+
lines.push(`# Test map for \`${ref}\``);
|
|
179
|
+
lines.push(`${changedSources.length} source file${changedSources.length === 1 ? "" : "s"} changed · ` +
|
|
180
|
+
`${changedTests.length} test file${changedTests.length === 1 ? "" : "s"} changed · ` +
|
|
181
|
+
`${coverage.length} covered · ${uncovered.length} uncovered`);
|
|
182
|
+
lines.push("");
|
|
183
|
+
if (changedTests.length > 0) {
|
|
184
|
+
lines.push(`## Test files modified in this diff (${changedTests.length})`);
|
|
185
|
+
lines.push(`These run as part of the change itself — make sure they pass.`);
|
|
186
|
+
for (const t of changedTests)
|
|
187
|
+
lines.push(`- ${t}`);
|
|
188
|
+
lines.push("");
|
|
189
|
+
}
|
|
190
|
+
if (coverage.length > 0) {
|
|
191
|
+
lines.push(`## Likely test coverage (${coverage.length})`);
|
|
192
|
+
lines.push(`_Heuristic — based on filename conventions and import graph, not actual coverage data._`);
|
|
193
|
+
for (const c of coverage) {
|
|
194
|
+
lines.push(`- **${c.source}**`);
|
|
195
|
+
for (const t of c.nameMatches)
|
|
196
|
+
lines.push(` - ${t} _(name match)_`);
|
|
197
|
+
for (const t of c.importerTests)
|
|
198
|
+
lines.push(` - ${t} _(imports source)_`);
|
|
199
|
+
}
|
|
200
|
+
lines.push("");
|
|
201
|
+
}
|
|
202
|
+
if (uncovered.length > 0) {
|
|
203
|
+
lines.push(`## ⚠️ No matching tests found (${uncovered.length})`);
|
|
204
|
+
lines.push(`These changed files have no test file matching by name or import. They may be untested, ` +
|
|
205
|
+
`tested via integration/e2e suites sverklo can't see, or covered by tests outside the indexed paths.`);
|
|
206
|
+
for (const u of uncovered)
|
|
207
|
+
lines.push(`- ${u}`);
|
|
208
|
+
lines.push("");
|
|
209
|
+
}
|
|
210
|
+
// Suggested next-step commands the reviewer can paste
|
|
211
|
+
if (coverage.length > 0 || changedTests.length > 0) {
|
|
212
|
+
const allTests = new Set();
|
|
213
|
+
changedTests.forEach((t) => allTests.add(t));
|
|
214
|
+
for (const c of coverage) {
|
|
215
|
+
c.nameMatches.forEach((t) => allTests.add(t));
|
|
216
|
+
c.importerTests.forEach((t) => allTests.add(t));
|
|
217
|
+
}
|
|
218
|
+
if (allTests.size > 0 && allTests.size <= 30) {
|
|
219
|
+
lines.push(`## Suggested test selection`);
|
|
220
|
+
lines.push("```");
|
|
221
|
+
lines.push([...allTests].sort().join(" "));
|
|
222
|
+
lines.push("```");
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
return lines.join("\n");
|
|
226
|
+
}
|
|
227
|
+
//# sourceMappingURL=test-map.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-map.js","sourceRoot":"","sources":["../../../../src/server/tools/test-map.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGpD,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,IAAI,EAAE,kBAAkB;IACxB,WAAW,EACT,yFAAyF;QACzF,4FAA4F;QAC5F,yFAAyF;QACzF,wFAAwF;QACxF,wFAAwF;QACxF,gDAAgD;IAClD,WAAW,EAAE;QACX,IAAI,EAAE,QAAiB;QACvB,UAAU,EAAE;YACV,GAAG,EAAE;gBACH,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,uCAAuC;aACrD;YACD,iBAAiB,EAAE;gBACjB,IAAI,EAAE,SAAS;gBACf,WAAW,EACT,uHAAuH;aAC1H;SACF;KACF;CACF,CAAC;AAEF,wEAAwE;AACxE,0CAA0C;AAC1C,MAAM,kBAAkB,GAAG;IACzB,kBAAkB;IAClB,kBAAkB;IAClB,mBAAmB;IACnB,gBAAgB;IAChB,YAAY;IACZ,YAAY;IACZ,uBAAuB;IACvB,aAAa;IACb,cAAc;IACd,cAAc;IACd,YAAY;IACZ,cAAc;IACd,cAAc;IACd,sBAAsB;CACvB,CAAC;AAEF,SAAS,UAAU,CAAC,IAAY;IAC9B,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACxD,CAAC;AAED;;;;;;GAMG;AACH,SAAS,kBAAkB,CAAC,UAAkB;IAC5C,MAAM,IAAI,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;IAClC,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAClC,IAAI,GAAG,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IACxB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAChC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,uBAAuB;IAEpD,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,eAAe;IACf,IAAI,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,QAAQ,GAAG,EAAE,EAAE,GAAG,IAAI,QAAQ,GAAG,EAAE,CAAC,CAAC;IACzD,CAAC;IACD,SAAS;IACT,IAAI,GAAG,KAAK,KAAK,EAAE,CAAC;QAClB,KAAK,CAAC,IAAI,CAAC,QAAQ,IAAI,KAAK,EAAE,GAAG,IAAI,UAAU,CAAC,CAAC;IACnD,CAAC;IACD,KAAK;IACL,IAAI,GAAG,KAAK,KAAK,EAAE,CAAC;QAClB,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,UAAU,CAAC,CAAC;IAChC,CAAC;IACD,oBAAoB;IACpB,IAAI,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;QACzD,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,EAAE,EAAE,GAAG,IAAI,QAAQ,GAAG,EAAE,EAAE,GAAG,IAAI,OAAO,GAAG,EAAE,CAAC,CAAC;IAC7E,CAAC;IACD,OAAO;IACP,IAAI,GAAG,KAAK,KAAK,EAAE,CAAC;QAClB,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,UAAU,EAAE,GAAG,IAAI,UAAU,CAAC,CAAC;IACnD,CAAC;IACD,0EAA0E;IAC1E,IAAI,GAAG,KAAK,KAAK,EAAE,CAAC;QAClB,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,UAAU,CAAC,CAAC;IAChC,CAAC;IACD,SAAS;IACT,IAAI,GAAG,KAAK,KAAK,EAAE,CAAC;QAClB,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,WAAW,CAAC,CAAC;IACjC,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,OAAgB,EAChB,IAA6B;IAE7B,MAAM,GAAG,GAAI,IAAI,CAAC,GAAc,IAAI,YAAY,CAAC;IACjD,MAAM,gBAAgB,GAAG,IAAI,CAAC,iBAAiB,KAAK,KAAK,CAAC;IAE1D,qCAAqC;IACrC,IAAI,YAAsB,CAAC;IAC3B,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,QAAQ,CAClB,4CAA4C,GAAG,EAAE,EACjD,EAAE,GAAG,EAAE,OAAO,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI,EAAE,CACxF,CAAC;QACF,YAAY,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACxD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,gDAAgD,GAAG,kDAAkD,CAAC;IAC/G,CAAC;IAED,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,6BAA6B,GAAG,KAAK,CAAC;IAC/C,CAAC;IAED,yCAAyC;IACzC,MAAM,YAAY,GAAa,EAAE,CAAC;IAClC,MAAM,cAAc,GAAa,EAAE,CAAC;IACpC,KAAK,MAAM,CAAC,IAAI,YAAY,EAAE,CAAC;QAC7B,IAAI,UAAU,CAAC,CAAC,CAAC;YAAE,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;;YACnC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC9B,CAAC;IAED,+DAA+D;IAC/D,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;IAC5C,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7D,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAoB,CAAC;IACxD,KAAK,MAAM,EAAE,IAAI,SAAS,EAAE,CAAC;QAC3B,MAAM,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;QAC5B,MAAM,IAAI,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC9C,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;QACnB,mBAAmB,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IACnC,CAAC;IAED,iDAAiD;IACjD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC3C,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC3C,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QAC3B,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IAC7B,CAAC;IAQD,MAAM,QAAQ,GAAe,EAAE,CAAC;IAChC,MAAM,SAAS,GAAa,EAAE,CAAC;IAE/B,KAAK,MAAM,GAAG,IAAI,cAAc,EAAE,CAAC;QACjC,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;QAEtC,iEAAiE;QACjE,KAAK,MAAM,IAAI,IAAI,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC;YAC3C,MAAM,IAAI,GAAG,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC3C,IAAI,IAAI;gBAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACpD,CAAC;QAED,4DAA4D;QAC5D,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QACzB,KAAK,MAAM,IAAI,IAAI,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC;YAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAChC,IAAI,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC;gBAAE,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACtD,CAAC;QAED,uEAAuE;QACvE,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU,CAAC;QACxC,IAAI,gBAAgB,EAAE,CAAC;YACrB,MAAM,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC7B,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;gBACrB,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC,EAAE,CAAC;oBACvD,MAAM,YAAY,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;oBACvD,IAAI,YAAY,IAAI,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;wBAC7C,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;oBAClC,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,sEAAsE;QACtE,KAAK,MAAM,EAAE,IAAI,WAAW;YAAE,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAEvD,IAAI,WAAW,CAAC,IAAI,KAAK,CAAC,IAAI,aAAa,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACvD,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACtB,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,IAAI,CAAC;gBACZ,MAAM,EAAE,GAAG;gBACX,WAAW,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC,IAAI,EAAE;gBACpC,aAAa,EAAE,CAAC,GAAG,aAAa,CAAC,CAAC,IAAI,EAAE;aACzC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,mBAAmB;IACnB,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,CAAC;IACxC,KAAK,CAAC,IAAI,CACR,GAAG,cAAc,CAAC,MAAM,eAAe,cAAc,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,aAAa;QACxF,GAAG,YAAY,CAAC,MAAM,aAAa,YAAY,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,aAAa;QACpF,GAAG,QAAQ,CAAC,MAAM,cAAc,SAAS,CAAC,MAAM,YAAY,CAC/D,CAAC;IACF,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,wCAAwC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;QAC3E,KAAK,CAAC,IAAI,CAAC,+DAA+D,CAAC,CAAC;QAC5E,KAAK,MAAM,CAAC,IAAI,YAAY;YAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACnD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,KAAK,CAAC,IAAI,CAAC,4BAA4B,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;QAC3D,KAAK,CAAC,IAAI,CAAC,yFAAyF,CAAC,CAAC;QACtG,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;YACzB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC;YAChC,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW;gBAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;YACtE,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,aAAa;gBAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;QAC9E,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,KAAK,CAAC,IAAI,CAAC,kCAAkC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;QAClE,KAAK,CAAC,IAAI,CAAC,0FAA0F;YACnG,qGAAqG,CAAC,CAAC;QACzG,KAAK,MAAM,CAAC,IAAI,SAAS;YAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAChD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,sDAAsD;IACtD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;QACnC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7C,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;YACzB,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9C,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAClD,CAAC;QACD,IAAI,QAAQ,CAAC,IAAI,GAAG,CAAC,IAAI,QAAQ,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC;YAC7C,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;YAC1C,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAClB,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YAC3C,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
export const wakeupTool = {
|
|
2
2
|
name: "sverklo_wakeup",
|
|
3
|
-
description: "
|
|
4
|
-
"decisions. Designed for system-prompt injection when using non-MCP clients (local Llama, " +
|
|
5
|
-
"GPT API without MCP, etc). Alternative to the auto-injected sverklo://context resource.",
|
|
3
|
+
description: "Compressed project context for non-MCP clients (system-prompt injection).",
|
|
6
4
|
inputSchema: {
|
|
7
5
|
type: "object",
|
|
8
6
|
properties: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wakeup.js","sourceRoot":"","sources":["../../../../src/server/tools/wakeup.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,IAAI,EAAE,gBAAgB;IACtB,WAAW,EACT,
|
|
1
|
+
{"version":3,"file":"wakeup.js","sourceRoot":"","sources":["../../../../src/server/tools/wakeup.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sverklo",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.8",
|
|
4
4
|
"description": "Sverklo — local-first code intelligence MCP server. Hybrid search, PageRank ranking, semantic embeddings. Zero config.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -20,7 +20,8 @@
|
|
|
20
20
|
"test:watch": "vitest",
|
|
21
21
|
"lint": "eslint src/",
|
|
22
22
|
"prepublishOnly": "rm -rf dist && npm run build",
|
|
23
|
-
"benchmark": "node --experimental-strip-types benchmark/benchmark.ts"
|
|
23
|
+
"benchmark": "node --experimental-strip-types benchmark/benchmark.ts",
|
|
24
|
+
"bench:quick": "node --experimental-strip-types --no-warnings benchmark/src/index.ts"
|
|
24
25
|
},
|
|
25
26
|
"keywords": [
|
|
26
27
|
"sverklo",
|