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,312 @@
1
+ /**
2
+ * Grep tool - Search file contents using regex patterns
3
+ */
4
+ import { readdirSync, statSync, existsSync, readFileSync } from 'fs';
5
+ import { resolve, join, relative } from 'path';
6
+ const parameters = {
7
+ type: 'object',
8
+ properties: {
9
+ pattern: {
10
+ type: 'string',
11
+ description: 'Regular expression pattern to search for',
12
+ },
13
+ path: {
14
+ type: 'string',
15
+ description: 'Directory to search in (defaults to cwd)',
16
+ },
17
+ glob: {
18
+ type: 'string',
19
+ description: 'Glob pattern to filter files (e.g., "*.ts")',
20
+ },
21
+ multiline: {
22
+ type: 'boolean',
23
+ description: 'Enable multiline matching (default: false)',
24
+ },
25
+ ignoreCase: {
26
+ type: 'boolean',
27
+ description: 'Case insensitive matching (default: false)',
28
+ },
29
+ output_mode: {
30
+ type: 'string',
31
+ enum: ['files_with_matches', 'content', 'count'],
32
+ description: 'Output format: files_with_matches (file paths only), content (matching lines), count (match counts per file)',
33
+ },
34
+ head_limit: {
35
+ type: 'number',
36
+ description: 'Maximum number of matches to return (default: 100)',
37
+ },
38
+ offset: {
39
+ type: 'number',
40
+ description: 'Number of matches to skip from the beginning',
41
+ },
42
+ context: {
43
+ type: 'number',
44
+ description: 'Number of context lines to show before and after each match (like -C in grep)',
45
+ },
46
+ before_context: {
47
+ type: 'number',
48
+ description: 'Number of context lines to show before each match (like -B in grep)',
49
+ },
50
+ after_context: {
51
+ type: 'number',
52
+ description: 'Number of context lines to show after each match (like -A in grep)',
53
+ },
54
+ },
55
+ required: ['pattern'],
56
+ };
57
+ const MAX_MATCHES = 100;
58
+ const MAX_FILE_SIZE = 1024 * 1024; // 1MB
59
+ /**
60
+ * Simple glob matching function
61
+ * Supports: * (any chars), ? (single char), ** (recursive)
62
+ */
63
+ function matchGlob(filePath, pattern) {
64
+ const normalizedPath = filePath.replace(/\\/g, '/');
65
+ const normalizedPattern = pattern.replace(/\\/g, '/');
66
+ // Handle **/ prefix
67
+ if (normalizedPattern.startsWith('**/')) {
68
+ const restPattern = normalizedPattern.slice(3);
69
+ const parts = normalizedPath.split('/');
70
+ for (let i = 0; i < parts.length; i++) {
71
+ const subPath = parts.slice(i).join('/');
72
+ if (matchSimpleGlob(subPath, restPattern)) {
73
+ return true;
74
+ }
75
+ }
76
+ return false;
77
+ }
78
+ return matchSimpleGlob(normalizedPath, normalizedPattern);
79
+ }
80
+ function matchSimpleGlob(path, pattern) {
81
+ // Convert simple glob to regex
82
+ let regex = '';
83
+ for (let i = 0; i < pattern.length; i++) {
84
+ const c = pattern[i];
85
+ if (c === '*') {
86
+ regex += '.*';
87
+ }
88
+ else if (c === '?') {
89
+ regex += '.';
90
+ }
91
+ else if ('\\^$.|+()[]{}'.includes(c)) {
92
+ regex += '\\' + c;
93
+ }
94
+ else {
95
+ regex += c;
96
+ }
97
+ }
98
+ const re = new RegExp('^' + regex + '$');
99
+ return re.test(path);
100
+ }
101
+ /**
102
+ * Search a single file for pattern matches
103
+ */
104
+ function searchFile(filePath, regex, matches, maxMatches, beforeContext, afterContext) {
105
+ if (matches.length >= maxMatches) {
106
+ return;
107
+ }
108
+ try {
109
+ // Check file size
110
+ const stats = statSync(filePath);
111
+ if (stats.size > MAX_FILE_SIZE) {
112
+ return; // Skip large files
113
+ }
114
+ // Read file content
115
+ const content = readFileSync(filePath, 'utf-8');
116
+ // Check for binary content (null bytes)
117
+ if (content.includes('\x00')) {
118
+ return; // Skip binary files
119
+ }
120
+ const lines = content.split('\n');
121
+ if (regex.multiline) {
122
+ // Multiline mode: search entire content
123
+ const text = content;
124
+ let match;
125
+ regex.lastIndex = 0;
126
+ while ((match = regex.exec(text)) !== null && matches.length < maxMatches) {
127
+ // Find line number for the match
128
+ const linesBefore = text.slice(0, match.index).split('\n');
129
+ const lineNum = linesBefore.length;
130
+ const lineContent = linesBefore[linesBefore.length - 1] + text.slice(match.index).split('\n')[0];
131
+ const result = {
132
+ filePath,
133
+ line: lineNum,
134
+ content: lineContent.slice(0, 200), // Limit content length
135
+ };
136
+ // Add context if requested
137
+ if (beforeContext > 0) {
138
+ const startLine = Math.max(0, lineNum - beforeContext - 1);
139
+ result.context_before = lines.slice(startLine, lineNum - 1);
140
+ }
141
+ if (afterContext > 0) {
142
+ const endLine = Math.min(lines.length, lineNum + afterContext);
143
+ result.context_after = lines.slice(lineNum, endLine);
144
+ }
145
+ matches.push(result);
146
+ // Prevent infinite loop on zero-length matches
147
+ if (match[0].length === 0) {
148
+ regex.lastIndex++;
149
+ }
150
+ }
151
+ }
152
+ else {
153
+ // Line-by-line mode
154
+ for (let i = 0; i < lines.length && matches.length < maxMatches; i++) {
155
+ const line = lines[i];
156
+ regex.lastIndex = 0;
157
+ if (regex.test(line)) {
158
+ const result = {
159
+ filePath,
160
+ line: i + 1,
161
+ content: line.slice(0, 200), // Limit content length
162
+ };
163
+ // Add context if requested
164
+ if (beforeContext > 0) {
165
+ const startLine = Math.max(0, i - beforeContext);
166
+ result.context_before = lines.slice(startLine, i);
167
+ }
168
+ if (afterContext > 0) {
169
+ const endLine = Math.min(lines.length, i + 1 + afterContext);
170
+ result.context_after = lines.slice(i + 1, endLine);
171
+ }
172
+ matches.push(result);
173
+ }
174
+ }
175
+ }
176
+ }
177
+ catch (error) {
178
+ // Skip files we can't read
179
+ }
180
+ }
181
+ /**
182
+ * Recursively find and search files
183
+ */
184
+ function findAndSearch(dir, pattern, glob, regex, baseDir, matches, maxMatches, beforeContext, afterContext, visited = new Set()) {
185
+ if (matches.length >= maxMatches) {
186
+ return;
187
+ }
188
+ // Prevent infinite loops from symlinks
189
+ try {
190
+ const realPath = statSync(dir);
191
+ if (!realPath.isDirectory() || visited.has(dir)) {
192
+ return;
193
+ }
194
+ visited.add(dir);
195
+ }
196
+ catch {
197
+ return;
198
+ }
199
+ try {
200
+ const entries = readdirSync(dir);
201
+ for (const entry of entries) {
202
+ if (matches.length >= maxMatches) {
203
+ return;
204
+ }
205
+ const fullPath = join(dir, entry);
206
+ const relativePath = relative(baseDir, fullPath);
207
+ try {
208
+ const stats = statSync(fullPath);
209
+ if (stats.isDirectory()) {
210
+ // Recurse into subdirectories
211
+ findAndSearch(fullPath, pattern, glob, regex, baseDir, matches, maxMatches, beforeContext, afterContext, visited);
212
+ }
213
+ else if (stats.isFile()) {
214
+ // Check glob filter if specified
215
+ if (glob && !matchGlob(relativePath, glob)) {
216
+ continue;
217
+ }
218
+ // Search the file
219
+ searchFile(fullPath, regex, matches, maxMatches, beforeContext, afterContext);
220
+ }
221
+ }
222
+ catch {
223
+ // Skip entries we can't stat
224
+ }
225
+ }
226
+ }
227
+ catch {
228
+ // Skip directories we can't read
229
+ }
230
+ }
231
+ export class GrepTool {
232
+ name = 'Grep';
233
+ description = 'Search file contents using regular expressions. Returns matching lines with file path and line number. Supports glob filtering and multiline matching.';
234
+ parameters = parameters;
235
+ handler = async (input, context) => {
236
+ try {
237
+ // Resolve search directory
238
+ const searchDir = input.path
239
+ ? resolve(context.cwd, input.path)
240
+ : context.cwd;
241
+ if (!existsSync(searchDir)) {
242
+ return { error: `Path "${input.path}" does not exist` };
243
+ }
244
+ const stats = statSync(searchDir);
245
+ if (!stats.isDirectory()) {
246
+ return { error: `Path "${input.path}" is not a directory` };
247
+ }
248
+ // Validate pattern
249
+ if (!input.pattern || input.pattern.trim() === '') {
250
+ return { error: 'Pattern is required' };
251
+ }
252
+ // Create regex
253
+ let regex;
254
+ try {
255
+ const flags = `g${input.ignoreCase ? 'i' : ''}${input.multiline ? 'm' : ''}`;
256
+ regex = new RegExp(input.pattern, flags);
257
+ }
258
+ catch (error) {
259
+ const message = error instanceof Error ? error.message : String(error);
260
+ return { error: `Invalid regex pattern: ${message}` };
261
+ }
262
+ // Determine output mode
263
+ const outputMode = input.output_mode ?? 'content';
264
+ // Determine max matches (for content mode)
265
+ const maxMatches = input.head_limit ?? MAX_MATCHES;
266
+ // Determine context lines
267
+ const beforeContext = input.before_context ?? input.context ?? 0;
268
+ const afterContext = input.after_context ?? input.context ?? 0;
269
+ // Find and search files
270
+ const matches = [];
271
+ findAndSearch(searchDir, input.pattern, input.glob, regex, searchDir, matches, outputMode === 'content' ? maxMatches + (input.offset ?? 0) : Infinity, beforeContext, afterContext);
272
+ // Apply offset
273
+ const offset = input.offset ?? 0;
274
+ const offsetMatches = matches.slice(offset);
275
+ // Format output based on mode
276
+ switch (outputMode) {
277
+ case 'files_with_matches': {
278
+ const files = [...new Set(offsetMatches.map((m) => m.filePath))];
279
+ return { files };
280
+ }
281
+ case 'count': {
282
+ const fileCounts = {};
283
+ for (const match of offsetMatches) {
284
+ fileCounts[match.filePath] = (fileCounts[match.filePath] ?? 0) + 1;
285
+ }
286
+ return { fileCounts };
287
+ }
288
+ case 'content':
289
+ default: {
290
+ const limitedMatches = offsetMatches.slice(0, maxMatches);
291
+ return {
292
+ matches: limitedMatches.map((m) => ({
293
+ file: m.filePath,
294
+ line: m.line,
295
+ content: m.content,
296
+ context_before: m.context_before,
297
+ context_after: m.context_after,
298
+ })),
299
+ count: limitedMatches.length,
300
+ };
301
+ }
302
+ }
303
+ }
304
+ catch (error) {
305
+ const message = error instanceof Error ? error.message : String(error);
306
+ return { error: `Grep error: ${message}` };
307
+ }
308
+ };
309
+ }
310
+ // Export singleton instance
311
+ export const grepTool = new GrepTool();
312
+ //# sourceMappingURL=grep.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grep.js","sourceRoot":"","sources":["../../src/tools/grep.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * KillBash tool - Kill a background bash process
3
+ */
4
+ import type { Tool, ToolContext, JSONSchema } from '../types/tools';
5
+ export interface KillBashInput {
6
+ shellId: string;
7
+ }
8
+ export interface KillBashOutput {
9
+ success: boolean;
10
+ message: string;
11
+ }
12
+ export declare class KillBashTool implements Tool<KillBashInput, KillBashOutput> {
13
+ name: string;
14
+ description: string;
15
+ parameters: JSONSchema;
16
+ handler: (input: KillBashInput, _context: ToolContext) => Promise<KillBashOutput>;
17
+ }
18
+ export declare const killBashTool: KillBashTool;
19
+ //# sourceMappingURL=kill-bash.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kill-bash.d.ts","sourceRoot":"","sources":["../../src/tools/kill-bash.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAGpE,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAcD,qBAAa,YAAa,YAAW,IAAI,CAAC,aAAa,EAAE,cAAc,CAAC;IACtE,IAAI,SAAc;IAClB,WAAW,SAC4H;IACvI,UAAU,aAAc;IAExB,OAAO,GACL,OAAO,aAAa,EACpB,UAAU,WAAW,KACpB,OAAO,CAAC,cAAc,CAAC,CA+CxB;CACH;AAGD,eAAO,MAAM,YAAY,cAAqB,CAAC"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * KillBash tool - Kill a background bash process
3
+ */
4
+ import { backgroundProcesses } from './bash';
5
+ const parameters = {
6
+ type: 'object',
7
+ properties: {
8
+ shellId: {
9
+ type: 'string',
10
+ description: 'The shell ID returned by Bash tool when run_in_background is true',
11
+ },
12
+ },
13
+ required: ['shellId'],
14
+ };
15
+ export class KillBashTool {
16
+ name = 'KillBash';
17
+ description = 'Kill a background bash process started with run_in_background. Sends SIGTERM first, then SIGKILL after 5 seconds if still running.';
18
+ parameters = parameters;
19
+ handler = async (input, _context) => {
20
+ const { shellId } = input;
21
+ const bgProcess = backgroundProcesses.get(shellId);
22
+ if (!bgProcess) {
23
+ return {
24
+ success: false,
25
+ message: `No background process found with ID: ${shellId}`,
26
+ };
27
+ }
28
+ // Check if process has already exited
29
+ if (bgProcess.exitCode !== null) {
30
+ return {
31
+ success: true,
32
+ message: `Process ${shellId} already exited with code ${bgProcess.exitCode}`,
33
+ };
34
+ }
35
+ // Send SIGTERM
36
+ bgProcess.process.kill('SIGTERM');
37
+ // Wait up to 5 seconds for graceful exit, then SIGKILL
38
+ return new Promise((resolve) => {
39
+ const checkInterval = setInterval(() => {
40
+ if (bgProcess.exitCode !== null) {
41
+ clearInterval(checkInterval);
42
+ clearTimeout(forceKillTimeout);
43
+ resolve({
44
+ success: true,
45
+ message: `Process ${shellId} terminated with exit code ${bgProcess.exitCode}`,
46
+ });
47
+ }
48
+ }, 100);
49
+ const forceKillTimeout = setTimeout(() => {
50
+ clearInterval(checkInterval);
51
+ if (bgProcess.exitCode === null) {
52
+ bgProcess.process.kill('SIGKILL');
53
+ resolve({
54
+ success: true,
55
+ message: `Process ${shellId} force-killed with SIGKILL`,
56
+ });
57
+ }
58
+ }, 5000);
59
+ });
60
+ };
61
+ }
62
+ // Export singleton instance
63
+ export const killBashTool = new KillBashTool();
64
+ //# sourceMappingURL=kill-bash.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kill-bash.js","sourceRoot":"","sources":["../../src/tools/kill-bash.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,mBAAmB,EAAE,MAAM,QAAQ,CAAC;AAW7C,MAAM,UAAU,GAAe;IAC7B,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,OAAO,EAAE;YACP,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,mEAAmE;SACjF;KACF;IACD,QAAQ,EAAE,CAAC,SAAS,CAAC;CACtB,CAAC;AAGF,MAAM,OAAO,YAAY;IACvB,IAAI,GAAG,UAAU,CAAC;IAClB,WAAW,GACT,oIAAoI,CAAC;IACvI,UAAU,GAAG,UAAU,CAAC;IAExB,OAAO,GAAG,KAAK,EACb,KAAoB,EACpB,QAAqB,EACI,EAAE;QAC3B,MAAM,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;QAE1B,MAAM,SAAS,GAAG,mBAAmB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAEnD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,wCAAwC,OAAO,EAAE;aAC3D,CAAC;QACJ,CAAC;QAED,sCAAsC;QACtC,IAAI,SAAS,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;YAChC,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,WAAW,OAAO,6BAA6B,SAAS,CAAC,QAAQ,EAAE;aAC7E,CAAC;QACJ,CAAC;QAED,eAAe;QACf,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAElC,uDAAuD;QACvD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,MAAM,aAAa,GAAG,WAAW,CAAC,GAAG,EAAE;gBACrC,IAAI,SAAS,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;oBAChC,aAAa,CAAC,aAAa,CAAC,CAAC;oBAC7B,YAAY,CAAC,gBAAgB,CAAC,CAAC;oBAC/B,OAAO,CAAC;wBACN,OAAO,EAAE,IAAI;wBACb,OAAO,EAAE,WAAW,OAAO,8BAA8B,SAAS,CAAC,QAAQ,EAAE;qBAC9E,CAAC,CAAC;gBACL,CAAC;YACH,CAAC,EAAE,GAAG,CAAC,CAAC;YAER,MAAM,gBAAgB,GAAG,UAAU,CAAC,GAAG,EAAE;gBACvC,aAAa,CAAC,aAAa,CAAC,CAAC;gBAC7B,IAAI,SAAS,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;oBAChC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;oBAClC,OAAO,CAAC;wBACN,OAAO,EAAE,IAAI;wBACb,OAAO,EAAE,WAAW,OAAO,4BAA4B;qBACxD,CAAC,CAAC;gBACL,CAAC;YACH,CAAC,EAAE,IAAI,CAAC,CAAC;QACX,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;CACH;AAED,4BAA4B;AAC5B,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Read tool - Read file contents with support for text and images
3
+ */
4
+ import type { Tool, ToolContext, JSONSchema } from '../types/tools';
5
+ export interface ReadInput {
6
+ file_path: string;
7
+ offset?: number;
8
+ limit?: number;
9
+ }
10
+ export interface ReadOutput {
11
+ content?: string;
12
+ image?: string;
13
+ mime_type?: string;
14
+ file_size?: number;
15
+ total_lines?: number;
16
+ lines_returned?: number;
17
+ error?: string;
18
+ }
19
+ export declare class ReadTool implements Tool<ReadInput, ReadOutput> {
20
+ name: string;
21
+ description: string;
22
+ parameters: JSONSchema;
23
+ handler: (input: ReadInput, context: ToolContext) => Promise<ReadOutput>;
24
+ }
25
+ export declare const readTool: ReadTool;
26
+ //# sourceMappingURL=read.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read.d.ts","sourceRoot":"","sources":["../../src/tools/read.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEpE,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAsCD,qBAAa,QAAS,YAAW,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC;IAC1D,IAAI,SAAU;IACd,WAAW,SACkH;IAC7H,UAAU,aAAc;IAExB,OAAO,GACL,OAAO,SAAS,EAChB,SAAS,WAAW,KACnB,OAAO,CAAC,UAAU,CAAC,CA6CpB;CACH;AAGD,eAAO,MAAM,QAAQ,UAAiB,CAAC"}
@@ -0,0 +1,87 @@
1
+ /**
2
+ * Read tool - Read file contents with support for text and images
3
+ */
4
+ import { readFileSync, existsSync, statSync } 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 read',
12
+ },
13
+ offset: {
14
+ type: 'number',
15
+ description: 'Starting line number (1-indexed)',
16
+ },
17
+ limit: {
18
+ type: 'number',
19
+ description: 'Maximum number of lines to read',
20
+ },
21
+ },
22
+ required: ['file_path'],
23
+ };
24
+ const IMAGE_EXTENSIONS = ['.png', '.jpg', '.jpeg', '.gif', '.webp', '.bmp'];
25
+ function isImageFile(filePath) {
26
+ const lower = filePath.toLowerCase();
27
+ return IMAGE_EXTENSIONS.some((ext) => lower.endsWith(ext));
28
+ }
29
+ function getMimeType(filePath) {
30
+ const lower = filePath.toLowerCase();
31
+ if (lower.endsWith('.png'))
32
+ return 'image/png';
33
+ if (lower.endsWith('.jpg') || lower.endsWith('.jpeg'))
34
+ return 'image/jpeg';
35
+ if (lower.endsWith('.gif'))
36
+ return 'image/gif';
37
+ if (lower.endsWith('.webp'))
38
+ return 'image/webp';
39
+ if (lower.endsWith('.bmp'))
40
+ return 'image/bmp';
41
+ return 'application/octet-stream';
42
+ }
43
+ export class ReadTool {
44
+ name = 'Read';
45
+ description = 'Read the contents of a file. For text files, returns content with line numbers. For images, returns base64-encoded data.';
46
+ parameters = parameters;
47
+ handler = async (input, context) => {
48
+ const filePath = resolve(context.cwd, input.file_path);
49
+ if (!existsSync(filePath)) {
50
+ return { error: `File "${input.file_path}" does not exist` };
51
+ }
52
+ const stats = statSync(filePath);
53
+ if (stats.isDirectory()) {
54
+ return { error: `"${input.file_path}" is a directory, not a file` };
55
+ }
56
+ // Handle image files
57
+ if (isImageFile(filePath)) {
58
+ const data = readFileSync(filePath);
59
+ return {
60
+ image: data.toString('base64'),
61
+ mime_type: getMimeType(filePath),
62
+ file_size: stats.size,
63
+ };
64
+ }
65
+ // Handle text files
66
+ const content = readFileSync(filePath, 'utf-8');
67
+ const lines = content.split('\n');
68
+ const totalLines = lines.length;
69
+ // Apply offset and limit
70
+ const offset = input.offset ?? 1;
71
+ const limit = input.limit ?? totalLines;
72
+ const startIndex = Math.max(0, offset - 1);
73
+ const endIndex = Math.min(startIndex + limit, totalLines);
74
+ const selectedLines = lines.slice(startIndex, endIndex);
75
+ const numberedContent = selectedLines
76
+ .map((line, idx) => `${startIndex + idx + 1}\t${line}`)
77
+ .join('\n');
78
+ return {
79
+ content: numberedContent,
80
+ total_lines: totalLines,
81
+ lines_returned: selectedLines.length,
82
+ };
83
+ };
84
+ }
85
+ // Export singleton instance
86
+ export const readTool = new ReadTool();
87
+ //# sourceMappingURL=read.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read.js","sourceRoot":"","sources":["../../src/tools/read.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Tool registry - manages available tools
3
+ */
4
+ import type { Tool, ToolDefinition } from '../types/tools';
5
+ export declare class ToolRegistry {
6
+ private tools;
7
+ register(tool: Tool<any, any>): void;
8
+ unregister(name: string): boolean;
9
+ get(name: string): Tool<any, any> | undefined;
10
+ has(name: string): boolean;
11
+ getAll(): Tool<any, any>[];
12
+ getDefinitions(): ToolDefinition[];
13
+ getAllowedTools(allowedTools?: string[]): Tool<any, any>[];
14
+ }
15
+ export declare function createDefaultRegistry(): ToolRegistry;
16
+ export declare const defaultToolRegistry: ToolRegistry;
17
+ export { readTool, ReadTool } from './read';
18
+ export { writeTool, WriteTool } from './write';
19
+ export { editTool, EditTool } from './edit';
20
+ export { bashTool, BashTool } from './bash';
21
+ export { globTool, GlobTool } from './glob';
22
+ export { grepTool, GrepTool } from './grep';
23
+ export { taskListTool, TaskListTool } from './task-list';
24
+ export { taskCreateTool, TaskCreateTool } from './task-create';
25
+ export { taskGetTool, TaskGetTool } from './task-get';
26
+ export { taskUpdateTool, TaskUpdateTool } from './task-update';
27
+ export { webSearchTool, WebSearchTool } from './web-search';
28
+ export { webFetchTool, WebFetchTool } from './web-fetch';
29
+ export { bashOutputTool, BashOutputTool } from './bash-output';
30
+ export { killBashTool, KillBashTool } from './kill-bash';
31
+ export { askUserQuestionTool, AskUserQuestionTool } from './ask-user-question';
32
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/tools/registry.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAgB3D,qBAAa,YAAY;IACvB,OAAO,CAAC,KAAK,CAAqC;IAElD,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI;IAIpC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIjC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,SAAS;IAI7C,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1B,MAAM,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE;IAI1B,cAAc,IAAI,cAAc,EAAE;IAWlC,eAAe,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE;CAQ3D;AAGD,wBAAgB,qBAAqB,IAAI,YAAY,CAiBpD;AAGD,eAAO,MAAM,mBAAmB,cAA0B,CAAC;AAG3D,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC"}