@oflow-ai/core 0.1.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 (59) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +81 -0
  3. package/dist/agents/index.d.ts +35 -0
  4. package/dist/agents/index.js +233 -0
  5. package/dist/ai/chinese-provider.d.ts +146 -0
  6. package/dist/ai/chinese-provider.js +193 -0
  7. package/dist/ai/custom-provider.d.ts +11 -0
  8. package/dist/ai/custom-provider.js +113 -0
  9. package/dist/ai/index.d.ts +7 -0
  10. package/dist/ai/index.js +42 -0
  11. package/dist/ai/openai-provider.d.ts +18 -0
  12. package/dist/ai/openai-provider.js +161 -0
  13. package/dist/config/index.d.ts +20 -0
  14. package/dist/config/index.js +83 -0
  15. package/dist/conversation.d.ts +26 -0
  16. package/dist/conversation.js +126 -0
  17. package/dist/index.d.ts +10 -0
  18. package/dist/index.js +72 -0
  19. package/dist/mcp/index.d.ts +48 -0
  20. package/dist/mcp/index.js +175 -0
  21. package/dist/sandbox/index.d.ts +31 -0
  22. package/dist/sandbox/index.js +197 -0
  23. package/dist/skills/index.d.ts +16 -0
  24. package/dist/skills/index.js +169 -0
  25. package/dist/tools/ask-user-question.d.ts +62 -0
  26. package/dist/tools/ask-user-question.js +71 -0
  27. package/dist/tools/base.d.ts +16 -0
  28. package/dist/tools/base.js +39 -0
  29. package/dist/tools/glob.d.ts +27 -0
  30. package/dist/tools/glob.js +125 -0
  31. package/dist/tools/image-read.d.ts +42 -0
  32. package/dist/tools/image-read.js +125 -0
  33. package/dist/tools/index.d.ts +27 -0
  34. package/dist/tools/index.js +127 -0
  35. package/dist/tools/list-directory.d.ts +28 -0
  36. package/dist/tools/list-directory.js +94 -0
  37. package/dist/tools/pdf-extract.d.ts +32 -0
  38. package/dist/tools/pdf-extract.js +130 -0
  39. package/dist/tools/read-file.d.ts +31 -0
  40. package/dist/tools/read-file.js +116 -0
  41. package/dist/tools/replace.d.ts +35 -0
  42. package/dist/tools/replace.js +93 -0
  43. package/dist/tools/run-shell-command.d.ts +35 -0
  44. package/dist/tools/run-shell-command.js +81 -0
  45. package/dist/tools/save-memory.d.ts +22 -0
  46. package/dist/tools/save-memory.js +91 -0
  47. package/dist/tools/search-file-content.d.ts +42 -0
  48. package/dist/tools/search-file-content.js +153 -0
  49. package/dist/tools/task.d.ts +46 -0
  50. package/dist/tools/task.js +54 -0
  51. package/dist/tools/web-fetch.d.ts +26 -0
  52. package/dist/tools/web-fetch.js +81 -0
  53. package/dist/tools/web-search.d.ts +35 -0
  54. package/dist/tools/web-search.js +86 -0
  55. package/dist/tools/write-file.d.ts +25 -0
  56. package/dist/tools/write-file.js +76 -0
  57. package/dist/types/index.d.ts +166 -0
  58. package/dist/types/index.js +43 -0
  59. package/package.json +54 -0
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BaseTool = void 0;
4
+ exports.createToolResult = createToolResult;
5
+ exports.formatToolError = formatToolError;
6
+ class BaseTool {
7
+ getDefinition() {
8
+ return {
9
+ type: 'function',
10
+ function: {
11
+ name: this.name,
12
+ description: this.description,
13
+ parameters: this.parameters
14
+ }
15
+ };
16
+ }
17
+ validateRequired(params, required) {
18
+ for (const key of required) {
19
+ if (params[key] === undefined) {
20
+ throw new Error(`Missing required parameter: ${key}`);
21
+ }
22
+ }
23
+ }
24
+ }
25
+ exports.BaseTool = BaseTool;
26
+ function createToolResult(toolCallId, content, isError = false) {
27
+ return {
28
+ toolCallId,
29
+ content,
30
+ isError
31
+ };
32
+ }
33
+ function formatToolError(error) {
34
+ if (error instanceof Error) {
35
+ return `Error: ${error.message}`;
36
+ }
37
+ return `Error: ${String(error)}`;
38
+ }
39
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90b29scy9iYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQXNDQSw0Q0FVQztBQUVELDBDQUtDO0FBL0NELE1BQXNCLFFBQVE7SUFLNUIsYUFBYTtRQUNYLE9BQU87WUFDTCxJQUFJLEVBQUUsVUFBVTtZQUNoQixRQUFRLEVBQUU7Z0JBQ1IsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO2dCQUNmLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztnQkFDN0IsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO2FBQzVCO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFPUyxnQkFBZ0IsQ0FBQyxNQUFlLEVBQUUsUUFBa0I7UUFDNUQsS0FBSyxNQUFNLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUMzQixJQUFJLE1BQU0sQ0FBQyxHQUFvQixDQUFDLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQy9DLE1BQU0sSUFBSSxLQUFLLENBQUMsK0JBQStCLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDeEQsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUE1QkQsNEJBNEJDO0FBRUQsU0FBZ0IsZ0JBQWdCLENBQzlCLFVBQWtCLEVBQ2xCLE9BQWUsRUFDZixPQUFPLEdBQUcsS0FBSztJQUVmLE9BQU87UUFDTCxVQUFVO1FBQ1YsT0FBTztRQUNQLE9BQU87S0FDUixDQUFDO0FBQ0osQ0FBQztBQUVELFNBQWdCLGVBQWUsQ0FBQyxLQUFjO0lBQzVDLElBQUksS0FBSyxZQUFZLEtBQUssRUFBRSxDQUFDO1FBQzNCLE9BQU8sVUFBVSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUNELE9BQU8sVUFBVSxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztBQUNuQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVG9vbERlZmluaXRpb24sIFRvb2xSZXN1bHQgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVG9vbEV4ZWN1dGVPcHRpb25zIHtcbiAgd29ya2luZ0RpcmVjdG9yeT86IHN0cmluZztcbiAgdGltZW91dD86IG51bWJlcjtcbiAgc2FuZGJveD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlVG9vbDxUUGFyYW1zID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4+IHtcbiAgYWJzdHJhY3QgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICBhYnN0cmFjdCByZWFkb25seSBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICBhYnN0cmFjdCByZWFkb25seSBwYXJhbWV0ZXJzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICBnZXREZWZpbml0aW9uKCk6IFRvb2xEZWZpbml0aW9uIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ2Z1bmN0aW9uJyxcbiAgICAgIGZ1bmN0aW9uOiB7XG4gICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgZGVzY3JpcHRpb246IHRoaXMuZGVzY3JpcHRpb24sXG4gICAgICAgIHBhcmFtZXRlcnM6IHRoaXMucGFyYW1ldGVyc1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBhYnN0cmFjdCBleGVjdXRlKFxuICAgIHBhcmFtczogVFBhcmFtcyxcbiAgICBvcHRpb25zPzogVG9vbEV4ZWN1dGVPcHRpb25zXG4gICk6IFByb21pc2U8c3RyaW5nPjtcblxuICBwcm90ZWN0ZWQgdmFsaWRhdGVSZXF1aXJlZChwYXJhbXM6IFRQYXJhbXMsIHJlcXVpcmVkOiBzdHJpbmdbXSk6IHZvaWQge1xuICAgIGZvciAoY29uc3Qga2V5IG9mIHJlcXVpcmVkKSB7XG4gICAgICBpZiAocGFyYW1zW2tleSBhcyBrZXlvZiBUUGFyYW1zXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyByZXF1aXJlZCBwYXJhbWV0ZXI6ICR7a2V5fWApO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVG9vbFJlc3VsdChcbiAgdG9vbENhbGxJZDogc3RyaW5nLFxuICBjb250ZW50OiBzdHJpbmcsXG4gIGlzRXJyb3IgPSBmYWxzZVxuKTogVG9vbFJlc3VsdCB7XG4gIHJldHVybiB7XG4gICAgdG9vbENhbGxJZCxcbiAgICBjb250ZW50LFxuICAgIGlzRXJyb3JcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFRvb2xFcnJvcihlcnJvcjogdW5rbm93bik6IHN0cmluZyB7XG4gIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgcmV0dXJuIGBFcnJvcjogJHtlcnJvci5tZXNzYWdlfWA7XG4gIH1cbiAgcmV0dXJuIGBFcnJvcjogJHtTdHJpbmcoZXJyb3IpfWA7XG59XG4iXX0=
@@ -0,0 +1,27 @@
1
+ import { BaseTool, ToolExecuteOptions } from './base';
2
+ interface GlobParams {
3
+ pattern: string;
4
+ path?: string;
5
+ }
6
+ export declare class GlobTool extends BaseTool<GlobParams> {
7
+ name: string;
8
+ description: string;
9
+ parameters: {
10
+ type: string;
11
+ properties: {
12
+ pattern: {
13
+ type: string;
14
+ description: string;
15
+ };
16
+ path: {
17
+ type: string;
18
+ description: string;
19
+ };
20
+ };
21
+ required: string[];
22
+ };
23
+ execute(params: GlobParams, options?: ToolExecuteOptions): Promise<string>;
24
+ private walkDir;
25
+ private matchPattern;
26
+ }
27
+ export {};
@@ -0,0 +1,125 @@
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.GlobTool = void 0;
37
+ const base_1 = require("./base");
38
+ const fs = __importStar(require("fs/promises"));
39
+ const path = __importStar(require("path"));
40
+ class GlobTool extends base_1.BaseTool {
41
+ name = 'glob';
42
+ description = 'Finds files matching specific glob patterns, returning absolute paths sorted by modification time.';
43
+ parameters = {
44
+ type: 'object',
45
+ properties: {
46
+ pattern: {
47
+ type: 'string',
48
+ description: 'The glob pattern to match (e.g., **/*.ts, src/**/*.js)'
49
+ },
50
+ path: {
51
+ type: 'string',
52
+ description: 'Optional: The absolute path to search within'
53
+ }
54
+ },
55
+ required: ['pattern']
56
+ };
57
+ async execute(params, options) {
58
+ this.validateRequired(params, ['pattern']);
59
+ const workingDir = options?.workingDirectory || process.cwd();
60
+ const searchPath = params.path || workingDir;
61
+ try {
62
+ const results = [];
63
+ await this.walkDir(searchPath, params.pattern, results);
64
+ if (results.length === 0) {
65
+ return `No files found matching pattern: ${params.pattern}`;
66
+ }
67
+ // Sort by modification time (newest first)
68
+ const withStats = await Promise.all(results.map(async (file) => {
69
+ try {
70
+ const stat = await fs.stat(file);
71
+ return { file, mtime: stat.mtime.getTime() };
72
+ }
73
+ catch {
74
+ return { file, mtime: 0 };
75
+ }
76
+ }));
77
+ withStats.sort((a, b) => b.mtime - a.mtime);
78
+ return `Found ${withStats.length} files:\n\n${withStats.map(r => r.file).join('\n')}`;
79
+ }
80
+ catch (error) {
81
+ return (0, base_1.formatToolError)(error);
82
+ }
83
+ }
84
+ async walkDir(dir, pattern, results) {
85
+ const entries = await fs.readdir(dir, { withFileTypes: true });
86
+ for (const entry of entries) {
87
+ const fullPath = path.join(dir, entry.name);
88
+ if (entry.isDirectory()) {
89
+ // Skip common ignored directories
90
+ if (['node_modules', '.git', 'dist', 'build', '.next'].includes(entry.name)) {
91
+ continue;
92
+ }
93
+ await this.walkDir(fullPath, pattern, results);
94
+ }
95
+ else if (entry.isFile()) {
96
+ if (this.matchPattern(fullPath, pattern)) {
97
+ results.push(fullPath);
98
+ }
99
+ }
100
+ }
101
+ }
102
+ matchPattern(filePath, pattern) {
103
+ // Simple glob matching
104
+ const fileName = path.basename(filePath);
105
+ // Handle **/*.ext pattern
106
+ if (pattern.startsWith('**/*.')) {
107
+ const ext = pattern.slice(4);
108
+ return fileName.endsWith(ext);
109
+ }
110
+ // Handle *.ext pattern
111
+ if (pattern.startsWith('*.')) {
112
+ const ext = pattern.slice(1);
113
+ return fileName.endsWith(ext);
114
+ }
115
+ // Handle **/name pattern
116
+ if (pattern.startsWith('**/')) {
117
+ const name = pattern.slice(3);
118
+ return fileName.includes(name);
119
+ }
120
+ // Direct match
121
+ return fileName.includes(pattern);
122
+ }
123
+ }
124
+ exports.GlobTool = GlobTool;
125
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2xvYi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90b29scy9nbG9iLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGlDQUF1RTtBQUN2RSxnREFBa0M7QUFDbEMsMkNBQTZCO0FBTzdCLE1BQWEsUUFBUyxTQUFRLGVBQW9CO0lBQ2hELElBQUksR0FBRyxNQUFNLENBQUM7SUFDZCxXQUFXLEdBQUcsb0dBQW9HLENBQUM7SUFDbkgsVUFBVSxHQUFHO1FBQ1gsSUFBSSxFQUFFLFFBQVE7UUFDZCxVQUFVLEVBQUU7WUFDVixPQUFPLEVBQUU7Z0JBQ1AsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsV0FBVyxFQUFFLHdEQUF3RDthQUN0RTtZQUNELElBQUksRUFBRTtnQkFDSixJQUFJLEVBQUUsUUFBUTtnQkFDZCxXQUFXLEVBQUUsOENBQThDO2FBQzVEO1NBQ0Y7UUFDRCxRQUFRLEVBQUUsQ0FBQyxTQUFTLENBQUM7S0FDdEIsQ0FBQztJQUVGLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBa0IsRUFBRSxPQUE0QjtRQUM1RCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUUzQyxNQUFNLFVBQVUsR0FBRyxPQUFPLEVBQUUsZ0JBQWdCLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzlELE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxJQUFJLElBQUksVUFBVSxDQUFDO1FBRTdDLElBQUksQ0FBQztZQUNILE1BQU0sT0FBTyxHQUFhLEVBQUUsQ0FBQztZQUM3QixNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFFeEQsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUN6QixPQUFPLG9DQUFvQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDOUQsQ0FBQztZQUVELDJDQUEyQztZQUMzQyxNQUFNLFNBQVMsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQ2pDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFO2dCQUN6QixJQUFJLENBQUM7b0JBQ0gsTUFBTSxJQUFJLEdBQUcsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUNqQyxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7Z0JBQy9DLENBQUM7Z0JBQUMsTUFBTSxDQUFDO29CQUNQLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO2dCQUM1QixDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQ0gsQ0FBQztZQUVGLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUU1QyxPQUFPLFNBQVMsU0FBUyxDQUFDLE1BQU0sY0FBYyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ3hGLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsT0FBTyxJQUFBLHNCQUFlLEVBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEMsQ0FBQztJQUNILENBQUM7SUFFTyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQVcsRUFBRSxPQUFlLEVBQUUsT0FBaUI7UUFDbkUsTUFBTSxPQUFPLEdBQUcsTUFBTSxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRS9ELEtBQUssTUFBTSxLQUFLLElBQUksT0FBTyxFQUFFLENBQUM7WUFDNUIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRTVDLElBQUksS0FBSyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7Z0JBQ3hCLGtDQUFrQztnQkFDbEMsSUFBSSxDQUFDLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7b0JBQzVFLFNBQVM7Z0JBQ1gsQ0FBQztnQkFDRCxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztZQUNqRCxDQUFDO2lCQUFNLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7Z0JBQzFCLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQztvQkFDekMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDekIsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVPLFlBQVksQ0FBQyxRQUFnQixFQUFFLE9BQWU7UUFDcEQsdUJBQXVCO1FBQ3ZCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFekMsMEJBQTBCO1FBQzFCLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ2hDLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDN0IsT0FBTyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2hDLENBQUM7UUFFRCx1QkFBdUI7UUFDdkIsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDN0IsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM3QixPQUFPLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDaEMsQ0FBQztRQUVELHlCQUF5QjtRQUN6QixJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUM5QixNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzlCLE9BQU8sUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqQyxDQUFDO1FBRUQsZUFBZTtRQUNmLE9BQU8sUUFBUSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNwQyxDQUFDO0NBQ0Y7QUFqR0QsNEJBaUdDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmFzZVRvb2wsIFRvb2xFeGVjdXRlT3B0aW9ucywgZm9ybWF0VG9vbEVycm9yIH0gZnJvbSAnLi9iYXNlJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzL3Byb21pc2VzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5cbmludGVyZmFjZSBHbG9iUGFyYW1zIHtcbiAgcGF0dGVybjogc3RyaW5nO1xuICBwYXRoPzogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgR2xvYlRvb2wgZXh0ZW5kcyBCYXNlVG9vbDxHbG9iUGFyYW1zPiB7XG4gIG5hbWUgPSAnZ2xvYic7XG4gIGRlc2NyaXB0aW9uID0gJ0ZpbmRzIGZpbGVzIG1hdGNoaW5nIHNwZWNpZmljIGdsb2IgcGF0dGVybnMsIHJldHVybmluZyBhYnNvbHV0ZSBwYXRocyBzb3J0ZWQgYnkgbW9kaWZpY2F0aW9uIHRpbWUuJztcbiAgcGFyYW1ldGVycyA9IHtcbiAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICBwYXR0ZXJuOiB7XG4gICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ1RoZSBnbG9iIHBhdHRlcm4gdG8gbWF0Y2ggKGUuZy4sICoqLyoudHMsIHNyYy8qKi8qLmpzKSdcbiAgICAgIH0sXG4gICAgICBwYXRoOiB7XG4gICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ09wdGlvbmFsOiBUaGUgYWJzb2x1dGUgcGF0aCB0byBzZWFyY2ggd2l0aGluJ1xuICAgICAgfVxuICAgIH0sXG4gICAgcmVxdWlyZWQ6IFsncGF0dGVybiddXG4gIH07XG5cbiAgYXN5bmMgZXhlY3V0ZShwYXJhbXM6IEdsb2JQYXJhbXMsIG9wdGlvbnM/OiBUb29sRXhlY3V0ZU9wdGlvbnMpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHRoaXMudmFsaWRhdGVSZXF1aXJlZChwYXJhbXMsIFsncGF0dGVybiddKTtcblxuICAgIGNvbnN0IHdvcmtpbmdEaXIgPSBvcHRpb25zPy53b3JraW5nRGlyZWN0b3J5IHx8IHByb2Nlc3MuY3dkKCk7XG4gICAgY29uc3Qgc2VhcmNoUGF0aCA9IHBhcmFtcy5wYXRoIHx8IHdvcmtpbmdEaXI7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0czogc3RyaW5nW10gPSBbXTtcbiAgICAgIGF3YWl0IHRoaXMud2Fsa0RpcihzZWFyY2hQYXRoLCBwYXJhbXMucGF0dGVybiwgcmVzdWx0cyk7XG5cbiAgICAgIGlmIChyZXN1bHRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gYE5vIGZpbGVzIGZvdW5kIG1hdGNoaW5nIHBhdHRlcm46ICR7cGFyYW1zLnBhdHRlcm59YDtcbiAgICAgIH1cblxuICAgICAgLy8gU29ydCBieSBtb2RpZmljYXRpb24gdGltZSAobmV3ZXN0IGZpcnN0KVxuICAgICAgY29uc3Qgd2l0aFN0YXRzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIHJlc3VsdHMubWFwKGFzeW5jIChmaWxlKSA9PiB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXQgPSBhd2FpdCBmcy5zdGF0KGZpbGUpO1xuICAgICAgICAgICAgcmV0dXJuIHsgZmlsZSwgbXRpbWU6IHN0YXQubXRpbWUuZ2V0VGltZSgpIH07XG4gICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICByZXR1cm4geyBmaWxlLCBtdGltZTogMCB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICk7XG5cbiAgICAgIHdpdGhTdGF0cy5zb3J0KChhLCBiKSA9PiBiLm10aW1lIC0gYS5tdGltZSk7XG5cbiAgICAgIHJldHVybiBgRm91bmQgJHt3aXRoU3RhdHMubGVuZ3RofSBmaWxlczpcXG5cXG4ke3dpdGhTdGF0cy5tYXAociA9PiByLmZpbGUpLmpvaW4oJ1xcbicpfWA7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiBmb3JtYXRUb29sRXJyb3IoZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgd2Fsa0RpcihkaXI6IHN0cmluZywgcGF0dGVybjogc3RyaW5nLCByZXN1bHRzOiBzdHJpbmdbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGVudHJpZXMgPSBhd2FpdCBmcy5yZWFkZGlyKGRpciwgeyB3aXRoRmlsZVR5cGVzOiB0cnVlIH0pO1xuXG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgICBjb25zdCBmdWxsUGF0aCA9IHBhdGguam9pbihkaXIsIGVudHJ5Lm5hbWUpO1xuXG4gICAgICBpZiAoZW50cnkuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICAvLyBTa2lwIGNvbW1vbiBpZ25vcmVkIGRpcmVjdG9yaWVzXG4gICAgICAgIGlmIChbJ25vZGVfbW9kdWxlcycsICcuZ2l0JywgJ2Rpc3QnLCAnYnVpbGQnLCAnLm5leHQnXS5pbmNsdWRlcyhlbnRyeS5uYW1lKSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHRoaXMud2Fsa0RpcihmdWxsUGF0aCwgcGF0dGVybiwgcmVzdWx0cyk7XG4gICAgICB9IGVsc2UgaWYgKGVudHJ5LmlzRmlsZSgpKSB7XG4gICAgICAgIGlmICh0aGlzLm1hdGNoUGF0dGVybihmdWxsUGF0aCwgcGF0dGVybikpIHtcbiAgICAgICAgICByZXN1bHRzLnB1c2goZnVsbFBhdGgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtYXRjaFBhdHRlcm4oZmlsZVBhdGg6IHN0cmluZywgcGF0dGVybjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgLy8gU2ltcGxlIGdsb2IgbWF0Y2hpbmdcbiAgICBjb25zdCBmaWxlTmFtZSA9IHBhdGguYmFzZW5hbWUoZmlsZVBhdGgpO1xuICAgIFxuICAgIC8vIEhhbmRsZSAqKi8qLmV4dCBwYXR0ZXJuXG4gICAgaWYgKHBhdHRlcm4uc3RhcnRzV2l0aCgnKiovKi4nKSkge1xuICAgICAgY29uc3QgZXh0ID0gcGF0dGVybi5zbGljZSg0KTtcbiAgICAgIHJldHVybiBmaWxlTmFtZS5lbmRzV2l0aChleHQpO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSAqLmV4dCBwYXR0ZXJuXG4gICAgaWYgKHBhdHRlcm4uc3RhcnRzV2l0aCgnKi4nKSkge1xuICAgICAgY29uc3QgZXh0ID0gcGF0dGVybi5zbGljZSgxKTtcbiAgICAgIHJldHVybiBmaWxlTmFtZS5lbmRzV2l0aChleHQpO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSAqKi9uYW1lIHBhdHRlcm5cbiAgICBpZiAocGF0dGVybi5zdGFydHNXaXRoKCcqKi8nKSkge1xuICAgICAgY29uc3QgbmFtZSA9IHBhdHRlcm4uc2xpY2UoMyk7XG4gICAgICByZXR1cm4gZmlsZU5hbWUuaW5jbHVkZXMobmFtZSk7XG4gICAgfVxuXG4gICAgLy8gRGlyZWN0IG1hdGNoXG4gICAgcmV0dXJuIGZpbGVOYW1lLmluY2x1ZGVzKHBhdHRlcm4pO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,42 @@
1
+ import { BaseTool, ToolExecuteOptions } from './base';
2
+ interface ImageReadParams {
3
+ image_input: string;
4
+ prompt?: string;
5
+ input_type?: 'file_path' | 'base64';
6
+ mime_type?: string;
7
+ task_brief?: string;
8
+ }
9
+ export declare class ImageReadTool extends BaseTool<ImageReadParams> {
10
+ name: string;
11
+ description: string;
12
+ parameters: {
13
+ type: string;
14
+ properties: {
15
+ image_input: {
16
+ type: string;
17
+ description: string;
18
+ };
19
+ prompt: {
20
+ type: string;
21
+ description: string;
22
+ };
23
+ input_type: {
24
+ type: string;
25
+ enum: string[];
26
+ description: string;
27
+ };
28
+ mime_type: {
29
+ type: string;
30
+ description: string;
31
+ };
32
+ task_brief: {
33
+ type: string;
34
+ description: string;
35
+ };
36
+ };
37
+ required: string[];
38
+ };
39
+ execute(params: ImageReadParams, options?: ToolExecuteOptions): Promise<string>;
40
+ private detectMimeType;
41
+ }
42
+ export {};
@@ -0,0 +1,125 @@
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.ImageReadTool = void 0;
37
+ const base_1 = require("./base");
38
+ const fs = __importStar(require("fs/promises"));
39
+ const path = __importStar(require("path"));
40
+ class ImageReadTool extends base_1.BaseTool {
41
+ name = 'image_read';
42
+ description = 'Reads image files and generates detailed contextual analysis using VL models. The tool accepts prompt information to create targeted image descriptions.';
43
+ parameters = {
44
+ type: 'object',
45
+ properties: {
46
+ image_input: {
47
+ type: 'string',
48
+ description: 'Image input: either absolute file path or base64 encoded image data'
49
+ },
50
+ prompt: {
51
+ type: 'string',
52
+ description: 'A comprehensive instruction for the VL model'
53
+ },
54
+ input_type: {
55
+ type: 'string',
56
+ enum: ['file_path', 'base64'],
57
+ description: 'Input type: file_path or base64'
58
+ },
59
+ mime_type: {
60
+ type: 'string',
61
+ description: 'Optional image MIME type when input_type is base64'
62
+ },
63
+ task_brief: {
64
+ type: 'string',
65
+ description: 'Brief task description'
66
+ }
67
+ },
68
+ required: ['image_input']
69
+ };
70
+ async execute(params, options) {
71
+ this.validateRequired(params, ['image_input']);
72
+ const workingDir = options?.workingDirectory || process.cwd();
73
+ const inputType = params.input_type || 'file_path';
74
+ try {
75
+ let imageData;
76
+ let mimeType = params.mime_type || 'image/png';
77
+ if (inputType === 'file_path') {
78
+ const filePath = path.isAbsolute(params.image_input)
79
+ ? params.image_input
80
+ : path.join(workingDir, params.image_input);
81
+ // 检查文件是否存在
82
+ const stats = await fs.stat(filePath);
83
+ if (!stats.isFile()) {
84
+ return `Error: ${filePath} is not a file`;
85
+ }
86
+ // 读取文件并转为base64
87
+ const buffer = await fs.readFile(filePath);
88
+ imageData = buffer.toString('base64');
89
+ // 检测MIME类型
90
+ mimeType = this.detectMimeType(filePath);
91
+ }
92
+ else {
93
+ imageData = params.image_input;
94
+ }
95
+ // 由于我们没有实际的VL模型,返回图片信息
96
+ const prompt = params.prompt || 'Describe this image';
97
+ return `Image Analysis Request:
98
+ - MIME Type: ${mimeType}
99
+ - Data Length: ${imageData.length} characters (base64)
100
+ - Prompt: ${prompt}
101
+
102
+ Note: To enable actual image analysis, configure a vision-capable AI model in settings.
103
+ The image has been loaded and is ready for analysis.`;
104
+ }
105
+ catch (error) {
106
+ return (0, base_1.formatToolError)(error);
107
+ }
108
+ }
109
+ detectMimeType(filePath) {
110
+ const ext = path.extname(filePath).toLowerCase();
111
+ const mimeTypes = {
112
+ '.png': 'image/png',
113
+ '.jpg': 'image/jpeg',
114
+ '.jpeg': 'image/jpeg',
115
+ '.gif': 'image/gif',
116
+ '.webp': 'image/webp',
117
+ '.svg': 'image/svg+xml',
118
+ '.bmp': 'image/bmp',
119
+ '.ico': 'image/x-icon'
120
+ };
121
+ return mimeTypes[ext] || 'application/octet-stream';
122
+ }
123
+ }
124
+ exports.ImageReadTool = ImageReadTool;
125
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UtcmVhZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90b29scy9pbWFnZS1yZWFkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGlDQUF1RTtBQUN2RSxnREFBa0M7QUFDbEMsMkNBQTZCO0FBVTdCLE1BQWEsYUFBYyxTQUFRLGVBQXlCO0lBQzFELElBQUksR0FBRyxZQUFZLENBQUM7SUFDcEIsV0FBVyxHQUFHLDBKQUEwSixDQUFDO0lBQ3pLLFVBQVUsR0FBRztRQUNYLElBQUksRUFBRSxRQUFRO1FBQ2QsVUFBVSxFQUFFO1lBQ1YsV0FBVyxFQUFFO2dCQUNYLElBQUksRUFBRSxRQUFRO2dCQUNkLFdBQVcsRUFBRSxxRUFBcUU7YUFDbkY7WUFDRCxNQUFNLEVBQUU7Z0JBQ04sSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsV0FBVyxFQUFFLDhDQUE4QzthQUM1RDtZQUNELFVBQVUsRUFBRTtnQkFDVixJQUFJLEVBQUUsUUFBUTtnQkFDZCxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDO2dCQUM3QixXQUFXLEVBQUUsaUNBQWlDO2FBQy9DO1lBQ0QsU0FBUyxFQUFFO2dCQUNULElBQUksRUFBRSxRQUFRO2dCQUNkLFdBQVcsRUFBRSxvREFBb0Q7YUFDbEU7WUFDRCxVQUFVLEVBQUU7Z0JBQ1YsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsV0FBVyxFQUFFLHdCQUF3QjthQUN0QztTQUNGO1FBQ0QsUUFBUSxFQUFFLENBQUMsYUFBYSxDQUFDO0tBQzFCLENBQUM7SUFFRixLQUFLLENBQUMsT0FBTyxDQUFDLE1BQXVCLEVBQUUsT0FBNEI7UUFDakUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7UUFFL0MsTUFBTSxVQUFVLEdBQUcsT0FBTyxFQUFFLGdCQUFnQixJQUFJLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUM5RCxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsVUFBVSxJQUFJLFdBQVcsQ0FBQztRQUVuRCxJQUFJLENBQUM7WUFDSCxJQUFJLFNBQWlCLENBQUM7WUFDdEIsSUFBSSxRQUFRLEdBQUcsTUFBTSxDQUFDLFNBQVMsSUFBSSxXQUFXLENBQUM7WUFFL0MsSUFBSSxTQUFTLEtBQUssV0FBVyxFQUFFLENBQUM7Z0JBQzlCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQztvQkFDbEQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXO29CQUNwQixDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUU5QyxXQUFXO2dCQUNYLE1BQU0sS0FBSyxHQUFHLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDdEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO29CQUNwQixPQUFPLFVBQVUsUUFBUSxnQkFBZ0IsQ0FBQztnQkFDNUMsQ0FBQztnQkFFRCxnQkFBZ0I7Z0JBQ2hCLE1BQU0sTUFBTSxHQUFHLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDM0MsU0FBUyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBRXRDLFdBQVc7Z0JBQ1gsUUFBUSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDM0MsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLFNBQVMsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDO1lBQ2pDLENBQUM7WUFFRCx1QkFBdUI7WUFDdkIsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sSUFBSSxxQkFBcUIsQ0FBQztZQUV0RCxPQUFPO2VBQ0UsUUFBUTtpQkFDTixTQUFTLENBQUMsTUFBTTtZQUNyQixNQUFNOzs7cURBR21DLENBQUM7UUFFbEQsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixPQUFPLElBQUEsc0JBQWUsRUFBQyxLQUFLLENBQUMsQ0FBQztRQUNoQyxDQUFDO0lBQ0gsQ0FBQztJQUVPLGNBQWMsQ0FBQyxRQUFnQjtRQUNyQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2pELE1BQU0sU0FBUyxHQUEyQjtZQUN4QyxNQUFNLEVBQUUsV0FBVztZQUNuQixNQUFNLEVBQUUsWUFBWTtZQUNwQixPQUFPLEVBQUUsWUFBWTtZQUNyQixNQUFNLEVBQUUsV0FBVztZQUNuQixPQUFPLEVBQUUsWUFBWTtZQUNyQixNQUFNLEVBQUUsZUFBZTtZQUN2QixNQUFNLEVBQUUsV0FBVztZQUNuQixNQUFNLEVBQUUsY0FBYztTQUN2QixDQUFDO1FBQ0YsT0FBTyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksMEJBQTBCLENBQUM7SUFDdEQsQ0FBQztDQUNGO0FBNUZELHNDQTRGQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VUb29sLCBUb29sRXhlY3V0ZU9wdGlvbnMsIGZvcm1hdFRvb2xFcnJvciB9IGZyb20gJy4vYmFzZSc7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcy9wcm9taXNlcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuXG5pbnRlcmZhY2UgSW1hZ2VSZWFkUGFyYW1zIHtcbiAgaW1hZ2VfaW5wdXQ6IHN0cmluZztcbiAgcHJvbXB0Pzogc3RyaW5nO1xuICBpbnB1dF90eXBlPzogJ2ZpbGVfcGF0aCcgfCAnYmFzZTY0JztcbiAgbWltZV90eXBlPzogc3RyaW5nO1xuICB0YXNrX2JyaWVmPzogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgSW1hZ2VSZWFkVG9vbCBleHRlbmRzIEJhc2VUb29sPEltYWdlUmVhZFBhcmFtcz4ge1xuICBuYW1lID0gJ2ltYWdlX3JlYWQnO1xuICBkZXNjcmlwdGlvbiA9ICdSZWFkcyBpbWFnZSBmaWxlcyBhbmQgZ2VuZXJhdGVzIGRldGFpbGVkIGNvbnRleHR1YWwgYW5hbHlzaXMgdXNpbmcgVkwgbW9kZWxzLiBUaGUgdG9vbCBhY2NlcHRzIHByb21wdCBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGFyZ2V0ZWQgaW1hZ2UgZGVzY3JpcHRpb25zLic7XG4gIHBhcmFtZXRlcnMgPSB7XG4gICAgdHlwZTogJ29iamVjdCcsXG4gICAgcHJvcGVydGllczoge1xuICAgICAgaW1hZ2VfaW5wdXQ6IHtcbiAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnSW1hZ2UgaW5wdXQ6IGVpdGhlciBhYnNvbHV0ZSBmaWxlIHBhdGggb3IgYmFzZTY0IGVuY29kZWQgaW1hZ2UgZGF0YSdcbiAgICAgIH0sXG4gICAgICBwcm9tcHQ6IHtcbiAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnQSBjb21wcmVoZW5zaXZlIGluc3RydWN0aW9uIGZvciB0aGUgVkwgbW9kZWwnXG4gICAgICB9LFxuICAgICAgaW5wdXRfdHlwZToge1xuICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgZW51bTogWydmaWxlX3BhdGgnLCAnYmFzZTY0J10sXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnSW5wdXQgdHlwZTogZmlsZV9wYXRoIG9yIGJhc2U2NCdcbiAgICAgIH0sXG4gICAgICBtaW1lX3R5cGU6IHtcbiAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnT3B0aW9uYWwgaW1hZ2UgTUlNRSB0eXBlIHdoZW4gaW5wdXRfdHlwZSBpcyBiYXNlNjQnXG4gICAgICB9LFxuICAgICAgdGFza19icmllZjoge1xuICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdCcmllZiB0YXNrIGRlc2NyaXB0aW9uJ1xuICAgICAgfVxuICAgIH0sXG4gICAgcmVxdWlyZWQ6IFsnaW1hZ2VfaW5wdXQnXVxuICB9O1xuXG4gIGFzeW5jIGV4ZWN1dGUocGFyYW1zOiBJbWFnZVJlYWRQYXJhbXMsIG9wdGlvbnM/OiBUb29sRXhlY3V0ZU9wdGlvbnMpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHRoaXMudmFsaWRhdGVSZXF1aXJlZChwYXJhbXMsIFsnaW1hZ2VfaW5wdXQnXSk7XG5cbiAgICBjb25zdCB3b3JraW5nRGlyID0gb3B0aW9ucz8ud29ya2luZ0RpcmVjdG9yeSB8fCBwcm9jZXNzLmN3ZCgpO1xuICAgIGNvbnN0IGlucHV0VHlwZSA9IHBhcmFtcy5pbnB1dF90eXBlIHx8ICdmaWxlX3BhdGgnO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCBpbWFnZURhdGE6IHN0cmluZztcbiAgICAgIGxldCBtaW1lVHlwZSA9IHBhcmFtcy5taW1lX3R5cGUgfHwgJ2ltYWdlL3BuZyc7XG5cbiAgICAgIGlmIChpbnB1dFR5cGUgPT09ICdmaWxlX3BhdGgnKSB7XG4gICAgICAgIGNvbnN0IGZpbGVQYXRoID0gcGF0aC5pc0Fic29sdXRlKHBhcmFtcy5pbWFnZV9pbnB1dCkgXG4gICAgICAgICAgPyBwYXJhbXMuaW1hZ2VfaW5wdXQgXG4gICAgICAgICAgOiBwYXRoLmpvaW4od29ya2luZ0RpciwgcGFyYW1zLmltYWdlX2lucHV0KTtcbiAgICAgICAgXG4gICAgICAgIC8vIOajgOafpeaWh+S7tuaYr+WQpuWtmOWcqFxuICAgICAgICBjb25zdCBzdGF0cyA9IGF3YWl0IGZzLnN0YXQoZmlsZVBhdGgpO1xuICAgICAgICBpZiAoIXN0YXRzLmlzRmlsZSgpKSB7XG4gICAgICAgICAgcmV0dXJuIGBFcnJvcjogJHtmaWxlUGF0aH0gaXMgbm90IGEgZmlsZWA7XG4gICAgICAgIH1cblxuICAgICAgICAvLyDor7vlj5bmlofku7blubbovazkuLpiYXNlNjRcbiAgICAgICAgY29uc3QgYnVmZmVyID0gYXdhaXQgZnMucmVhZEZpbGUoZmlsZVBhdGgpO1xuICAgICAgICBpbWFnZURhdGEgPSBidWZmZXIudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuXG4gICAgICAgIC8vIOajgOa1i01JTUXnsbvlnotcbiAgICAgICAgbWltZVR5cGUgPSB0aGlzLmRldGVjdE1pbWVUeXBlKGZpbGVQYXRoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGltYWdlRGF0YSA9IHBhcmFtcy5pbWFnZV9pbnB1dDtcbiAgICAgIH1cblxuICAgICAgLy8g55Sx5LqO5oiR5Lus5rKh5pyJ5a6e6ZmF55qEVkzmqKHlnovvvIzov5Tlm57lm77niYfkv6Hmga9cbiAgICAgIGNvbnN0IHByb21wdCA9IHBhcmFtcy5wcm9tcHQgfHwgJ0Rlc2NyaWJlIHRoaXMgaW1hZ2UnO1xuICAgICAgXG4gICAgICByZXR1cm4gYEltYWdlIEFuYWx5c2lzIFJlcXVlc3Q6XG4tIE1JTUUgVHlwZTogJHttaW1lVHlwZX1cbi0gRGF0YSBMZW5ndGg6ICR7aW1hZ2VEYXRhLmxlbmd0aH0gY2hhcmFjdGVycyAoYmFzZTY0KVxuLSBQcm9tcHQ6ICR7cHJvbXB0fVxuXG5Ob3RlOiBUbyBlbmFibGUgYWN0dWFsIGltYWdlIGFuYWx5c2lzLCBjb25maWd1cmUgYSB2aXNpb24tY2FwYWJsZSBBSSBtb2RlbCBpbiBzZXR0aW5ncy5cblRoZSBpbWFnZSBoYXMgYmVlbiBsb2FkZWQgYW5kIGlzIHJlYWR5IGZvciBhbmFseXNpcy5gO1xuXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiBmb3JtYXRUb29sRXJyb3IoZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZGV0ZWN0TWltZVR5cGUoZmlsZVBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgZXh0ID0gcGF0aC5leHRuYW1lKGZpbGVQYXRoKS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IG1pbWVUeXBlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgICcucG5nJzogJ2ltYWdlL3BuZycsXG4gICAgICAnLmpwZyc6ICdpbWFnZS9qcGVnJyxcbiAgICAgICcuanBlZyc6ICdpbWFnZS9qcGVnJyxcbiAgICAgICcuZ2lmJzogJ2ltYWdlL2dpZicsXG4gICAgICAnLndlYnAnOiAnaW1hZ2Uvd2VicCcsXG4gICAgICAnLnN2Zyc6ICdpbWFnZS9zdmcreG1sJyxcbiAgICAgICcuYm1wJzogJ2ltYWdlL2JtcCcsXG4gICAgICAnLmljbyc6ICdpbWFnZS94LWljb24nXG4gICAgfTtcbiAgICByZXR1cm4gbWltZVR5cGVzW2V4dF0gfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSc7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,27 @@
1
+ import { BaseTool, ToolExecuteOptions } from './base';
2
+ import { ToolDefinition, ToolResult, ToolCall } from '../types';
3
+ export * from './base';
4
+ export * from './read-file';
5
+ export * from './write-file';
6
+ export * from './list-directory';
7
+ export * from './glob';
8
+ export * from './search-file-content';
9
+ export * from './run-shell-command';
10
+ export * from './web-search';
11
+ export * from './web-fetch';
12
+ export * from './replace';
13
+ export * from './image-read';
14
+ export * from './pdf-extract';
15
+ export * from './ask-user-question';
16
+ export * from './task';
17
+ export * from './save-memory';
18
+ export declare class ToolRegistry {
19
+ private tools;
20
+ constructor();
21
+ register(tool: BaseTool<any>): void;
22
+ get(name: string): BaseTool<any> | undefined;
23
+ getAll(): BaseTool<any>[];
24
+ getDefinitions(): ToolDefinition[];
25
+ execute(toolCall: ToolCall, options?: ToolExecuteOptions): Promise<ToolResult>;
26
+ }
27
+ export declare function getToolRegistry(): ToolRegistry;
@@ -0,0 +1,127 @@
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.ToolRegistry = void 0;
18
+ exports.getToolRegistry = getToolRegistry;
19
+ const read_file_1 = require("./read-file");
20
+ const write_file_1 = require("./write-file");
21
+ const list_directory_1 = require("./list-directory");
22
+ const glob_1 = require("./glob");
23
+ const search_file_content_1 = require("./search-file-content");
24
+ const run_shell_command_1 = require("./run-shell-command");
25
+ const web_search_1 = require("./web-search");
26
+ const web_fetch_1 = require("./web-fetch");
27
+ const replace_1 = require("./replace");
28
+ const image_read_1 = require("./image-read");
29
+ const pdf_extract_1 = require("./pdf-extract");
30
+ const ask_user_question_1 = require("./ask-user-question");
31
+ const task_1 = require("./task");
32
+ const save_memory_1 = require("./save-memory");
33
+ // Export all tools
34
+ __exportStar(require("./base"), exports);
35
+ __exportStar(require("./read-file"), exports);
36
+ __exportStar(require("./write-file"), exports);
37
+ __exportStar(require("./list-directory"), exports);
38
+ __exportStar(require("./glob"), exports);
39
+ __exportStar(require("./search-file-content"), exports);
40
+ __exportStar(require("./run-shell-command"), exports);
41
+ __exportStar(require("./web-search"), exports);
42
+ __exportStar(require("./web-fetch"), exports);
43
+ __exportStar(require("./replace"), exports);
44
+ __exportStar(require("./image-read"), exports);
45
+ __exportStar(require("./pdf-extract"), exports);
46
+ __exportStar(require("./ask-user-question"), exports);
47
+ __exportStar(require("./task"), exports);
48
+ __exportStar(require("./save-memory"), exports);
49
+ // Core tools list
50
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
51
+ const coreTools = [
52
+ new read_file_1.ReadFileTool(),
53
+ new write_file_1.WriteFileTool(),
54
+ new list_directory_1.ListDirectoryTool(),
55
+ new glob_1.GlobTool(),
56
+ new search_file_content_1.SearchFileContentTool(),
57
+ new run_shell_command_1.RunShellCommandTool(),
58
+ new web_search_1.WebSearchTool(),
59
+ new web_fetch_1.WebFetchTool(),
60
+ new replace_1.ReplaceTool(),
61
+ new image_read_1.ImageReadTool(),
62
+ new pdf_extract_1.PDFExtractTool(),
63
+ new ask_user_question_1.AskUserQuestionTool(),
64
+ new task_1.TaskTool(),
65
+ new save_memory_1.SaveMemoryTool()
66
+ ];
67
+ class ToolRegistry {
68
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
69
+ tools = new Map();
70
+ constructor() {
71
+ // Register core tools
72
+ for (const tool of coreTools) {
73
+ this.register(tool);
74
+ }
75
+ }
76
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
77
+ register(tool) {
78
+ this.tools.set(tool.name, tool);
79
+ }
80
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
81
+ get(name) {
82
+ return this.tools.get(name);
83
+ }
84
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
85
+ getAll() {
86
+ return Array.from(this.tools.values());
87
+ }
88
+ getDefinitions() {
89
+ return this.getAll().map(tool => tool.getDefinition());
90
+ }
91
+ async execute(toolCall, options) {
92
+ const tool = this.get(toolCall.function.name);
93
+ if (!tool) {
94
+ return {
95
+ toolCallId: toolCall.id,
96
+ content: `Error: Unknown tool: ${toolCall.function.name}`,
97
+ isError: true
98
+ };
99
+ }
100
+ try {
101
+ const params = JSON.parse(toolCall.function.arguments);
102
+ const result = await tool.execute(params, options);
103
+ return {
104
+ toolCallId: toolCall.id,
105
+ content: result,
106
+ isError: false
107
+ };
108
+ }
109
+ catch (error) {
110
+ return {
111
+ toolCallId: toolCall.id,
112
+ content: error instanceof Error ? error.message : String(error),
113
+ isError: true
114
+ };
115
+ }
116
+ }
117
+ }
118
+ exports.ToolRegistry = ToolRegistry;
119
+ // Singleton instance
120
+ let toolRegistry = null;
121
+ function getToolRegistry() {
122
+ if (!toolRegistry) {
123
+ toolRegistry = new ToolRegistry();
124
+ }
125
+ return toolRegistry;
126
+ }
127
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdG9vbHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF1SEEsMENBS0M7QUEzSEQsMkNBQTJDO0FBQzNDLDZDQUE2QztBQUM3QyxxREFBcUQ7QUFDckQsaUNBQWtDO0FBQ2xDLCtEQUE4RDtBQUM5RCwyREFBMEQ7QUFDMUQsNkNBQTZDO0FBQzdDLDJDQUEyQztBQUMzQyx1Q0FBd0M7QUFDeEMsNkNBQTZDO0FBQzdDLCtDQUErQztBQUMvQywyREFBMEQ7QUFDMUQsaUNBQWtDO0FBQ2xDLCtDQUErQztBQUcvQyxtQkFBbUI7QUFDbkIseUNBQXVCO0FBQ3ZCLDhDQUE0QjtBQUM1QiwrQ0FBNkI7QUFDN0IsbURBQWlDO0FBQ2pDLHlDQUF1QjtBQUN2Qix3REFBc0M7QUFDdEMsc0RBQW9DO0FBQ3BDLCtDQUE2QjtBQUM3Qiw4Q0FBNEI7QUFDNUIsNENBQTBCO0FBQzFCLCtDQUE2QjtBQUM3QixnREFBOEI7QUFDOUIsc0RBQW9DO0FBQ3BDLHlDQUF1QjtBQUN2QixnREFBOEI7QUFFOUIsa0JBQWtCO0FBQ2xCLDhEQUE4RDtBQUM5RCxNQUFNLFNBQVMsR0FBb0I7SUFDakMsSUFBSSx3QkFBWSxFQUFFO0lBQ2xCLElBQUksMEJBQWEsRUFBRTtJQUNuQixJQUFJLGtDQUFpQixFQUFFO0lBQ3ZCLElBQUksZUFBUSxFQUFFO0lBQ2QsSUFBSSwyQ0FBcUIsRUFBRTtJQUMzQixJQUFJLHVDQUFtQixFQUFFO0lBQ3pCLElBQUksMEJBQWEsRUFBRTtJQUNuQixJQUFJLHdCQUFZLEVBQUU7SUFDbEIsSUFBSSxxQkFBVyxFQUFFO0lBQ2pCLElBQUksMEJBQWEsRUFBRTtJQUNuQixJQUFJLDRCQUFjLEVBQUU7SUFDcEIsSUFBSSx1Q0FBbUIsRUFBRTtJQUN6QixJQUFJLGVBQVEsRUFBRTtJQUNkLElBQUksNEJBQWMsRUFBRTtDQUNyQixDQUFDO0FBRUYsTUFBYSxZQUFZO0lBQ3ZCLDhEQUE4RDtJQUN0RCxLQUFLLEdBQStCLElBQUksR0FBRyxFQUFFLENBQUM7SUFFdEQ7UUFDRSxzQkFBc0I7UUFDdEIsS0FBSyxNQUFNLElBQUksSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUM3QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RCLENBQUM7SUFDSCxDQUFDO0lBRUQsOERBQThEO0lBQzlELFFBQVEsQ0FBQyxJQUFtQjtRQUMxQixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCw4REFBOEQ7SUFDOUQsR0FBRyxDQUFDLElBQVk7UUFDZCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRCw4REFBOEQ7SUFDOUQsTUFBTTtRQUNKLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVELGNBQWM7UUFDWixPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRUQsS0FBSyxDQUFDLE9BQU8sQ0FDWCxRQUFrQixFQUNsQixPQUE0QjtRQUU1QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFOUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ1YsT0FBTztnQkFDTCxVQUFVLEVBQUUsUUFBUSxDQUFDLEVBQUU7Z0JBQ3ZCLE9BQU8sRUFBRSx3QkFBd0IsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUU7Z0JBQ3pELE9BQU8sRUFBRSxJQUFJO2FBQ2QsQ0FBQztRQUNKLENBQUM7UUFFRCxJQUFJLENBQUM7WUFDSCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDdkQsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztZQUVuRCxPQUFPO2dCQUNMLFVBQVUsRUFBRSxRQUFRLENBQUMsRUFBRTtnQkFDdkIsT0FBTyxFQUFFLE1BQU07Z0JBQ2YsT0FBTyxFQUFFLEtBQUs7YUFDZixDQUFDO1FBQ0osQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixPQUFPO2dCQUNMLFVBQVUsRUFBRSxRQUFRLENBQUMsRUFBRTtnQkFDdkIsT0FBTyxFQUFFLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7Z0JBQy9ELE9BQU8sRUFBRSxJQUFJO2FBQ2QsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUE3REQsb0NBNkRDO0FBRUQscUJBQXFCO0FBQ3JCLElBQUksWUFBWSxHQUF3QixJQUFJLENBQUM7QUFFN0MsU0FBZ0IsZUFBZTtJQUM3QixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDbEIsWUFBWSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7SUFDcEMsQ0FBQztJQUNELE9BQU8sWUFBWSxDQUFDO0FBQ3RCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlVG9vbCwgVG9vbEV4ZWN1dGVPcHRpb25zIH0gZnJvbSAnLi9iYXNlJztcbmltcG9ydCB7IFJlYWRGaWxlVG9vbCB9IGZyb20gJy4vcmVhZC1maWxlJztcbmltcG9ydCB7IFdyaXRlRmlsZVRvb2wgfSBmcm9tICcuL3dyaXRlLWZpbGUnO1xuaW1wb3J0IHsgTGlzdERpcmVjdG9yeVRvb2wgfSBmcm9tICcuL2xpc3QtZGlyZWN0b3J5JztcbmltcG9ydCB7IEdsb2JUb29sIH0gZnJvbSAnLi9nbG9iJztcbmltcG9ydCB7IFNlYXJjaEZpbGVDb250ZW50VG9vbCB9IGZyb20gJy4vc2VhcmNoLWZpbGUtY29udGVudCc7XG5pbXBvcnQgeyBSdW5TaGVsbENvbW1hbmRUb29sIH0gZnJvbSAnLi9ydW4tc2hlbGwtY29tbWFuZCc7XG5pbXBvcnQgeyBXZWJTZWFyY2hUb29sIH0gZnJvbSAnLi93ZWItc2VhcmNoJztcbmltcG9ydCB7IFdlYkZldGNoVG9vbCB9IGZyb20gJy4vd2ViLWZldGNoJztcbmltcG9ydCB7IFJlcGxhY2VUb29sIH0gZnJvbSAnLi9yZXBsYWNlJztcbmltcG9ydCB7IEltYWdlUmVhZFRvb2wgfSBmcm9tICcuL2ltYWdlLXJlYWQnO1xuaW1wb3J0IHsgUERGRXh0cmFjdFRvb2wgfSBmcm9tICcuL3BkZi1leHRyYWN0JztcbmltcG9ydCB7IEFza1VzZXJRdWVzdGlvblRvb2wgfSBmcm9tICcuL2Fzay11c2VyLXF1ZXN0aW9uJztcbmltcG9ydCB7IFRhc2tUb29sIH0gZnJvbSAnLi90YXNrJztcbmltcG9ydCB7IFNhdmVNZW1vcnlUb29sIH0gZnJvbSAnLi9zYXZlLW1lbW9yeSc7XG5pbXBvcnQgeyBUb29sRGVmaW5pdGlvbiwgVG9vbFJlc3VsdCwgVG9vbENhbGwgfSBmcm9tICcuLi90eXBlcyc7XG5cbi8vIEV4cG9ydCBhbGwgdG9vbHNcbmV4cG9ydCAqIGZyb20gJy4vYmFzZSc7XG5leHBvcnQgKiBmcm9tICcuL3JlYWQtZmlsZSc7XG5leHBvcnQgKiBmcm9tICcuL3dyaXRlLWZpbGUnO1xuZXhwb3J0ICogZnJvbSAnLi9saXN0LWRpcmVjdG9yeSc7XG5leHBvcnQgKiBmcm9tICcuL2dsb2InO1xuZXhwb3J0ICogZnJvbSAnLi9zZWFyY2gtZmlsZS1jb250ZW50JztcbmV4cG9ydCAqIGZyb20gJy4vcnVuLXNoZWxsLWNvbW1hbmQnO1xuZXhwb3J0ICogZnJvbSAnLi93ZWItc2VhcmNoJztcbmV4cG9ydCAqIGZyb20gJy4vd2ViLWZldGNoJztcbmV4cG9ydCAqIGZyb20gJy4vcmVwbGFjZSc7XG5leHBvcnQgKiBmcm9tICcuL2ltYWdlLXJlYWQnO1xuZXhwb3J0ICogZnJvbSAnLi9wZGYtZXh0cmFjdCc7XG5leHBvcnQgKiBmcm9tICcuL2Fzay11c2VyLXF1ZXN0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vdGFzayc7XG5leHBvcnQgKiBmcm9tICcuL3NhdmUtbWVtb3J5JztcblxuLy8gQ29yZSB0b29scyBsaXN0XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuY29uc3QgY29yZVRvb2xzOiBCYXNlVG9vbDxhbnk+W10gPSBbXG4gIG5ldyBSZWFkRmlsZVRvb2woKSxcbiAgbmV3IFdyaXRlRmlsZVRvb2woKSxcbiAgbmV3IExpc3REaXJlY3RvcnlUb29sKCksXG4gIG5ldyBHbG9iVG9vbCgpLFxuICBuZXcgU2VhcmNoRmlsZUNvbnRlbnRUb29sKCksXG4gIG5ldyBSdW5TaGVsbENvbW1hbmRUb29sKCksXG4gIG5ldyBXZWJTZWFyY2hUb29sKCksXG4gIG5ldyBXZWJGZXRjaFRvb2woKSxcbiAgbmV3IFJlcGxhY2VUb29sKCksXG4gIG5ldyBJbWFnZVJlYWRUb29sKCksXG4gIG5ldyBQREZFeHRyYWN0VG9vbCgpLFxuICBuZXcgQXNrVXNlclF1ZXN0aW9uVG9vbCgpLFxuICBuZXcgVGFza1Rvb2woKSxcbiAgbmV3IFNhdmVNZW1vcnlUb29sKClcbl07XG5cbmV4cG9ydCBjbGFzcyBUb29sUmVnaXN0cnkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBwcml2YXRlIHRvb2xzOiBNYXA8c3RyaW5nLCBCYXNlVG9vbDxhbnk+PiA9IG5ldyBNYXAoKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICAvLyBSZWdpc3RlciBjb3JlIHRvb2xzXG4gICAgZm9yIChjb25zdCB0b29sIG9mIGNvcmVUb29scykge1xuICAgICAgdGhpcy5yZWdpc3Rlcih0b29sKTtcbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICByZWdpc3Rlcih0b29sOiBCYXNlVG9vbDxhbnk+KTogdm9pZCB7XG4gICAgdGhpcy50b29scy5zZXQodG9vbC5uYW1lLCB0b29sKTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIGdldChuYW1lOiBzdHJpbmcpOiBCYXNlVG9vbDxhbnk+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy50b29scy5nZXQobmFtZSk7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBnZXRBbGwoKTogQmFzZVRvb2w8YW55PltdIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLnRvb2xzLnZhbHVlcygpKTtcbiAgfVxuXG4gIGdldERlZmluaXRpb25zKCk6IFRvb2xEZWZpbml0aW9uW10ge1xuICAgIHJldHVybiB0aGlzLmdldEFsbCgpLm1hcCh0b29sID0+IHRvb2wuZ2V0RGVmaW5pdGlvbigpKTtcbiAgfVxuXG4gIGFzeW5jIGV4ZWN1dGUoXG4gICAgdG9vbENhbGw6IFRvb2xDYWxsLFxuICAgIG9wdGlvbnM/OiBUb29sRXhlY3V0ZU9wdGlvbnNcbiAgKTogUHJvbWlzZTxUb29sUmVzdWx0PiB7XG4gICAgY29uc3QgdG9vbCA9IHRoaXMuZ2V0KHRvb2xDYWxsLmZ1bmN0aW9uLm5hbWUpO1xuICAgIFxuICAgIGlmICghdG9vbCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdG9vbENhbGxJZDogdG9vbENhbGwuaWQsXG4gICAgICAgIGNvbnRlbnQ6IGBFcnJvcjogVW5rbm93biB0b29sOiAke3Rvb2xDYWxsLmZ1bmN0aW9uLm5hbWV9YCxcbiAgICAgICAgaXNFcnJvcjogdHJ1ZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcGFyYW1zID0gSlNPTi5wYXJzZSh0b29sQ2FsbC5mdW5jdGlvbi5hcmd1bWVudHMpO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdG9vbC5leGVjdXRlKHBhcmFtcywgb3B0aW9ucyk7XG4gICAgICBcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRvb2xDYWxsSWQ6IHRvb2xDYWxsLmlkLFxuICAgICAgICBjb250ZW50OiByZXN1bHQsXG4gICAgICAgIGlzRXJyb3I6IGZhbHNlXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0b29sQ2FsbElkOiB0b29sQ2FsbC5pZCxcbiAgICAgICAgY29udGVudDogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpLFxuICAgICAgICBpc0Vycm9yOiB0cnVlXG4gICAgICB9O1xuICAgIH1cbiAgfVxufVxuXG4vLyBTaW5nbGV0b24gaW5zdGFuY2VcbmxldCB0b29sUmVnaXN0cnk6IFRvb2xSZWdpc3RyeSB8IG51bGwgPSBudWxsO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VG9vbFJlZ2lzdHJ5KCk6IFRvb2xSZWdpc3RyeSB7XG4gIGlmICghdG9vbFJlZ2lzdHJ5KSB7XG4gICAgdG9vbFJlZ2lzdHJ5ID0gbmV3IFRvb2xSZWdpc3RyeSgpO1xuICB9XG4gIHJldHVybiB0b29sUmVnaXN0cnk7XG59XG4iXX0=
@@ -0,0 +1,28 @@
1
+ import { BaseTool, ToolExecuteOptions } from './base';
2
+ interface ListDirectoryParams {
3
+ path: string;
4
+ ignore?: string[];
5
+ }
6
+ export declare class ListDirectoryTool extends BaseTool<ListDirectoryParams> {
7
+ name: string;
8
+ description: string;
9
+ parameters: {
10
+ type: string;
11
+ properties: {
12
+ path: {
13
+ type: string;
14
+ description: string;
15
+ };
16
+ ignore: {
17
+ type: string;
18
+ items: {
19
+ type: string;
20
+ };
21
+ description: string;
22
+ };
23
+ };
24
+ required: string[];
25
+ };
26
+ execute(params: ListDirectoryParams, options?: ToolExecuteOptions): Promise<string>;
27
+ }
28
+ export {};