@nanocollective/nanocoder 1.16.2 → 1.16.3
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/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +35 -3
- package/dist/commands/update.js.map +1 -1
- package/dist/components/assistant-message.d.ts +1 -4
- package/dist/components/assistant-message.d.ts.map +1 -1
- package/dist/components/assistant-message.js +1 -199
- package/dist/components/assistant-message.js.map +1 -1
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +13 -5
- package/dist/config/index.js.map +1 -1
- package/dist/config/paths.d.ts.map +1 -1
- package/dist/config/paths.js +23 -2
- package/dist/config/paths.js.map +1 -1
- package/dist/hooks/useAppState.d.ts.map +1 -1
- package/dist/hooks/useAppState.js +8 -15
- package/dist/hooks/useAppState.js.map +1 -1
- package/dist/hooks/useTerminalWidth.d.ts.map +1 -1
- package/dist/hooks/useTerminalWidth.js +6 -0
- package/dist/hooks/useTerminalWidth.js.map +1 -1
- package/dist/markdown-parser/html-entities.d.ts +2 -0
- package/dist/markdown-parser/html-entities.d.ts.map +1 -0
- package/dist/markdown-parser/html-entities.js +41 -0
- package/dist/markdown-parser/html-entities.js.map +1 -0
- package/dist/markdown-parser/html-entities.spec.d.ts +2 -0
- package/dist/markdown-parser/html-entities.spec.d.ts.map +1 -0
- package/dist/markdown-parser/html-entities.spec.js +73 -0
- package/dist/markdown-parser/html-entities.spec.js.map +1 -0
- package/dist/markdown-parser/index.d.ts +6 -0
- package/dist/markdown-parser/index.d.ts.map +1 -0
- package/dist/markdown-parser/index.js +97 -0
- package/dist/markdown-parser/index.js.map +1 -0
- package/dist/markdown-parser/index.spec.d.ts +2 -0
- package/dist/markdown-parser/index.spec.d.ts.map +1 -0
- package/dist/markdown-parser/index.spec.js +245 -0
- package/dist/markdown-parser/index.spec.js.map +1 -0
- package/dist/markdown-parser/table-parser.d.ts +3 -0
- package/dist/markdown-parser/table-parser.d.ts.map +1 -0
- package/dist/markdown-parser/table-parser.js +92 -0
- package/dist/markdown-parser/table-parser.js.map +1 -0
- package/dist/markdown-parser/table-parser.spec.d.ts +2 -0
- package/dist/markdown-parser/table-parser.spec.d.ts.map +1 -0
- package/dist/markdown-parser/table-parser.spec.js +120 -0
- package/dist/markdown-parser/table-parser.spec.js.map +1 -0
- package/dist/markdown-parser/utils.d.ts +2 -0
- package/dist/markdown-parser/utils.d.ts.map +1 -0
- package/dist/markdown-parser/utils.js +14 -0
- package/dist/markdown-parser/utils.js.map +1 -0
- package/dist/markdown-parser/utils.spec.d.ts +2 -0
- package/dist/markdown-parser/utils.spec.d.ts.map +1 -0
- package/dist/markdown-parser/utils.spec.js +59 -0
- package/dist/markdown-parser/utils.spec.js.map +1 -0
- package/dist/tools/find-files.d.ts +3 -0
- package/dist/tools/find-files.d.ts.map +1 -0
- package/dist/tools/find-files.js +186 -0
- package/dist/tools/find-files.js.map +1 -0
- package/dist/tools/index.js +4 -4
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/read-file.d.ts.map +1 -1
- package/dist/tools/read-file.js +143 -9
- package/dist/tools/read-file.js.map +1 -1
- package/dist/tools/search-file-contents.d.ts +3 -0
- package/dist/tools/search-file-contents.d.ts.map +1 -0
- package/dist/tools/search-file-contents.js +164 -0
- package/dist/tools/search-file-contents.js.map +1 -0
- package/dist/types/markdown-parser.d.ts +11 -0
- package/dist/types/markdown-parser.d.ts.map +1 -0
- package/dist/types/markdown-parser.js +2 -0
- package/dist/types/markdown-parser.js.map +1 -0
- package/dist/utils/update-checker.spec.d.ts +2 -0
- package/dist/utils/update-checker.spec.d.ts.map +1 -0
- package/dist/utils/update-checker.spec.js +230 -0
- package/dist/utils/update-checker.spec.js.map +1 -0
- package/package.json +1 -1
- package/source/app/prompts/main-prompt.md +67 -23
- package/dist/components/update-message.d.ts +0 -7
- package/dist/components/update-message.d.ts.map +0 -1
- package/dist/components/update-message.js +0 -93
- package/dist/components/update-message.js.map +0 -1
- package/dist/tools/read-many-files.d.ts +0 -3
- package/dist/tools/read-many-files.d.ts.map +0 -1
- package/dist/tools/read-many-files.js +0 -169
- package/dist/tools/read-many-files.js.map +0 -1
- package/dist/tools/search-files.d.ts +0 -3
- package/dist/tools/search-files.d.ts.map +0 -1
- package/dist/tools/search-files.js +0 -251
- package/dist/tools/search-files.js.map +0 -1
package/dist/tools/read-file.js
CHANGED
|
@@ -17,9 +17,77 @@ const executeReadFile = async (args) => {
|
|
|
17
17
|
throw new Error(`File "${args.path}" exists but is empty (0 tokens)`);
|
|
18
18
|
}
|
|
19
19
|
const lines = content.split('\n');
|
|
20
|
+
const totalLines = lines.length;
|
|
21
|
+
const fileSize = content.length;
|
|
22
|
+
const estimatedTokens = Math.ceil(fileSize / 4);
|
|
23
|
+
// Progressive disclosure: metadata first for files >300 lines
|
|
24
|
+
// Small files can be read directly without ranges
|
|
25
|
+
if (args.start_line === undefined &&
|
|
26
|
+
args.end_line === undefined &&
|
|
27
|
+
totalLines > 300) {
|
|
28
|
+
// Return metadata only for medium/large files
|
|
29
|
+
// Detect file type from extension
|
|
30
|
+
const ext = absPath.split('.').pop() || '';
|
|
31
|
+
const typeMap = {
|
|
32
|
+
ts: 'TypeScript',
|
|
33
|
+
tsx: 'TypeScript React',
|
|
34
|
+
js: 'JavaScript',
|
|
35
|
+
jsx: 'JavaScript React',
|
|
36
|
+
py: 'Python',
|
|
37
|
+
go: 'Go',
|
|
38
|
+
rs: 'Rust',
|
|
39
|
+
java: 'Java',
|
|
40
|
+
cpp: 'C++',
|
|
41
|
+
c: 'C',
|
|
42
|
+
md: 'Markdown',
|
|
43
|
+
json: 'JSON',
|
|
44
|
+
yaml: 'YAML',
|
|
45
|
+
yml: 'YAML',
|
|
46
|
+
toml: 'TOML',
|
|
47
|
+
html: 'HTML',
|
|
48
|
+
css: 'CSS',
|
|
49
|
+
scss: 'SCSS',
|
|
50
|
+
sh: 'Shell',
|
|
51
|
+
bash: 'Bash',
|
|
52
|
+
};
|
|
53
|
+
const fileType = typeMap[ext] || ext.toUpperCase();
|
|
54
|
+
let output = `File: ${args.path}\n`;
|
|
55
|
+
output += `Type: ${fileType}\n`;
|
|
56
|
+
output += `Total lines: ${totalLines.toLocaleString()}\n`;
|
|
57
|
+
output += `Size: ${fileSize.toLocaleString()} bytes\n`;
|
|
58
|
+
output += `Estimated tokens: ~${estimatedTokens.toLocaleString()}\n\n`;
|
|
59
|
+
if (totalLines <= 500) {
|
|
60
|
+
output += `[Medium file - To read specific sections, call read_file with start_line and end_line]\n`;
|
|
61
|
+
output += `[To read entire file progressively, make multiple calls:]\n`;
|
|
62
|
+
output += ` - read_file({path: "${args.path}", start_line: 1, end_line: 250})\n`;
|
|
63
|
+
output += ` - read_file({path: "${args.path}", start_line: 251, end_line: ${totalLines}})\n`;
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
output += `[Large file - Choose one approach:]\n`;
|
|
67
|
+
output += `[1. Targeted read: Use search_files to find code, then read specific ranges]\n`;
|
|
68
|
+
output += `[2. Progressive read: Read file in chunks (recommended chunk size: 200-300 lines)]\n`;
|
|
69
|
+
output += ` Example chunks for ${totalLines} lines:\n`;
|
|
70
|
+
const chunkSize = 250;
|
|
71
|
+
const numChunks = Math.ceil(totalLines / chunkSize);
|
|
72
|
+
for (let i = 0; i < Math.min(numChunks, 3); i++) {
|
|
73
|
+
const start = i * chunkSize + 1;
|
|
74
|
+
const end = Math.min((i + 1) * chunkSize, totalLines);
|
|
75
|
+
output += ` - read_file({path: "${args.path}", start_line: ${start}, end_line: ${end}})\n`;
|
|
76
|
+
}
|
|
77
|
+
if (numChunks > 3) {
|
|
78
|
+
output += ` ... and ${numChunks - 3} more chunks to complete the file\n`;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return output;
|
|
82
|
+
}
|
|
83
|
+
// Line ranges specified - read and return content
|
|
84
|
+
const startLine = args.start_line ? Math.max(1, args.start_line) : 1;
|
|
85
|
+
const endLine = args.end_line
|
|
86
|
+
? Math.min(totalLines, args.end_line)
|
|
87
|
+
: totalLines;
|
|
20
88
|
// Return content with line numbers for precise editing
|
|
21
89
|
let result = '';
|
|
22
|
-
for (let i =
|
|
90
|
+
for (let i = startLine - 1; i < endLine; i++) {
|
|
23
91
|
const lineNum = String(i + 1).padStart(4, ' ');
|
|
24
92
|
result += `${lineNum}: ${lines[i]}\n`;
|
|
25
93
|
}
|
|
@@ -40,7 +108,7 @@ const executeReadFile = async (args) => {
|
|
|
40
108
|
// AI SDK tool definition (WITHOUT execute to prevent auto-execution)
|
|
41
109
|
// Execute will be called manually after user confirmation
|
|
42
110
|
const readFileCoreTool = tool({
|
|
43
|
-
description: 'Read
|
|
111
|
+
description: 'Read file contents with line numbers. PROGRESSIVE DISCLOSURE: First call without line ranges returns metadata (size, lines, tokens). For files >300 lines, you MUST call again with start_line/end_line to read content. Small files (<300 lines) return content directly.',
|
|
44
112
|
inputSchema: jsonSchema({
|
|
45
113
|
type: 'object',
|
|
46
114
|
properties: {
|
|
@@ -48,6 +116,14 @@ const readFileCoreTool = tool({
|
|
|
48
116
|
type: 'string',
|
|
49
117
|
description: 'The path to the file to read.',
|
|
50
118
|
},
|
|
119
|
+
start_line: {
|
|
120
|
+
type: 'number',
|
|
121
|
+
description: 'Optional: Line number to start reading from (1-indexed). Required for files >300 lines. Use with end_line to read specific range.',
|
|
122
|
+
},
|
|
123
|
+
end_line: {
|
|
124
|
+
type: 'number',
|
|
125
|
+
description: 'Optional: Line number to stop reading at (inclusive). Required for files >300 lines. Use with start_line to read specific range.',
|
|
126
|
+
},
|
|
51
127
|
},
|
|
52
128
|
required: ['path'],
|
|
53
129
|
}),
|
|
@@ -61,7 +137,7 @@ const ReadFileFormatter = React.memo(({ args, fileInfo, }) => {
|
|
|
61
137
|
}
|
|
62
138
|
const { colors } = themeContext;
|
|
63
139
|
const path = args.path || args.file_path || 'unknown';
|
|
64
|
-
const messageContent = (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { color: colors.tool, children: "\u2692 read_file" }), _jsxs(Box, { children: [_jsx(Text, { color: colors.secondary, children: "Path: " }),
|
|
140
|
+
const messageContent = (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { color: colors.tool, children: "\u2692 read_file" }), _jsxs(Box, { children: [_jsx(Text, { color: colors.secondary, children: "Path: " }), _jsxs(Text, { color: colors.white, children: [path, ' ', fileInfo.isMetadataOnly && (_jsx(Text, { color: colors.info, children: "(metadata only)" }))] })] }), fileInfo.isMetadataOnly ? (_jsx(_Fragment, { children: _jsxs(Box, { children: [_jsx(Text, { color: colors.secondary, children: "Total lines: " }), _jsx(Text, { color: colors.white, children: fileInfo.totalLines.toLocaleString() })] }) })) : (_jsxs(_Fragment, { children: [_jsxs(Box, { children: [_jsx(Text, { color: colors.secondary, children: "Lines: " }), _jsxs(Text, { color: colors.white, children: [args.start_line || 1, " - ", args.end_line || fileInfo.totalLines] })] }), _jsxs(Box, { children: [_jsx(Text, { color: colors.secondary, children: "Tokens: " }), _jsxs(Text, { color: colors.white, children: ["~", fileInfo.tokens.toLocaleString()] })] })] }))] }));
|
|
65
141
|
return _jsx(ToolMessage, { message: messageContent, hideBox: true });
|
|
66
142
|
});
|
|
67
143
|
const formatter = async (args, result) => {
|
|
@@ -69,20 +145,52 @@ const formatter = async (args, result) => {
|
|
|
69
145
|
if (result && result.startsWith('Error:')) {
|
|
70
146
|
return _jsx(_Fragment, {});
|
|
71
147
|
}
|
|
72
|
-
// Load file info
|
|
73
|
-
let fileInfo = {
|
|
148
|
+
// Load file info to calculate actual read information
|
|
149
|
+
let fileInfo = {
|
|
150
|
+
totalLines: 0,
|
|
151
|
+
readLines: 0,
|
|
152
|
+
tokens: 0,
|
|
153
|
+
isPartialRead: false,
|
|
154
|
+
isMetadataOnly: false,
|
|
155
|
+
};
|
|
74
156
|
try {
|
|
75
157
|
const path = args.path || args.file_path;
|
|
76
158
|
if (path && typeof path === 'string') {
|
|
77
159
|
await access(resolve(path), constants.F_OK);
|
|
78
160
|
const content = await readFile(resolve(path), 'utf-8');
|
|
79
|
-
const
|
|
80
|
-
const
|
|
81
|
-
|
|
161
|
+
const lines = content.split('\n');
|
|
162
|
+
const totalLines = lines.length;
|
|
163
|
+
// Detect if this was a metadata-only response
|
|
164
|
+
const isMetadataOnly = (result?.startsWith('File:') ?? false) &&
|
|
165
|
+
!args.start_line &&
|
|
166
|
+
!args.end_line &&
|
|
167
|
+
totalLines > 300;
|
|
168
|
+
// Calculate what was actually read
|
|
169
|
+
const startLine = args.start_line || 1;
|
|
170
|
+
const endLine = args.end_line || totalLines;
|
|
171
|
+
const readLines = endLine - startLine + 1;
|
|
172
|
+
const isPartialRead = startLine > 1 || endLine < totalLines;
|
|
173
|
+
// Calculate tokens
|
|
174
|
+
let tokens;
|
|
175
|
+
if (isMetadataOnly) {
|
|
176
|
+
// For metadata, show estimated tokens of the FULL FILE
|
|
177
|
+
tokens = Math.ceil(content.length / 4);
|
|
178
|
+
}
|
|
179
|
+
else {
|
|
180
|
+
// For content reads, show tokens of what was actually returned
|
|
181
|
+
tokens = result ? Math.ceil(result.length / 4) : 0;
|
|
182
|
+
}
|
|
183
|
+
fileInfo = {
|
|
184
|
+
totalLines,
|
|
185
|
+
readLines,
|
|
186
|
+
tokens,
|
|
187
|
+
isPartialRead,
|
|
188
|
+
isMetadataOnly,
|
|
189
|
+
};
|
|
82
190
|
}
|
|
83
191
|
}
|
|
84
192
|
catch {
|
|
85
|
-
// File doesn't exist or can't be read - keep fileInfo
|
|
193
|
+
// File doesn't exist or can't be read - keep default fileInfo
|
|
86
194
|
}
|
|
87
195
|
return _jsx(ReadFileFormatter, { args: args, fileInfo: fileInfo });
|
|
88
196
|
};
|
|
@@ -90,6 +198,32 @@ const validator = async (args) => {
|
|
|
90
198
|
const absPath = resolve(args.path);
|
|
91
199
|
try {
|
|
92
200
|
await access(absPath, constants.F_OK);
|
|
201
|
+
// Validate line range parameters
|
|
202
|
+
if (args.start_line !== undefined && args.start_line < 1) {
|
|
203
|
+
return {
|
|
204
|
+
valid: false,
|
|
205
|
+
error: '⚒ start_line must be >= 1',
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
if (args.start_line !== undefined &&
|
|
209
|
+
args.end_line !== undefined &&
|
|
210
|
+
args.end_line < args.start_line) {
|
|
211
|
+
return {
|
|
212
|
+
valid: false,
|
|
213
|
+
error: '⚒ end_line must be >= start_line',
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
// Check if end_line exceeds file length
|
|
217
|
+
if (args.end_line !== undefined) {
|
|
218
|
+
const content = await readFile(absPath, 'utf-8');
|
|
219
|
+
const totalLines = content.split('\n').length;
|
|
220
|
+
if (args.end_line > totalLines) {
|
|
221
|
+
return {
|
|
222
|
+
valid: false,
|
|
223
|
+
error: `⚒ end_line (${args.end_line}) exceeds file length (${totalLines} lines)`,
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
}
|
|
93
227
|
return { valid: true };
|
|
94
228
|
}
|
|
95
229
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"read-file.js","sourceRoot":"","sources":["../../source/tools/read-file.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AAClC,OAAO,EAAC,QAAQ,EAAE,MAAM,EAAC,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAC,SAAS,EAAC,MAAM,SAAS,CAAC;AAClC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAC,IAAI,EAAE,GAAG,EAAC,MAAM,KAAK,CAAC;AAE9B,OAAO,EAAC,IAAI,EAAE,UAAU,EAAC,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAC,YAAY,EAAC,MAAM,kBAAkB,CAAC;AAC9C,OAAO,WAAW,MAAM,2BAA2B,CAAC;AAEpD,oEAAoE;AACpE,MAAM,eAAe,GAAG,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"read-file.js","sourceRoot":"","sources":["../../source/tools/read-file.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AAClC,OAAO,EAAC,QAAQ,EAAE,MAAM,EAAC,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAC,SAAS,EAAC,MAAM,SAAS,CAAC;AAClC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAC,IAAI,EAAE,GAAG,EAAC,MAAM,KAAK,CAAC;AAE9B,OAAO,EAAC,IAAI,EAAE,UAAU,EAAC,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAC,YAAY,EAAC,MAAM,kBAAkB,CAAC;AAC9C,OAAO,WAAW,MAAM,2BAA2B,CAAC;AAEpD,oEAAoE;AACpE,MAAM,eAAe,GAAG,KAAK,EAAE,IAI9B,EAAmB,EAAE;IACrB,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEnC,IAAI,CAAC;QACJ,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAEjD,oCAAoC;QACpC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,SAAS,IAAI,CAAC,IAAI,kCAAkC,CAAC,CAAC;QACvE,CAAC;QAED,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC;QAChC,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC;QAChC,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;QAEhD,8DAA8D;QAC9D,kDAAkD;QAClD,IACC,IAAI,CAAC,UAAU,KAAK,SAAS;YAC7B,IAAI,CAAC,QAAQ,KAAK,SAAS;YAC3B,UAAU,GAAG,GAAG,EACf,CAAC;YACF,8CAA8C;YAC9C,kCAAkC;YAClC,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;YAC3C,MAAM,OAAO,GAA2B;gBACvC,EAAE,EAAE,YAAY;gBAChB,GAAG,EAAE,kBAAkB;gBACvB,EAAE,EAAE,YAAY;gBAChB,GAAG,EAAE,kBAAkB;gBACvB,EAAE,EAAE,QAAQ;gBACZ,EAAE,EAAE,IAAI;gBACR,EAAE,EAAE,MAAM;gBACV,IAAI,EAAE,MAAM;gBACZ,GAAG,EAAE,KAAK;gBACV,CAAC,EAAE,GAAG;gBACN,EAAE,EAAE,UAAU;gBACd,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,MAAM;gBACZ,GAAG,EAAE,MAAM;gBACX,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,MAAM;gBACZ,GAAG,EAAE,KAAK;gBACV,IAAI,EAAE,MAAM;gBACZ,EAAE,EAAE,OAAO;gBACX,IAAI,EAAE,MAAM;aACZ,CAAC;YACF,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;YAEnD,IAAI,MAAM,GAAG,SAAS,IAAI,CAAC,IAAI,IAAI,CAAC;YACpC,MAAM,IAAI,SAAS,QAAQ,IAAI,CAAC;YAChC,MAAM,IAAI,gBAAgB,UAAU,CAAC,cAAc,EAAE,IAAI,CAAC;YAC1D,MAAM,IAAI,SAAS,QAAQ,CAAC,cAAc,EAAE,UAAU,CAAC;YACvD,MAAM,IAAI,sBAAsB,eAAe,CAAC,cAAc,EAAE,MAAM,CAAC;YAEvE,IAAI,UAAU,IAAI,GAAG,EAAE,CAAC;gBACvB,MAAM,IAAI,0FAA0F,CAAC;gBACrG,MAAM,IAAI,6DAA6D,CAAC;gBACxE,MAAM,IAAI,yBAAyB,IAAI,CAAC,IAAI,qCAAqC,CAAC;gBAClF,MAAM,IAAI,yBAAyB,IAAI,CAAC,IAAI,iCAAiC,UAAU,MAAM,CAAC;YAC/F,CAAC;iBAAM,CAAC;gBACP,MAAM,IAAI,uCAAuC,CAAC;gBAClD,MAAM,IAAI,gFAAgF,CAAC;gBAC3F,MAAM,IAAI,sFAAsF,CAAC;gBACjG,MAAM,IAAI,yBAAyB,UAAU,WAAW,CAAC;gBACzD,MAAM,SAAS,GAAG,GAAG,CAAC;gBACtB,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC,CAAC;gBACpD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;oBACjD,MAAM,KAAK,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,CAAC;oBAChC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,EAAE,UAAU,CAAC,CAAC;oBACtD,MAAM,IAAI,0BAA0B,IAAI,CAAC,IAAI,kBAAkB,KAAK,eAAe,GAAG,MAAM,CAAC;gBAC9F,CAAC;gBACD,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;oBACnB,MAAM,IAAI,cACT,SAAS,GAAG,CACb,qCAAqC,CAAC;gBACvC,CAAC;YACF,CAAC;YAED,OAAO,MAAM,CAAC;QACf,CAAC;QAED,kDAAkD;QAClD,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACrE,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ;YAC5B,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC;YACrC,CAAC,CAAC,UAAU,CAAC;QAEd,uDAAuD;QACvD,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,KAAK,IAAI,CAAC,GAAG,SAAS,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9C,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YAC/C,MAAM,IAAI,GAAG,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;QACvC,CAAC;QAED,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,0BAA0B;IACvD,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACzB,oDAAoD;QACpD,IACC,KAAK;YACL,OAAO,KAAK,KAAK,QAAQ;YACzB,MAAM,IAAI,KAAK;YACf,KAAK,CAAC,IAAI,KAAK,QAAQ,EACtB,CAAC;YACF,MAAM,IAAI,KAAK,CAAC,SAAS,IAAI,CAAC,IAAI,kBAAkB,CAAC,CAAC;QACvD,CAAC;QAED,yDAAyD;QACzD,MAAM,KAAK,CAAC;IACb,CAAC;AACF,CAAC,CAAC;AAEF,qEAAqE;AACrE,0DAA0D;AAC1D,MAAM,gBAAgB,GAAG,IAAI,CAAC;IAC7B,WAAW,EACV,4QAA4Q;IAC7Q,WAAW,EAAE,UAAU,CAIpB;QACF,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACX,IAAI,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,+BAA+B;aAC5C;YACD,UAAU,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,WAAW,EACV,mIAAmI;aACpI;YACD,QAAQ,EAAE;gBACT,IAAI,EAAE,QAAQ;gBACd,WAAW,EACV,kIAAkI;aACnI;SACD;QACD,QAAQ,EAAE,CAAC,MAAM,CAAC;KAClB,CAAC;IACF,uDAAuD;CACvD,CAAC,CAAC;AAEH,4DAA4D;AAC5D,MAAM,iBAAiB,GAAG,KAAK,CAAC,IAAI,CACnC,CAAC,EACA,IAAI,EACJ,QAAQ,GAeR,EAAE,EAAE;IACJ,MAAM,YAAY,GAAG,KAAK,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;IACpD,IAAI,CAAC,YAAY,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;IAC1E,CAAC;IACD,MAAM,EAAC,MAAM,EAAC,GAAG,YAAY,CAAC;IAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC;IAEtD,MAAM,cAAc,GAAG,CACtB,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aAC1B,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,IAAI,iCAAoB,EAE5C,MAAC,GAAG,eACH,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,SAAS,uBAAe,EAC5C,MAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,KAAK,aACvB,IAAI,EAAE,GAAG,EACT,QAAQ,CAAC,cAAc,IAAI,CAC3B,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,IAAI,gCAAwB,CAChD,IACK,IACF,EAEL,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,CAC1B,4BACC,MAAC,GAAG,eACH,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,SAAS,8BAAsB,EACnD,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,KAAK,YACvB,QAAQ,CAAC,UAAU,CAAC,cAAc,EAAE,GAC/B,IACF,GACJ,CACH,CAAC,CAAC,CAAC,CACH,8BACC,MAAC,GAAG,eACH,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,SAAS,wBAAgB,EAC7C,MAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,KAAK,aACvB,IAAI,CAAC,UAAU,IAAI,CAAC,SAAK,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,UAAU,IACxD,IACF,EAEN,MAAC,GAAG,eACH,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,SAAS,yBAAiB,EAC9C,MAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,KAAK,kBACtB,QAAQ,CAAC,MAAM,CAAC,cAAc,EAAE,IAC5B,IACF,IACJ,CACH,IACI,CACN,CAAC;IAEF,OAAO,KAAC,WAAW,IAAC,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,IAAI,GAAI,CAAC;AAChE,CAAC,CACD,CAAC;AAEF,MAAM,SAAS,GAAG,KAAK,EACtB,IAKC,EACD,MAAe,EACe,EAAE;IAChC,4DAA4D;IAC5D,IAAI,MAAM,IAAI,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC3C,OAAO,mBAAK,CAAC;IACd,CAAC;IAED,sDAAsD;IACtD,IAAI,QAAQ,GAAG;QACd,UAAU,EAAE,CAAC;QACb,SAAS,EAAE,CAAC;QACZ,MAAM,EAAE,CAAC;QACT,aAAa,EAAE,KAAK;QACpB,cAAc,EAAE,KAAK;KACrB,CAAC;IAEF,IAAI,CAAC;QACJ,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC;QACzC,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtC,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;YAC5C,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;YACvD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAClC,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC;YAEhC,8CAA8C;YAC9C,MAAM,cAAc,GACnB,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC;gBACtC,CAAC,IAAI,CAAC,UAAU;gBAChB,CAAC,IAAI,CAAC,QAAQ;gBACd,UAAU,GAAG,GAAG,CAAC;YAElB,mCAAmC;YACnC,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC;YACvC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,IAAI,UAAU,CAAC;YAC5C,MAAM,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,CAAC,CAAC;YAC1C,MAAM,aAAa,GAAG,SAAS,GAAG,CAAC,IAAI,OAAO,GAAG,UAAU,CAAC;YAE5D,mBAAmB;YACnB,IAAI,MAAc,CAAC;YACnB,IAAI,cAAc,EAAE,CAAC;gBACpB,uDAAuD;gBACvD,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACxC,CAAC;iBAAM,CAAC;gBACP,+DAA+D;gBAC/D,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACpD,CAAC;YAED,QAAQ,GAAG;gBACV,UAAU;gBACV,SAAS;gBACT,MAAM;gBACN,aAAa;gBACb,cAAc;aACd,CAAC;QACH,CAAC;IACF,CAAC;IAAC,MAAM,CAAC;QACR,8DAA8D;IAC/D,CAAC;IAED,OAAO,KAAC,iBAAiB,IAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,GAAI,CAAC;AAC9D,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,KAAK,EAAE,IAIxB,EAA0D,EAAE;IAC5D,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEnC,IAAI,CAAC;QACJ,MAAM,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;QAEtC,iCAAiC;QACjC,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,IAAI,IAAI,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC;YAC1D,OAAO;gBACN,KAAK,EAAE,KAAK;gBACZ,KAAK,EAAE,2BAA2B;aAClC,CAAC;QACH,CAAC;QAED,IACC,IAAI,CAAC,UAAU,KAAK,SAAS;YAC7B,IAAI,CAAC,QAAQ,KAAK,SAAS;YAC3B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,EAC9B,CAAC;YACF,OAAO;gBACN,KAAK,EAAE,KAAK;gBACZ,KAAK,EAAE,kCAAkC;aACzC,CAAC;QACH,CAAC;QAED,wCAAwC;QACxC,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YACjC,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YACjD,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;YAE9C,IAAI,IAAI,CAAC,QAAQ,GAAG,UAAU,EAAE,CAAC;gBAChC,OAAO;oBACN,KAAK,EAAE,KAAK;oBACZ,KAAK,EAAE,eAAe,IAAI,CAAC,QAAQ,0BAA0B,UAAU,SAAS;iBAChF,CAAC;YACH,CAAC;QACF,CAAC;QAED,OAAO,EAAC,KAAK,EAAE,IAAI,EAAC,CAAC;IACtB,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACzB,IACC,KAAK;YACL,OAAO,KAAK,KAAK,QAAQ;YACzB,MAAM,IAAI,KAAK;YACf,KAAK,CAAC,IAAI,KAAK,QAAQ,EACtB,CAAC;YACF,OAAO;gBACN,KAAK,EAAE,KAAK;gBACZ,KAAK,EAAE,WAAW,IAAI,CAAC,IAAI,kBAAkB;aAC7C,CAAC;QACH,CAAC;QACD,MAAM,YAAY,GACjB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;QAC1D,OAAO;YACN,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,yBAAyB,IAAI,CAAC,IAAI,MAAM,YAAY,EAAE;SAC7D,CAAC;IACH,CAAC;AACF,CAAC,CAAC;AAEF,wEAAwE;AACxE,MAAM,CAAC,MAAM,YAAY,GAAmB;IAC3C,IAAI,EAAE,WAAW;IACjB,IAAI,EAAE,gBAAgB,EAAE,kCAAkC;IAC1D,OAAO,EAAE,eAAe,EAAE,sCAAsC;IAChE,SAAS;IACT,SAAS;IACT,oBAAoB,EAAE,KAAK;CAC3B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search-file-contents.d.ts","sourceRoot":"","sources":["../../source/tools/search-file-contents.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,eAAe,CAAC;AAoPlD,eAAO,MAAM,sBAAsB,EAAE,cAMpC,CAAC"}
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { exec } from 'node:child_process';
|
|
3
|
+
import { promisify } from 'node:util';
|
|
4
|
+
import { readFileSync, existsSync } from 'node:fs';
|
|
5
|
+
import { join } from 'node:path';
|
|
6
|
+
import React from 'react';
|
|
7
|
+
import ignore from 'ignore';
|
|
8
|
+
import { Text, Box } from 'ink';
|
|
9
|
+
import { tool, jsonSchema } from '../types/core.js';
|
|
10
|
+
import { ThemeContext } from '../hooks/useTheme.js';
|
|
11
|
+
import ToolMessage from '../components/tool-message.js';
|
|
12
|
+
const execAsync = promisify(exec);
|
|
13
|
+
/**
|
|
14
|
+
* Load and parse .gitignore file, returns an ignore instance
|
|
15
|
+
*/
|
|
16
|
+
function loadGitignore(cwd) {
|
|
17
|
+
const ig = ignore();
|
|
18
|
+
const gitignorePath = join(cwd, '.gitignore');
|
|
19
|
+
// Always ignore common directories
|
|
20
|
+
ig.add([
|
|
21
|
+
'node_modules',
|
|
22
|
+
'.git',
|
|
23
|
+
'dist',
|
|
24
|
+
'build',
|
|
25
|
+
'coverage',
|
|
26
|
+
'.next',
|
|
27
|
+
'.nuxt',
|
|
28
|
+
'out',
|
|
29
|
+
'.cache',
|
|
30
|
+
]);
|
|
31
|
+
// Load .gitignore if it exists
|
|
32
|
+
if (existsSync(gitignorePath)) {
|
|
33
|
+
try {
|
|
34
|
+
const gitignoreContent = readFileSync(gitignorePath, 'utf-8');
|
|
35
|
+
ig.add(gitignoreContent);
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
// Silently fail if we can't read .gitignore
|
|
39
|
+
// The hardcoded ignores above will still apply
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return ig;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Search file contents using grep
|
|
46
|
+
*/
|
|
47
|
+
async function searchFileContents(query, cwd, maxResults, caseSensitive) {
|
|
48
|
+
try {
|
|
49
|
+
const ig = loadGitignore(cwd);
|
|
50
|
+
// Escape query for shell safety
|
|
51
|
+
const escapedQuery = query.replace(/"/g, '\\"');
|
|
52
|
+
// Use grep with basic exclusions for performance
|
|
53
|
+
const caseFlag = caseSensitive ? '' : '-i';
|
|
54
|
+
const { stdout } = await execAsync(`grep -rn ${caseFlag} --include="*" --exclude-dir={node_modules,.git,dist,build,coverage,.next,.nuxt,out,.cache} "${escapedQuery}" . | head -n ${maxResults * 3}`, { cwd, maxBuffer: 1024 * 1024 });
|
|
55
|
+
const matches = [];
|
|
56
|
+
const lines = stdout.trim().split('\n').filter(Boolean);
|
|
57
|
+
for (const line of lines) {
|
|
58
|
+
const match = line.match(/^\.\/(.+?):(\d+):(.*)$/);
|
|
59
|
+
if (match) {
|
|
60
|
+
const filePath = match[1];
|
|
61
|
+
// Skip files ignored by gitignore
|
|
62
|
+
if (ig.ignores(filePath)) {
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
matches.push({
|
|
66
|
+
file: filePath,
|
|
67
|
+
line: parseInt(match[2], 10),
|
|
68
|
+
content: match[3].trim(),
|
|
69
|
+
});
|
|
70
|
+
// Stop once we have enough matches
|
|
71
|
+
if (matches.length >= maxResults) {
|
|
72
|
+
break;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return {
|
|
77
|
+
matches,
|
|
78
|
+
truncated: lines.length >= maxResults * 3 || matches.length >= maxResults,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
catch (error) {
|
|
82
|
+
// grep returns exit code 1 when no matches found
|
|
83
|
+
if (error instanceof Error && 'code' in error && error.code === 1) {
|
|
84
|
+
return { matches: [], truncated: false };
|
|
85
|
+
}
|
|
86
|
+
throw error;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
const executeSearchFileContents = async (args) => {
|
|
90
|
+
const cwd = process.cwd();
|
|
91
|
+
const maxResults = Math.min(args.maxResults || 30, 100);
|
|
92
|
+
const caseSensitive = args.caseSensitive || false;
|
|
93
|
+
try {
|
|
94
|
+
const { matches, truncated } = await searchFileContents(args.query, cwd, maxResults, caseSensitive);
|
|
95
|
+
if (matches.length === 0) {
|
|
96
|
+
return `No matches found for "${args.query}"`;
|
|
97
|
+
}
|
|
98
|
+
// Format results with clear file:line format
|
|
99
|
+
let output = `Found ${matches.length} match${matches.length === 1 ? '' : 'es'}${truncated ? ` (showing first ${maxResults})` : ''}:\n\n`;
|
|
100
|
+
for (const match of matches) {
|
|
101
|
+
output += `${match.file}:${match.line}\n`;
|
|
102
|
+
output += ` ${match.content}\n\n`;
|
|
103
|
+
}
|
|
104
|
+
return output.trim();
|
|
105
|
+
}
|
|
106
|
+
catch (error) {
|
|
107
|
+
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
108
|
+
throw new Error(`Content search failed: ${errorMessage}`);
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
// AI SDK tool definition
|
|
112
|
+
const searchFileContentsCoreTool = tool({
|
|
113
|
+
description: 'Search for text or code INSIDE file contents. Returns file paths with line numbers and matching content. Use this to find where specific code, functions, variables, or text appears in the codebase.',
|
|
114
|
+
inputSchema: jsonSchema({
|
|
115
|
+
type: 'object',
|
|
116
|
+
properties: {
|
|
117
|
+
query: {
|
|
118
|
+
type: 'string',
|
|
119
|
+
description: 'Text or code to search for inside files. Examples: "handleSubmit", "import React", "TODO", "function calculateTotal". Search is case-insensitive by default.',
|
|
120
|
+
},
|
|
121
|
+
maxResults: {
|
|
122
|
+
type: 'number',
|
|
123
|
+
description: 'Maximum number of matches to return (default: 30, max: 100)',
|
|
124
|
+
},
|
|
125
|
+
caseSensitive: {
|
|
126
|
+
type: 'boolean',
|
|
127
|
+
description: 'Whether to perform case-sensitive search (default: false)',
|
|
128
|
+
},
|
|
129
|
+
},
|
|
130
|
+
required: ['query'],
|
|
131
|
+
}),
|
|
132
|
+
});
|
|
133
|
+
const SearchFileContentsFormatter = React.memo(({ args, result }) => {
|
|
134
|
+
const themeContext = React.useContext(ThemeContext);
|
|
135
|
+
if (!themeContext) {
|
|
136
|
+
throw new Error('ThemeContext not found');
|
|
137
|
+
}
|
|
138
|
+
const { colors } = themeContext;
|
|
139
|
+
// Parse result to get match count
|
|
140
|
+
let matchCount = 0;
|
|
141
|
+
if (result && !result.startsWith('Error:')) {
|
|
142
|
+
const firstLine = result.split('\n')[0];
|
|
143
|
+
const matchFound = firstLine.match(/Found (\d+)/);
|
|
144
|
+
if (matchFound) {
|
|
145
|
+
matchCount = parseInt(matchFound[1], 10);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
const messageContent = (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { color: colors.tool, children: "\u2692 search_file_contents" }), _jsxs(Box, { children: [_jsx(Text, { color: colors.secondary, children: "Query: " }), _jsx(Text, { color: colors.white, children: args.query })] }), args.caseSensitive && (_jsxs(Box, { children: [_jsx(Text, { color: colors.secondary, children: "Case sensitive: " }), _jsx(Text, { color: colors.white, children: "yes" })] })), _jsxs(Box, { children: [_jsx(Text, { color: colors.secondary, children: "Matches: " }), _jsx(Text, { color: colors.white, children: matchCount })] })] }));
|
|
149
|
+
return _jsx(ToolMessage, { message: messageContent, hideBox: true });
|
|
150
|
+
});
|
|
151
|
+
const formatter = (args, result) => {
|
|
152
|
+
if (result && result.startsWith('Error:')) {
|
|
153
|
+
return _jsx(_Fragment, {});
|
|
154
|
+
}
|
|
155
|
+
return _jsx(SearchFileContentsFormatter, { args: args, result: result });
|
|
156
|
+
};
|
|
157
|
+
export const searchFileContentsTool = {
|
|
158
|
+
name: 'search_file_contents',
|
|
159
|
+
tool: searchFileContentsCoreTool,
|
|
160
|
+
handler: executeSearchFileContents,
|
|
161
|
+
formatter,
|
|
162
|
+
requiresConfirmation: false,
|
|
163
|
+
};
|
|
164
|
+
//# sourceMappingURL=search-file-contents.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search-file-contents.js","sourceRoot":"","sources":["../../source/tools/search-file-contents.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown-parser.d.ts","sourceRoot":"","sources":["../../source/types/markdown-parser.ts"],"names":[],"mappings":"AACA,MAAM,WAAW,MAAM;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACb"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown-parser.js","sourceRoot":"","sources":["../../source/types/markdown-parser.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-checker.spec.d.ts","sourceRoot":"","sources":["../../source/utils/update-checker.spec.ts"],"names":[],"mappings":""}
|