codepage-bridge-mcp 0.1.8 → 0.2.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/src/limits.d.ts +9 -0
- package/dist/src/limits.js +26 -0
- package/dist/src/limits.js.map +1 -1
- package/dist/src/prompts.d.ts +1 -1
- package/dist/src/prompts.js +2 -1
- package/dist/src/prompts.js.map +1 -1
- package/dist/src/schemas.d.ts +6 -0
- package/dist/src/schemas.js +1 -0
- package/dist/src/schemas.js.map +1 -1
- package/dist/src/server.d.ts +7 -1
- package/dist/src/tools/grep.d.ts +2 -0
- package/dist/src/tools/grep.js +476 -136
- package/dist/src/tools/grep.js.map +1 -1
- package/package.json +1 -1
package/dist/src/limits.d.ts
CHANGED
|
@@ -1,2 +1,11 @@
|
|
|
1
|
+
export interface GrepLimits {
|
|
2
|
+
maxScanBytes: number;
|
|
3
|
+
maxFiles: number;
|
|
4
|
+
maxDurationMs: number;
|
|
5
|
+
maxLineChars: number;
|
|
6
|
+
maxContextLines: number;
|
|
7
|
+
maxOnlyMatches: number;
|
|
8
|
+
}
|
|
9
|
+
export declare function grepLimits(): GrepLimits;
|
|
1
10
|
export declare function maxTextFileBytes(): number;
|
|
2
11
|
export declare function formatMebibytes(bytes: number): string;
|
package/dist/src/limits.js
CHANGED
|
@@ -1,11 +1,37 @@
|
|
|
1
1
|
const BYTES_PER_MEBIBYTE = 1024 * 1024;
|
|
2
2
|
const DEFAULT_MAX_TEXT_FILE_MEBIBYTES = 32;
|
|
3
|
+
const DEFAULT_GREP_MAX_SCAN_BYTES = 256 * BYTES_PER_MEBIBYTE;
|
|
4
|
+
const DEFAULT_GREP_MAX_FILES = 10_000;
|
|
5
|
+
const DEFAULT_GREP_MAX_DURATION_MS = 30_000;
|
|
6
|
+
const DEFAULT_GREP_MAX_LINE_CHARS = 16 * BYTES_PER_MEBIBYTE;
|
|
7
|
+
const DEFAULT_GREP_MAX_CONTEXT_LINES = 10_000;
|
|
8
|
+
const DEFAULT_GREP_MAX_ONLY_MATCHES = 100_000;
|
|
3
9
|
function parsePositiveInteger(value) {
|
|
4
10
|
if (value === undefined || !/^\d+$/.test(value))
|
|
5
11
|
return undefined;
|
|
6
12
|
const parsed = Number(value);
|
|
7
13
|
return Number.isSafeInteger(parsed) && parsed > 0 ? parsed : undefined;
|
|
8
14
|
}
|
|
15
|
+
function configuredPositiveInteger(name, fallback) {
|
|
16
|
+
const value = process.env[name];
|
|
17
|
+
if (value === undefined)
|
|
18
|
+
return fallback;
|
|
19
|
+
const parsed = parsePositiveInteger(value);
|
|
20
|
+
if (parsed === undefined) {
|
|
21
|
+
throw new Error(`${name} must be a positive safe integer when set`);
|
|
22
|
+
}
|
|
23
|
+
return parsed;
|
|
24
|
+
}
|
|
25
|
+
export function grepLimits() {
|
|
26
|
+
return {
|
|
27
|
+
maxScanBytes: configuredPositiveInteger('CODEPAGE_BRIDGE_MAX_GREP_SCAN_BYTES', DEFAULT_GREP_MAX_SCAN_BYTES),
|
|
28
|
+
maxFiles: configuredPositiveInteger('CODEPAGE_BRIDGE_MAX_GREP_FILES', DEFAULT_GREP_MAX_FILES),
|
|
29
|
+
maxDurationMs: configuredPositiveInteger('CODEPAGE_BRIDGE_MAX_GREP_DURATION_MS', DEFAULT_GREP_MAX_DURATION_MS),
|
|
30
|
+
maxLineChars: configuredPositiveInteger('CODEPAGE_BRIDGE_MAX_GREP_LINE_CHARS', DEFAULT_GREP_MAX_LINE_CHARS),
|
|
31
|
+
maxContextLines: configuredPositiveInteger('CODEPAGE_BRIDGE_MAX_GREP_CONTEXT_LINES', DEFAULT_GREP_MAX_CONTEXT_LINES),
|
|
32
|
+
maxOnlyMatches: configuredPositiveInteger('CODEPAGE_BRIDGE_MAX_GREP_ONLY_MATCHES', DEFAULT_GREP_MAX_ONLY_MATCHES),
|
|
33
|
+
};
|
|
34
|
+
}
|
|
9
35
|
export function maxTextFileBytes() {
|
|
10
36
|
const mebibytes = parsePositiveInteger(process.env.CODEPAGE_BRIDGE_MAX_TEXT_FILE_MIB)
|
|
11
37
|
?? DEFAULT_MAX_TEXT_FILE_MEBIBYTES;
|
package/dist/src/limits.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"limits.js","sourceRoot":"","sources":["../../src/limits.ts"],"names":[],"mappings":"AAAA,MAAM,kBAAkB,GAAG,IAAI,GAAG,IAAI,CAAA;AACtC,MAAM,+BAA+B,GAAG,EAAE,CAAA;AAE1C,SAAS,oBAAoB,CAAC,KAAyB;IACrD,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAA;IACjE,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;IAC5B,OAAO,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAA;AACxE,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,MAAM,SAAS,GAAG,oBAAoB,CAAC,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC;WAChF,+BAA+B,CAAA;IACpC,OAAO,SAAS,GAAG,kBAAkB,CAAA;AACvC,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAa;IAC3C,OAAO,GAAG,KAAK,GAAG,kBAAkB,MAAM,CAAA;AAC5C,CAAC"}
|
|
1
|
+
{"version":3,"file":"limits.js","sourceRoot":"","sources":["../../src/limits.ts"],"names":[],"mappings":"AAAA,MAAM,kBAAkB,GAAG,IAAI,GAAG,IAAI,CAAA;AACtC,MAAM,+BAA+B,GAAG,EAAE,CAAA;AAE1C,MAAM,2BAA2B,GAAG,GAAG,GAAG,kBAAkB,CAAA;AAC5D,MAAM,sBAAsB,GAAG,MAAM,CAAA;AACrC,MAAM,4BAA4B,GAAG,MAAM,CAAA;AAC3C,MAAM,2BAA2B,GAAG,EAAE,GAAG,kBAAkB,CAAA;AAC3D,MAAM,8BAA8B,GAAG,MAAM,CAAA;AAC7C,MAAM,6BAA6B,GAAG,OAAO,CAAA;AAE7C,SAAS,oBAAoB,CAAC,KAAyB;IACrD,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAA;IACjE,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;IAC5B,OAAO,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAA;AACxE,CAAC;AAED,SAAS,yBAAyB,CAAC,IAAY,EAAE,QAAgB;IAC/D,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAC/B,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAA;IACxC,MAAM,MAAM,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAA;IAC1C,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,2CAA2C,CAAC,CAAA;IACrE,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC;AAWD,MAAM,UAAU,UAAU;IACxB,OAAO;QACL,YAAY,EAAE,yBAAyB,CAAC,qCAAqC,EAAE,2BAA2B,CAAC;QAC3G,QAAQ,EAAE,yBAAyB,CAAC,gCAAgC,EAAE,sBAAsB,CAAC;QAC7F,aAAa,EAAE,yBAAyB,CAAC,sCAAsC,EAAE,4BAA4B,CAAC;QAC9G,YAAY,EAAE,yBAAyB,CAAC,qCAAqC,EAAE,2BAA2B,CAAC;QAC3G,eAAe,EAAE,yBAAyB,CAAC,wCAAwC,EAAE,8BAA8B,CAAC;QACpH,cAAc,EAAE,yBAAyB,CAAC,uCAAuC,EAAE,6BAA6B,CAAC;KAClH,CAAA;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,MAAM,SAAS,GAAG,oBAAoB,CAAC,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC;WAChF,+BAA+B,CAAA;IACpC,OAAO,SAAS,GAAG,kBAAkB,CAAA;AACvC,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAa;IAC3C,OAAO,GAAG,KAAK,GAAG,kBAAkB,MAAM,CAAA;AAC5C,CAAC"}
|
package/dist/src/prompts.d.ts
CHANGED
|
@@ -5,4 +5,4 @@ export declare const READ_PROMPT = "Reads a file from the local filesystem. You
|
|
|
5
5
|
export declare const EDIT_PROMPT = "Performs exact string replacements in files.\n\nUsage:\n- You must use your `Read` tool at least once in the conversation before editing. This tool will error if you attempt an edit without reading the file.\n- When editing text from Read tool output, ensure you preserve the exact indentation (tabs/spaces) as it appears AFTER the line number prefix. The line number prefix format is: line number + tab. Everything after that is the actual file content to match. Never include any part of the line number prefix in the old_string or new_string.\n- ALWAYS prefer editing existing files in the codebase. NEVER write new files unless explicitly required.\n- Only use emojis if the user explicitly requests it. Avoid adding emojis to files unless asked.\n- The edit will FAIL if `old_string` is not unique in the file. Either provide a larger string with more surrounding context to make it unique or use `replace_all` to change every instance of `old_string`.\n- Use `replace_all` for replacing and renaming strings across the file. This parameter is useful if you want to rename a variable for instance.";
|
|
6
6
|
export declare const WRITE_PROMPT = "Writes a file to the local filesystem.\n\nUsage:\n- This tool will overwrite the existing file if there is one at the provided path.\n- If this is an existing file, you MUST use the Read tool first to read the file's contents. This tool will fail if you did not read the file first.\n- Prefer the Edit tool for modifying existing files \u2014 it only sends the diff. Only use this tool to create new files or for complete rewrites.\n- NEVER create documentation files (*.md) or README files unless explicitly requested by the User.\n- Only use emojis if the user explicitly requests it. Avoid writing emojis to files unless asked.";
|
|
7
7
|
export declare const GREP_DESCRIPTION = "A powerful search tool built on regular expressions.";
|
|
8
|
-
export declare const GREP_PROMPT = "A powerful search tool for file contents.\n\nUsage:\n- ALWAYS use Grep for search tasks. NEVER invoke grep or rg as a Bash command.\n- Supports full regular expressions, file glob filters, file type filters, context lines, match-only output, multiline matching, pagination, file lists, and per-file counts.\n- Use output_mode=files_with_matches when you only need file paths; this is the default.\n- Use output_mode=content to see matching lines. Line numbers are included by default.\n- Use output_mode=count to see match counts per file.\n- Results are limited to 250 entries by default; use head_limit and offset for pagination.\n- Every file is decoded according to its nearest project .encoding-rules, so legacy encoded content is searched as Unicode transparently.";
|
|
8
|
+
export declare const GREP_PROMPT = "A powerful search tool for file contents.\n\nUsage:\n- ALWAYS use Grep for search tasks. NEVER invoke grep or rg as a Bash command.\n- Supports full regular expressions, file glob filters, file type filters, context lines, match-only output, multiline matching, pagination, file lists, and per-file counts.\n- Use output_mode=files_with_matches when you only need file paths; this is the default.\n- Use output_mode=content to see matching lines. Line numbers are included by default.\n- Use output_mode=count to see match counts per file.\n- scan_mode=exact is the default: pagination never stops scanning, so counts are exact when scanComplete is true. scan_mode=fast is opt-in and only valid for files_with_matches; it stops each matching file at its first match and reports countsExact=false.\n- Results are limited to 250 entries by default; use head_limit and offset for pagination. Check structuredContent scanComplete, truncationReason, and outputTruncated whenever a search is resource-limited.\n- Every file is decoded according to its nearest project .encoding-rules, so legacy encoded content is searched as Unicode transparently.";
|
package/dist/src/prompts.js
CHANGED
|
@@ -41,6 +41,7 @@ Usage:
|
|
|
41
41
|
- Use output_mode=files_with_matches when you only need file paths; this is the default.
|
|
42
42
|
- Use output_mode=content to see matching lines. Line numbers are included by default.
|
|
43
43
|
- Use output_mode=count to see match counts per file.
|
|
44
|
-
-
|
|
44
|
+
- scan_mode=exact is the default: pagination never stops scanning, so counts are exact when scanComplete is true. scan_mode=fast is opt-in and only valid for files_with_matches; it stops each matching file at its first match and reports countsExact=false.
|
|
45
|
+
- Results are limited to 250 entries by default; use head_limit and offset for pagination. Check structuredContent scanComplete, truncationReason, and outputTruncated whenever a search is resource-limited.
|
|
45
46
|
- Every file is decoded according to its nearest project .encoding-rules, so legacy encoded content is searched as Unicode transparently.`;
|
|
46
47
|
//# sourceMappingURL=prompts.js.map
|
package/dist/src/prompts.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/prompts.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,gBAAgB,GAAG,wCAAwC,CAAA;AACxE,MAAM,CAAC,MAAM,gBAAgB,GAAG,8CAA8C,CAAA;AAC9E,MAAM,CAAC,MAAM,iBAAiB,GAAG,uCAAuC,CAAA;AAExE,MAAM,CAAC,MAAM,WAAW,GAAG;;;;;;;;;;;;;8HAamG,CAAA;AAE9H,MAAM,CAAC,MAAM,WAAW,GAAG;;;;;;;;kJAQuH,CAAA;AAElJ,MAAM,CAAC,MAAM,YAAY,GAAG;;;;;;;kGAOsE,CAAA;AAElG,MAAM,CAAC,MAAM,gBAAgB,GAAG,sDAAsD,CAAA;AACtF,MAAM,CAAC,MAAM,WAAW,GAAG
|
|
1
|
+
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/prompts.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,gBAAgB,GAAG,wCAAwC,CAAA;AACxE,MAAM,CAAC,MAAM,gBAAgB,GAAG,8CAA8C,CAAA;AAC9E,MAAM,CAAC,MAAM,iBAAiB,GAAG,uCAAuC,CAAA;AAExE,MAAM,CAAC,MAAM,WAAW,GAAG;;;;;;;;;;;;;8HAamG,CAAA;AAE9H,MAAM,CAAC,MAAM,WAAW,GAAG;;;;;;;;kJAQuH,CAAA;AAElJ,MAAM,CAAC,MAAM,YAAY,GAAG;;;;;;;kGAOsE,CAAA;AAElG,MAAM,CAAC,MAAM,gBAAgB,GAAG,sDAAsD,CAAA;AACtF,MAAM,CAAC,MAAM,WAAW,GAAG;;;;;;;;;;0IAU+G,CAAA"}
|
package/dist/src/schemas.d.ts
CHANGED
|
@@ -88,6 +88,12 @@ export declare const grepInputSchema: {
|
|
|
88
88
|
readonly enum: readonly ["content", "files_with_matches", "count"];
|
|
89
89
|
readonly description: "Output mode. Defaults to files_with_matches.";
|
|
90
90
|
};
|
|
91
|
+
readonly scan_mode: {
|
|
92
|
+
readonly type: "string";
|
|
93
|
+
readonly enum: readonly ["exact", "fast"];
|
|
94
|
+
readonly default: "exact";
|
|
95
|
+
readonly description: "exact scans all eligible files and returns exact counts when complete. fast is opt-in for files_with_matches only and stops each matching file after its first match, so counts are not exact.";
|
|
96
|
+
};
|
|
91
97
|
readonly '-i': {
|
|
92
98
|
readonly type: "boolean";
|
|
93
99
|
readonly description: "Case-insensitive search";
|
package/dist/src/schemas.js
CHANGED
|
@@ -66,6 +66,7 @@ export const grepInputSchema = {
|
|
|
66
66
|
glob: { type: 'string', description: 'Glob pattern used to filter files, for example *.js or **/*.ts' },
|
|
67
67
|
type: { type: 'string', description: 'File type filter such as js, ts, py, rust, go, or java' },
|
|
68
68
|
output_mode: { type: 'string', enum: ['content', 'files_with_matches', 'count'], description: 'Output mode. Defaults to files_with_matches.' },
|
|
69
|
+
scan_mode: { type: 'string', enum: ['exact', 'fast'], default: 'exact', description: 'exact scans all eligible files and returns exact counts when complete. fast is opt-in for files_with_matches only and stops each matching file after its first match, so counts are not exact.' },
|
|
69
70
|
'-i': { type: 'boolean', description: 'Case-insensitive search' },
|
|
70
71
|
'-n': { type: 'boolean', description: 'Show line numbers in content mode. Defaults to true.' },
|
|
71
72
|
'-o': { type: 'boolean', description: 'Print only matching non-empty parts of each line' },
|
package/dist/src/schemas.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/schemas.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/schemas.ts"],"names":[],"mappings":"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"}
|
package/dist/src/server.d.ts
CHANGED
|
@@ -79,7 +79,7 @@ export declare const toolDefinitions: readonly [{
|
|
|
79
79
|
}, {
|
|
80
80
|
readonly name: "Grep";
|
|
81
81
|
readonly title: "A powerful search tool built on regular expressions.";
|
|
82
|
-
readonly description: "A powerful search tool for file contents.\n\nUsage:\n- ALWAYS use Grep for search tasks. NEVER invoke grep or rg as a Bash command.\n- Supports full regular expressions, file glob filters, file type filters, context lines, match-only output, multiline matching, pagination, file lists, and per-file counts.\n- Use output_mode=files_with_matches when you only need file paths; this is the default.\n- Use output_mode=content to see matching lines. Line numbers are included by default.\n- Use output_mode=count to see match counts per file.\n- Results are limited to 250 entries by default; use head_limit and offset for pagination.\n- Every file is decoded according to its nearest project .encoding-rules, so legacy encoded content is searched as Unicode transparently.";
|
|
82
|
+
readonly description: "A powerful search tool for file contents.\n\nUsage:\n- ALWAYS use Grep for search tasks. NEVER invoke grep or rg as a Bash command.\n- Supports full regular expressions, file glob filters, file type filters, context lines, match-only output, multiline matching, pagination, file lists, and per-file counts.\n- Use output_mode=files_with_matches when you only need file paths; this is the default.\n- Use output_mode=content to see matching lines. Line numbers are included by default.\n- Use output_mode=count to see match counts per file.\n- scan_mode=exact is the default: pagination never stops scanning, so counts are exact when scanComplete is true. scan_mode=fast is opt-in and only valid for files_with_matches; it stops each matching file at its first match and reports countsExact=false.\n- Results are limited to 250 entries by default; use head_limit and offset for pagination. Check structuredContent scanComplete, truncationReason, and outputTruncated whenever a search is resource-limited.\n- Every file is decoded according to its nearest project .encoding-rules, so legacy encoded content is searched as Unicode transparently.";
|
|
83
83
|
readonly inputSchema: {
|
|
84
84
|
readonly type: "object";
|
|
85
85
|
readonly additionalProperties: false;
|
|
@@ -106,6 +106,12 @@ export declare const toolDefinitions: readonly [{
|
|
|
106
106
|
readonly enum: readonly ["content", "files_with_matches", "count"];
|
|
107
107
|
readonly description: "Output mode. Defaults to files_with_matches.";
|
|
108
108
|
};
|
|
109
|
+
readonly scan_mode: {
|
|
110
|
+
readonly type: "string";
|
|
111
|
+
readonly enum: readonly ["exact", "fast"];
|
|
112
|
+
readonly default: "exact";
|
|
113
|
+
readonly description: "exact scans all eligible files and returns exact counts when complete. fast is opt-in for files_with_matches only and stops each matching file after its first match, so counts are not exact.";
|
|
114
|
+
};
|
|
109
115
|
readonly '-i': {
|
|
110
116
|
readonly type: "boolean";
|
|
111
117
|
readonly description: "Case-insensitive search";
|
package/dist/src/tools/grep.d.ts
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import type { ToolResponse } from '../toolTypes.js';
|
|
2
2
|
export type GrepOutputMode = 'content' | 'files_with_matches' | 'count';
|
|
3
|
+
export type GrepScanMode = 'exact' | 'fast';
|
|
3
4
|
export interface GrepInput {
|
|
4
5
|
pattern: string;
|
|
5
6
|
path?: string;
|
|
6
7
|
glob?: string;
|
|
7
8
|
type?: string;
|
|
8
9
|
output_mode?: GrepOutputMode;
|
|
10
|
+
scan_mode?: GrepScanMode;
|
|
9
11
|
'-i'?: boolean;
|
|
10
12
|
'-n'?: boolean;
|
|
11
13
|
'-o'?: boolean;
|
package/dist/src/tools/grep.js
CHANGED
|
@@ -1,13 +1,20 @@
|
|
|
1
|
+
import { createReadStream } from 'node:fs';
|
|
1
2
|
import { readdir, stat } from 'node:fs/promises';
|
|
2
3
|
import path from 'node:path';
|
|
4
|
+
import { TextDecoder } from 'node:util';
|
|
3
5
|
import picomatch from 'picomatch';
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
+
import { decodeText, normalizeEncoding, resolveEncoding } from '../encoding/index.js';
|
|
7
|
+
import { inspectProjectPath } from '../filesystem/index.js';
|
|
8
|
+
import { formatMebibytes, grepLimits, maxTextFileBytes } from '../limits.js';
|
|
9
|
+
import { getProjectFileContext } from '../core.js';
|
|
6
10
|
import { assertObject, optionalBoolean, optionalInteger, optionalString, rejectUnknown, requiredString, } from '../validation.js';
|
|
7
|
-
const MAX_GREP_FILES = 10_000;
|
|
8
11
|
const MAX_GREP_MATCHES_PER_FILE = 10_000;
|
|
9
12
|
const MAX_GREP_ENTRIES = 10_000;
|
|
10
13
|
const MAX_GREP_RESPONSE_CHARS = 1024 * 1024;
|
|
14
|
+
// Retaining context must not use more text than the bounded response it can produce.
|
|
15
|
+
const MAX_GREP_CONTEXT_CHARS = MAX_GREP_RESPONSE_CHARS;
|
|
16
|
+
// Multiline matching is deliberately exact, so its bounded whole-file buffer is stricter than normal streaming search.
|
|
17
|
+
const MAX_MULTILINE_FILE_BYTES = 1024 * 1024;
|
|
11
18
|
const TYPE_GLOBS = {
|
|
12
19
|
js: ['**/*.js', '**/*.jsx', '**/*.mjs', '**/*.cjs'],
|
|
13
20
|
ts: ['**/*.ts', '**/*.tsx', '**/*.mts', '**/*.cts'],
|
|
@@ -29,12 +36,19 @@ const TYPE_GLOBS = {
|
|
|
29
36
|
};
|
|
30
37
|
export function parseGrepInput(value) {
|
|
31
38
|
assertObject(value);
|
|
32
|
-
const allowed = ['pattern', 'path', 'glob', 'type', 'output_mode', '-i', '-n', '-o', '-A', '-B', '-C', 'context', 'multiline', 'head_limit', 'offset'];
|
|
39
|
+
const allowed = ['pattern', 'path', 'glob', 'type', 'output_mode', 'scan_mode', '-i', '-n', '-o', '-A', '-B', '-C', 'context', 'multiline', 'head_limit', 'offset'];
|
|
33
40
|
rejectUnknown(value, allowed);
|
|
34
41
|
const outputMode = optionalString(value, 'output_mode');
|
|
35
42
|
if (outputMode !== undefined && !['content', 'files_with_matches', 'count'].includes(outputMode)) {
|
|
36
43
|
throw new Error('output_mode must be content, files_with_matches, or count');
|
|
37
44
|
}
|
|
45
|
+
const scanMode = optionalString(value, 'scan_mode');
|
|
46
|
+
if (scanMode !== undefined && !['exact', 'fast'].includes(scanMode)) {
|
|
47
|
+
throw new Error('scan_mode must be exact or fast');
|
|
48
|
+
}
|
|
49
|
+
if (scanMode === 'fast' && outputMode !== undefined && outputMode !== 'files_with_matches') {
|
|
50
|
+
throw new Error('scan_mode=fast is only supported with output_mode=files_with_matches');
|
|
51
|
+
}
|
|
38
52
|
const result = { pattern: requiredString(value, 'pattern') };
|
|
39
53
|
for (const key of ['path', 'glob', 'type']) {
|
|
40
54
|
const item = optionalString(value, key);
|
|
@@ -43,6 +57,8 @@ export function parseGrepInput(value) {
|
|
|
43
57
|
}
|
|
44
58
|
if (outputMode !== undefined)
|
|
45
59
|
result.output_mode = outputMode;
|
|
60
|
+
if (scanMode !== undefined)
|
|
61
|
+
result.scan_mode = scanMode;
|
|
46
62
|
for (const key of ['-i', '-n', '-o', 'multiline']) {
|
|
47
63
|
const item = optionalBoolean(value, key);
|
|
48
64
|
if (item !== undefined)
|
|
@@ -55,128 +71,390 @@ export function parseGrepInput(value) {
|
|
|
55
71
|
}
|
|
56
72
|
return result;
|
|
57
73
|
}
|
|
58
|
-
|
|
59
|
-
|
|
74
|
+
class GrepBudget {
|
|
75
|
+
limits;
|
|
76
|
+
startedAt = Date.now();
|
|
77
|
+
scannedFiles = 0;
|
|
78
|
+
scannedBytes = 0;
|
|
79
|
+
skippedFiles = 0;
|
|
80
|
+
reason;
|
|
81
|
+
remainingOnlyMatches;
|
|
82
|
+
constructor(limits) {
|
|
83
|
+
this.limits = limits;
|
|
84
|
+
this.remainingOnlyMatches = limits.maxOnlyMatches;
|
|
85
|
+
}
|
|
86
|
+
get truncationReason() {
|
|
87
|
+
return this.reason;
|
|
88
|
+
}
|
|
89
|
+
get scanComplete() {
|
|
90
|
+
return this.reason === undefined;
|
|
91
|
+
}
|
|
92
|
+
get elapsedMs() {
|
|
93
|
+
return Date.now() - this.startedAt;
|
|
94
|
+
}
|
|
95
|
+
stop(reason) {
|
|
96
|
+
if (this.reason === undefined)
|
|
97
|
+
this.reason = reason;
|
|
98
|
+
}
|
|
99
|
+
checkTime() {
|
|
100
|
+
if (this.reason !== undefined)
|
|
101
|
+
return false;
|
|
102
|
+
if (this.elapsedMs > this.limits.maxDurationMs) {
|
|
103
|
+
this.stop('max_duration_ms');
|
|
104
|
+
return false;
|
|
105
|
+
}
|
|
60
106
|
return true;
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
107
|
+
}
|
|
108
|
+
startFile(size) {
|
|
109
|
+
if (!this.checkTime())
|
|
110
|
+
return false;
|
|
111
|
+
if (this.scannedFiles >= this.limits.maxFiles) {
|
|
112
|
+
this.stop('max_files');
|
|
113
|
+
return false;
|
|
114
|
+
}
|
|
115
|
+
// Admit complete files only, so stream chunking cannot make byte accounting exceed the request budget.
|
|
116
|
+
if (size > this.limits.maxScanBytes - this.scannedBytes) {
|
|
117
|
+
this.stop('max_scan_bytes');
|
|
118
|
+
return false;
|
|
119
|
+
}
|
|
120
|
+
this.scannedFiles += 1;
|
|
121
|
+
return true;
|
|
122
|
+
}
|
|
123
|
+
addBytes(bytes) {
|
|
124
|
+
if (!this.checkTime())
|
|
125
|
+
return false;
|
|
126
|
+
if (bytes > this.limits.maxScanBytes - this.scannedBytes) {
|
|
127
|
+
this.stop('max_scan_bytes');
|
|
128
|
+
return false;
|
|
129
|
+
}
|
|
130
|
+
this.scannedBytes += bytes;
|
|
131
|
+
return true;
|
|
132
|
+
}
|
|
133
|
+
consumeOnlyMatch() {
|
|
134
|
+
if (!this.checkTime())
|
|
135
|
+
return false;
|
|
136
|
+
if (this.remainingOnlyMatches <= 0) {
|
|
137
|
+
this.stop('max_only_matches');
|
|
138
|
+
return false;
|
|
139
|
+
}
|
|
140
|
+
this.remainingOnlyMatches -= 1;
|
|
141
|
+
return true;
|
|
142
|
+
}
|
|
143
|
+
skip(reason) {
|
|
144
|
+
this.skippedFiles += 1;
|
|
145
|
+
this.stop(reason);
|
|
146
|
+
}
|
|
65
147
|
}
|
|
66
|
-
function
|
|
67
|
-
return
|
|
148
|
+
function contextForFile(context, file) {
|
|
149
|
+
return {
|
|
150
|
+
...context,
|
|
151
|
+
absolutePath: file,
|
|
152
|
+
encoding: resolveEncoding(file, context.rules),
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
function createPathFilter(glob, type) {
|
|
156
|
+
const globMatcher = glob === undefined ? undefined : picomatch(glob, { dot: true });
|
|
157
|
+
const typePatterns = type === undefined ? undefined : TYPE_GLOBS[type];
|
|
158
|
+
if (type !== undefined && typePatterns === undefined)
|
|
159
|
+
throw new Error(`Unsupported file type: ${type}`);
|
|
160
|
+
const typeMatchers = typePatterns?.map(pattern => picomatch(pattern, { dot: true }));
|
|
161
|
+
return relative => (globMatcher === undefined || globMatcher(relative))
|
|
162
|
+
&& (typeMatchers === undefined || typeMatchers.some(matcher => matcher(relative)));
|
|
68
163
|
}
|
|
69
|
-
async function
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
return
|
|
73
|
-
|
|
164
|
+
async function* iterateFiles(root, target, targetInfo, context, matchesPath) {
|
|
165
|
+
if (targetInfo.isFile()) {
|
|
166
|
+
yield { file: target, context: contextForFile(context, target), size: targetInfo.size };
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
if (!targetInfo.isDirectory())
|
|
74
170
|
throw new Error(`Path is not a file or directory: ${target}`);
|
|
75
|
-
const
|
|
76
|
-
const visit = async (directory) => {
|
|
171
|
+
const visit = async function* (directory, relativeDirectory, activeContext) {
|
|
77
172
|
const entries = await readdir(directory, { withFileTypes: true });
|
|
173
|
+
entries.sort((left, right) => left.name.localeCompare(right.name));
|
|
174
|
+
const directoryContext = entries.some(entry => entry.name === '.encoding-rules' && entry.isFile())
|
|
175
|
+
&& path.resolve(directory) !== activeContext.root
|
|
176
|
+
? await getProjectFileContext(path.join(directory, '.codepage-bridge-search-probe'))
|
|
177
|
+
: activeContext;
|
|
78
178
|
for (const entry of entries) {
|
|
79
179
|
if (entry.name === 'node_modules' || entry.name === '.git' || entry.name === 'dist')
|
|
80
180
|
continue;
|
|
81
181
|
const absolute = path.join(directory, entry.name);
|
|
82
|
-
const relative =
|
|
83
|
-
if (entry.isDirectory())
|
|
84
|
-
await
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
182
|
+
const relative = relativeDirectory ? `${relativeDirectory}/${entry.name}` : entry.name;
|
|
183
|
+
if (entry.isDirectory()) {
|
|
184
|
+
const safe = await inspectProjectPath(directoryContext.root, absolute);
|
|
185
|
+
const info = await stat(safe.target);
|
|
186
|
+
if (info.isDirectory())
|
|
187
|
+
yield* visit(safe.target, relative, directoryContext);
|
|
188
|
+
}
|
|
189
|
+
else if (entry.isFile() && matchesPath(relative)) {
|
|
190
|
+
const safe = await inspectProjectPath(directoryContext.root, absolute);
|
|
191
|
+
const info = await stat(safe.target);
|
|
192
|
+
if (info.isFile())
|
|
193
|
+
yield { file: safe.target, context: contextForFile(directoryContext, safe.target), size: info.size };
|
|
90
194
|
}
|
|
91
195
|
}
|
|
92
196
|
};
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
197
|
+
yield* visit(target, path.relative(root, target).split(path.sep).join('/'), context);
|
|
198
|
+
}
|
|
199
|
+
function responseState() {
|
|
200
|
+
return { entries: [], count: 0, characters: 0, truncated: false };
|
|
201
|
+
}
|
|
202
|
+
function appendEntry(state, entry, offset, limit) {
|
|
203
|
+
return appendEntryParts(state, [entry], offset, limit);
|
|
204
|
+
}
|
|
205
|
+
function appendEntryParts(state, parts, offset, limit) {
|
|
206
|
+
if (state.truncated)
|
|
207
|
+
return false;
|
|
208
|
+
if (state.count >= offset && state.entries.length < limit) {
|
|
209
|
+
const length = parts.reduce((total, part) => total + part.length, 0);
|
|
210
|
+
if (state.characters + length > MAX_GREP_RESPONSE_CHARS) {
|
|
211
|
+
state.truncated = true;
|
|
212
|
+
return false;
|
|
213
|
+
}
|
|
214
|
+
state.entries.push(parts.join(''));
|
|
215
|
+
state.characters += length + 1;
|
|
216
|
+
}
|
|
217
|
+
state.count += 1;
|
|
218
|
+
return true;
|
|
219
|
+
}
|
|
220
|
+
function* onlyMatches(line, expression) {
|
|
221
|
+
const global = new RegExp(expression.source, expression.flags.includes('g') ? expression.flags : `${expression.flags}g`);
|
|
222
|
+
for (const match of line.matchAll(global)) {
|
|
223
|
+
if (match[0])
|
|
224
|
+
yield match[0];
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
function testLine(line, expression) {
|
|
228
|
+
expression.lastIndex = 0;
|
|
229
|
+
return expression.test(line);
|
|
230
|
+
}
|
|
231
|
+
function ensureLineLimit(line, budget) {
|
|
232
|
+
if (line.length > budget.limits.maxLineChars) {
|
|
233
|
+
budget.stop('max_line_chars');
|
|
234
|
+
throw new Error('Grep line length limit exceeded');
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
async function* readSearchableLines(file, budget) {
|
|
238
|
+
const encoding = normalizeEncoding(file.context.encoding);
|
|
239
|
+
const decoder = new TextDecoder(encoding, { fatal: true });
|
|
240
|
+
let pending = '';
|
|
241
|
+
let trailingCarriageReturn = false;
|
|
242
|
+
const joinPending = (line) => {
|
|
243
|
+
const complete = pending + line;
|
|
244
|
+
pending = '';
|
|
245
|
+
ensureLineLimit(complete, budget);
|
|
246
|
+
return complete;
|
|
247
|
+
};
|
|
248
|
+
const consume = function* (decoded) {
|
|
249
|
+
const lines = decoded.split('\n');
|
|
250
|
+
const remainder = lines.pop() ?? '';
|
|
251
|
+
for (const line of lines)
|
|
252
|
+
yield joinPending(line);
|
|
253
|
+
return remainder;
|
|
254
|
+
};
|
|
255
|
+
try {
|
|
256
|
+
for await (const chunk of createReadStream(file.file, { highWaterMark: 64 * 1024 })) {
|
|
257
|
+
if (!budget.addBytes(chunk.length))
|
|
258
|
+
return;
|
|
259
|
+
let decoded = decoder.decode(chunk, { stream: true });
|
|
260
|
+
if (trailingCarriageReturn && !decoded.startsWith('\n'))
|
|
261
|
+
decoded = `\n${decoded}`;
|
|
262
|
+
trailingCarriageReturn = false;
|
|
263
|
+
if (decoded.endsWith('\r')) {
|
|
264
|
+
decoded = decoded.slice(0, -1);
|
|
265
|
+
trailingCarriageReturn = true;
|
|
266
|
+
}
|
|
267
|
+
decoded = decoded.replaceAll('\r\n', '\n').replaceAll('\r', '\n');
|
|
268
|
+
const consumed = consume(decoded);
|
|
269
|
+
let next = consumed.next();
|
|
270
|
+
while (!next.done) {
|
|
271
|
+
if (!budget.checkTime())
|
|
272
|
+
return;
|
|
273
|
+
yield next.value;
|
|
274
|
+
next = consumed.next();
|
|
275
|
+
}
|
|
276
|
+
pending += next.value;
|
|
277
|
+
ensureLineLimit(pending, budget);
|
|
278
|
+
}
|
|
279
|
+
let decoded = decoder.decode();
|
|
280
|
+
if (trailingCarriageReturn && !decoded.startsWith('\n'))
|
|
281
|
+
decoded = `\n${decoded}`;
|
|
282
|
+
decoded = decoded.replaceAll('\r\n', '\n').replaceAll('\r', '\n');
|
|
283
|
+
const consumed = consume(decoded);
|
|
284
|
+
let next = consumed.next();
|
|
285
|
+
while (!next.done) {
|
|
286
|
+
if (!budget.checkTime())
|
|
287
|
+
return;
|
|
288
|
+
yield next.value;
|
|
289
|
+
next = consumed.next();
|
|
290
|
+
}
|
|
291
|
+
yield joinPending(next.value);
|
|
292
|
+
}
|
|
293
|
+
catch (error) {
|
|
294
|
+
if (error instanceof TypeError)
|
|
295
|
+
throw new Error(`Invalid byte sequence for ${encoding}`, { cause: error });
|
|
296
|
+
throw error;
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
function formatLine(file, line, text, direct, input, includeFile) {
|
|
300
|
+
const separator = direct ? ':' : '-';
|
|
301
|
+
const number = input['-n'] ?? true;
|
|
302
|
+
return `${includeFile ? `${file}${separator}` : ''}${number ? `${line}${separator}` : ''}${text}`;
|
|
303
|
+
}
|
|
304
|
+
function appendFormattedLine(state, file, line, text, direct, input, includeFile, offset, limit) {
|
|
305
|
+
const separator = direct ? ':' : '-';
|
|
306
|
+
return appendEntryParts(state, [
|
|
307
|
+
includeFile ? `${file}${separator}` : '',
|
|
308
|
+
input['-n'] ?? true ? `${line}${separator}` : '',
|
|
309
|
+
text,
|
|
310
|
+
], offset, limit);
|
|
311
|
+
}
|
|
312
|
+
async function countLineMatches(file, expression, budget, firstOnly) {
|
|
313
|
+
let matches = 0;
|
|
314
|
+
for await (const line of readSearchableLines(file, budget)) {
|
|
315
|
+
if (!testLine(line, expression))
|
|
103
316
|
continue;
|
|
104
|
-
|
|
317
|
+
matches += 1;
|
|
318
|
+
if (firstOnly)
|
|
319
|
+
return matches;
|
|
320
|
+
if (matches > MAX_GREP_MATCHES_PER_FILE) {
|
|
105
321
|
throw new Error(`File has more than ${MAX_GREP_MATCHES_PER_FILE} matches. Narrow the search pattern.`);
|
|
106
322
|
}
|
|
107
|
-
if (onlyMatching) {
|
|
108
|
-
const global = new RegExp(expression.source, expression.flags.includes('g') ? expression.flags : `${expression.flags}g`);
|
|
109
|
-
const only = [...line.matchAll(global)].map(match => match[0]).filter(Boolean);
|
|
110
|
-
matches.push({ line: index + 1, text: line, only });
|
|
111
|
-
}
|
|
112
|
-
else
|
|
113
|
-
matches.push({ line: index + 1, text: line });
|
|
114
323
|
}
|
|
115
324
|
return matches;
|
|
116
325
|
}
|
|
117
|
-
function
|
|
118
|
-
if (!input.multiline)
|
|
119
|
-
return searchLines(text, expression, input['-o'] ?? false);
|
|
120
|
-
expression.lastIndex = 0;
|
|
121
|
-
return expression.test(text) ? [{ line: 1, text }] : [];
|
|
122
|
-
}
|
|
123
|
-
function formatContent(file, text, matches, input, includeFile) {
|
|
124
|
-
const lines = text.split('\n');
|
|
326
|
+
async function collectContent(file, expression, input, includeFile, state, offset, limit, budget) {
|
|
125
327
|
const context = input.context ?? input['-C'];
|
|
126
328
|
const before = context ?? input['-B'] ?? 0;
|
|
127
329
|
const after = context ?? input['-A'] ?? 0;
|
|
128
|
-
const
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
330
|
+
const previousLines = [];
|
|
331
|
+
let previousLineChars = 0;
|
|
332
|
+
let previousOutputLine = 0;
|
|
333
|
+
let afterUntil = 0;
|
|
334
|
+
let matches = 0;
|
|
335
|
+
let lineNumber = 0;
|
|
336
|
+
const retainPreviousLine = (previous) => {
|
|
337
|
+
if (previousLines.length >= before) {
|
|
338
|
+
const removed = previousLines.shift();
|
|
339
|
+
previousLineChars -= removed?.text.length ?? 0;
|
|
340
|
+
}
|
|
341
|
+
if (previous.text.length > MAX_GREP_CONTEXT_CHARS - previousLineChars) {
|
|
342
|
+
budget.stop('max_context_chars');
|
|
343
|
+
throw new Error(`Grep context storage limit exceeded (${MAX_GREP_CONTEXT_CHARS} characters)`);
|
|
344
|
+
}
|
|
345
|
+
previousLines.push(previous);
|
|
346
|
+
previousLineChars += previous.text.length;
|
|
347
|
+
};
|
|
348
|
+
for await (const line of readSearchableLines(file, budget)) {
|
|
349
|
+
lineNumber += 1;
|
|
350
|
+
if (!budget.checkTime())
|
|
351
|
+
return matches;
|
|
352
|
+
const direct = testLine(line, expression);
|
|
353
|
+
if (direct) {
|
|
354
|
+
matches += 1;
|
|
355
|
+
if (matches > MAX_GREP_MATCHES_PER_FILE) {
|
|
356
|
+
throw new Error(`File has more than ${MAX_GREP_MATCHES_PER_FILE} matches. Narrow the search pattern.`);
|
|
357
|
+
}
|
|
358
|
+
if (input['-o']) {
|
|
359
|
+
for (const part of onlyMatches(line, expression)) {
|
|
360
|
+
if (!budget.consumeOnlyMatch())
|
|
361
|
+
return matches;
|
|
362
|
+
appendEntryParts(state, [
|
|
363
|
+
includeFile ? `${file.file}:` : '',
|
|
364
|
+
input['-n'] ?? true ? `${lineNumber}:` : '',
|
|
365
|
+
part,
|
|
366
|
+
], offset, limit);
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
else {
|
|
370
|
+
for (const previous of previousLines) {
|
|
371
|
+
if (previousOutputLine > 0 && previous.line > previousOutputLine + 1)
|
|
372
|
+
appendEntry(state, '--', offset, limit);
|
|
373
|
+
appendFormattedLine(state, file.file, previous.line, previous.text, false, input, includeFile, offset, limit);
|
|
374
|
+
previousOutputLine = previous.line;
|
|
375
|
+
}
|
|
376
|
+
previousLines.length = 0;
|
|
377
|
+
previousLineChars = 0;
|
|
378
|
+
if (previousOutputLine > 0 && lineNumber > previousOutputLine + 1)
|
|
379
|
+
appendEntry(state, '--', offset, limit);
|
|
380
|
+
appendFormattedLine(state, file.file, lineNumber, line, true, input, includeFile, offset, limit);
|
|
381
|
+
previousOutputLine = lineNumber;
|
|
382
|
+
afterUntil = Math.max(afterUntil, lineNumber + after);
|
|
383
|
+
}
|
|
384
|
+
continue;
|
|
385
|
+
}
|
|
386
|
+
if (!input['-o'] && lineNumber <= afterUntil) {
|
|
387
|
+
appendFormattedLine(state, file.file, lineNumber, line, false, input, includeFile, offset, limit);
|
|
388
|
+
previousOutputLine = lineNumber;
|
|
389
|
+
continue;
|
|
134
390
|
}
|
|
135
|
-
|
|
391
|
+
if (!input['-o'] && before > 0) {
|
|
392
|
+
retainPreviousLine({ line: lineNumber, text: line });
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
return matches;
|
|
396
|
+
}
|
|
397
|
+
async function readMultilineFile(file, budget) {
|
|
398
|
+
if (file.size > MAX_MULTILINE_FILE_BYTES) {
|
|
399
|
+
budget.stop('max_multiline_file_bytes');
|
|
400
|
+
throw new Error(`Multiline search is limited to ${formatMebibytes(MAX_MULTILINE_FILE_BYTES)} per file to preserve exact matching`);
|
|
136
401
|
}
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
402
|
+
if (!budget.checkTime())
|
|
403
|
+
throw new Error('Grep duration limit exceeded');
|
|
404
|
+
const chunks = [];
|
|
405
|
+
let bytesRead = 0;
|
|
406
|
+
for await (const chunk of createReadStream(file.file, { highWaterMark: 64 * 1024 })) {
|
|
407
|
+
if (chunk.length > MAX_MULTILINE_FILE_BYTES - bytesRead) {
|
|
408
|
+
budget.stop('max_multiline_file_bytes');
|
|
409
|
+
throw new Error(`Multiline search is limited to ${formatMebibytes(MAX_MULTILINE_FILE_BYTES)} per file to preserve exact matching`);
|
|
141
410
|
}
|
|
411
|
+
if (!budget.addBytes(chunk.length))
|
|
412
|
+
throw budgetError(budget.truncationReason);
|
|
413
|
+
chunks.push(chunk);
|
|
414
|
+
bytesRead += chunk.length;
|
|
142
415
|
}
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
if (previous > 0 && line > previous + 1)
|
|
146
|
-
output.push('--');
|
|
147
|
-
const separator = direct ? ':' : '-';
|
|
148
|
-
output.push(`${includeFile ? `${file}${separator}` : ''}${withNumbers ? `${line}${separator}` : ''}${lines[line - 1] ?? ''}`);
|
|
149
|
-
previous = line;
|
|
416
|
+
try {
|
|
417
|
+
return decodeText(Buffer.concat(chunks, bytesRead), file.context.encoding).text.replaceAll('\r\n', '\n').replaceAll('\r', '\n');
|
|
150
418
|
}
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
const info = await stat(file);
|
|
155
|
-
const maximumBytes = maxTextFileBytes();
|
|
156
|
-
if (info.size > maximumBytes) {
|
|
157
|
-
throw new Error(`File exceeds the ${formatMebibytes(maximumBytes)} search limit. Set CODEPAGE_BRIDGE_MAX_TEXT_FILE_MIB to raise it.`);
|
|
419
|
+
catch (error) {
|
|
420
|
+
budget.stop('decode_error');
|
|
421
|
+
throw error;
|
|
158
422
|
}
|
|
159
|
-
const context = await getProjectFileContext(file);
|
|
160
|
-
const snapshot = await readDecodedFile(context);
|
|
161
|
-
return snapshot.text;
|
|
162
423
|
}
|
|
163
|
-
function
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
if (
|
|
167
|
-
return
|
|
168
|
-
|
|
169
|
-
characters.value += entry.length + 1;
|
|
424
|
+
function collectMultilineContent(file, text, expression, input, includeFile, state, offset, limit, budget) {
|
|
425
|
+
if (input['-o']) {
|
|
426
|
+
for (const part of onlyMatches(text, expression)) {
|
|
427
|
+
if (!budget.consumeOnlyMatch())
|
|
428
|
+
return;
|
|
429
|
+
appendEntry(state, `${includeFile ? `${file.file}:` : ''}${input['-n'] ?? true ? '1:' : ''}${part}`, offset, limit);
|
|
170
430
|
}
|
|
171
|
-
|
|
431
|
+
return;
|
|
432
|
+
}
|
|
433
|
+
appendEntry(state, formatLine(file.file, 1, text, true, input, includeFile), offset, limit);
|
|
434
|
+
}
|
|
435
|
+
function validateContext(input, limits) {
|
|
436
|
+
const context = input.context ?? input['-C'];
|
|
437
|
+
const before = context ?? input['-B'] ?? 0;
|
|
438
|
+
const after = context ?? input['-A'] ?? 0;
|
|
439
|
+
if (before + after > limits.maxContextLines) {
|
|
440
|
+
throw new Error(`Requested context exceeds CODEPAGE_BRIDGE_MAX_GREP_CONTEXT_LINES (${limits.maxContextLines})`);
|
|
172
441
|
}
|
|
173
|
-
|
|
442
|
+
}
|
|
443
|
+
function budgetError(reason) {
|
|
444
|
+
return new Error(`Grep search budget exceeded: ${reason ?? 'unknown'}`);
|
|
174
445
|
}
|
|
175
446
|
export async function executeGrep(input) {
|
|
447
|
+
const limits = grepLimits();
|
|
448
|
+
validateContext(input, limits);
|
|
176
449
|
const targetInput = path.resolve(input.path ?? process.cwd());
|
|
177
|
-
const
|
|
178
|
-
const
|
|
179
|
-
const
|
|
450
|
+
const initialContext = await getProjectFileContext(targetInput);
|
|
451
|
+
const safeTarget = await inspectProjectPath(initialContext.root, targetInput);
|
|
452
|
+
const targetInfo = await stat(safeTarget.target);
|
|
453
|
+
const targetContext = targetInfo.isDirectory()
|
|
454
|
+
? await getProjectFileContext(path.join(safeTarget.target, '.codepage-bridge-search-probe'))
|
|
455
|
+
: initialContext;
|
|
456
|
+
const matchesPath = createPathFilter(input.glob, input.type);
|
|
457
|
+
const files = iterateFiles(targetContext.root, safeTarget.target, targetInfo, targetContext, matchesPath);
|
|
180
458
|
const explicitFile = targetInfo.isFile();
|
|
181
459
|
const flags = `${input['-i'] ? 'i' : ''}${input.multiline ? 'ms' : ''}`;
|
|
182
460
|
let expression;
|
|
@@ -186,59 +464,121 @@ export async function executeGrep(input) {
|
|
|
186
464
|
catch (error) {
|
|
187
465
|
throw new Error(`Invalid regular expression: ${error instanceof Error ? error.message : String(error)}`);
|
|
188
466
|
}
|
|
189
|
-
const matched = [];
|
|
190
|
-
for (const file of files) {
|
|
191
|
-
try {
|
|
192
|
-
const searchable = await readSearchableFile(file);
|
|
193
|
-
const matches = findMatches(searchable, expression, input);
|
|
194
|
-
if (matches.length > 0)
|
|
195
|
-
matched.push({ file, count: matches.length });
|
|
196
|
-
}
|
|
197
|
-
catch (error) {
|
|
198
|
-
if (explicitFile) {
|
|
199
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
200
|
-
throw new Error(`Failed to search ${file}: ${message}`, { cause: error });
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
467
|
const mode = input.output_mode ?? 'files_with_matches';
|
|
468
|
+
const scanMode = input.scan_mode ?? 'exact';
|
|
469
|
+
if (scanMode === 'fast' && mode !== 'files_with_matches') {
|
|
470
|
+
throw new Error('scan_mode=fast is only supported with output_mode=files_with_matches');
|
|
471
|
+
}
|
|
205
472
|
const offset = input.offset ?? 0;
|
|
206
473
|
const requestedLimit = input.head_limit ?? 250;
|
|
207
474
|
const limit = requestedLimit === 0 ? MAX_GREP_ENTRIES : Math.min(requestedLimit, MAX_GREP_ENTRIES);
|
|
208
|
-
const
|
|
209
|
-
const
|
|
210
|
-
|
|
211
|
-
let
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
475
|
+
const state = responseState();
|
|
476
|
+
const budget = new GrepBudget(limits);
|
|
477
|
+
let numFiles = 0;
|
|
478
|
+
let numMatches = 0;
|
|
479
|
+
for await (const file of files) {
|
|
480
|
+
if (!budget.checkTime())
|
|
481
|
+
break;
|
|
482
|
+
if (file.size > maxTextFileBytes()) {
|
|
483
|
+
budget.skip('max_text_file_bytes');
|
|
484
|
+
if (explicitFile) {
|
|
485
|
+
throw new Error(`Failed to search ${file.file}: File exceeds the ${formatMebibytes(maxTextFileBytes())} search limit. Set CODEPAGE_BRIDGE_MAX_TEXT_FILE_MIB to raise it.`);
|
|
486
|
+
}
|
|
487
|
+
continue;
|
|
488
|
+
}
|
|
489
|
+
if (input.multiline && file.size > MAX_MULTILINE_FILE_BYTES) {
|
|
490
|
+
budget.skip('max_multiline_file_bytes');
|
|
491
|
+
if (explicitFile)
|
|
492
|
+
throw new Error(`Failed to search ${file.file}: Multiline search is limited to ${formatMebibytes(MAX_MULTILINE_FILE_BYTES)} per file to preserve exact matching`);
|
|
493
|
+
continue;
|
|
494
|
+
}
|
|
495
|
+
if (!budget.startFile(file.size)) {
|
|
496
|
+
budget.skippedFiles += 1;
|
|
497
|
+
if (explicitFile)
|
|
498
|
+
throw new Error(`Failed to search ${file.file}: ${budgetError(budget.truncationReason).message}`);
|
|
499
|
+
break;
|
|
500
|
+
}
|
|
501
|
+
try {
|
|
502
|
+
if (input.multiline) {
|
|
503
|
+
const searchable = await readMultilineFile(file, budget);
|
|
504
|
+
if (!testLine(searchable, expression))
|
|
505
|
+
continue;
|
|
506
|
+
numFiles += 1;
|
|
507
|
+
numMatches += 1;
|
|
508
|
+
if (mode === 'files_with_matches')
|
|
509
|
+
appendEntry(state, file.file, offset, limit);
|
|
510
|
+
else if (mode === 'count')
|
|
511
|
+
appendEntry(state, `${file.file}:1`, offset, limit);
|
|
512
|
+
else
|
|
513
|
+
collectMultilineContent(file, searchable, expression, input, !explicitFile, state, offset, limit, budget);
|
|
514
|
+
if (!budget.scanComplete)
|
|
515
|
+
break;
|
|
516
|
+
continue;
|
|
517
|
+
}
|
|
518
|
+
if (mode === 'content') {
|
|
519
|
+
const fileMatches = await collectContent(file, expression, input, !explicitFile, state, offset, limit, budget);
|
|
520
|
+
if (fileMatches > 0) {
|
|
521
|
+
numFiles += 1;
|
|
522
|
+
numMatches += fileMatches;
|
|
523
|
+
}
|
|
524
|
+
}
|
|
525
|
+
else {
|
|
526
|
+
const fileMatches = await countLineMatches(file, expression, budget, scanMode === 'fast');
|
|
527
|
+
if (fileMatches > 0) {
|
|
528
|
+
numFiles += 1;
|
|
529
|
+
numMatches += fileMatches;
|
|
530
|
+
appendEntry(state, mode === 'count' ? `${file.file}:${fileMatches}` : file.file, offset, limit);
|
|
531
|
+
}
|
|
532
|
+
}
|
|
533
|
+
}
|
|
534
|
+
catch (error) {
|
|
535
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
536
|
+
if (budget.truncationReason === undefined) {
|
|
537
|
+
if (/Invalid byte sequence|Encoding/.test(message))
|
|
538
|
+
budget.stop('decode_error');
|
|
539
|
+
else if (/more than .* matches/.test(message))
|
|
540
|
+
budget.stop('max_matches_per_file');
|
|
541
|
+
else
|
|
542
|
+
budget.stop('file_error');
|
|
543
|
+
}
|
|
544
|
+
if (explicitFile) {
|
|
545
|
+
throw new Error(`Failed to search ${file.file}: ${budgetError(budget.truncationReason).message}: ${message}`, { cause: error });
|
|
225
546
|
}
|
|
547
|
+
budget.skippedFiles += 1;
|
|
226
548
|
}
|
|
549
|
+
if (!budget.scanComplete)
|
|
550
|
+
break;
|
|
227
551
|
}
|
|
228
|
-
if (count
|
|
229
|
-
truncated = true;
|
|
230
|
-
if (requestedLimit === 0 && count
|
|
231
|
-
truncated = true;
|
|
232
|
-
const
|
|
233
|
-
|
|
234
|
-
|
|
552
|
+
if (state.count > offset + state.entries.length)
|
|
553
|
+
state.truncated = true;
|
|
554
|
+
if (requestedLimit === 0 && state.count >= MAX_GREP_ENTRIES)
|
|
555
|
+
state.truncated = true;
|
|
556
|
+
const outputTruncated = state.truncated;
|
|
557
|
+
const notices = [];
|
|
558
|
+
if (outputTruncated)
|
|
559
|
+
notices.push(`Showing results with pagination = limit: ${limit}, offset: ${offset}; output is capped for server stability`);
|
|
560
|
+
if (!budget.scanComplete)
|
|
561
|
+
notices.push(`Search incomplete: scanComplete=false; truncationReason=${budget.truncationReason ?? 'unknown'}`);
|
|
562
|
+
const suffix = notices.length === 0
|
|
563
|
+
? ''
|
|
564
|
+
: `${state.entries.length > 0 ? '\n\n' : ''}[${notices.join('] [')}]`;
|
|
565
|
+
const countsExact = scanMode === 'exact' && budget.scanComplete;
|
|
235
566
|
return {
|
|
236
|
-
content: [{ type: 'text', text: `${entries.join('\n')}${suffix}` }],
|
|
567
|
+
content: [{ type: 'text', text: `${state.entries.join('\n')}${suffix}` }],
|
|
237
568
|
structuredContent: {
|
|
238
569
|
mode,
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
570
|
+
scanMode,
|
|
571
|
+
numFiles,
|
|
572
|
+
numMatches,
|
|
573
|
+
entries: state.entries,
|
|
574
|
+
scanComplete: budget.scanComplete,
|
|
575
|
+
countsExact,
|
|
576
|
+
outputTruncated,
|
|
577
|
+
...(budget.truncationReason === undefined ? {} : { truncationReason: budget.truncationReason }),
|
|
578
|
+
scannedFiles: budget.scannedFiles,
|
|
579
|
+
scannedBytes: budget.scannedBytes,
|
|
580
|
+
skippedFiles: budget.skippedFiles,
|
|
581
|
+
elapsedMs: budget.elapsedMs,
|
|
242
582
|
},
|
|
243
583
|
};
|
|
244
584
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grep.js","sourceRoot":"","sources":["../../../src/tools/grep.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"grep.js","sourceRoot":"","sources":["../../../src/tools/grep.ts"],"names":[],"mappings":"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"}
|