open-agent-sdk 0.1.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (196) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +284 -0
  3. package/README.zh.md +285 -0
  4. package/dist/agent/agent-definition.d.ts +107 -0
  5. package/dist/agent/agent-definition.d.ts.map +1 -0
  6. package/dist/agent/agent-definition.js +90 -0
  7. package/dist/agent/agent-definition.js.map +1 -0
  8. package/dist/agent/react-loop.d.ts +117 -0
  9. package/dist/agent/react-loop.d.ts.map +1 -0
  10. package/dist/agent/react-loop.js +674 -0
  11. package/dist/agent/react-loop.js.map +1 -0
  12. package/dist/agent/subagent-runner.d.ts +67 -0
  13. package/dist/agent/subagent-runner.d.ts.map +1 -0
  14. package/dist/agent/subagent-runner.js +168 -0
  15. package/dist/agent/subagent-runner.js.map +1 -0
  16. package/dist/hooks/index.d.ts +8 -0
  17. package/dist/hooks/index.d.ts.map +1 -0
  18. package/dist/hooks/index.js +9 -0
  19. package/dist/hooks/index.js.map +1 -0
  20. package/dist/hooks/inputs.d.ts +56 -0
  21. package/dist/hooks/inputs.d.ts.map +1 -0
  22. package/dist/hooks/inputs.js +150 -0
  23. package/dist/hooks/inputs.js.map +1 -0
  24. package/dist/hooks/manager.d.ts +63 -0
  25. package/dist/hooks/manager.d.ts.map +1 -0
  26. package/dist/hooks/manager.js +137 -0
  27. package/dist/hooks/manager.js.map +1 -0
  28. package/dist/hooks/types.d.ts +191 -0
  29. package/dist/hooks/types.d.ts.map +1 -0
  30. package/dist/hooks/types.js +6 -0
  31. package/dist/hooks/types.js.map +1 -0
  32. package/dist/index.d.ts +109 -0
  33. package/dist/index.d.ts.map +1 -0
  34. package/dist/index.js +218 -0
  35. package/dist/index.js.map +1 -0
  36. package/dist/mcp/errors.d.ts +26 -0
  37. package/dist/mcp/errors.d.ts.map +1 -0
  38. package/dist/mcp/errors.js +43 -0
  39. package/dist/mcp/errors.js.map +1 -0
  40. package/dist/mcp/index.d.ts +11 -0
  41. package/dist/mcp/index.d.ts.map +1 -0
  42. package/dist/mcp/index.js +13 -0
  43. package/dist/mcp/index.js.map +1 -0
  44. package/dist/mcp/manager.d.ts +50 -0
  45. package/dist/mcp/manager.d.ts.map +1 -0
  46. package/dist/mcp/manager.js +170 -0
  47. package/dist/mcp/manager.js.map +1 -0
  48. package/dist/mcp/server-registry.d.ts +48 -0
  49. package/dist/mcp/server-registry.d.ts.map +1 -0
  50. package/dist/mcp/server-registry.js +121 -0
  51. package/dist/mcp/server-registry.js.map +1 -0
  52. package/dist/mcp/tool-adapter.d.ts +42 -0
  53. package/dist/mcp/tool-adapter.d.ts.map +1 -0
  54. package/dist/mcp/tool-adapter.js +89 -0
  55. package/dist/mcp/tool-adapter.js.map +1 -0
  56. package/dist/mcp/types.d.ts +74 -0
  57. package/dist/mcp/types.d.ts.map +1 -0
  58. package/dist/mcp/types.js +21 -0
  59. package/dist/mcp/types.js.map +1 -0
  60. package/dist/permissions/index.d.ts +3 -0
  61. package/dist/permissions/index.d.ts.map +1 -0
  62. package/dist/permissions/index.js +4 -0
  63. package/dist/permissions/index.js.map +1 -0
  64. package/dist/permissions/manager.d.ts +40 -0
  65. package/dist/permissions/manager.d.ts.map +1 -0
  66. package/dist/permissions/manager.js +115 -0
  67. package/dist/permissions/manager.js.map +1 -0
  68. package/dist/permissions/types.d.ts +124 -0
  69. package/dist/permissions/types.d.ts.map +1 -0
  70. package/dist/permissions/types.js +25 -0
  71. package/dist/permissions/types.js.map +1 -0
  72. package/dist/providers/anthropic.d.ts +18 -0
  73. package/dist/providers/anthropic.d.ts.map +1 -0
  74. package/dist/providers/anthropic.js +126 -0
  75. package/dist/providers/anthropic.js.map +1 -0
  76. package/dist/providers/base.d.ts +85 -0
  77. package/dist/providers/base.d.ts.map +1 -0
  78. package/dist/providers/base.js +36 -0
  79. package/dist/providers/base.js.map +1 -0
  80. package/dist/providers/google.d.ts +12 -0
  81. package/dist/providers/google.d.ts.map +1 -0
  82. package/dist/providers/google.js +123 -0
  83. package/dist/providers/google.js.map +1 -0
  84. package/dist/providers/openai.d.ts +12 -0
  85. package/dist/providers/openai.d.ts.map +1 -0
  86. package/dist/providers/openai.js +110 -0
  87. package/dist/providers/openai.js.map +1 -0
  88. package/dist/session/factory.d.ts +156 -0
  89. package/dist/session/factory.d.ts.map +1 -0
  90. package/dist/session/factory.js +311 -0
  91. package/dist/session/factory.js.map +1 -0
  92. package/dist/session/index.d.ts +8 -0
  93. package/dist/session/index.d.ts.map +1 -0
  94. package/dist/session/index.js +7 -0
  95. package/dist/session/index.js.map +1 -0
  96. package/dist/session/session.d.ts +144 -0
  97. package/dist/session/session.d.ts.map +1 -0
  98. package/dist/session/session.js +319 -0
  99. package/dist/session/session.js.map +1 -0
  100. package/dist/session/storage.d.ts +105 -0
  101. package/dist/session/storage.d.ts.map +1 -0
  102. package/dist/session/storage.js +148 -0
  103. package/dist/session/storage.js.map +1 -0
  104. package/dist/tools/ask-user-question.d.ts +31 -0
  105. package/dist/tools/ask-user-question.d.ts.map +1 -0
  106. package/dist/tools/ask-user-question.js +66 -0
  107. package/dist/tools/ask-user-question.js.map +1 -0
  108. package/dist/tools/bash-output.d.ts +22 -0
  109. package/dist/tools/bash-output.d.ts.map +1 -0
  110. package/dist/tools/bash-output.js +43 -0
  111. package/dist/tools/bash-output.js.map +1 -0
  112. package/dist/tools/bash.d.ts +36 -0
  113. package/dist/tools/bash.d.ts.map +1 -0
  114. package/dist/tools/bash.js +161 -0
  115. package/dist/tools/bash.js.map +1 -0
  116. package/dist/tools/edit.d.ts +24 -0
  117. package/dist/tools/edit.d.ts.map +1 -0
  118. package/dist/tools/edit.js +83 -0
  119. package/dist/tools/edit.js.map +1 -0
  120. package/dist/tools/glob.d.ts +22 -0
  121. package/dist/tools/glob.d.ts.map +1 -0
  122. package/dist/tools/glob.js +248 -0
  123. package/dist/tools/glob.js.map +1 -0
  124. package/dist/tools/grep.d.ts +39 -0
  125. package/dist/tools/grep.d.ts.map +1 -0
  126. package/dist/tools/grep.js +312 -0
  127. package/dist/tools/grep.js.map +1 -0
  128. package/dist/tools/kill-bash.d.ts +19 -0
  129. package/dist/tools/kill-bash.d.ts.map +1 -0
  130. package/dist/tools/kill-bash.js +64 -0
  131. package/dist/tools/kill-bash.js.map +1 -0
  132. package/dist/tools/read.d.ts +26 -0
  133. package/dist/tools/read.d.ts.map +1 -0
  134. package/dist/tools/read.js +87 -0
  135. package/dist/tools/read.js.map +1 -0
  136. package/dist/tools/registry.d.ts +32 -0
  137. package/dist/tools/registry.d.ts.map +1 -0
  138. package/dist/tools/registry.js +91 -0
  139. package/dist/tools/registry.js.map +1 -0
  140. package/dist/tools/task-create.d.ts +22 -0
  141. package/dist/tools/task-create.d.ts.map +1 -0
  142. package/dist/tools/task-create.js +42 -0
  143. package/dist/tools/task-create.js.map +1 -0
  144. package/dist/tools/task-get.d.ts +19 -0
  145. package/dist/tools/task-get.d.ts.map +1 -0
  146. package/dist/tools/task-get.js +38 -0
  147. package/dist/tools/task-get.js.map +1 -0
  148. package/dist/tools/task-list.d.ts +18 -0
  149. package/dist/tools/task-list.d.ts.map +1 -0
  150. package/dist/tools/task-list.js +27 -0
  151. package/dist/tools/task-list.js.map +1 -0
  152. package/dist/tools/task-storage.d.ts +6 -0
  153. package/dist/tools/task-storage.d.ts.map +1 -0
  154. package/dist/tools/task-storage.js +83 -0
  155. package/dist/tools/task-storage.js.map +1 -0
  156. package/dist/tools/task-update.d.ts +28 -0
  157. package/dist/tools/task-update.d.ts.map +1 -0
  158. package/dist/tools/task-update.js +118 -0
  159. package/dist/tools/task-update.js.map +1 -0
  160. package/dist/tools/task.d.ts +80 -0
  161. package/dist/tools/task.d.ts.map +1 -0
  162. package/dist/tools/task.js +99 -0
  163. package/dist/tools/task.js.map +1 -0
  164. package/dist/tools/web-fetch.d.ts +21 -0
  165. package/dist/tools/web-fetch.d.ts.map +1 -0
  166. package/dist/tools/web-fetch.js +124 -0
  167. package/dist/tools/web-fetch.js.map +1 -0
  168. package/dist/tools/web-search.d.ts +20 -0
  169. package/dist/tools/web-search.d.ts.map +1 -0
  170. package/dist/tools/web-search.js +127 -0
  171. package/dist/tools/web-search.js.map +1 -0
  172. package/dist/tools/write.d.ts +22 -0
  173. package/dist/tools/write.d.ts.map +1 -0
  174. package/dist/tools/write.js +46 -0
  175. package/dist/tools/write.js.map +1 -0
  176. package/dist/types/messages.d.ts +138 -0
  177. package/dist/types/messages.d.ts.map +1 -0
  178. package/dist/types/messages.js +88 -0
  179. package/dist/types/messages.js.map +1 -0
  180. package/dist/types/task.d.ts +29 -0
  181. package/dist/types/task.d.ts.map +1 -0
  182. package/dist/types/task.js +5 -0
  183. package/dist/types/task.js.map +1 -0
  184. package/dist/types/tools.d.ts +56 -0
  185. package/dist/types/tools.d.ts.map +1 -0
  186. package/dist/types/tools.js +25 -0
  187. package/dist/types/tools.js.map +1 -0
  188. package/dist/utils/logger.d.ts +19 -0
  189. package/dist/utils/logger.d.ts.map +1 -0
  190. package/dist/utils/logger.js +46 -0
  191. package/dist/utils/logger.js.map +1 -0
  192. package/dist/utils/uuid.d.ts +3 -0
  193. package/dist/utils/uuid.d.ts.map +1 -0
  194. package/dist/utils/uuid.js +5 -0
  195. package/dist/utils/uuid.js.map +1 -0
  196. package/package.json +38 -0
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Edit tool - Precise string replacement in files
3
+ */
4
+ import { readFileSync, writeFileSync, existsSync } from 'fs';
5
+ import { resolve } from 'path';
6
+ const parameters = {
7
+ type: 'object',
8
+ properties: {
9
+ file_path: {
10
+ type: 'string',
11
+ description: 'Absolute path to the file to edit',
12
+ },
13
+ old_string: {
14
+ type: 'string',
15
+ description: 'Exact string to replace (must be unique unless replace_all is true)',
16
+ },
17
+ new_string: {
18
+ type: 'string',
19
+ description: 'Replacement string',
20
+ },
21
+ replace_all: {
22
+ type: 'boolean',
23
+ description: 'Replace all occurrences instead of just the first',
24
+ },
25
+ },
26
+ required: ['file_path', 'old_string', 'new_string'],
27
+ };
28
+ export class EditTool {
29
+ name = 'Edit';
30
+ description = 'Replace text in a file. The old_string must match exactly. Use replace_all to replace multiple occurrences.';
31
+ parameters = parameters;
32
+ handler = async (input, context) => {
33
+ const filePath = resolve(context.cwd, input.file_path);
34
+ if (!existsSync(filePath)) {
35
+ return {
36
+ error: `File "${input.file_path}" does not exist`,
37
+ replacements: 0,
38
+ message: '',
39
+ file_path: input.file_path,
40
+ };
41
+ }
42
+ const content = readFileSync(filePath, 'utf-8');
43
+ const oldString = input.old_string;
44
+ const newString = input.new_string;
45
+ // Count occurrences
46
+ let count = 0;
47
+ let pos = content.indexOf(oldString);
48
+ while (pos !== -1) {
49
+ count++;
50
+ pos = content.indexOf(oldString, pos + oldString.length);
51
+ }
52
+ if (count === 0) {
53
+ return {
54
+ error: `String not found in file: "${oldString.substring(0, 50)}${oldString.length > 50 ? '...' : ''}"`,
55
+ replacements: 0,
56
+ message: '',
57
+ file_path: input.file_path,
58
+ };
59
+ }
60
+ if (count > 1 && !input.replace_all) {
61
+ return {
62
+ error: `String appears multiple times in file (${count} occurrences). Use replace_all to replace all occurrences.`,
63
+ replacements: 0,
64
+ message: '',
65
+ file_path: input.file_path,
66
+ };
67
+ }
68
+ // Perform replacement
69
+ const newContent = input.replace_all
70
+ ? content.split(oldString).join(newString)
71
+ : content.replace(oldString, newString);
72
+ writeFileSync(filePath, newContent, 'utf-8');
73
+ const replacements = input.replace_all ? count : 1;
74
+ return {
75
+ message: `Successfully made ${replacements} replacement${replacements > 1 ? 's' : ''} in "${input.file_path}"`,
76
+ replacements,
77
+ file_path: input.file_path,
78
+ };
79
+ };
80
+ }
81
+ // Export singleton instance
82
+ export const editTool = new EditTool();
83
+ //# sourceMappingURL=edit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edit.js","sourceRoot":"","sources":["../../src/tools/edit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Glob tool - Find files matching glob patterns
3
+ */
4
+ import type { Tool, ToolContext, JSONSchema } from '../types/tools';
5
+ export interface GlobInput {
6
+ pattern: string;
7
+ path?: string;
8
+ sort?: 'alphabetical' | 'mtime';
9
+ }
10
+ export interface GlobOutput {
11
+ files?: string[];
12
+ count?: number;
13
+ error?: string;
14
+ }
15
+ export declare class GlobTool implements Tool<GlobInput, GlobOutput> {
16
+ name: string;
17
+ description: string;
18
+ parameters: JSONSchema;
19
+ handler: (input: GlobInput, context: ToolContext) => Promise<GlobOutput>;
20
+ }
21
+ export declare const globTool: GlobTool;
22
+ //# sourceMappingURL=glob.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glob.d.ts","sourceRoot":"","sources":["../../src/tools/glob.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEpE,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC;CACjC;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAsND,qBAAa,QAAS,YAAW,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC;IAC1D,IAAI,SAAU;IACd,WAAW,SACiH;IAC5H,UAAU,aAAc;IAExB,OAAO,GACL,OAAO,SAAS,EAChB,SAAS,WAAW,KACnB,OAAO,CAAC,UAAU,CAAC,CAmDpB;CACH;AAGD,eAAO,MAAM,QAAQ,UAAiB,CAAC"}
@@ -0,0 +1,248 @@
1
+ /**
2
+ * Glob tool - Find files matching glob patterns
3
+ */
4
+ import { readdirSync, statSync, existsSync } from 'fs';
5
+ import { resolve, join, relative } from 'path';
6
+ const parameters = {
7
+ type: 'object',
8
+ properties: {
9
+ pattern: {
10
+ type: 'string',
11
+ description: 'Glob pattern to match files (e.g., "**/*.ts", "src/*.js")',
12
+ },
13
+ path: {
14
+ type: 'string',
15
+ description: 'Directory to search in (defaults to cwd)',
16
+ },
17
+ sort: {
18
+ type: 'string',
19
+ enum: ['alphabetical', 'mtime'],
20
+ description: 'Sort order: alphabetical (default) or mtime (modification time, newest first)',
21
+ },
22
+ },
23
+ required: ['pattern'],
24
+ };
25
+ const MAX_RESULTS = 1000;
26
+ /**
27
+ * Validate glob pattern for invalid syntax
28
+ */
29
+ function validatePattern(pattern) {
30
+ // Check for unclosed character class
31
+ const openBrackets = (pattern.match(/\[/g) || []).length;
32
+ const closeBrackets = (pattern.match(/\]/g) || []).length;
33
+ if (openBrackets !== closeBrackets) {
34
+ throw new Error('Invalid character class in pattern: unclosed bracket');
35
+ }
36
+ // Check for unclosed brace expansion
37
+ const openBraces = (pattern.match(/\{/g) || []).length;
38
+ const closeBraces = (pattern.match(/\}/g) || []).length;
39
+ if (openBraces !== closeBraces) {
40
+ throw new Error('Invalid brace expansion in pattern: unclosed brace');
41
+ }
42
+ }
43
+ /**
44
+ * Convert a glob pattern to a RegExp
45
+ * Supports: * (any chars except /), ** (recursive), ? (single char)
46
+ */
47
+ function globToRegExp(pattern) {
48
+ // Validate pattern first
49
+ validatePattern(pattern);
50
+ let regex = '';
51
+ let i = 0;
52
+ while (i < pattern.length) {
53
+ const c = pattern[i];
54
+ if (c === '*') {
55
+ if (pattern[i + 1] === '*') {
56
+ // ** matches any path segments including /
57
+ regex += '.*';
58
+ i += 2;
59
+ }
60
+ else {
61
+ // * matches any chars except /
62
+ regex += '[^/]*';
63
+ i++;
64
+ }
65
+ }
66
+ else if (c === '?') {
67
+ // ? matches single char except /
68
+ regex += '[^/]';
69
+ i++;
70
+ }
71
+ else if (c === '[') {
72
+ // Character class [...]
73
+ const end = pattern.indexOf(']', i);
74
+ if (end === -1) {
75
+ throw new Error('Invalid character class in pattern');
76
+ }
77
+ regex += pattern.slice(i, end + 1);
78
+ i = end + 1;
79
+ }
80
+ else if (c === '{') {
81
+ // Brace expansion {a,b,c}
82
+ const end = pattern.indexOf('}', i);
83
+ if (end === -1) {
84
+ throw new Error('Invalid brace expansion in pattern');
85
+ }
86
+ const options = pattern.slice(i + 1, end).split(',');
87
+ regex += '(?:' + options.map(escapeRegex).join('|') + ')';
88
+ i = end + 1;
89
+ }
90
+ else if ('\\^$.|+()'.includes(c)) {
91
+ // Escape special regex chars
92
+ regex += '\\' + c;
93
+ i++;
94
+ }
95
+ else {
96
+ regex += c;
97
+ i++;
98
+ }
99
+ }
100
+ return new RegExp('^' + regex + '$');
101
+ }
102
+ function escapeRegex(str) {
103
+ return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
104
+ }
105
+ /**
106
+ * Match a file path against a glob pattern
107
+ */
108
+ function matchGlob(filePath, pattern) {
109
+ // Normalize path separators
110
+ const normalizedPath = filePath.replace(/\\/g, '/');
111
+ const normalizedPattern = pattern.replace(/\\/g, '/');
112
+ // Handle **/ prefix - match at any depth
113
+ if (normalizedPattern.startsWith('**/')) {
114
+ const restPattern = normalizedPattern.slice(3);
115
+ const restRegex = globToRegExp(restPattern);
116
+ // Check if the path ends with something matching restPattern
117
+ const parts = normalizedPath.split('/');
118
+ for (let i = 0; i < parts.length; i++) {
119
+ const subPath = parts.slice(i).join('/');
120
+ if (restRegex.test(subPath)) {
121
+ return true;
122
+ }
123
+ }
124
+ return false;
125
+ }
126
+ // Handle patterns with /**/ in the middle
127
+ if (normalizedPattern.includes('/**/')) {
128
+ const parts = normalizedPattern.split('/**/');
129
+ const prefixRegex = globToRegExp(parts[0]);
130
+ const suffixRegex = globToRegExp(parts.slice(1).join('/'));
131
+ if (!prefixRegex.test(normalizedPath)) {
132
+ return false;
133
+ }
134
+ // Check if suffix matches at any position after prefix
135
+ const prefixMatch = prefixRegex.exec(normalizedPath);
136
+ if (prefixMatch) {
137
+ const afterPrefix = normalizedPath.slice(prefixMatch[0].length);
138
+ // Try matching suffix at different positions
139
+ const pathParts = afterPrefix.split('/');
140
+ for (let i = 0; i < pathParts.length; i++) {
141
+ const candidate = pathParts.slice(i).join('/');
142
+ if (candidate && suffixRegex.test(candidate)) {
143
+ return true;
144
+ }
145
+ }
146
+ }
147
+ return false;
148
+ }
149
+ const regex = globToRegExp(normalizedPattern);
150
+ return regex.test(normalizedPath);
151
+ }
152
+ /**
153
+ * Recursively find files matching the pattern
154
+ */
155
+ function findFiles(dir, pattern, baseDir, results, visited = new Set()) {
156
+ if (results.length >= MAX_RESULTS) {
157
+ return;
158
+ }
159
+ // Prevent infinite loops from symlinks
160
+ const realPath = statSync(dir).isDirectory() ? dir : null;
161
+ if (!realPath || visited.has(realPath)) {
162
+ return;
163
+ }
164
+ visited.add(realPath);
165
+ try {
166
+ const entries = readdirSync(dir);
167
+ for (const entry of entries) {
168
+ if (results.length >= MAX_RESULTS) {
169
+ return;
170
+ }
171
+ const fullPath = join(dir, entry);
172
+ const relativePath = relative(baseDir, fullPath);
173
+ const stats = statSync(fullPath);
174
+ if (stats.isDirectory()) {
175
+ // Recurse into subdirectories
176
+ findFiles(fullPath, pattern, baseDir, results, visited);
177
+ }
178
+ else if (stats.isFile()) {
179
+ // Check if file matches pattern
180
+ if (matchGlob(relativePath, pattern)) {
181
+ results.push({
182
+ path: fullPath,
183
+ mtime: stats.mtime.getTime(),
184
+ });
185
+ }
186
+ }
187
+ }
188
+ }
189
+ catch (error) {
190
+ // Skip directories we can't read
191
+ }
192
+ }
193
+ export class GlobTool {
194
+ name = 'Glob';
195
+ description = 'Find files matching a glob pattern. Supports * (any chars), ** (recursive), ? (single char). Returns sorted file paths.';
196
+ parameters = parameters;
197
+ handler = async (input, context) => {
198
+ try {
199
+ // Resolve search directory
200
+ const searchDir = input.path
201
+ ? resolve(context.cwd, input.path)
202
+ : context.cwd;
203
+ if (!existsSync(searchDir)) {
204
+ return { error: `Path "${input.path}" does not exist` };
205
+ }
206
+ const stats = statSync(searchDir);
207
+ if (!stats.isDirectory()) {
208
+ return { error: `Path "${input.path}" is not a directory` };
209
+ }
210
+ // Validate pattern
211
+ if (!input.pattern || input.pattern.trim() === '') {
212
+ return { error: 'Pattern is required' };
213
+ }
214
+ // Validate pattern syntax before searching
215
+ try {
216
+ validatePattern(input.pattern);
217
+ }
218
+ catch (validationError) {
219
+ const message = validationError instanceof Error ? validationError.message : String(validationError);
220
+ return { error: message };
221
+ }
222
+ // Find matching files
223
+ const results = [];
224
+ findFiles(searchDir, input.pattern, searchDir, results);
225
+ // Sort results
226
+ const sortMode = input.sort ?? 'alphabetical';
227
+ if (sortMode === 'mtime') {
228
+ // Sort by modification time desc (newest first)
229
+ results.sort((a, b) => b.mtime - a.mtime);
230
+ }
231
+ else {
232
+ // Sort alphabetically
233
+ results.sort((a, b) => a.path.localeCompare(b.path));
234
+ }
235
+ return {
236
+ files: results.map((r) => r.path),
237
+ count: results.length,
238
+ };
239
+ }
240
+ catch (error) {
241
+ const message = error instanceof Error ? error.message : String(error);
242
+ return { error: `Glob error: ${message}` };
243
+ }
244
+ };
245
+ }
246
+ // Export singleton instance
247
+ export const globTool = new GlobTool();
248
+ //# sourceMappingURL=glob.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glob.js","sourceRoot":"","sources":["../../src/tools/glob.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Grep tool - Search file contents using regex patterns
3
+ */
4
+ import type { Tool, ToolContext, JSONSchema } from '../types/tools';
5
+ export interface GrepInput {
6
+ pattern: string;
7
+ path?: string;
8
+ glob?: string;
9
+ multiline?: boolean;
10
+ ignoreCase?: boolean;
11
+ output_mode?: 'files_with_matches' | 'content' | 'count';
12
+ head_limit?: number;
13
+ offset?: number;
14
+ context?: number;
15
+ before_context?: number;
16
+ after_context?: number;
17
+ }
18
+ export interface GrepMatch {
19
+ file: string;
20
+ line: number;
21
+ content: string;
22
+ context_before?: string[];
23
+ context_after?: string[];
24
+ }
25
+ export interface GrepOutput {
26
+ matches?: GrepMatch[];
27
+ count?: number;
28
+ files?: string[];
29
+ fileCounts?: Record<string, number>;
30
+ error?: string;
31
+ }
32
+ export declare class GrepTool implements Tool<GrepInput, GrepOutput> {
33
+ name: string;
34
+ description: string;
35
+ parameters: JSONSchema;
36
+ handler: (input: GrepInput, context: ToolContext) => Promise<GrepOutput>;
37
+ }
38
+ export declare const grepTool: GrepTool;
39
+ //# sourceMappingURL=grep.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grep.d.ts","sourceRoot":"","sources":["../../src/tools/grep.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEpE,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,oBAAoB,GAAG,SAAS,GAAG,OAAO,CAAC;IACzD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AA4RD,qBAAa,QAAS,YAAW,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC;IAC1D,IAAI,SAAU;IACd,WAAW,SACgJ;IAC3J,UAAU,aAAc;IAExB,OAAO,GACL,OAAO,SAAS,EAChB,SAAS,WAAW,KACnB,OAAO,CAAC,UAAU,CAAC,CA2FpB;CACH;AAGD,eAAO,MAAM,QAAQ,UAAiB,CAAC"}