psadk 1.1.0 → 1.1.1
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 +19 -4
- 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/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/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/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/helpers.d.ts +4 -0
- package/build/module/lib/utils/helpers.js +41 -0
- package/package.json +1 -1
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
3
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
4
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
5
|
+
};
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.PSTodoWriteTool = exports.PSTodoReadTool = exports.TaskStore = exports.TodoPriority = exports.TodoStatus = void 0;
|
|
8
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
9
|
+
const v4_1 = require("zod/v4");
|
|
10
|
+
const PSAgentTool_1 = require("../PSAgentTool");
|
|
11
|
+
var TodoStatus;
|
|
12
|
+
(function (TodoStatus) {
|
|
13
|
+
TodoStatus["PENDING"] = "pending";
|
|
14
|
+
TodoStatus["IN_PROGRESS"] = "in_progress";
|
|
15
|
+
TodoStatus["COMPLETED"] = "completed";
|
|
16
|
+
})(TodoStatus || (exports.TodoStatus = TodoStatus = {}));
|
|
17
|
+
var TodoPriority;
|
|
18
|
+
(function (TodoPriority) {
|
|
19
|
+
TodoPriority["HIGH"] = "high";
|
|
20
|
+
TodoPriority["MEDIUM"] = "medium";
|
|
21
|
+
TodoPriority["LOW"] = "low";
|
|
22
|
+
})(TodoPriority || (exports.TodoPriority = TodoPriority = {}));
|
|
23
|
+
class TaskStore {
|
|
24
|
+
constructor(todos, filename) {
|
|
25
|
+
this.lastModified = new Date().toISOString();
|
|
26
|
+
this.lastModified = new Date().toISOString();
|
|
27
|
+
this.todos = todos || [];
|
|
28
|
+
this.filename = filename;
|
|
29
|
+
if (filename) {
|
|
30
|
+
try {
|
|
31
|
+
if (node_fs_1.default.existsSync(filename)) {
|
|
32
|
+
const data = node_fs_1.default.readFileSync(filename, 'utf-8');
|
|
33
|
+
this.todos = JSON.parse(data);
|
|
34
|
+
this.lastModified = new Date().toISOString();
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
console.error("Error loading todos from file:", error);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
get LastModified() {
|
|
43
|
+
return this.lastModified;
|
|
44
|
+
}
|
|
45
|
+
get Todos() {
|
|
46
|
+
return this.todos;
|
|
47
|
+
}
|
|
48
|
+
set Todos(todos) {
|
|
49
|
+
this.todos = todos;
|
|
50
|
+
this.lastModified = new Date().toISOString();
|
|
51
|
+
if (this.filename) {
|
|
52
|
+
node_fs_1.default.writeFileSync(this.filename, JSON.stringify(this.todos, null, 2));
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
exports.TaskStore = TaskStore;
|
|
57
|
+
class PSTodoReadTool extends PSAgentTool_1.PSAgentTool {
|
|
58
|
+
constructor(options) {
|
|
59
|
+
super({
|
|
60
|
+
name: PSTodoReadTool.toolName,
|
|
61
|
+
description: `Read the current task list.\nReturns a list of todos with their current state.`,
|
|
62
|
+
type: "API",
|
|
63
|
+
local_execution: true,
|
|
64
|
+
hitl: true,
|
|
65
|
+
inputschema: {
|
|
66
|
+
url: "http://localhost/read_todo",
|
|
67
|
+
method: "POST",
|
|
68
|
+
requestBody: v4_1.z.toJSONSchema(v4_1.z.null().meta({
|
|
69
|
+
title: "read_todo_request_body",
|
|
70
|
+
description: "The request body parameters for the read_todo tool.",
|
|
71
|
+
}), { "io": "input" }),
|
|
72
|
+
},
|
|
73
|
+
});
|
|
74
|
+
this.store = options.store || new TaskStore([]);
|
|
75
|
+
}
|
|
76
|
+
run(_input, log) {
|
|
77
|
+
const logger = log || console;
|
|
78
|
+
return new Promise((resolve, reject) => {
|
|
79
|
+
try {
|
|
80
|
+
logger.info(`📋 Referring to tasks list.`);
|
|
81
|
+
const output = this.store.Todos;
|
|
82
|
+
return resolve({
|
|
83
|
+
status: 'success',
|
|
84
|
+
output,
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
logger.error('Error reading todos:', error);
|
|
89
|
+
reject(error);
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
exports.PSTodoReadTool = PSTodoReadTool;
|
|
95
|
+
PSTodoReadTool.toolName = "read_todo";
|
|
96
|
+
class PSTodoWriteTool extends PSAgentTool_1.PSAgentTool {
|
|
97
|
+
constructor(options) {
|
|
98
|
+
super({
|
|
99
|
+
name: PSTodoWriteTool.toolName,
|
|
100
|
+
description: `Update the entire task list (complete replacement).
|
|
101
|
+
Parameters:
|
|
102
|
+
todos: List of todo items, each containing:
|
|
103
|
+
- id: Unique identifier for the task
|
|
104
|
+
- content: Task description
|
|
105
|
+
- status: Current status (pending, in_progress, completed)
|
|
106
|
+
- priority: Task priority (high, medium, low)
|
|
107
|
+
- metadata: Optional additional data
|
|
108
|
+
|
|
109
|
+
Returns success status and count of todos written.`,
|
|
110
|
+
type: "API",
|
|
111
|
+
local_execution: true,
|
|
112
|
+
hitl: true,
|
|
113
|
+
inputschema: {
|
|
114
|
+
url: "http://localhost/write_todo",
|
|
115
|
+
method: "POST",
|
|
116
|
+
requestBody: v4_1.z.toJSONSchema(v4_1.z.object({
|
|
117
|
+
todos: v4_1.z.array(v4_1.z.object({
|
|
118
|
+
id: v4_1.z.string().meta({
|
|
119
|
+
title: "id",
|
|
120
|
+
description: "The unique identifier for the todo item."
|
|
121
|
+
}),
|
|
122
|
+
content: v4_1.z.string().max(500).meta({
|
|
123
|
+
title: "content",
|
|
124
|
+
description: "The content of the todo item.",
|
|
125
|
+
}),
|
|
126
|
+
status: v4_1.z.enum(TodoStatus).meta({
|
|
127
|
+
title: "status",
|
|
128
|
+
description: "The current status of the todo item."
|
|
129
|
+
}),
|
|
130
|
+
priority: v4_1.z.enum(TodoPriority).meta({
|
|
131
|
+
title: "priority",
|
|
132
|
+
description: "The priority level of the todo item."
|
|
133
|
+
}),
|
|
134
|
+
created_at: v4_1.z.iso.date().meta({
|
|
135
|
+
title: "created_at",
|
|
136
|
+
description: "The creation date of the todo item."
|
|
137
|
+
}),
|
|
138
|
+
updated_at: v4_1.z.iso.date().meta({
|
|
139
|
+
title: "updated_at",
|
|
140
|
+
description: "The last update date of the todo item."
|
|
141
|
+
}),
|
|
142
|
+
metadata: v4_1.z.record(v4_1.z.string(), v4_1.z.any()).optional().meta({
|
|
143
|
+
description: "Additional metadata for the todo item."
|
|
144
|
+
})
|
|
145
|
+
})).meta({
|
|
146
|
+
title: "todos",
|
|
147
|
+
description: "The list of todos to write."
|
|
148
|
+
}),
|
|
149
|
+
}).meta({
|
|
150
|
+
title: "write_todo_request_body",
|
|
151
|
+
description: "The request body parameters for the write_todo tool.",
|
|
152
|
+
}), { "io": "input" }),
|
|
153
|
+
},
|
|
154
|
+
});
|
|
155
|
+
this.store = options.store || new TaskStore([]);
|
|
156
|
+
}
|
|
157
|
+
get Todos() {
|
|
158
|
+
return this.store.Todos;
|
|
159
|
+
}
|
|
160
|
+
run(input, log) {
|
|
161
|
+
if (!input.todos || !Array.isArray(input.todos)) {
|
|
162
|
+
throw new Error("Invalid todos provided.");
|
|
163
|
+
}
|
|
164
|
+
const logger = log || console;
|
|
165
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
166
|
+
let updateCount = 0;
|
|
167
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
168
|
+
let addCount = 0;
|
|
169
|
+
return new Promise((resolve, reject) => {
|
|
170
|
+
const todos = input.todos;
|
|
171
|
+
try {
|
|
172
|
+
//logger.info(`🛠️ Writing \`${todos.length}\` todos.`);
|
|
173
|
+
for (const t of todos) {
|
|
174
|
+
const idx = this.store.Todos.findIndex((todo) => todo.id === t.id);
|
|
175
|
+
if (idx >= 0) {
|
|
176
|
+
updateCount++;
|
|
177
|
+
this.store.Todos[idx] = {
|
|
178
|
+
id: t.id,
|
|
179
|
+
content: t.content,
|
|
180
|
+
status: t.status,
|
|
181
|
+
priority: t.priority,
|
|
182
|
+
created_at: t.created_at,
|
|
183
|
+
updated_at: t.updated_at,
|
|
184
|
+
metadata: t.metadata || {}
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
else {
|
|
188
|
+
addCount++;
|
|
189
|
+
this.store.Todos.push({
|
|
190
|
+
id: t.id,
|
|
191
|
+
content: t.content,
|
|
192
|
+
status: t.status,
|
|
193
|
+
priority: t.priority,
|
|
194
|
+
created_at: t.created_at,
|
|
195
|
+
updated_at: t.updated_at,
|
|
196
|
+
metadata: t.metadata || {}
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
const output = `📋 Updated task list with ${todos.length} items.`;
|
|
201
|
+
logger.info(output);
|
|
202
|
+
console.info("Tasks:");
|
|
203
|
+
for (const todo of this.store.Todos) {
|
|
204
|
+
console.info(`- [${todo.status === TodoStatus.COMPLETED ? '✅' : (todo.status === TodoStatus.IN_PROGRESS ? '⏳' : ' ')}] (${todo.priority}) ${todo.content} (ID: ${todo.id})`);
|
|
205
|
+
}
|
|
206
|
+
return resolve({
|
|
207
|
+
status: 'success',
|
|
208
|
+
output,
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
catch (error) {
|
|
212
|
+
logger.error('Error writing todos:', error);
|
|
213
|
+
reject(error);
|
|
214
|
+
}
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
exports.PSTodoWriteTool = PSTodoWriteTool;
|
|
219
|
+
PSTodoWriteTool.toolName = "write_todo";
|
|
220
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVG9kb1Rvb2wuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3Rvb2xzL1RvZG9Ub29sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSx1REFBdUQ7Ozs7OztBQUV2RCxzREFBeUI7QUFFekIsK0JBQTJCO0FBRzNCLGdEQUE2QztBQUU3QyxJQUFZLFVBSVg7QUFKRCxXQUFZLFVBQVU7SUFDbEIsaUNBQW1CLENBQUE7SUFDbkIseUNBQTJCLENBQUE7SUFDM0IscUNBQXVCLENBQUE7QUFDM0IsQ0FBQyxFQUpXLFVBQVUsMEJBQVYsVUFBVSxRQUlyQjtBQUVELElBQVksWUFJWDtBQUpELFdBQVksWUFBWTtJQUNwQiw2QkFBYSxDQUFBO0lBQ2IsaUNBQWlCLENBQUE7SUFDakIsMkJBQVcsQ0FBQTtBQUNmLENBQUMsRUFKVyxZQUFZLDRCQUFaLFlBQVksUUFJdkI7QUFZRCxNQUFhLFNBQVM7SUFJbEIsWUFBWSxLQUFhLEVBQUUsUUFBZ0I7UUFIbkMsaUJBQVksR0FBVyxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBSXBELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUM3QyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNiLElBQUksQ0FBQztnQkFDSCxJQUFJLGlCQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7b0JBQzVCLE1BQU0sSUFBSSxHQUFHLGlCQUFFLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztvQkFDaEQsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUM5QixJQUFJLENBQUMs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
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { AgentTool } from "./AgentTool";
|
|
2
|
+
export declare class WebSearchTool extends AgentTool {
|
|
3
|
+
static readonly toolName = "search_web";
|
|
4
|
+
constructor(options: {
|
|
5
|
+
logger?: (message: string) => void;
|
|
6
|
+
});
|
|
7
|
+
static bravewebsearch(query: string): Promise<string>;
|
|
8
|
+
execute(input: Record<string, any>): Promise<Record<string, any>>;
|
|
9
|
+
}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.WebSearchTool = void 0;
|
|
4
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
5
|
+
const AgentTool_1 = require("./AgentTool");
|
|
6
|
+
const v4_1 = require("zod/v4");
|
|
7
|
+
class WebSearchTool extends AgentTool_1.AgentTool {
|
|
8
|
+
constructor(options) {
|
|
9
|
+
super({
|
|
10
|
+
name: WebSearchTool.toolName,
|
|
11
|
+
description: "searches the web for the given query.",
|
|
12
|
+
type: "API",
|
|
13
|
+
local_execution: true,
|
|
14
|
+
hitl: true,
|
|
15
|
+
inputs: {
|
|
16
|
+
title: "search_inputs",
|
|
17
|
+
description: "Inputs for search tool.",
|
|
18
|
+
url: `http://localhost/${WebSearchTool.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
|
+
logger: options.logger,
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
static 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': 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
|
+
execute(input) {
|
|
66
|
+
if (!input.query || typeof input.query !== "string") {
|
|
67
|
+
throw new Error("Invalid query provided.");
|
|
68
|
+
}
|
|
69
|
+
const log = this.logger || console.log;
|
|
70
|
+
return new Promise((resolve, reject) => {
|
|
71
|
+
try {
|
|
72
|
+
log(`\n\n> Searching web: ${input.query}:\n`);
|
|
73
|
+
const output = WebSearchTool.bravewebsearch(input.query);
|
|
74
|
+
return resolve({
|
|
75
|
+
status: 'success',
|
|
76
|
+
output
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
if (error instanceof Error) {
|
|
81
|
+
reject(new Error(`Failed to search web: ${input.query}. Error: ${error.message}`));
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
reject(new Error(`Failed to search web: ${input.query}. Unknown error.`));
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
exports.WebSearchTool = WebSearchTool;
|
|
91
|
+
WebSearchTool.toolName = "search_web";
|
|
92
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiV2ViU2VhcmNoVG9vbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdG9vbHMvV2ViU2VhcmNoVG9vbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx1REFBdUQ7QUFDdkQsMkNBQXdDO0FBQ3hDLCtCQUEyQjtBQUUzQixNQUFhLGFBQWMsU0FBUSxxQkFBUztJQUUzQyxZQUFZLE9BRVg7UUFDQSxLQUFLLENBQUM7WUFDTCxJQUFJLEVBQUUsYUFBYSxDQUFDLFFBQVE7WUFDNUIsV0FBVyxFQUFFLHVDQUF1QztZQUNwRCxJQUFJLEVBQUUsS0FBSztZQUNYLGVBQWUsRUFBRSxJQUFJO1lBQ3JCLElBQUksRUFBRSxJQUFJO1lBQ1YsTUFBTSxFQUFFO2dCQUNQLEtBQUssRUFBRSxlQUFlO2dCQUN0QixXQUFXLEVBQUUseUJBQXlCO2dCQUN0QyxHQUFHLEVBQUUsb0JBQW9CLGFBQWEsQ0FBQyxRQUFRLEVBQUU7Z0JBQ2pELE1BQU0sRUFBRSxNQUFNO2dCQUNkLFdBQVcsRUFBRSxNQUFDLENBQUMsWUFBWSxDQUFDLE1BQUMsQ0FBQyxNQUFNLENBQUM7b0JBQ3BDLEtBQUssRUFBRSxNQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO3dCQUNuQixLQUFLLEVBQUUsY0FBYzt3QkFDckIsV0FBVyxFQUFFLGtDQUFrQztxQkFDL0MsQ0FBQztpQkFDRixDQUFDLENBQUMsSUFBSSxDQUFDO29CQUNQLEtBQUssRUFBRSxxQkFBcUI7b0JBQzVCLFdBQVcsRUFBRSxrREFBa0Q7aUJBQy9ELENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQzthQUN0QjtZQUNELE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTTtTQUN0QixDQUFDLENBQUM7SUFDSixDQUFDO0lBRU0sTUFBTSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsS0FBYTtRQUMvQyxJQUFJLENBQUM7WUFDSixNQUFNLE1BQU0sR0FBRyxJ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
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { AgentTool } from "./AgentTool";
|
|
2
|
+
import { TaskLogger } from "./TaskLogger";
|
|
3
|
+
export declare class WriteFileTool extends AgentTool {
|
|
4
|
+
static readonly toolName = "write_file";
|
|
5
|
+
private paths;
|
|
6
|
+
constructor(options: {
|
|
7
|
+
paths?: string[];
|
|
8
|
+
});
|
|
9
|
+
execute(input: Record<string, any>, log?: TaskLogger): Promise<Record<string, any>>;
|
|
10
|
+
}
|
|
@@ -0,0 +1,74 @@
|
|
|
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.WriteFileTool = void 0;
|
|
7
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
8
|
+
const AgentTool_1 = require("./AgentTool");
|
|
9
|
+
const v4_1 = require("zod/v4");
|
|
10
|
+
const fs_1 = __importDefault(require("fs"));
|
|
11
|
+
const path_1 = __importDefault(require("path"));
|
|
12
|
+
const helpers_1 = require("./helpers");
|
|
13
|
+
class WriteFileTool extends AgentTool_1.AgentTool {
|
|
14
|
+
constructor(options) {
|
|
15
|
+
super({
|
|
16
|
+
name: WriteFileTool.toolName,
|
|
17
|
+
description: "Writes content to a file in repository identified by 'path'.",
|
|
18
|
+
type: "API",
|
|
19
|
+
local_execution: true,
|
|
20
|
+
hitl: true,
|
|
21
|
+
inputs: {
|
|
22
|
+
url: `http://localhost/${WriteFileTool.toolName}`,
|
|
23
|
+
method: "POST",
|
|
24
|
+
requestBody: v4_1.z.toJSONSchema(v4_1.z.object({
|
|
25
|
+
path: v4_1.z.string().meta({
|
|
26
|
+
title: "File_Path",
|
|
27
|
+
description: "The path of the file to be write. This should be a valid file path in the repository."
|
|
28
|
+
}),
|
|
29
|
+
content: v4_1.z.string().meta({
|
|
30
|
+
title: "File_Content",
|
|
31
|
+
description: "The content to be written to the file. This should be a valid string content."
|
|
32
|
+
}),
|
|
33
|
+
}).meta({
|
|
34
|
+
title: `${WriteFileTool.toolName}_request_body`,
|
|
35
|
+
description: `The request body parameters for the ${WriteFileTool.toolName} tool.`,
|
|
36
|
+
}), { "io": "input" }),
|
|
37
|
+
},
|
|
38
|
+
});
|
|
39
|
+
this.paths = [];
|
|
40
|
+
this.paths = options.paths || [];
|
|
41
|
+
}
|
|
42
|
+
execute(input, log) {
|
|
43
|
+
if (!input.path || typeof input.path !== "string") {
|
|
44
|
+
throw new Error("Invalid file path provided.");
|
|
45
|
+
}
|
|
46
|
+
const logger = log || console;
|
|
47
|
+
return new Promise((resolve, reject) => {
|
|
48
|
+
const filePath = path_1.default.resolve(...this.paths, input.path);
|
|
49
|
+
const content = input.content;
|
|
50
|
+
// if (!filePath.startsWith(run.srcDir))
|
|
51
|
+
// filePath = path.join(run.srcDir, lastevent.toolInput.request_body.path);
|
|
52
|
+
try {
|
|
53
|
+
logger.info(`📝 Writing ${(0, helpers_1.formatFileSize)(content.length)} to file:\`${input.path}\``);
|
|
54
|
+
fs_1.default.mkdirSync(path_1.default.dirname(filePath), { recursive: true });
|
|
55
|
+
fs_1.default.writeFileSync(filePath, (0, helpers_1.unEscapeHTML)(content), 'utf-8');
|
|
56
|
+
// logger.info(`> Wrote ${content.length} bytes to file.`);
|
|
57
|
+
return resolve({
|
|
58
|
+
status: 'success'
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
if (error instanceof Error) {
|
|
63
|
+
reject(new Error(`Failed to write file at path: ${input.path}. Error: ${error.message}`));
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
reject(new Error(`Failed to write file at path: ${input.path}. Unknown error.`));
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
exports.WriteFileTool = WriteFileTool;
|
|
73
|
+
WriteFileTool.toolName = "write_file";
|
|
74
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiV3JpdGVGaWxlVG9vbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdG9vbHMvV3JpdGVGaWxlVG9vbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSx1REFBdUQ7QUFDdkQsMkNBQXdDO0FBQ3hDLCtCQUEyQjtBQUMzQiw0Q0FBb0I7QUFDcEIsZ0RBQXdCO0FBRXhCLHVDQUF5RDtBQUV6RCxNQUFhLGFBQWMsU0FBUSxxQkFBUztJQUczQyxZQUFZLE9BRVg7UUFDQSxLQUFLLENBQUM7WUFDTCxJQUFJLEVBQUUsYUFBYSxDQUFDLFFBQVE7WUFDNUIsV0FBVyxFQUFFLDhEQUE4RDtZQUMzRSxJQUFJLEVBQUUsS0FBSztZQUNYLGVBQWUsRUFBRSxJQUFJO1lBQ3JCLElBQUksRUFBRSxJQUFJO1lBQ1YsTUFBTSxFQUFFO2dCQUNQLEdBQUcsRUFBRSxvQkFBb0IsYUFBYSxDQUFDLFFBQVEsRUFBRTtnQkFDakQsTUFBTSxFQUFFLE1BQU07Z0JBQ2QsV0FBVyxFQUFFLE1BQUMsQ0FBQyxZQUFZLENBQUMsTUFBQyxDQUFDLE1BQU0sQ0FBQztvQkFDcEMsSUFBSSxFQUFFLE1BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUM7d0JBQ3JCLEtBQUssRUFBRSxXQUFXO3dCQUNsQixXQUFXLEVBQUUsdUZBQXVGO3FCQUNwRyxDQUFDO29CQUNGLE9BQU8sRUFBRSxNQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDO3dCQUN4QixLQUFLLEVBQUUsY0FBYzt3QkFDckIsV0FBVyxFQUFFLCtFQUErRTtxQkFDNUYsQ0FBQztpQkFDRixDQUFDLENBQUMsSUFBSSxDQUFDO29CQUNQLEtBQUssRUFBRSxHQUFHLGFBQWEsQ0FBQyxRQUFRLGVBQWU7b0JBQy9DLFdBQVcsRUFBRSx1Q0FBdUMsYUFBYSxDQUFDLFFBQVEsUUFBUTtpQkFDbEYsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDO2FBQ3RCO1NBQ0QsQ0FBQyxDQUFDO1FBM0JJLFVBQUssR0FBYSxFQUFFLENBQUM7UUE0QjVCLElBQUksQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUNNLE9BQU8sQ0FBQyxLQUEwQixFQUFFLEdBQWdCO1FBQzFELElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLE9BQU8sS0FBSyxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUNuRCxNQUFNLElBQUksS0FBSyxDQUFDLDZCQUE2QixDQUFDLENBQUM7UUFDaEQsQ0FBQztRQUNELE1BQU0sTUFBTSxHQUFHLEdBQUcsSUFBSSxPQUFPLENBQUM7UUFDOUIsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUN0QyxNQUFNLFFBQVEsR0FBRyxjQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDekQsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztZQUM5Qix3Q0FBd0M7WUFDeEMsNEVBQTRFO1lBQzVFLElBQUksQ0FBQztnQkFDSixNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsSUFBQSx3QkFBYyxFQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsY0FBYyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQztnQkFDdEYsWUFBRSxDQUFDLFNBQVMsQ0FBQyxjQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7Z0JBQzFELFlBQUUsQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLElBQUEsc0JBQVksRUFBQyxPQUFPLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDdkQsMkRBQTJEO2dCQUMvRCxPQUFPLE9BQU8sQ0FBQztvQkFDZCxNQUFNLEVBQUUsU0FBUztpQkFDakIsQ0FBQyxDQUFDO1lBQ0osQ0FBQztZQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7Z0JBQ2hCLElBQUksS0FBSyxZQUFZLEtBQUssRUFBRSxDQUFDO29CQUM1QixNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsaUNBQWlDLEtBQUssQ0FBQyxJQUFJLFlBQVksS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDM0YsQ0FBQztxQkFBTSxDQUFDO29CQUNQLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxpQ0FBaUMsS0FBSyxDQUFDLElBQUksa0JBQWtCLENBQUMsQ0FBQyxDQUFDO2dCQUNsRixDQUFDO1lBQ0YsQ0FBQztRQUNGLENBQUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQzs7QUExREYsc0NBMkRDO0FBMUR1QixzQkFBUSxHQUFHLFlBQVksQUFBZixDQUFnQiJ9
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export declare function sleep(ms: number): Promise<unknown>;
|
|
2
|
+
export declare function formatFileSize(bytes: number, decimalPoint?: number): string;
|
|
3
|
+
export declare function truncateString(str: string, num: number): string;
|
|
4
|
+
export declare function unEscapeHTML(text: string): string;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.sleep = sleep;
|
|
4
|
+
exports.formatFileSize = formatFileSize;
|
|
5
|
+
exports.truncateString = truncateString;
|
|
6
|
+
exports.unEscapeHTML = unEscapeHTML;
|
|
7
|
+
async function sleep(ms) {
|
|
8
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
9
|
+
}
|
|
10
|
+
function formatFileSize(bytes, decimalPoint = 2) {
|
|
11
|
+
if (bytes === 0)
|
|
12
|
+
return '0 Bytes';
|
|
13
|
+
const k = 1024;
|
|
14
|
+
const dm = decimalPoint < 0 ? 0 : decimalPoint;
|
|
15
|
+
const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
|
|
16
|
+
const i = Math.floor(Math.log(bytes) / Math.log(k));
|
|
17
|
+
return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i];
|
|
18
|
+
}
|
|
19
|
+
function truncateString(str, num) {
|
|
20
|
+
if (str.length <= num) {
|
|
21
|
+
return str;
|
|
22
|
+
}
|
|
23
|
+
return str.slice(0, num) + '...';
|
|
24
|
+
}
|
|
25
|
+
function unEscapeHTML(text) {
|
|
26
|
+
const map = {
|
|
27
|
+
'&': '&',
|
|
28
|
+
'<': '<',
|
|
29
|
+
'>': '>',
|
|
30
|
+
'"': '"',
|
|
31
|
+
''': "'",
|
|
32
|
+
};
|
|
33
|
+
let result = text.replace(/&|<|>|"|'/g, function (m) { return map[m]; });
|
|
34
|
+
// Unescape Unicode sequences
|
|
35
|
+
result = result.replace(/\\u[\dA-Fa-f]{4}/g, (unicode) => {
|
|
36
|
+
const codePoint = parseInt(unicode.slice(2), 16);
|
|
37
|
+
return String.fromCharCode(codePoint);
|
|
38
|
+
});
|
|
39
|
+
return result;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdXRpbHMvaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHNCQUVDO0FBR0Qsd0NBT0M7QUFFRCx3Q0FLQztBQUVELG9DQWdCQztBQXJDTSxLQUFLLFVBQVUsS0FBSyxDQUFDLEVBQVU7SUFDcEMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN6RCxDQUFDO0FBR0QsU0FBZ0IsY0FBYyxDQUFDLEtBQWEsRUFBRSxZQUFZLEdBQUcsQ0FBQztJQUM1RCxJQUFJLEtBQUssS0FBSyxDQUFDO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFDbEMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ2YsTUFBTSxFQUFFLEdBQUcsWUFBWSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7SUFDL0MsTUFBTSxLQUFLLEdBQUcsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3hFLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEQsT0FBTyxVQUFVLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNFLENBQUM7QUFFRCxTQUFnQixjQUFjLENBQUMsR0FBVyxFQUFFLEdBQVc7SUFDckQsSUFBSSxHQUFHLENBQUMsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUNELE9BQU8sR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ25DLENBQUM7QUFFRCxTQUFnQixZQUFZLENBQUMsSUFBWTtJQUV2QyxNQUFNLEdBQUcsR0FBMkI7UUFDbEMsT0FBTyxFQUFFLEdBQUc7UUFDWixNQUFNLEVBQUUsR0FBRztRQUNYLE1BQU0sRUFBRSxHQUFHO1FBQ1gsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztLQUNkLENBQUM7SUFDRixJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGdDQUFnQyxFQUFFLFVBQVMsQ0FBQyxJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUYsNkJBQTZCO0lBQzdCLE1BQU0sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLG1CQUFtQixFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUU7UUFDckQsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDakQsT0FBTyxNQUFNLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzFDLENBQUMsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQyJ9
|
package/build/module/index.d.ts
CHANGED
|
@@ -4,3 +4,8 @@ export * from './lib/PSAgentConfig';
|
|
|
4
4
|
export * from './lib/PSAgentLogger';
|
|
5
5
|
export * from './lib/PSAgentTool';
|
|
6
6
|
export * from './lib/PSAgentTask';
|
|
7
|
+
export * from './lib/tools/TodoTool';
|
|
8
|
+
export * from './lib/tools/PSCommandLineTool';
|
|
9
|
+
export * from './lib/tools/PSReadFileTool';
|
|
10
|
+
export * from './lib/tools/PSWriteFileTool';
|
|
11
|
+
export * from './lib/tools/PSSubAgentTool';
|
package/build/module/index.js
CHANGED
|
@@ -1,7 +1,29 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./lib/PSAI"), exports);
|
|
18
|
+
__exportStar(require("./lib/PSAgent"), exports);
|
|
19
|
+
__exportStar(require("./lib/PSAgentConfig"), exports);
|
|
20
|
+
__exportStar(require("./lib/PSAgentLogger"), exports);
|
|
21
|
+
__exportStar(require("./lib/PSAgentTool"), exports);
|
|
22
|
+
__exportStar(require("./lib/PSAgentTask"), exports);
|
|
23
|
+
__exportStar(require("./lib/tools/TodoTool"), exports);
|
|
24
|
+
__exportStar(require("./lib/tools/PSCommandLineTool"), exports);
|
|
25
|
+
__exportStar(require("./lib/tools/PSReadFileTool"), exports);
|
|
26
|
+
__exportStar(require("./lib/tools/PSWriteFileTool"), exports);
|
|
27
|
+
__exportStar(require("./lib/tools/PSSubAgentTool"), exports);
|
|
28
|
+
;
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDZDQUEyQjtBQUMzQixnREFBOEI7QUFDOUIsc0RBQW9DO0FBQ3BDLHNEQUFvQztBQUNwQyxvREFBa0M7QUFDbEMsb0RBQWtDO0FBQ2xDLHVEQUFxQztBQUNyQyxnRUFBOEM7QUFDOUMsNkRBQTJDO0FBQzNDLDhEQUE0QztBQUM1Qyw2REFBMkM7QUFBQSxDQUFDIn0=
|