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.
- package/LICENSE +21 -0
- package/README.md +284 -0
- package/README.zh.md +285 -0
- package/dist/agent/agent-definition.d.ts +107 -0
- package/dist/agent/agent-definition.d.ts.map +1 -0
- package/dist/agent/agent-definition.js +90 -0
- package/dist/agent/agent-definition.js.map +1 -0
- package/dist/agent/react-loop.d.ts +117 -0
- package/dist/agent/react-loop.d.ts.map +1 -0
- package/dist/agent/react-loop.js +674 -0
- package/dist/agent/react-loop.js.map +1 -0
- package/dist/agent/subagent-runner.d.ts +67 -0
- package/dist/agent/subagent-runner.d.ts.map +1 -0
- package/dist/agent/subagent-runner.js +168 -0
- package/dist/agent/subagent-runner.js.map +1 -0
- package/dist/hooks/index.d.ts +8 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +9 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/inputs.d.ts +56 -0
- package/dist/hooks/inputs.d.ts.map +1 -0
- package/dist/hooks/inputs.js +150 -0
- package/dist/hooks/inputs.js.map +1 -0
- package/dist/hooks/manager.d.ts +63 -0
- package/dist/hooks/manager.d.ts.map +1 -0
- package/dist/hooks/manager.js +137 -0
- package/dist/hooks/manager.js.map +1 -0
- package/dist/hooks/types.d.ts +191 -0
- package/dist/hooks/types.d.ts.map +1 -0
- package/dist/hooks/types.js +6 -0
- package/dist/hooks/types.js.map +1 -0
- package/dist/index.d.ts +109 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +218 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/errors.d.ts +26 -0
- package/dist/mcp/errors.d.ts.map +1 -0
- package/dist/mcp/errors.js +43 -0
- package/dist/mcp/errors.js.map +1 -0
- package/dist/mcp/index.d.ts +11 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +13 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/manager.d.ts +50 -0
- package/dist/mcp/manager.d.ts.map +1 -0
- package/dist/mcp/manager.js +170 -0
- package/dist/mcp/manager.js.map +1 -0
- package/dist/mcp/server-registry.d.ts +48 -0
- package/dist/mcp/server-registry.d.ts.map +1 -0
- package/dist/mcp/server-registry.js +121 -0
- package/dist/mcp/server-registry.js.map +1 -0
- package/dist/mcp/tool-adapter.d.ts +42 -0
- package/dist/mcp/tool-adapter.d.ts.map +1 -0
- package/dist/mcp/tool-adapter.js +89 -0
- package/dist/mcp/tool-adapter.js.map +1 -0
- package/dist/mcp/types.d.ts +74 -0
- package/dist/mcp/types.d.ts.map +1 -0
- package/dist/mcp/types.js +21 -0
- package/dist/mcp/types.js.map +1 -0
- package/dist/permissions/index.d.ts +3 -0
- package/dist/permissions/index.d.ts.map +1 -0
- package/dist/permissions/index.js +4 -0
- package/dist/permissions/index.js.map +1 -0
- package/dist/permissions/manager.d.ts +40 -0
- package/dist/permissions/manager.d.ts.map +1 -0
- package/dist/permissions/manager.js +115 -0
- package/dist/permissions/manager.js.map +1 -0
- package/dist/permissions/types.d.ts +124 -0
- package/dist/permissions/types.d.ts.map +1 -0
- package/dist/permissions/types.js +25 -0
- package/dist/permissions/types.js.map +1 -0
- package/dist/providers/anthropic.d.ts +18 -0
- package/dist/providers/anthropic.d.ts.map +1 -0
- package/dist/providers/anthropic.js +126 -0
- package/dist/providers/anthropic.js.map +1 -0
- package/dist/providers/base.d.ts +85 -0
- package/dist/providers/base.d.ts.map +1 -0
- package/dist/providers/base.js +36 -0
- package/dist/providers/base.js.map +1 -0
- package/dist/providers/google.d.ts +12 -0
- package/dist/providers/google.d.ts.map +1 -0
- package/dist/providers/google.js +123 -0
- package/dist/providers/google.js.map +1 -0
- package/dist/providers/openai.d.ts +12 -0
- package/dist/providers/openai.d.ts.map +1 -0
- package/dist/providers/openai.js +110 -0
- package/dist/providers/openai.js.map +1 -0
- package/dist/session/factory.d.ts +156 -0
- package/dist/session/factory.d.ts.map +1 -0
- package/dist/session/factory.js +311 -0
- package/dist/session/factory.js.map +1 -0
- package/dist/session/index.d.ts +8 -0
- package/dist/session/index.d.ts.map +1 -0
- package/dist/session/index.js +7 -0
- package/dist/session/index.js.map +1 -0
- package/dist/session/session.d.ts +144 -0
- package/dist/session/session.d.ts.map +1 -0
- package/dist/session/session.js +319 -0
- package/dist/session/session.js.map +1 -0
- package/dist/session/storage.d.ts +105 -0
- package/dist/session/storage.d.ts.map +1 -0
- package/dist/session/storage.js +148 -0
- package/dist/session/storage.js.map +1 -0
- package/dist/tools/ask-user-question.d.ts +31 -0
- package/dist/tools/ask-user-question.d.ts.map +1 -0
- package/dist/tools/ask-user-question.js +66 -0
- package/dist/tools/ask-user-question.js.map +1 -0
- package/dist/tools/bash-output.d.ts +22 -0
- package/dist/tools/bash-output.d.ts.map +1 -0
- package/dist/tools/bash-output.js +43 -0
- package/dist/tools/bash-output.js.map +1 -0
- package/dist/tools/bash.d.ts +36 -0
- package/dist/tools/bash.d.ts.map +1 -0
- package/dist/tools/bash.js +161 -0
- package/dist/tools/bash.js.map +1 -0
- package/dist/tools/edit.d.ts +24 -0
- package/dist/tools/edit.d.ts.map +1 -0
- package/dist/tools/edit.js +83 -0
- package/dist/tools/edit.js.map +1 -0
- package/dist/tools/glob.d.ts +22 -0
- package/dist/tools/glob.d.ts.map +1 -0
- package/dist/tools/glob.js +248 -0
- package/dist/tools/glob.js.map +1 -0
- package/dist/tools/grep.d.ts +39 -0
- package/dist/tools/grep.d.ts.map +1 -0
- package/dist/tools/grep.js +312 -0
- package/dist/tools/grep.js.map +1 -0
- package/dist/tools/kill-bash.d.ts +19 -0
- package/dist/tools/kill-bash.d.ts.map +1 -0
- package/dist/tools/kill-bash.js +64 -0
- package/dist/tools/kill-bash.js.map +1 -0
- package/dist/tools/read.d.ts +26 -0
- package/dist/tools/read.d.ts.map +1 -0
- package/dist/tools/read.js +87 -0
- package/dist/tools/read.js.map +1 -0
- package/dist/tools/registry.d.ts +32 -0
- package/dist/tools/registry.d.ts.map +1 -0
- package/dist/tools/registry.js +91 -0
- package/dist/tools/registry.js.map +1 -0
- package/dist/tools/task-create.d.ts +22 -0
- package/dist/tools/task-create.d.ts.map +1 -0
- package/dist/tools/task-create.js +42 -0
- package/dist/tools/task-create.js.map +1 -0
- package/dist/tools/task-get.d.ts +19 -0
- package/dist/tools/task-get.d.ts.map +1 -0
- package/dist/tools/task-get.js +38 -0
- package/dist/tools/task-get.js.map +1 -0
- package/dist/tools/task-list.d.ts +18 -0
- package/dist/tools/task-list.d.ts.map +1 -0
- package/dist/tools/task-list.js +27 -0
- package/dist/tools/task-list.js.map +1 -0
- package/dist/tools/task-storage.d.ts +6 -0
- package/dist/tools/task-storage.d.ts.map +1 -0
- package/dist/tools/task-storage.js +83 -0
- package/dist/tools/task-storage.js.map +1 -0
- package/dist/tools/task-update.d.ts +28 -0
- package/dist/tools/task-update.d.ts.map +1 -0
- package/dist/tools/task-update.js +118 -0
- package/dist/tools/task-update.js.map +1 -0
- package/dist/tools/task.d.ts +80 -0
- package/dist/tools/task.d.ts.map +1 -0
- package/dist/tools/task.js +99 -0
- package/dist/tools/task.js.map +1 -0
- package/dist/tools/web-fetch.d.ts +21 -0
- package/dist/tools/web-fetch.d.ts.map +1 -0
- package/dist/tools/web-fetch.js +124 -0
- package/dist/tools/web-fetch.js.map +1 -0
- package/dist/tools/web-search.d.ts +20 -0
- package/dist/tools/web-search.d.ts.map +1 -0
- package/dist/tools/web-search.js +127 -0
- package/dist/tools/web-search.js.map +1 -0
- package/dist/tools/write.d.ts +22 -0
- package/dist/tools/write.d.ts.map +1 -0
- package/dist/tools/write.js +46 -0
- package/dist/tools/write.js.map +1 -0
- package/dist/types/messages.d.ts +138 -0
- package/dist/types/messages.d.ts.map +1 -0
- package/dist/types/messages.js +88 -0
- package/dist/types/messages.js.map +1 -0
- package/dist/types/task.d.ts +29 -0
- package/dist/types/task.d.ts.map +1 -0
- package/dist/types/task.js +5 -0
- package/dist/types/task.js.map +1 -0
- package/dist/types/tools.d.ts +56 -0
- package/dist/types/tools.d.ts.map +1 -0
- package/dist/types/tools.js +25 -0
- package/dist/types/tools.js.map +1 -0
- package/dist/utils/logger.d.ts +19 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +46 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/uuid.d.ts +3 -0
- package/dist/utils/uuid.d.ts.map +1 -0
- package/dist/utils/uuid.js +5 -0
- package/dist/utils/uuid.js.map +1 -0
- 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"}
|