@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.
Files changed (86) hide show
  1. package/dist/commands/update.d.ts.map +1 -1
  2. package/dist/commands/update.js +35 -3
  3. package/dist/commands/update.js.map +1 -1
  4. package/dist/components/assistant-message.d.ts +1 -4
  5. package/dist/components/assistant-message.d.ts.map +1 -1
  6. package/dist/components/assistant-message.js +1 -199
  7. package/dist/components/assistant-message.js.map +1 -1
  8. package/dist/config/index.d.ts.map +1 -1
  9. package/dist/config/index.js +13 -5
  10. package/dist/config/index.js.map +1 -1
  11. package/dist/config/paths.d.ts.map +1 -1
  12. package/dist/config/paths.js +23 -2
  13. package/dist/config/paths.js.map +1 -1
  14. package/dist/hooks/useAppState.d.ts.map +1 -1
  15. package/dist/hooks/useAppState.js +8 -15
  16. package/dist/hooks/useAppState.js.map +1 -1
  17. package/dist/hooks/useTerminalWidth.d.ts.map +1 -1
  18. package/dist/hooks/useTerminalWidth.js +6 -0
  19. package/dist/hooks/useTerminalWidth.js.map +1 -1
  20. package/dist/markdown-parser/html-entities.d.ts +2 -0
  21. package/dist/markdown-parser/html-entities.d.ts.map +1 -0
  22. package/dist/markdown-parser/html-entities.js +41 -0
  23. package/dist/markdown-parser/html-entities.js.map +1 -0
  24. package/dist/markdown-parser/html-entities.spec.d.ts +2 -0
  25. package/dist/markdown-parser/html-entities.spec.d.ts.map +1 -0
  26. package/dist/markdown-parser/html-entities.spec.js +73 -0
  27. package/dist/markdown-parser/html-entities.spec.js.map +1 -0
  28. package/dist/markdown-parser/index.d.ts +6 -0
  29. package/dist/markdown-parser/index.d.ts.map +1 -0
  30. package/dist/markdown-parser/index.js +97 -0
  31. package/dist/markdown-parser/index.js.map +1 -0
  32. package/dist/markdown-parser/index.spec.d.ts +2 -0
  33. package/dist/markdown-parser/index.spec.d.ts.map +1 -0
  34. package/dist/markdown-parser/index.spec.js +245 -0
  35. package/dist/markdown-parser/index.spec.js.map +1 -0
  36. package/dist/markdown-parser/table-parser.d.ts +3 -0
  37. package/dist/markdown-parser/table-parser.d.ts.map +1 -0
  38. package/dist/markdown-parser/table-parser.js +92 -0
  39. package/dist/markdown-parser/table-parser.js.map +1 -0
  40. package/dist/markdown-parser/table-parser.spec.d.ts +2 -0
  41. package/dist/markdown-parser/table-parser.spec.d.ts.map +1 -0
  42. package/dist/markdown-parser/table-parser.spec.js +120 -0
  43. package/dist/markdown-parser/table-parser.spec.js.map +1 -0
  44. package/dist/markdown-parser/utils.d.ts +2 -0
  45. package/dist/markdown-parser/utils.d.ts.map +1 -0
  46. package/dist/markdown-parser/utils.js +14 -0
  47. package/dist/markdown-parser/utils.js.map +1 -0
  48. package/dist/markdown-parser/utils.spec.d.ts +2 -0
  49. package/dist/markdown-parser/utils.spec.d.ts.map +1 -0
  50. package/dist/markdown-parser/utils.spec.js +59 -0
  51. package/dist/markdown-parser/utils.spec.js.map +1 -0
  52. package/dist/tools/find-files.d.ts +3 -0
  53. package/dist/tools/find-files.d.ts.map +1 -0
  54. package/dist/tools/find-files.js +186 -0
  55. package/dist/tools/find-files.js.map +1 -0
  56. package/dist/tools/index.js +4 -4
  57. package/dist/tools/index.js.map +1 -1
  58. package/dist/tools/read-file.d.ts.map +1 -1
  59. package/dist/tools/read-file.js +143 -9
  60. package/dist/tools/read-file.js.map +1 -1
  61. package/dist/tools/search-file-contents.d.ts +3 -0
  62. package/dist/tools/search-file-contents.d.ts.map +1 -0
  63. package/dist/tools/search-file-contents.js +164 -0
  64. package/dist/tools/search-file-contents.js.map +1 -0
  65. package/dist/types/markdown-parser.d.ts +11 -0
  66. package/dist/types/markdown-parser.d.ts.map +1 -0
  67. package/dist/types/markdown-parser.js +2 -0
  68. package/dist/types/markdown-parser.js.map +1 -0
  69. package/dist/utils/update-checker.spec.d.ts +2 -0
  70. package/dist/utils/update-checker.spec.d.ts.map +1 -0
  71. package/dist/utils/update-checker.spec.js +230 -0
  72. package/dist/utils/update-checker.spec.js.map +1 -0
  73. package/package.json +1 -1
  74. package/source/app/prompts/main-prompt.md +67 -23
  75. package/dist/components/update-message.d.ts +0 -7
  76. package/dist/components/update-message.d.ts.map +0 -1
  77. package/dist/components/update-message.js +0 -93
  78. package/dist/components/update-message.js.map +0 -1
  79. package/dist/tools/read-many-files.d.ts +0 -3
  80. package/dist/tools/read-many-files.d.ts.map +0 -1
  81. package/dist/tools/read-many-files.js +0 -169
  82. package/dist/tools/read-many-files.js.map +0 -1
  83. package/dist/tools/search-files.d.ts +0 -3
  84. package/dist/tools/search-files.d.ts.map +0 -1
  85. package/dist/tools/search-files.js +0 -251
  86. package/dist/tools/search-files.js.map +0 -1
@@ -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 = 0; i < lines.length; 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 the contents of a file with line numbers (use line numbers with edit_file tool for precise editing)',
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: " }), _jsx(Text, { color: colors.white, children: path })] }), _jsxs(Box, { children: [_jsx(Text, { color: colors.secondary, children: "Size: " }), _jsxs(Text, { color: colors.white, children: [fileInfo.size, " characters (~", fileInfo.tokens, " tokens)"] })] }), (args.offset || args.limit) && (_jsxs(Box, { marginTop: 1, children: [_jsx(Text, { color: colors.secondary, children: "Range: " }), _jsxs(Text, { color: colors.primary, children: [args.offset && `from line ${args.offset} `, args.limit && `(${args.limit} lines)`] })] }))] }));
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 synchronously in the formatter so it's available when the component renders
73
- let fileInfo = { size: 0, tokens: 0 };
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 fileSize = content.length;
80
- const estimatedTokens = Math.ceil(fileSize / 4);
81
- fileInfo = { size: fileSize, tokens: estimatedTokens };
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 as {size: 0, tokens: 0}
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":"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"}
1
+ {"version":3,"file":"read-file.js","sourceRoot":"","sources":["../../source/tools/read-file.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { ToolDefinition } from '../types/index.js';
2
+ export declare const searchFileContentsTool: ToolDefinition;
3
+ //# sourceMappingURL=search-file-contents.d.ts.map
@@ -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,11 @@
1
+ export interface Colors {
2
+ primary: string;
3
+ secondary: string;
4
+ success: string;
5
+ error: string;
6
+ warning: string;
7
+ info: string;
8
+ white: string;
9
+ tool: string;
10
+ }
11
+ //# sourceMappingURL=markdown-parser.d.ts.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=markdown-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown-parser.js","sourceRoot":"","sources":["../../source/types/markdown-parser.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=update-checker.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-checker.spec.d.ts","sourceRoot":"","sources":["../../source/utils/update-checker.spec.ts"],"names":[],"mappings":""}