@push.rocks/smartagent 1.0.2
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/dist_ts/00_commitinfo_data.d.ts +8 -0
- package/dist_ts/00_commitinfo_data.js +9 -0
- package/dist_ts/index.d.ts +10 -0
- package/dist_ts/index.js +18 -0
- package/dist_ts/plugins.d.ts +6 -0
- package/dist_ts/plugins.js +8 -0
- package/dist_ts/smartagent.classes.driveragent.d.ts +70 -0
- package/dist_ts/smartagent.classes.driveragent.js +274 -0
- package/dist_ts/smartagent.classes.dualagent.d.ts +62 -0
- package/dist_ts/smartagent.classes.dualagent.js +298 -0
- package/dist_ts/smartagent.classes.guardianagent.d.ts +46 -0
- package/dist_ts/smartagent.classes.guardianagent.js +201 -0
- package/dist_ts/smartagent.classes.smartagent.d.ts +123 -0
- package/dist_ts/smartagent.classes.smartagent.js +274 -0
- package/dist_ts/smartagent.interfaces.d.ts +165 -0
- package/dist_ts/smartagent.interfaces.js +8 -0
- package/dist_ts/smartagent.tools.base.d.ts +46 -0
- package/dist_ts/smartagent.tools.base.js +45 -0
- package/dist_ts/smartagent.tools.browser.d.ts +16 -0
- package/dist_ts/smartagent.tools.browser.js +177 -0
- package/dist_ts/smartagent.tools.filesystem.d.ts +16 -0
- package/dist_ts/smartagent.tools.filesystem.js +352 -0
- package/dist_ts/smartagent.tools.http.d.ts +15 -0
- package/dist_ts/smartagent.tools.http.js +187 -0
- package/dist_ts/smartagent.tools.shell.d.ts +16 -0
- package/dist_ts/smartagent.tools.shell.js +155 -0
- package/npmextra.json +18 -0
- package/package.json +50 -0
- package/readme.hints.md +16 -0
- package/readme.md +299 -0
- package/ts/00_commitinfo_data.ts +8 -0
- package/ts/index.ts +29 -0
- package/ts/plugins.ts +14 -0
- package/ts/smartagent.classes.driveragent.ts +321 -0
- package/ts/smartagent.classes.dualagent.ts +350 -0
- package/ts/smartagent.classes.guardianagent.ts +241 -0
- package/ts/smartagent.interfaces.ts +210 -0
- package/ts/smartagent.tools.base.ts +80 -0
- package/ts/smartagent.tools.browser.ts +200 -0
- package/ts/smartagent.tools.filesystem.ts +379 -0
- package/ts/smartagent.tools.http.ts +205 -0
- package/ts/smartagent.tools.shell.ts +182 -0
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import * as interfaces from './smartagent.interfaces.js';
|
|
2
|
+
import { BaseToolWrapper } from './smartagent.tools.base.js';
|
|
3
|
+
/**
|
|
4
|
+
* Browser tool for web page interaction
|
|
5
|
+
* Wraps @push.rocks/smartbrowser (Puppeteer-based)
|
|
6
|
+
*/
|
|
7
|
+
export declare class BrowserTool extends BaseToolWrapper {
|
|
8
|
+
name: string;
|
|
9
|
+
description: string;
|
|
10
|
+
actions: interfaces.IToolAction[];
|
|
11
|
+
private smartbrowser;
|
|
12
|
+
initialize(): Promise<void>;
|
|
13
|
+
cleanup(): Promise<void>;
|
|
14
|
+
execute(action: string, params: Record<string, unknown>): Promise<interfaces.IToolExecutionResult>;
|
|
15
|
+
getCallSummary(action: string, params: Record<string, unknown>): string;
|
|
16
|
+
}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
import * as plugins from './plugins.js';
|
|
2
|
+
import * as interfaces from './smartagent.interfaces.js';
|
|
3
|
+
import { BaseToolWrapper } from './smartagent.tools.base.js';
|
|
4
|
+
/**
|
|
5
|
+
* Browser tool for web page interaction
|
|
6
|
+
* Wraps @push.rocks/smartbrowser (Puppeteer-based)
|
|
7
|
+
*/
|
|
8
|
+
export class BrowserTool extends BaseToolWrapper {
|
|
9
|
+
name = 'browser';
|
|
10
|
+
description = 'Interact with web pages - take screenshots, generate PDFs, and execute JavaScript on pages';
|
|
11
|
+
actions = [
|
|
12
|
+
{
|
|
13
|
+
name: 'screenshot',
|
|
14
|
+
description: 'Take a screenshot of a webpage',
|
|
15
|
+
parameters: {
|
|
16
|
+
type: 'object',
|
|
17
|
+
properties: {
|
|
18
|
+
url: { type: 'string', description: 'URL of the page to screenshot' },
|
|
19
|
+
},
|
|
20
|
+
required: ['url'],
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
name: 'pdf',
|
|
25
|
+
description: 'Generate a PDF from a webpage',
|
|
26
|
+
parameters: {
|
|
27
|
+
type: 'object',
|
|
28
|
+
properties: {
|
|
29
|
+
url: { type: 'string', description: 'URL of the page to convert to PDF' },
|
|
30
|
+
},
|
|
31
|
+
required: ['url'],
|
|
32
|
+
},
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
name: 'evaluate',
|
|
36
|
+
description: 'Execute JavaScript code on a webpage and return the result. The script runs in the browser context.',
|
|
37
|
+
parameters: {
|
|
38
|
+
type: 'object',
|
|
39
|
+
properties: {
|
|
40
|
+
url: { type: 'string', description: 'URL of the page to run the script on' },
|
|
41
|
+
script: {
|
|
42
|
+
type: 'string',
|
|
43
|
+
description: 'JavaScript code to execute. Must be a valid expression or statements that return a value.',
|
|
44
|
+
},
|
|
45
|
+
},
|
|
46
|
+
required: ['url', 'script'],
|
|
47
|
+
},
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
name: 'getPageContent',
|
|
51
|
+
description: 'Get the text content and title of a webpage',
|
|
52
|
+
parameters: {
|
|
53
|
+
type: 'object',
|
|
54
|
+
properties: {
|
|
55
|
+
url: { type: 'string', description: 'URL of the page to get content from' },
|
|
56
|
+
},
|
|
57
|
+
required: ['url'],
|
|
58
|
+
},
|
|
59
|
+
},
|
|
60
|
+
];
|
|
61
|
+
smartbrowser;
|
|
62
|
+
async initialize() {
|
|
63
|
+
this.smartbrowser = new plugins.smartbrowser.SmartBrowser();
|
|
64
|
+
await this.smartbrowser.start();
|
|
65
|
+
this.isInitialized = true;
|
|
66
|
+
}
|
|
67
|
+
async cleanup() {
|
|
68
|
+
if (this.smartbrowser) {
|
|
69
|
+
await this.smartbrowser.stop();
|
|
70
|
+
}
|
|
71
|
+
this.isInitialized = false;
|
|
72
|
+
}
|
|
73
|
+
async execute(action, params) {
|
|
74
|
+
this.validateAction(action);
|
|
75
|
+
this.ensureInitialized();
|
|
76
|
+
try {
|
|
77
|
+
switch (action) {
|
|
78
|
+
case 'screenshot': {
|
|
79
|
+
const result = await this.smartbrowser.screenshotFromPage(params.url);
|
|
80
|
+
return {
|
|
81
|
+
success: true,
|
|
82
|
+
result: {
|
|
83
|
+
url: params.url,
|
|
84
|
+
name: result.name,
|
|
85
|
+
id: result.id,
|
|
86
|
+
bufferBase64: Buffer.from(result.buffer).toString('base64'),
|
|
87
|
+
bufferLength: result.buffer.length,
|
|
88
|
+
type: 'screenshot',
|
|
89
|
+
},
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
case 'pdf': {
|
|
93
|
+
const result = await this.smartbrowser.pdfFromPage(params.url);
|
|
94
|
+
return {
|
|
95
|
+
success: true,
|
|
96
|
+
result: {
|
|
97
|
+
url: params.url,
|
|
98
|
+
name: result.name,
|
|
99
|
+
id: result.id,
|
|
100
|
+
bufferBase64: Buffer.from(result.buffer).toString('base64'),
|
|
101
|
+
bufferLength: result.buffer.length,
|
|
102
|
+
type: 'pdf',
|
|
103
|
+
},
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
case 'evaluate': {
|
|
107
|
+
const script = params.script;
|
|
108
|
+
// Create an async function from the script
|
|
109
|
+
// The script should be valid JavaScript that returns a value
|
|
110
|
+
const result = await this.smartbrowser.evaluateOnPage(params.url, async () => {
|
|
111
|
+
// This runs in the browser context
|
|
112
|
+
// We need to evaluate the script string dynamically
|
|
113
|
+
// eslint-disable-next-line no-eval
|
|
114
|
+
return eval(script);
|
|
115
|
+
});
|
|
116
|
+
return {
|
|
117
|
+
success: true,
|
|
118
|
+
result: {
|
|
119
|
+
url: params.url,
|
|
120
|
+
script: script.substring(0, 200) + (script.length > 200 ? '...' : ''),
|
|
121
|
+
evaluationResult: result,
|
|
122
|
+
},
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
case 'getPageContent': {
|
|
126
|
+
const result = await this.smartbrowser.evaluateOnPage(params.url, async () => {
|
|
127
|
+
return {
|
|
128
|
+
title: document.title,
|
|
129
|
+
textContent: document.body?.innerText || '',
|
|
130
|
+
url: window.location.href,
|
|
131
|
+
};
|
|
132
|
+
});
|
|
133
|
+
return {
|
|
134
|
+
success: true,
|
|
135
|
+
result: {
|
|
136
|
+
url: params.url,
|
|
137
|
+
title: result.title,
|
|
138
|
+
textContent: result.textContent.length > 10000
|
|
139
|
+
? result.textContent.substring(0, 10000) + '... [truncated]'
|
|
140
|
+
: result.textContent,
|
|
141
|
+
actualUrl: result.url,
|
|
142
|
+
},
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
default:
|
|
146
|
+
return {
|
|
147
|
+
success: false,
|
|
148
|
+
error: `Unknown action: ${action}`,
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
catch (error) {
|
|
153
|
+
return {
|
|
154
|
+
success: false,
|
|
155
|
+
error: error instanceof Error ? error.message : String(error),
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
getCallSummary(action, params) {
|
|
160
|
+
switch (action) {
|
|
161
|
+
case 'screenshot':
|
|
162
|
+
return `Take screenshot of "${params.url}"`;
|
|
163
|
+
case 'pdf':
|
|
164
|
+
return `Generate PDF from "${params.url}"`;
|
|
165
|
+
case 'evaluate': {
|
|
166
|
+
const script = params.script;
|
|
167
|
+
const preview = script.length > 100 ? script.substring(0, 100) + '...' : script;
|
|
168
|
+
return `Execute JavaScript on "${params.url}": "${preview}"`;
|
|
169
|
+
}
|
|
170
|
+
case 'getPageContent':
|
|
171
|
+
return `Get text content and title from "${params.url}"`;
|
|
172
|
+
default:
|
|
173
|
+
return `Unknown action: ${action}`;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRhZ2VudC50b29scy5icm93c2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvc21hcnRhZ2VudC50b29scy5icm93c2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBQ3hDLE9BQU8sS0FBSyxVQUFVLE1BQU0sNEJBQTRCLENBQUM7QUFDekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRTdEOzs7R0FHRztBQUNILE1BQU0sT0FBTyxXQUFZLFNBQVEsZUFBZTtJQUN2QyxJQUFJLEdBQUcsU0FBUyxDQUFDO0lBQ2pCLFdBQVcsR0FDaEIsNEZBQTRGLENBQUM7SUFFeEYsT0FBTyxHQUE2QjtRQUN6QztZQUNFLElBQUksRUFBRSxZQUFZO1lBQ2xCLFdBQVcsRUFBRSxnQ0FBZ0M7WUFDN0MsVUFBVSxFQUFFO2dCQUNWLElBQUksRUFBRSxRQUFRO2dCQUNkLFVBQVUsRUFBRTtvQkFDVixHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSwrQkFBK0IsRUFBRTtpQkFDdEU7Z0JBQ0QsUUFBUSxFQUFFLENBQUMsS0FBSyxDQUFDO2FBQ2xCO1NBQ0Y7UUFDRDtZQUNFLElBQUksRUFBRSxLQUFLO1lBQ1gsV0FBVyxFQUFFLCtCQUErQjtZQUM1QyxVQUFVLEVBQUU7Z0JBQ1YsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsVUFBVSxFQUFFO29CQUNWLEdBQUcsRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLG1DQUFtQyxFQUFFO2lCQUMxRTtnQkFDRCxRQUFRLEVBQUUsQ0FBQyxLQUFLLENBQUM7YUFDbEI7U0FDRjtRQUNEO1lBQ0UsSUFBSSxFQUFFLFVBQVU7WUFDaEIsV0FBVyxFQUNULHFHQUFxRztZQUN2RyxVQUFVLEVBQUU7Z0JBQ1YsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsVUFBVSxFQUFFO29CQUNWLEdBQUcsRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLHNDQUFzQyxFQUFFO29CQUM1RSxNQUFNLEVBQUU7d0JBQ04sSUFBSSxFQUFFLFFBQVE7d0JBQ2QsV0FBVyxFQUNULDJGQUEyRjtxQkFDOUY7aUJBQ0Y7Z0JBQ0QsUUFBUSxFQUFFLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQzthQUM1QjtTQUNGO1FBQ0Q7WUFDRSxJQUFJLEVBQUUsZ0JBQWdCO1lBQ3RCLFdBQVcsRUFBRSw2Q0FBNkM7WUFDMUQsVUFBVSxFQUFFO2dCQUNWLElBQUksRUFBRSxRQUFRO2dCQUNkLFVBQVUsRUFBRTtvQkFDVixHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxxQ0FBcUMsRUFBRTtpQkFDNUU7Z0JBQ0QsUUFBUSxFQUFFLENBQUMsS0FBSyxDQUFDO2FBQ2xCO1NBQ0Y7S0FDRixDQUFDO0lBRU0sWUFBWSxDQUFxQztJQUVsRCxLQUFLLENBQUMsVUFBVTtRQUNyQixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUM1RCxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7SUFDNUIsQ0FBQztJQUVNLEtBQUssQ0FBQyxPQUFPO1FBQ2xCLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3RCLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNqQyxDQUFDO1FBQ0QsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7SUFDN0IsQ0FBQztJQUVNLEtBQUssQ0FBQyxPQUFPLENBQ2xCLE1BQWMsRUFDZCxNQUErQjtRQUUvQixJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBRXpCLElBQUksQ0FBQztZQUNILFFBQVEsTUFBTSxFQUFFLENBQUM7Z0JBQ2YsS0FBSyxZQUFZLENBQUMsQ0FBQyxDQUFDO29CQUNsQixNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLEdBQWEsQ0FBQyxDQUFDO29CQUNoRixPQUFPO3dCQUNMLE9BQU8sRUFBRSxJQUFJO3dCQUNiLE1BQU0sRUFBRTs0QkFDTixHQUFHLEVBQUUsTUFBTSxDQUFDLEdBQUc7NEJBQ2YsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJOzRCQUNqQixFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUU7NEJBQ2IsWUFBWSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7NEJBQzNELFlBQVksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU07NEJBQ2xDLElBQUksRUFBRSxZQUFZO3lCQUNuQjtxQkFDRixDQUFDO2dCQUNKLENBQUM7Z0JBRUQsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDO29CQUNYLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEdBQWEsQ0FBQyxDQUFDO29CQUN6RSxPQUFPO3dCQUNMLE9BQU8sRUFBRSxJQUFJO3dCQUNiLE1BQU0sRUFBRTs0QkFDTixHQUFHLEVBQUUsTUFBTSxDQUFDLEdBQUc7NEJBQ2YsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJOzRCQUNqQixFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUU7NEJBQ2IsWUFBWSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7NEJBQzNELFlBQVksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU07NEJBQ2xDLElBQUksRUFBRSxLQUFLO3lCQUNaO3FCQUNGLENBQUM7Z0JBQ0osQ0FBQztnQkFFRCxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUM7b0JBQ2hCLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFnQixDQUFDO29CQUN2QywyQ0FBMkM7b0JBQzNDLDZEQUE2RDtvQkFDN0QsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsR0FBYSxFQUFFLEtBQUssSUFBSSxFQUFFO3dCQUNyRixtQ0FBbUM7d0JBQ25DLG9EQUFvRDt3QkFDcEQsbUNBQW1DO3dCQUNuQyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDdEIsQ0FBQyxDQUFDLENBQUM7b0JBRUgsT0FBTzt3QkFDTCxPQUFPLEVBQUUsSUFBSTt3QkFDYixNQUFNLEVBQUU7NEJBQ04sR0FBRyxFQUFFLE1BQU0sQ0FBQyxHQUFHOzRCQUNmLE1BQU0sRUFBRSxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzs0QkFDckUsZ0JBQWdCLEVBQUUsTUFBTTt5QkFDekI7cUJBQ0YsQ0FBQztnQkFDSixDQUFDO2dCQUVELEtBQUssZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO29CQUN0QixNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxHQUFhLEVBQUUsS0FBSyxJQUFJLEVBQUU7d0JBQ3JGLE9BQU87NEJBQ0wsS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLOzRCQUNyQixXQUFXLEVBQUUsUUFBUSxDQUFDLElBQUksRUFBRSxTQUFTLElBQUksRUFBRTs0QkFDM0MsR0FBRyxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSTt5QkFDMUIsQ0FBQztvQkFDSixDQUFDLENBQUMsQ0FBQztvQkFFSCxPQUFPO3dCQUNMLE9BQU8sRUFBRSxJQUFJO3dCQUNiLE1BQU0sRUFBRTs0QkFDTixHQUFHLEVBQUUsTUFBTSxDQUFDLEdBQUc7NEJBQ2YsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLOzRCQUNuQixXQUFXLEVBQ1QsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsS0FBSztnQ0FDL0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxpQkFBaUI7Z0NBQzVELENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVzs0QkFDeEIsU0FBUyxFQUFFLE1BQU0sQ0FBQyxHQUFHO3lCQUN0QjtxQkFDRixDQUFDO2dCQUNKLENBQUM7Z0JBRUQ7b0JBQ0UsT0FBTzt3QkFDTCxPQUFPLEVBQUUsS0FBSzt3QkFDZCxLQUFLLEVBQUUsbUJBQW1CLE1BQU0sRUFBRTtxQkFDbkMsQ0FBQztZQUNOLENBQUM7UUFDSCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE9BQU87Z0JBQ0wsT0FBTyxFQUFFLEtBQUs7Z0JBQ2QsS0FBSyxFQUFFLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7YUFDOUQsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBRU0sY0FBYyxDQUFDLE1BQWMsRUFBRSxNQUErQjtRQUNuRSxRQUFRLE1BQU0sRUFBRSxDQUFDO1lBQ2YsS0FBSyxZQUFZO2dCQUNmLE9BQU8sdUJBQXVCLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQztZQUU5QyxLQUFLLEtBQUs7Z0JBQ1IsT0FBTyxzQkFBc0IsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO1lBRTdDLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQztnQkFDaEIsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQWdCLENBQUM7Z0JBQ3ZDLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztnQkFDaEYsT0FBTywwQkFBMEIsTUFBTSxDQUFDLEdBQUcsT0FBTyxPQUFPLEdBQUcsQ0FBQztZQUMvRCxDQUFDO1lBRUQsS0FBSyxnQkFBZ0I7Z0JBQ25CLE9BQU8sb0NBQW9DLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQztZQUUzRDtnQkFDRSxPQUFPLG1CQUFtQixNQUFNLEVBQUUsQ0FBQztRQUN2QyxDQUFDO0lBQ0gsQ0FBQztDQUNGIn0=
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import * as interfaces from './smartagent.interfaces.js';
|
|
2
|
+
import { BaseToolWrapper } from './smartagent.tools.base.js';
|
|
3
|
+
/**
|
|
4
|
+
* Filesystem tool for file and directory operations
|
|
5
|
+
* Wraps @push.rocks/smartfs
|
|
6
|
+
*/
|
|
7
|
+
export declare class FilesystemTool extends BaseToolWrapper {
|
|
8
|
+
name: string;
|
|
9
|
+
description: string;
|
|
10
|
+
actions: interfaces.IToolAction[];
|
|
11
|
+
private smartfs;
|
|
12
|
+
initialize(): Promise<void>;
|
|
13
|
+
cleanup(): Promise<void>;
|
|
14
|
+
execute(action: string, params: Record<string, unknown>): Promise<interfaces.IToolExecutionResult>;
|
|
15
|
+
getCallSummary(action: string, params: Record<string, unknown>): string;
|
|
16
|
+
}
|
|
@@ -0,0 +1,352 @@
|
|
|
1
|
+
import * as plugins from './plugins.js';
|
|
2
|
+
import * as interfaces from './smartagent.interfaces.js';
|
|
3
|
+
import { BaseToolWrapper } from './smartagent.tools.base.js';
|
|
4
|
+
/**
|
|
5
|
+
* Filesystem tool for file and directory operations
|
|
6
|
+
* Wraps @push.rocks/smartfs
|
|
7
|
+
*/
|
|
8
|
+
export class FilesystemTool extends BaseToolWrapper {
|
|
9
|
+
name = 'filesystem';
|
|
10
|
+
description = 'Read, write, list, and delete files and directories';
|
|
11
|
+
actions = [
|
|
12
|
+
{
|
|
13
|
+
name: 'read',
|
|
14
|
+
description: 'Read the contents of a file',
|
|
15
|
+
parameters: {
|
|
16
|
+
type: 'object',
|
|
17
|
+
properties: {
|
|
18
|
+
path: { type: 'string', description: 'Absolute path to the file' },
|
|
19
|
+
encoding: {
|
|
20
|
+
type: 'string',
|
|
21
|
+
enum: ['utf8', 'binary', 'base64'],
|
|
22
|
+
default: 'utf8',
|
|
23
|
+
description: 'File encoding',
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
required: ['path'],
|
|
27
|
+
},
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
name: 'write',
|
|
31
|
+
description: 'Write content to a file (creates or overwrites)',
|
|
32
|
+
parameters: {
|
|
33
|
+
type: 'object',
|
|
34
|
+
properties: {
|
|
35
|
+
path: { type: 'string', description: 'Absolute path to the file' },
|
|
36
|
+
content: { type: 'string', description: 'Content to write' },
|
|
37
|
+
encoding: {
|
|
38
|
+
type: 'string',
|
|
39
|
+
enum: ['utf8', 'binary', 'base64'],
|
|
40
|
+
default: 'utf8',
|
|
41
|
+
description: 'File encoding',
|
|
42
|
+
},
|
|
43
|
+
},
|
|
44
|
+
required: ['path', 'content'],
|
|
45
|
+
},
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
name: 'append',
|
|
49
|
+
description: 'Append content to a file',
|
|
50
|
+
parameters: {
|
|
51
|
+
type: 'object',
|
|
52
|
+
properties: {
|
|
53
|
+
path: { type: 'string', description: 'Absolute path to the file' },
|
|
54
|
+
content: { type: 'string', description: 'Content to append' },
|
|
55
|
+
},
|
|
56
|
+
required: ['path', 'content'],
|
|
57
|
+
},
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
name: 'list',
|
|
61
|
+
description: 'List files and directories in a path',
|
|
62
|
+
parameters: {
|
|
63
|
+
type: 'object',
|
|
64
|
+
properties: {
|
|
65
|
+
path: { type: 'string', description: 'Directory path to list' },
|
|
66
|
+
recursive: { type: 'boolean', default: false, description: 'List recursively' },
|
|
67
|
+
filter: { type: 'string', description: 'Glob pattern to filter results (e.g., "*.ts")' },
|
|
68
|
+
},
|
|
69
|
+
required: ['path'],
|
|
70
|
+
},
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
name: 'delete',
|
|
74
|
+
description: 'Delete a file or directory',
|
|
75
|
+
parameters: {
|
|
76
|
+
type: 'object',
|
|
77
|
+
properties: {
|
|
78
|
+
path: { type: 'string', description: 'Path to delete' },
|
|
79
|
+
recursive: {
|
|
80
|
+
type: 'boolean',
|
|
81
|
+
default: false,
|
|
82
|
+
description: 'For directories, delete recursively',
|
|
83
|
+
},
|
|
84
|
+
},
|
|
85
|
+
required: ['path'],
|
|
86
|
+
},
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
name: 'exists',
|
|
90
|
+
description: 'Check if a file or directory exists',
|
|
91
|
+
parameters: {
|
|
92
|
+
type: 'object',
|
|
93
|
+
properties: {
|
|
94
|
+
path: { type: 'string', description: 'Path to check' },
|
|
95
|
+
},
|
|
96
|
+
required: ['path'],
|
|
97
|
+
},
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
name: 'stat',
|
|
101
|
+
description: 'Get file or directory statistics (size, dates, etc.)',
|
|
102
|
+
parameters: {
|
|
103
|
+
type: 'object',
|
|
104
|
+
properties: {
|
|
105
|
+
path: { type: 'string', description: 'Path to get stats for' },
|
|
106
|
+
},
|
|
107
|
+
required: ['path'],
|
|
108
|
+
},
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
name: 'copy',
|
|
112
|
+
description: 'Copy a file to a new location',
|
|
113
|
+
parameters: {
|
|
114
|
+
type: 'object',
|
|
115
|
+
properties: {
|
|
116
|
+
source: { type: 'string', description: 'Source file path' },
|
|
117
|
+
destination: { type: 'string', description: 'Destination file path' },
|
|
118
|
+
},
|
|
119
|
+
required: ['source', 'destination'],
|
|
120
|
+
},
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
name: 'move',
|
|
124
|
+
description: 'Move a file to a new location',
|
|
125
|
+
parameters: {
|
|
126
|
+
type: 'object',
|
|
127
|
+
properties: {
|
|
128
|
+
source: { type: 'string', description: 'Source file path' },
|
|
129
|
+
destination: { type: 'string', description: 'Destination file path' },
|
|
130
|
+
},
|
|
131
|
+
required: ['source', 'destination'],
|
|
132
|
+
},
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
name: 'mkdir',
|
|
136
|
+
description: 'Create a directory',
|
|
137
|
+
parameters: {
|
|
138
|
+
type: 'object',
|
|
139
|
+
properties: {
|
|
140
|
+
path: { type: 'string', description: 'Directory path to create' },
|
|
141
|
+
recursive: {
|
|
142
|
+
type: 'boolean',
|
|
143
|
+
default: true,
|
|
144
|
+
description: 'Create parent directories if needed',
|
|
145
|
+
},
|
|
146
|
+
},
|
|
147
|
+
required: ['path'],
|
|
148
|
+
},
|
|
149
|
+
},
|
|
150
|
+
];
|
|
151
|
+
smartfs;
|
|
152
|
+
async initialize() {
|
|
153
|
+
this.smartfs = new plugins.smartfs.SmartFs(new plugins.smartfs.SmartFsProviderNode());
|
|
154
|
+
this.isInitialized = true;
|
|
155
|
+
}
|
|
156
|
+
async cleanup() {
|
|
157
|
+
this.isInitialized = false;
|
|
158
|
+
}
|
|
159
|
+
async execute(action, params) {
|
|
160
|
+
this.validateAction(action);
|
|
161
|
+
this.ensureInitialized();
|
|
162
|
+
try {
|
|
163
|
+
switch (action) {
|
|
164
|
+
case 'read': {
|
|
165
|
+
const encoding = params.encoding || 'utf8';
|
|
166
|
+
const content = await this.smartfs
|
|
167
|
+
.file(params.path)
|
|
168
|
+
.encoding(encoding)
|
|
169
|
+
.read();
|
|
170
|
+
return {
|
|
171
|
+
success: true,
|
|
172
|
+
result: {
|
|
173
|
+
path: params.path,
|
|
174
|
+
content: content.toString(),
|
|
175
|
+
encoding,
|
|
176
|
+
},
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
case 'write': {
|
|
180
|
+
const encoding = params.encoding || 'utf8';
|
|
181
|
+
await this.smartfs
|
|
182
|
+
.file(params.path)
|
|
183
|
+
.encoding(encoding)
|
|
184
|
+
.write(params.content);
|
|
185
|
+
return {
|
|
186
|
+
success: true,
|
|
187
|
+
result: {
|
|
188
|
+
path: params.path,
|
|
189
|
+
written: true,
|
|
190
|
+
bytesWritten: params.content.length,
|
|
191
|
+
},
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
case 'append': {
|
|
195
|
+
await this.smartfs.file(params.path).append(params.content);
|
|
196
|
+
return {
|
|
197
|
+
success: true,
|
|
198
|
+
result: {
|
|
199
|
+
path: params.path,
|
|
200
|
+
appended: true,
|
|
201
|
+
},
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
case 'list': {
|
|
205
|
+
let dir = this.smartfs.directory(params.path);
|
|
206
|
+
if (params.recursive) {
|
|
207
|
+
dir = dir.recursive();
|
|
208
|
+
}
|
|
209
|
+
if (params.filter) {
|
|
210
|
+
dir = dir.filter(params.filter);
|
|
211
|
+
}
|
|
212
|
+
const entries = await dir.list();
|
|
213
|
+
return {
|
|
214
|
+
success: true,
|
|
215
|
+
result: {
|
|
216
|
+
path: params.path,
|
|
217
|
+
entries,
|
|
218
|
+
count: entries.length,
|
|
219
|
+
},
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
case 'delete': {
|
|
223
|
+
const path = params.path;
|
|
224
|
+
// Check if it's a directory or file
|
|
225
|
+
const exists = await this.smartfs.file(path).exists();
|
|
226
|
+
if (exists) {
|
|
227
|
+
// Try to get stats to check if it's a directory
|
|
228
|
+
try {
|
|
229
|
+
const stats = await this.smartfs.file(path).stat();
|
|
230
|
+
if (stats.isDirectory && params.recursive) {
|
|
231
|
+
await this.smartfs.directory(path).recursive().delete();
|
|
232
|
+
}
|
|
233
|
+
else {
|
|
234
|
+
await this.smartfs.file(path).delete();
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
catch {
|
|
238
|
+
await this.smartfs.file(path).delete();
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
return {
|
|
242
|
+
success: true,
|
|
243
|
+
result: {
|
|
244
|
+
path,
|
|
245
|
+
deleted: true,
|
|
246
|
+
},
|
|
247
|
+
};
|
|
248
|
+
}
|
|
249
|
+
case 'exists': {
|
|
250
|
+
const exists = await this.smartfs.file(params.path).exists();
|
|
251
|
+
return {
|
|
252
|
+
success: true,
|
|
253
|
+
result: {
|
|
254
|
+
path: params.path,
|
|
255
|
+
exists,
|
|
256
|
+
},
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
case 'stat': {
|
|
260
|
+
const stats = await this.smartfs.file(params.path).stat();
|
|
261
|
+
return {
|
|
262
|
+
success: true,
|
|
263
|
+
result: {
|
|
264
|
+
path: params.path,
|
|
265
|
+
stats,
|
|
266
|
+
},
|
|
267
|
+
};
|
|
268
|
+
}
|
|
269
|
+
case 'copy': {
|
|
270
|
+
await this.smartfs.file(params.source).copy(params.destination);
|
|
271
|
+
return {
|
|
272
|
+
success: true,
|
|
273
|
+
result: {
|
|
274
|
+
source: params.source,
|
|
275
|
+
destination: params.destination,
|
|
276
|
+
copied: true,
|
|
277
|
+
},
|
|
278
|
+
};
|
|
279
|
+
}
|
|
280
|
+
case 'move': {
|
|
281
|
+
await this.smartfs.file(params.source).move(params.destination);
|
|
282
|
+
return {
|
|
283
|
+
success: true,
|
|
284
|
+
result: {
|
|
285
|
+
source: params.source,
|
|
286
|
+
destination: params.destination,
|
|
287
|
+
moved: true,
|
|
288
|
+
},
|
|
289
|
+
};
|
|
290
|
+
}
|
|
291
|
+
case 'mkdir': {
|
|
292
|
+
let dir = this.smartfs.directory(params.path);
|
|
293
|
+
if (params.recursive !== false) {
|
|
294
|
+
dir = dir.recursive();
|
|
295
|
+
}
|
|
296
|
+
await dir.create();
|
|
297
|
+
return {
|
|
298
|
+
success: true,
|
|
299
|
+
result: {
|
|
300
|
+
path: params.path,
|
|
301
|
+
created: true,
|
|
302
|
+
},
|
|
303
|
+
};
|
|
304
|
+
}
|
|
305
|
+
default:
|
|
306
|
+
return {
|
|
307
|
+
success: false,
|
|
308
|
+
error: `Unknown action: ${action}`,
|
|
309
|
+
};
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
catch (error) {
|
|
313
|
+
return {
|
|
314
|
+
success: false,
|
|
315
|
+
error: error instanceof Error ? error.message : String(error),
|
|
316
|
+
};
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
getCallSummary(action, params) {
|
|
320
|
+
switch (action) {
|
|
321
|
+
case 'read':
|
|
322
|
+
return `Read file "${params.path}" with encoding ${params.encoding || 'utf8'}`;
|
|
323
|
+
case 'write': {
|
|
324
|
+
const content = params.content;
|
|
325
|
+
const preview = content.length > 100 ? content.substring(0, 100) + '...' : content;
|
|
326
|
+
return `Write ${content.length} bytes to "${params.path}". Content preview: "${preview}"`;
|
|
327
|
+
}
|
|
328
|
+
case 'append': {
|
|
329
|
+
const content = params.content;
|
|
330
|
+
const preview = content.length > 100 ? content.substring(0, 100) + '...' : content;
|
|
331
|
+
return `Append ${content.length} bytes to "${params.path}". Content preview: "${preview}"`;
|
|
332
|
+
}
|
|
333
|
+
case 'list':
|
|
334
|
+
return `List directory "${params.path}"${params.recursive ? ' recursively' : ''}${params.filter ? ` with filter "${params.filter}"` : ''}`;
|
|
335
|
+
case 'delete':
|
|
336
|
+
return `Delete "${params.path}"${params.recursive ? ' recursively' : ''}`;
|
|
337
|
+
case 'exists':
|
|
338
|
+
return `Check if "${params.path}" exists`;
|
|
339
|
+
case 'stat':
|
|
340
|
+
return `Get statistics for "${params.path}"`;
|
|
341
|
+
case 'copy':
|
|
342
|
+
return `Copy "${params.source}" to "${params.destination}"`;
|
|
343
|
+
case 'move':
|
|
344
|
+
return `Move "${params.source}" to "${params.destination}"`;
|
|
345
|
+
case 'mkdir':
|
|
346
|
+
return `Create directory "${params.path}"${params.recursive !== false ? ' (with parents)' : ''}`;
|
|
347
|
+
default:
|
|
348
|
+
return `Unknown action: ${action}`;
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRhZ2VudC50b29scy5maWxlc3lzdGVtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvc21hcnRhZ2VudC50b29scy5maWxlc3lzdGVtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBQ3hDLE9BQU8sS0FBSyxVQUFVLE1BQU0sNEJBQTRCLENBQUM7QUFDekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRTdEOzs7R0FHRztBQUNILE1BQU0sT0FBTyxjQUFlLFNBQVEsZUFBZTtJQUMxQyxJQUFJLEdBQUcsWUFBWSxDQUFDO0lBQ3BCLFdBQVcsR0FBRyxxREFBcUQsQ0FBQztJQUVwRSxPQUFPLEdBQTZCO1FBQ3pDO1lBQ0UsSUFBSSxFQUFFLE1BQU07WUFDWixXQUFXLEVBQUUsNkJBQTZCO1lBQzFDLFVBQVUsRUFBRTtnQkFDVixJQUFJLEVBQUUsUUFBUTtnQkFDZCxVQUFVLEVBQUU7b0JBQ1YsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsMkJBQTJCLEVBQUU7b0JBQ2xFLFFBQVEsRUFBRTt3QkFDUixJQUFJLEVBQUUsUUFBUTt3QkFDZCxJQUFJLEVBQUUsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQzt3QkFDbEMsT0FBTyxFQUFFLE1BQU07d0JBQ2YsV0FBVyxFQUFFLGVBQWU7cUJBQzdCO2lCQUNGO2dCQUNELFFBQVEsRUFBRSxDQUFDLE1BQU0sQ0FBQzthQUNuQjtTQUNGO1FBQ0Q7WUFDRSxJQUFJLEVBQUUsT0FBTztZQUNiLFdBQVcsRUFBRSxpREFBaUQ7WUFDOUQsVUFBVSxFQUFFO2dCQUNWLElBQUksRUFBRSxRQUFRO2dCQUNkLFVBQVUsRUFBRTtvQkFDVixJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSwyQkFBMkIsRUFBRTtvQkFDbEUsT0FBTyxF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
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import * as interfaces from './smartagent.interfaces.js';
|
|
2
|
+
import { BaseToolWrapper } from './smartagent.tools.base.js';
|
|
3
|
+
/**
|
|
4
|
+
* HTTP tool for making web requests
|
|
5
|
+
* Wraps @push.rocks/smartrequest
|
|
6
|
+
*/
|
|
7
|
+
export declare class HttpTool extends BaseToolWrapper {
|
|
8
|
+
name: string;
|
|
9
|
+
description: string;
|
|
10
|
+
actions: interfaces.IToolAction[];
|
|
11
|
+
initialize(): Promise<void>;
|
|
12
|
+
cleanup(): Promise<void>;
|
|
13
|
+
execute(action: string, params: Record<string, unknown>): Promise<interfaces.IToolExecutionResult>;
|
|
14
|
+
getCallSummary(action: string, params: Record<string, unknown>): string;
|
|
15
|
+
}
|