psadk 1.1.0 → 1.1.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/README.md +6 -0
- package/build/main/index.d.ts +5 -0
- package/build/main/index.js +7 -1
- package/build/main/lib/PSAI.d.ts +1 -1
- package/build/main/lib/PSAgent.d.ts +11 -0
- package/build/main/lib/PSAgent.js +59 -30
- package/build/main/lib/PSAgentConfig.d.ts +1 -1
- package/build/main/lib/PSAgentLogger.d.ts +7 -0
- package/build/main/lib/PSAgentLogger.js +20 -5
- package/build/main/lib/jwt.js +3 -1
- package/build/main/lib/tools/BraveWebSearchTool.d.ts +11 -0
- package/build/main/lib/tools/BraveWebSearchTool.js +89 -0
- package/build/main/lib/tools/PSCommandLineTool.d.ts +10 -0
- package/build/main/lib/tools/PSCommandLineTool.js +74 -0
- package/build/main/lib/tools/PSMemoryTool.d.ts +45 -0
- package/build/main/lib/tools/PSMemoryTool.js +485 -0
- package/build/main/lib/tools/PSReadFileTool.d.ts +10 -0
- package/build/main/lib/tools/PSReadFileTool.js +68 -0
- package/build/main/lib/tools/PSSubAgentTool.js +141 -14
- package/build/main/lib/tools/PSWriteFileTool.d.ts +10 -0
- package/build/main/lib/tools/PSWriteFileTool.js +74 -0
- package/build/main/lib/tools/ReadFileTool.d.ts +10 -0
- package/build/main/lib/tools/ReadFileTool.js +68 -0
- package/build/main/lib/tools/TodoTool.d.ts +57 -0
- package/build/main/lib/tools/TodoTool.js +220 -0
- package/build/main/lib/tools/WebSearchTool.d.ts +9 -0
- package/build/main/lib/tools/WebSearchTool.js +92 -0
- package/build/main/lib/tools/WriteFileTool.d.ts +10 -0
- package/build/main/lib/tools/WriteFileTool.js +74 -0
- package/build/main/lib/utils/debuglogger.d.ts +7 -0
- package/build/main/lib/utils/debuglogger.js +25 -0
- package/build/main/lib/utils/helpers.d.ts +4 -0
- package/build/main/lib/utils/helpers.js +41 -0
- package/build/module/index.d.ts +5 -0
- package/build/module/index.js +29 -7
- package/build/module/lib/PSAI.d.ts +4 -0
- package/build/module/lib/PSAI.js +101 -24
- package/build/module/lib/PSAgent.d.ts +21 -10
- package/build/module/lib/PSAgent.js +126 -85
- package/build/module/lib/PSAgentConfig.d.ts +23 -0
- package/build/module/lib/PSAgentConfig.js +3 -0
- package/build/module/lib/PSAgentLogger.d.ts +20 -0
- package/build/module/lib/PSAgentLogger.js +51 -0
- package/build/module/lib/PSAgentTask.d.ts +12 -0
- package/build/module/lib/PSAgentTask.js +33 -0
- package/build/module/lib/PSAgentTool.d.ts +56 -0
- package/build/module/lib/PSAgentTool.js +91 -0
- package/build/module/lib/jwt.d.ts +41 -0
- package/build/module/lib/jwt.js +75 -0
- package/build/module/lib/tools/BraveWebSearchTool.d.ts +11 -0
- package/build/module/lib/tools/BraveWebSearchTool.js +90 -0
- package/build/module/lib/tools/PSArtifactTool.d.ts +7 -0
- package/build/module/lib/tools/PSArtifactTool.js +79 -0
- package/build/module/lib/tools/PSCommandLineTool.d.ts +10 -0
- package/build/module/lib/tools/PSCommandLineTool.js +75 -0
- package/build/module/lib/tools/PSMemoryTool.d.ts +45 -0
- package/build/module/lib/tools/PSMemoryTool.js +487 -0
- package/build/module/lib/tools/PSReadFileTool.d.ts +10 -0
- package/build/module/lib/tools/PSReadFileTool.js +68 -0
- package/build/module/lib/tools/PSSubAgentTool.d.ts +20 -0
- package/build/module/lib/tools/PSSubAgentTool.js +289 -0
- package/build/module/lib/tools/PSWriteFileTool.d.ts +10 -0
- package/build/module/lib/tools/PSWriteFileTool.js +74 -0
- package/build/module/lib/tools/TodoTool.d.ts +57 -0
- package/build/module/lib/tools/TodoTool.js +224 -0
- package/build/module/lib/utils/debuglogger.d.ts +7 -0
- package/build/module/lib/utils/debuglogger.js +25 -0
- package/build/module/lib/utils/helpers.d.ts +4 -0
- package/build/module/lib/utils/helpers.js +41 -0
- package/package.json +1 -1
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { z } from "zod/v4";
|
|
2
|
+
import { PSAgentTask } from "./PSAgentTask";
|
|
3
|
+
import { PSAgentTool } from "./PSAgentTool";
|
|
4
|
+
export interface PSAgentConfig {
|
|
5
|
+
agent_class?: "LlmAgent" | "LoopAgent" | "ParallelAgent" | "SequentialAgent";
|
|
6
|
+
name: string;
|
|
7
|
+
description: string;
|
|
8
|
+
instruction: string;
|
|
9
|
+
sub_agents?: PSAgentConfig[];
|
|
10
|
+
additional_properties?: Record<string, any>;
|
|
11
|
+
examples?: string[];
|
|
12
|
+
model?: string;
|
|
13
|
+
input_schema?: z.core.JSONSchema.BaseSchema;
|
|
14
|
+
output_schema?: z.core.JSONSchema.BaseSchema;
|
|
15
|
+
show_plan?: boolean;
|
|
16
|
+
hitl_for_plan?: boolean;
|
|
17
|
+
tools?: PSAgentTool[];
|
|
18
|
+
tasks?: PSAgentTask[];
|
|
19
|
+
token?: string;
|
|
20
|
+
getToken?: () => Promise<string>;
|
|
21
|
+
additional_headers?: Record<string, string>;
|
|
22
|
+
port?: number;
|
|
23
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUFNBZ2VudENvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvUFNBZ2VudENvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIn0=
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export type AgentLoggerType = 'debug' | 'info' | 'error' | 'warn' | 'done';
|
|
2
|
+
export declare class PSAgentLogger {
|
|
3
|
+
private logFn;
|
|
4
|
+
private readonly logFilePath;
|
|
5
|
+
private lastTimestamp;
|
|
6
|
+
private taskId?;
|
|
7
|
+
private task?;
|
|
8
|
+
constructor(options?: {
|
|
9
|
+
prefix?: string;
|
|
10
|
+
logFilePath?: string;
|
|
11
|
+
taskId?: string;
|
|
12
|
+
task?: string;
|
|
13
|
+
});
|
|
14
|
+
log(type: string, message: any, ...optionalParams: any[]): void;
|
|
15
|
+
debug(message: string, ...optionalParams: any[]): void;
|
|
16
|
+
info(message: string, ...optionalParams: any[]): void;
|
|
17
|
+
error(message: string, ...optionalParams: any[]): void;
|
|
18
|
+
warn(message: string, ...optionalParams: any[]): void;
|
|
19
|
+
done(message?: string, ...optionalParams: any[]): void;
|
|
20
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.PSAgentLogger = void 0;
|
|
7
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
8
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
9
|
+
const debug_1 = __importDefault(require("debug"));
|
|
10
|
+
class PSAgentLogger {
|
|
11
|
+
logFn = (0, debug_1.default)('PSAgent:');
|
|
12
|
+
logFilePath;
|
|
13
|
+
lastTimestamp = Date.now();
|
|
14
|
+
taskId;
|
|
15
|
+
task;
|
|
16
|
+
constructor(options) {
|
|
17
|
+
if (options?.prefix) {
|
|
18
|
+
this.logFn = (0, debug_1.default)(options.prefix);
|
|
19
|
+
this.logFn.enabled = true;
|
|
20
|
+
}
|
|
21
|
+
this.logFilePath = options?.logFilePath;
|
|
22
|
+
this.taskId = options?.taskId;
|
|
23
|
+
this.task = options?.task;
|
|
24
|
+
}
|
|
25
|
+
log(type, message, ...optionalParams) {
|
|
26
|
+
const now = Date.now();
|
|
27
|
+
const duration = now - this.lastTimestamp;
|
|
28
|
+
this.lastTimestamp = duration === 0 ? now + 1 : this.lastTimestamp;
|
|
29
|
+
if (this.logFilePath) {
|
|
30
|
+
node_fs_1.default.appendFileSync(this.logFilePath, `data: ${JSON.stringify({ ts: type === 'todo' ? 0 : this.lastTimestamp, type, taskId: this.taskId, task: this.task, message })}\n\n`, { encoding: 'utf-8' });
|
|
31
|
+
}
|
|
32
|
+
this.logFn(`[${type.toUpperCase()}] ${message}`, ...optionalParams);
|
|
33
|
+
}
|
|
34
|
+
debug(message, ...optionalParams) {
|
|
35
|
+
this.log('debug', message, ...optionalParams);
|
|
36
|
+
}
|
|
37
|
+
info(message, ...optionalParams) {
|
|
38
|
+
this.log('info', message, ...optionalParams);
|
|
39
|
+
}
|
|
40
|
+
error(message, ...optionalParams) {
|
|
41
|
+
this.log('error', message, ...optionalParams);
|
|
42
|
+
}
|
|
43
|
+
warn(message, ...optionalParams) {
|
|
44
|
+
this.log('warn', message, ...optionalParams);
|
|
45
|
+
}
|
|
46
|
+
done(message = '', ...optionalParams) {
|
|
47
|
+
this.log('done', message, ...optionalParams);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
exports.PSAgentLogger = PSAgentLogger;
|
|
51
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUFNBZ2VudExvZ2dlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvUFNBZ2VudExvZ2dlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSx1REFBdUQ7QUFDdkQsc0RBQXlCO0FBRXpCLGtEQUEwQjtBQUcxQixNQUFhLGFBQWE7SUFDaEIsS0FBSyxHQUFHLElBQUEsZUFBSyxFQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ2pCLFdBQVcsQ0FBbUI7SUFDdkMsYUFBYSxHQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUN6QixNQUFNLENBQVU7SUFDaEIsSUFBSSxDQUFVO0lBQ3RCLFlBQVksT0FBK0U7UUFDekYsSUFBSSxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFBLGVBQUssRUFBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDbkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQzVCLENBQUM7UUFDRCxJQUFJLENBQUMsV0FBVyxHQUFHLE9BQU8sRUFBRSxXQUFXLENBQUE7UUFDdkMsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLEVBQUUsTUFBTSxDQUFDO1FBQzlCLElBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQztJQUM1QixDQUFDO0lBRUQsR0FBRyxDQUFDLElBQVksRUFBRSxPQUFXLEVBQUUsR0FBRyxjQUFvQjtRQUNwRCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDdkIsTUFBTSxRQUFRLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7UUFDMUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxRQUFRLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDO1FBQ25FLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3JCLGlCQUFFLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsU0FBUyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksS0FBRyxNQUFNLENBQUEsQ0FBQyxDQUFBLENBQUMsQ0FBQSxDQUFDLENBQUEsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDN0wsQ0FBQztRQUNELElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLEtBQUssT0FBTyxFQUFFLEVBQUUsR0FBRyxjQUFjLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBQ00sS0FBSyxDQUFDLE9BQWUsRUFBRSxHQUFHLGNBQW9CO1FBQ25ELElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxHQUFHLGNBQWMsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFDTSxJQUFJLENBQUMsT0FBZSxFQUFFLEdBQUcsY0FBb0I7UUFDbEQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsY0FBYyxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUNNLEtBQUssQ0FBQyxPQUFlLEVBQUUsR0FBRyxjQUFvQjtRQUNuRCxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsR0FBRyxjQUFjLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBQ00sSUFBSSxDQUFDLE9BQWUsRUFBRSxHQUFHLGNBQW9CO1FBQ2xELElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLGNBQWMsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFDTSxJQUFJLENBQUMsVUFBa0IsRUFBRSxFQUFFLEdBQUcsY0FBb0I7UUFDdkQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsY0FBYyxDQUFDLENBQUM7SUFDL0MsQ0FBQztDQUNGO0FBeENELHNDQXdDQyJ9
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export declare class PSAgentTask {
|
|
2
|
+
private name;
|
|
3
|
+
private description;
|
|
4
|
+
private examples?;
|
|
5
|
+
constructor(name: string, description: string, examples?: string[]);
|
|
6
|
+
get Name(): string;
|
|
7
|
+
set Name(value: string);
|
|
8
|
+
get Description(): string;
|
|
9
|
+
set Description(value: string);
|
|
10
|
+
get Examples(): string[];
|
|
11
|
+
set Examples(value: string[]);
|
|
12
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PSAgentTask = void 0;
|
|
4
|
+
class PSAgentTask {
|
|
5
|
+
name;
|
|
6
|
+
description;
|
|
7
|
+
examples;
|
|
8
|
+
constructor(name, description, examples) {
|
|
9
|
+
this.name = name;
|
|
10
|
+
this.description = description;
|
|
11
|
+
this.examples = examples;
|
|
12
|
+
}
|
|
13
|
+
get Name() {
|
|
14
|
+
return this.name;
|
|
15
|
+
}
|
|
16
|
+
set Name(value) {
|
|
17
|
+
this.name = value;
|
|
18
|
+
}
|
|
19
|
+
get Description() {
|
|
20
|
+
return this.description;
|
|
21
|
+
}
|
|
22
|
+
set Description(value) {
|
|
23
|
+
this.description = value;
|
|
24
|
+
}
|
|
25
|
+
get Examples() {
|
|
26
|
+
return this.examples || [];
|
|
27
|
+
}
|
|
28
|
+
set Examples(value) {
|
|
29
|
+
this.examples = value || [];
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
exports.PSAgentTask = PSAgentTask;
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUFNBZ2VudFRhc2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL1BTQWdlbnRUYXNrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBLE1BQWEsV0FBVztJQUNkLElBQUksQ0FBUztJQUNiLFdBQVcsQ0FBUztJQUNwQixRQUFRLENBQVk7SUFDNUIsWUFBWSxJQUFZLEVBQUUsV0FBbUIsRUFBRSxRQUFtQjtRQUNoRSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztRQUMvQixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztJQUMzQixDQUFDO0lBQ0QsSUFBVyxJQUFJO1FBQ2IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ25CLENBQUM7SUFDRCxJQUFXLElBQUksQ0FBQyxLQUFhO1FBQzNCLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFDRCxJQUFXLFdBQVc7UUFDcEIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7SUFDRCxJQUFXLFdBQVcsQ0FBQyxLQUFhO1FBQ2xDLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO0lBQzNCLENBQUM7SUFDRCxJQUFXLFFBQVE7UUFDakIsT0FBTyxJQUFJLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBQ0QsSUFBVyxRQUFRLENBQUMsS0FBZTtRQUNqQyxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssSUFBSSxFQUFFLENBQUM7SUFDOUIsQ0FBQztDQUNGO0FBM0JELGtDQTJCQyJ9
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import z from "zod/v4";
|
|
2
|
+
import { PSAgentLogger } from "./PSAgentLogger";
|
|
3
|
+
export interface IPSAgentToolResult {
|
|
4
|
+
error: Error | null;
|
|
5
|
+
result?: Record<string, any>;
|
|
6
|
+
}
|
|
7
|
+
export interface IPSAgentToolInput {
|
|
8
|
+
url?: string;
|
|
9
|
+
method?: string;
|
|
10
|
+
requestBody: z.core.JSONSchema.BaseSchema;
|
|
11
|
+
}
|
|
12
|
+
export declare class PSAgentTool {
|
|
13
|
+
private name;
|
|
14
|
+
private description;
|
|
15
|
+
private type;
|
|
16
|
+
private local_execution;
|
|
17
|
+
private hitl;
|
|
18
|
+
private inputschema;
|
|
19
|
+
private runCallback?;
|
|
20
|
+
constructor({ name, description, type, local_execution, hitl, inputschema, runCallback }: {
|
|
21
|
+
name: string;
|
|
22
|
+
description: string;
|
|
23
|
+
type?: string;
|
|
24
|
+
local_execution?: boolean;
|
|
25
|
+
hitl?: boolean;
|
|
26
|
+
inputschema: IPSAgentToolInput;
|
|
27
|
+
runCallback?: (input: Record<string, any>, log?: PSAgentLogger) => Promise<Record<string, any>>;
|
|
28
|
+
});
|
|
29
|
+
get Name(): string;
|
|
30
|
+
set Name(value: string);
|
|
31
|
+
get Description(): string;
|
|
32
|
+
set Description(value: string);
|
|
33
|
+
get Type(): string;
|
|
34
|
+
set Type(value: string);
|
|
35
|
+
get LocalExecution(): boolean;
|
|
36
|
+
set LocalExecution(value: boolean);
|
|
37
|
+
get HITL(): {
|
|
38
|
+
required: boolean;
|
|
39
|
+
interrupt: string;
|
|
40
|
+
level: number;
|
|
41
|
+
};
|
|
42
|
+
set HITL(value: {
|
|
43
|
+
required: boolean;
|
|
44
|
+
interrupt: string;
|
|
45
|
+
level: number;
|
|
46
|
+
});
|
|
47
|
+
get Inputs(): IPSAgentToolInput;
|
|
48
|
+
set Inputs(value: IPSAgentToolInput);
|
|
49
|
+
run(input: Record<string, any>, log?: PSAgentLogger): Promise<Record<string, any>>;
|
|
50
|
+
static LocalTool({ name, description, requestschema, runCallback }: {
|
|
51
|
+
name: string;
|
|
52
|
+
description: string;
|
|
53
|
+
requestschema: z.core.JSONSchema.BaseSchema;
|
|
54
|
+
runCallback: (input: Record<string, any>, log?: PSAgentLogger) => Promise<Record<string, any>>;
|
|
55
|
+
}): PSAgentTool;
|
|
56
|
+
}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PSAgentTool = void 0;
|
|
4
|
+
class PSAgentTool {
|
|
5
|
+
name;
|
|
6
|
+
description;
|
|
7
|
+
type;
|
|
8
|
+
local_execution;
|
|
9
|
+
hitl;
|
|
10
|
+
inputschema;
|
|
11
|
+
runCallback;
|
|
12
|
+
constructor({ name, description, type = "API", local_execution = true, hitl = true, inputschema, runCallback }) {
|
|
13
|
+
this.name = name;
|
|
14
|
+
this.description = description;
|
|
15
|
+
this.type = type;
|
|
16
|
+
this.local_execution = local_execution;
|
|
17
|
+
this.hitl = {
|
|
18
|
+
required: hitl,
|
|
19
|
+
interrupt: "before",
|
|
20
|
+
level: 0
|
|
21
|
+
};
|
|
22
|
+
this.inputschema = inputschema;
|
|
23
|
+
if (runCallback) {
|
|
24
|
+
if (typeof runCallback !== "function") {
|
|
25
|
+
throw new Error("executionFn must be a function");
|
|
26
|
+
}
|
|
27
|
+
this.runCallback = runCallback;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
get Name() {
|
|
31
|
+
return this.name;
|
|
32
|
+
}
|
|
33
|
+
set Name(value) {
|
|
34
|
+
this.name = value;
|
|
35
|
+
}
|
|
36
|
+
get Description() {
|
|
37
|
+
return this.description;
|
|
38
|
+
}
|
|
39
|
+
set Description(value) {
|
|
40
|
+
this.description = value;
|
|
41
|
+
}
|
|
42
|
+
get Type() {
|
|
43
|
+
return this.type;
|
|
44
|
+
}
|
|
45
|
+
set Type(value) {
|
|
46
|
+
this.type = value;
|
|
47
|
+
}
|
|
48
|
+
get LocalExecution() {
|
|
49
|
+
return this.local_execution;
|
|
50
|
+
}
|
|
51
|
+
set LocalExecution(value) {
|
|
52
|
+
this.local_execution = value;
|
|
53
|
+
}
|
|
54
|
+
get HITL() {
|
|
55
|
+
return this.hitl;
|
|
56
|
+
}
|
|
57
|
+
set HITL(value) {
|
|
58
|
+
this.hitl = value;
|
|
59
|
+
}
|
|
60
|
+
get Inputs() {
|
|
61
|
+
return this.inputschema;
|
|
62
|
+
}
|
|
63
|
+
set Inputs(value) {
|
|
64
|
+
this.inputschema = value;
|
|
65
|
+
}
|
|
66
|
+
run(input, log) {
|
|
67
|
+
if (!this.runCallback) {
|
|
68
|
+
throw new Error("run callback function is not defined for this tool");
|
|
69
|
+
}
|
|
70
|
+
return this.runCallback(input, log);
|
|
71
|
+
}
|
|
72
|
+
static LocalTool({ name, description, requestschema, runCallback }) {
|
|
73
|
+
return new PSAgentTool({
|
|
74
|
+
name,
|
|
75
|
+
description,
|
|
76
|
+
type: "API",
|
|
77
|
+
local_execution: true,
|
|
78
|
+
hitl: true,
|
|
79
|
+
inputschema: {
|
|
80
|
+
//title: `${name}_inputs.`,
|
|
81
|
+
//description: `Inputs for ${name} tool.`,
|
|
82
|
+
url: `http://localhost/${name}`,
|
|
83
|
+
method: "POST",
|
|
84
|
+
requestBody: requestschema,
|
|
85
|
+
},
|
|
86
|
+
runCallback
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
exports.PSAgentTool = PSAgentTool;
|
|
91
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUFNBZ2VudFRvb2wuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL1BTQWdlbnRUb29sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQWtCQSxNQUFhLFdBQVc7SUFDZixJQUFJLENBQVM7SUFDYixXQUFXLENBQVM7SUFDcEIsSUFBSSxDQUFTO0lBQ2IsZUFBZSxDQUFVO0lBQ3pCLElBQUksQ0FJVjtJQUNNLFdBQVcsQ0FBb0I7SUFDL0IsV0FBVyxDQUFxRjtJQUV4RyxZQUFZLEVBQ1QsSUFBSSxFQUNKLFdBQVcsRUFDWCxJQUFJLEdBQUMsS0FBSyxFQUNWLGVBQWUsR0FBQyxJQUFJLEVBQ3BCLElBQUksR0FBQyxJQUFJLEVBQ1QsV0FBVyxFQUNYLFdBQVcsRUFTYjtRQUNBLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO1FBQy9CLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxlQUFlLEdBQUcsZUFBZSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxJQUFJLEdBQUc7WUFDWCxRQUFRLEVBQUUsSUFBSTtZQUNkLFNBQVMsRUFBRSxRQUFRO1lBQ25CLEtBQUssRUFBRSxDQUFDO1NBQ1IsQ0FBQztRQUNGLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO1FBQy9CLElBQUksV0FBVyxFQUFFLENBQUM7WUFDakIsSUFBSSxPQUFPLFdBQVcsS0FBSyxVQUFVLEVBQUUsQ0FBQztnQkFDdkMsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1lBQ25ELENBQUM7WUFDRCxJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztRQUNoQyxDQUFDO0lBQ0YsQ0FBQztJQUNELElBQVcsSUFBSTtRQUNkLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztJQUNsQixDQUFDO0lBQ0QsSUFBVyxJQUFJLENBQUMsS0FBYTtRQUM1QixJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztJQUNuQixDQUFDO0lBQ0QsSUFBVyxXQUFXO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUN6QixDQUFDO0lBQ0QsSUFBVyxXQUFXLENBQUMsS0FBYTtRQUNuQyxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztJQUMxQixDQUFDO0lBQ0QsSUFBVyxJQUFJO1FBQ2QsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ2xCLENBQUM7SUFDRCxJQUFXLElBQUksQ0FBQyxLQUFhO1FBQzVCLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO0lBQ25CLENBQUM7SUFDRCxJQUFXLGNBQWM7UUFDeEIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDO0lBQzdCLENBQUM7SUFDRCxJQUFXLGNBQWMsQ0FBQyxLQUFjO1FBQ3ZDLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO0lBQzlCLENBQUM7SUFDRCxJQUFXLElBQUk7UUFDZCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDbEIsQ0FBQztJQUNELElBQVcsSUFBSSxDQUFDLEtBQStEO1FBQzlFLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO0lBQ25CLENBQUM7SUFDRCxJQUFXLE1BQU07UUFDaEIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQ3pCLENBQUM7SUFDRCxJQUFXLE1BQU0sQ0FBQyxLQUF3QjtRQUN6QyxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztJQUMxQixDQUFDO0lBRU8sR0FBRyxDQUFDLEtBQTBCLEVBQUUsR0FBbUI7UUFDMUQsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN2QixNQUFNLElBQUksS0FBSyxDQUFDLG9EQUFvRCxDQUFDLENBQUM7UUFDdkUsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVPLE1BQU0sQ0FBQyxTQUFTLENBQUMsRUFBQyxJQUFJLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBS3JFO1FBRUMsT0FBTyxJQUFJLFdBQVcsQ0FBQztZQUNyQixJQUFJO1lBQ0osV0FBVztZQUNYLElBQUksRUFBRSxLQUFLO1lBQ1gsZUFBZSxFQUFFLElBQUk7WUFDckIsSUFBSSxFQUFFLElBQUk7WUFDVixXQUFXLEVBQUc7Z0JBQ1osMkJBQTJCO2dCQUMzQiwwQ0FBMEM7Z0JBQzFDLEdBQUcsRUFBRSxvQkFBb0IsSUFBSSxFQUFFO2dCQUMvQixNQUFNLEVBQUUsTUFBTTtnQkFDZCxXQUFXLEVBQUUsYUFBYTthQUMzQjtZQUNELFdBQVc7U0FDWixDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUFsSEQsa0NBa0hDIn0=
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import jwt, { JwtPayload } from 'jsonwebtoken';
|
|
2
|
+
export interface PSJwtPayload extends JwtPayload {
|
|
3
|
+
UserInfo: {
|
|
4
|
+
id: string;
|
|
5
|
+
email: string;
|
|
6
|
+
displayName: string;
|
|
7
|
+
};
|
|
8
|
+
clientId?: string;
|
|
9
|
+
exp: number;
|
|
10
|
+
iat?: number;
|
|
11
|
+
iss?: string;
|
|
12
|
+
idp?: string;
|
|
13
|
+
role?: string[];
|
|
14
|
+
}
|
|
15
|
+
export declare class JwtUtils {
|
|
16
|
+
/**
|
|
17
|
+
* Decodes a JWT token without verifying signature
|
|
18
|
+
* @param token - The JWT token to decode
|
|
19
|
+
* @returns Decoded token payload or null if invalid
|
|
20
|
+
*/
|
|
21
|
+
static decode(token: string): string | jwt.JwtPayload | null;
|
|
22
|
+
/**
|
|
23
|
+
* Decodes and verifies a JWT token
|
|
24
|
+
* @param token - The JWT token to verify
|
|
25
|
+
* @param secret - The secret key used to sign the token
|
|
26
|
+
* @returns Decoded and verified token payload or null if invalid
|
|
27
|
+
*/
|
|
28
|
+
static verify(token: string, secret: string): string | jwt.JwtPayload | null;
|
|
29
|
+
/**
|
|
30
|
+
* Checks if a token has expired
|
|
31
|
+
* @param token - The JWT token to check
|
|
32
|
+
* @returns boolean indicating if token is expired
|
|
33
|
+
*/
|
|
34
|
+
static isTokenExpired(token: string): boolean;
|
|
35
|
+
/**
|
|
36
|
+
* Extracts token from Authorization header
|
|
37
|
+
* @param authHeader - The Authorization header value
|
|
38
|
+
* @returns Clean token string or null
|
|
39
|
+
*/
|
|
40
|
+
static extractTokenFromHeader(authHeader?: string): string | null;
|
|
41
|
+
}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.JwtUtils = void 0;
|
|
7
|
+
const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
|
|
8
|
+
class JwtUtils {
|
|
9
|
+
/**
|
|
10
|
+
* Decodes a JWT token without verifying signature
|
|
11
|
+
* @param token - The JWT token to decode
|
|
12
|
+
* @returns Decoded token payload or null if invalid
|
|
13
|
+
*/
|
|
14
|
+
static decode(token) {
|
|
15
|
+
if (!token)
|
|
16
|
+
return null;
|
|
17
|
+
try {
|
|
18
|
+
// Remove 'Bearer ' if present
|
|
19
|
+
const cleanToken = token.replace('Bearer ', '');
|
|
20
|
+
// Decode without verification
|
|
21
|
+
const payload = jsonwebtoken_1.default.decode(cleanToken);
|
|
22
|
+
const decoded = payload;
|
|
23
|
+
return decoded;
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
console.error('JWT Decode Error:', error);
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Decodes and verifies a JWT token
|
|
32
|
+
* @param token - The JWT token to verify
|
|
33
|
+
* @param secret - The secret key used to sign the token
|
|
34
|
+
* @returns Decoded and verified token payload or null if invalid
|
|
35
|
+
*/
|
|
36
|
+
static verify(token, secret) {
|
|
37
|
+
try {
|
|
38
|
+
const cleanToken = token.replace('Bearer ', '');
|
|
39
|
+
// Verify and decode
|
|
40
|
+
const decoded = jsonwebtoken_1.default.verify(cleanToken, secret);
|
|
41
|
+
return decoded;
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
console.error('JWT Verification Error:', error);
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Checks if a token has expired
|
|
50
|
+
* @param token - The JWT token to check
|
|
51
|
+
* @returns boolean indicating if token is expired
|
|
52
|
+
*/
|
|
53
|
+
static isTokenExpired(token) {
|
|
54
|
+
const decoded = this.decode(token);
|
|
55
|
+
if (!decoded || !decoded.exp)
|
|
56
|
+
return true;
|
|
57
|
+
const currentTime = Math.floor(Date.now() / 1000);
|
|
58
|
+
return decoded.exp < currentTime;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Extracts token from Authorization header
|
|
62
|
+
* @param authHeader - The Authorization header value
|
|
63
|
+
* @returns Clean token string or null
|
|
64
|
+
*/
|
|
65
|
+
static extractTokenFromHeader(authHeader) {
|
|
66
|
+
if (!authHeader)
|
|
67
|
+
return null;
|
|
68
|
+
const parts = authHeader.split(' ');
|
|
69
|
+
if (parts.length !== 2 || parts[0] !== 'Bearer')
|
|
70
|
+
return null;
|
|
71
|
+
return parts[1];
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
exports.JwtUtils = JwtUtils;
|
|
75
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiand0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9qd3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsZ0VBQStDO0FBaUIvQyxNQUFhLFFBQVE7SUFDbkI7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBYTtRQUN6QixJQUFJLENBQUMsS0FBSztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ3hCLElBQUksQ0FBQztZQUNILDhCQUE4QjtZQUM5QixNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUVoRCw4QkFBOEI7WUFDOUIsTUFBTSxPQUFPLEdBQUcsc0JBQUcsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDdkMsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDO1lBQ3hCLE9BQU8sT0FBTyxDQUFDO1FBQ2pCLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUMxQyxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQWEsRUFBRSxNQUFjO1FBQ3pDLElBQUksQ0FBQztZQUNILE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBRWhELG9CQUFvQjtZQUNwQixNQUFNLE9BQU8sR0FBRyxzQkFBRyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDL0MsT0FBTyxPQUFPLENBQUM7UUFDakIsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixPQUFPLENBQUMsS0FBSyxDQUFDLHlCQUF5QixFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ2hELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFhO1FBQ2pDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFxQixDQUFDO1FBQ3ZELElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBRTFDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQ2xELE9BQU8sT0FBTyxDQUFDLEdBQUcsR0FBRyxXQUFXLENBQUM7SUFDbkMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxNQUFNLENBQUMsc0JBQXNCLENBQUMsVUFBbUI7UUFDL0MsSUFBSSxDQUFDLFVBQVU7WUFBRSxPQUFPLElBQUksQ0FBQztRQUU3QixNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3BDLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVE7WUFBRSxPQUFPLElBQUksQ0FBQztRQUU3RCxPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQixDQUFDO0NBQ0Y7QUFuRUQsNEJBbUVDIn0=
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { PSAgentLogger } from "../PSAgentLogger";
|
|
2
|
+
import { PSAgentTool } from "../PSAgentTool";
|
|
3
|
+
export declare class BraveWebSearchTool extends PSAgentTool {
|
|
4
|
+
static readonly toolName = "search_web_with_brave";
|
|
5
|
+
braveSearchApiKey?: string;
|
|
6
|
+
constructor(options: {
|
|
7
|
+
braveSearchApiKey?: string;
|
|
8
|
+
});
|
|
9
|
+
bravewebsearch(query: string): Promise<string>;
|
|
10
|
+
run(input: Record<string, any>, log?: PSAgentLogger): Promise<Record<string, any>>;
|
|
11
|
+
}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BraveWebSearchTool = void 0;
|
|
4
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
5
|
+
const v4_1 = require("zod/v4");
|
|
6
|
+
const PSAgentTool_1 = require("../PSAgentTool");
|
|
7
|
+
class BraveWebSearchTool extends PSAgentTool_1.PSAgentTool {
|
|
8
|
+
static toolName = "search_web_with_brave";
|
|
9
|
+
braveSearchApiKey;
|
|
10
|
+
constructor(options) {
|
|
11
|
+
super({
|
|
12
|
+
name: BraveWebSearchTool.toolName,
|
|
13
|
+
description: "searches the web for the given query.",
|
|
14
|
+
type: "API",
|
|
15
|
+
local_execution: true,
|
|
16
|
+
hitl: true,
|
|
17
|
+
inputschema: {
|
|
18
|
+
url: `http://localhost/${BraveWebSearchTool.toolName}`,
|
|
19
|
+
method: "POST",
|
|
20
|
+
requestBody: v4_1.z.toJSONSchema(v4_1.z.object({
|
|
21
|
+
query: v4_1.z.url().meta({
|
|
22
|
+
title: "search query",
|
|
23
|
+
description: "The query to search the web for."
|
|
24
|
+
}),
|
|
25
|
+
}).meta({
|
|
26
|
+
title: "search_request_body",
|
|
27
|
+
description: "The request body parameters for the search tool.",
|
|
28
|
+
}), { "io": "input" }),
|
|
29
|
+
},
|
|
30
|
+
});
|
|
31
|
+
this.braveSearchApiKey = options.braveSearchApiKey;
|
|
32
|
+
}
|
|
33
|
+
async bravewebsearch(query) {
|
|
34
|
+
try {
|
|
35
|
+
const params = new URLSearchParams({
|
|
36
|
+
q: query,
|
|
37
|
+
count: '10',
|
|
38
|
+
text_decorations: 'false',
|
|
39
|
+
result_filter: 'web',
|
|
40
|
+
summary: '1'
|
|
41
|
+
});
|
|
42
|
+
const response = await fetch(`https://api.search.brave.com/res/v1/web/search?${params}`, {
|
|
43
|
+
method: 'get',
|
|
44
|
+
headers: {
|
|
45
|
+
'Accept': 'application/json',
|
|
46
|
+
'Accept-Encoding': 'gzip',
|
|
47
|
+
'x-subscription-token': this.braveSearchApiKey || process.env.BRAVE_SEARCH_API_KEY || '',
|
|
48
|
+
},
|
|
49
|
+
});
|
|
50
|
+
const body = await response.json();
|
|
51
|
+
//console.log("Brave Search Response:", body);
|
|
52
|
+
let output = '';
|
|
53
|
+
body.web.results.forEach((item) => {
|
|
54
|
+
output += `\n\n#### ${item.title}\n`;
|
|
55
|
+
output += `\n${item.description}\n`;
|
|
56
|
+
output += `\n[Read More](${item.url})\n\n`;
|
|
57
|
+
});
|
|
58
|
+
return output;
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
console.error("Error in bravewebsearch:", error);
|
|
62
|
+
throw error;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
run(input, log) {
|
|
66
|
+
if (!input.query || typeof input.query !== "string") {
|
|
67
|
+
throw new Error("Invalid query provided.");
|
|
68
|
+
}
|
|
69
|
+
return new Promise((resolve, reject) => {
|
|
70
|
+
try {
|
|
71
|
+
log?.info(`\n\n> Searching web: ${input.query}:\n`);
|
|
72
|
+
const output = this.bravewebsearch(input.query);
|
|
73
|
+
return resolve({
|
|
74
|
+
status: 'success',
|
|
75
|
+
output
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
if (error instanceof Error) {
|
|
80
|
+
reject(new Error(`Failed to search web: ${input.query}. Error: ${error.message}`));
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
reject(new Error(`Failed to search web: ${input.query}. Unknown error.`));
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
exports.BraveWebSearchTool = BraveWebSearchTool;
|
|
90
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQnJhdmVXZWJTZWFyY2hUb29sLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi90b29scy9CcmF2ZVdlYlNlYXJjaFRvb2wudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsdURBQXVEO0FBQ3ZELCtCQUEyQjtBQUczQixnREFBNkM7QUFFN0MsTUFBYSxrQkFBbUIsU0FBUSx5QkFBVztJQUMzQyxNQUFNLENBQVUsUUFBUSxHQUFHLHVCQUF1QixDQUFDO0lBQ3pELGlCQUFpQixDQUFVO0lBQzVCLFlBQVksT0FFVjtRQUNELEtBQUssQ0FBQztZQUNMLElBQUksRUFBRSxrQkFBa0IsQ0FBQyxRQUFRO1lBQ2pDLFdBQVcsRUFBRSx1Q0FBdUM7WUFDcEQsSUFBSSxFQUFFLEtBQUs7WUFDWCxlQUFlLEVBQUUsSUFBSTtZQUNyQixJQUFJLEVBQUUsSUFBSTtZQUNWLFdBQVcsRUFBRTtnQkFDWixHQUFHLEVBQUUsb0JBQW9CLGtCQUFrQixDQUFDLFFBQVEsRUFBRTtnQkFDdEQsTUFBTSxFQUFFLE1BQU07Z0JBQ2QsV0FBVyxFQUFFLE1BQUMsQ0FBQyxZQUFZLENBQUMsTUFBQyxDQUFDLE1BQU0sQ0FBQztvQkFDcEMsS0FBSyxFQUFFLE1BQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7d0JBQ25CLEtBQUssRUFBRSxjQUFjO3dCQUNyQixXQUFXLEVBQUUsa0NBQWtDO3FCQUMvQyxDQUFDO2lCQUNGLENBQUMsQ0FBQyxJQUFJLENBQUM7b0JBQ1AsS0FBSyxFQUFFLHFCQUFxQjtvQkFDNUIsV0FBVyxFQUFFLGtEQUFrRDtpQkFDL0QsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDO2FBQ3RCO1NBQ0QsQ0FBQyxDQUFDO1FBQ0QsSUFBSSxDQUFDLGlCQUFpQixHQUFHLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQztJQUN0RCxDQUFDO0lBRU0sS0FBSyxDQUFDLGNBQWMsQ0FBQyxLQUFhO1FB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
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { PSAgentTool } from "../PSAgentTool";
|
|
2
|
+
export declare class PSArtifactTool extends PSAgentTool {
|
|
3
|
+
static TOOL_NAME: string;
|
|
4
|
+
private readonly artifacts;
|
|
5
|
+
constructor(artifactsStore?: Record<string, string>);
|
|
6
|
+
run(input: Record<string, any>): Promise<Record<string, any>>;
|
|
7
|
+
}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PSArtifactTool = void 0;
|
|
4
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
5
|
+
const PSAgentTool_1 = require("../PSAgentTool");
|
|
6
|
+
class PSArtifactTool extends PSAgentTool_1.PSAgentTool {
|
|
7
|
+
static TOOL_NAME = "artifact_tool";
|
|
8
|
+
artifacts = {};
|
|
9
|
+
constructor(artifactsStore) {
|
|
10
|
+
super({
|
|
11
|
+
name: PSArtifactTool.TOOL_NAME,
|
|
12
|
+
description: `Use this ${PSArtifactTool.TOOL_NAME} tool to read or write text artifacts based on the content provided.
|
|
13
|
+
The input is a JSON object with the following properties:
|
|
14
|
+
- 'name' (string) - the name of the artifact to be created or modified,
|
|
15
|
+
- 'content' (string) - the text content to be processed, this is not required for read action,
|
|
16
|
+
- 'action' (string) - the action to perform on the content, either 'read' or 'write'.
|
|
17
|
+
The output will be a JSON object with the status and output result of the action.`,
|
|
18
|
+
inputschema: {
|
|
19
|
+
url: `http://localhost/${PSArtifactTool.TOOL_NAME}`,
|
|
20
|
+
method: "POST",
|
|
21
|
+
//title: `${PSArtifactTool.TOOL_NAME}_inputs`,
|
|
22
|
+
//description: "Input for Artifact Tool",
|
|
23
|
+
requestBody: {
|
|
24
|
+
type: "object",
|
|
25
|
+
properties: {
|
|
26
|
+
name: {
|
|
27
|
+
type: "string",
|
|
28
|
+
title: "name",
|
|
29
|
+
description: "The name of the artifact",
|
|
30
|
+
},
|
|
31
|
+
content: {
|
|
32
|
+
type: "string",
|
|
33
|
+
title: "content",
|
|
34
|
+
description: "The content of the artifact",
|
|
35
|
+
},
|
|
36
|
+
action: {
|
|
37
|
+
type: "string",
|
|
38
|
+
title: "action",
|
|
39
|
+
description: "the action to perform on the content, either 'read' or 'write'",
|
|
40
|
+
enum: ["read", "write"],
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
required: ["name", "action"]
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
if (artifactsStore) {
|
|
48
|
+
this.artifacts = artifactsStore;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
async run(input) {
|
|
52
|
+
const name = input.name;
|
|
53
|
+
const action = input.action;
|
|
54
|
+
if (!name || name.trim().length === 0) {
|
|
55
|
+
throw new Error("name should not be empty");
|
|
56
|
+
}
|
|
57
|
+
const isExisting = this.artifacts[name];
|
|
58
|
+
if (action === "read") {
|
|
59
|
+
return {
|
|
60
|
+
status: "success",
|
|
61
|
+
output: this.artifacts[name],
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
else if (action == "write") {
|
|
65
|
+
const content = input.content || '';
|
|
66
|
+
this.artifacts[name] = content;
|
|
67
|
+
return {
|
|
68
|
+
status: "success",
|
|
69
|
+
output: `Artifact ${name} ${isExisting ? 'modified' : 'created'} with content length ${content.length}`
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
return {
|
|
73
|
+
status: "error",
|
|
74
|
+
output: `Invalid action ${input.action}, must be either 'read' or 'write'`
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
exports.PSArtifactTool = PSArtifactTool;
|
|
79
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUFNBcnRpZmFjdFRvb2wuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3Rvb2xzL1BTQXJ0aWZhY3RUb29sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHVEQUF1RDtBQUN2RCxnREFBNkM7QUFHN0MsTUFBYSxjQUFlLFNBQVEseUJBQVc7SUFDN0MsTUFBTSxDQUFDLFNBQVMsR0FBRyxlQUFlLENBQUM7SUFDbEIsU0FBUyxHQUEyQixFQUFFLENBQUM7SUFDeEQsWUFBWSxjQUF1QztRQUNqRCxLQUFLLENBQUM7WUFDSixJQUFJLEVBQUUsY0FBYyxDQUFDLFNBQVM7WUFDOUIsV0FBVyxFQUFFLFlBQVksY0FBYyxDQUFDLFNBQVM7Ozs7O2tGQUsyQjtZQUM1RSxXQUFXLEVBQUU7Z0JBQ1gsR0FBRyxFQUFFLG9CQUFvQixjQUFjLENBQUMsU0FBUyxFQUFFO2dCQUNuRCxNQUFNLEVBQUUsTUFBTTtnQkFDZCw4Q0FBOEM7Z0JBQzlDLHlDQUF5QztnQkFDekMsV0FBVyxFQUFFO29CQUNYLElBQUksRUFBRSxRQUFRO29CQUNkLFVBQVUsRUFBRTt3QkFDVixJQUFJLEVBQUU7NEJBQ0osSUFBSSxFQUFFLFFBQVE7NEJBQ2QsS0FBSyxFQUFFLE1BQU07NEJBQ2IsV0FBVyxFQUFFLDBCQUEwQjt5QkFDeEM7d0JBQ0QsT0FBTyxFQUFFOzRCQUNQLElBQUksRUFBRSxRQUFROzRCQUNkLEtBQUssRUFBRSxTQUFTOzRCQUNoQixXQUFXLEVBQUUsNkJBQTZCO3lCQUMzQzt3QkFDRCxNQUFNLEVBQUU7NEJBQ04sSUFBSSxFQUFFLFFBQVE7NEJBQ2QsS0FBSyxFQUFFLFFBQVE7NEJBQ2YsV0FBVyxFQUFFLGdFQUFnRTs0QkFDN0UsSUFBSSxFQUFFLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQzt5QkFDeEI7cUJBQ0Y7b0JBQ0QsUUFBUSxFQUFFLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQztpQkFDN0I7YUFDRjtTQUNGLENBQUMsQ0FBQztRQUNILElBQUksY0FBYyxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxjQUFjLENBQUM7UUFDbEMsQ0FBQztJQUNILENBQUM7SUFFZSxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQTBCO1FBQ2xELE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7UUFDeEIsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUM1QixJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDdEMsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBQzlDLENBQUM7UUFDRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hDLElBQUksTUFBTSxLQUFLLE1BQU0sRUFBRSxDQUFDO1lBQ3RCLE9BQU87Z0JBQ0wsTUFBTSxFQUFDLFNBQVM7Z0JBQ2hCLE1BQU0sRUFBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQzthQUM1QixDQUFBO1FBQ0gsQ0FBQzthQUFNLElBQUksTUFBTSxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQzdCLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDO1lBQ3BDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFBO1lBQzlCLE9BQU87Z0JBQ0wsTUFBTSxFQUFFLFNBQVM7Z0JBQ2pCLE1BQU0sRUFBRSxZQUFZLElBQUksSUFBSSxVQUFVLENBQUEsQ0FBQyxDQUFBLFVBQVUsQ0FBQSxDQUFDLENBQUEsU0FBUyx3QkFBd0IsT0FBTyxDQUFDLE1BQU0sRUFBRTthQUNwRyxDQUFBO1FBQ0gsQ0FBQztRQUVELE9BQU87WUFDTCxNQUFNLEVBQUUsT0FBTztZQUNmLE1BQU0sRUFBRSxrQkFBa0IsS0FBSyxDQUFDLE1BQU0sb0NBQW9DO1NBQzNFLENBQUE7SUFDSCxDQUFDOztBQXZFSCx3Q0F3RUMifQ==
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { PSAgentLogger } from "../PSAgentLogger";
|
|
2
|
+
import { PSAgentTool } from "../PSAgentTool";
|
|
3
|
+
export declare class PSCommandLineTool extends PSAgentTool {
|
|
4
|
+
static readonly toolName = "run_commandline";
|
|
5
|
+
private cwd;
|
|
6
|
+
constructor(options: {
|
|
7
|
+
cwd: string;
|
|
8
|
+
});
|
|
9
|
+
run(input: Record<string, any>, log?: PSAgentLogger): Promise<Record<string, any>>;
|
|
10
|
+
}
|