@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,94 @@
|
|
|
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.ListDirectoryTool = void 0;
|
|
37
|
+
const base_1 = require("./base");
|
|
38
|
+
const fs = __importStar(require("fs/promises"));
|
|
39
|
+
const path = __importStar(require("path"));
|
|
40
|
+
class ListDirectoryTool extends base_1.BaseTool {
|
|
41
|
+
name = 'list_directory';
|
|
42
|
+
description = 'Lists the names of files and subdirectories directly within a specified directory path.';
|
|
43
|
+
parameters = {
|
|
44
|
+
type: 'object',
|
|
45
|
+
properties: {
|
|
46
|
+
path: {
|
|
47
|
+
type: 'string',
|
|
48
|
+
description: 'The absolute path to the directory to list'
|
|
49
|
+
},
|
|
50
|
+
ignore: {
|
|
51
|
+
type: 'array',
|
|
52
|
+
items: { type: 'string' },
|
|
53
|
+
description: 'List of glob patterns to ignore'
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
required: ['path']
|
|
57
|
+
};
|
|
58
|
+
async execute(params, options) {
|
|
59
|
+
this.validateRequired(params, ['path']);
|
|
60
|
+
const dirPath = params.path;
|
|
61
|
+
const workingDir = options?.workingDirectory || process.cwd();
|
|
62
|
+
const resolvedPath = path.isAbsolute(dirPath) ? dirPath : path.join(workingDir, dirPath);
|
|
63
|
+
try {
|
|
64
|
+
const entries = await fs.readdir(resolvedPath, { withFileTypes: true });
|
|
65
|
+
let items = entries.map(entry => {
|
|
66
|
+
const prefix = entry.isDirectory() ? '📁 ' : '📄 ';
|
|
67
|
+
return prefix + entry.name;
|
|
68
|
+
});
|
|
69
|
+
// Apply ignore patterns if provided
|
|
70
|
+
if (params.ignore && params.ignore.length > 0) {
|
|
71
|
+
const ignorePatterns = params.ignore;
|
|
72
|
+
items = items.filter(item => {
|
|
73
|
+
const name = item.substring(2); // Remove prefix
|
|
74
|
+
return !ignorePatterns.some(pattern => {
|
|
75
|
+
if (pattern.includes('*')) {
|
|
76
|
+
const regex = new RegExp(pattern.replace(/\*/g, '.*'));
|
|
77
|
+
return regex.test(name);
|
|
78
|
+
}
|
|
79
|
+
return name === pattern;
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
if (items.length === 0) {
|
|
84
|
+
return `Directory ${resolvedPath} is empty.`;
|
|
85
|
+
}
|
|
86
|
+
return `Contents of ${resolvedPath}:\n\n${items.join('\n')}`;
|
|
87
|
+
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
return (0, base_1.formatToolError)(error);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
exports.ListDirectoryTool = ListDirectoryTool;
|
|
94
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1kaXJlY3RvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdG9vbHMvbGlzdC1kaXJlY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsaUNBQXVFO0FBQ3ZFLGdEQUFrQztBQUNsQywyQ0FBNkI7QUFPN0IsTUFBYSxpQkFBa0IsU0FBUSxlQUE2QjtJQUNsRSxJQUFJLEdBQUcsZ0JBQWdCLENBQUM7SUFDeEIsV0FBVyxHQUFHLHlGQUF5RixDQUFDO0lBQ3hHLFVBQVUsR0FBRztRQUNYLElBQUksRUFBRSxRQUFRO1FBQ2QsVUFBVSxFQUFFO1lBQ1YsSUFBSSxFQUFFO2dCQUNKLElBQUksRUFBRSxRQUFRO2dCQUNkLFdBQVcsRUFBRSw0Q0FBNEM7YUFDMUQ7WUFDRCxNQUFNLEVBQUU7Z0JBQ04sSUFBSSxFQUFFLE9BQU87Z0JBQ2IsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRTtnQkFDekIsV0FBVyxFQUFFLGlDQUFpQzthQUMvQztTQUNGO1FBQ0QsUUFBUSxFQUFFLENBQUMsTUFBTSxDQUFDO0tBQ25CLENBQUM7SUFFRixLQUFLLENBQUMsT0FBTyxDQUFDLE1BQTJCLEVBQUUsT0FBNEI7UUFDckUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFFeEMsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztRQUM1QixNQUFNLFVBQVUsR0FBRyxPQUFPLEVBQUUsZ0JBQWdCLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzlELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFekYsSUFBSSxDQUFDO1lBQ0gsTUFBTSxPQUFPLEdBQUcsTUFBTSxFQUFFLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBRXhFLElBQUksS0FBSyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQzlCLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7Z0JBQ25ELE9BQU8sTUFBTSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7WUFDN0IsQ0FBQyxDQUFDLENBQUM7WUFFSCxvQ0FBb0M7WUFDcEMsSUFBSSxNQUFNLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUM5QyxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO2dCQUNyQyxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRTtvQkFDMUIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFnQjtvQkFDaEQsT0FBTyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUU7d0JBQ3BDLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDOzRCQUMxQixNQUFNLEtBQUssR0FBRyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDOzRCQUN2RCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7d0JBQzFCLENBQUM7d0JBQ0QsT0FBTyxJQUFJLEtBQUssT0FBTyxDQUFDO29CQUMxQixDQUFDLENBQUMsQ0FBQztnQkFDTCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUM7WUFFRCxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ3ZCLE9BQU8sYUFBYSxZQUFZLFlBQVksQ0FBQztZQUMvQyxDQUFDO1lBRUQsT0FBTyxlQUFlLFlBQVksUUFBUSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDL0QsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixPQUFPLElBQUEsc0JBQWUsRUFBQyxLQUFLLENBQUMsQ0FBQztRQUNoQyxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBMURELDhDQTBEQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VUb29sLCBUb29sRXhlY3V0ZU9wdGlvbnMsIGZvcm1hdFRvb2xFcnJvciB9IGZyb20gJy4vYmFzZSc7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcy9wcm9taXNlcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuXG5pbnRlcmZhY2UgTGlzdERpcmVjdG9yeVBhcmFtcyB7XG4gIHBhdGg6IHN0cmluZztcbiAgaWdub3JlPzogc3RyaW5nW107XG59XG5cbmV4cG9ydCBjbGFzcyBMaXN0RGlyZWN0b3J5VG9vbCBleHRlbmRzIEJhc2VUb29sPExpc3REaXJlY3RvcnlQYXJhbXM+IHtcbiAgbmFtZSA9ICdsaXN0X2RpcmVjdG9yeSc7XG4gIGRlc2NyaXB0aW9uID0gJ0xpc3RzIHRoZSBuYW1lcyBvZiBmaWxlcyBhbmQgc3ViZGlyZWN0b3JpZXMgZGlyZWN0bHkgd2l0aGluIGEgc3BlY2lmaWVkIGRpcmVjdG9yeSBwYXRoLic7XG4gIHBhcmFtZXRlcnMgPSB7XG4gICAgdHlwZTogJ29iamVjdCcsXG4gICAgcHJvcGVydGllczoge1xuICAgICAgcGF0aDoge1xuICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdUaGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgZGlyZWN0b3J5IHRvIGxpc3QnXG4gICAgICB9LFxuICAgICAgaWdub3JlOiB7XG4gICAgICAgIHR5cGU6ICdhcnJheScsXG4gICAgICAgIGl0ZW1zOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnTGlzdCBvZiBnbG9iIHBhdHRlcm5zIHRvIGlnbm9yZSdcbiAgICAgIH1cbiAgICB9LFxuICAgIHJlcXVpcmVkOiBbJ3BhdGgnXVxuICB9O1xuXG4gIGFzeW5jIGV4ZWN1dGUocGFyYW1zOiBMaXN0RGlyZWN0b3J5UGFyYW1zLCBvcHRpb25zPzogVG9vbEV4ZWN1dGVPcHRpb25zKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICB0aGlzLnZhbGlkYXRlUmVxdWlyZWQocGFyYW1zLCBbJ3BhdGgnXSk7XG5cbiAgICBjb25zdCBkaXJQYXRoID0gcGFyYW1zLnBhdGg7XG4gICAgY29uc3Qgd29ya2luZ0RpciA9IG9wdGlvbnM/LndvcmtpbmdEaXJlY3RvcnkgfHwgcHJvY2Vzcy5jd2QoKTtcbiAgICBjb25zdCByZXNvbHZlZFBhdGggPSBwYXRoLmlzQWJzb2x1dGUoZGlyUGF0aCkgPyBkaXJQYXRoIDogcGF0aC5qb2luKHdvcmtpbmdEaXIsIGRpclBhdGgpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGVudHJpZXMgPSBhd2FpdCBmcy5yZWFkZGlyKHJlc29sdmVkUGF0aCwgeyB3aXRoRmlsZVR5cGVzOiB0cnVlIH0pO1xuICAgICAgXG4gICAgICBsZXQgaXRlbXMgPSBlbnRyaWVzLm1hcChlbnRyeSA9PiB7XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IGVudHJ5LmlzRGlyZWN0b3J5KCkgPyAn8J+TgSAnIDogJ/Cfk4QgJztcbiAgICAgICAgcmV0dXJuIHByZWZpeCArIGVudHJ5Lm5hbWU7XG4gICAgICB9KTtcblxuICAgICAgLy8gQXBwbHkgaWdub3JlIHBhdHRlcm5zIGlmIHByb3ZpZGVkXG4gICAgICBpZiAocGFyYW1zLmlnbm9yZSAmJiBwYXJhbXMuaWdub3JlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgaWdub3JlUGF0dGVybnMgPSBwYXJhbXMuaWdub3JlO1xuICAgICAgICBpdGVtcyA9IGl0ZW1zLmZpbHRlcihpdGVtID0+IHtcbiAgICAgICAgICBjb25zdCBuYW1lID0gaXRlbS5zdWJzdHJpbmcoMik7IC8vIFJlbW92ZSBwcmVmaXhcbiAgICAgICAgICByZXR1cm4gIWlnbm9yZVBhdHRlcm5zLnNvbWUocGF0dGVybiA9PiB7XG4gICAgICAgICAgICBpZiAocGF0dGVybi5pbmNsdWRlcygnKicpKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChwYXR0ZXJuLnJlcGxhY2UoL1xcKi9nLCAnLionKSk7XG4gICAgICAgICAgICAgIHJldHVybiByZWdleC50ZXN0KG5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5hbWUgPT09IHBhdHRlcm47XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXRlbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBgRGlyZWN0b3J5ICR7cmVzb2x2ZWRQYXRofSBpcyBlbXB0eS5gO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYENvbnRlbnRzIG9mICR7cmVzb2x2ZWRQYXRofTpcXG5cXG4ke2l0ZW1zLmpvaW4oJ1xcbicpfWA7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiBmb3JtYXRUb29sRXJyb3IoZXJyb3IpO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { BaseTool, ToolExecuteOptions } from './base';
|
|
2
|
+
interface PDFExtractParams {
|
|
3
|
+
file_path: string;
|
|
4
|
+
pages?: string;
|
|
5
|
+
extract_images?: boolean;
|
|
6
|
+
}
|
|
7
|
+
export declare class PDFExtractTool extends BaseTool<PDFExtractParams> {
|
|
8
|
+
name: string;
|
|
9
|
+
description: string;
|
|
10
|
+
parameters: {
|
|
11
|
+
type: string;
|
|
12
|
+
properties: {
|
|
13
|
+
file_path: {
|
|
14
|
+
type: string;
|
|
15
|
+
description: string;
|
|
16
|
+
};
|
|
17
|
+
pages: {
|
|
18
|
+
type: string;
|
|
19
|
+
description: string;
|
|
20
|
+
};
|
|
21
|
+
extract_images: {
|
|
22
|
+
type: string;
|
|
23
|
+
description: string;
|
|
24
|
+
};
|
|
25
|
+
};
|
|
26
|
+
required: string[];
|
|
27
|
+
};
|
|
28
|
+
execute(params: PDFExtractParams, options?: ToolExecuteOptions): Promise<string>;
|
|
29
|
+
private extractSimpleText;
|
|
30
|
+
private formatBytes;
|
|
31
|
+
}
|
|
32
|
+
export {};
|
|
@@ -0,0 +1,130 @@
|
|
|
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.PDFExtractTool = void 0;
|
|
37
|
+
const base_1 = require("./base");
|
|
38
|
+
const fs = __importStar(require("fs/promises"));
|
|
39
|
+
const path = __importStar(require("path"));
|
|
40
|
+
class PDFExtractTool extends base_1.BaseTool {
|
|
41
|
+
name = 'pdf_extract';
|
|
42
|
+
description = 'Extracts text and optionally images from PDF files.';
|
|
43
|
+
parameters = {
|
|
44
|
+
type: 'object',
|
|
45
|
+
properties: {
|
|
46
|
+
file_path: {
|
|
47
|
+
type: 'string',
|
|
48
|
+
description: 'The absolute path to the PDF file'
|
|
49
|
+
},
|
|
50
|
+
pages: {
|
|
51
|
+
type: 'string',
|
|
52
|
+
description: 'Pages to extract (e.g., "1-5" or "1,3,5")'
|
|
53
|
+
},
|
|
54
|
+
extract_images: {
|
|
55
|
+
type: 'boolean',
|
|
56
|
+
description: 'Whether to extract images from the PDF'
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
required: ['file_path']
|
|
60
|
+
};
|
|
61
|
+
async execute(params, options) {
|
|
62
|
+
this.validateRequired(params, ['file_path']);
|
|
63
|
+
const workingDir = options?.workingDirectory || process.cwd();
|
|
64
|
+
const filePath = path.isAbsolute(params.file_path)
|
|
65
|
+
? params.file_path
|
|
66
|
+
: path.join(workingDir, params.file_path);
|
|
67
|
+
try {
|
|
68
|
+
// 检查文件是否存在
|
|
69
|
+
const stats = await fs.stat(filePath);
|
|
70
|
+
if (!stats.isFile()) {
|
|
71
|
+
return `Error: ${filePath} is not a file`;
|
|
72
|
+
}
|
|
73
|
+
// 检查文件扩展名
|
|
74
|
+
const ext = path.extname(filePath).toLowerCase();
|
|
75
|
+
if (ext !== '.pdf') {
|
|
76
|
+
return `Error: ${filePath} is not a PDF file`;
|
|
77
|
+
}
|
|
78
|
+
// 读取PDF文件头
|
|
79
|
+
const buffer = await fs.readFile(filePath);
|
|
80
|
+
const header = buffer.slice(0, 8).toString();
|
|
81
|
+
if (!header.startsWith('%PDF')) {
|
|
82
|
+
return `Error: ${filePath} is not a valid PDF file`;
|
|
83
|
+
}
|
|
84
|
+
// 简单的PDF信息提取(实际项目中应使用专门的PDF库)
|
|
85
|
+
const fileSize = stats.size;
|
|
86
|
+
const textContent = await this.extractSimpleText(buffer);
|
|
87
|
+
let result = `PDF File: ${filePath}
|
|
88
|
+
Size: ${this.formatBytes(fileSize)}
|
|
89
|
+
Pages: Not determined (requires PDF parsing library)
|
|
90
|
+
|
|
91
|
+
Extracted Text Preview:
|
|
92
|
+
${textContent.substring(0, 5000)}${textContent.length > 5000 ? '\n... [truncated]' : ''}`;
|
|
93
|
+
if (params.extract_images) {
|
|
94
|
+
result += '\n\nNote: Image extraction requires additional libraries (pdf2pic, pdf-poppler, etc.)';
|
|
95
|
+
}
|
|
96
|
+
return result;
|
|
97
|
+
}
|
|
98
|
+
catch (error) {
|
|
99
|
+
return (0, base_1.formatToolError)(error);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
async extractSimpleText(buffer) {
|
|
103
|
+
// 非常简单的PDF文本提取(仅用于演示)
|
|
104
|
+
// 实际项目中应使用 pdf-parse 或类似的库
|
|
105
|
+
let text = '';
|
|
106
|
+
const content = buffer.toString('binary');
|
|
107
|
+
// 查找文本流
|
|
108
|
+
const streamRegex = /stream\r?\n([\s\S]*?)\r?\nendstream/g;
|
|
109
|
+
let match;
|
|
110
|
+
while ((match = streamRegex.exec(content)) !== null) {
|
|
111
|
+
const stream = match[1];
|
|
112
|
+
// 尝试提取可打印字符
|
|
113
|
+
const printable = stream.replace(/[^\x20-\x7E\n\r\t]/g, '');
|
|
114
|
+
if (printable.length > 10) {
|
|
115
|
+
text += printable + '\n';
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
return text || 'No extractable text found (PDF may be scanned or encrypted)';
|
|
119
|
+
}
|
|
120
|
+
formatBytes(bytes) {
|
|
121
|
+
if (bytes === 0)
|
|
122
|
+
return '0 Bytes';
|
|
123
|
+
const k = 1024;
|
|
124
|
+
const sizes = ['Bytes', 'KB', 'MB', 'GB'];
|
|
125
|
+
const i = Math.floor(Math.log(bytes) / Math.log(k));
|
|
126
|
+
return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
exports.PDFExtractTool = PDFExtractTool;
|
|
130
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGRmLWV4dHJhY3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdG9vbHMvcGRmLWV4dHJhY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsaUNBQXVFO0FBQ3ZFLGdEQUFrQztBQUNsQywyQ0FBNkI7QUFRN0IsTUFBYSxjQUFlLFNBQVEsZUFBMEI7SUFDNUQsSUFBSSxHQUFHLGFBQWEsQ0FBQztJQUNyQixXQUFXLEdBQUcscURBQXFELENBQUM7SUFDcEUsVUFBVSxHQUFHO1FBQ1gsSUFBSSxFQUFFLFFBQVE7UUFDZCxVQUFVLEVBQUU7WUFDVixTQUFTLEVBQUU7Z0JBQ1QsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsV0FBVyxFQUFFLG1DQUFtQzthQUNqRDtZQUNELEtBQUssRUFBRTtnQkFDTCxJQUFJLEVBQUUsUUFBUTtnQkFDZCxXQUFXLEVBQUUsMkNBQTJDO2FBQ3pEO1lBQ0QsY0FBYyxFQUFFO2dCQUNkLElBQUksRUFBRSxTQUFTO2dCQUNmLFdBQVcsRUFBRSx3Q0FBd0M7YUFDdEQ7U0FDRjtRQUNELFFBQVEsRUFBRSxDQUFDLFdBQVcsQ0FBQztLQUN4QixDQUFDO0lBRUYsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUF3QixFQUFFLE9BQTRCO1FBQ2xFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBRTdDLE1BQU0sVUFBVSxHQUFHLE9BQU8sRUFBRSxnQkFBZ0IsSUFBSSxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDOUQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO1lBQ2hELENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUztZQUNsQixDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxD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QUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEQsT0FBTyxVQUFVLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFFLENBQUM7Q0FDRjtBQXRHRCx3Q0FzR0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlVG9vbCwgVG9vbEV4ZWN1dGVPcHRpb25zLCBmb3JtYXRUb29sRXJyb3IgfSBmcm9tICcuL2Jhc2UnO1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMvcHJvbWlzZXMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcblxuaW50ZXJmYWNlIFBERkV4dHJhY3RQYXJhbXMge1xuICBmaWxlX3BhdGg6IHN0cmluZztcbiAgcGFnZXM/OiBzdHJpbmc7IC8vIGUuZy4sIFwiMS01XCIgb3IgXCIxLDMsNVwiXG4gIGV4dHJhY3RfaW1hZ2VzPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNsYXNzIFBERkV4dHJhY3RUb29sIGV4dGVuZHMgQmFzZVRvb2w8UERGRXh0cmFjdFBhcmFtcz4ge1xuICBuYW1lID0gJ3BkZl9leHRyYWN0JztcbiAgZGVzY3JpcHRpb24gPSAnRXh0cmFjdHMgdGV4dCBhbmQgb3B0aW9uYWxseSBpbWFnZXMgZnJvbSBQREYgZmlsZXMuJztcbiAgcGFyYW1ldGVycyA9IHtcbiAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICBmaWxlX3BhdGg6IHtcbiAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnVGhlIGFic29sdXRlIHBhdGggdG8gdGhlIFBERiBmaWxlJ1xuICAgICAgfSxcbiAgICAgIHBhZ2VzOiB7XG4gICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ1BhZ2VzIHRvIGV4dHJhY3QgKGUuZy4sIFwiMS01XCIgb3IgXCIxLDMsNVwiKSdcbiAgICAgIH0sXG4gICAgICBleHRyYWN0X2ltYWdlczoge1xuICAgICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnV2hldGhlciB0byBleHRyYWN0IGltYWdlcyBmcm9tIHRoZSBQREYnXG4gICAgICB9XG4gICAgfSxcbiAgICByZXF1aXJlZDogWydmaWxlX3BhdGgnXVxuICB9O1xuXG4gIGFzeW5jIGV4ZWN1dGUocGFyYW1zOiBQREZFeHRyYWN0UGFyYW1zLCBvcHRpb25zPzogVG9vbEV4ZWN1dGVPcHRpb25zKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICB0aGlzLnZhbGlkYXRlUmVxdWlyZWQocGFyYW1zLCBbJ2ZpbGVfcGF0aCddKTtcblxuICAgIGNvbnN0IHdvcmtpbmdEaXIgPSBvcHRpb25zPy53b3JraW5nRGlyZWN0b3J5IHx8IHByb2Nlc3MuY3dkKCk7XG4gICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLmlzQWJzb2x1dGUocGFyYW1zLmZpbGVfcGF0aCkgXG4gICAgICA/IHBhcmFtcy5maWxlX3BhdGggXG4gICAgICA6IHBhdGguam9pbih3b3JraW5nRGlyLCBwYXJhbXMuZmlsZV9wYXRoKTtcblxuICAgIHRyeSB7XG4gICAgICAvLyDmo4Dmn6Xmlofku7bmmK/lkKblrZjlnKhcbiAgICAgIGNvbnN0IHN0YXRzID0gYXdhaXQgZnMuc3RhdChmaWxlUGF0aCk7XG4gICAgICBpZiAoIXN0YXRzLmlzRmlsZSgpKSB7XG4gICAgICAgIHJldHVybiBgRXJyb3I6ICR7ZmlsZVBhdGh9IGlzIG5vdCBhIGZpbGVgO1xuICAgICAgfVxuXG4gICAgICAvLyDmo4Dmn6Xmlofku7bmianlsZXlkI1cbiAgICAgIGNvbnN0IGV4dCA9IHBhdGguZXh0bmFtZShmaWxlUGF0aCkudG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmIChleHQgIT09ICcucGRmJykge1xuICAgICAgICByZXR1cm4gYEVycm9yOiAke2ZpbGVQYXRofSBpcyBub3QgYSBQREYgZmlsZWA7XG4gICAgICB9XG5cbiAgICAgIC8vIOivu+WPllBERuaWh+S7tuWktFxuICAgICAgY29uc3QgYnVmZmVyID0gYXdhaXQgZnMucmVhZEZpbGUoZmlsZVBhdGgpO1xuICAgICAgY29uc3QgaGVhZGVyID0gYnVmZmVyLnNsaWNlKDAsIDgpLnRvU3RyaW5nKCk7XG4gICAgICBcbiAgICAgIGlmICghaGVhZGVyLnN0YXJ0c1dpdGgoJyVQREYnKSkge1xuICAgICAgICByZXR1cm4gYEVycm9yOiAke2ZpbGVQYXRofSBpcyBub3QgYSB2YWxpZCBQREYgZmlsZWA7XG4gICAgICB9XG5cbiAgICAgIC8vIOeugOWNleeahFBERuS/oeaBr+aPkOWPlu+8iOWunumZhemhueebruS4reW6lOS9v+eUqOS4k+mXqOeahFBERuW6k++8iVxuICAgICAgY29uc3QgZmlsZVNpemUgPSBzdGF0cy5zaXplO1xuICAgICAgY29uc3QgdGV4dENvbnRlbnQgPSBhd2FpdCB0aGlzLmV4dHJhY3RTaW1wbGVUZXh0KGJ1ZmZlcik7XG5cbiAgICAgIGxldCByZXN1bHQgPSBgUERGIEZpbGU6ICR7ZmlsZVBhdGh9XG5TaXplOiAke3RoaXMuZm9ybWF0Qnl0ZXMoZmlsZVNpemUpfVxuUGFnZXM6IE5vdCBkZXRlcm1pbmVkIChyZXF1aXJlcyBQREYgcGFyc2luZyBsaWJyYXJ5KVxuXG5FeHRyYWN0ZWQgVGV4dCBQcmV2aWV3OlxuJHt0ZXh0Q29udGVudC5zdWJzdHJpbmcoMCwgNTAwMCl9JHt0ZXh0Q29udGVudC5sZW5ndGggPiA1MDAwID8gJ1xcbi4uLiBbdHJ1bmNhdGVkXScgOiAnJ31gO1xuXG4gICAgICBpZiAocGFyYW1zLmV4dHJhY3RfaW1hZ2VzKSB7XG4gICAgICAgIHJlc3VsdCArPSAnXFxuXFxuTm90ZTogSW1hZ2UgZXh0cmFjdGlvbiByZXF1aXJlcyBhZGRpdGlvbmFsIGxpYnJhcmllcyAocGRmMnBpYywgcGRmLXBvcHBsZXIsIGV0Yy4pJztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcblxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4gZm9ybWF0VG9vbEVycm9yKGVycm9yKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGV4dHJhY3RTaW1wbGVUZXh0KGJ1ZmZlcjogQnVmZmVyKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAvLyDpnZ7luLjnroDljZXnmoRQREbmlofmnKzmj5Dlj5bvvIjku4XnlKjkuo7mvJTnpLrvvIlcbiAgICAvLyDlrp7pmYXpobnnm67kuK3lupTkvb/nlKggcGRmLXBhcnNlIOaIluexu+S8vOeahOW6k1xuICAgIGxldCB0ZXh0ID0gJyc7XG4gICAgY29uc3QgY29udGVudCA9IGJ1ZmZlci50b1N0cmluZygnYmluYXJ5Jyk7XG4gICAgXG4gICAgLy8g5p+l5om+5paH5pys5rWBXG4gICAgY29uc3Qgc3RyZWFtUmVnZXggPSAvc3RyZWFtXFxyP1xcbihbXFxzXFxTXSo/KVxccj9cXG5lbmRzdHJlYW0vZztcbiAgICBsZXQgbWF0Y2g7XG4gICAgXG4gICAgd2hpbGUgKChtYXRjaCA9IHN0cmVhbVJlZ2V4LmV4ZWMoY29udGVudCkpICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBzdHJlYW0gPSBtYXRjaFsxXTtcbiAgICAgIC8vIOWwneivleaPkOWPluWPr+aJk+WNsOWtl+esplxuICAgICAgY29uc3QgcHJpbnRhYmxlID0gc3RyZWFtLnJlcGxhY2UoL1teXFx4MjAtXFx4N0VcXG5cXHJcXHRdL2csICcnKTtcbiAgICAgIGlmIChwcmludGFibGUubGVuZ3RoID4gMTApIHtcbiAgICAgICAgdGV4dCArPSBwcmludGFibGUgKyAnXFxuJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGV4dCB8fCAnTm8gZXh0cmFjdGFibGUgdGV4dCBmb3VuZCAoUERGIG1heSBiZSBzY2FubmVkIG9yIGVuY3J5cHRlZCknO1xuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRCeXRlcyhieXRlczogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBpZiAoYnl0ZXMgPT09IDApIHJldHVybiAnMCBCeXRlcyc7XG4gICAgY29uc3QgayA9IDEwMjQ7XG4gICAgY29uc3Qgc2l6ZXMgPSBbJ0J5dGVzJywgJ0tCJywgJ01CJywgJ0dCJ107XG4gICAgY29uc3QgaSA9IE1hdGguZmxvb3IoTWF0aC5sb2coYnl0ZXMpIC8gTWF0aC5sb2coaykpO1xuICAgIHJldHVybiBwYXJzZUZsb2F0KChieXRlcyAvIE1hdGgucG93KGssIGkpKS50b0ZpeGVkKDIpKSArICcgJyArIHNpemVzW2ldO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { BaseTool, ToolExecuteOptions } from './base';
|
|
2
|
+
interface ReadFileParams {
|
|
3
|
+
absolute_path: string;
|
|
4
|
+
offset?: number;
|
|
5
|
+
limit?: number;
|
|
6
|
+
}
|
|
7
|
+
export declare class ReadFileTool extends BaseTool<ReadFileParams> {
|
|
8
|
+
name: string;
|
|
9
|
+
description: string;
|
|
10
|
+
parameters: {
|
|
11
|
+
type: string;
|
|
12
|
+
properties: {
|
|
13
|
+
absolute_path: {
|
|
14
|
+
type: string;
|
|
15
|
+
description: string;
|
|
16
|
+
};
|
|
17
|
+
offset: {
|
|
18
|
+
type: string;
|
|
19
|
+
description: string;
|
|
20
|
+
};
|
|
21
|
+
limit: {
|
|
22
|
+
type: string;
|
|
23
|
+
description: string;
|
|
24
|
+
};
|
|
25
|
+
};
|
|
26
|
+
required: string[];
|
|
27
|
+
};
|
|
28
|
+
execute(params: ReadFileParams, options?: ToolExecuteOptions): Promise<string>;
|
|
29
|
+
private getMimeType;
|
|
30
|
+
}
|
|
31
|
+
export {};
|
|
@@ -0,0 +1,116 @@
|
|
|
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.ReadFileTool = void 0;
|
|
37
|
+
const base_1 = require("./base");
|
|
38
|
+
const fs = __importStar(require("fs/promises"));
|
|
39
|
+
const path = __importStar(require("path"));
|
|
40
|
+
class ReadFileTool extends base_1.BaseTool {
|
|
41
|
+
name = 'read_file';
|
|
42
|
+
description = 'Reads and returns the content of a specified file from the local filesystem. Handles text files, images, PDF files, and more. For text files, it can read specific line ranges.';
|
|
43
|
+
parameters = {
|
|
44
|
+
type: 'object',
|
|
45
|
+
properties: {
|
|
46
|
+
absolute_path: {
|
|
47
|
+
type: 'string',
|
|
48
|
+
description: 'The absolute path to the file to read'
|
|
49
|
+
},
|
|
50
|
+
offset: {
|
|
51
|
+
type: 'number',
|
|
52
|
+
description: 'Optional: For text files, the 0-based line number to start reading from'
|
|
53
|
+
},
|
|
54
|
+
limit: {
|
|
55
|
+
type: 'number',
|
|
56
|
+
description: 'Optional: For text files, maximum number of lines to read'
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
required: ['absolute_path']
|
|
60
|
+
};
|
|
61
|
+
async execute(params, options) {
|
|
62
|
+
this.validateRequired(params, ['absolute_path']);
|
|
63
|
+
const filePath = params.absolute_path;
|
|
64
|
+
const workingDir = options?.workingDirectory || process.cwd();
|
|
65
|
+
const resolvedPath = path.isAbsolute(filePath) ? filePath : path.join(workingDir, filePath);
|
|
66
|
+
try {
|
|
67
|
+
const stats = await fs.stat(resolvedPath);
|
|
68
|
+
if (stats.isDirectory()) {
|
|
69
|
+
return `Error: ${resolvedPath} is a directory, not a file. Use list_directory instead.`;
|
|
70
|
+
}
|
|
71
|
+
// Check file type
|
|
72
|
+
const ext = path.extname(resolvedPath).toLowerCase();
|
|
73
|
+
const imageExts = ['.png', '.jpg', '.jpeg', '.gif', '.webp', '.svg', '.bmp'];
|
|
74
|
+
if (imageExts.includes(ext)) {
|
|
75
|
+
// For images, return base64 info
|
|
76
|
+
const buffer = await fs.readFile(resolvedPath);
|
|
77
|
+
const base64 = buffer.toString('base64');
|
|
78
|
+
const mimeType = this.getMimeType(ext);
|
|
79
|
+
return `Image file: ${resolvedPath}\nBase64 data: data:${mimeType};base64,${base64.substring(0, 100)}...\n[Base64 data too long to display, use image_read tool for full content]`;
|
|
80
|
+
}
|
|
81
|
+
// Read as text
|
|
82
|
+
const content = await fs.readFile(resolvedPath, 'utf-8');
|
|
83
|
+
const lines = content.split('\n');
|
|
84
|
+
if (params.offset !== undefined || params.limit !== undefined) {
|
|
85
|
+
const offset = params.offset || 0;
|
|
86
|
+
const limit = params.limit || lines.length - offset;
|
|
87
|
+
const selectedLines = lines.slice(offset, offset + limit);
|
|
88
|
+
return selectedLines.join('\n');
|
|
89
|
+
}
|
|
90
|
+
// Limit output for very large files
|
|
91
|
+
if (content.length > 100000) {
|
|
92
|
+
const truncatedLines = lines.slice(0, 500);
|
|
93
|
+
return truncatedLines.join('\n') +
|
|
94
|
+
`\n\n... [File truncated, showing first 500 lines of ${lines.length} total lines]`;
|
|
95
|
+
}
|
|
96
|
+
return content;
|
|
97
|
+
}
|
|
98
|
+
catch (error) {
|
|
99
|
+
return (0, base_1.formatToolError)(error);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
getMimeType(ext) {
|
|
103
|
+
const mimeTypes = {
|
|
104
|
+
'.png': 'image/png',
|
|
105
|
+
'.jpg': 'image/jpeg',
|
|
106
|
+
'.jpeg': 'image/jpeg',
|
|
107
|
+
'.gif': 'image/gif',
|
|
108
|
+
'.webp': 'image/webp',
|
|
109
|
+
'.svg': 'image/svg+xml',
|
|
110
|
+
'.bmp': 'image/bmp'
|
|
111
|
+
};
|
|
112
|
+
return mimeTypes[ext] || 'application/octet-stream';
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
exports.ReadFileTool = ReadFileTool;
|
|
116
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhZC1maWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rvb2xzL3JlYWQtZmlsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxpQ0FBdUU7QUFDdkUsZ0RBQWtDO0FBQ2xDLDJDQUE2QjtBQVE3QixNQUFhLFlBQWEsU0FBUSxlQUF3QjtJQUN4RCxJQUFJLEdBQUcsV0FBVyxDQUFDO0lBQ25CLFdBQVcsR0FBRyxpTEFBaUwsQ0FBQztJQUNoTSxVQUFVLEdBQUc7UUFDWCxJQUFJLEVBQUUsUUFBUTtRQUNkLFVBQVUsRUFBRTtZQUNWLGFBQWEsRUFBRTtnQkFDYixJQUFJLEVBQUUsUUFBUTtnQkFDZCxXQUFXLEVBQUUsdUNBQXVDO2FBQ3JEO1lBQ0QsTUFBTSxFQUFFO2dCQUNOLElBQUksRUFBRSxRQUFRO2dCQUNkLFdBQVcsRUFBRSx5RUFBeUU7YUFDdkY7WUFDRCxLQUFLLEVBQUU7Z0JBQ0wsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsV0FBVyxFQUFFLDJEQUEyRDthQUN6RTtTQUNGO1FBQ0QsUUFBUSxFQUFFLENBQUMsZUFBZSxDQUFDO0tBQzVCLENBQUM7SUFFRixLQUFLLENBQUMsT0FBTyxDQUFDLE1BQXNCLEVBQUUsT0FBNEI7UUFDaEUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7UUFFakQsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQztRQUN0QyxNQUFNLFVBQVUsR0FBRyxPQUFPLEVBQUUsZ0JBQWdCLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzlELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsUUFBUSxD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aW1wb3J0IHsgQmFzZVRvb2wsIFRvb2xFeGVjdXRlT3B0aW9ucywgZm9ybWF0VG9vbEVycm9yIH0gZnJvbSAnLi9iYXNlJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzL3Byb21pc2VzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5cbmludGVyZmFjZSBSZWFkRmlsZVBhcmFtcyB7XG4gIGFic29sdXRlX3BhdGg6IHN0cmluZztcbiAgb2Zmc2V0PzogbnVtYmVyO1xuICBsaW1pdD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGNsYXNzIFJlYWRGaWxlVG9vbCBleHRlbmRzIEJhc2VUb29sPFJlYWRGaWxlUGFyYW1zPiB7XG4gIG5hbWUgPSAncmVhZF9maWxlJztcbiAgZGVzY3JpcHRpb24gPSAnUmVhZHMgYW5kIHJldHVybnMgdGhlIGNvbnRlbnQgb2YgYSBzcGVjaWZpZWQgZmlsZSBmcm9tIHRoZSBsb2NhbCBmaWxlc3lzdGVtLiBIYW5kbGVzIHRleHQgZmlsZXMsIGltYWdlcywgUERGIGZpbGVzLCBhbmQgbW9yZS4gRm9yIHRleHQgZmlsZXMsIGl0IGNhbiByZWFkIHNwZWNpZmljIGxpbmUgcmFuZ2VzLic7XG4gIHBhcmFtZXRlcnMgPSB7XG4gICAgdHlwZTogJ29iamVjdCcsXG4gICAgcHJvcGVydGllczoge1xuICAgICAgYWJzb2x1dGVfcGF0aDoge1xuICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdUaGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgZmlsZSB0byByZWFkJ1xuICAgICAgfSxcbiAgICAgIG9mZnNldDoge1xuICAgICAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdPcHRpb25hbDogRm9yIHRleHQgZmlsZXMsIHRoZSAwLWJhc2VkIGxpbmUgbnVtYmVyIHRvIHN0YXJ0IHJlYWRpbmcgZnJvbSdcbiAgICAgIH0sXG4gICAgICBsaW1pdDoge1xuICAgICAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdPcHRpb25hbDogRm9yIHRleHQgZmlsZXMsIG1heGltdW0gbnVtYmVyIG9mIGxpbmVzIHRvIHJlYWQnXG4gICAgICB9XG4gICAgfSxcbiAgICByZXF1aXJlZDogWydhYnNvbHV0ZV9wYXRoJ11cbiAgfTtcblxuICBhc3luYyBleGVjdXRlKHBhcmFtczogUmVhZEZpbGVQYXJhbXMsIG9wdGlvbnM/OiBUb29sRXhlY3V0ZU9wdGlvbnMpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHRoaXMudmFsaWRhdGVSZXF1aXJlZChwYXJhbXMsIFsnYWJzb2x1dGVfcGF0aCddKTtcblxuICAgIGNvbnN0IGZpbGVQYXRoID0gcGFyYW1zLmFic29sdXRlX3BhdGg7XG4gICAgY29uc3Qgd29ya2luZ0RpciA9IG9wdGlvbnM/LndvcmtpbmdEaXJlY3RvcnkgfHwgcHJvY2Vzcy5jd2QoKTtcbiAgICBjb25zdCByZXNvbHZlZFBhdGggPSBwYXRoLmlzQWJzb2x1dGUoZmlsZVBhdGgpID8gZmlsZVBhdGggOiBwYXRoLmpvaW4od29ya2luZ0RpciwgZmlsZVBhdGgpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0YXRzID0gYXdhaXQgZnMuc3RhdChyZXNvbHZlZFBhdGgpO1xuICAgICAgXG4gICAgICBpZiAoc3RhdHMuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICByZXR1cm4gYEVycm9yOiAke3Jlc29sdmVkUGF0aH0gaXMgYSBkaXJlY3RvcnksIG5vdCBhIGZpbGUuIFVzZSBsaXN0X2RpcmVjdG9yeSBpbnN0ZWFkLmA7XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGZpbGUgdHlwZVxuICAgICAgY29uc3QgZXh0ID0gcGF0aC5leHRuYW1lKHJlc29sdmVkUGF0aCkudG9Mb3dlckNhc2UoKTtcbiAgICAgIGNvbnN0IGltYWdlRXh0cyA9IFsnLnBuZycsICcuanBnJywgJy5qcGVnJywgJy5naWYnLCAnLndlYnAnLCAnLnN2ZycsICcuYm1wJ107XG4gICAgICBcbiAgICAgIGlmIChpbWFnZUV4dHMuaW5jbHVkZXMoZXh0KSkge1xuICAgICAgICAvLyBGb3IgaW1hZ2VzLCByZXR1cm4gYmFzZTY0IGluZm9cbiAgICAgICAgY29uc3QgYnVmZmVyID0gYXdhaXQgZnMucmVhZEZpbGUocmVzb2x2ZWRQYXRoKTtcbiAgICAgICAgY29uc3QgYmFzZTY0ID0gYnVmZmVyLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgICAgICAgY29uc3QgbWltZVR5cGUgPSB0aGlzLmdldE1pbWVUeXBlKGV4dCk7XG4gICAgICAgIHJldHVybiBgSW1hZ2UgZmlsZTogJHtyZXNvbHZlZFBhdGh9XFxuQmFzZTY0IGRhdGE6IGRhdGE6JHttaW1lVHlwZX07YmFzZTY0LCR7YmFzZTY0LnN1YnN0cmluZygwLCAxMDApfS4uLlxcbltCYXNlNjQgZGF0YSB0b28gbG9uZyB0byBkaXNwbGF5LCB1c2UgaW1hZ2VfcmVhZCB0b29sIGZvciBmdWxsIGNvbnRlbnRdYDtcbiAgICAgIH1cblxuICAgICAgLy8gUmVhZCBhcyB0ZXh0XG4gICAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgZnMucmVhZEZpbGUocmVzb2x2ZWRQYXRoLCAndXRmLTgnKTtcbiAgICAgIGNvbnN0IGxpbmVzID0gY29udGVudC5zcGxpdCgnXFxuJyk7XG5cbiAgICAgIGlmIChwYXJhbXMub2Zmc2V0ICE9PSB1bmRlZmluZWQgfHwgcGFyYW1zLmxpbWl0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gcGFyYW1zLm9mZnNldCB8fCAwO1xuICAgICAgICBjb25zdCBsaW1pdCA9IHBhcmFtcy5saW1pdCB8fCBsaW5lcy5sZW5ndGggLSBvZmZzZXQ7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkTGluZXMgPSBsaW5lcy5zbGljZShvZmZzZXQsIG9mZnNldCArIGxpbWl0KTtcbiAgICAgICAgcmV0dXJuIHNlbGVjdGVkTGluZXMuam9pbignXFxuJyk7XG4gICAgICB9XG5cbiAgICAgIC8vIExpbWl0IG91dHB1dCBmb3IgdmVyeSBsYXJnZSBmaWxlc1xuICAgICAgaWYgKGNvbnRlbnQubGVuZ3RoID4gMTAwMDAwKSB7XG4gICAgICAgIGNvbnN0IHRydW5jYXRlZExpbmVzID0gbGluZXMuc2xpY2UoMCwgNTAwKTtcbiAgICAgICAgcmV0dXJuIHRydW5jYXRlZExpbmVzLmpvaW4oJ1xcbicpICsgXG4gICAgICAgICAgYFxcblxcbi4uLiBbRmlsZSB0cnVuY2F0ZWQsIHNob3dpbmcgZmlyc3QgNTAwIGxpbmVzIG9mICR7bGluZXMubGVuZ3RofSB0b3RhbCBsaW5lc11gO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGVudDtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIGZvcm1hdFRvb2xFcnJvcihlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRNaW1lVHlwZShleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgbWltZVR5cGVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgJy5wbmcnOiAnaW1hZ2UvcG5nJyxcbiAgICAgICcuanBnJzogJ2ltYWdlL2pwZWcnLFxuICAgICAgJy5qcGVnJzogJ2ltYWdlL2pwZWcnLFxuICAgICAgJy5naWYnOiAnaW1hZ2UvZ2lmJyxcbiAgICAgICcud2VicCc6ICdpbWFnZS93ZWJwJyxcbiAgICAgICcuc3ZnJzogJ2ltYWdlL3N2Zyt4bWwnLFxuICAgICAgJy5ibXAnOiAnaW1hZ2UvYm1wJ1xuICAgIH07XG4gICAgcmV0dXJuIG1pbWVUeXBlc1tleHRdIHx8ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { BaseTool, ToolExecuteOptions } from './base';
|
|
2
|
+
interface ReplaceParams {
|
|
3
|
+
file_path: string;
|
|
4
|
+
old_string: string;
|
|
5
|
+
new_string: string;
|
|
6
|
+
instruction?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare class ReplaceTool extends BaseTool<ReplaceParams> {
|
|
9
|
+
name: string;
|
|
10
|
+
description: string;
|
|
11
|
+
parameters: {
|
|
12
|
+
type: string;
|
|
13
|
+
properties: {
|
|
14
|
+
file_path: {
|
|
15
|
+
type: string;
|
|
16
|
+
description: string;
|
|
17
|
+
};
|
|
18
|
+
old_string: {
|
|
19
|
+
type: string;
|
|
20
|
+
description: string;
|
|
21
|
+
};
|
|
22
|
+
new_string: {
|
|
23
|
+
type: string;
|
|
24
|
+
description: string;
|
|
25
|
+
};
|
|
26
|
+
instruction: {
|
|
27
|
+
type: string;
|
|
28
|
+
description: string;
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
required: string[];
|
|
32
|
+
};
|
|
33
|
+
execute(params: ReplaceParams, options?: ToolExecuteOptions): Promise<string>;
|
|
34
|
+
}
|
|
35
|
+
export {};
|
|
@@ -0,0 +1,93 @@
|
|
|
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.ReplaceTool = void 0;
|
|
37
|
+
const base_1 = require("./base");
|
|
38
|
+
const fs = __importStar(require("fs/promises"));
|
|
39
|
+
const path = __importStar(require("path"));
|
|
40
|
+
class ReplaceTool extends base_1.BaseTool {
|
|
41
|
+
name = 'replace';
|
|
42
|
+
description = 'Replaces text within a file. Requires exact matching of the old_string.';
|
|
43
|
+
parameters = {
|
|
44
|
+
type: 'object',
|
|
45
|
+
properties: {
|
|
46
|
+
file_path: {
|
|
47
|
+
type: 'string',
|
|
48
|
+
description: 'The absolute path to the file to modify'
|
|
49
|
+
},
|
|
50
|
+
old_string: {
|
|
51
|
+
type: 'string',
|
|
52
|
+
description: 'The exact literal text to replace'
|
|
53
|
+
},
|
|
54
|
+
new_string: {
|
|
55
|
+
type: 'string',
|
|
56
|
+
description: 'The exact literal text to replace with'
|
|
57
|
+
},
|
|
58
|
+
instruction: {
|
|
59
|
+
type: 'string',
|
|
60
|
+
description: 'Detailed instruction of what needs to be changed'
|
|
61
|
+
}
|
|
62
|
+
},
|
|
63
|
+
required: ['file_path', 'old_string', 'new_string']
|
|
64
|
+
};
|
|
65
|
+
async execute(params, options) {
|
|
66
|
+
this.validateRequired(params, ['file_path', 'old_string', 'new_string']);
|
|
67
|
+
const workingDir = options?.workingDirectory || process.cwd();
|
|
68
|
+
const filePath = path.isAbsolute(params.file_path)
|
|
69
|
+
? params.file_path
|
|
70
|
+
: path.join(workingDir, params.file_path);
|
|
71
|
+
try {
|
|
72
|
+
const content = await fs.readFile(filePath, 'utf-8');
|
|
73
|
+
// Check if old_string exists
|
|
74
|
+
if (!content.includes(params.old_string)) {
|
|
75
|
+
return `Error: The old_string was not found in ${filePath}. Please read the file first to ensure exact matching.`;
|
|
76
|
+
}
|
|
77
|
+
// Check for multiple occurrences
|
|
78
|
+
const occurrences = content.split(params.old_string).length - 1;
|
|
79
|
+
if (occurrences > 1) {
|
|
80
|
+
return `Error: Found ${occurrences} occurrences of old_string. The old_string must uniquely identify a single instance. Please include more context to make it unique.`;
|
|
81
|
+
}
|
|
82
|
+
// Perform replacement
|
|
83
|
+
const newContent = content.replace(params.old_string, params.new_string);
|
|
84
|
+
await fs.writeFile(filePath, newContent, 'utf-8');
|
|
85
|
+
return `Successfully replaced text in ${filePath}`;
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
return (0, base_1.formatToolError)(error);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
exports.ReplaceTool = ReplaceTool;
|
|
93
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwbGFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90b29scy9yZXBsYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGlDQUF1RTtBQUN2RSxnREFBa0M7QUFDbEMsMkNBQTZCO0FBUzdCLE1BQWEsV0FBWSxTQUFRLGVBQXVCO0lBQ3RELElBQUksR0FBRyxTQUFTLENBQUM7SUFDakIsV0FBVyxHQUFHLHlFQUF5RSxDQUFDO0lBQ3hGLFVBQVUsR0FBRztRQUNYLElBQUksRUFBRSxRQUFRO1FBQ2QsVUFBVSxFQUFFO1lBQ1YsU0FBUyxFQUFFO2dCQUNULElBQUksRUFBRSxRQUFRO2dCQUNkLFdBQVcsRUFBRSx5Q0FBeUM7YUFDdkQ7WUFDRCxVQUFVLEVBQUU7Z0JBQ1YsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsV0FBVyxFQUFFLG1DQUFtQzthQUNqRDtZQUNELFVBQVUsRUFBRTtnQkFDVixJQUFJLEVBQUUsUUFBUTtnQkFDZCxXQUFXLEVBQUUsd0NBQXdDO2FBQ3REO1lBQ0QsV0FBVyxFQUFFO2dCQUNYLElBQUksRUFBRSxRQUFRO2dCQUNkLFdBQVcsRUFBRSxrREFBa0Q7YUFDaEU7U0FDRjtRQUNELFFBQVEsRUFBRSxDQUFDLFdBQVcsRUFBRSxZQUFZLEVBQUUsWUFBWSxDQUFDO0tBQ3BELENBQUM7SUFFRixLQUFLLENBQUMsT0FBTyxDQUFDLE1BQXFCLEVBQUUsT0FBNEI7UUFDL0QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxDQUFDLFdBQVcsRUFBRSxZQUFZLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQztRQUV6RSxNQUFNLFVBQVUsR0FBRyxPQUFPLEVBQUUsZ0JBQWdCLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzlELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQztZQUNoRCxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVM7WUFDbEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUU1QyxJQUFJLENBQUM7WUFDSCxNQUFNLE9BQU8sR0FBRyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBRXJELDZCQUE2QjtZQUM3QixJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztnQkFDekMsT0FBTywwQ0FBMEMsUUFBUSx3REFBd0QsQ0FBQztZQUNwSCxDQUFDO1lBRUQsaUNBQWlDO1lBQ2pDLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDaEUsSUFBSSxXQUFXLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3BCLE9BQU8sZ0JBQWdCLFdBQVcscUlBQXFJLENBQUM7WUFDMUssQ0FBQztZQUVELHNCQUFzQjtZQUN0QixNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3pFLE1BQU0sRUFBRSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBRWxELE9BQU8saUNBQWlDLFFBQVEsRUFBRSxDQUFDO1FBQ3JELENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsT0FBTyxJQUFBLHNCQUFlLEVBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEMsQ0FBQztJQUNILENBQUM7Q0FDRjtBQXpERCxrQ0F5REMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlVG9vbCwgVG9vbEV4ZWN1dGVPcHRpb25zLCBmb3JtYXRUb29sRXJyb3IgfSBmcm9tICcuL2Jhc2UnO1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMvcHJvbWlzZXMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcblxuaW50ZXJmYWNlIFJlcGxhY2VQYXJhbXMge1xuICBmaWxlX3BhdGg6IHN0cmluZztcbiAgb2xkX3N0cmluZzogc3RyaW5nO1xuICBuZXdfc3RyaW5nOiBzdHJpbmc7XG4gIGluc3RydWN0aW9uPzogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgUmVwbGFjZVRvb2wgZXh0ZW5kcyBCYXNlVG9vbDxSZXBsYWNlUGFyYW1zPiB7XG4gIG5hbWUgPSAncmVwbGFjZSc7XG4gIGRlc2NyaXB0aW9uID0gJ1JlcGxhY2VzIHRleHQgd2l0aGluIGEgZmlsZS4gUmVxdWlyZXMgZXhhY3QgbWF0Y2hpbmcgb2YgdGhlIG9sZF9zdHJpbmcuJztcbiAgcGFyYW1ldGVycyA9IHtcbiAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICBmaWxlX3BhdGg6IHtcbiAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnVGhlIGFic29sdXRlIHBhdGggdG8gdGhlIGZpbGUgdG8gbW9kaWZ5J1xuICAgICAgfSxcbiAgICAgIG9sZF9zdHJpbmc6IHtcbiAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnVGhlIGV4YWN0IGxpdGVyYWwgdGV4dCB0byByZXBsYWNlJ1xuICAgICAgfSxcbiAgICAgIG5ld19zdHJpbmc6IHtcbiAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnVGhlIGV4YWN0IGxpdGVyYWwgdGV4dCB0byByZXBsYWNlIHdpdGgnXG4gICAgICB9LFxuICAgICAgaW5zdHJ1Y3Rpb246IHtcbiAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnRGV0YWlsZWQgaW5zdHJ1Y3Rpb24gb2Ygd2hhdCBuZWVkcyB0byBiZSBjaGFuZ2VkJ1xuICAgICAgfVxuICAgIH0sXG4gICAgcmVxdWlyZWQ6IFsnZmlsZV9wYXRoJywgJ29sZF9zdHJpbmcnLCAnbmV3X3N0cmluZyddXG4gIH07XG5cbiAgYXN5bmMgZXhlY3V0ZShwYXJhbXM6IFJlcGxhY2VQYXJhbXMsIG9wdGlvbnM/OiBUb29sRXhlY3V0ZU9wdGlvbnMpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHRoaXMudmFsaWRhdGVSZXF1aXJlZChwYXJhbXMsIFsnZmlsZV9wYXRoJywgJ29sZF9zdHJpbmcnLCAnbmV3X3N0cmluZyddKTtcblxuICAgIGNvbnN0IHdvcmtpbmdEaXIgPSBvcHRpb25zPy53b3JraW5nRGlyZWN0b3J5IHx8IHByb2Nlc3MuY3dkKCk7XG4gICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLmlzQWJzb2x1dGUocGFyYW1zLmZpbGVfcGF0aCkgXG4gICAgICA/IHBhcmFtcy5maWxlX3BhdGggXG4gICAgICA6IHBhdGguam9pbih3b3JraW5nRGlyLCBwYXJhbXMuZmlsZV9wYXRoKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgZnMucmVhZEZpbGUoZmlsZVBhdGgsICd1dGYtOCcpO1xuXG4gICAgICAvLyBDaGVjayBpZiBvbGRfc3RyaW5nIGV4aXN0c1xuICAgICAgaWYgKCFjb250ZW50LmluY2x1ZGVzKHBhcmFtcy5vbGRfc3RyaW5nKSkge1xuICAgICAgICByZXR1cm4gYEVycm9yOiBUaGUgb2xkX3N0cmluZyB3YXMgbm90IGZvdW5kIGluICR7ZmlsZVBhdGh9LiBQbGVhc2UgcmVhZCB0aGUgZmlsZSBmaXJzdCB0byBlbnN1cmUgZXhhY3QgbWF0Y2hpbmcuYDtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgZm9yIG11bHRpcGxlIG9jY3VycmVuY2VzXG4gICAgICBjb25zdCBvY2N1cnJlbmNlcyA9IGNvbnRlbnQuc3BsaXQocGFyYW1zLm9sZF9zdHJpbmcpLmxlbmd0aCAtIDE7XG4gICAgICBpZiAob2NjdXJyZW5jZXMgPiAxKSB7XG4gICAgICAgIHJldHVybiBgRXJyb3I6IEZvdW5kICR7b2NjdXJyZW5jZXN9IG9jY3VycmVuY2VzIG9mIG9sZF9zdHJpbmcuIFRoZSBvbGRfc3RyaW5nIG11c3QgdW5pcXVlbHkgaWRlbnRpZnkgYSBzaW5nbGUgaW5zdGFuY2UuIFBsZWFzZSBpbmNsdWRlIG1vcmUgY29udGV4dCB0byBtYWtlIGl0IHVuaXF1ZS5gO1xuICAgICAgfVxuXG4gICAgICAvLyBQZXJmb3JtIHJlcGxhY2VtZW50XG4gICAgICBjb25zdCBuZXdDb250ZW50ID0gY29udGVudC5yZXBsYWNlKHBhcmFtcy5vbGRfc3RyaW5nLCBwYXJhbXMubmV3X3N0cmluZyk7XG4gICAgICBhd2FpdCBmcy53cml0ZUZpbGUoZmlsZVBhdGgsIG5ld0NvbnRlbnQsICd1dGYtOCcpO1xuXG4gICAgICByZXR1cm4gYFN1Y2Nlc3NmdWxseSByZXBsYWNlZCB0ZXh0IGluICR7ZmlsZVBhdGh9YDtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIGZvcm1hdFRvb2xFcnJvcihlcnJvcik7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { BaseTool, ToolExecuteOptions } from './base';
|
|
2
|
+
interface RunShellCommandParams {
|
|
3
|
+
command: string;
|
|
4
|
+
description?: string;
|
|
5
|
+
timeout?: number;
|
|
6
|
+
run_in_bg?: boolean;
|
|
7
|
+
}
|
|
8
|
+
export declare class RunShellCommandTool extends BaseTool<RunShellCommandParams> {
|
|
9
|
+
name: string;
|
|
10
|
+
description: string;
|
|
11
|
+
parameters: {
|
|
12
|
+
type: string;
|
|
13
|
+
properties: {
|
|
14
|
+
command: {
|
|
15
|
+
type: string;
|
|
16
|
+
description: string;
|
|
17
|
+
};
|
|
18
|
+
description: {
|
|
19
|
+
type: string;
|
|
20
|
+
description: string;
|
|
21
|
+
};
|
|
22
|
+
timeout: {
|
|
23
|
+
type: string;
|
|
24
|
+
description: string;
|
|
25
|
+
};
|
|
26
|
+
run_in_bg: {
|
|
27
|
+
type: string;
|
|
28
|
+
description: string;
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
required: string[];
|
|
32
|
+
};
|
|
33
|
+
execute(params: RunShellCommandParams, options?: ToolExecuteOptions): Promise<string>;
|
|
34
|
+
}
|
|
35
|
+
export {};
|