@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.
- package/LICENSE +21 -0
- package/README.md +81 -0
- package/dist/agents/index.d.ts +35 -0
- package/dist/agents/index.js +233 -0
- package/dist/ai/chinese-provider.d.ts +146 -0
- package/dist/ai/chinese-provider.js +193 -0
- package/dist/ai/custom-provider.d.ts +11 -0
- package/dist/ai/custom-provider.js +113 -0
- package/dist/ai/index.d.ts +7 -0
- package/dist/ai/index.js +42 -0
- package/dist/ai/openai-provider.d.ts +18 -0
- package/dist/ai/openai-provider.js +161 -0
- package/dist/config/index.d.ts +20 -0
- package/dist/config/index.js +83 -0
- package/dist/conversation.d.ts +26 -0
- package/dist/conversation.js +126 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.js +72 -0
- package/dist/mcp/index.d.ts +48 -0
- package/dist/mcp/index.js +175 -0
- package/dist/sandbox/index.d.ts +31 -0
- package/dist/sandbox/index.js +197 -0
- package/dist/skills/index.d.ts +16 -0
- package/dist/skills/index.js +169 -0
- package/dist/tools/ask-user-question.d.ts +62 -0
- package/dist/tools/ask-user-question.js +71 -0
- package/dist/tools/base.d.ts +16 -0
- package/dist/tools/base.js +39 -0
- package/dist/tools/glob.d.ts +27 -0
- package/dist/tools/glob.js +125 -0
- package/dist/tools/image-read.d.ts +42 -0
- package/dist/tools/image-read.js +125 -0
- package/dist/tools/index.d.ts +27 -0
- package/dist/tools/index.js +127 -0
- package/dist/tools/list-directory.d.ts +28 -0
- package/dist/tools/list-directory.js +94 -0
- package/dist/tools/pdf-extract.d.ts +32 -0
- package/dist/tools/pdf-extract.js +130 -0
- package/dist/tools/read-file.d.ts +31 -0
- package/dist/tools/read-file.js +116 -0
- package/dist/tools/replace.d.ts +35 -0
- package/dist/tools/replace.js +93 -0
- package/dist/tools/run-shell-command.d.ts +35 -0
- package/dist/tools/run-shell-command.js +81 -0
- package/dist/tools/save-memory.d.ts +22 -0
- package/dist/tools/save-memory.js +91 -0
- package/dist/tools/search-file-content.d.ts +42 -0
- package/dist/tools/search-file-content.js +153 -0
- package/dist/tools/task.d.ts +46 -0
- package/dist/tools/task.js +54 -0
- package/dist/tools/web-fetch.d.ts +26 -0
- package/dist/tools/web-fetch.js +81 -0
- package/dist/tools/web-search.d.ts +35 -0
- package/dist/tools/web-search.js +86 -0
- package/dist/tools/write-file.d.ts +25 -0
- package/dist/tools/write-file.js +76 -0
- package/dist/types/index.d.ts +166 -0
- package/dist/types/index.js +43 -0
- 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 {};
|