psadk 1.1.22 → 1.1.24
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/build/main/lib/PSAI.d.ts +1 -1
- package/build/main/lib/PSAI.js +52 -41
- package/build/main/lib/PSAgent.js +1 -1
- package/build/main/lib/PSAgentConfig.d.ts +5 -5
- package/build/main/lib/PSAgentLogger.js +3 -3
- package/build/main/lib/PSAgentTask.js +1 -1
- package/build/main/lib/PSAgentTool.d.ts +4 -4
- package/build/main/lib/PSAgentTool.js +11 -11
- package/build/main/lib/tools/BraveWebSearchTool.d.ts +2 -2
- package/build/main/lib/tools/BraveWebSearchTool.js +20 -18
- package/build/main/lib/tools/PSArtifactTool.d.ts +1 -1
- package/build/main/lib/tools/PSArtifactTool.js +25 -25
- package/build/main/lib/tools/PSCommandLineTool.d.ts +2 -2
- package/build/main/lib/tools/PSCommandLineTool.js +22 -21
- package/build/main/lib/tools/PSMemoryTool.d.ts +2 -2
- package/build/main/lib/tools/PSMemoryTool.js +93 -65
- package/build/main/lib/tools/PSReadFileTool.d.ts +2 -2
- package/build/main/lib/tools/PSReadFileTool.js +13 -11
- package/build/main/lib/tools/PSSubAgentTool.d.ts +4 -4
- package/build/main/lib/tools/PSSubAgentTool.js +50 -47
- package/build/main/lib/tools/TodoTool.d.ts +2 -2
- package/build/main/lib/tools/TodoTool.js +45 -41
- package/build/main/lib/utils/helpers.js +5 -3
- package/build/module/lib/PSAI.d.ts +1 -1
- package/build/module/lib/PSAI.js +53 -42
- package/build/module/lib/PSAgent.js +1 -1
- package/build/module/lib/PSAgentConfig.d.ts +5 -5
- package/build/module/lib/PSAgentLogger.js +3 -3
- package/build/module/lib/PSAgentTask.js +1 -1
- package/build/module/lib/PSAgentTool.d.ts +4 -4
- package/build/module/lib/PSAgentTool.js +11 -11
- package/build/module/lib/tools/BraveWebSearchTool.d.ts +2 -2
- package/build/module/lib/tools/BraveWebSearchTool.js +20 -18
- package/build/module/lib/tools/PSArtifactTool.d.ts +1 -1
- package/build/module/lib/tools/PSArtifactTool.js +25 -25
- package/build/module/lib/tools/PSCommandLineTool.d.ts +2 -2
- package/build/module/lib/tools/PSCommandLineTool.js +22 -21
- package/build/module/lib/tools/PSMemoryTool.d.ts +2 -2
- package/build/module/lib/tools/PSMemoryTool.js +93 -65
- package/build/module/lib/tools/PSReadFileTool.d.ts +2 -2
- package/build/module/lib/tools/PSReadFileTool.js +13 -11
- package/build/module/lib/tools/PSSubAgentTool.d.ts +4 -4
- package/build/module/lib/tools/PSSubAgentTool.js +50 -47
- package/build/module/lib/tools/TodoTool.d.ts +2 -2
- package/build/module/lib/tools/TodoTool.js +45 -41
- package/build/module/lib/utils/helpers.js +5 -3
- package/package.json +11 -11
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import z from
|
|
2
|
-
import { PSAgentLogger } from
|
|
1
|
+
import z from 'zod/v4';
|
|
2
|
+
import { PSAgentLogger } from './PSAgentLogger';
|
|
3
3
|
export interface IPSAgentToolResult {
|
|
4
4
|
error: Error | null;
|
|
5
5
|
result?: Record<string, any>;
|
|
@@ -17,7 +17,7 @@ export declare class PSAgentTool {
|
|
|
17
17
|
private hitl;
|
|
18
18
|
private inputschema;
|
|
19
19
|
private runCallback?;
|
|
20
|
-
constructor({ name, description, type, local_execution, hitl, inputschema, runCallback }: {
|
|
20
|
+
constructor({ name, description, type, local_execution, hitl, inputschema, runCallback, }: {
|
|
21
21
|
name: string;
|
|
22
22
|
description: string;
|
|
23
23
|
type?: string;
|
|
@@ -47,7 +47,7 @@ export declare class PSAgentTool {
|
|
|
47
47
|
get Inputs(): IPSAgentToolInput;
|
|
48
48
|
set Inputs(value: IPSAgentToolInput);
|
|
49
49
|
run(input: Record<string, any>, log?: PSAgentLogger): Promise<Record<string, any>>;
|
|
50
|
-
static LocalTool({ name, description, requestschema, runCallback }: {
|
|
50
|
+
static LocalTool({ name, description, requestschema, runCallback, }: {
|
|
51
51
|
name: string;
|
|
52
52
|
description: string;
|
|
53
53
|
requestschema: z.core.JSONSchema.BaseSchema;
|
|
@@ -9,20 +9,20 @@ class PSAgentTool {
|
|
|
9
9
|
hitl;
|
|
10
10
|
inputschema;
|
|
11
11
|
runCallback;
|
|
12
|
-
constructor({ name, description, type =
|
|
12
|
+
constructor({ name, description, type = 'API', local_execution = true, hitl = true, inputschema, runCallback, }) {
|
|
13
13
|
this.name = name;
|
|
14
14
|
this.description = description;
|
|
15
15
|
this.type = type;
|
|
16
16
|
this.local_execution = local_execution;
|
|
17
17
|
this.hitl = {
|
|
18
18
|
required: hitl,
|
|
19
|
-
interrupt:
|
|
20
|
-
level: 0
|
|
19
|
+
interrupt: 'before',
|
|
20
|
+
level: 0,
|
|
21
21
|
};
|
|
22
22
|
this.inputschema = inputschema;
|
|
23
23
|
if (runCallback) {
|
|
24
|
-
if (typeof runCallback !==
|
|
25
|
-
throw new Error(
|
|
24
|
+
if (typeof runCallback !== 'function') {
|
|
25
|
+
throw new Error('executionFn must be a function');
|
|
26
26
|
}
|
|
27
27
|
this.runCallback = runCallback;
|
|
28
28
|
}
|
|
@@ -65,27 +65,27 @@ class PSAgentTool {
|
|
|
65
65
|
}
|
|
66
66
|
run(input, log) {
|
|
67
67
|
if (!this.runCallback) {
|
|
68
|
-
throw new Error(
|
|
68
|
+
throw new Error('run callback function is not defined for this tool');
|
|
69
69
|
}
|
|
70
70
|
return this.runCallback(input, log);
|
|
71
71
|
}
|
|
72
|
-
static LocalTool({ name, description, requestschema, runCallback }) {
|
|
72
|
+
static LocalTool({ name, description, requestschema, runCallback, }) {
|
|
73
73
|
return new PSAgentTool({
|
|
74
74
|
name,
|
|
75
75
|
description,
|
|
76
|
-
type:
|
|
76
|
+
type: 'API',
|
|
77
77
|
local_execution: true,
|
|
78
78
|
hitl: true,
|
|
79
79
|
inputschema: {
|
|
80
80
|
//title: `${name}_inputs.`,
|
|
81
81
|
//description: `Inputs for ${name} tool.`,
|
|
82
82
|
url: `http://localhost/${name}`,
|
|
83
|
-
method:
|
|
83
|
+
method: 'POST',
|
|
84
84
|
requestBody: requestschema,
|
|
85
85
|
},
|
|
86
|
-
runCallback
|
|
86
|
+
runCallback,
|
|
87
87
|
});
|
|
88
88
|
}
|
|
89
89
|
}
|
|
90
90
|
exports.PSAgentTool = PSAgentTool;
|
|
91
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
91
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUFNBZ2VudFRvb2wuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL1BTQWdlbnRUb29sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQWtCQSxNQUFhLFdBQVc7SUFDZCxJQUFJLENBQVM7SUFDYixXQUFXLENBQVM7SUFDcEIsSUFBSSxDQUFTO0lBQ2IsZUFBZSxDQUFVO0lBQ3pCLElBQUksQ0FJVjtJQUNNLFdBQVcsQ0FBb0I7SUFDL0IsV0FBVyxDQUdlO0lBRWxDLFlBQVksRUFDVixJQUFJLEVBQ0osV0FBVyxFQUNYLElBQUksR0FBRyxLQUFLLEVBQ1osZUFBZSxHQUFHLElBQUksRUFDdEIsSUFBSSxHQUFHLElBQUksRUFDWCxXQUFXLEVBQ1gsV0FBVyxHQVlaO1FBQ0MsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7UUFDL0IsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLGVBQWUsR0FBRyxlQUFlLENBQUM7UUFDdkMsSUFBSSxDQUFDLElBQUksR0FBRztZQUNWLFFBQVEsRUFBRSxJQUFJO1lBQ2QsU0FBUyxFQUFFLFFBQVE7WUFDbkIsS0FBSyxFQUFFLENBQUM7U0FDVCxDQUFDO1FBQ0YsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7UUFDL0IsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUNoQixJQUFJLE9BQU8sV0FBVyxLQUFLLFVBQVUsRUFBRSxDQUFDO2dCQUN0QyxNQUFNLElBQUksS0FBSyxDQUFDLGdDQUFnQyxDQUFDLENBQUM7WUFDcEQsQ0FBQztZQUNELElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO1FBQ2pDLENBQUM7SUFDSCxDQUFDO0lBQ0QsSUFBVyxJQUFJO1FBQ2IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ25CLENBQUM7SUFDRCxJQUFXLElBQUksQ0FBQyxLQUFhO1FBQzNCLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFDRCxJQUFXLFdBQVc7UUFDcEIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7SUFDRCxJQUFXLFdBQVcsQ0FBQyxLQUFhO1FBQ2xDLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO0lBQzNCLENBQUM7SUFDRCxJQUFXLElBQUk7UUFDYixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDbkIsQ0FBQztJQUNELElBQVcsSUFBSSxDQUFDLEtBQWE7UUFDM0IsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7SUFDcEIsQ0FBQztJQUNELElBQVcsY0FBYztRQUN2QixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDOUIsQ0FBQztJQUNELElBQVcsY0FBYyxDQUFDLEtBQWM7UUFDdEMsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7SUFDL0IsQ0FBQztJQUNELElBQVcsSUFBSTtRQUNiLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztJQUNuQixDQUFDO0lBQ0QsSUFBVyxJQUFJLENBQUMsS0FJZjtRQUNDLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFDRCxJQUFXLE1BQU07UUFDZixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQUNELElBQVcsTUFBTSxDQUFDLEtBQXdCO1FBQ3hDLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO0lBQzNCLENBQUM7SUFFTSxHQUFHLENBQ1IsS0FBMEIsRUFDMUIsR0FBbUI7UUFFbkIsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN0QixNQUFNLElBQUksS0FBSyxDQUFDLG9EQUFvRCxDQUFDLENBQUM7UUFDeEUsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVNLE1BQU0sQ0FBQyxTQUFTLENBQUMsRUFDdEIsSUFBSSxFQUNKLFdBQVcsRUFDWCxhQUFhLEVBQ2IsV0FBVyxHQVNaO1FBQ0MsT0FBTyxJQUFJLFdBQVcsQ0FBQztZQUNyQixJQUFJO1lBQ0osV0FBVztZQUNYLElBQUksRUFBRSxLQUFLO1lBQ1gsZUFBZSxFQUFFLElBQUk7WUFDckIsSUFBSSxFQUFFLElBQUk7WUFDVixXQUFXLEVBQUU7Z0JBQ1gsMkJBQTJCO2dCQUMzQiwwQ0FBMEM7Z0JBQzFDLEdBQUcsRUFBRSxvQkFBb0IsSUFBSSxFQUFFO2dCQUMvQixNQUFNLEVBQUUsTUFBTTtnQkFDZCxXQUFXLEVBQUUsYUFBYTthQUMzQjtZQUNELFdBQVc7U0FDWixDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUF0SUQsa0NBc0lDIn0=
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { PSAgentLogger } from
|
|
2
|
-
import { PSAgentTool } from
|
|
1
|
+
import { PSAgentLogger } from '../PSAgentLogger';
|
|
2
|
+
import { PSAgentTool } from '../PSAgentTool';
|
|
3
3
|
export declare class BraveWebSearchTool extends PSAgentTool {
|
|
4
4
|
static readonly toolName = "search_web_with_brave";
|
|
5
5
|
braveSearchApiKey?: string;
|
|
@@ -5,27 +5,29 @@ exports.BraveWebSearchTool = void 0;
|
|
|
5
5
|
const v4_1 = require("zod/v4");
|
|
6
6
|
const PSAgentTool_1 = require("../PSAgentTool");
|
|
7
7
|
class BraveWebSearchTool extends PSAgentTool_1.PSAgentTool {
|
|
8
|
-
static toolName =
|
|
8
|
+
static toolName = 'search_web_with_brave';
|
|
9
9
|
braveSearchApiKey;
|
|
10
10
|
constructor(options) {
|
|
11
11
|
super({
|
|
12
12
|
name: BraveWebSearchTool.toolName,
|
|
13
|
-
description:
|
|
14
|
-
type:
|
|
13
|
+
description: 'searches the web for the given query.',
|
|
14
|
+
type: 'API',
|
|
15
15
|
local_execution: true,
|
|
16
16
|
hitl: true,
|
|
17
17
|
inputschema: {
|
|
18
18
|
url: `http://localhost/${BraveWebSearchTool.toolName}`,
|
|
19
|
-
method:
|
|
20
|
-
requestBody: v4_1.z.toJSONSchema(v4_1.z
|
|
19
|
+
method: 'POST',
|
|
20
|
+
requestBody: v4_1.z.toJSONSchema(v4_1.z
|
|
21
|
+
.object({
|
|
21
22
|
query: v4_1.z.url().meta({
|
|
22
|
-
title:
|
|
23
|
-
description:
|
|
23
|
+
title: 'search query',
|
|
24
|
+
description: 'The query to search the web for.',
|
|
24
25
|
}),
|
|
25
|
-
})
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
26
|
+
})
|
|
27
|
+
.meta({
|
|
28
|
+
title: 'search_request_body',
|
|
29
|
+
description: 'The request body parameters for the search tool.',
|
|
30
|
+
}), { io: 'input' }),
|
|
29
31
|
},
|
|
30
32
|
});
|
|
31
33
|
this.braveSearchApiKey = options.braveSearchApiKey;
|
|
@@ -37,12 +39,12 @@ class BraveWebSearchTool extends PSAgentTool_1.PSAgentTool {
|
|
|
37
39
|
count: '10',
|
|
38
40
|
text_decorations: 'false',
|
|
39
41
|
result_filter: 'web',
|
|
40
|
-
summary: '1'
|
|
42
|
+
summary: '1',
|
|
41
43
|
});
|
|
42
44
|
const response = await fetch(`https://api.search.brave.com/res/v1/web/search?${params}`, {
|
|
43
45
|
method: 'get',
|
|
44
46
|
headers: {
|
|
45
|
-
|
|
47
|
+
Accept: 'application/json',
|
|
46
48
|
'Accept-Encoding': 'gzip',
|
|
47
49
|
'x-subscription-token': this.braveSearchApiKey || process.env.BRAVE_SEARCH_API_KEY || '',
|
|
48
50
|
},
|
|
@@ -58,13 +60,13 @@ class BraveWebSearchTool extends PSAgentTool_1.PSAgentTool {
|
|
|
58
60
|
return output;
|
|
59
61
|
}
|
|
60
62
|
catch (error) {
|
|
61
|
-
console.error(
|
|
63
|
+
console.error('Error in bravewebsearch:', error);
|
|
62
64
|
throw error;
|
|
63
65
|
}
|
|
64
66
|
}
|
|
65
67
|
run(input, log) {
|
|
66
|
-
if (!input.query || typeof input.query !==
|
|
67
|
-
throw new Error(
|
|
68
|
+
if (!input.query || typeof input.query !== 'string') {
|
|
69
|
+
throw new Error('Invalid query provided.');
|
|
68
70
|
}
|
|
69
71
|
return new Promise((resolve, reject) => {
|
|
70
72
|
try {
|
|
@@ -72,7 +74,7 @@ class BraveWebSearchTool extends PSAgentTool_1.PSAgentTool {
|
|
|
72
74
|
const output = this.bravewebsearch(input.query);
|
|
73
75
|
return resolve({
|
|
74
76
|
status: 'success',
|
|
75
|
-
output
|
|
77
|
+
output,
|
|
76
78
|
});
|
|
77
79
|
}
|
|
78
80
|
catch (error) {
|
|
@@ -87,4 +89,4 @@ class BraveWebSearchTool extends PSAgentTool_1.PSAgentTool {
|
|
|
87
89
|
}
|
|
88
90
|
}
|
|
89
91
|
exports.BraveWebSearchTool = BraveWebSearchTool;
|
|
90
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
92
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQnJhdmVXZWJTZWFyY2hUb29sLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi90b29scy9CcmF2ZVdlYlNlYXJjaFRvb2wudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsdURBQXVEO0FBQ3ZELCtCQUEyQjtBQUczQixnREFBNkM7QUFFN0MsTUFBYSxrQkFBbUIsU0FBUSx5QkFBVztJQUMxQyxNQUFNLENBQVUsUUFBUSxHQUFHLHVCQUF1QixDQUFDO0lBQzFELGlCQUFpQixDQUFVO0lBQzNCLFlBQVksT0FBdUM7UUFDakQsS0FBSyxDQUFDO1lBQ0osSUFBSSxFQUFFLGtCQUFrQixDQUFDLFFBQVE7WUFDakMsV0FBVyxFQUFFLHVDQUF1QztZQUNwRCxJQUFJLEVBQUUsS0FBSztZQUNYLGVBQWUsRUFBRSxJQUFJO1lBQ3JCLElBQUksRUFBRSxJQUFJO1lBQ1YsV0FBVyxFQUFFO2dCQUNYLEdBQUcsRUFBRSxvQkFBb0Isa0JBQWtCLENBQUMsUUFBUSxFQUFFO2dCQUN0RCxNQUFNLEVBQUUsTUFBTTtnQkFDZCxXQUFXLEVBQUUsTUFBQyxDQUFDLFlBQVksQ0FDekIsTUFBQztxQkFDRSxNQUFNLENBQUM7b0JBQ04sS0FBSyxFQUFFLE1BQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7d0JBQ2xCLEtBQUssRUFBRSxjQUFjO3dCQUNyQixXQUFXLEVBQUUsa0NBQWtDO3FCQUNoRCxDQUFDO2lCQUNILENBQUM7cUJBQ0QsSUFBSSxDQUFDO29CQUNKLEtBQUssRUFBRSxxQkFBcUI7b0JBQzVCLFdBQVcsRUFBRSxrREFBa0Q7aUJBQ2hFLENBQUMsRUFDSixFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FDaEI7YUFDRjtTQUNGLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxpQkFBaUIsR0FBRyxPQUFPLENBQUMsaUJBQWlCLENBQUM7SUFDckQsQ0FBQztJQUVNLEtBQUssQ0FBQyxjQUFjLENBQUMsS0FB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
|
|
@@ -4,7 +4,7 @@ exports.PSArtifactTool = void 0;
|
|
|
4
4
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
5
5
|
const PSAgentTool_1 = require("../PSAgentTool");
|
|
6
6
|
class PSArtifactTool extends PSAgentTool_1.PSAgentTool {
|
|
7
|
-
static TOOL_NAME =
|
|
7
|
+
static TOOL_NAME = 'artifact_tool';
|
|
8
8
|
artifacts = {};
|
|
9
9
|
constructor(artifactsStore) {
|
|
10
10
|
super({
|
|
@@ -17,32 +17,32 @@ The input is a JSON object with the following properties:
|
|
|
17
17
|
The output will be a JSON object with the status and output result of the action.`,
|
|
18
18
|
inputschema: {
|
|
19
19
|
url: `http://localhost/${PSArtifactTool.TOOL_NAME}`,
|
|
20
|
-
method:
|
|
20
|
+
method: 'POST',
|
|
21
21
|
//title: `${PSArtifactTool.TOOL_NAME}_inputs`,
|
|
22
22
|
//description: "Input for Artifact Tool",
|
|
23
23
|
requestBody: {
|
|
24
|
-
type:
|
|
24
|
+
type: 'object',
|
|
25
25
|
properties: {
|
|
26
26
|
name: {
|
|
27
|
-
type:
|
|
28
|
-
title:
|
|
29
|
-
description:
|
|
27
|
+
type: 'string',
|
|
28
|
+
title: 'name',
|
|
29
|
+
description: 'The name of the artifact',
|
|
30
30
|
},
|
|
31
31
|
content: {
|
|
32
|
-
type:
|
|
33
|
-
title:
|
|
34
|
-
description:
|
|
32
|
+
type: 'string',
|
|
33
|
+
title: 'content',
|
|
34
|
+
description: 'The content of the artifact',
|
|
35
35
|
},
|
|
36
36
|
action: {
|
|
37
|
-
type:
|
|
38
|
-
title:
|
|
37
|
+
type: 'string',
|
|
38
|
+
title: 'action',
|
|
39
39
|
description: "the action to perform on the content, either 'read' or 'write'",
|
|
40
|
-
enum: [
|
|
41
|
-
}
|
|
40
|
+
enum: ['read', 'write'],
|
|
41
|
+
},
|
|
42
42
|
},
|
|
43
|
-
required: [
|
|
44
|
-
}
|
|
45
|
-
}
|
|
43
|
+
required: ['name', 'action'],
|
|
44
|
+
},
|
|
45
|
+
},
|
|
46
46
|
});
|
|
47
47
|
if (artifactsStore) {
|
|
48
48
|
this.artifacts = artifactsStore;
|
|
@@ -52,28 +52,28 @@ The output will be a JSON object with the status and output result of the action
|
|
|
52
52
|
const name = input.name;
|
|
53
53
|
const action = input.action;
|
|
54
54
|
if (!name || name.trim().length === 0) {
|
|
55
|
-
throw new Error(
|
|
55
|
+
throw new Error('name should not be empty');
|
|
56
56
|
}
|
|
57
57
|
const isExisting = this.artifacts[name];
|
|
58
|
-
if (action ===
|
|
58
|
+
if (action === 'read') {
|
|
59
59
|
return {
|
|
60
|
-
status:
|
|
60
|
+
status: 'success',
|
|
61
61
|
output: this.artifacts[name],
|
|
62
62
|
};
|
|
63
63
|
}
|
|
64
|
-
else if (action ==
|
|
64
|
+
else if (action == 'write') {
|
|
65
65
|
const content = input.content || '';
|
|
66
66
|
this.artifacts[name] = content;
|
|
67
67
|
return {
|
|
68
|
-
status:
|
|
69
|
-
output: `Artifact ${name} ${isExisting ? 'modified' : 'created'} with content length ${content.length}
|
|
68
|
+
status: 'success',
|
|
69
|
+
output: `Artifact ${name} ${isExisting ? 'modified' : 'created'} with content length ${content.length}`,
|
|
70
70
|
};
|
|
71
71
|
}
|
|
72
72
|
return {
|
|
73
|
-
status:
|
|
74
|
-
output: `Invalid action ${input.action}, must be either 'read' or 'write'
|
|
73
|
+
status: 'error',
|
|
74
|
+
output: `Invalid action ${input.action}, must be either 'read' or 'write'`,
|
|
75
75
|
};
|
|
76
76
|
}
|
|
77
77
|
}
|
|
78
78
|
exports.PSArtifactTool = PSArtifactTool;
|
|
79
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
79
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUFNBcnRpZmFjdFRvb2wuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3Rvb2xzL1BTQXJ0aWZhY3RUb29sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHVEQUF1RDtBQUN2RCxnREFBNkM7QUFFN0MsTUFBYSxjQUFlLFNBQVEseUJBQVc7SUFDN0MsTUFBTSxDQUFDLFNBQVMsR0FBRyxlQUFlLENBQUM7SUFDbEIsU0FBUyxHQUEyQixFQUFFLENBQUM7SUFDeEQsWUFBWSxjQUF1QztRQUNqRCxLQUFLLENBQUM7WUFDSixJQUFJLEVBQUUsY0FBYyxDQUFDLFNBQVM7WUFDOUIsV0FBVyxFQUFFLFlBQVksY0FBYyxDQUFDLFNBQVM7Ozs7O2tGQUsyQjtZQUM1RSxXQUFXLEVBQUU7Z0JBQ1gsR0FBRyxFQUFFLG9CQUFvQixjQUFjLENBQUMsU0FBUyxFQUFFO2dCQUNuRCxNQUFNLEVBQUUsTUFBTTtnQkFDZCw4Q0FBOEM7Z0JBQzlDLHlDQUF5QztnQkFDekMsV0FBVyxFQUFFO29CQUNYLElBQUksRUFBRSxRQUFRO29CQUNkLFVBQVUsRUFBRTt3QkFDVixJQUFJLEVBQUU7NEJBQ0osSUFBSSxFQUFFLFFBQVE7NEJBQ2QsS0FBSyxFQUFFLE1BQU07NEJBQ2IsV0FBVyxFQUFFLDBCQUEwQjt5QkFDeEM7d0JBQ0QsT0FBTyxFQUFFOzRCQUNQLElBQUksRUFBRSxRQUFROzRCQUNkLEtBQUssRUFBRSxTQUFTOzRCQUNoQixXQUFXLEVBQUUsNkJBQTZCO3lCQUMzQzt3QkFDRCxNQUFNLEVBQUU7NEJBQ04sSUFBSSxFQUFFLFFBQVE7NEJBQ2QsS0FBSyxFQUFFLFFBQVE7NEJBQ2YsV0FBVyxFQUNULGdFQUFnRTs0QkFDbEUsSUFBSSxFQUFFLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQzt5QkFDeEI7cUJBQ0Y7b0JBQ0QsUUFBUSxFQUFFLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQztpQkFDN0I7YUFDRjtTQUNGLENBQUMsQ0FBQztRQUNILElBQUksY0FBYyxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxjQUFjLENBQUM7UUFDbEMsQ0FBQztJQUNILENBQUM7SUFFZSxLQUFLLENBQUMsR0FBRyxDQUN2QixLQUEwQjtRQUUxQixNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO1FBQ3hCLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFDNUIsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3RDLE1BQU0sSUFBSSxLQUFLLENBQUMsMEJBQTBCLENBQUMsQ0FBQztRQUM5QyxDQUFDO1FBQ0QsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4QyxJQUFJLE1BQU0sS0FBSyxNQUFNLEVBQUUsQ0FBQztZQUN0QixPQUFPO2dCQUNMLE1BQU0sRUFBRSxTQUFTO2dCQUNqQixNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUM7YUFDN0IsQ0FBQztRQUNKLENBQUM7YUFBTSxJQUFJLE1BQU0sSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUM3QixNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQztZQUNwQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQztZQUMvQixPQUFPO2dCQUNMLE1BQU0sRUFBRSxTQUFTO2dCQUNqQixNQUFNLEVBQUUsWUFBWSxJQUFJLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFNBQVMsd0JBQXdCLE9BQU8sQ0FBQyxNQUFNLEVBQUU7YUFDeEcsQ0FBQztRQUNKLENBQUM7UUFFRCxPQUFPO1lBQ0wsTUFBTSxFQUFFLE9BQU87WUFDZixNQUFNLEVBQUUsa0JBQWtCLEtBQUssQ0FBQyxNQUFNLG9DQUFvQztTQUMzRSxDQUFDO0lBQ0osQ0FBQzs7QUExRUgsd0NBMkVDIn0=
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { PSAgentLogger } from
|
|
2
|
-
import { PSAgentTool } from
|
|
1
|
+
import { PSAgentLogger } from '../PSAgentLogger';
|
|
2
|
+
import { PSAgentTool } from '../PSAgentTool';
|
|
3
3
|
export declare class PSCommandLineTool extends PSAgentTool {
|
|
4
4
|
static readonly toolName = "run_commandline";
|
|
5
5
|
private cwd;
|
|
@@ -7,34 +7,36 @@ const v4_1 = require("zod/v4");
|
|
|
7
7
|
const PSAgentTool_1 = require("../PSAgentTool");
|
|
8
8
|
const helpers_1 = require("../utils/helpers");
|
|
9
9
|
class PSCommandLineTool extends PSAgentTool_1.PSAgentTool {
|
|
10
|
-
static toolName =
|
|
10
|
+
static toolName = 'run_commandline';
|
|
11
11
|
cwd;
|
|
12
12
|
constructor(options) {
|
|
13
13
|
super({
|
|
14
14
|
name: PSCommandLineTool.toolName,
|
|
15
|
-
description:
|
|
16
|
-
type:
|
|
15
|
+
description: 'executes a shell command in the command shell like bash.',
|
|
16
|
+
type: 'API',
|
|
17
17
|
local_execution: true,
|
|
18
18
|
hitl: true,
|
|
19
19
|
inputschema: {
|
|
20
|
-
url:
|
|
21
|
-
method:
|
|
22
|
-
requestBody: v4_1.z.toJSONSchema(v4_1.z
|
|
20
|
+
url: 'http://localhost/run_commandline',
|
|
21
|
+
method: 'POST',
|
|
22
|
+
requestBody: v4_1.z.toJSONSchema(v4_1.z
|
|
23
|
+
.object({
|
|
23
24
|
command: v4_1.z.string().meta({
|
|
24
|
-
title:
|
|
25
|
-
description:
|
|
25
|
+
title: 'command',
|
|
26
|
+
description: 'The command to run in the bash command shell.',
|
|
26
27
|
}),
|
|
27
|
-
})
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
28
|
+
})
|
|
29
|
+
.meta({
|
|
30
|
+
title: 'run_commandline_request_body',
|
|
31
|
+
description: 'The request body parameters for the run_commandline tool.',
|
|
32
|
+
}), { io: 'input' }),
|
|
31
33
|
},
|
|
32
34
|
});
|
|
33
35
|
this.cwd = options.cwd || process.cwd();
|
|
34
36
|
}
|
|
35
37
|
run(input, log) {
|
|
36
|
-
if (!input.command || typeof input.command !==
|
|
37
|
-
throw new Error(
|
|
38
|
+
if (!input.command || typeof input.command !== 'string') {
|
|
39
|
+
throw new Error('Invalid command provided.');
|
|
38
40
|
}
|
|
39
41
|
const logger = log || console;
|
|
40
42
|
return new Promise((resolve, reject) => {
|
|
@@ -42,13 +44,10 @@ class PSCommandLineTool extends PSAgentTool_1.PSAgentTool {
|
|
|
42
44
|
try {
|
|
43
45
|
logger.info(`🛠️ Running command: \`${command}\``);
|
|
44
46
|
const output = (0, child_process_1.execSync)(command, { cwd: this.cwd, encoding: 'utf-8' });
|
|
45
|
-
logger.info(
|
|
46
|
-
+ `> ${command}\n`
|
|
47
|
-
+ `${output}\n`
|
|
48
|
-
+ "```\n\n");
|
|
47
|
+
logger.info('```bash\n' + `> ${command}\n` + `${output}\n` + '```\n\n');
|
|
49
48
|
return resolve({
|
|
50
49
|
status: 'success',
|
|
51
|
-
output: output ||
|
|
50
|
+
output: output || 'Command executed successfully with no output.',
|
|
52
51
|
});
|
|
53
52
|
}
|
|
54
53
|
catch (error) {
|
|
@@ -58,7 +57,9 @@ class PSCommandLineTool extends PSAgentTool_1.PSAgentTool {
|
|
|
58
57
|
reject(new Error(`Failed to execute command: ${command}. Error: ${error.message}`));
|
|
59
58
|
}
|
|
60
59
|
else if (sperr) {
|
|
61
|
-
if (sperr.stderr !== '' &&
|
|
60
|
+
if (sperr.stderr !== '' &&
|
|
61
|
+
sperr.stderr !== undefined &&
|
|
62
|
+
sperr.stdout !== undefined) {
|
|
62
63
|
reject(new Error(`${sperr.stderr}\n${sperr.stdout}\nexit code: ${sperr.status}`));
|
|
63
64
|
}
|
|
64
65
|
else
|
|
@@ -72,4 +73,4 @@ class PSCommandLineTool extends PSAgentTool_1.PSAgentTool {
|
|
|
72
73
|
}
|
|
73
74
|
}
|
|
74
75
|
exports.PSCommandLineTool = PSCommandLineTool;
|
|
75
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
76
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUFNDb21tYW5kTGluZVRvb2wuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3Rvb2xzL1BTQ29tbWFuZExpbmVUb29sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHVEQUF1RDtBQUN2RCxpREFBMkQ7QUFFM0QsK0JBQTJCO0FBRzNCLGdEQUE2QztBQUM3Qyw4Q0FBZ0Q7QUFFaEQsTUFBYSxpQkFBa0IsU0FBUSx5QkFBVztJQUN6QyxNQUFNLENBQVUsUUFBUSxHQUFHLGlCQUFpQixDQUFDO0lBQzVDLEdBQUcsQ0FBUztJQUNwQixZQUFZLE9BQXdCO1FBQ2xDLEtBQUssQ0FBQztZQUNKLElBQUksRUFBRSxpQkFBaUIsQ0FBQyxRQUFRO1lBQ2hDLFdBQVcsRUFBRSwwREFBMEQ7WUFDdkUsSUFBSSxFQUFFLEtBQUs7WUFDWCxlQUFlLEVBQUUsSUFBSTtZQUNyQixJQUFJLEVBQUUsSUFBSTtZQUNWLFdBQVcsRUFBRTtnQkFDWCxHQUFHLEVBQUUsa0NBQWtDO2dCQUN2QyxNQUFNLEVBQUUsTUFBTTtnQkFDZCxXQUFXLEVBQUUsTUFBQyxDQUFDLFlBQVksQ0FDekIsTUFBQztxQkFDRSxNQUFNLENBQUM7b0JBQ04sT0FBTyxFQUFFLE1BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUM7d0JBQ3ZCLEtBQUssRUFBRSxTQUFTO3dCQUNoQixXQUFXLEVBQUUsK0NBQStDO3FCQUM3RCxDQUFDO2lCQUNILENBQUM7cUJBQ0QsSUFBSSxDQUFDO29CQUNKLEtBQUssRUFBRSw4QkFBOEI7b0JBQ3JDLFdBQVcsRUFDVCwyREFBMkQ7aUJBQzlELENBQUMsRUFDSixFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FDaEI7YUFDRjtTQUNGLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsSUFBSSxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDMUMsQ0FBQztJQUNNLEdBQUcsQ0FDUixLQUEwQixFQUMxQixHQUFtQjtRQUVuQixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sSUFBSSxPQUFPLEtBQUssQ0FBQyxPQUFPLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDeEQsTUFBTSxJQUFJLEtBQUssQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1FBQy9DLENBQUM7UUFDRCxNQUFNLE1BQU0sR0FBRyxHQUFHLElBQUksT0FBTyxDQUFDO1FBQzlCLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDckMsTUFBTSxPQUFPLEdBQUcsSUFBQSxzQkFBWSxFQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM1QyxJQUFJLENBQUM7Z0JBQ0gsTUFBTSxDQUFDLElBQUksQ0FBQywwQkFBMEIsT0FBTyxJQUFJLENBQUMsQ0FBQztnQkFDbkQsTUFBTSxNQUFNLEdBQUcsSUFBQSx3QkFBUSxFQUFDLE9BQU8sRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO2dCQUN2RSxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLE9BQU8sSUFBSSxHQUFHLEdBQUcsTUFBTSxJQUFJLEdBQUcsU0FBUyxDQUFDLENBQUM7Z0JBRXhFLE9BQU8sT0FBTyxDQUFDO29CQUNiLE1BQU0sRUFBRSxTQUFTO29CQUNqQixNQUFNLEVBQUUsTUFBTSxJQUFJLCtDQUErQztpQkFDbEUsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztZQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7Z0JBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDckIsTUFBTSxLQUFLLEdBQUcsS0FBaUMsQ0FBQztnQkFDaEQsSUFBSSxLQUFLLFlBQVksS0FBSyxFQUFFLENBQUM7b0JBQzNCLE1BQU0sQ0FDSixJQUFJLEtBQUssQ0FDUCw4QkFBOEIsT0FBTyxZQUFZLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FDakUsQ0FDRixDQUFDO2dCQUNKLENBQUM7cUJBQU0sSUFBSSxLQUFLLEVBQUUsQ0FBQztvQkFDakIsSUFDRSxLQUFLLENBQUMsTUFBTSxLQUFLLEVBQUU7d0JBQ25CLEtBQUssQ0FBQyxNQUFNLEtBQUssU0FBUzt3QkFDMUIsS0FBSyxDQUFDLE1BQU0sS0FBSyxTQUFTLEVBQzFCLENBQUM7d0JBQ0QsTUFBTSxDQUNKLElBQUksS0FBSyxDQUNQLEdBQUcsS0FBSyxDQUFDLE1BQU0sS0FBSyxLQUFLLENBQUMsTUFBTSxnQkFBZ0IsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUMvRCxDQUNGLENBQUM7b0JBQ0osQ0FBQzs7d0JBQ0MsTUFBTSxDQUNKLElBQUksS0FBSyxDQUNQLDhCQUE4QixPQUFPLGdCQUFnQixLQUFLLENBQUMsTUFBTSxZQUFZLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FDNUYsQ0FDRixDQUFDO2dCQUNOLENBQUM7cUJBQU0sQ0FBQztvQkFDTixNQUFNLENBQ0osSUFBSSxLQUFLLENBQUMsOEJBQThCLE9BQU8sa0JBQWtCLENBQUMsQ0FDbkUsQ0FBQztnQkFDSixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7QUFwRkgsOENBcUZDIn0=
|