sverklo 0.2.6 → 0.2.7

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.
Files changed (34) hide show
  1. package/dist/src/indexer/indexer.d.ts +13 -0
  2. package/dist/src/indexer/indexer.js +41 -0
  3. package/dist/src/indexer/indexer.js.map +1 -1
  4. package/dist/src/indexer/parser.js +43 -2
  5. package/dist/src/indexer/parser.js.map +1 -1
  6. package/dist/src/search/hybrid-search.d.ts +3 -1
  7. package/dist/src/search/hybrid-search.js +18 -3
  8. package/dist/src/search/hybrid-search.js.map +1 -1
  9. package/dist/src/search/token-budget.js +20 -2
  10. package/dist/src/search/token-budget.js.map +1 -1
  11. package/dist/src/server/mcp-server.js +27 -23
  12. package/dist/src/server/mcp-server.js.map +1 -1
  13. package/dist/src/server/tools/ast-grep.js +4 -13
  14. package/dist/src/server/tools/ast-grep.js.map +1 -1
  15. package/dist/src/server/tools/audit.js +18 -7
  16. package/dist/src/server/tools/audit.js.map +1 -1
  17. package/dist/src/server/tools/diff-search.d.ts +33 -0
  18. package/dist/src/server/tools/diff-search.js +121 -0
  19. package/dist/src/server/tools/diff-search.js.map +1 -0
  20. package/dist/src/server/tools/impact.js +1 -4
  21. package/dist/src/server/tools/impact.js.map +1 -1
  22. package/dist/src/server/tools/index-status.js +38 -0
  23. package/dist/src/server/tools/index-status.js.map +1 -1
  24. package/dist/src/server/tools/remember.js +7 -19
  25. package/dist/src/server/tools/remember.js.map +1 -1
  26. package/dist/src/server/tools/review-diff.d.ts +27 -0
  27. package/dist/src/server/tools/review-diff.js +414 -0
  28. package/dist/src/server/tools/review-diff.js.map +1 -0
  29. package/dist/src/server/tools/test-map.d.ts +19 -0
  30. package/dist/src/server/tools/test-map.js +227 -0
  31. package/dist/src/server/tools/test-map.js.map +1 -0
  32. package/dist/src/server/tools/wakeup.js +1 -3
  33. package/dist/src/server/tools/wakeup.js.map +1 -1
  34. package/package.json +3 -2
@@ -0,0 +1,27 @@
1
+ import type { Indexer } from "../../indexer/indexer.js";
2
+ export declare const reviewDiffTool: {
3
+ name: string;
4
+ description: string;
5
+ inputSchema: {
6
+ type: "object";
7
+ properties: {
8
+ ref: {
9
+ type: string;
10
+ description: string;
11
+ };
12
+ include_added_similarity: {
13
+ type: string;
14
+ description: string;
15
+ };
16
+ max_files: {
17
+ type: string;
18
+ description: string;
19
+ };
20
+ token_budget: {
21
+ type: string;
22
+ description: string;
23
+ };
24
+ };
25
+ };
26
+ };
27
+ export declare function handleReviewDiff(indexer: Indexer, args: Record<string, unknown>): string;
@@ -0,0 +1,414 @@
1
+ import { execSync } from "node:child_process";
2
+ export const reviewDiffTool = {
3
+ name: "sverklo_review_diff",
4
+ description: "Diff-aware context bundler for code review. Takes a git ref or range and returns: " +
5
+ "changed files, semantic delta (added/removed/modified symbols), dangling references " +
6
+ "for removed symbols, impact set for modified symbols, and similar-symbol detection " +
7
+ "for added ones. Replaces 10-20 grep+read calls with one structured response. " +
8
+ "Use this FIRST when reviewing an MR/PR — it surfaces blast radius and convention " +
9
+ "violations grep cannot see.",
10
+ inputSchema: {
11
+ type: "object",
12
+ properties: {
13
+ ref: {
14
+ type: "string",
15
+ description: "Git ref or range. Examples: 'HEAD' (uncommitted + last commit), " +
16
+ "'main..HEAD' (branch vs main), 'abc123..def456'. Default: main..HEAD.",
17
+ },
18
+ include_added_similarity: {
19
+ type: "boolean",
20
+ description: "Detect duplicates among added symbols. Default: true.",
21
+ },
22
+ max_files: {
23
+ type: "number",
24
+ description: "Cap on number of files to analyze. Default: 25.",
25
+ },
26
+ token_budget: {
27
+ type: "number",
28
+ description: "Max tokens to return. Default: 2500.",
29
+ },
30
+ },
31
+ },
32
+ };
33
+ export function handleReviewDiff(indexer, args) {
34
+ const ref = args.ref || "main..HEAD";
35
+ const includeSimilarity = args.include_added_similarity !== false;
36
+ const maxFiles = args.max_files || 25;
37
+ const tokenBudget = args.token_budget || 2500;
38
+ // ─── 1. Get list of changed files ───
39
+ const changedFiles = getChangedFiles(indexer.rootPath, ref);
40
+ if (changedFiles === null) {
41
+ return "Error: not a git repository or invalid ref. Try `sverklo_review_diff ref:HEAD~1..HEAD`.";
42
+ }
43
+ if (changedFiles.length === 0) {
44
+ return `No file changes between \`${ref}\`. Working tree clean or ref invalid.`;
45
+ }
46
+ const cappedFiles = changedFiles.slice(0, maxFiles);
47
+ const truncated = changedFiles.length > maxFiles;
48
+ // ─── 2. Build file→indexed-file lookup ───
49
+ const fileCache = new Map();
50
+ for (const f of indexer.fileStore.getAll()) {
51
+ fileCache.set(f.path, f);
52
+ }
53
+ // ─── 3. Compute semantic delta ───
54
+ // For each modified/added file, get its current symbols.
55
+ // For removed files, the symbols are the deletions.
56
+ // For modified, we compare against pre-change content (parsed from `git show old:path`).
57
+ const removedSymbols = [];
58
+ const addedSymbols = [];
59
+ const modifiedFiles = [];
60
+ for (const cf of cappedFiles) {
61
+ const indexed = fileCache.get(cf.path);
62
+ // Pre-change symbols (parsed from old content via git show)
63
+ const oldSymbols = getOldSymbols(indexer.rootPath, ref, cf.path);
64
+ if (cf.status === "D") {
65
+ // File deleted entirely → all old symbols are removed
66
+ for (const s of oldSymbols) {
67
+ removedSymbols.push({
68
+ name: s.name,
69
+ type: s.type,
70
+ file: cf.path,
71
+ line: s.line,
72
+ signature: s.signature,
73
+ });
74
+ }
75
+ continue;
76
+ }
77
+ // Current symbols (from index — assumes index is fresh)
78
+ const currentSymbols = indexed
79
+ ? indexer.chunkStore.getByFile(indexed.id).filter((c) => c.name)
80
+ : [];
81
+ if (cf.status === "A") {
82
+ // File added → all current symbols are added
83
+ for (const s of currentSymbols) {
84
+ addedSymbols.push({
85
+ name: s.name,
86
+ type: s.type,
87
+ file: cf.path,
88
+ line: s.start_line,
89
+ signature: s.signature || undefined,
90
+ });
91
+ }
92
+ continue;
93
+ }
94
+ // Modified file: diff old vs current symbols by name
95
+ const oldNames = new Set(oldSymbols.map((s) => s.name));
96
+ const currentNames = new Set(currentSymbols.map((c) => c.name));
97
+ for (const s of oldSymbols) {
98
+ if (!currentNames.has(s.name)) {
99
+ removedSymbols.push({
100
+ name: s.name,
101
+ type: s.type,
102
+ file: cf.path,
103
+ line: s.line,
104
+ signature: s.signature,
105
+ });
106
+ }
107
+ }
108
+ for (const c of currentSymbols) {
109
+ if (!oldNames.has(c.name)) {
110
+ addedSymbols.push({
111
+ name: c.name,
112
+ type: c.type,
113
+ file: cf.path,
114
+ line: c.start_line,
115
+ signature: c.signature || undefined,
116
+ });
117
+ }
118
+ }
119
+ if (currentSymbols.length > 0) {
120
+ modifiedFiles.push({ path: cf.path, symbols: currentSymbols });
121
+ }
122
+ }
123
+ // ─── 4. For each removed symbol, check for dangling references ───
124
+ const danglingRefs = new Map();
125
+ for (const sym of removedSymbols) {
126
+ const refs = indexer.symbolRefStore.getImpact(sym.name, 20);
127
+ if (refs.length > 0) {
128
+ const files = Array.from(new Set(refs.map((r) => r.file_path)));
129
+ danglingRefs.set(sym.name, { count: refs.length, files });
130
+ }
131
+ else {
132
+ danglingRefs.set(sym.name, { count: 0, files: [] });
133
+ }
134
+ }
135
+ // ─── 5. For each modified file, get its dependency closure ───
136
+ const fileImpact = new Map();
137
+ for (const cf of cappedFiles) {
138
+ if (cf.status === "D" || cf.status === "A")
139
+ continue;
140
+ const indexed = fileCache.get(cf.path);
141
+ if (!indexed)
142
+ continue;
143
+ const importers = indexer.graphStore.getImporters(indexed.id);
144
+ const imports = indexer.graphStore.getImports(indexed.id);
145
+ fileImpact.set(cf.path, { importers: importers.length, imports: imports.length });
146
+ }
147
+ // ─── 6. For added symbols, check for similar existing symbols ───
148
+ const duplicateCandidates = [];
149
+ if (includeSimilarity) {
150
+ for (const added of addedSymbols.slice(0, 10)) {
151
+ // Find existing chunks with the same exact name (strong signal of duplication)
152
+ const matches = indexer.chunkStore.getByName(added.name, 5);
153
+ const similar = matches
154
+ .filter((m) => m.name === added.name && (fileCache.get(m.file_id ? "" : "")?.path !== added.file))
155
+ .map((m) => {
156
+ const fileEntry = Array.from(fileCache.values()).find((f) => f.id === m.file_id);
157
+ return {
158
+ name: m.name,
159
+ file: fileEntry?.path || "unknown",
160
+ line: m.start_line,
161
+ };
162
+ })
163
+ .filter((s) => s.file !== added.file);
164
+ if (similar.length > 0) {
165
+ duplicateCandidates.push({ added, similar });
166
+ }
167
+ }
168
+ }
169
+ // ─── 7. Format output ───
170
+ const parts = [];
171
+ parts.push(`# Diff Review: \`${ref}\``);
172
+ parts.push("");
173
+ parts.push(`**${changedFiles.length} file${changedFiles.length === 1 ? "" : "s"} changed** ` +
174
+ `(${addedSymbols.length} added, ${removedSymbols.length} removed, ${modifiedFiles.length} modified)`);
175
+ if (truncated) {
176
+ parts.push(`_Showing first ${maxFiles} files; ${changedFiles.length - maxFiles} more not analyzed._`);
177
+ }
178
+ parts.push("");
179
+ // Changed files table
180
+ parts.push("## Changed files");
181
+ for (const cf of cappedFiles) {
182
+ const indexed = fileCache.get(cf.path);
183
+ const pr = indexed ? ` (PR ${indexed.pagerank.toFixed(2)})` : "";
184
+ const impact = fileImpact.get(cf.path);
185
+ const impactNote = impact && impact.importers > 0 ? ` ← ${impact.importers} importer${impact.importers === 1 ? "" : "s"}` : "";
186
+ parts.push(`- **${cf.status}** \`${cf.path}\` +${cf.added} -${cf.removed}${pr}${impactNote}`);
187
+ }
188
+ parts.push("");
189
+ // Removed symbols + dangling refs (the most important section for safety)
190
+ if (removedSymbols.length > 0) {
191
+ parts.push("## Removed symbols");
192
+ let dangerCount = 0;
193
+ for (const sym of removedSymbols.slice(0, 15)) {
194
+ const refs = danglingRefs.get(sym.name);
195
+ const refCount = refs?.count ?? 0;
196
+ const danger = refCount > 0 ? "⚠️" : "✓";
197
+ const refLabel = refCount === 0
198
+ ? "0 dangling refs (safe to remove)"
199
+ : `**${refCount} dangling reference${refCount === 1 ? "" : "s"}** in ${refs.files.length} file${refs.files.length === 1 ? "" : "s"}`;
200
+ parts.push(`- ${danger} \`${sym.name}\` (${sym.type}) @ ${sym.file}:${sym.line} — ${refLabel}`);
201
+ if (refCount > 0) {
202
+ dangerCount++;
203
+ for (const f of refs.files.slice(0, 3)) {
204
+ parts.push(` · ${f}`);
205
+ }
206
+ if (refs.files.length > 3) {
207
+ parts.push(` · ...and ${refs.files.length - 3} more (call sverklo_impact for full list)`);
208
+ }
209
+ }
210
+ }
211
+ if (dangerCount > 0) {
212
+ parts.push("");
213
+ parts.push(`**⚠️ ${dangerCount} removed symbol${dangerCount === 1 ? " has" : "s have"} remaining references — review carefully.**`);
214
+ }
215
+ parts.push("");
216
+ }
217
+ // Added symbols + duplication warnings
218
+ if (addedSymbols.length > 0) {
219
+ parts.push("## Added symbols");
220
+ for (const sym of addedSymbols.slice(0, 15)) {
221
+ parts.push(`- \`${sym.name}\` (${sym.type}) @ ${sym.file}:${sym.line}`);
222
+ }
223
+ if (addedSymbols.length > 15) {
224
+ parts.push(` _...and ${addedSymbols.length - 15} more_`);
225
+ }
226
+ parts.push("");
227
+ if (duplicateCandidates.length > 0) {
228
+ parts.push("### ⚠️ Possible duplicates");
229
+ for (const dup of duplicateCandidates) {
230
+ parts.push(`- **${dup.added.name}** added in \`${dup.added.file}\` — already exists in:`);
231
+ for (const s of dup.similar.slice(0, 3)) {
232
+ parts.push(` · ${s.file}:${s.line}`);
233
+ }
234
+ }
235
+ parts.push("");
236
+ }
237
+ }
238
+ // Modified files with high impact (> 3 importers)
239
+ const highImpactFiles = Array.from(fileImpact.entries())
240
+ .filter(([, v]) => v.importers >= 3)
241
+ .sort((a, b) => b[1].importers - a[1].importers);
242
+ if (highImpactFiles.length > 0) {
243
+ parts.push("## High-impact modifications");
244
+ parts.push("_These files are imported by many others — changes cascade widely._");
245
+ for (const [path, impact] of highImpactFiles.slice(0, 10)) {
246
+ parts.push(`- \`${path}\` ← ${impact.importers} importer${impact.importers === 1 ? "" : "s"}`);
247
+ }
248
+ parts.push("");
249
+ }
250
+ // Recommendations
251
+ parts.push("## Suggested next checks");
252
+ if (removedSymbols.length > 0) {
253
+ const dangerNames = removedSymbols
254
+ .filter((s) => (danglingRefs.get(s.name)?.count ?? 0) > 0)
255
+ .map((s) => s.name);
256
+ if (dangerNames.length > 0) {
257
+ parts.push(`- Run \`sverklo_impact symbol:"${dangerNames[0]}"\` to see all callers of removed symbols`);
258
+ }
259
+ }
260
+ if (modifiedFiles.length > 0) {
261
+ parts.push(`- Run \`sverklo_diff_search query:"..."\` to search semantically within these files`);
262
+ }
263
+ if (addedSymbols.length > 0 && duplicateCandidates.length === 0) {
264
+ parts.push(`- New symbols look unique — no duplication detected against indexed code`);
265
+ }
266
+ parts.push(`- For exact-match checks, fall back to \`grep -r 'symbol' .\``);
267
+ let output = parts.join("\n");
268
+ // Enforce token budget
269
+ const maxChars = tokenBudget * 3.5;
270
+ if (output.length > maxChars) {
271
+ output = output.slice(0, maxChars) + "\n\n_[truncated to fit token budget]_";
272
+ }
273
+ return output;
274
+ }
275
+ // ─── git helpers ───
276
+ function getChangedFiles(rootPath, ref) {
277
+ try {
278
+ // Use --diff-filter=ACDMRT and --numstat to get type + line counts
279
+ const out = execSync(`git diff --numstat --diff-filter=ACDMRT ${ref}`, { cwd: rootPath, encoding: "utf-8", timeout: 8000, maxBuffer: 5 * 1024 * 1024 });
280
+ // Also need status (A/M/D/R)
281
+ const statusOut = execSync(`git diff --name-status --diff-filter=ACDMRT ${ref}`, { cwd: rootPath, encoding: "utf-8", timeout: 8000, maxBuffer: 5 * 1024 * 1024 });
282
+ const statusByPath = new Map();
283
+ for (const line of statusOut.trim().split("\n")) {
284
+ if (!line.trim())
285
+ continue;
286
+ const [status, ...pathParts] = line.split("\t");
287
+ const path = pathParts[pathParts.length - 1]; // handle renames (R old new)
288
+ statusByPath.set(path, status[0] || "M");
289
+ }
290
+ const files = [];
291
+ for (const line of out.trim().split("\n")) {
292
+ if (!line.trim())
293
+ continue;
294
+ const parts = line.split("\t");
295
+ if (parts.length < 3)
296
+ continue;
297
+ const added = parseInt(parts[0], 10) || 0;
298
+ const removed = parseInt(parts[1], 10) || 0;
299
+ const path = parts[parts.length - 1];
300
+ const status = (statusByPath.get(path) || "M");
301
+ files.push({ path, status, added, removed });
302
+ }
303
+ return files;
304
+ }
305
+ catch (err) {
306
+ return null;
307
+ }
308
+ }
309
+ /**
310
+ * Get the symbols from a file at the "before" state of the diff.
311
+ * For ref like "main..HEAD", we want the file at `main`.
312
+ * For ref like "HEAD~1..HEAD", we want the file at `HEAD~1`.
313
+ *
314
+ * Uses git show to retrieve old content, then runs sverklo's parser on it.
315
+ */
316
+ function getOldSymbols(rootPath, ref, filePath) {
317
+ // Extract the "from" ref. For "A..B" use A. For "A...B" use A. For bare "B" use B^.
318
+ let fromRef = ref;
319
+ if (ref.includes("..."))
320
+ fromRef = ref.split("...")[0];
321
+ else if (ref.includes(".."))
322
+ fromRef = ref.split("..")[0];
323
+ else
324
+ fromRef = ref + "^";
325
+ if (!fromRef.trim() || fromRef === "^")
326
+ fromRef = "HEAD^";
327
+ let oldContent;
328
+ try {
329
+ oldContent = execSync(`git show ${fromRef}:${filePath}`, {
330
+ cwd: rootPath,
331
+ encoding: "utf-8",
332
+ timeout: 5000,
333
+ maxBuffer: 5 * 1024 * 1024,
334
+ stdio: ["ignore", "pipe", "ignore"],
335
+ });
336
+ }
337
+ catch {
338
+ // File didn't exist at the old ref → all symbols are added (caller handles)
339
+ return [];
340
+ }
341
+ // Determine language from file extension
342
+ const ext = filePath.split(".").pop()?.toLowerCase() || "";
343
+ const langMap = {
344
+ ts: "typescript", tsx: "typescript", mts: "typescript", cts: "typescript",
345
+ js: "javascript", jsx: "javascript", mjs: "javascript", cjs: "javascript",
346
+ py: "python", pyi: "python",
347
+ go: "go", rs: "rust", java: "java",
348
+ c: "c", h: "c", cpp: "cpp", cc: "cpp", hpp: "cpp", hh: "cpp",
349
+ rb: "ruby", php: "php",
350
+ kt: "kotlin", kts: "kotlin",
351
+ scala: "scala", swift: "swift", dart: "dart",
352
+ ex: "elixir", exs: "elixir", lua: "lua", zig: "zig",
353
+ hs: "haskell", clj: "clojure", ml: "ocaml",
354
+ };
355
+ const language = langMap[ext];
356
+ if (!language)
357
+ return [];
358
+ // Use sverklo's existing parser
359
+ // Note: this is a sync import which is fine inside the handler since it's already loaded
360
+ // by other tools. Avoid top-level import to keep this file isolated for testing.
361
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
362
+ // We can't actually require here (ESM) — caller must pass parser.
363
+ // Workaround: use a quick regex extraction for the most common cases.
364
+ return quickExtractSymbols(oldContent, language);
365
+ }
366
+ /**
367
+ * Lightweight symbol extractor for old-file content.
368
+ * We can't import sverklo's full parser here without circular deps,
369
+ * but for diff review we only need names + line numbers, not full chunks.
370
+ */
371
+ function quickExtractSymbols(content, language) {
372
+ const symbols = [];
373
+ const lines = content.split("\n");
374
+ // Patterns by language family — covers ~80% of definitions
375
+ const patterns = [];
376
+ if (language === "typescript" || language === "javascript") {
377
+ patterns.push({ regex: /^(?:export\s+)?(?:async\s+)?function\s+(\w+)/, type: "function" }, { regex: /^(?:export\s+)?(?:abstract\s+)?class\s+(\w+)/, type: "class" }, { regex: /^(?:export\s+)?interface\s+(\w+)/, type: "interface" }, { regex: /^(?:export\s+)?type\s+(\w+)/, type: "type" }, { regex: /^(?:export\s+)?(?:const|let|var)\s+(\w+)\s*=\s*(?:async\s+)?\(/, type: "function" });
378
+ }
379
+ else if (language === "python") {
380
+ patterns.push({ regex: /^(?:async\s+)?def\s+(\w+)/, type: "function" }, { regex: /^class\s+(\w+)/, type: "class" });
381
+ }
382
+ else if (language === "go") {
383
+ patterns.push({ regex: /^func\s+(?:\([^)]+\)\s+)?(\w+)/, type: "function" }, { regex: /^type\s+(\w+)\s+struct/, type: "type" }, { regex: /^type\s+(\w+)\s+interface/, type: "interface" });
384
+ }
385
+ else if (language === "rust") {
386
+ patterns.push({ regex: /^(?:pub\s+)?(?:async\s+)?fn\s+(\w+)/, type: "function" }, { regex: /^(?:pub\s+)?struct\s+(\w+)/, type: "type" }, { regex: /^(?:pub\s+)?enum\s+(\w+)/, type: "type" }, { regex: /^(?:pub\s+)?trait\s+(\w+)/, type: "interface" });
387
+ }
388
+ else if (language === "java" || language === "kotlin") {
389
+ patterns.push({ regex: /(?:public|private|protected|static|\s)*class\s+(\w+)/, type: "class" }, { regex: /(?:public|private|protected|static|\s)*interface\s+(\w+)/, type: "interface" }, { regex: /(?:public|private|protected|static|\s)+\w+(?:<[^>]+>)?\s+(\w+)\s*\(/, type: "method" });
390
+ }
391
+ else if (language === "ruby") {
392
+ patterns.push({ regex: /^\s*def\s+(\w+[!?=]?)/, type: "function" }, { regex: /^\s*class\s+(\w+)/, type: "class" }, { regex: /^\s*module\s+(\w+)/, type: "module" });
393
+ }
394
+ else if (language === "php") {
395
+ patterns.push({ regex: /(?:public|private|protected|static|\s)*function\s+(\w+)/, type: "function" }, { regex: /^(?:abstract\s+)?class\s+(\w+)/, type: "class" });
396
+ }
397
+ for (let i = 0; i < lines.length; i++) {
398
+ const trimmed = lines[i].trimStart();
399
+ for (const { regex, type } of patterns) {
400
+ const m = trimmed.match(regex);
401
+ if (m) {
402
+ symbols.push({
403
+ name: m[1],
404
+ type,
405
+ line: i + 1,
406
+ signature: trimmed.slice(0, 200),
407
+ });
408
+ break;
409
+ }
410
+ }
411
+ }
412
+ return symbols;
413
+ }
414
+ //# sourceMappingURL=review-diff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-diff.js","sourceRoot":"","sources":["../../../../src/server/tools/review-diff.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { Indexer } from "../../indexer/indexer.js";
2
+ export declare const testMapTool: {
3
+ name: string;
4
+ description: string;
5
+ inputSchema: {
6
+ type: "object";
7
+ properties: {
8
+ ref: {
9
+ type: string;
10
+ description: string;
11
+ };
12
+ include_importers: {
13
+ type: string;
14
+ description: string;
15
+ };
16
+ };
17
+ };
18
+ };
19
+ export declare function handleTestMap(indexer: Indexer, args: Record<string, unknown>): string;