@cloudbase/agent-tools 0.0.2

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 (194) hide show
  1. package/CHANGELOG.md +416 -0
  2. package/dist/agent_tool.d.ts +7 -0
  3. package/dist/agent_tool.d.ts.map +1 -0
  4. package/dist/agent_tool.js +16 -0
  5. package/dist/agent_tool.js.map +1 -0
  6. package/dist/bash/bash-tool.d.ts +61 -0
  7. package/dist/bash/bash-tool.d.ts.map +1 -0
  8. package/dist/bash/bash-tool.js +191 -0
  9. package/dist/bash/bash-tool.js.map +1 -0
  10. package/dist/bash/index.d.ts +7 -0
  11. package/dist/bash/index.d.ts.map +1 -0
  12. package/dist/bash/index.js +17 -0
  13. package/dist/bash/index.js.map +1 -0
  14. package/dist/bash/operator/base-operator.d.ts +44 -0
  15. package/dist/bash/operator/base-operator.d.ts.map +1 -0
  16. package/dist/bash/operator/base-operator.js +14 -0
  17. package/dist/bash/operator/base-operator.js.map +1 -0
  18. package/dist/bash/operator/local-operator.d.ts +15 -0
  19. package/dist/bash/operator/local-operator.d.ts.map +1 -0
  20. package/dist/bash/operator/local-operator.js +145 -0
  21. package/dist/bash/operator/local-operator.js.map +1 -0
  22. package/dist/bash/operator/sandbox-operator.d.ts +22 -0
  23. package/dist/bash/operator/sandbox-operator.d.ts.map +1 -0
  24. package/dist/bash/operator/sandbox-operator.js +112 -0
  25. package/dist/bash/operator/sandbox-operator.js.map +1 -0
  26. package/dist/bash/utils.d.ts +106 -0
  27. package/dist/bash/utils.d.ts.map +1 -0
  28. package/dist/bash/utils.js +197 -0
  29. package/dist/bash/utils.js.map +1 -0
  30. package/dist/browser/browser-instance-manager.d.ts +79 -0
  31. package/dist/browser/browser-instance-manager.d.ts.map +1 -0
  32. package/dist/browser/browser-instance-manager.js +242 -0
  33. package/dist/browser/browser-instance-manager.js.map +1 -0
  34. package/dist/browser/browser-tool-executor.d.ts +57 -0
  35. package/dist/browser/browser-tool-executor.d.ts.map +1 -0
  36. package/dist/browser/browser-tool-executor.js +205 -0
  37. package/dist/browser/browser-tool-executor.js.map +1 -0
  38. package/dist/browser/browser_client_unified.d.ts +52 -0
  39. package/dist/browser/browser_client_unified.d.ts.map +1 -0
  40. package/dist/browser/browser_client_unified.js +381 -0
  41. package/dist/browser/browser_client_unified.js.map +1 -0
  42. package/dist/browser/browser_tool_unified.d.ts +93 -0
  43. package/dist/browser/browser_tool_unified.d.ts.map +1 -0
  44. package/dist/browser/browser_tool_unified.js +181 -0
  45. package/dist/browser/browser_tool_unified.js.map +1 -0
  46. package/dist/browser/index.d.ts +7 -0
  47. package/dist/browser/index.d.ts.map +1 -0
  48. package/dist/browser/index.js +19 -0
  49. package/dist/browser/index.js.map +1 -0
  50. package/dist/browser/sandbox-connector.d.ts +93 -0
  51. package/dist/browser/sandbox-connector.d.ts.map +1 -0
  52. package/dist/browser/sandbox-connector.js +272 -0
  53. package/dist/browser/sandbox-connector.js.map +1 -0
  54. package/dist/browser/types.d.ts +53 -0
  55. package/dist/browser/types.d.ts.map +1 -0
  56. package/dist/browser/types.js +3 -0
  57. package/dist/browser/types.js.map +1 -0
  58. package/dist/code_executers/base_code_executor.d.ts +17 -0
  59. package/dist/code_executers/base_code_executor.d.ts.map +1 -0
  60. package/dist/code_executers/base_code_executor.js +20 -0
  61. package/dist/code_executers/base_code_executor.js.map +1 -0
  62. package/dist/code_executers/built_in_code_executor.d.ts +25 -0
  63. package/dist/code_executers/built_in_code_executor.d.ts.map +1 -0
  64. package/dist/code_executers/built_in_code_executor.js +106 -0
  65. package/dist/code_executers/built_in_code_executor.js.map +1 -0
  66. package/dist/code_executers/unsafe_local_code_executor.d.ts +118 -0
  67. package/dist/code_executers/unsafe_local_code_executor.d.ts.map +1 -0
  68. package/dist/code_executers/unsafe_local_code_executor.js +605 -0
  69. package/dist/code_executers/unsafe_local_code_executor.js.map +1 -0
  70. package/dist/fs/edit-tool.d.ts +26 -0
  71. package/dist/fs/edit-tool.d.ts.map +1 -0
  72. package/dist/fs/edit-tool.js +202 -0
  73. package/dist/fs/edit-tool.js.map +1 -0
  74. package/dist/fs/glob-tool.d.ts +31 -0
  75. package/dist/fs/glob-tool.d.ts.map +1 -0
  76. package/dist/fs/glob-tool.js +287 -0
  77. package/dist/fs/glob-tool.js.map +1 -0
  78. package/dist/fs/grep-tool.d.ts +32 -0
  79. package/dist/fs/grep-tool.d.ts.map +1 -0
  80. package/dist/fs/grep-tool.js +353 -0
  81. package/dist/fs/grep-tool.js.map +1 -0
  82. package/dist/fs/index.d.ts +11 -0
  83. package/dist/fs/index.d.ts.map +1 -0
  84. package/dist/fs/index.js +38 -0
  85. package/dist/fs/index.js.map +1 -0
  86. package/dist/fs/ls-tool.d.ts +26 -0
  87. package/dist/fs/ls-tool.d.ts.map +1 -0
  88. package/dist/fs/ls-tool.js +235 -0
  89. package/dist/fs/ls-tool.js.map +1 -0
  90. package/dist/fs/multiedit-tool.d.ts +34 -0
  91. package/dist/fs/multiedit-tool.d.ts.map +1 -0
  92. package/dist/fs/multiedit-tool.js +158 -0
  93. package/dist/fs/multiedit-tool.js.map +1 -0
  94. package/dist/fs/operator/base-operator.d.ts +28 -0
  95. package/dist/fs/operator/base-operator.d.ts.map +1 -0
  96. package/dist/fs/operator/base-operator.js +21 -0
  97. package/dist/fs/operator/base-operator.js.map +1 -0
  98. package/dist/fs/operator/in-memory-operator.d.ts +39 -0
  99. package/dist/fs/operator/in-memory-operator.d.ts.map +1 -0
  100. package/dist/fs/operator/in-memory-operator.js +115 -0
  101. package/dist/fs/operator/in-memory-operator.js.map +1 -0
  102. package/dist/fs/operator/index.d.ts +6 -0
  103. package/dist/fs/operator/index.d.ts.map +1 -0
  104. package/dist/fs/operator/index.js +28 -0
  105. package/dist/fs/operator/index.js.map +1 -0
  106. package/dist/fs/operator/local-operator.d.ts +25 -0
  107. package/dist/fs/operator/local-operator.d.ts.map +1 -0
  108. package/dist/fs/operator/local-operator.js +62 -0
  109. package/dist/fs/operator/local-operator.js.map +1 -0
  110. package/dist/fs/operator/sanbox-operator.d.ts +31 -0
  111. package/dist/fs/operator/sanbox-operator.d.ts.map +1 -0
  112. package/dist/fs/operator/sanbox-operator.js +172 -0
  113. package/dist/fs/operator/sanbox-operator.js.map +1 -0
  114. package/dist/fs/operator/transaction/index.d.ts +6 -0
  115. package/dist/fs/operator/transaction/index.d.ts.map +1 -0
  116. package/dist/fs/operator/transaction/index.js +28 -0
  117. package/dist/fs/operator/transaction/index.js.map +1 -0
  118. package/dist/fs/operator/transaction/snapshot-strategies.d.ts +54 -0
  119. package/dist/fs/operator/transaction/snapshot-strategies.d.ts.map +1 -0
  120. package/dist/fs/operator/transaction/snapshot-strategies.js +278 -0
  121. package/dist/fs/operator/transaction/snapshot-strategies.js.map +1 -0
  122. package/dist/fs/operator/transaction/transaction-operator.d.ts +53 -0
  123. package/dist/fs/operator/transaction/transaction-operator.d.ts.map +1 -0
  124. package/dist/fs/operator/transaction/transaction-operator.js +195 -0
  125. package/dist/fs/operator/transaction/transaction-operator.js.map +1 -0
  126. package/dist/fs/operator/transaction/transaction-utils.d.ts +80 -0
  127. package/dist/fs/operator/transaction/transaction-utils.d.ts.map +1 -0
  128. package/dist/fs/operator/transaction/transaction-utils.js +156 -0
  129. package/dist/fs/operator/transaction/transaction-utils.js.map +1 -0
  130. package/dist/fs/read-tool.d.ts +32 -0
  131. package/dist/fs/read-tool.d.ts.map +1 -0
  132. package/dist/fs/read-tool.js +271 -0
  133. package/dist/fs/read-tool.js.map +1 -0
  134. package/dist/fs/str-replace-editor.d.ts +23 -0
  135. package/dist/fs/str-replace-editor.d.ts.map +1 -0
  136. package/dist/fs/str-replace-editor.js +74 -0
  137. package/dist/fs/str-replace-editor.js.map +1 -0
  138. package/dist/fs/toolkit.d.ts +61 -0
  139. package/dist/fs/toolkit.d.ts.map +1 -0
  140. package/dist/fs/toolkit.js +113 -0
  141. package/dist/fs/toolkit.js.map +1 -0
  142. package/dist/fs/utils.d.ts +32 -0
  143. package/dist/fs/utils.d.ts.map +1 -0
  144. package/dist/fs/utils.js +133 -0
  145. package/dist/fs/utils.js.map +1 -0
  146. package/dist/fs/write-tool.d.ts +26 -0
  147. package/dist/fs/write-tool.d.ts.map +1 -0
  148. package/dist/fs/write-tool.js +110 -0
  149. package/dist/fs/write-tool.js.map +1 -0
  150. package/dist/index.d.ts +10 -0
  151. package/dist/index.d.ts.map +1 -0
  152. package/dist/index.js +40 -0
  153. package/dist/index.js.map +1 -0
  154. package/dist/mcp/agkit-mcp-server.d.ts +291 -0
  155. package/dist/mcp/agkit-mcp-server.d.ts.map +1 -0
  156. package/dist/mcp/agkit-mcp-server.js +821 -0
  157. package/dist/mcp/agkit-mcp-server.js.map +1 -0
  158. package/dist/mcp/client-tool.d.ts +65 -0
  159. package/dist/mcp/client-tool.d.ts.map +1 -0
  160. package/dist/mcp/client-tool.js +220 -0
  161. package/dist/mcp/client-tool.js.map +1 -0
  162. package/dist/mcp/index.d.ts +14 -0
  163. package/dist/mcp/index.d.ts.map +1 -0
  164. package/dist/mcp/index.js +26 -0
  165. package/dist/mcp/index.js.map +1 -0
  166. package/dist/mcp/mcp-client-manager.d.ts +153 -0
  167. package/dist/mcp/mcp-client-manager.d.ts.map +1 -0
  168. package/dist/mcp/mcp-client-manager.js +606 -0
  169. package/dist/mcp/mcp-client-manager.js.map +1 -0
  170. package/dist/mcp/mcp-toolkit.d.ts +112 -0
  171. package/dist/mcp/mcp-toolkit.d.ts.map +1 -0
  172. package/dist/mcp/mcp-toolkit.js +188 -0
  173. package/dist/mcp/mcp-toolkit.js.map +1 -0
  174. package/dist/mcp/types.d.ts +157 -0
  175. package/dist/mcp/types.d.ts.map +1 -0
  176. package/dist/mcp/types.js +34 -0
  177. package/dist/mcp/types.js.map +1 -0
  178. package/dist/mcp/utils.d.ts +17 -0
  179. package/dist/mcp/utils.d.ts.map +1 -0
  180. package/dist/mcp/utils.js +48 -0
  181. package/dist/mcp/utils.js.map +1 -0
  182. package/dist/types/index.d.ts +31 -0
  183. package/dist/types/index.d.ts.map +1 -0
  184. package/dist/types/index.js +3 -0
  185. package/dist/types/index.js.map +1 -0
  186. package/dist/types/zod.d.ts +18 -0
  187. package/dist/types/zod.d.ts.map +1 -0
  188. package/dist/types/zod.js +3 -0
  189. package/dist/types/zod.js.map +1 -0
  190. package/dist/utils.d.ts +141 -0
  191. package/dist/utils.d.ts.map +1 -0
  192. package/dist/utils.js +379 -0
  193. package/dist/utils.js.map +1 -0
  194. package/package.json +46 -0
@@ -0,0 +1,202 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.editFile = editFile;
37
+ exports.createEditTool = createEditTool;
38
+ const v4_1 = require("zod/v4");
39
+ const path = __importStar(require("path"));
40
+ const utils_1 = require("./utils");
41
+ const utils_2 = require("../utils");
42
+ const editParametersSchema = v4_1.z.object({
43
+ file_path: v4_1.z.string().describe("The absolute path to the file to modify"),
44
+ old_string: v4_1.z
45
+ .string()
46
+ .describe("The exact text to find and replace. Must match exactly including whitespace, indentation, and context. For single replacements, include 2+ lines of context before and after the target text."),
47
+ new_string: v4_1.z
48
+ .string()
49
+ .describe("The text to replace it with (must be different from old_string)"),
50
+ expected_replacements: v4_1.z
51
+ .number()
52
+ .min(1)
53
+ .optional()
54
+ .describe("The expected number of replacements to perform. Defaults to 1 if not specified."),
55
+ });
56
+ // Path validation is now handled by validateWorkspacePath in tool-utils
57
+ /**
58
+ * Escape special regex characters
59
+ */
60
+ function escapeRegExp(string) {
61
+ return string.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
62
+ }
63
+ /**
64
+ * Calculate the edit operation without executing it
65
+ */
66
+ async function calculateEdit(file_path, old_string, new_string, expected_replacements, context) {
67
+ // Use the utility function to resolve paths
68
+ const absolutePath = (0, utils_1.resolveWorkspacePath)(file_path, context);
69
+ try {
70
+ await context.fsOperator.access(absolutePath);
71
+ }
72
+ catch (e) {
73
+ if (old_string === "") {
74
+ // Creating a new file
75
+ return {
76
+ currentContent: "",
77
+ newContent: new_string,
78
+ occurrences: 1,
79
+ isNewFile: true,
80
+ };
81
+ }
82
+ else {
83
+ return {
84
+ currentContent: "",
85
+ newContent: "",
86
+ occurrences: 0,
87
+ isNewFile: false,
88
+ error: `File not found: ${file_path}. Cannot apply edit. Use empty old_string to create a new file.`,
89
+ };
90
+ }
91
+ }
92
+ // Read current content
93
+ let currentContent;
94
+ try {
95
+ currentContent = await context.fsOperator.readFile(absolutePath, "utf8");
96
+ // Normalize line endings to LF
97
+ currentContent = currentContent.replace(/\r\n/g, "\n");
98
+ }
99
+ catch (error) {
100
+ return {
101
+ currentContent: "",
102
+ newContent: "",
103
+ occurrences: 0,
104
+ isNewFile: false,
105
+ error: `Failed to read file: ${error instanceof Error ? error.message : String(error)}`,
106
+ };
107
+ }
108
+ // Handle creating file that already exists
109
+ if (old_string === "") {
110
+ return {
111
+ currentContent,
112
+ newContent: "",
113
+ occurrences: 0,
114
+ isNewFile: false,
115
+ error: `File already exists, cannot create: ${file_path}`,
116
+ };
117
+ }
118
+ // Count occurrences
119
+ const occurrences = (currentContent.match(new RegExp(escapeRegExp(old_string), "g")) || []).length;
120
+ // Validate occurrence count
121
+ if (occurrences === 0) {
122
+ return {
123
+ currentContent,
124
+ newContent: currentContent,
125
+ occurrences: 0,
126
+ isNewFile: false,
127
+ error: `Text not found in file. 0 occurrences of old_string found. Ensure exact text match including whitespace and indentation.`,
128
+ };
129
+ }
130
+ if (occurrences !== expected_replacements) {
131
+ return {
132
+ currentContent,
133
+ newContent: currentContent,
134
+ occurrences,
135
+ isNewFile: false,
136
+ error: `Expected ${expected_replacements} replacement(s) but found ${occurrences} occurrence(s).`,
137
+ };
138
+ }
139
+ // Apply replacement
140
+ const newContent = currentContent.split(old_string).join(new_string);
141
+ return {
142
+ currentContent,
143
+ newContent,
144
+ occurrences,
145
+ isNewFile: false,
146
+ };
147
+ }
148
+ async function editFile(context, params) {
149
+ try {
150
+ const { file_path, old_string, new_string, expected_replacements = 1, } = params;
151
+ // Validate workspace path (handles both absolute and relative paths)
152
+ const pathError = (0, utils_1.validateWorkspacePath)(file_path, context);
153
+ if (pathError) {
154
+ return pathError;
155
+ }
156
+ // Calculate the edit
157
+ const editResult = await calculateEdit(file_path, old_string, new_string, expected_replacements, context);
158
+ if (editResult.error) {
159
+ return (0, utils_2.handleToolError)(editResult.error, "Edit operation", "execution");
160
+ }
161
+ const absolutePath = (0, utils_1.resolveWorkspacePath)(file_path, context);
162
+ // Create parent directories if needed (for new files)
163
+ if (editResult.isNewFile) {
164
+ const dirName = path.dirname(absolutePath);
165
+ try {
166
+ await context.fsOperator.access(dirName);
167
+ }
168
+ catch (e) {
169
+ await context.fsOperator.mkdir(dirName, { recursive: true });
170
+ console.log(`Created parent directories for: ${file_path}`);
171
+ }
172
+ }
173
+ // Write the updated content
174
+ await context.fsOperator.writeFile(absolutePath, editResult.newContent);
175
+ const newLines = editResult.newContent.split("\n").length;
176
+ const newSize = Buffer.byteLength(editResult.newContent, "utf8");
177
+ return (0, utils_1.createSuccessResponse)({
178
+ file_path,
179
+ absolute_path: absolutePath,
180
+ is_new_file: editResult.isNewFile,
181
+ replacements_made: editResult.occurrences,
182
+ lines_total: newLines,
183
+ bytes_total: newSize,
184
+ old_string_length: old_string.length,
185
+ new_string_length: new_string.length,
186
+ });
187
+ }
188
+ catch (error) {
189
+ return (0, utils_2.handleToolError)(error, "Edit tool execution", "execution");
190
+ }
191
+ }
192
+ function createEditTool(context) {
193
+ return (0, utils_2.tool)((params) => editFile(context, params), {
194
+ name: "Edit",
195
+ description: "Performs exact string replacements in files with strict occurrence count validation.\n\nUsage:\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: spaces + line number + tab. Everything after that tab 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.",
196
+ schema: editParametersSchema,
197
+ getDisplay: ({ name, input }) => {
198
+ return `Using ${name} for tool call: ${input.file_path || ""}`;
199
+ },
200
+ });
201
+ }
202
+ //# sourceMappingURL=edit-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edit-tool.js","sourceRoot":"","sources":["../../src/fs/edit-tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import { z } from "zod/v4";
2
+ import { ExecutionContext } from "./utils";
3
+ interface GlobFileEntry {
4
+ path: string;
5
+ absolutePath: string;
6
+ isDirectory: boolean;
7
+ size: number;
8
+ modifiedTime: Date;
9
+ extension?: string;
10
+ }
11
+ export declare function createGlobTool(context: ExecutionContext): import("../utils").DynamicTool<z.ZodObject<{
12
+ pattern: z.ZodString;
13
+ path: z.ZodOptional<z.ZodString>;
14
+ case_sensitive: z.ZodOptional<z.ZodBoolean>;
15
+ include_dirs: z.ZodOptional<z.ZodBoolean>;
16
+ show_hidden: z.ZodOptional<z.ZodBoolean>;
17
+ max_results: z.ZodOptional<z.ZodNumber>;
18
+ sort_by_time: z.ZodOptional<z.ZodBoolean>;
19
+ }, z.core.$strip>, Record<string, unknown>, {
20
+ pattern: string;
21
+ search_path: string;
22
+ matches: GlobFileEntry[];
23
+ total_matches: number;
24
+ file_count: number;
25
+ directory_count: number;
26
+ summary: string;
27
+ truncated: boolean;
28
+ sorted_by_time: boolean;
29
+ }>;
30
+ export {};
31
+ //# sourceMappingURL=glob-tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glob-tool.d.ts","sourceRoot":"","sources":["../../src/fs/glob-tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAG3B,OAAO,EACL,gBAAgB,EAKjB,MAAM,SAAS,CAAC;AA0CjB,UAAU,aAAa;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,IAAI,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA+LD,wBAAgB,cAAc,CAAC,OAAO,EAAE,gBAAgB;;;;;;;;;aAMvC,MAAM;iBACF,MAAM;aACV,aAAa,EAAE;mBACT,MAAM;gBACT,MAAM;qBACD,MAAM;aACd,MAAM;eACJ,OAAO;oBACF,OAAO;GAwF9B"}
@@ -0,0 +1,287 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.createGlobTool = createGlobTool;
37
+ const v4_1 = require("zod/v4");
38
+ const path = __importStar(require("path"));
39
+ const utils_1 = require("./utils");
40
+ const utils_2 = require("../utils");
41
+ const globParametersSchema = v4_1.z.object({
42
+ pattern: v4_1.z
43
+ .string()
44
+ .describe('Glob pattern to match (e.g., "*.js", "src/**/*.ts", "**/*.{js,ts}")'),
45
+ path: v4_1.z
46
+ .string()
47
+ .optional()
48
+ .describe("Directory to search in (relative to workspace root, or absolute path within workspace). Defaults to workspace root."),
49
+ case_sensitive: v4_1.z
50
+ .boolean()
51
+ .optional()
52
+ .describe("Whether the search should be case-sensitive (default: false)"),
53
+ include_dirs: v4_1.z
54
+ .boolean()
55
+ .optional()
56
+ .describe("Whether to include directories in results (default: false)"),
57
+ show_hidden: v4_1.z
58
+ .boolean()
59
+ .optional()
60
+ .describe("Whether to include hidden files/directories (starting with .)"),
61
+ max_results: v4_1.z
62
+ .number()
63
+ .min(1)
64
+ .optional()
65
+ .describe("Maximum number of results to return (default: 500)"),
66
+ sort_by_time: v4_1.z
67
+ .boolean()
68
+ .optional()
69
+ .describe("Whether to sort results by modification time, newest first (default: false)"),
70
+ });
71
+ // Path validation is now handled by validateWorkspacePath in tool-utils
72
+ /**
73
+ * Convert glob pattern to regex pattern
74
+ */
75
+ function globToRegex(pattern, caseSensitive = false) {
76
+ // Handle special cases for braces {js,ts}
77
+ let regexPattern = pattern;
78
+ // Handle brace expansion like {js,ts,jsx}
79
+ const braceRegex = /\{([^}]+)\}/g;
80
+ regexPattern = regexPattern.replace(braceRegex, (match, content) => {
81
+ const options = content.split(",").map((s) => s.trim());
82
+ return `(${options.join("|")})`;
83
+ });
84
+ // Escape regex special characters except glob chars
85
+ regexPattern = regexPattern
86
+ .replace(/[.+^${}()|[\]\\]/g, "\\$&") // Escape special regex chars except *, ?, and already handled {}
87
+ .replace(/\\\{/g, "{") // Restore { that we want to keep
88
+ .replace(/\\\}/g, "}") // Restore } that we want to keep
89
+ .replace(/\\\|/g, "|") // Restore | that we want to keep
90
+ .replace(/\\\(/g, "(") // Restore ( that we want to keep
91
+ .replace(/\\\)/g, ")"); // Restore ) that we want to keep
92
+ // Handle glob patterns
93
+ regexPattern = regexPattern
94
+ .replace(/\*\*/g, "###DOUBLESTAR###") // Temporarily replace **
95
+ .replace(/\*/g, "[^/]*") // * becomes [^/]* (match any chars except path separator)
96
+ .replace(/###DOUBLESTAR###/g, ".*") // ** becomes .* (match any chars including path separator)
97
+ .replace(/\?/g, "[^/]"); // ? becomes [^/] (match single char except path separator)
98
+ const flags = caseSensitive ? "" : "i";
99
+ return new RegExp(`^${regexPattern}$`, flags);
100
+ }
101
+ /**
102
+ * Check if a file should be skipped based on common patterns
103
+ */
104
+ function shouldSkipPath(relativePath, showHidden) {
105
+ // Skip hidden files unless requested
106
+ if (!showHidden &&
107
+ relativePath.split("/").some((part) => part.startsWith("."))) {
108
+ return true;
109
+ }
110
+ // Skip common directories that should never be searched
111
+ const skipPatterns = [
112
+ /node_modules/,
113
+ /\.git$/,
114
+ /\.svn$/,
115
+ /\.hg$/,
116
+ /\.vscode$/,
117
+ /dist$/,
118
+ /build$/,
119
+ /coverage$/,
120
+ /\.nyc_output$/,
121
+ /\.next$/,
122
+ /\.cache$/,
123
+ ];
124
+ return skipPatterns.some((pattern) => pattern.test(relativePath));
125
+ }
126
+ /**
127
+ * Recursively find files matching the pattern
128
+ */
129
+ async function findMatches(context, searchDir, pattern, options) {
130
+ const results = [];
131
+ const scanDirectory = async (currentDir) => {
132
+ if (results.length >= options.maxResults) {
133
+ return;
134
+ }
135
+ try {
136
+ const entries = (await context.fsOperator.readdir(currentDir, {
137
+ withFileTypes: true,
138
+ }));
139
+ for (const entry of entries) {
140
+ if (results.length >= options.maxResults) {
141
+ break;
142
+ }
143
+ const fullPath = path.join(currentDir, entry.name.toString());
144
+ const relativePath = path.relative(searchDir, fullPath);
145
+ // Skip paths that should be ignored
146
+ if (shouldSkipPath(relativePath, options.showHidden)) {
147
+ continue;
148
+ }
149
+ const isDirectory = entry.isDirectory();
150
+ // Check if this path matches the pattern
151
+ const matches = pattern.test(relativePath);
152
+ if (matches && (options.includeDirs || !isDirectory)) {
153
+ try {
154
+ const stats = await context.fsOperator.stat(fullPath);
155
+ results.push({
156
+ path: relativePath,
157
+ absolutePath: fullPath,
158
+ isDirectory,
159
+ size: isDirectory ? 0 : Number(stats.size),
160
+ modifiedTime: stats.mtime,
161
+ extension: isDirectory
162
+ ? undefined
163
+ : path.extname(entry.name.toString()).slice(1),
164
+ });
165
+ }
166
+ catch (error) {
167
+ // Ignore stat errors and continue
168
+ }
169
+ }
170
+ // Recursively scan subdirectories
171
+ if (isDirectory) {
172
+ await scanDirectory(fullPath);
173
+ }
174
+ }
175
+ }
176
+ catch (error) {
177
+ // Ignore permission errors and continue
178
+ }
179
+ };
180
+ await scanDirectory(searchDir);
181
+ return results;
182
+ }
183
+ /**
184
+ * Sort results by modification time (newest first) or alphabetically
185
+ */
186
+ function sortResults(results, sortByTime) {
187
+ if (!sortByTime) {
188
+ // Sort alphabetically with directories first
189
+ return results.sort((a, b) => {
190
+ if (a.isDirectory && !b.isDirectory) {
191
+ return -1;
192
+ }
193
+ if (!a.isDirectory && b.isDirectory) {
194
+ return 1;
195
+ }
196
+ return a.path.localeCompare(b.path);
197
+ });
198
+ }
199
+ // Sort by modification time (newest first) with recent files prioritized
200
+ const oneDayAgo = new Date().getTime() - 24 * 60 * 60 * 1000;
201
+ return results.sort((a, b) => {
202
+ const aTime = a.modifiedTime.getTime();
203
+ const bTime = b.modifiedTime.getTime();
204
+ const aIsRecent = aTime > oneDayAgo;
205
+ const bIsRecent = bTime > oneDayAgo;
206
+ // Both recent: newest first
207
+ if (aIsRecent && bIsRecent) {
208
+ return bTime - aTime;
209
+ }
210
+ // One recent: recent first
211
+ if (aIsRecent) {
212
+ return -1;
213
+ }
214
+ if (bIsRecent) {
215
+ return 1;
216
+ }
217
+ // Both old: alphabetical
218
+ return a.path.localeCompare(b.path);
219
+ });
220
+ }
221
+ function createGlobTool(context) {
222
+ return (0, utils_2.tool)(async (params) => {
223
+ try {
224
+ const { pattern, path: searchPath = ".", case_sensitive = false, include_dirs = false, show_hidden = false, max_results = 500, sort_by_time = false, } = params;
225
+ // Validate workspace path (handles both absolute and relative paths)
226
+ const pathError = (0, utils_1.validateWorkspacePath)(searchPath, context);
227
+ if (pathError) {
228
+ return pathError;
229
+ }
230
+ // Resolve search directory
231
+ const absolutePath = (0, utils_1.resolveWorkspacePath)(searchPath, context);
232
+ // Check if path exists and is a directory
233
+ const dirError = await (0, utils_1.validateDirectoryExists)(context, absolutePath, searchPath);
234
+ if (dirError) {
235
+ return dirError;
236
+ }
237
+ // Convert glob pattern to regex
238
+ const regex = globToRegex(pattern, case_sensitive);
239
+ // Find matching files
240
+ const matches = await findMatches(context, absolutePath, regex, {
241
+ includeDirs: include_dirs,
242
+ showHidden: show_hidden,
243
+ maxResults: max_results,
244
+ });
245
+ // Sort results
246
+ const sortedMatches = sortResults(matches, sort_by_time);
247
+ // Create summary
248
+ const fileCount = sortedMatches.filter((m) => !m.isDirectory).length;
249
+ const dirCount = sortedMatches.filter((m) => m.isDirectory).length;
250
+ let summary = `Found ${sortedMatches.length} match(es) for pattern "${pattern}"`;
251
+ if (fileCount > 0 && dirCount > 0) {
252
+ summary += ` (${fileCount} files, ${dirCount} directories)`;
253
+ }
254
+ else if (fileCount > 0) {
255
+ summary += ` (${fileCount} files)`;
256
+ }
257
+ else if (dirCount > 0) {
258
+ summary += ` (${dirCount} directories)`;
259
+ }
260
+ if (sortedMatches.length >= max_results) {
261
+ summary += ` - results truncated at ${max_results}`;
262
+ }
263
+ return (0, utils_1.createSuccessResponse)({
264
+ pattern,
265
+ search_path: searchPath,
266
+ matches: sortedMatches,
267
+ total_matches: sortedMatches.length,
268
+ file_count: fileCount,
269
+ directory_count: dirCount,
270
+ summary,
271
+ truncated: sortedMatches.length >= max_results,
272
+ sorted_by_time: sort_by_time,
273
+ });
274
+ }
275
+ catch (error) {
276
+ return (0, utils_2.handleToolError)(error, "Glob tool execution", "execution");
277
+ }
278
+ }, {
279
+ name: "Glob",
280
+ description: 'Find files and directories matching glob patterns (e.g., "*.js", "src/**/*.ts"). Efficient for locating files by name or path structure.',
281
+ schema: globParametersSchema,
282
+ getDisplay: ({ name, input }) => {
283
+ return `Using ${name} for tool call: ${input.pattern || ""}`;
284
+ },
285
+ });
286
+ }
287
+ //# sourceMappingURL=glob-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glob-tool.js","sourceRoot":"","sources":["../../src/fs/glob-tool.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyPA,wCAsGC;AA/VD,+BAA2B;AAE3B,2CAA6B;AAC7B,mCAMiB;AACjB,oCAA6D;AAI7D,MAAM,oBAAoB,GAAG,MAAC,CAAC,MAAM,CAAC;IACpC,OAAO,EAAE,MAAC;SACP,MAAM,EAAE;SACR,QAAQ,CACP,qEAAqE,CACtE;IACH,IAAI,EAAE,MAAC;SACJ,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,qHAAqH,CACtH;IACH,cAAc,EAAE,MAAC;SACd,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CAAC,8DAA8D,CAAC;IAC3E,YAAY,EAAE,MAAC;SACZ,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CAAC,4DAA4D,CAAC;IACzE,WAAW,EAAE,MAAC;SACX,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CAAC,+DAA+D,CAAC;IAC5E,WAAW,EAAE,MAAC;SACX,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,EAAE;SACV,QAAQ,CAAC,oDAAoD,CAAC;IACjE,YAAY,EAAE,MAAC;SACZ,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CACP,6EAA6E,CAC9E;CACJ,CAAC,CAAC;AAWH,wEAAwE;AAExE;;GAEG;AACH,SAAS,WAAW,CAAC,OAAe,EAAE,gBAAyB,KAAK;IAClE,0CAA0C;IAC1C,IAAI,YAAY,GAAG,OAAO,CAAC;IAE3B,0CAA0C;IAC1C,MAAM,UAAU,GAAG,cAAc,CAAC;IAClC,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACjE,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAChE,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,oDAAoD;IACpD,YAAY,GAAG,YAAY;SACxB,OAAO,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC,iEAAiE;SACtG,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,iCAAiC;SACvD,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,iCAAiC;SACvD,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,iCAAiC;SACvD,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,iCAAiC;SACvD,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,iCAAiC;IAE3D,uBAAuB;IACvB,YAAY,GAAG,YAAY;SACxB,OAAO,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC,yBAAyB;SAC9D,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,0DAA0D;SAClF,OAAO,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC,2DAA2D;SAC9F,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,2DAA2D;IAEtF,MAAM,KAAK,GAAG,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;IACvC,OAAO,IAAI,MAAM,CAAC,IAAI,YAAY,GAAG,EAAE,KAAK,CAAC,CAAC;AAChD,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CAAC,YAAoB,EAAE,UAAmB;IAC/D,qCAAqC;IACrC,IACE,CAAC,UAAU;QACX,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAC5D,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,wDAAwD;IACxD,MAAM,YAAY,GAAG;QACnB,cAAc;QACd,QAAQ;QACR,QAAQ;QACR,OAAO;QACP,WAAW;QACX,OAAO;QACP,QAAQ;QACR,WAAW;QACX,eAAe;QACf,SAAS;QACT,UAAU;KACX,CAAC;IAEF,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;AACpE,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,WAAW,CACxB,OAAyB,EACzB,SAAiB,EACjB,OAAe,EACf,OAIC;IAED,MAAM,OAAO,GAAoB,EAAE,CAAC;IAEpC,MAAM,aAAa,GAAG,KAAK,EAAE,UAAkB,EAAiB,EAAE;QAChE,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YACzC,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,CAAC,MAAM,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,UAAU,EAAE;gBAC5D,aAAa,EAAE,IAAI;aACpB,CAAC,CAAc,CAAC;YAEjB,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC5B,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;oBACzC,MAAM;gBACR,CAAC;gBAED,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;gBAC9D,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;gBAExD,oCAAoC;gBACpC,IAAI,cAAc,CAAC,YAAY,EAAE,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;oBACrD,SAAS;gBACX,CAAC;gBAED,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;gBAExC,yCAAyC;gBACzC,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBAE3C,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;oBACrD,IAAI,CAAC;wBACH,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;wBAEtD,OAAO,CAAC,IAAI,CAAC;4BACX,IAAI,EAAE,YAAY;4BAClB,YAAY,EAAE,QAAQ;4BACtB,WAAW;4BACX,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;4BAC1C,YAAY,EAAE,KAAK,CAAC,KAAK;4BACzB,SAAS,EAAE,WAAW;gCACpB,CAAC,CAAC,SAAS;gCACX,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;yBACjD,CAAC,CAAC;oBACL,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,kCAAkC;oBACpC,CAAC;gBACH,CAAC;gBAED,kCAAkC;gBAClC,IAAI,WAAW,EAAE,CAAC;oBAChB,MAAM,aAAa,CAAC,QAAQ,CAAC,CAAC;gBAChC,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,wCAAwC;QAC1C,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,aAAa,CAAC,SAAS,CAAC,CAAC;IAC/B,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,SAAS,WAAW,CAClB,OAAwB,EACxB,UAAmB;IAEnB,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,6CAA6C;QAC7C,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YAC3B,IAAI,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;gBACpC,OAAO,CAAC,CAAC,CAAC;YACZ,CAAC;YACD,IAAI,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;gBACpC,OAAO,CAAC,CAAC;YACX,CAAC;YACD,OAAO,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,yEAAyE;IACzE,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IAE7D,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAC3B,MAAM,KAAK,GAAG,CAAC,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;QACvC,MAAM,KAAK,GAAG,CAAC,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;QACvC,MAAM,SAAS,GAAG,KAAK,GAAG,SAAS,CAAC;QACpC,MAAM,SAAS,GAAG,KAAK,GAAG,SAAS,CAAC;QAEpC,4BAA4B;QAC5B,IAAI,SAAS,IAAI,SAAS,EAAE,CAAC;YAC3B,OAAO,KAAK,GAAG,KAAK,CAAC;QACvB,CAAC;QAED,2BAA2B;QAC3B,IAAI,SAAS,EAAE,CAAC;YACd,OAAO,CAAC,CAAC,CAAC;QACZ,CAAC;QACD,IAAI,SAAS,EAAE,CAAC;YACd,OAAO,CAAC,CAAC;QACX,CAAC;QAED,yBAAyB;QACzB,OAAO,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAgB,cAAc,CAAC,OAAyB;IACtD,OAAO,IAAA,YAAI,EACT,KAAK,EACH,MAAM,EAaN,EAAE;QACF,IAAI,CAAC;YACH,MAAM,EACJ,OAAO,EACP,IAAI,EAAE,UAAU,GAAG,GAAG,EACtB,cAAc,GAAG,KAAK,EACtB,YAAY,GAAG,KAAK,EACpB,WAAW,GAAG,KAAK,EACnB,WAAW,GAAG,GAAG,EACjB,YAAY,GAAG,KAAK,GACrB,GAAG,MAAM,CAAC;YAEX,qEAAqE;YACrE,MAAM,SAAS,GAAG,IAAA,6BAAqB,EAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YAC7D,IAAI,SAAS,EAAE,CAAC;gBACd,OAAO,SAAS,CAAC;YACnB,CAAC;YAED,2BAA2B;YAC3B,MAAM,YAAY,GAAG,IAAA,4BAAoB,EAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YAE/D,0CAA0C;YAC1C,MAAM,QAAQ,GAAG,MAAM,IAAA,+BAAuB,EAC5C,OAAO,EACP,YAAY,EACZ,UAAU,CACX,CAAC;YACF,IAAI,QAAQ,EAAE,CAAC;gBACb,OAAO,QAAQ,CAAC;YAClB,CAAC;YAED,gCAAgC;YAChC,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;YAEnD,sBAAsB;YACtB,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE;gBAC9D,WAAW,EAAE,YAAY;gBACzB,UAAU,EAAE,WAAW;gBACvB,UAAU,EAAE,WAAW;aACxB,CAAC,CAAC;YAEH,eAAe;YACf,MAAM,aAAa,GAAG,WAAW,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;YAEzD,iBAAiB;YACjB,MAAM,SAAS,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC;YACrE,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC;YAEnE,IAAI,OAAO,GAAG,SAAS,aAAa,CAAC,MAAM,2BAA2B,OAAO,GAAG,CAAC;YACjF,IAAI,SAAS,GAAG,CAAC,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;gBAClC,OAAO,IAAI,KAAK,SAAS,WAAW,QAAQ,eAAe,CAAC;YAC9D,CAAC;iBAAM,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;gBACzB,OAAO,IAAI,KAAK,SAAS,SAAS,CAAC;YACrC,CAAC;iBAAM,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;gBACxB,OAAO,IAAI,KAAK,QAAQ,eAAe,CAAC;YAC1C,CAAC;YAED,IAAI,aAAa,CAAC,MAAM,IAAI,WAAW,EAAE,CAAC;gBACxC,OAAO,IAAI,2BAA2B,WAAW,EAAE,CAAC;YACtD,CAAC;YAED,OAAO,IAAA,6BAAqB,EAAC;gBAC3B,OAAO;gBACP,WAAW,EAAE,UAAU;gBACvB,OAAO,EAAE,aAAa;gBACtB,aAAa,EAAE,aAAa,CAAC,MAAM;gBACnC,UAAU,EAAE,SAAS;gBACrB,eAAe,EAAE,QAAQ;gBACzB,OAAO;gBACP,SAAS,EAAE,aAAa,CAAC,MAAM,IAAI,WAAW;gBAC9C,cAAc,EAAE,YAAY;aAC7B,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,IAAA,uBAAe,EAAC,KAAK,EAAE,qBAAqB,EAAE,WAAW,CAAC,CAAC;QACpE,CAAC;IACH,CAAC,EACD;QACE,IAAI,EAAE,MAAM;QACZ,WAAW,EACT,0IAA0I;QAC5I,MAAM,EAAE,oBAAoB;QAC5B,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;YAC9B,OAAO,SAAS,IAAI,mBAAmB,KAAK,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC;QAC/D,CAAC;KACF,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,32 @@
1
+ import { z } from "zod/v4";
2
+ import { ExecutionContext } from "./utils";
3
+ interface GrepMatch {
4
+ filePath: string;
5
+ lineNumber: number;
6
+ line: string;
7
+ matchStart: number;
8
+ matchEnd: number;
9
+ }
10
+ interface GrepResult {
11
+ pattern: string;
12
+ search_path: string;
13
+ include_pattern?: string;
14
+ files_searched: number;
15
+ files_with_matches?: number;
16
+ matches: GrepMatch[];
17
+ matches_by_file?: Record<string, GrepMatch[]>;
18
+ total_matches: number;
19
+ summary?: string;
20
+ truncated?: boolean;
21
+ message?: string;
22
+ }
23
+ export declare function createGrepTool(context: ExecutionContext): import("../utils").DynamicTool<z.ZodObject<{
24
+ pattern: z.ZodString;
25
+ path: z.ZodOptional<z.ZodString>;
26
+ include: z.ZodOptional<z.ZodString>;
27
+ case_sensitive: z.ZodOptional<z.ZodBoolean>;
28
+ max_files: z.ZodOptional<z.ZodNumber>;
29
+ max_matches: z.ZodOptional<z.ZodNumber>;
30
+ }, z.core.$strip>, any, GrepResult>;
31
+ export {};
32
+ //# sourceMappingURL=grep-tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grep-tool.d.ts","sourceRoot":"","sources":["../../src/fs/grep-tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAE3B,OAAO,EACL,gBAAgB,EAKjB,MAAM,SAAS,CAAC;AAyCjB,UAAU,SAAS;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,UAAU;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;IAC9C,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAiOD,wBAAgB,cAAc,CAAC,OAAO,EAAE,gBAAgB;;;;;;;oCA8IvD"}