@skroyc/librarian 0.1.0 → 0.2.1

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 (76) hide show
  1. package/README.md +4 -16
  2. package/dist/agents/context-schema.d.ts +1 -1
  3. package/dist/agents/context-schema.d.ts.map +1 -1
  4. package/dist/agents/context-schema.js +5 -2
  5. package/dist/agents/context-schema.js.map +1 -1
  6. package/dist/agents/react-agent.d.ts.map +1 -1
  7. package/dist/agents/react-agent.js +63 -170
  8. package/dist/agents/react-agent.js.map +1 -1
  9. package/dist/agents/tool-runtime.d.ts.map +1 -1
  10. package/dist/cli.d.ts +1 -1
  11. package/dist/cli.d.ts.map +1 -1
  12. package/dist/cli.js +53 -49
  13. package/dist/cli.js.map +1 -1
  14. package/dist/config.d.ts +1 -1
  15. package/dist/config.d.ts.map +1 -1
  16. package/dist/config.js +115 -69
  17. package/dist/config.js.map +1 -1
  18. package/dist/index.d.ts +1 -1
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +246 -150
  21. package/dist/index.js.map +1 -1
  22. package/dist/tools/file-finding.tool.d.ts +1 -1
  23. package/dist/tools/file-finding.tool.d.ts.map +1 -1
  24. package/dist/tools/file-finding.tool.js +70 -130
  25. package/dist/tools/file-finding.tool.js.map +1 -1
  26. package/dist/tools/file-listing.tool.d.ts +7 -1
  27. package/dist/tools/file-listing.tool.d.ts.map +1 -1
  28. package/dist/tools/file-listing.tool.js +96 -80
  29. package/dist/tools/file-listing.tool.js.map +1 -1
  30. package/dist/tools/file-reading.tool.d.ts +4 -1
  31. package/dist/tools/file-reading.tool.d.ts.map +1 -1
  32. package/dist/tools/file-reading.tool.js +107 -45
  33. package/dist/tools/file-reading.tool.js.map +1 -1
  34. package/dist/tools/grep-content.tool.d.ts +13 -1
  35. package/dist/tools/grep-content.tool.d.ts.map +1 -1
  36. package/dist/tools/grep-content.tool.js +186 -144
  37. package/dist/tools/grep-content.tool.js.map +1 -1
  38. package/dist/utils/error-utils.d.ts +9 -0
  39. package/dist/utils/error-utils.d.ts.map +1 -0
  40. package/dist/utils/error-utils.js +61 -0
  41. package/dist/utils/error-utils.js.map +1 -0
  42. package/dist/utils/file-utils.d.ts +1 -0
  43. package/dist/utils/file-utils.d.ts.map +1 -1
  44. package/dist/utils/file-utils.js +81 -9
  45. package/dist/utils/file-utils.js.map +1 -1
  46. package/dist/utils/format-utils.d.ts +25 -0
  47. package/dist/utils/format-utils.d.ts.map +1 -0
  48. package/dist/utils/format-utils.js +111 -0
  49. package/dist/utils/format-utils.js.map +1 -0
  50. package/dist/utils/gitignore-service.d.ts +10 -0
  51. package/dist/utils/gitignore-service.d.ts.map +1 -0
  52. package/dist/utils/gitignore-service.js +91 -0
  53. package/dist/utils/gitignore-service.js.map +1 -0
  54. package/dist/utils/logger.d.ts +2 -2
  55. package/dist/utils/logger.d.ts.map +1 -1
  56. package/dist/utils/logger.js +35 -34
  57. package/dist/utils/logger.js.map +1 -1
  58. package/dist/utils/path-utils.js +3 -3
  59. package/dist/utils/path-utils.js.map +1 -1
  60. package/package.json +1 -1
  61. package/src/agents/context-schema.ts +5 -2
  62. package/src/agents/react-agent.ts +694 -784
  63. package/src/agents/tool-runtime.ts +4 -4
  64. package/src/cli.ts +95 -57
  65. package/src/config.ts +192 -90
  66. package/src/index.ts +402 -180
  67. package/src/tools/file-finding.tool.ts +198 -310
  68. package/src/tools/file-listing.tool.ts +245 -202
  69. package/src/tools/file-reading.tool.ts +225 -138
  70. package/src/tools/grep-content.tool.ts +387 -307
  71. package/src/utils/error-utils.ts +95 -0
  72. package/src/utils/file-utils.ts +104 -19
  73. package/src/utils/format-utils.ts +190 -0
  74. package/src/utils/gitignore-service.ts +123 -0
  75. package/src/utils/logger.ts +112 -77
  76. package/src/utils/path-utils.ts +3 -3
@@ -1,198 +1,220 @@
1
+ import { stat } from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { Glob } from "bun";
1
4
  import { tool } from "langchain";
2
5
  import { z } from "zod";
3
- import { readdir, stat } from "node:fs/promises";
4
- import path from "node:path";
5
- import { logger } from "../utils/logger.js";
6
+ import { formatToolError, getToolSuggestion } from "../utils/error-utils.js";
6
7
  import { isTextFile } from "../utils/file-utils.js";
7
- async function readFileContent(filePath) {
8
+ import { formatSearchResults, } from "../utils/format-utils.js";
9
+ import { GitIgnoreService } from "../utils/gitignore-service.js";
10
+ import { logger } from "../utils/logger.js";
11
+ async function searchFileWithContext(filePath, regex, contextBefore = 0, contextAfter = 0) {
12
+ const file = Bun.file(filePath);
13
+ const stream = file.stream();
14
+ const reader = stream.getReader();
15
+ const decoder = new TextDecoder();
16
+ const matches = [];
17
+ const beforeBuffer = [];
18
+ let currentLineNum = 1;
19
+ let partialLine = "";
20
+ const pendingMatches = [];
8
21
  try {
9
- return await Bun.file(filePath).text();
22
+ while (true) {
23
+ const { done, value } = await reader.read();
24
+ if (done) {
25
+ if (partialLine) {
26
+ processLine(partialLine);
27
+ }
28
+ break;
29
+ }
30
+ const chunk = decoder.decode(value, { stream: true });
31
+ const lines = (partialLine + chunk).split("\n");
32
+ partialLine = lines.pop() || "";
33
+ for (const line of lines) {
34
+ processLine(line);
35
+ }
36
+ }
10
37
  }
11
- catch (error) {
12
- const errorMessage = error instanceof Error ? error.message : "Unknown error";
13
- throw new Error(`Failed to read file: ${errorMessage}`);
38
+ finally {
39
+ reader.releaseLock();
14
40
  }
15
- }
16
- function searchFileContent(content, regex) {
17
- const lines = content.split("\n");
18
- const matches = [];
19
- for (let i = 0; i < lines.length; i++) {
20
- const line = lines[i];
21
- if (line === undefined) {
22
- continue;
23
- }
24
- const match = regex.exec(line);
25
- if (match) {
26
- matches.push({
27
- line: i + 1,
28
- column: match.index + 1,
41
+ function processLine(line) {
42
+ for (const pending of pendingMatches) {
43
+ if (pending.linesRemaining > 0) {
44
+ pending.match.context?.after.push(line);
45
+ pending.linesRemaining--;
46
+ }
47
+ }
48
+ for (let i = pendingMatches.length - 1; i >= 0; i--) {
49
+ const pending = pendingMatches[i];
50
+ if (pending && pending.linesRemaining === 0) {
51
+ pendingMatches.splice(i, 1);
52
+ }
53
+ }
54
+ regex.lastIndex = 0;
55
+ const matchExec = regex.exec(line);
56
+ if (matchExec !== null) {
57
+ const searchMatch = {
58
+ line: currentLineNum,
59
+ column: matchExec.index + 1,
29
60
  text: line,
30
- match,
31
- });
32
- regex.lastIndex = 0;
61
+ };
62
+ if (contextBefore > 0 || contextAfter > 0) {
63
+ const context = {
64
+ before: contextBefore > 0 ? [...beforeBuffer] : [],
65
+ after: [],
66
+ };
67
+ searchMatch.context = context;
68
+ if (contextAfter > 0) {
69
+ pendingMatches.push({
70
+ match: searchMatch,
71
+ linesRemaining: contextAfter,
72
+ });
73
+ }
74
+ }
75
+ matches.push(searchMatch);
33
76
  }
77
+ if (contextBefore > 0) {
78
+ beforeBuffer.push(line);
79
+ if (beforeBuffer.length > contextBefore) {
80
+ beforeBuffer.shift();
81
+ }
82
+ }
83
+ currentLineNum++;
34
84
  }
35
85
  return matches;
36
86
  }
37
- async function findFiles(dirPath, pattern, recursive = true) {
87
+ async function findFilesToSearch(dirPath, patterns, recursive, includeHidden) {
38
88
  const foundFiles = [];
39
- const entries = await readdir(dirPath, { withFileTypes: true });
40
- for (const entry of entries) {
41
- const fullPath = path.join(dirPath, entry.name);
42
- if (entry.isDirectory()) {
43
- if (recursive) {
44
- const subDirFiles = await findFiles(fullPath, pattern, recursive);
45
- foundFiles.push(...subDirFiles);
89
+ for (const pattern of patterns) {
90
+ const effectivePattern = recursive && !pattern.includes("/") && !pattern.includes("**")
91
+ ? `**/${pattern}`
92
+ : pattern;
93
+ const glob = new Glob(effectivePattern);
94
+ for await (const file of glob.scan({
95
+ cwd: dirPath,
96
+ onlyFiles: true,
97
+ dot: includeHidden,
98
+ })) {
99
+ const fullPath = path.resolve(dirPath, file);
100
+ if (!foundFiles.includes(fullPath)) {
101
+ foundFiles.push(fullPath);
46
102
  }
47
103
  }
48
- else if (entry.isFile() && (pattern === "*" || entry.name.includes(pattern.replace(/\*/g, "")))) {
49
- foundFiles.push(fullPath);
50
- }
51
104
  }
52
105
  return foundFiles;
53
106
  }
54
- async function validateAndResolvePath(workingDir, searchPath) {
55
- const resolvedPath = path.resolve(workingDir, searchPath);
56
- const resolvedWorkingDir = path.resolve(workingDir);
57
- const relativePath = path.relative(resolvedWorkingDir, resolvedPath);
58
- logger.debug("TOOL", "Path validation", {
59
- resolvedPath: resolvedPath.replace(Bun.env.HOME || "", "~"),
60
- resolvedWorkingDir: resolvedWorkingDir.replace(Bun.env.HOME || "", "~"),
61
- relativePath,
62
- validated: !relativePath.startsWith(".."),
63
- });
64
- if (relativePath.startsWith("..")) {
65
- logger.error("PATH", "Search path escapes working directory sandbox", undefined, { searchPath, relativePath });
66
- throw new Error(`Search path "${searchPath}" attempts to escape the working directory sandbox`);
67
- }
68
- const stats = await stat(resolvedPath);
69
- if (!stats.isDirectory()) {
70
- logger.error("TOOL", "Search path is not a directory", undefined, {
71
- searchPath,
72
- });
73
- throw new Error(`Search path "${searchPath}" is not a directory`);
74
- }
75
- return resolvedPath;
76
- }
77
- async function findFilesToSearch(resolvedPath, patterns, recursive) {
78
- let filesToSearch = [];
79
- for (const pattern of patterns) {
80
- const foundFiles = await findFiles(resolvedPath, pattern, recursive);
81
- filesToSearch = [...filesToSearch, ...foundFiles];
82
- }
83
- logger.debug("TOOL", "Files to search", {
84
- count: filesToSearch.length,
85
- patterns,
86
- });
87
- return filesToSearch;
88
- }
89
107
  function compileSearchRegex(query, regex, caseSensitive) {
90
108
  const flags = caseSensitive ? "gm" : "gim";
91
109
  if (regex) {
92
110
  try {
93
- const searchRegex = new RegExp(query, flags);
94
- logger.debug("TOOL", "Regex pattern compiled", { query, flags });
95
- return searchRegex;
111
+ return new RegExp(query, flags);
96
112
  }
97
113
  catch (e) {
98
- logger.error("TOOL", "Invalid regex pattern", e instanceof Error ? e : new Error(String(e)), { query });
99
114
  throw new Error(`Invalid regex pattern: ${e.message}`);
100
115
  }
101
116
  }
102
117
  const escapedQuery = query.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
103
- const searchRegex = new RegExp(escapedQuery, flags);
104
- logger.debug("TOOL", "Escaped query compiled to regex", {
105
- originalQuery: query,
106
- flags,
107
- });
108
- return searchRegex;
118
+ return new RegExp(escapedQuery, flags);
109
119
  }
110
- async function performGrepSearch(filesToSearch, searchRegex, maxResults) {
111
- const results = [];
112
- let totalMatches = 0;
113
- for (const file of filesToSearch) {
114
- if (totalMatches >= maxResults) {
115
- break;
116
- }
117
- if (await isTextFile(file)) {
118
- try {
119
- const content = await readFileContent(file);
120
- const fileMatches = searchFileContent(content, searchRegex);
121
- if (fileMatches.length > 0) {
122
- const limitedMatches = fileMatches.slice(0, maxResults - totalMatches);
123
- results.push({ path: file, matches: limitedMatches });
124
- totalMatches += limitedMatches.length;
125
- }
126
- }
127
- catch {
128
- }
129
- }
130
- }
131
- return results;
132
- }
133
- function formatGrepResults(results, query) {
134
- if (results.length === 0) {
135
- return `No matches found for query "${query}" in the searched files`;
136
- }
137
- const totalMatches = results.reduce((sum, r) => sum + r.matches.length, 0);
138
- let output = `Found ${totalMatches} matches for query "${query}" in ${results.length} files:\n\n`;
139
- for (const result of results) {
140
- output += `File: ${result.path}\n`;
141
- for (const match of result.matches) {
142
- output += ` Line ${match.line}, Col ${match.column}: ${match.text}\n`;
143
- }
144
- output += "\n";
145
- }
146
- return output;
147
- }
148
- export const grepContentTool = tool(async ({ searchPath = ".", query, patterns = ["*"], caseSensitive = false, regex = false, recursive = true, maxResults = 100, }, config) => {
149
- const timingId = logger.timingStart("grepContent");
150
- logger.info("TOOL", "grep_content called", {
120
+ export const grepTool = tool(async ({ searchPath = ".", query, patterns = ["*"], caseSensitive = false, regex = false, recursive = true, maxResults = 100, contextBefore = 0, contextAfter = 0, exclude = [], includeHidden = false, }, config) => {
121
+ const timingId = logger.timingStart("grep");
122
+ logger.info("TOOL", "grep called", {
151
123
  searchPath,
152
- queryLength: query.length,
124
+ query,
153
125
  patterns,
154
126
  caseSensitive,
155
127
  regex,
156
128
  recursive,
157
129
  maxResults,
130
+ contextBefore,
131
+ contextAfter,
132
+ exclude,
133
+ includeHidden,
158
134
  });
159
135
  try {
160
136
  const workingDir = config?.context?.workingDir;
161
137
  if (!workingDir) {
162
138
  throw new Error("Context with workingDir is required for file operations");
163
139
  }
164
- logger.debug("TOOL", "Working directory", {
165
- workingDir: workingDir.replace(Bun.env.HOME || "", "~"),
166
- });
167
140
  if (!query) {
168
- logger.error("TOOL", "Query parameter missing", undefined, {});
169
141
  throw new Error('The "query" parameter is required');
170
142
  }
171
- const resolvedPath = await validateAndResolvePath(workingDir, searchPath);
172
- const filesToSearch = await findFilesToSearch(resolvedPath, patterns, recursive);
143
+ const resolvedPath = path.resolve(workingDir, searchPath);
144
+ const resolvedWorkingDir = path.resolve(workingDir);
145
+ const relativePath = path.relative(resolvedWorkingDir, resolvedPath);
146
+ if (relativePath.startsWith("..")) {
147
+ throw new Error(`Search path "${searchPath}" attempts to escape the working directory sandbox`);
148
+ }
149
+ let stats;
150
+ try {
151
+ stats = await stat(resolvedPath);
152
+ }
153
+ catch (error) {
154
+ if (error.code === "ENOENT") {
155
+ throw new Error(`Search path "${searchPath}" does not exist`);
156
+ }
157
+ throw error;
158
+ }
159
+ if (!stats.isDirectory()) {
160
+ throw new Error(`Search path "${searchPath}" is not a directory`);
161
+ }
162
+ const gitignore = new GitIgnoreService(workingDir);
163
+ await gitignore.initialize();
164
+ const filesToSearch = await findFilesToSearch(resolvedPath, patterns, recursive, includeHidden);
173
165
  const searchRegex = compileSearchRegex(query, regex, caseSensitive);
174
- const results = await performGrepSearch(filesToSearch, searchRegex, maxResults);
175
- logger.timingEnd(timingId, "TOOL", "grep_content completed");
176
- logger.debug("TOOL", "Search completed", {
177
- filesSearched: filesToSearch.length,
178
- filesWithMatches: results.length,
179
- totalMatches: results.reduce((sum, r) => sum + r.matches.length, 0),
180
- });
181
- return formatGrepResults(results, query);
166
+ const excludeGlobs = exclude.map((pattern) => new Glob(pattern));
167
+ const results = [];
168
+ let totalMatches = 0;
169
+ for (const file of filesToSearch) {
170
+ if (totalMatches >= maxResults) {
171
+ break;
172
+ }
173
+ const relativeFileToWorkingDir = path.relative(workingDir, file);
174
+ if (gitignore.shouldIgnore(file, false)) {
175
+ continue;
176
+ }
177
+ const isExcluded = excludeGlobs.some((eg) => eg.match(relativeFileToWorkingDir));
178
+ if (isExcluded) {
179
+ continue;
180
+ }
181
+ if (await isTextFile(file)) {
182
+ const fileMatches = await searchFileWithContext(file, searchRegex, contextBefore, contextAfter);
183
+ if (fileMatches.length > 0) {
184
+ const remainingSlot = maxResults - totalMatches;
185
+ const limitedMatches = fileMatches.slice(0, remainingSlot);
186
+ results.push({
187
+ path: path.relative(workingDir, file),
188
+ matches: limitedMatches,
189
+ });
190
+ totalMatches += limitedMatches.length;
191
+ }
192
+ }
193
+ }
194
+ logger.timingEnd(timingId, "TOOL", "grep completed");
195
+ if (results.length === 0) {
196
+ return `No matches found for query "${query}" in the searched files`;
197
+ }
198
+ return formatSearchResults(results);
182
199
  }
183
200
  catch (error) {
184
- logger.error("TOOL", "grep_content failed", error instanceof Error ? error : new Error(String(error)), { searchPath, query });
185
- return `Error searching content: ${error.message}`;
201
+ logger.error("TOOL", "grep failed", error instanceof Error ? error : new Error(String(error)), { searchPath, query });
202
+ return formatToolError({
203
+ operation: "grep",
204
+ path: searchPath,
205
+ cause: error,
206
+ suggestion: getToolSuggestion("grep", searchPath),
207
+ });
186
208
  }
187
209
  }, {
188
- name: "grep_content",
189
- description: `A powerful search tool built on ripgrep
210
+ name: "grep",
211
+ description: `A powerful search tool for finding text patterns in files.
190
212
 
191
213
  Usage:
192
- - ALWAYS use grep_content for search tasks.
214
+ - ALWAYS use grep for search tasks.
193
215
  - Supports full regex syntax (e.g., "log.*Error", "function\\s+\\w+")
194
- - Filter files with glob parameter (e.g., "*.js", "**/*.tsx") or type parameter (e.g., "js", "py", "rust")
195
- - Pattern syntax: Uses ripgrep (not grep) - literal braces need escaping (use \`interface{}\` to find \`interface{}\` in Go code)
216
+ - Filter files with glob parameter (e.g., "*.js", "**/*.tsx")
217
+ - Pattern syntax: Uses JavaScript regex - literal braces need escaping (use \`interface{}\` to find \`interface{}\` in Go code)
196
218
  `,
197
219
  schema: z.object({
198
220
  searchPath: z.string().describe("The directory path to search in"),
@@ -224,6 +246,26 @@ Usage:
224
246
  .optional()
225
247
  .default(100)
226
248
  .describe("Maximum number of matches to return. Defaults to 100"),
249
+ contextBefore: z
250
+ .number()
251
+ .optional()
252
+ .default(0)
253
+ .describe("Number of lines of context to show before each match. Defaults to 0"),
254
+ contextAfter: z
255
+ .number()
256
+ .optional()
257
+ .default(0)
258
+ .describe("Number of lines of context to show after each match. Defaults to 0"),
259
+ exclude: z
260
+ .array(z.string())
261
+ .optional()
262
+ .default([])
263
+ .describe("Array of glob patterns to exclude from results (e.g., ['dist/**', 'node_modules/**'])"),
264
+ includeHidden: z
265
+ .boolean()
266
+ .optional()
267
+ .default(false)
268
+ .describe("Whether to include hidden files and directories in the search. Defaults to `false`"),
227
269
  }),
228
270
  });
229
271
  //# sourceMappingURL=grep-content.tool.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"grep-content.tool.js","sourceRoot":"","sources":["../../src/tools/grep-content.tool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"grep-content.tool.js","sourceRoot":"","sources":["../../src/tools/grep-content.tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export interface ToolErrorOptions {
2
+ operation: string;
3
+ path?: string;
4
+ suggestion?: string | undefined;
5
+ cause?: unknown;
6
+ }
7
+ export declare function formatToolError(options: ToolErrorOptions): string;
8
+ export declare function getToolSuggestion(operation: string, targetPath?: string): string | undefined;
9
+ //# sourceMappingURL=error-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-utils.d.ts","sourceRoot":"","sources":["../../src/utils/error-utils.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAKD,wBAAgB,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM,CAuCjE;AAKD,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,MAAM,EACjB,UAAU,CAAC,EAAE,MAAM,GAClB,MAAM,GAAG,SAAS,CA8BpB"}
@@ -0,0 +1,61 @@
1
+ import path from "node:path";
2
+ export function formatToolError(options) {
3
+ const { operation, path: targetPath, suggestion, cause } = options;
4
+ let message = `${operation} failed`;
5
+ if (targetPath) {
6
+ message += `: ${targetPath}`;
7
+ }
8
+ if (cause && typeof cause === "object" && "code" in cause) {
9
+ const code = cause.code;
10
+ switch (code) {
11
+ case "ENOENT":
12
+ message = `Path not found: ${targetPath || "unknown"}`;
13
+ break;
14
+ case "EACCES":
15
+ case "EPERM":
16
+ message = `Permission denied: ${targetPath || "unknown"}`;
17
+ break;
18
+ case "ENOTDIR":
19
+ message = `Path is not a directory: ${targetPath || "unknown"}`;
20
+ break;
21
+ case "EISDIR":
22
+ message = `Path is a directory, not a file: ${targetPath || "unknown"}`;
23
+ break;
24
+ default:
25
+ if ("message" in cause) {
26
+ message += `. ${cause.message}`;
27
+ }
28
+ }
29
+ }
30
+ else if (cause instanceof Error) {
31
+ message += `. ${cause.message}`;
32
+ }
33
+ if (suggestion) {
34
+ message += `\n\nSuggestion: ${suggestion}`;
35
+ }
36
+ return message;
37
+ }
38
+ export function getToolSuggestion(operation, targetPath) {
39
+ if (operation === "view" && targetPath) {
40
+ const ext = path.extname(targetPath).toLowerCase();
41
+ if ([".png", ".jpg", ".pdf"].includes(ext)) {
42
+ return "This file appears to be a binary or media file. Only text files can be read.";
43
+ }
44
+ return "Ensure the file path is correct and the file is a text file.";
45
+ }
46
+ if (operation === "list") {
47
+ return "Check if the directory exists and you have permissions to read it.";
48
+ }
49
+ if (operation === "grep") {
50
+ return "Try a simpler search pattern or verify the search path.";
51
+ }
52
+ if (operation === "find") {
53
+ return "Check if the search path exists and the patterns are valid glob patterns.";
54
+ }
55
+ if (targetPath &&
56
+ (operation === "view" || operation === "list" || operation === "find")) {
57
+ return "Check file permissions and ensure you have read access to the path.";
58
+ }
59
+ return undefined;
60
+ }
61
+ //# sourceMappingURL=error-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-utils.js","sourceRoot":"","sources":["../../src/utils/error-utils.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAiB7B,MAAM,UAAU,eAAe,CAAC,OAAyB;IACvD,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;IAEnE,IAAI,OAAO,GAAG,GAAG,SAAS,SAAS,CAAC;IACpC,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,IAAI,KAAK,UAAU,EAAE,CAAC;IAC/B,CAAC;IAED,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,IAAI,KAAK,EAAE,CAAC;QAC1D,MAAM,IAAI,GAAI,KAA0B,CAAC,IAAI,CAAC;QAE9C,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,QAAQ;gBACX,OAAO,GAAG,mBAAmB,UAAU,IAAI,SAAS,EAAE,CAAC;gBACvD,MAAM;YACR,KAAK,QAAQ,CAAC;YACd,KAAK,OAAO;gBACV,OAAO,GAAG,sBAAsB,UAAU,IAAI,SAAS,EAAE,CAAC;gBAC1D,MAAM;YACR,KAAK,SAAS;gBACZ,OAAO,GAAG,4BAA4B,UAAU,IAAI,SAAS,EAAE,CAAC;gBAChE,MAAM;YACR,KAAK,QAAQ;gBACX,OAAO,GAAG,oCAAoC,UAAU,IAAI,SAAS,EAAE,CAAC;gBACxE,MAAM;YACR;gBACE,IAAI,SAAS,IAAI,KAAK,EAAE,CAAC;oBACvB,OAAO,IAAI,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC;gBAClC,CAAC;QACL,CAAC;IACH,CAAC;SAAM,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAClC,OAAO,IAAI,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC;IAClC,CAAC;IAED,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,IAAI,mBAAmB,UAAU,EAAE,CAAC;IAC7C,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAKD,MAAM,UAAU,iBAAiB,CAC/B,SAAiB,EACjB,UAAmB;IAEnB,IAAI,SAAS,KAAK,MAAM,IAAI,UAAU,EAAE,CAAC;QACvC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC;QACnD,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC3C,OAAO,8EAA8E,CAAC;QACxF,CAAC;QACD,OAAO,8DAA8D,CAAC;IACxE,CAAC;IAED,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;QACzB,OAAO,oEAAoE,CAAC;IAC9E,CAAC;IAED,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;QACzB,OAAO,yDAAyD,CAAC;IACnE,CAAC;IAED,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;QACzB,OAAO,2EAA2E,CAAC;IACrF,CAAC;IAGD,IACE,UAAU;QACV,CAAC,SAAS,KAAK,MAAM,IAAI,SAAS,KAAK,MAAM,IAAI,SAAS,KAAK,MAAM,CAAC,EACtE,CAAC;QACD,OAAO,qEAAqE,CAAC;IAC/E,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -1,2 +1,3 @@
1
1
  export declare function isTextFile(filePath: string): Promise<boolean>;
2
+ export declare function getFileLineCount(filePath: string): Promise<number>;
2
3
  //# sourceMappingURL=file-utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"file-utils.d.ts","sourceRoot":"","sources":["../../src/utils/file-utils.ts"],"names":[],"mappings":"AAWA,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CA2BnE"}
1
+ {"version":3,"file":"file-utils.d.ts","sourceRoot":"","sources":["../../src/utils/file-utils.ts"],"names":[],"mappings":"AAWA,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAsEnE;AAMD,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAoCxE"}