@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,81 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RunShellCommandTool = void 0;
|
|
4
|
+
const base_1 = require("./base");
|
|
5
|
+
const child_process_1 = require("child_process");
|
|
6
|
+
class RunShellCommandTool extends base_1.BaseTool {
|
|
7
|
+
name = 'run_shell_command';
|
|
8
|
+
description = 'Executes a shell command in the terminal. Supports both foreground and background execution.';
|
|
9
|
+
parameters = {
|
|
10
|
+
type: 'object',
|
|
11
|
+
properties: {
|
|
12
|
+
command: {
|
|
13
|
+
type: 'string',
|
|
14
|
+
description: 'The shell command to execute'
|
|
15
|
+
},
|
|
16
|
+
description: {
|
|
17
|
+
type: 'string',
|
|
18
|
+
description: 'Brief description of what the command does'
|
|
19
|
+
},
|
|
20
|
+
timeout: {
|
|
21
|
+
type: 'number',
|
|
22
|
+
description: 'Timeout in seconds (default: 120)'
|
|
23
|
+
},
|
|
24
|
+
run_in_bg: {
|
|
25
|
+
type: 'boolean',
|
|
26
|
+
description: 'If true, run command in background'
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
required: ['command']
|
|
30
|
+
};
|
|
31
|
+
async execute(params, options) {
|
|
32
|
+
this.validateRequired(params, ['command']);
|
|
33
|
+
const timeout = (params.timeout || 120) * 1000;
|
|
34
|
+
const workingDir = options?.workingDirectory || process.cwd();
|
|
35
|
+
return new Promise((resolve) => {
|
|
36
|
+
const isWindows = process.platform === 'win32';
|
|
37
|
+
const shell = isWindows ? 'powershell.exe' : '/bin/bash';
|
|
38
|
+
const shellArgs = isWindows
|
|
39
|
+
? ['-NoProfile', '-Command', params.command]
|
|
40
|
+
: ['-c', params.command];
|
|
41
|
+
const proc = (0, child_process_1.spawn)(shell, shellArgs, {
|
|
42
|
+
cwd: workingDir,
|
|
43
|
+
env: process.env,
|
|
44
|
+
timeout: timeout
|
|
45
|
+
});
|
|
46
|
+
let stdout = '';
|
|
47
|
+
let stderr = '';
|
|
48
|
+
let timeoutId = null;
|
|
49
|
+
proc.stdout.on('data', (data) => {
|
|
50
|
+
stdout += data.toString();
|
|
51
|
+
});
|
|
52
|
+
proc.stderr.on('data', (data) => {
|
|
53
|
+
stderr += data.toString();
|
|
54
|
+
});
|
|
55
|
+
proc.on('error', (error) => {
|
|
56
|
+
resolve((0, base_1.formatToolError)(error));
|
|
57
|
+
});
|
|
58
|
+
proc.on('close', (code, signal) => {
|
|
59
|
+
if (timeoutId)
|
|
60
|
+
clearTimeout(timeoutId);
|
|
61
|
+
let output = `Command: ${params.command}\n`;
|
|
62
|
+
output += `Directory: ${workingDir}\n`;
|
|
63
|
+
output += `Exit Code: ${code}\n\n`;
|
|
64
|
+
if (stdout) {
|
|
65
|
+
output += `Stdout:\n${stdout}\n`;
|
|
66
|
+
}
|
|
67
|
+
if (stderr) {
|
|
68
|
+
output += `Stderr:\n${stderr}\n`;
|
|
69
|
+
}
|
|
70
|
+
resolve(output);
|
|
71
|
+
});
|
|
72
|
+
// Handle timeout
|
|
73
|
+
timeoutId = setTimeout(() => {
|
|
74
|
+
proc.kill();
|
|
75
|
+
resolve(`Command timed out after ${timeout / 1000} seconds`);
|
|
76
|
+
}, timeout);
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
exports.RunShellCommandTool = RunShellCommandTool;
|
|
81
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVuLXNoZWxsLWNvbW1hbmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdG9vbHMvcnVuLXNoZWxsLWNvbW1hbmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsaUNBQXVFO0FBQ3ZFLGlEQUFzQztBQVN0QyxNQUFhLG1CQUFvQixTQUFRLGVBQStCO0lBQ3RFLElBQUksR0FBRyxtQkFBbUIsQ0FBQztJQUMzQixXQUFXLEdBQUcsOEZBQThGLENBQUM7SUFDN0csVUFBVSxHQUFHO1FBQ1gsSUFBSSxFQUFFLFFBQVE7UUFDZCxVQUFVLEVBQUU7WUFDVixPQUFPLEVBQUU7Z0JBQ1AsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsV0FBVyxFQUFFLDhCQUE4QjthQUM1QztZQUNELFdBQVcsRUFBRTtnQkFDWCxJQUFJLEVBQUUsUUFBUTtnQkFDZCxXQUFXLEVBQUUsNENBQTRDO2FBQzFEO1lBQ0QsT0FBTyxFQUFFO2dCQUNQLElBQUksRUFBRSxRQUFRO2dCQUNkLFdBQVcsRUFBRSxtQ0FBbUM7YUFDakQ7WUFDRCxTQUFTLEVBQUU7Z0JBQ1QsSUFBSSxFQUFFLFNBQVM7Z0JBQ2YsV0FBVyxFQUFFLG9DQUFvQzthQUNsRDtTQUNGO1FBQ0QsUUFBUSxFQUFFLENBQUMsU0FBUyxDQUFDO0tBQ3RCLENBQUM7SUFFRixLQUFLLENBQUMsT0FBTyxDQUFDLE1BQTZCLEVBQUUsT0FBNEI7UUFDdkUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFFM0MsTUFBTSxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztRQUMvQyxNQUFNLFVBQVUsR0FBRyxPQUFPLEVBQUUsZ0JBQWdCLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBRTlELE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUM3QixNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsUUFBUSxLQUFLLE9BQU8sQ0FBQztZQUMvQyxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUM7WUFDekQsTUFBTSxTQUFTLEdBQUcsU0FBUztnQkFDekIsQ0FBQyxDQUFDLENBQUMsWUFBWSxFQUFFLFVBQVUsRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDO2dCQUM1QyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBRTNCLE1BQU0sSUFBSSxHQUFHLElBQUEscUJBQUssRUFBQyxLQUFLLEVBQUUsU0FBUyxFQUFFO2dCQUNuQyxHQUFHLEVBQUUsVUFBVTtnQkFDZixHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUc7Z0JBQ2hCLE9BQU8sRUFBRSxPQUFPO2FBQ2pCLENBQUMsQ0FBQztZQUVILElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztZQUNoQixJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7WUFDaEIsSUFBSSxTQUFTLEdBQTBCLElBQUksQ0FBQztZQUU1QyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDOUIsTUFBTSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUM1QixDQUFDLENBQUMsQ0FBQztZQUVILElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUM5QixNQUFNLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzVCLENBQUMsQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDekIsT0FBTyxDQUFDLElBQUEsc0JBQWUsRUFBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ2xDLENBQUMsQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLEVBQUU7Z0JBQ2hDLElBQUksU0FBUztvQkFBRSxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBRXZDLElBQUksTUFBTSxHQUFHLFlBQVksTUFBTSxDQUFDLE9BQU8sSUFBSSxDQUFDO2dCQUM1QyxNQUFNLElBQUksY0FBYyxVQUFVLElBQUksQ0FBQztnQkFDdkMsTUFBTSxJQUFJLGNBQWMsSUFBSSxNQUFNLENBQUM7Z0JBRW5DLElBQUksTUFBTSxFQUFFLENBQUM7b0JBQ1gsTUFBTSxJQUFJLFlBQVksTUFBTSxJQUFJLENBQUM7Z0JBQ25DLENBQUM7Z0JBRUQsSUFBSSxNQUFNLEVBQUUsQ0FBQztvQkFDWCxNQUFNLElBQUksWUFBWSxNQUFNLElBQUksQ0FBQztnQkFDbkMsQ0FBQztnQkFFRCxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDbEIsQ0FBQyxDQUFDLENBQUM7WUFFSCxpQkFBaUI7WUFDakIsU0FBUyxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQzFCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDWixPQUFPLENBQUMsMkJBQTJCLE9BQU8sR0FBRyxJQUFJLFVBQVUsQ0FBQyxDQUFDO1lBQy9ELENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNkLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBdEZELGtEQXNGQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VUb29sLCBUb29sRXhlY3V0ZU9wdGlvbnMsIGZvcm1hdFRvb2xFcnJvciB9IGZyb20gJy4vYmFzZSc7XG5pbXBvcnQgeyBzcGF3biB9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xuXG5pbnRlcmZhY2UgUnVuU2hlbGxDb21tYW5kUGFyYW1zIHtcbiAgY29tbWFuZDogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgdGltZW91dD86IG51bWJlcjtcbiAgcnVuX2luX2JnPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNsYXNzIFJ1blNoZWxsQ29tbWFuZFRvb2wgZXh0ZW5kcyBCYXNlVG9vbDxSdW5TaGVsbENvbW1hbmRQYXJhbXM+IHtcbiAgbmFtZSA9ICdydW5fc2hlbGxfY29tbWFuZCc7XG4gIGRlc2NyaXB0aW9uID0gJ0V4ZWN1dGVzIGEgc2hlbGwgY29tbWFuZCBpbiB0aGUgdGVybWluYWwuIFN1cHBvcnRzIGJvdGggZm9yZWdyb3VuZCBhbmQgYmFja2dyb3VuZCBleGVjdXRpb24uJztcbiAgcGFyYW1ldGVycyA9IHtcbiAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICBjb21tYW5kOiB7XG4gICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ1RoZSBzaGVsbCBjb21tYW5kIHRvIGV4ZWN1dGUnXG4gICAgICB9LFxuICAgICAgZGVzY3JpcHRpb246IHtcbiAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnQnJpZWYgZGVzY3JpcHRpb24gb2Ygd2hhdCB0aGUgY29tbWFuZCBkb2VzJ1xuICAgICAgfSxcbiAgICAgIHRpbWVvdXQ6IHtcbiAgICAgICAgdHlwZTogJ251bWJlcicsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnVGltZW91dCBpbiBzZWNvbmRzIChkZWZhdWx0OiAxMjApJ1xuICAgICAgfSxcbiAgICAgIHJ1bl9pbl9iZzoge1xuICAgICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnSWYgdHJ1ZSwgcnVuIGNvbW1hbmQgaW4gYmFja2dyb3VuZCdcbiAgICAgIH1cbiAgICB9LFxuICAgIHJlcXVpcmVkOiBbJ2NvbW1hbmQnXVxuICB9O1xuXG4gIGFzeW5jIGV4ZWN1dGUocGFyYW1zOiBSdW5TaGVsbENvbW1hbmRQYXJhbXMsIG9wdGlvbnM/OiBUb29sRXhlY3V0ZU9wdGlvbnMpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHRoaXMudmFsaWRhdGVSZXF1aXJlZChwYXJhbXMsIFsnY29tbWFuZCddKTtcblxuICAgIGNvbnN0IHRpbWVvdXQgPSAocGFyYW1zLnRpbWVvdXQgfHwgMTIwKSAqIDEwMDA7XG4gICAgY29uc3Qgd29ya2luZ0RpciA9IG9wdGlvbnM/LndvcmtpbmdEaXJlY3RvcnkgfHwgcHJvY2Vzcy5jd2QoKTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgY29uc3QgaXNXaW5kb3dzID0gcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJztcbiAgICAgIGNvbnN0IHNoZWxsID0gaXNXaW5kb3dzID8gJ3Bvd2Vyc2hlbGwuZXhlJyA6ICcvYmluL2Jhc2gnO1xuICAgICAgY29uc3Qgc2hlbGxBcmdzID0gaXNXaW5kb3dzIFxuICAgICAgICA/IFsnLU5vUHJvZmlsZScsICctQ29tbWFuZCcsIHBhcmFtcy5jb21tYW5kXVxuICAgICAgICA6IFsnLWMnLCBwYXJhbXMuY29tbWFuZF07XG5cbiAgICAgIGNvbnN0IHByb2MgPSBzcGF3bihzaGVsbCwgc2hlbGxBcmdzLCB7XG4gICAgICAgIGN3ZDogd29ya2luZ0RpcixcbiAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgdGltZW91dDogdGltZW91dFxuICAgICAgfSk7XG5cbiAgICAgIGxldCBzdGRvdXQgPSAnJztcbiAgICAgIGxldCBzdGRlcnIgPSAnJztcbiAgICAgIGxldCB0aW1lb3V0SWQ6IE5vZGVKUy5UaW1lb3V0IHwgbnVsbCA9IG51bGw7XG5cbiAgICAgIHByb2Muc3Rkb3V0Lm9uKCdkYXRhJywgKGRhdGEpID0+IHtcbiAgICAgICAgc3Rkb3V0ICs9IGRhdGEudG9TdHJpbmcoKTtcbiAgICAgIH0pO1xuXG4gICAgICBwcm9jLnN0ZGVyci5vbignZGF0YScsIChkYXRhKSA9PiB7XG4gICAgICAgIHN0ZGVyciArPSBkYXRhLnRvU3RyaW5nKCk7XG4gICAgICB9KTtcblxuICAgICAgcHJvYy5vbignZXJyb3InLCAoZXJyb3IpID0+IHtcbiAgICAgICAgcmVzb2x2ZShmb3JtYXRUb29sRXJyb3IoZXJyb3IpKTtcbiAgICAgIH0pO1xuXG4gICAgICBwcm9jLm9uKCdjbG9zZScsIChjb2RlLCBzaWduYWwpID0+IHtcbiAgICAgICAgaWYgKHRpbWVvdXRJZCkgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG5cbiAgICAgICAgbGV0IG91dHB1dCA9IGBDb21tYW5kOiAke3BhcmFtcy5jb21tYW5kfVxcbmA7XG4gICAgICAgIG91dHB1dCArPSBgRGlyZWN0b3J5OiAke3dvcmtpbmdEaXJ9XFxuYDtcbiAgICAgICAgb3V0cHV0ICs9IGBFeGl0IENvZGU6ICR7Y29kZX1cXG5cXG5gO1xuXG4gICAgICAgIGlmIChzdGRvdXQpIHtcbiAgICAgICAgICBvdXRwdXQgKz0gYFN0ZG91dDpcXG4ke3N0ZG91dH1cXG5gO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0ZGVycikge1xuICAgICAgICAgIG91dHB1dCArPSBgU3RkZXJyOlxcbiR7c3RkZXJyfVxcbmA7XG4gICAgICAgIH1cblxuICAgICAgICByZXNvbHZlKG91dHB1dCk7XG4gICAgICB9KTtcblxuICAgICAgLy8gSGFuZGxlIHRpbWVvdXRcbiAgICAgIHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBwcm9jLmtpbGwoKTtcbiAgICAgICAgcmVzb2x2ZShgQ29tbWFuZCB0aW1lZCBvdXQgYWZ0ZXIgJHt0aW1lb3V0IC8gMTAwMH0gc2Vjb25kc2ApO1xuICAgICAgfSwgdGltZW91dCk7XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { BaseTool, ToolExecuteOptions } from './base';
|
|
2
|
+
interface SaveMemoryParams {
|
|
3
|
+
fact: string;
|
|
4
|
+
}
|
|
5
|
+
export declare class SaveMemoryTool extends BaseTool<SaveMemoryParams> {
|
|
6
|
+
name: string;
|
|
7
|
+
description: string;
|
|
8
|
+
parameters: {
|
|
9
|
+
type: string;
|
|
10
|
+
properties: {
|
|
11
|
+
fact: {
|
|
12
|
+
type: string;
|
|
13
|
+
description: string;
|
|
14
|
+
};
|
|
15
|
+
};
|
|
16
|
+
required: string[];
|
|
17
|
+
};
|
|
18
|
+
private memoryFile;
|
|
19
|
+
constructor();
|
|
20
|
+
execute(params: SaveMemoryParams, options?: ToolExecuteOptions): Promise<string>;
|
|
21
|
+
}
|
|
22
|
+
export {};
|
|
@@ -0,0 +1,91 @@
|
|
|
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.SaveMemoryTool = void 0;
|
|
37
|
+
const base_1 = require("./base");
|
|
38
|
+
const fs = __importStar(require("fs/promises"));
|
|
39
|
+
const path = __importStar(require("path"));
|
|
40
|
+
class SaveMemoryTool extends base_1.BaseTool {
|
|
41
|
+
name = 'save_memory';
|
|
42
|
+
description = 'Saves a specific piece of information or fact to long-term memory for future sessions.';
|
|
43
|
+
parameters = {
|
|
44
|
+
type: 'object',
|
|
45
|
+
properties: {
|
|
46
|
+
fact: {
|
|
47
|
+
type: 'string',
|
|
48
|
+
description: 'The specific fact or piece of information to remember'
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
required: ['fact']
|
|
52
|
+
};
|
|
53
|
+
memoryFile;
|
|
54
|
+
constructor() {
|
|
55
|
+
super();
|
|
56
|
+
// 内存文件存储在用户主目录
|
|
57
|
+
const homeDir = process.env.HOME || process.env.USERPROFILE || '';
|
|
58
|
+
const oflowDir = path.join(homeDir, '.oflow');
|
|
59
|
+
this.memoryFile = path.join(oflowDir, 'memory.json');
|
|
60
|
+
}
|
|
61
|
+
async execute(params, options) {
|
|
62
|
+
this.validateRequired(params, ['fact']);
|
|
63
|
+
try {
|
|
64
|
+
// 确保目录存在
|
|
65
|
+
const dir = path.dirname(this.memoryFile);
|
|
66
|
+
await fs.mkdir(dir, { recursive: true });
|
|
67
|
+
// 读取现有内存
|
|
68
|
+
let memories = [];
|
|
69
|
+
try {
|
|
70
|
+
const content = await fs.readFile(this.memoryFile, 'utf-8');
|
|
71
|
+
memories = JSON.parse(content);
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
// 文件不存在,使用空数组
|
|
75
|
+
}
|
|
76
|
+
// 添加新记忆
|
|
77
|
+
memories.push({
|
|
78
|
+
fact: params.fact,
|
|
79
|
+
createdAt: new Date().toISOString()
|
|
80
|
+
});
|
|
81
|
+
// 保存
|
|
82
|
+
await fs.writeFile(this.memoryFile, JSON.stringify(memories, null, 2), 'utf-8');
|
|
83
|
+
return `✓ Saved to memory: "${params.fact}"`;
|
|
84
|
+
}
|
|
85
|
+
catch (error) {
|
|
86
|
+
return (0, base_1.formatToolError)(error);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
exports.SaveMemoryTool = SaveMemoryTool;
|
|
91
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2F2ZS1tZW1vcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdG9vbHMvc2F2ZS1tZW1vcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsaUNBQXVFO0FBQ3ZFLGdEQUFrQztBQUNsQywyQ0FBNkI7QUFNN0IsTUFBYSxjQUFlLFNBQVEsZUFBMEI7SUFDNUQsSUFBSSxHQUFHLGFBQWEsQ0FBQztJQUNyQixXQUFXLEdBQUcsd0ZBQXdGLENBQUM7SUFDdkcsVUFBVSxHQUFHO1FBQ1gsSUFBSSxFQUFFLFFBQVE7UUFDZCxVQUFVLEVBQUU7WUFDVixJQUFJLEVBQUU7Z0JBQ0osSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsV0FBVyxFQUFFLHVEQUF1RDthQUNyRTtTQUNGO1FBQ0QsUUFBUSxFQUFFLENBQUMsTUFBTSxDQUFDO0tBQ25CLENBQUM7SUFFTSxVQUFVLENBQVM7SUFFM0I7UUFDRSxLQUFLLEVBQUUsQ0FBQztRQUNSLGVBQWU7UUFDZixNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUM7UUFDbEUsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUF3QixFQUFFLE9BQTRCO1FBQ2xFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBRXhDLElBQUksQ0FBQztZQUNILFNBQVM7WUFDVCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUMxQyxNQUFNLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFFekMsU0FBUztZQUNULElBQUksUUFBUSxHQUErQyxFQUFFLENBQUM7WUFDOUQsSUFBSSxDQUFDO2dCQUNILE1BQU0sT0FBTyxHQUFHLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUM1RCxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNqQyxDQUFDO1lBQUMsTUFBTSxDQUFDO2dCQUNQLGNBQWM7WUFDaEIsQ0FBQztZQUVELFFBQVE7WUFDUixRQUFRLENBQUMsSUFBSSxDQUFDO2dCQUNaLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtnQkFDakIsU0FBUyxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO2FBQ3BDLENBQUMsQ0FBQztZQUVILEtBQUs7WUFDTCxNQUFNLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFFaEYsT0FBTyx1QkFBdUIsTUFBTSxDQUFDLElBQUksR0FBRyxDQUFDO1FBQy9DLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsT0FBTyxJQUFBLHNCQUFlLEVBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEMsQ0FBQztJQUNILENBQUM7Q0FDRjtBQXZERCx3Q0F1REMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlVG9vbCwgVG9vbEV4ZWN1dGVPcHRpb25zLCBmb3JtYXRUb29sRXJyb3IgfSBmcm9tICcuL2Jhc2UnO1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMvcHJvbWlzZXMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcblxuaW50ZXJmYWNlIFNhdmVNZW1vcnlQYXJhbXMge1xuICBmYWN0OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBTYXZlTWVtb3J5VG9vbCBleHRlbmRzIEJhc2VUb29sPFNhdmVNZW1vcnlQYXJhbXM+IHtcbiAgbmFtZSA9ICdzYXZlX21lbW9yeSc7XG4gIGRlc2NyaXB0aW9uID0gJ1NhdmVzIGEgc3BlY2lmaWMgcGllY2Ugb2YgaW5mb3JtYXRpb24gb3IgZmFjdCB0byBsb25nLXRlcm0gbWVtb3J5IGZvciBmdXR1cmUgc2Vzc2lvbnMuJztcbiAgcGFyYW1ldGVycyA9IHtcbiAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICBmYWN0OiB7XG4gICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ1RoZSBzcGVjaWZpYyBmYWN0IG9yIHBpZWNlIG9mIGluZm9ybWF0aW9uIHRvIHJlbWVtYmVyJ1xuICAgICAgfVxuICAgIH0sXG4gICAgcmVxdWlyZWQ6IFsnZmFjdCddXG4gIH07XG5cbiAgcHJpdmF0ZSBtZW1vcnlGaWxlOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICAvLyDlhoXlrZjmlofku7blrZjlgqjlnKjnlKjmiLfkuLvnm67lvZVcbiAgICBjb25zdCBob21lRGlyID0gcHJvY2Vzcy5lbnYuSE9NRSB8fCBwcm9jZXNzLmVudi5VU0VSUFJPRklMRSB8fCAnJztcbiAgICBjb25zdCBvZmxvd0RpciA9IHBhdGguam9pbihob21lRGlyLCAnLm9mbG93Jyk7XG4gICAgdGhpcy5tZW1vcnlGaWxlID0gcGF0aC5qb2luKG9mbG93RGlyLCAnbWVtb3J5Lmpzb24nKTtcbiAgfVxuXG4gIGFzeW5jIGV4ZWN1dGUocGFyYW1zOiBTYXZlTWVtb3J5UGFyYW1zLCBvcHRpb25zPzogVG9vbEV4ZWN1dGVPcHRpb25zKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICB0aGlzLnZhbGlkYXRlUmVxdWlyZWQocGFyYW1zLCBbJ2ZhY3QnXSk7XG5cbiAgICB0cnkge1xuICAgICAgLy8g56Gu5L+d55uu5b2V5a2Y5ZyoXG4gICAgICBjb25zdCBkaXIgPSBwYXRoLmRpcm5hbWUodGhpcy5tZW1vcnlGaWxlKTtcbiAgICAgIGF3YWl0IGZzLm1rZGlyKGRpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgICAgIC8vIOivu+WPlueOsOacieWGheWtmFxuICAgICAgbGV0IG1lbW9yaWVzOiBBcnJheTx7IGZhY3Q6IHN0cmluZzsgY3JlYXRlZEF0OiBzdHJpbmcgfT4gPSBbXTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBmcy5yZWFkRmlsZSh0aGlzLm1lbW9yeUZpbGUsICd1dGYtOCcpO1xuICAgICAgICBtZW1vcmllcyA9IEpTT04ucGFyc2UoY29udGVudCk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8g5paH5Lu25LiN5a2Y5Zyo77yM5L2/55So56m65pWw57uEXG4gICAgICB9XG5cbiAgICAgIC8vIOa3u+WKoOaWsOiusOW/hlxuICAgICAgbWVtb3JpZXMucHVzaCh7XG4gICAgICAgIGZhY3Q6IHBhcmFtcy5mYWN0LFxuICAgICAgICBjcmVhdGVkQXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxuICAgICAgfSk7XG5cbiAgICAgIC8vIOS/neWtmFxuICAgICAgYXdhaXQgZnMud3JpdGVGaWxlKHRoaXMubWVtb3J5RmlsZSwgSlNPTi5zdHJpbmdpZnkobWVtb3JpZXMsIG51bGwsIDIpLCAndXRmLTgnKTtcblxuICAgICAgcmV0dXJuIGDinJMgU2F2ZWQgdG8gbWVtb3J5OiBcIiR7cGFyYW1zLmZhY3R9XCJgO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4gZm9ybWF0VG9vbEVycm9yKGVycm9yKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { BaseTool, ToolExecuteOptions } from './base';
|
|
2
|
+
interface SearchFileContentParams {
|
|
3
|
+
pattern: string;
|
|
4
|
+
path?: string;
|
|
5
|
+
include?: string;
|
|
6
|
+
case_sensitive?: boolean;
|
|
7
|
+
context?: number;
|
|
8
|
+
}
|
|
9
|
+
export declare class SearchFileContentTool extends BaseTool<SearchFileContentParams> {
|
|
10
|
+
name: string;
|
|
11
|
+
description: string;
|
|
12
|
+
parameters: {
|
|
13
|
+
type: string;
|
|
14
|
+
properties: {
|
|
15
|
+
pattern: {
|
|
16
|
+
type: string;
|
|
17
|
+
description: string;
|
|
18
|
+
};
|
|
19
|
+
path: {
|
|
20
|
+
type: string;
|
|
21
|
+
description: string;
|
|
22
|
+
};
|
|
23
|
+
include: {
|
|
24
|
+
type: string;
|
|
25
|
+
description: string;
|
|
26
|
+
};
|
|
27
|
+
case_sensitive: {
|
|
28
|
+
type: string;
|
|
29
|
+
description: string;
|
|
30
|
+
};
|
|
31
|
+
context: {
|
|
32
|
+
type: string;
|
|
33
|
+
description: string;
|
|
34
|
+
};
|
|
35
|
+
};
|
|
36
|
+
required: string[];
|
|
37
|
+
};
|
|
38
|
+
execute(params: SearchFileContentParams, options?: ToolExecuteOptions): Promise<string>;
|
|
39
|
+
private searchInDir;
|
|
40
|
+
private shouldInclude;
|
|
41
|
+
}
|
|
42
|
+
export {};
|
|
@@ -0,0 +1,153 @@
|
|
|
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.SearchFileContentTool = void 0;
|
|
37
|
+
const base_1 = require("./base");
|
|
38
|
+
const fs = __importStar(require("fs/promises"));
|
|
39
|
+
const path = __importStar(require("path"));
|
|
40
|
+
class SearchFileContentTool extends base_1.BaseTool {
|
|
41
|
+
name = 'search_file_content';
|
|
42
|
+
description = 'Searches for a pattern within files in a directory using regex.';
|
|
43
|
+
parameters = {
|
|
44
|
+
type: 'object',
|
|
45
|
+
properties: {
|
|
46
|
+
pattern: {
|
|
47
|
+
type: 'string',
|
|
48
|
+
description: 'The regular expression pattern to search for'
|
|
49
|
+
},
|
|
50
|
+
path: {
|
|
51
|
+
type: 'string',
|
|
52
|
+
description: 'Optional: The path to search within'
|
|
53
|
+
},
|
|
54
|
+
include: {
|
|
55
|
+
type: 'string',
|
|
56
|
+
description: 'Optional: A glob pattern to filter files'
|
|
57
|
+
},
|
|
58
|
+
case_sensitive: {
|
|
59
|
+
type: 'boolean',
|
|
60
|
+
description: 'If true, search is case-sensitive'
|
|
61
|
+
},
|
|
62
|
+
context: {
|
|
63
|
+
type: 'number',
|
|
64
|
+
description: 'Number of lines of context around matches'
|
|
65
|
+
}
|
|
66
|
+
},
|
|
67
|
+
required: ['pattern']
|
|
68
|
+
};
|
|
69
|
+
async execute(params, options) {
|
|
70
|
+
this.validateRequired(params, ['pattern']);
|
|
71
|
+
const workingDir = options?.workingDirectory || process.cwd();
|
|
72
|
+
const searchPath = params.path || workingDir;
|
|
73
|
+
const caseSensitive = params.case_sensitive ?? false;
|
|
74
|
+
try {
|
|
75
|
+
const regex = new RegExp(params.pattern, caseSensitive ? 'g' : 'gi');
|
|
76
|
+
const results = [];
|
|
77
|
+
const maxResults = 500;
|
|
78
|
+
await this.searchInDir(searchPath, regex, params.include, results, maxResults);
|
|
79
|
+
if (results.length === 0) {
|
|
80
|
+
return `No matches found for pattern: ${params.pattern}`;
|
|
81
|
+
}
|
|
82
|
+
const output = results.map(r => {
|
|
83
|
+
return `${r.file}:${r.line}: ${r.content}`;
|
|
84
|
+
}).join('\n');
|
|
85
|
+
return `Found ${results.length} matches:\n\n${output}`;
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
return (0, base_1.formatToolError)(error);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
async searchInDir(dir, regex, include, results, maxResults) {
|
|
92
|
+
if (results.length >= maxResults)
|
|
93
|
+
return;
|
|
94
|
+
const entries = await fs.readdir(dir, { withFileTypes: true });
|
|
95
|
+
for (const entry of entries) {
|
|
96
|
+
if (results.length >= maxResults)
|
|
97
|
+
return;
|
|
98
|
+
const fullPath = path.join(dir, entry.name);
|
|
99
|
+
if (entry.isDirectory()) {
|
|
100
|
+
if (['node_modules', '.git', 'dist', 'build', '.next'].includes(entry.name)) {
|
|
101
|
+
continue;
|
|
102
|
+
}
|
|
103
|
+
await this.searchInDir(fullPath, regex, include, results, maxResults);
|
|
104
|
+
}
|
|
105
|
+
else if (entry.isFile()) {
|
|
106
|
+
if (!this.shouldInclude(fullPath, include)) {
|
|
107
|
+
continue;
|
|
108
|
+
}
|
|
109
|
+
try {
|
|
110
|
+
const content = await fs.readFile(fullPath, 'utf-8');
|
|
111
|
+
const lines = content.split('\n');
|
|
112
|
+
lines.forEach((line, index) => {
|
|
113
|
+
if (results.length >= maxResults)
|
|
114
|
+
return;
|
|
115
|
+
const match = line.match(regex);
|
|
116
|
+
if (match) {
|
|
117
|
+
results.push({
|
|
118
|
+
file: fullPath,
|
|
119
|
+
line: index + 1,
|
|
120
|
+
content: line.trim(),
|
|
121
|
+
match: match[0]
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
catch {
|
|
127
|
+
// Skip files that can't be read as text
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
shouldInclude(filePath, include) {
|
|
133
|
+
if (!include) {
|
|
134
|
+
// Default: only text files
|
|
135
|
+
const ext = path.extname(filePath).toLowerCase();
|
|
136
|
+
const textExts = [
|
|
137
|
+
'.ts', '.tsx', '.js', '.jsx', '.json', '.md', '.txt',
|
|
138
|
+
'.py', '.java', '.c', '.cpp', '.h', '.go', '.rs',
|
|
139
|
+
'.yaml', '.yml', '.toml', '.ini', '.env', '.sh',
|
|
140
|
+
'.html', '.css', '.scss', '.less', '.vue', '.svelte'
|
|
141
|
+
];
|
|
142
|
+
return textExts.includes(ext) || ext === '';
|
|
143
|
+
}
|
|
144
|
+
// Simple include pattern matching
|
|
145
|
+
if (include.startsWith('*.')) {
|
|
146
|
+
const ext = include.slice(1);
|
|
147
|
+
return filePath.endsWith(ext);
|
|
148
|
+
}
|
|
149
|
+
return filePath.includes(include);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
exports.SearchFileContentTool = SearchFileContentTool;
|
|
153
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWZpbGUtY29udGVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90b29scy9zZWFyY2gtZmlsZS1jb250ZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGlDQUF1RTtBQUN2RSxnREFBa0M7QUFDbEMsMkNBQTZCO0FBaUI3QixNQUFhLHFCQUFzQixTQUFRLGVBQWlDO0lBQzFFLElBQUksR0FBRyxxQkFBcUIsQ0FBQztJQUM3QixXQUFXLEdBQUcsaUVBQWlFLENBQUM7SUFDaEYsVUFBVSxHQUFHO1FBQ1gsSUFBSSxFQUFFLFFBQVE7UUFDZCxVQUFVLEVBQUU7WUFDVixPQUFPLEVBQUU7Z0JBQ1AsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsV0FBVyxFQUFFLDhDQUE4QzthQUM1RDtZQUNELElBQUksRUFBRTtnQkFDSixJQUFJLEVBQUUsUUFBUTtnQkFDZCxXQUFXLEVBQUUscUNBQXFDO2FBQ25EO1lBQ0QsT0FBTyxFQUFFO2dCQUNQLElBQUksRUFBRSxRQUFRO2dCQUNkLFdBQVcsRUFBRSwwQ0FBMEM7YUFDeEQ7WUFDRCxjQUFjLEVBQUU7Z0JBQ2QsSUFBSSxFQUFFLFNBQVM7Z0JBQ2YsV0FBVyxFQUFFLG1DQUFtQzthQUNqRDtZQUNELE9BQU8sRUFBRTtnQkFDUCxJQUFJLEVBQUUsUUFBUTtnQkFDZCxXQUFXLEVBQUUsMkNBQTJDO2FBQ3pEO1NBQ0Y7UUFDRCxRQUFRLEVBQUUsQ0FBQyxTQUFTLENBQUM7S0FDdEIsQ0FBQztJQUVGLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBK0IsRUFBRSxPQUE0QjtRQUN6RSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUUzQyxNQUFNLFVBQVUsR0FBRyxPQUFPLEVBQUUsZ0JBQWdCLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzlELE1B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QUFHLEtBQUssRUFBRSxDQUFDO1FBQzlDLENBQUM7UUFFRCxrQ0FBa0M7UUFDbEMsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDN0IsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM3QixPQUFPLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDaEMsQ0FBQztRQUNELE9BQU8sUUFBUSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNwQyxDQUFDO0NBQ0Y7QUFoSUQsc0RBZ0lDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmFzZVRvb2wsIFRvb2xFeGVjdXRlT3B0aW9ucywgZm9ybWF0VG9vbEVycm9yIH0gZnJvbSAnLi9iYXNlJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzL3Byb21pc2VzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5cbmludGVyZmFjZSBTZWFyY2hGaWxlQ29udGVudFBhcmFtcyB7XG4gIHBhdHRlcm46IHN0cmluZztcbiAgcGF0aD86IHN0cmluZztcbiAgaW5jbHVkZT86IHN0cmluZztcbiAgY2FzZV9zZW5zaXRpdmU/OiBib29sZWFuO1xuICBjb250ZXh0PzogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgU2VhcmNoUmVzdWx0IHtcbiAgZmlsZTogc3RyaW5nO1xuICBsaW5lOiBudW1iZXI7XG4gIGNvbnRlbnQ6IHN0cmluZztcbiAgbWF0Y2g6IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIFNlYXJjaEZpbGVDb250ZW50VG9vbCBleHRlbmRzIEJhc2VUb29sPFNlYXJjaEZpbGVDb250ZW50UGFyYW1zPiB7XG4gIG5hbWUgPSAnc2VhcmNoX2ZpbGVfY29udGVudCc7XG4gIGRlc2NyaXB0aW9uID0gJ1NlYXJjaGVzIGZvciBhIHBhdHRlcm4gd2l0aGluIGZpbGVzIGluIGEgZGlyZWN0b3J5IHVzaW5nIHJlZ2V4Lic7XG4gIHBhcmFtZXRlcnMgPSB7XG4gICAgdHlwZTogJ29iamVjdCcsXG4gICAgcHJvcGVydGllczoge1xuICAgICAgcGF0dGVybjoge1xuICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdUaGUgcmVndWxhciBleHByZXNzaW9uIHBhdHRlcm4gdG8gc2VhcmNoIGZvcidcbiAgICAgIH0sXG4gICAgICBwYXRoOiB7XG4gICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ09wdGlvbmFsOiBUaGUgcGF0aCB0byBzZWFyY2ggd2l0aGluJ1xuICAgICAgfSxcbiAgICAgIGluY2x1ZGU6IHtcbiAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnT3B0aW9uYWw6IEEgZ2xvYiBwYXR0ZXJuIHRvIGZpbHRlciBmaWxlcydcbiAgICAgIH0sXG4gICAgICBjYXNlX3NlbnNpdGl2ZToge1xuICAgICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnSWYgdHJ1ZSwgc2VhcmNoIGlzIGNhc2Utc2Vuc2l0aXZlJ1xuICAgICAgfSxcbiAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgdHlwZTogJ251bWJlcicsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnTnVtYmVyIG9mIGxpbmVzIG9mIGNvbnRleHQgYXJvdW5kIG1hdGNoZXMnXG4gICAgICB9XG4gICAgfSxcbiAgICByZXF1aXJlZDogWydwYXR0ZXJuJ11cbiAgfTtcblxuICBhc3luYyBleGVjdXRlKHBhcmFtczogU2VhcmNoRmlsZUNvbnRlbnRQYXJhbXMsIG9wdGlvbnM/OiBUb29sRXhlY3V0ZU9wdGlvbnMpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHRoaXMudmFsaWRhdGVSZXF1aXJlZChwYXJhbXMsIFsncGF0dGVybiddKTtcblxuICAgIGNvbnN0IHdvcmtpbmdEaXIgPSBvcHRpb25zPy53b3JraW5nRGlyZWN0b3J5IHx8IHByb2Nlc3MuY3dkKCk7XG4gICAgY29uc3Qgc2VhcmNoUGF0aCA9IHBhcmFtcy5wYXRoIHx8IHdvcmtpbmdEaXI7XG4gICAgY29uc3QgY2FzZVNlbnNpdGl2ZSA9IHBhcmFtcy5jYXNlX3NlbnNpdGl2ZSA/PyBmYWxzZTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAocGFyYW1zLnBhdHRlcm4sIGNhc2VTZW5zaXRpdmUgPyAnZycgOiAnZ2knKTtcbiAgICAgIGNvbnN0IHJlc3VsdHM6IFNlYXJjaFJlc3VsdFtdID0gW107XG4gICAgICBjb25zdCBtYXhSZXN1bHRzID0gNTAwO1xuXG4gICAgICBhd2FpdCB0aGlzLnNlYXJjaEluRGlyKHNlYXJjaFBhdGgsIHJlZ2V4LCBwYXJhbXMuaW5jbHVkZSwgcmVzdWx0cywgbWF4UmVzdWx0cyk7XG5cbiAgICAgIGlmIChyZXN1bHRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gYE5vIG1hdGNoZXMgZm91bmQgZm9yIHBhdHRlcm46ICR7cGFyYW1zLnBhdHRlcm59YDtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgb3V0cHV0ID0gcmVzdWx0cy5tYXAociA9PiB7XG4gICAgICAgIHJldHVybiBgJHtyLmZpbGV9OiR7ci5saW5lfTogJHtyLmNvbnRlbnR9YDtcbiAgICAgIH0pLmpvaW4oJ1xcbicpO1xuXG4gICAgICByZXR1cm4gYEZvdW5kICR7cmVzdWx0cy5sZW5ndGh9IG1hdGNoZXM6XFxuXFxuJHtvdXRwdXR9YDtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIGZvcm1hdFRvb2xFcnJvcihlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZWFyY2hJbkRpcihcbiAgICBkaXI6IHN0cmluZyxcbiAgICByZWdleDogUmVnRXhwLFxuICAgIGluY2x1ZGU6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICByZXN1bHRzOiBTZWFyY2hSZXN1bHRbXSxcbiAgICBtYXhSZXN1bHRzOiBudW1iZXJcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHJlc3VsdHMubGVuZ3RoID49IG1heFJlc3VsdHMpIHJldHVybjtcblxuICAgIGNvbnN0IGVudHJpZXMgPSBhd2FpdCBmcy5yZWFkZGlyKGRpciwgeyB3aXRoRmlsZVR5cGVzOiB0cnVlIH0pO1xuXG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgICBpZiAocmVzdWx0cy5sZW5ndGggPj0gbWF4UmVzdWx0cykgcmV0dXJuO1xuXG4gICAgICBjb25zdCBmdWxsUGF0aCA9IHBhdGguam9pbihkaXIsIGVudHJ5Lm5hbWUpO1xuXG4gICAgICBpZiAoZW50cnkuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICBpZiAoWydub2RlX21vZHVsZXMnLCAnLmdpdCcsICdkaXN0JywgJ2J1aWxkJywgJy5uZXh0J10uaW5jbHVkZXMoZW50cnkubmFtZSkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB0aGlzLnNlYXJjaEluRGlyKGZ1bGxQYXRoLCByZWdleCwgaW5jbHVkZSwgcmVzdWx0cywgbWF4UmVzdWx0cyk7XG4gICAgICB9IGVsc2UgaWYgKGVudHJ5LmlzRmlsZSgpKSB7XG4gICAgICAgIGlmICghdGhpcy5zaG91bGRJbmNsdWRlKGZ1bGxQYXRoLCBpbmNsdWRlKSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgZnMucmVhZEZpbGUoZnVsbFBhdGgsICd1dGYtOCcpO1xuICAgICAgICAgIGNvbnN0IGxpbmVzID0gY29udGVudC5zcGxpdCgnXFxuJyk7XG5cbiAgICAgICAgICBsaW5lcy5mb3JFYWNoKChsaW5lLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3VsdHMubGVuZ3RoID49IG1heFJlc3VsdHMpIHJldHVybjtcblxuICAgICAgICAgICAgY29uc3QgbWF0Y2ggPSBsaW5lLm1hdGNoKHJlZ2V4KTtcbiAgICAgICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgICByZXN1bHRzLnB1c2goe1xuICAgICAgICAgICAgICAgIGZpbGU6IGZ1bGxQYXRoLFxuICAgICAgICAgICAgICAgIGxpbmU6IGluZGV4ICsgMSxcbiAgICAgICAgICAgICAgICBjb250ZW50OiBsaW5lLnRyaW0oKSxcbiAgICAgICAgICAgICAgICBtYXRjaDogbWF0Y2hbMF1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIC8vIFNraXAgZmlsZXMgdGhhdCBjYW4ndCBiZSByZWFkIGFzIHRleHRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2hvdWxkSW5jbHVkZShmaWxlUGF0aDogc3RyaW5nLCBpbmNsdWRlOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgICBpZiAoIWluY2x1ZGUpIHtcbiAgICAgIC8vIERlZmF1bHQ6IG9ubHkgdGV4dCBmaWxlc1xuICAgICAgY29uc3QgZXh0ID0gcGF0aC5leHRuYW1lKGZpbGVQYXRoKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgY29uc3QgdGV4dEV4dHMgPSBbXG4gICAgICAgICcudHMnLCAnLnRzeCcsICcuanMnLCAnLmpzeCcsICcuanNvbicsICcubWQnLCAnLnR4dCcsXG4gICAgICAgICcucHknLCAnLmphdmEnLCAnLmMnLCAnLmNwcCcsICcuaCcsICcuZ28nLCAnLnJzJyxcbiAgICAgICAgJy55YW1sJywgJy55bWwnLCAnLnRvbWwnLCAnLmluaScsICcuZW52JywgJy5zaCcsXG4gICAgICAgICcuaHRtbCcsICcuY3NzJywgJy5zY3NzJywgJy5sZXNzJywgJy52dWUnLCAnLnN2ZWx0ZSdcbiAgICAgIF07XG4gICAgICByZXR1cm4gdGV4dEV4dHMuaW5jbHVkZXMoZXh0KSB8fCBleHQgPT09ICcnO1xuICAgIH1cblxuICAgIC8vIFNpbXBsZSBpbmNsdWRlIHBhdHRlcm4gbWF0Y2hpbmdcbiAgICBpZiAoaW5jbHVkZS5zdGFydHNXaXRoKCcqLicpKSB7XG4gICAgICBjb25zdCBleHQgPSBpbmNsdWRlLnNsaWNlKDEpO1xuICAgICAgcmV0dXJuIGZpbGVQYXRoLmVuZHNXaXRoKGV4dCk7XG4gICAgfVxuICAgIHJldHVybiBmaWxlUGF0aC5pbmNsdWRlcyhpbmNsdWRlKTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { BaseTool, ToolExecuteOptions } from './base';
|
|
2
|
+
interface TaskParams {
|
|
3
|
+
description: string;
|
|
4
|
+
prompt: string;
|
|
5
|
+
subagent_type: 'general-purpose' | 'plan-agent' | 'explore-agent' | 'code-reviewer' | 'frontend-tester';
|
|
6
|
+
useContext?: boolean;
|
|
7
|
+
outputFormat?: string;
|
|
8
|
+
constraints?: string;
|
|
9
|
+
}
|
|
10
|
+
export declare class TaskTool extends BaseTool<TaskParams> {
|
|
11
|
+
name: string;
|
|
12
|
+
description: string;
|
|
13
|
+
parameters: {
|
|
14
|
+
type: string;
|
|
15
|
+
properties: {
|
|
16
|
+
description: {
|
|
17
|
+
type: string;
|
|
18
|
+
description: string;
|
|
19
|
+
};
|
|
20
|
+
prompt: {
|
|
21
|
+
type: string;
|
|
22
|
+
description: string;
|
|
23
|
+
};
|
|
24
|
+
subagent_type: {
|
|
25
|
+
type: string;
|
|
26
|
+
enum: string[];
|
|
27
|
+
description: string;
|
|
28
|
+
};
|
|
29
|
+
useContext: {
|
|
30
|
+
type: string;
|
|
31
|
+
description: string;
|
|
32
|
+
};
|
|
33
|
+
outputFormat: {
|
|
34
|
+
type: string;
|
|
35
|
+
description: string;
|
|
36
|
+
};
|
|
37
|
+
constraints: {
|
|
38
|
+
type: string;
|
|
39
|
+
description: string;
|
|
40
|
+
};
|
|
41
|
+
};
|
|
42
|
+
required: string[];
|
|
43
|
+
};
|
|
44
|
+
execute(params: TaskParams, options?: ToolExecuteOptions): Promise<string>;
|
|
45
|
+
}
|
|
46
|
+
export {};
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TaskTool = void 0;
|
|
4
|
+
const base_1 = require("./base");
|
|
5
|
+
class TaskTool extends base_1.BaseTool {
|
|
6
|
+
name = 'task';
|
|
7
|
+
description = 'Launch a specialized agent to handle complex, multi-step tasks autonomously. Available agents: general-purpose, plan-agent, explore-agent, code-reviewer, frontend-tester';
|
|
8
|
+
parameters = {
|
|
9
|
+
type: 'object',
|
|
10
|
+
properties: {
|
|
11
|
+
description: {
|
|
12
|
+
type: 'string',
|
|
13
|
+
description: 'A short (3-5 word) description of the task'
|
|
14
|
+
},
|
|
15
|
+
prompt: {
|
|
16
|
+
type: 'string',
|
|
17
|
+
description: 'The detailed task description for the agent'
|
|
18
|
+
},
|
|
19
|
+
subagent_type: {
|
|
20
|
+
type: 'string',
|
|
21
|
+
enum: ['general-purpose', 'plan-agent', 'explore-agent', 'code-reviewer', 'frontend-tester'],
|
|
22
|
+
description: 'The type of specialized agent to use'
|
|
23
|
+
},
|
|
24
|
+
useContext: {
|
|
25
|
+
type: 'boolean',
|
|
26
|
+
description: 'Whether to include the main agent context'
|
|
27
|
+
},
|
|
28
|
+
outputFormat: {
|
|
29
|
+
type: 'string',
|
|
30
|
+
description: 'Optional output format template'
|
|
31
|
+
},
|
|
32
|
+
constraints: {
|
|
33
|
+
type: 'string',
|
|
34
|
+
description: 'Optional constraints or limitations'
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
required: ['description', 'prompt', 'subagent_type']
|
|
38
|
+
};
|
|
39
|
+
async execute(params, options) {
|
|
40
|
+
this.validateRequired(params, ['description', 'prompt', 'subagent_type']);
|
|
41
|
+
// 返回任务信息,由上层处理
|
|
42
|
+
return JSON.stringify({
|
|
43
|
+
type: 'agent_task',
|
|
44
|
+
description: params.description,
|
|
45
|
+
prompt: params.prompt,
|
|
46
|
+
subagent_type: params.subagent_type,
|
|
47
|
+
useContext: params.useContext,
|
|
48
|
+
outputFormat: params.outputFormat,
|
|
49
|
+
constraints: params.constraints
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
exports.TaskTool = TaskTool;
|
|
54
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90b29scy90YXNrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGlDQUF1RTtBQWF2RSxNQUFhLFFBQVMsU0FBUSxlQUFvQjtJQUNoRCxJQUFJLEdBQUcsTUFBTSxDQUFDO0lBQ2QsV0FBVyxHQUFHLDJLQUEySyxDQUFDO0lBQzFMLFVBQVUsR0FBRztRQUNYLElBQUksRUFBRSxRQUFRO1FBQ2QsVUFBVSxFQUFFO1lBQ1YsV0FBVyxFQUFFO2dCQUNYLElBQUksRUFBRSxRQUFRO2dCQUNkLFdBQVcsRUFBRSw0Q0FBNEM7YUFDMUQ7WUFDRCxNQUFNLEVBQUU7Z0JBQ04sSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsV0FBVyxFQUFFLDZDQUE2QzthQUMzRDtZQUNELGFBQWEsRUFBRTtnQkFDYixJQUFJLEVBQUUsUUFBUTtnQkFDZCxJQUFJLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxpQkFBaUIsQ0FBQztnQkFDNUYsV0FBVyxFQUFFLHNDQUFzQzthQUNwRDtZQUNELFVBQVUsRUFBRTtnQkFDVixJQUFJLEVBQUUsU0FBUztnQkFDZixXQUFXLEVBQUUsMkNBQTJDO2FBQ3pEO1lBQ0QsWUFBWSxFQUFFO2dCQUNaLElBQUksRUFBRSxRQUFRO2dCQUNkLFdBQVcsRUFBRSxpQ0FBaUM7YUFDL0M7WUFDRCxXQUFXLEVBQUU7Z0JBQ1gsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsV0FBVyxFQUFFLHFDQUFxQzthQUNuRDtTQUNGO1FBQ0QsUUFBUSxFQUFFLENBQUMsYUFBYSxFQUFFLFFBQVEsRUFBRSxlQUFlLENBQUM7S0FDckQsQ0FBQztJQUVGLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBa0IsRUFBRSxPQUE0QjtRQUM1RCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLENBQUMsYUFBYSxFQUFFLFFBQVEsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDO1FBRTFFLGVBQWU7UUFDZixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7WUFDcEIsSUFBSSxFQUFFLFlBQVk7WUFDbEIsV0FBVyxFQUFFLE1BQU0sQ0FBQyxXQUFXO1lBQy9CLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTTtZQUNyQixhQUFhLEVBQUUsTUFBTSxDQUFDLGFBQWE7WUFDbkMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxVQUFVO1lBQzdCLFlBQVksRUFBRSxNQUFNLENBQUMsWUFBWTtZQUNqQyxXQUFXLEVBQUUsTUFBTSxDQUFDLFdBQVc7U0FDaEMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBakRELDRCQWlEQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VUb29sLCBUb29sRXhlY3V0ZU9wdGlvbnMsIGZvcm1hdFRvb2xFcnJvciB9IGZyb20gJy4vYmFzZSc7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcy9wcm9taXNlcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuXG5pbnRlcmZhY2UgVGFza1BhcmFtcyB7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIHByb21wdDogc3RyaW5nO1xuICBzdWJhZ2VudF90eXBlOiAnZ2VuZXJhbC1wdXJwb3NlJyB8ICdwbGFuLWFnZW50JyB8ICdleHBsb3JlLWFnZW50JyB8ICdjb2RlLXJldmlld2VyJyB8ICdmcm9udGVuZC10ZXN0ZXInO1xuICB1c2VDb250ZXh0PzogYm9vbGVhbjtcbiAgb3V0cHV0Rm9ybWF0Pzogc3RyaW5nO1xuICBjb25zdHJhaW50cz86IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIFRhc2tUb29sIGV4dGVuZHMgQmFzZVRvb2w8VGFza1BhcmFtcz4ge1xuICBuYW1lID0gJ3Rhc2snO1xuICBkZXNjcmlwdGlvbiA9ICdMYXVuY2ggYSBzcGVjaWFsaXplZCBhZ2VudCB0byBoYW5kbGUgY29tcGxleCwgbXVsdGktc3RlcCB0YXNrcyBhdXRvbm9tb3VzbHkuIEF2YWlsYWJsZSBhZ2VudHM6IGdlbmVyYWwtcHVycG9zZSwgcGxhbi1hZ2VudCwgZXhwbG9yZS1hZ2VudCwgY29kZS1yZXZpZXdlciwgZnJvbnRlbmQtdGVzdGVyJztcbiAgcGFyYW1ldGVycyA9IHtcbiAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICBkZXNjcmlwdGlvbjoge1xuICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdBIHNob3J0ICgzLTUgd29yZCkgZGVzY3JpcHRpb24gb2YgdGhlIHRhc2snXG4gICAgICB9LFxuICAgICAgcHJvbXB0OiB7XG4gICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ1RoZSBkZXRhaWxlZCB0YXNrIGRlc2NyaXB0aW9uIGZvciB0aGUgYWdlbnQnXG4gICAgICB9LFxuICAgICAgc3ViYWdlbnRfdHlwZToge1xuICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgZW51bTogWydnZW5lcmFsLXB1cnBvc2UnLCAncGxhbi1hZ2VudCcsICdleHBsb3JlLWFnZW50JywgJ2NvZGUtcmV2aWV3ZXInLCAnZnJvbnRlbmQtdGVzdGVyJ10sXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnVGhlIHR5cGUgb2Ygc3BlY2lhbGl6ZWQgYWdlbnQgdG8gdXNlJ1xuICAgICAgfSxcbiAgICAgIHVzZUNvbnRleHQ6IHtcbiAgICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ1doZXRoZXIgdG8gaW5jbHVkZSB0aGUgbWFpbiBhZ2VudCBjb250ZXh0J1xuICAgICAgfSxcbiAgICAgIG91dHB1dEZvcm1hdDoge1xuICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdPcHRpb25hbCBvdXRwdXQgZm9ybWF0IHRlbXBsYXRlJ1xuICAgICAgfSxcbiAgICAgIGNvbnN0cmFpbnRzOiB7XG4gICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ09wdGlvbmFsIGNvbnN0cmFpbnRzIG9yIGxpbWl0YXRpb25zJ1xuICAgICAgfVxuICAgIH0sXG4gICAgcmVxdWlyZWQ6IFsnZGVzY3JpcHRpb24nLCAncHJvbXB0JywgJ3N1YmFnZW50X3R5cGUnXVxuICB9O1xuXG4gIGFzeW5jIGV4ZWN1dGUocGFyYW1zOiBUYXNrUGFyYW1zLCBvcHRpb25zPzogVG9vbEV4ZWN1dGVPcHRpb25zKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICB0aGlzLnZhbGlkYXRlUmVxdWlyZWQocGFyYW1zLCBbJ2Rlc2NyaXB0aW9uJywgJ3Byb21wdCcsICdzdWJhZ2VudF90eXBlJ10pO1xuXG4gICAgLy8g6L+U5Zue5Lu75Yqh5L+h5oGv77yM55Sx5LiK5bGC5aSE55CGXG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgIHR5cGU6ICdhZ2VudF90YXNrJyxcbiAgICAgIGRlc2NyaXB0aW9uOiBwYXJhbXMuZGVzY3JpcHRpb24sXG4gICAgICBwcm9tcHQ6IHBhcmFtcy5wcm9tcHQsXG4gICAgICBzdWJhZ2VudF90eXBlOiBwYXJhbXMuc3ViYWdlbnRfdHlwZSxcbiAgICAgIHVzZUNvbnRleHQ6IHBhcmFtcy51c2VDb250ZXh0LFxuICAgICAgb3V0cHV0Rm9ybWF0OiBwYXJhbXMub3V0cHV0Rm9ybWF0LFxuICAgICAgY29uc3RyYWludHM6IHBhcmFtcy5jb25zdHJhaW50c1xuICAgIH0pO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { BaseTool, ToolExecuteOptions } from './base';
|
|
2
|
+
interface WebFetchParams {
|
|
3
|
+
url: string;
|
|
4
|
+
prompt?: string;
|
|
5
|
+
}
|
|
6
|
+
export declare class WebFetchTool extends BaseTool<WebFetchParams> {
|
|
7
|
+
name: string;
|
|
8
|
+
description: string;
|
|
9
|
+
parameters: {
|
|
10
|
+
type: string;
|
|
11
|
+
properties: {
|
|
12
|
+
url: {
|
|
13
|
+
type: string;
|
|
14
|
+
description: string;
|
|
15
|
+
};
|
|
16
|
+
prompt: {
|
|
17
|
+
type: string;
|
|
18
|
+
description: string;
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
required: string[];
|
|
22
|
+
};
|
|
23
|
+
execute(params: WebFetchParams, options?: ToolExecuteOptions): Promise<string>;
|
|
24
|
+
private extractTextFromHtml;
|
|
25
|
+
}
|
|
26
|
+
export {};
|