psadk 1.1.1 → 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.
@@ -24,9 +24,9 @@ class PSAgentLogger {
24
24
  const duration = now - this.lastTimestamp;
25
25
  this.lastTimestamp = duration === 0 ? now + 1 : this.lastTimestamp;
26
26
  if (this.logFilePath) {
27
- node_fs_1.default.appendFileSync(this.logFilePath, `data: ${JSON.stringify({ ts: type === 'todo' ? 0 : now, type, taskId: this.taskId, task: this.task, message })}\n\n`, { encoding: 'utf-8' });
27
+ 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' });
28
28
  }
29
- console.log(`[${new Date().toISOString()}] [${type.toUpperCase()}] ${message}`, ...optionalParams);
29
+ this.logFn(`[${type.toUpperCase()}] ${message}`, ...optionalParams);
30
30
  }
31
31
  debug(message, ...optionalParams) {
32
32
  this.log('debug', message, ...optionalParams);
@@ -45,4 +45,4 @@ class PSAgentLogger {
45
45
  }
46
46
  }
47
47
  exports.PSAgentLogger = PSAgentLogger;
48
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUFNBZ2VudExvZ2dlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvUFNBZ2VudExvZ2dlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSx1REFBdUQ7QUFDdkQsc0RBQXlCO0FBRXpCLGtEQUEwQjtBQUcxQixNQUFhLGFBQWE7SUFNeEIsWUFBWSxPQUErRTtRQUxuRixVQUFLLEdBQUcsSUFBQSxlQUFLLEVBQUMsVUFBVSxDQUFDLENBQUM7UUFFMUIsa0JBQWEsR0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFJL0IsSUFBSSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsTUFBTSxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFBLGVBQUssRUFBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDbkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQzVCLENBQUM7UUFDRCxJQUFJLENBQUMsV0FBVyxHQUFHLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxXQUFXLENBQUE7UUFDdkMsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsTUFBTSxDQUFDO1FBQzlCLElBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLElBQUksQ0FBQztJQUM1QixDQUFDO0lBRUQsR0FBRyxDQUFDLElBQVksRUFBRSxPQUFXLEVBQUUsR0FBRyxjQUFvQjtRQUNwRCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDdkIsTUFBTSxRQUFRLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7UUFDMUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxRQUFRLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDO1FBQ25FLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3JCLGlCQUFFLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsU0FBUyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksS0FBRyxNQUFNLENBQUEsQ0FBQyxDQUFBLENBQUMsQ0FBQSxDQUFDLENBQUEsR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUM5SyxDQUFDO1FBQ0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLE1BQU0sSUFBSSxDQUFDLFdBQVcsRUFBRSxLQUFLLE9BQU8sRUFBRSxFQUFFLEdBQUcsY0FBYyxDQUFDLENBQUM7SUFDckcsQ0FBQztJQUNNLEtBQUssQ0FBQyxPQUFlLEVBQUUsR0FBRyxjQUFvQjtRQUNuRCxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsR0FBRyxjQUFjLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBQ00sSUFBSSxDQUFDLE9BQWUsRUFBRSxHQUFHLGNBQW9CO1FBQ2xELElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLGNBQWMsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFDTSxLQUFLLENBQUMsT0FBZSxFQUFFLEdBQUcsY0FBb0I7UUFDbkQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEdBQUcsY0FBYyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUNNLElBQUksQ0FBQyxPQUFlLEVBQUUsR0FBRyxjQUFvQjtRQUNsRCxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxjQUFjLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBQ00sSUFBSSxDQUFDLFVBQWtCLEVBQUUsRUFBRSxHQUFHLGNBQW9CO1FBQ3ZELElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLGNBQWMsQ0FBQyxDQUFDO0lBQy9DLENBQUM7Q0FDRjtBQXhDRCxzQ0F3Q0MifQ==
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUFNBZ2VudExvZ2dlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvUFNBZ2VudExvZ2dlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSx1REFBdUQ7QUFDdkQsc0RBQXlCO0FBRXpCLGtEQUEwQjtBQUcxQixNQUFhLGFBQWE7SUFNeEIsWUFBWSxPQUErRTtRQUxuRixVQUFLLEdBQUcsSUFBQSxlQUFLLEVBQUMsVUFBVSxDQUFDLENBQUM7UUFFMUIsa0JBQWEsR0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFJL0IsSUFBSSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsTUFBTSxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFBLGVBQUssRUFBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDbkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQzVCLENBQUM7UUFDRCxJQUFJLENBQUMsV0FBVyxHQUFHLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxXQUFXLENBQUE7UUFDdkMsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsTUFBTSxDQUFDO1FBQzlCLElBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLElBQUksQ0FBQztJQUM1QixDQUFDO0lBRUQsR0FBRyxDQUFDLElBQVksRUFBRSxPQUFXLEVBQUUsR0FBRyxjQUFvQjtRQUNwRCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDdkIsTUFBTSxRQUFRLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7UUFDMUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxRQUFRLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDO1FBQ25FLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3JCLGlCQUFFLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsU0FBUyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksS0FBRyxNQUFNLENBQUEsQ0FBQyxDQUFBLENBQUMsQ0FBQSxDQUFDLENBQUEsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDN0wsQ0FBQztRQUNELElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLEtBQUssT0FBTyxFQUFFLEVBQUUsR0FBRyxjQUFjLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBQ00sS0FBSyxDQUFDLE9BQWUsRUFBRSxHQUFHLGNBQW9CO1FBQ25ELElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxHQUFHLGNBQWMsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFDTSxJQUFJLENBQUMsT0FBZSxFQUFFLEdBQUcsY0FBb0I7UUFDbEQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsY0FBYyxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUNNLEtBQUssQ0FBQyxPQUFlLEVBQUUsR0FBRyxjQUFvQjtRQUNuRCxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsR0FBRyxjQUFjLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBQ00sSUFBSSxDQUFDLE9BQWUsRUFBRSxHQUFHLGNBQW9CO1FBQ2xELElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLGNBQWMsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFDTSxJQUFJLENBQUMsVUFBa0IsRUFBRSxFQUFFLEdBQUcsY0FBb0I7UUFDdkQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsY0FBYyxDQUFDLENBQUM7SUFDL0MsQ0FBQztDQUNGO0FBeENELHNDQXdDQyJ9
@@ -0,0 +1,45 @@
1
+ import { PSAgentLogger } from "../PSAgentLogger";
2
+ import { PSAgentTool } from "../PSAgentTool";
3
+ export interface Memory {
4
+ path: string;
5
+ content?: string;
6
+ }
7
+ export interface IMemoryStore {
8
+ viewMemories(withContent?: boolean): Promise<Memory[]>;
9
+ getMemoryByPath(relativePath: string): Promise<Memory | undefined>;
10
+ setMemory(mem: Memory): Promise<void>;
11
+ deleteMemory(relativePath: string): Promise<boolean>;
12
+ renameMemory(oldRelativePath: string, newRelativePath: string): Promise<boolean>;
13
+ insertIntoMemory(relativePath: string, lineNumber: number, text: string): Promise<boolean>;
14
+ replaceInMemory(relativePath: string, oldStr: string, newStr: string): Promise<boolean>;
15
+ }
16
+ export declare class MemoryStore implements IMemoryStore {
17
+ private lastModified;
18
+ private directory;
19
+ constructor(options?: {
20
+ initialmemories?: Memory[];
21
+ directory?: string;
22
+ });
23
+ viewMemories(withContent?: boolean): Promise<Memory[]>;
24
+ getMemoryByPath(relativePath: string): Promise<Memory | undefined>;
25
+ setMemory(mem: Memory): Promise<void>;
26
+ deleteMemory(relativePath: string): Promise<boolean>;
27
+ renameMemory(oldRelativePath: string, newRelativePath: string): Promise<boolean>;
28
+ insertIntoMemory(relativePath: string, lineNumber: number, text: string): Promise<boolean>;
29
+ replaceInMemory(relativePath: string, oldStr: string, newStr: string): Promise<boolean>;
30
+ get LastModified(): string;
31
+ }
32
+ export declare class PSMemoryTool extends PSAgentTool {
33
+ static readonly toolName = "memory_tool";
34
+ private store;
35
+ constructor(options: {
36
+ store: MemoryStore;
37
+ });
38
+ run(_input: Record<string, any>, log?: PSAgentLogger): Promise<Record<string, any>>;
39
+ private run_view;
40
+ private run_create;
41
+ private run_str_replace;
42
+ private run_insert;
43
+ private run_delete;
44
+ private run_rename;
45
+ }
@@ -0,0 +1,485 @@
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.PSMemoryTool = exports.MemoryStore = void 0;
8
+ const node_fs_1 = __importDefault(require("node:fs"));
9
+ const node_os_1 = __importDefault(require("node:os"));
10
+ const node_path_1 = __importDefault(require("node:path"));
11
+ const uuid_1 = require("uuid");
12
+ const v4_1 = require("zod/v4");
13
+ const PSAgentTool_1 = require("../PSAgentTool");
14
+ const debuglogger_1 = __importDefault(require("../utils/debuglogger"));
15
+ const dlog = (0, debuglogger_1.default)('PSAgent:MemoryTool');
16
+ class MemoryStore {
17
+ constructor(options) {
18
+ this.lastModified = new Date().toISOString();
19
+ this.lastModified = new Date().toISOString();
20
+ this.directory = (options === null || options === void 0 ? void 0 : options.directory) || node_path_1.default.join(node_os_1.default.tmpdir(), (0, uuid_1.v4)());
21
+ if (!node_fs_1.default.existsSync(this.directory)) {
22
+ node_fs_1.default.mkdirSync(this.directory, { recursive: true });
23
+ dlog.info(`Created memory directory at ${this.directory}`);
24
+ }
25
+ if (this.directory) {
26
+ try {
27
+ if (options === null || options === void 0 ? void 0 : options.initialmemories) {
28
+ for (const mem of options.initialmemories) {
29
+ const filePath = node_path_1.default.join(this.directory, `${mem.path}`);
30
+ node_fs_1.default.writeFileSync(filePath, mem.content || '', { encoding: 'utf-8' });
31
+ mem.path = filePath;
32
+ }
33
+ }
34
+ const files = node_fs_1.default.readdirSync(this.directory, { recursive: true });
35
+ dlog.info(`Found memories from directory: ${this.directory}, found ${files.length} files.`);
36
+ }
37
+ catch (error) {
38
+ dlog.error("Unable to load memories from directory:", error);
39
+ }
40
+ }
41
+ }
42
+ async viewMemories(withContent) {
43
+ if (!this.directory)
44
+ return [];
45
+ const files = node_fs_1.default.readdirSync(this.directory);
46
+ const memories = files.map(f => {
47
+ let filePath = node_path_1.default.join(this.directory, f);
48
+ const content = withContent ? node_fs_1.default.readFileSync(filePath, 'utf-8') : undefined;
49
+ filePath = filePath.replace(this.directory, '');
50
+ filePath = filePath.startsWith('/') ? filePath : filePath = '/' + filePath;
51
+ return { path: filePath, content };
52
+ });
53
+ return memories;
54
+ }
55
+ async getMemoryByPath(relativePath) {
56
+ if (!this.directory)
57
+ return undefined;
58
+ const filePath = node_path_1.default.join(this.directory, relativePath);
59
+ if (node_fs_1.default.existsSync(filePath)) {
60
+ const content = node_fs_1.default.readFileSync(filePath, 'utf-8');
61
+ return { path: relativePath, content };
62
+ }
63
+ return undefined;
64
+ }
65
+ async setMemory(mem) {
66
+ if (!this.directory)
67
+ return;
68
+ const filePath = node_path_1.default.join(this.directory, mem.path);
69
+ node_fs_1.default.writeFileSync(filePath, mem.content || '', { encoding: 'utf-8' });
70
+ this.lastModified = new Date().toISOString();
71
+ }
72
+ async deleteMemory(relativePath) {
73
+ if (!this.directory)
74
+ return false;
75
+ const filePath = node_path_1.default.join(this.directory, relativePath);
76
+ if (node_fs_1.default.existsSync(filePath)) {
77
+ node_fs_1.default.unlinkSync(filePath);
78
+ this.lastModified = new Date().toISOString();
79
+ return true;
80
+ }
81
+ return false;
82
+ }
83
+ async renameMemory(oldRelativePath, newRelativePath) {
84
+ if (!this.directory)
85
+ return false;
86
+ const oldFilePath = node_path_1.default.join(this.directory, oldRelativePath);
87
+ const newFilePath = node_path_1.default.join(this.directory, newRelativePath);
88
+ if (node_fs_1.default.existsSync(oldFilePath)) {
89
+ node_fs_1.default.renameSync(oldFilePath, newFilePath);
90
+ this.lastModified = new Date().toISOString();
91
+ return true;
92
+ }
93
+ return false;
94
+ }
95
+ async insertIntoMemory(relativePath, lineNumber, text) {
96
+ if (!this.directory)
97
+ return false;
98
+ const filePath = node_path_1.default.join(this.directory, relativePath);
99
+ if (node_fs_1.default.existsSync(filePath)) {
100
+ const content = node_fs_1.default.readFileSync(filePath, 'utf-8');
101
+ const lines = content.split('\n');
102
+ const index = Math.max(0, Math.min(lines.length, lineNumber - 1));
103
+ lines.splice(index, 0, text);
104
+ node_fs_1.default.writeFileSync(filePath, lines.join('\n'), { encoding: 'utf-8' });
105
+ this.lastModified = new Date().toISOString();
106
+ return true;
107
+ }
108
+ return false;
109
+ }
110
+ async replaceInMemory(relativePath, oldStr, newStr) {
111
+ if (!this.directory)
112
+ return false;
113
+ const filePath = node_path_1.default.join(this.directory, relativePath);
114
+ if (node_fs_1.default.existsSync(filePath)) {
115
+ let content = node_fs_1.default.readFileSync(filePath, 'utf-8');
116
+ //use regex to find all instances of oldStr and replace it with newStr
117
+ const regex = new RegExp(oldStr, 'g');
118
+ content = content.replace(regex, newStr);
119
+ node_fs_1.default.writeFileSync(filePath, content, { encoding: 'utf-8' });
120
+ this.lastModified = new Date().toISOString();
121
+ return true;
122
+ }
123
+ return false;
124
+ }
125
+ get LastModified() {
126
+ return this.lastModified;
127
+ }
128
+ }
129
+ exports.MemoryStore = MemoryStore;
130
+ class PSMemoryTool extends PSAgentTool_1.PSAgentTool {
131
+ constructor(options) {
132
+ super({
133
+ name: PSMemoryTool.toolName,
134
+ description: `Use this tool to manage the agent's memory files.
135
+ Commands:
136
+ - view: Shows the memory directory contents or memory file contents with optional line ranges.
137
+ - create: Create a new memory file with a unique path and specified content.
138
+ - str_replace: Replace a specific string in a memory file with another string.
139
+ - insert: Adds text to a memory, Insert text at a specific line.
140
+ - delete: Remove a memory file by path, Delete a file or directory.
141
+ - rename: Rename a memory file by its path.
142
+
143
+ Details and examples for \`view\` command:
144
+ Shows the memory directory contents or memory file contents with optional line ranges.
145
+ Parameters:
146
+ - command: view
147
+ - path: (optional) The path of the memory file to view. If omitted, lists all memory files.
148
+ - view_range: (optional) Line range to view as array of two numbers representing start and end (e.g., [10,20]). If omitted, shows the entire file.
149
+ Example:
150
+ \`\`\`json
151
+ {
152
+ "command": "view",
153
+ "path": "/memories",
154
+ "view_range": [1, 10] // Optional: view specific lines
155
+ }
156
+ \`\`\`
157
+
158
+ Details and examples for \`create\` command:
159
+ Create or overwrite a new memory file with a unique path and specified content.
160
+ Parameters:
161
+ - command: create
162
+ - path: The unique path for the new memory file (e.g., "/memories/memory1.txt").
163
+ - flie_text: The content to write into the new memory file.
164
+ Example:
165
+ \`\`\`json
166
+ {
167
+ "command": "create",
168
+ "path": "/memories/notes.txt",
169
+ "file_text": "Meeting notes:\n- Discussed project timeline\n- Next steps defined\n"
170
+ }
171
+ \`\`\`
172
+
173
+ Details and examples for \`str_replace\` command:
174
+ Replace a specific string in a memory file with another string.
175
+ Parameters:
176
+ - command: str_replace
177
+ - path: The path of the memory file to modify (e.g., "/memories/memory1.txt").
178
+ - old_str: The string to be replaced.
179
+ - new_str: The string to replace with.
180
+ Example:
181
+ \`\`\`json
182
+ {
183
+ "command": "str_replace",
184
+ "path": "/memories/preferences.txt",
185
+ "old_str": "Favorite color: blue",
186
+ "new_str": "Favorite color: green"
187
+ }
188
+ \`\`\`
189
+
190
+ Details and examples for \`insert\` command:
191
+ Insert text at a specific line in a memory file.
192
+ Parameters:
193
+ - command: insert
194
+ - path: The path of the memory file to modify (e.g., "/memories/memory1.txt").
195
+ - insert_line: The line number to insert the text at (1-based index).
196
+ - insert_text: The text to insert.
197
+ Example:
198
+ \`\`\`json
199
+ {
200
+ "command": "insert",
201
+ "path": "/memories/todo.txt",
202
+ "insert_line": 2,
203
+ "insert_text": "- Review memory tool documentation\n"
204
+ }
205
+ \`\`\`
206
+
207
+ Details and examples for \`delete\` command:
208
+ Remove a memory file by path, Delete a file or directory.
209
+ Parameters:
210
+ - command: delete
211
+ - path: The path of the memory file or directory to delete (e.g., "/memories/memory1.txt" or "/memories/old_notes").
212
+ Example:
213
+ \`\`\`json
214
+ {
215
+ "command": "delete",
216
+ "path": "/memories/old_file.txt"
217
+ }
218
+ \`\`\`
219
+
220
+ Details and examples for \`rename\` command:
221
+ Rename a memory file by its path.
222
+ Parameters:
223
+ - command: rename
224
+ - old_path: The current path of the memory file to rename (e.g., "/memories/memory1.txt").
225
+ - new_path: The new path for the memory file (e.g., "/memories/updated_memory1.txt").
226
+ Example:
227
+ \`\`\`json
228
+ {
229
+ "command": "rename",
230
+ "old_path": "/memories/draft.txt",
231
+ "new_path": "/memories/final.txt"
232
+ }
233
+ \`\`\`
234
+ Note: when editing your memory folder, always try to keep its content up-to-date, coherent and organized.
235
+ You can rename or delete files that are no longer relevant.
236
+ Do not create new files unless necessary.
237
+
238
+ IMPORTANT: ALWAYS VIEW YOUR MEMORY DIRECTORY BEFORE DOING ANYTHING ELSE.
239
+ MEMORY PROTOCOL:
240
+ 1. Use the \`view\` command of your \`memory\` tool to check for earlier progress.
241
+ 2. ... (work on the task) ...
242
+ - As you make progress, record status / progress / thoughts etc in your memory.
243
+ ASSUME INTERRUPTION: Your context window might be reset at any moment, so you risk losing any progress that is not recorded in your memory directory.
244
+ `,
245
+ type: "API",
246
+ local_execution: true,
247
+ hitl: true,
248
+ inputschema: {
249
+ url: `http://localhost/${PSMemoryTool.toolName}`,
250
+ method: "POST",
251
+ requestBody: v4_1.z.toJSONSchema(v4_1.z.object({
252
+ command: v4_1.z.enum(['view', 'create', 'str_replace', 'insert', 'delete', 'rename']).meta({
253
+ title: "command",
254
+ description: "The memory command to execute."
255
+ }),
256
+ path: v4_1.z.string().optional().meta({
257
+ title: "path",
258
+ description: "The path of the memory file to operate on. For 'view' command, can be omitted only for view command, which then returns all files representing the memory ."
259
+ }),
260
+ file_text: v4_1.z.string().optional().meta({
261
+ title: "file_text",
262
+ description: "The content to write into the new memory file. Required for 'create' command."
263
+ }),
264
+ view_range: v4_1.z.array(v4_1.z.number().int().nonnegative()).length(2).optional().meta({
265
+ title: "view_range",
266
+ description: "Line range to view as array of two numbers representing start and end (e.g., [10,20]). Optional, only for 'view' command."
267
+ }),
268
+ old_str: v4_1.z.string().optional().meta({
269
+ title: "old_str",
270
+ description: "The string to be replaced. Required for 'str_replace' command."
271
+ }),
272
+ new_str: v4_1.z.string().optional().meta({
273
+ title: "new_str",
274
+ description: "The string to replace with. Required for 'str_replace' command."
275
+ }),
276
+ insert_line: v4_1.z.number().int().nonnegative().optional().meta({
277
+ title: "insert_line",
278
+ description: "The line number to insert the text at (1-based index). Required for 'insert' command."
279
+ }),
280
+ insert_text: v4_1.z.string().optional().meta({
281
+ title: "insert_text",
282
+ description: "The text to insert. Required for 'insert' command."
283
+ }),
284
+ old_path: v4_1.z.string().optional().meta({
285
+ title: "old_path",
286
+ description: "The current path of the memory file to rename. Required for 'rename' command."
287
+ }),
288
+ new_path: v4_1.z.string().optional().meta({
289
+ title: "new_path",
290
+ description: "The new path for the memory file. Required for 'rename' command."
291
+ }),
292
+ }).meta({
293
+ title: `${PSMemoryTool.toolName}_request_body`,
294
+ description: `The request body parameters for the ${PSMemoryTool.toolName} tool.`,
295
+ }), { "io": "input" }),
296
+ },
297
+ });
298
+ this.store = options.store || new MemoryStore();
299
+ }
300
+ async run(_input, log) {
301
+ const command = _input.command;
302
+ if (!command || typeof command !== "string") {
303
+ throw new Error("Invalid or missing command provided.");
304
+ }
305
+ switch (command) {
306
+ case 'view': return this.run_view(_input, log);
307
+ case 'create': return this.run_create(_input, log);
308
+ case 'str_replace': return this.run_str_replace(_input, log);
309
+ case 'insert': return this.run_insert(_input, log);
310
+ case 'delete': return this.run_delete(_input, log);
311
+ case 'rename': return this.run_rename(_input, log);
312
+ default: throw new Error(`Unsupported command: ${command}`);
313
+ }
314
+ }
315
+ async run_view(input, log) {
316
+ const logger = log || dlog;
317
+ try {
318
+ const path = input.path;
319
+ const view_range = input.view_range;
320
+ if (path && typeof path === "string") {
321
+ // View specific file
322
+ const mem = await this.store.getMemoryByPath(path);
323
+ if (!mem) {
324
+ throw new Error(`Memory file not found at path: ${path}`);
325
+ }
326
+ let content = mem.content || '';
327
+ if (view_range && Array.isArray(view_range) && view_range.length === 2) {
328
+ const start = Math.max(0, view_range[0] - 1); // Convert to 0-based index
329
+ const end = Math.min(content.split('\n').length, view_range[1]);
330
+ const lines = content.split('\n').slice(start, end);
331
+ content = lines.join('\n');
332
+ }
333
+ logger.info(`📋 Viewing memory file: ${mem.path}\n\`\`\`text\n${content}\n\`\`\``);
334
+ return {
335
+ status: 'success',
336
+ output: content,
337
+ };
338
+ }
339
+ else {
340
+ // List all memory files
341
+ const files = this.store.viewMemories(false);
342
+ logger.info(`📋 Memory directory contents:\n\`\`\`json\n${JSON.stringify(files, null, 2)}\n\`\`\``);
343
+ return {
344
+ status: 'success',
345
+ output: files,
346
+ };
347
+ }
348
+ }
349
+ catch (error) {
350
+ logger.error('Error viewing memory:', error);
351
+ throw error;
352
+ }
353
+ }
354
+ async run_create(input, log) {
355
+ const logger = log || dlog;
356
+ try {
357
+ const path = input.path;
358
+ const file_text = input.file_text;
359
+ if (!path || typeof path !== "string") {
360
+ throw new Error("Invalid or missing path provided for create command.");
361
+ }
362
+ if (typeof file_text !== "string") {
363
+ throw new Error("Invalid or missing file_text provided for create command.");
364
+ }
365
+ this.store.setMemory({ path, content: file_text });
366
+ logger.info(`📝 Created memory file at path: ${path}`);
367
+ return {
368
+ status: 'success',
369
+ output: `Memory file created at path: ${path}`,
370
+ };
371
+ }
372
+ catch (error) {
373
+ logger.error('Error creating memory file:', error);
374
+ throw error;
375
+ }
376
+ }
377
+ async run_str_replace(input, log) {
378
+ const logger = log || dlog;
379
+ try {
380
+ const path = input.path;
381
+ const old_str = input.old_str;
382
+ const new_str = input.new_str;
383
+ if (!path || typeof path !== "string") {
384
+ throw new Error("Invalid or missing path provided for str_replace command.");
385
+ }
386
+ if (typeof old_str !== "string" || typeof new_str !== "string") {
387
+ throw new Error("Invalid or missing old_str or new_str provided for str_replace command.");
388
+ }
389
+ const success = this.store.replaceInMemory(path, old_str, new_str);
390
+ if (!success) {
391
+ throw new Error(`Failed to replace string in memory file at path: ${path}. File may not exist.`);
392
+ }
393
+ logger.info(`🔄 Replaced string in memory file at path: ${path}`);
394
+ return {
395
+ status: 'success',
396
+ output: `String replaced in memory file at path: ${path}`,
397
+ };
398
+ }
399
+ catch (error) {
400
+ logger.error('Error replacing string in memory file:', error);
401
+ throw error;
402
+ }
403
+ }
404
+ async run_insert(input, log) {
405
+ const logger = log || dlog;
406
+ try {
407
+ const path = input.path;
408
+ const insert_line = input.insert_line;
409
+ const insert_text = input.insert_text;
410
+ if (!path || typeof path !== "string") {
411
+ throw new Error("Invalid or missing path provided for insert command.");
412
+ }
413
+ if (typeof insert_line !== "number" || insert_line < 1) {
414
+ throw new Error("Invalid or missing insert_line provided for insert command. Must be a positive integer.");
415
+ }
416
+ if (typeof insert_text !== "string") {
417
+ throw new Error("Invalid or missing insert_text provided for insert command.");
418
+ }
419
+ const success = this.store.insertIntoMemory(path, insert_line, insert_text);
420
+ if (!success) {
421
+ throw new Error(`Failed to insert text into memory file at path: ${path}. File may not exist.`);
422
+ }
423
+ logger.info(`➕ Inserted text into memory file at path: ${path} at line ${insert_line}`);
424
+ return {
425
+ status: 'success',
426
+ output: `Text inserted into memory file at path: ${path} at line ${insert_line}`,
427
+ };
428
+ }
429
+ catch (error) {
430
+ logger.error('Error inserting text into memory file:', error);
431
+ throw error;
432
+ }
433
+ }
434
+ async run_delete(input, log) {
435
+ const logger = log || dlog;
436
+ try {
437
+ const path = input.path;
438
+ if (!path || typeof path !== "string") {
439
+ throw new Error("Invalid or missing path provided for delete command.");
440
+ }
441
+ const success = this.store.deleteMemory(path);
442
+ if (!success) {
443
+ throw new Error(`Failed to delete memory file at path: ${path}. File may not exist.`);
444
+ }
445
+ logger.info(`🗑️ Deleted memory file at path: ${path}`);
446
+ return {
447
+ status: 'success',
448
+ output: `Memory file deleted at path: ${path}`,
449
+ };
450
+ }
451
+ catch (error) {
452
+ logger.error('Error deleting memory file:', error);
453
+ throw error;
454
+ }
455
+ }
456
+ async run_rename(input, log) {
457
+ const logger = log || dlog;
458
+ try {
459
+ const old_path = input.old_path;
460
+ const new_path = input.new_path;
461
+ if (!old_path || typeof old_path !== "string") {
462
+ throw new Error("Invalid or missing old_path provided for rename command.");
463
+ }
464
+ if (!new_path || typeof new_path !== "string") {
465
+ throw new Error("Invalid or missing new_path provided for rename command.");
466
+ }
467
+ const success = this.store.renameMemory(old_path, new_path);
468
+ if (!success) {
469
+ new Error(`Failed to rename memory file from ${old_path} to ${new_path}. File may not exist.`);
470
+ }
471
+ logger.info(`✏️ Renamed memory file from ${old_path} to ${new_path}`);
472
+ return {
473
+ status: 'success',
474
+ output: `Memory file renamed from ${old_path} to ${new_path}`,
475
+ };
476
+ }
477
+ catch (error) {
478
+ logger.error('Error renaming memory file:', error);
479
+ throw error;
480
+ }
481
+ }
482
+ }
483
+ exports.PSMemoryTool = PSMemoryTool;
484
+ PSMemoryTool.toolName = "memory_tool";
485
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUFNNZW1vcnlUb29sLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi90b29scy9QU01lbW9yeVRvb2wudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHVEQUF1RDs7Ozs7O0FBRXZELHNEQUF5QjtBQUN6QixzREFBeUI7QUFDekIsMERBQTZCO0FBRTdCLCtCQUFvQztBQUNwQywrQkFBMkI7QUFHM0IsZ0RBQTZDO0FBQzdDLHVFQUErQztBQUUvQyxNQUFNLElBQUksR0FBRyxJQUFBLHFCQUFXLEVBQUMsb0JBQW9CLENBQUMsQ0FBQztBQWlCL0MsTUFBYSxXQUFXO0lBR3BCLFlBQVksT0FBd0Q7UUFGNUQsaUJBQVksR0FBVyxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBR3BELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUM3QyxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUEsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLFNBQVMsS0FBSSxtQkFBSSxDQUFDLElBQUksQ0FBQyxpQkFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFLElBQUEsU0FBTSxHQUFFLENBQUMsQ0FBQztRQUN4RSxJQUFJLENBQUMsaUJBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDbkMsaUJBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ2xELElBQUksQ0FBQyxJQUFJLENBQUMsK0JBQStCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQzdELENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUM7Z0JBQ0gsSUFBSSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENB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
@@ -0,0 +1,7 @@
1
+ export default function debugLogger(prefix: string): {
2
+ debug: (msg: string, ...args: any[]) => void;
3
+ info: (msg: string, ...args: any[]) => void;
4
+ warn: (msg: string, ...args: any[]) => void;
5
+ error: (msg: string, ...args: any[]) => void;
6
+ done: (msg: string, ...args: any[]) => void;
7
+ };
@@ -0,0 +1,25 @@
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.default = debugLogger;
8
+ const debug_1 = __importDefault(require("debug"));
9
+ function debugLogger(prefix) {
10
+ const logFn = (0, debug_1.default)(prefix);
11
+ logFn.enabled = true;
12
+ const debugLog = logFn.extend('debug');
13
+ const infoLog = logFn.extend('info');
14
+ const warnLog = logFn.extend('warn');
15
+ const errorLog = logFn.extend('error');
16
+ const doneLog = logFn.extend('done');
17
+ return {
18
+ debug: (msg, ...args) => debugLog(msg, ...args),
19
+ info: (msg, ...args) => infoLog(msg, ...args),
20
+ warn: (msg, ...args) => warnLog(msg, ...args),
21
+ error: (msg, ...args) => errorLog(msg, ...args),
22
+ done: (msg, ...args) => doneLog(msg, ...args),
23
+ };
24
+ }
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVidWdsb2dnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3V0aWxzL2RlYnVnbG9nZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSx1REFBdUQ7Ozs7O0FBSXZELDhCQWVDO0FBakJELGtEQUEwQjtBQUUxQixTQUF3QixXQUFXLENBQUMsTUFBYztJQUNoRCxNQUFNLEtBQUssR0FBRyxJQUFBLGVBQUssRUFBQyxNQUFNLENBQUMsQ0FBQztJQUM1QixLQUFLLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztJQUNyQixNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZDLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDckMsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNyQyxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZDLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDckMsT0FBTztRQUNMLEtBQUssRUFBRSxDQUFDLEdBQVcsRUFBRSxHQUFHLElBQVcsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztRQUM5RCxJQUFJLEVBQUUsQ0FBQyxHQUFXLEVBQUUsR0FBRyxJQUFXLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7UUFDNUQsSUFBSSxFQUFFLENBQUMsR0FBVyxFQUFFLEdBQUcsSUFBVyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO1FBQzVELEtBQUssRUFBRSxDQUFDLEdBQVcsRUFBRSxHQUFHLElBQVcsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztRQUM5RCxJQUFJLEVBQUUsQ0FBQyxHQUFXLEVBQUUsR0FBRyxJQUFXLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7S0FDN0QsQ0FBQztBQUNKLENBQUMifQ==
@@ -27,9 +27,9 @@ class PSAgentLogger {
27
27
  const duration = now - this.lastTimestamp;
28
28
  this.lastTimestamp = duration === 0 ? now + 1 : this.lastTimestamp;
29
29
  if (this.logFilePath) {
30
- node_fs_1.default.appendFileSync(this.logFilePath, `data: ${JSON.stringify({ ts: type === 'todo' ? 0 : now, type, taskId: this.taskId, task: this.task, message })}\n\n`, { encoding: 'utf-8' });
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
31
  }
32
- console.log(`[${new Date().toISOString()}] [${type.toUpperCase()}] ${message}`, ...optionalParams);
32
+ this.logFn(`[${type.toUpperCase()}] ${message}`, ...optionalParams);
33
33
  }
34
34
  debug(message, ...optionalParams) {
35
35
  this.log('debug', message, ...optionalParams);
@@ -48,4 +48,4 @@ class PSAgentLogger {
48
48
  }
49
49
  }
50
50
  exports.PSAgentLogger = PSAgentLogger;
51
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUFNBZ2VudExvZ2dlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvUFNBZ2VudExvZ2dlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSx1REFBdUQ7QUFDdkQsc0RBQXlCO0FBRXpCLGtEQUEwQjtBQUcxQixNQUFhLGFBQWE7SUFDaEIsS0FBSyxHQUFHLElBQUEsZUFBSyxFQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ2pCLFdBQVcsQ0FBbUI7SUFDdkMsYUFBYSxHQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUN6QixNQUFNLENBQVU7SUFDaEIsSUFBSSxDQUFVO0lBQ3RCLFlBQVksT0FBK0U7UUFDekYsSUFBSSxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFBLGVBQUssRUFBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDbkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQzVCLENBQUM7UUFDRCxJQUFJLENBQUMsV0FBVyxHQUFHLE9BQU8sRUFBRSxXQUFXLENBQUE7UUFDdkMsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLEVBQUUsTUFBTSxDQUFDO1FBQzlCLElBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQztJQUM1QixDQUFDO0lBRUQsR0FBRyxDQUFDLElBQVksRUFBRSxPQUFXLEVBQUUsR0FBRyxjQUFvQjtRQUNwRCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDdkIsTUFBTSxRQUFRLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7UUFDMUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxRQUFRLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDO1FBQ25FLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3JCLGlCQUFFLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsU0FBUyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksS0FBRyxNQUFNLENBQUEsQ0FBQyxDQUFBLENBQUMsQ0FBQSxDQUFDLENBQUEsR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUM5SyxDQUFDO1FBQ0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLE1BQU0sSUFBSSxDQUFDLFdBQVcsRUFBRSxLQUFLLE9BQU8sRUFBRSxFQUFFLEdBQUcsY0FBYyxDQUFDLENBQUM7SUFDckcsQ0FBQztJQUNNLEtBQUssQ0FBQyxPQUFlLEVBQUUsR0FBRyxjQUFvQjtRQUNuRCxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsR0FBRyxjQUFjLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBQ00sSUFBSSxDQUFDLE9BQWUsRUFBRSxHQUFHLGNBQW9CO1FBQ2xELElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLGNBQWMsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFDTSxLQUFLLENBQUMsT0FBZSxFQUFFLEdBQUcsY0FBb0I7UUFDbkQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEdBQUcsY0FBYyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUNNLElBQUksQ0FBQyxPQUFlLEVBQUUsR0FBRyxjQUFvQjtRQUNsRCxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxjQUFjLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBQ00sSUFBSSxDQUFDLFVBQWtCLEVBQUUsRUFBRSxHQUFHLGNBQW9CO1FBQ3ZELElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLGNBQWMsQ0FBQyxDQUFDO0lBQy9DLENBQUM7Q0FDRjtBQXhDRCxzQ0F3Q0MifQ==
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUFNBZ2VudExvZ2dlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvUFNBZ2VudExvZ2dlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSx1REFBdUQ7QUFDdkQsc0RBQXlCO0FBRXpCLGtEQUEwQjtBQUcxQixNQUFhLGFBQWE7SUFDaEIsS0FBSyxHQUFHLElBQUEsZUFBSyxFQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ2pCLFdBQVcsQ0FBbUI7SUFDdkMsYUFBYSxHQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUN6QixNQUFNLENBQVU7SUFDaEIsSUFBSSxDQUFVO0lBQ3RCLFlBQVksT0FBK0U7UUFDekYsSUFBSSxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFBLGVBQUssRUFBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDbkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQzVCLENBQUM7UUFDRCxJQUFJLENBQUMsV0FBVyxHQUFHLE9BQU8sRUFBRSxXQUFXLENBQUE7UUFDdkMsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLEVBQUUsTUFBTSxDQUFDO1FBQzlCLElBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQztJQUM1QixDQUFDO0lBRUQsR0FBRyxDQUFDLElBQVksRUFBRSxPQUFXLEVBQUUsR0FBRyxjQUFvQjtRQUNwRCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDdkIsTUFBTSxRQUFRLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7UUFDMUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxRQUFRLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDO1FBQ25FLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3JCLGlCQUFFLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsU0FBUyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksS0FBRyxNQUFNLENBQUEsQ0FBQyxDQUFBLENBQUMsQ0FBQSxDQUFDLENBQUEsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDN0wsQ0FBQztRQUNELElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLEtBQUssT0FBTyxFQUFFLEVBQUUsR0FBRyxjQUFjLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBQ00sS0FBSyxDQUFDLE9BQWUsRUFBRSxHQUFHLGNBQW9CO1FBQ25ELElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxHQUFHLGNBQWMsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFDTSxJQUFJLENBQUMsT0FBZSxFQUFFLEdBQUcsY0FBb0I7UUFDbEQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsY0FBYyxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUNNLEtBQUssQ0FBQyxPQUFlLEVBQUUsR0FBRyxjQUFvQjtRQUNuRCxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsR0FBRyxjQUFjLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBQ00sSUFBSSxDQUFDLE9BQWUsRUFBRSxHQUFHLGNBQW9CO1FBQ2xELElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLGNBQWMsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFDTSxJQUFJLENBQUMsVUFBa0IsRUFBRSxFQUFFLEdBQUcsY0FBb0I7UUFDdkQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsY0FBYyxDQUFDLENBQUM7SUFDL0MsQ0FBQztDQUNGO0FBeENELHNDQXdDQyJ9
@@ -0,0 +1,45 @@
1
+ import { PSAgentLogger } from "../PSAgentLogger";
2
+ import { PSAgentTool } from "../PSAgentTool";
3
+ export interface Memory {
4
+ path: string;
5
+ content?: string;
6
+ }
7
+ export interface IMemoryStore {
8
+ viewMemories(withContent?: boolean): Promise<Memory[]>;
9
+ getMemoryByPath(relativePath: string): Promise<Memory | undefined>;
10
+ setMemory(mem: Memory): Promise<void>;
11
+ deleteMemory(relativePath: string): Promise<boolean>;
12
+ renameMemory(oldRelativePath: string, newRelativePath: string): Promise<boolean>;
13
+ insertIntoMemory(relativePath: string, lineNumber: number, text: string): Promise<boolean>;
14
+ replaceInMemory(relativePath: string, oldStr: string, newStr: string): Promise<boolean>;
15
+ }
16
+ export declare class MemoryStore implements IMemoryStore {
17
+ private lastModified;
18
+ private directory;
19
+ constructor(options?: {
20
+ initialmemories?: Memory[];
21
+ directory?: string;
22
+ });
23
+ viewMemories(withContent?: boolean): Promise<Memory[]>;
24
+ getMemoryByPath(relativePath: string): Promise<Memory | undefined>;
25
+ setMemory(mem: Memory): Promise<void>;
26
+ deleteMemory(relativePath: string): Promise<boolean>;
27
+ renameMemory(oldRelativePath: string, newRelativePath: string): Promise<boolean>;
28
+ insertIntoMemory(relativePath: string, lineNumber: number, text: string): Promise<boolean>;
29
+ replaceInMemory(relativePath: string, oldStr: string, newStr: string): Promise<boolean>;
30
+ get LastModified(): string;
31
+ }
32
+ export declare class PSMemoryTool extends PSAgentTool {
33
+ static readonly toolName = "memory_tool";
34
+ private store;
35
+ constructor(options: {
36
+ store: MemoryStore;
37
+ });
38
+ run(_input: Record<string, any>, log?: PSAgentLogger): Promise<Record<string, any>>;
39
+ private run_view;
40
+ private run_create;
41
+ private run_str_replace;
42
+ private run_insert;
43
+ private run_delete;
44
+ private run_rename;
45
+ }
@@ -0,0 +1,487 @@
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.PSMemoryTool = exports.MemoryStore = void 0;
8
+ const node_fs_1 = __importDefault(require("node:fs"));
9
+ const node_os_1 = __importDefault(require("node:os"));
10
+ const node_path_1 = __importDefault(require("node:path"));
11
+ const uuid_1 = require("uuid");
12
+ const v4_1 = require("zod/v4");
13
+ const PSAgentTool_1 = require("../PSAgentTool");
14
+ const debuglogger_1 = __importDefault(require("../utils/debuglogger"));
15
+ const dlog = (0, debuglogger_1.default)('PSAgent:MemoryTool');
16
+ class MemoryStore {
17
+ lastModified = new Date().toISOString();
18
+ directory;
19
+ constructor(options) {
20
+ this.lastModified = new Date().toISOString();
21
+ this.directory = options?.directory || node_path_1.default.join(node_os_1.default.tmpdir(), (0, uuid_1.v4)());
22
+ if (!node_fs_1.default.existsSync(this.directory)) {
23
+ node_fs_1.default.mkdirSync(this.directory, { recursive: true });
24
+ dlog.info(`Created memory directory at ${this.directory}`);
25
+ }
26
+ if (this.directory) {
27
+ try {
28
+ if (options?.initialmemories) {
29
+ for (const mem of options.initialmemories) {
30
+ const filePath = node_path_1.default.join(this.directory, `${mem.path}`);
31
+ node_fs_1.default.writeFileSync(filePath, mem.content || '', { encoding: 'utf-8' });
32
+ mem.path = filePath;
33
+ }
34
+ }
35
+ const files = node_fs_1.default.readdirSync(this.directory, { recursive: true });
36
+ dlog.info(`Found memories from directory: ${this.directory}, found ${files.length} files.`);
37
+ }
38
+ catch (error) {
39
+ dlog.error("Unable to load memories from directory:", error);
40
+ }
41
+ }
42
+ }
43
+ async viewMemories(withContent) {
44
+ if (!this.directory)
45
+ return [];
46
+ const files = node_fs_1.default.readdirSync(this.directory);
47
+ const memories = files.map(f => {
48
+ let filePath = node_path_1.default.join(this.directory, f);
49
+ const content = withContent ? node_fs_1.default.readFileSync(filePath, 'utf-8') : undefined;
50
+ filePath = filePath.replace(this.directory, '');
51
+ filePath = filePath.startsWith('/') ? filePath : filePath = '/' + filePath;
52
+ return { path: filePath, content };
53
+ });
54
+ return memories;
55
+ }
56
+ async getMemoryByPath(relativePath) {
57
+ if (!this.directory)
58
+ return undefined;
59
+ const filePath = node_path_1.default.join(this.directory, relativePath);
60
+ if (node_fs_1.default.existsSync(filePath)) {
61
+ const content = node_fs_1.default.readFileSync(filePath, 'utf-8');
62
+ return { path: relativePath, content };
63
+ }
64
+ return undefined;
65
+ }
66
+ async setMemory(mem) {
67
+ if (!this.directory)
68
+ return;
69
+ const filePath = node_path_1.default.join(this.directory, mem.path);
70
+ node_fs_1.default.writeFileSync(filePath, mem.content || '', { encoding: 'utf-8' });
71
+ this.lastModified = new Date().toISOString();
72
+ }
73
+ async deleteMemory(relativePath) {
74
+ if (!this.directory)
75
+ return false;
76
+ const filePath = node_path_1.default.join(this.directory, relativePath);
77
+ if (node_fs_1.default.existsSync(filePath)) {
78
+ node_fs_1.default.unlinkSync(filePath);
79
+ this.lastModified = new Date().toISOString();
80
+ return true;
81
+ }
82
+ return false;
83
+ }
84
+ async renameMemory(oldRelativePath, newRelativePath) {
85
+ if (!this.directory)
86
+ return false;
87
+ const oldFilePath = node_path_1.default.join(this.directory, oldRelativePath);
88
+ const newFilePath = node_path_1.default.join(this.directory, newRelativePath);
89
+ if (node_fs_1.default.existsSync(oldFilePath)) {
90
+ node_fs_1.default.renameSync(oldFilePath, newFilePath);
91
+ this.lastModified = new Date().toISOString();
92
+ return true;
93
+ }
94
+ return false;
95
+ }
96
+ async insertIntoMemory(relativePath, lineNumber, text) {
97
+ if (!this.directory)
98
+ return false;
99
+ const filePath = node_path_1.default.join(this.directory, relativePath);
100
+ if (node_fs_1.default.existsSync(filePath)) {
101
+ const content = node_fs_1.default.readFileSync(filePath, 'utf-8');
102
+ const lines = content.split('\n');
103
+ const index = Math.max(0, Math.min(lines.length, lineNumber - 1));
104
+ lines.splice(index, 0, text);
105
+ node_fs_1.default.writeFileSync(filePath, lines.join('\n'), { encoding: 'utf-8' });
106
+ this.lastModified = new Date().toISOString();
107
+ return true;
108
+ }
109
+ return false;
110
+ }
111
+ async replaceInMemory(relativePath, oldStr, newStr) {
112
+ if (!this.directory)
113
+ return false;
114
+ const filePath = node_path_1.default.join(this.directory, relativePath);
115
+ if (node_fs_1.default.existsSync(filePath)) {
116
+ let content = node_fs_1.default.readFileSync(filePath, 'utf-8');
117
+ //use regex to find all instances of oldStr and replace it with newStr
118
+ const regex = new RegExp(oldStr, 'g');
119
+ content = content.replace(regex, newStr);
120
+ node_fs_1.default.writeFileSync(filePath, content, { encoding: 'utf-8' });
121
+ this.lastModified = new Date().toISOString();
122
+ return true;
123
+ }
124
+ return false;
125
+ }
126
+ get LastModified() {
127
+ return this.lastModified;
128
+ }
129
+ }
130
+ exports.MemoryStore = MemoryStore;
131
+ class PSMemoryTool extends PSAgentTool_1.PSAgentTool {
132
+ static toolName = "memory_tool";
133
+ store;
134
+ constructor(options) {
135
+ super({
136
+ name: PSMemoryTool.toolName,
137
+ description: `Use this tool to manage the agent's memory files.
138
+ Commands:
139
+ - view: Shows the memory directory contents or memory file contents with optional line ranges.
140
+ - create: Create a new memory file with a unique path and specified content.
141
+ - str_replace: Replace a specific string in a memory file with another string.
142
+ - insert: Adds text to a memory, Insert text at a specific line.
143
+ - delete: Remove a memory file by path, Delete a file or directory.
144
+ - rename: Rename a memory file by its path.
145
+
146
+ Details and examples for \`view\` command:
147
+ Shows the memory directory contents or memory file contents with optional line ranges.
148
+ Parameters:
149
+ - command: view
150
+ - path: (optional) The path of the memory file to view. If omitted, lists all memory files.
151
+ - view_range: (optional) Line range to view as array of two numbers representing start and end (e.g., [10,20]). If omitted, shows the entire file.
152
+ Example:
153
+ \`\`\`json
154
+ {
155
+ "command": "view",
156
+ "path": "/memories",
157
+ "view_range": [1, 10] // Optional: view specific lines
158
+ }
159
+ \`\`\`
160
+
161
+ Details and examples for \`create\` command:
162
+ Create or overwrite a new memory file with a unique path and specified content.
163
+ Parameters:
164
+ - command: create
165
+ - path: The unique path for the new memory file (e.g., "/memories/memory1.txt").
166
+ - flie_text: The content to write into the new memory file.
167
+ Example:
168
+ \`\`\`json
169
+ {
170
+ "command": "create",
171
+ "path": "/memories/notes.txt",
172
+ "file_text": "Meeting notes:\n- Discussed project timeline\n- Next steps defined\n"
173
+ }
174
+ \`\`\`
175
+
176
+ Details and examples for \`str_replace\` command:
177
+ Replace a specific string in a memory file with another string.
178
+ Parameters:
179
+ - command: str_replace
180
+ - path: The path of the memory file to modify (e.g., "/memories/memory1.txt").
181
+ - old_str: The string to be replaced.
182
+ - new_str: The string to replace with.
183
+ Example:
184
+ \`\`\`json
185
+ {
186
+ "command": "str_replace",
187
+ "path": "/memories/preferences.txt",
188
+ "old_str": "Favorite color: blue",
189
+ "new_str": "Favorite color: green"
190
+ }
191
+ \`\`\`
192
+
193
+ Details and examples for \`insert\` command:
194
+ Insert text at a specific line in a memory file.
195
+ Parameters:
196
+ - command: insert
197
+ - path: The path of the memory file to modify (e.g., "/memories/memory1.txt").
198
+ - insert_line: The line number to insert the text at (1-based index).
199
+ - insert_text: The text to insert.
200
+ Example:
201
+ \`\`\`json
202
+ {
203
+ "command": "insert",
204
+ "path": "/memories/todo.txt",
205
+ "insert_line": 2,
206
+ "insert_text": "- Review memory tool documentation\n"
207
+ }
208
+ \`\`\`
209
+
210
+ Details and examples for \`delete\` command:
211
+ Remove a memory file by path, Delete a file or directory.
212
+ Parameters:
213
+ - command: delete
214
+ - path: The path of the memory file or directory to delete (e.g., "/memories/memory1.txt" or "/memories/old_notes").
215
+ Example:
216
+ \`\`\`json
217
+ {
218
+ "command": "delete",
219
+ "path": "/memories/old_file.txt"
220
+ }
221
+ \`\`\`
222
+
223
+ Details and examples for \`rename\` command:
224
+ Rename a memory file by its path.
225
+ Parameters:
226
+ - command: rename
227
+ - old_path: The current path of the memory file to rename (e.g., "/memories/memory1.txt").
228
+ - new_path: The new path for the memory file (e.g., "/memories/updated_memory1.txt").
229
+ Example:
230
+ \`\`\`json
231
+ {
232
+ "command": "rename",
233
+ "old_path": "/memories/draft.txt",
234
+ "new_path": "/memories/final.txt"
235
+ }
236
+ \`\`\`
237
+ Note: when editing your memory folder, always try to keep its content up-to-date, coherent and organized.
238
+ You can rename or delete files that are no longer relevant.
239
+ Do not create new files unless necessary.
240
+
241
+ IMPORTANT: ALWAYS VIEW YOUR MEMORY DIRECTORY BEFORE DOING ANYTHING ELSE.
242
+ MEMORY PROTOCOL:
243
+ 1. Use the \`view\` command of your \`memory\` tool to check for earlier progress.
244
+ 2. ... (work on the task) ...
245
+ - As you make progress, record status / progress / thoughts etc in your memory.
246
+ ASSUME INTERRUPTION: Your context window might be reset at any moment, so you risk losing any progress that is not recorded in your memory directory.
247
+ `,
248
+ type: "API",
249
+ local_execution: true,
250
+ hitl: true,
251
+ inputschema: {
252
+ url: `http://localhost/${PSMemoryTool.toolName}`,
253
+ method: "POST",
254
+ requestBody: v4_1.z.toJSONSchema(v4_1.z.object({
255
+ command: v4_1.z.enum(['view', 'create', 'str_replace', 'insert', 'delete', 'rename']).meta({
256
+ title: "command",
257
+ description: "The memory command to execute."
258
+ }),
259
+ path: v4_1.z.string().optional().meta({
260
+ title: "path",
261
+ description: "The path of the memory file to operate on. For 'view' command, can be omitted only for view command, which then returns all files representing the memory ."
262
+ }),
263
+ file_text: v4_1.z.string().optional().meta({
264
+ title: "file_text",
265
+ description: "The content to write into the new memory file. Required for 'create' command."
266
+ }),
267
+ view_range: v4_1.z.array(v4_1.z.number().int().nonnegative()).length(2).optional().meta({
268
+ title: "view_range",
269
+ description: "Line range to view as array of two numbers representing start and end (e.g., [10,20]). Optional, only for 'view' command."
270
+ }),
271
+ old_str: v4_1.z.string().optional().meta({
272
+ title: "old_str",
273
+ description: "The string to be replaced. Required for 'str_replace' command."
274
+ }),
275
+ new_str: v4_1.z.string().optional().meta({
276
+ title: "new_str",
277
+ description: "The string to replace with. Required for 'str_replace' command."
278
+ }),
279
+ insert_line: v4_1.z.number().int().nonnegative().optional().meta({
280
+ title: "insert_line",
281
+ description: "The line number to insert the text at (1-based index). Required for 'insert' command."
282
+ }),
283
+ insert_text: v4_1.z.string().optional().meta({
284
+ title: "insert_text",
285
+ description: "The text to insert. Required for 'insert' command."
286
+ }),
287
+ old_path: v4_1.z.string().optional().meta({
288
+ title: "old_path",
289
+ description: "The current path of the memory file to rename. Required for 'rename' command."
290
+ }),
291
+ new_path: v4_1.z.string().optional().meta({
292
+ title: "new_path",
293
+ description: "The new path for the memory file. Required for 'rename' command."
294
+ }),
295
+ }).meta({
296
+ title: `${PSMemoryTool.toolName}_request_body`,
297
+ description: `The request body parameters for the ${PSMemoryTool.toolName} tool.`,
298
+ }), { "io": "input" }),
299
+ },
300
+ });
301
+ this.store = options.store || new MemoryStore();
302
+ }
303
+ async run(_input, log) {
304
+ const command = _input.command;
305
+ if (!command || typeof command !== "string") {
306
+ throw new Error("Invalid or missing command provided.");
307
+ }
308
+ switch (command) {
309
+ case 'view': return this.run_view(_input, log);
310
+ case 'create': return this.run_create(_input, log);
311
+ case 'str_replace': return this.run_str_replace(_input, log);
312
+ case 'insert': return this.run_insert(_input, log);
313
+ case 'delete': return this.run_delete(_input, log);
314
+ case 'rename': return this.run_rename(_input, log);
315
+ default: throw new Error(`Unsupported command: ${command}`);
316
+ }
317
+ }
318
+ async run_view(input, log) {
319
+ const logger = log || dlog;
320
+ try {
321
+ const path = input.path;
322
+ const view_range = input.view_range;
323
+ if (path && typeof path === "string") {
324
+ // View specific file
325
+ const mem = await this.store.getMemoryByPath(path);
326
+ if (!mem) {
327
+ throw new Error(`Memory file not found at path: ${path}`);
328
+ }
329
+ let content = mem.content || '';
330
+ if (view_range && Array.isArray(view_range) && view_range.length === 2) {
331
+ const start = Math.max(0, view_range[0] - 1); // Convert to 0-based index
332
+ const end = Math.min(content.split('\n').length, view_range[1]);
333
+ const lines = content.split('\n').slice(start, end);
334
+ content = lines.join('\n');
335
+ }
336
+ logger.info(`📋 Viewing memory file: ${mem.path}\n\`\`\`text\n${content}\n\`\`\``);
337
+ return {
338
+ status: 'success',
339
+ output: content,
340
+ };
341
+ }
342
+ else {
343
+ // List all memory files
344
+ const files = this.store.viewMemories(false);
345
+ logger.info(`📋 Memory directory contents:\n\`\`\`json\n${JSON.stringify(files, null, 2)}\n\`\`\``);
346
+ return {
347
+ status: 'success',
348
+ output: files,
349
+ };
350
+ }
351
+ }
352
+ catch (error) {
353
+ logger.error('Error viewing memory:', error);
354
+ throw error;
355
+ }
356
+ }
357
+ async run_create(input, log) {
358
+ const logger = log || dlog;
359
+ try {
360
+ const path = input.path;
361
+ const file_text = input.file_text;
362
+ if (!path || typeof path !== "string") {
363
+ throw new Error("Invalid or missing path provided for create command.");
364
+ }
365
+ if (typeof file_text !== "string") {
366
+ throw new Error("Invalid or missing file_text provided for create command.");
367
+ }
368
+ this.store.setMemory({ path, content: file_text });
369
+ logger.info(`📝 Created memory file at path: ${path}`);
370
+ return {
371
+ status: 'success',
372
+ output: `Memory file created at path: ${path}`,
373
+ };
374
+ }
375
+ catch (error) {
376
+ logger.error('Error creating memory file:', error);
377
+ throw error;
378
+ }
379
+ }
380
+ async run_str_replace(input, log) {
381
+ const logger = log || dlog;
382
+ try {
383
+ const path = input.path;
384
+ const old_str = input.old_str;
385
+ const new_str = input.new_str;
386
+ if (!path || typeof path !== "string") {
387
+ throw new Error("Invalid or missing path provided for str_replace command.");
388
+ }
389
+ if (typeof old_str !== "string" || typeof new_str !== "string") {
390
+ throw new Error("Invalid or missing old_str or new_str provided for str_replace command.");
391
+ }
392
+ const success = this.store.replaceInMemory(path, old_str, new_str);
393
+ if (!success) {
394
+ throw new Error(`Failed to replace string in memory file at path: ${path}. File may not exist.`);
395
+ }
396
+ logger.info(`🔄 Replaced string in memory file at path: ${path}`);
397
+ return {
398
+ status: 'success',
399
+ output: `String replaced in memory file at path: ${path}`,
400
+ };
401
+ }
402
+ catch (error) {
403
+ logger.error('Error replacing string in memory file:', error);
404
+ throw error;
405
+ }
406
+ }
407
+ async run_insert(input, log) {
408
+ const logger = log || dlog;
409
+ try {
410
+ const path = input.path;
411
+ const insert_line = input.insert_line;
412
+ const insert_text = input.insert_text;
413
+ if (!path || typeof path !== "string") {
414
+ throw new Error("Invalid or missing path provided for insert command.");
415
+ }
416
+ if (typeof insert_line !== "number" || insert_line < 1) {
417
+ throw new Error("Invalid or missing insert_line provided for insert command. Must be a positive integer.");
418
+ }
419
+ if (typeof insert_text !== "string") {
420
+ throw new Error("Invalid or missing insert_text provided for insert command.");
421
+ }
422
+ const success = this.store.insertIntoMemory(path, insert_line, insert_text);
423
+ if (!success) {
424
+ throw new Error(`Failed to insert text into memory file at path: ${path}. File may not exist.`);
425
+ }
426
+ logger.info(`➕ Inserted text into memory file at path: ${path} at line ${insert_line}`);
427
+ return {
428
+ status: 'success',
429
+ output: `Text inserted into memory file at path: ${path} at line ${insert_line}`,
430
+ };
431
+ }
432
+ catch (error) {
433
+ logger.error('Error inserting text into memory file:', error);
434
+ throw error;
435
+ }
436
+ }
437
+ async run_delete(input, log) {
438
+ const logger = log || dlog;
439
+ try {
440
+ const path = input.path;
441
+ if (!path || typeof path !== "string") {
442
+ throw new Error("Invalid or missing path provided for delete command.");
443
+ }
444
+ const success = this.store.deleteMemory(path);
445
+ if (!success) {
446
+ throw new Error(`Failed to delete memory file at path: ${path}. File may not exist.`);
447
+ }
448
+ logger.info(`🗑️ Deleted memory file at path: ${path}`);
449
+ return {
450
+ status: 'success',
451
+ output: `Memory file deleted at path: ${path}`,
452
+ };
453
+ }
454
+ catch (error) {
455
+ logger.error('Error deleting memory file:', error);
456
+ throw error;
457
+ }
458
+ }
459
+ async run_rename(input, log) {
460
+ const logger = log || dlog;
461
+ try {
462
+ const old_path = input.old_path;
463
+ const new_path = input.new_path;
464
+ if (!old_path || typeof old_path !== "string") {
465
+ throw new Error("Invalid or missing old_path provided for rename command.");
466
+ }
467
+ if (!new_path || typeof new_path !== "string") {
468
+ throw new Error("Invalid or missing new_path provided for rename command.");
469
+ }
470
+ const success = this.store.renameMemory(old_path, new_path);
471
+ if (!success) {
472
+ new Error(`Failed to rename memory file from ${old_path} to ${new_path}. File may not exist.`);
473
+ }
474
+ logger.info(`✏️ Renamed memory file from ${old_path} to ${new_path}`);
475
+ return {
476
+ status: 'success',
477
+ output: `Memory file renamed from ${old_path} to ${new_path}`,
478
+ };
479
+ }
480
+ catch (error) {
481
+ logger.error('Error renaming memory file:', error);
482
+ throw error;
483
+ }
484
+ }
485
+ }
486
+ exports.PSMemoryTool = PSMemoryTool;
487
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUFNNZW1vcnlUb29sLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi90b29scy9QU01lbW9yeVRvb2wudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHVEQUF1RDs7Ozs7O0FBRXZELHNEQUF5QjtBQUN6QixzREFBeUI7QUFDekIsMERBQTZCO0FBRTdCLCtCQUFvQztBQUNwQywrQkFBMkI7QUFHM0IsZ0RBQTZDO0FBQzdDLHVFQUErQztBQUUvQyxNQUFNLElBQUksR0FBRyxJQUFBLHFCQUFXLEVBQUMsb0JBQW9CLENBQUMsQ0FBQztBQWlCL0MsTUFBYSxXQUFXO0lBQ1osWUFBWSxHQUFXLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDaEQsU0FBUyxDQUFRO0lBQ3pCLFlBQVksT0FBd0Q7UUFDaEUsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzdDLElBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTyxFQUFFLFNBQVMsSUFBSSxtQkFBSSxDQUFDLElBQUksQ0FBQyxpQkFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFLElBQUEsU0FBTSxHQUFFLENBQUMsQ0FBQztRQUN4RSxJQUFJLENBQUMsaUJBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDbkMsaUJBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ2xELElBQUksQ0FBQyxJQUFJLENBQUMsK0JBQStCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQzdELENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUM7Z0JBQ0gsSUFBSSxPQUFPLEVBQUUsZUFBZSxFQUFFLENBQUM7b0JBQzdCLEtBQUssTUFB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
@@ -0,0 +1,7 @@
1
+ export default function debugLogger(prefix: string): {
2
+ debug: (msg: string, ...args: any[]) => void;
3
+ info: (msg: string, ...args: any[]) => void;
4
+ warn: (msg: string, ...args: any[]) => void;
5
+ error: (msg: string, ...args: any[]) => void;
6
+ done: (msg: string, ...args: any[]) => void;
7
+ };
@@ -0,0 +1,25 @@
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.default = debugLogger;
8
+ const debug_1 = __importDefault(require("debug"));
9
+ function debugLogger(prefix) {
10
+ const logFn = (0, debug_1.default)(prefix);
11
+ logFn.enabled = true;
12
+ const debugLog = logFn.extend('debug');
13
+ const infoLog = logFn.extend('info');
14
+ const warnLog = logFn.extend('warn');
15
+ const errorLog = logFn.extend('error');
16
+ const doneLog = logFn.extend('done');
17
+ return {
18
+ debug: (msg, ...args) => debugLog(msg, ...args),
19
+ info: (msg, ...args) => infoLog(msg, ...args),
20
+ warn: (msg, ...args) => warnLog(msg, ...args),
21
+ error: (msg, ...args) => errorLog(msg, ...args),
22
+ done: (msg, ...args) => doneLog(msg, ...args),
23
+ };
24
+ }
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVidWdsb2dnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3V0aWxzL2RlYnVnbG9nZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSx1REFBdUQ7Ozs7O0FBSXZELDhCQWVDO0FBakJELGtEQUEwQjtBQUUxQixTQUF3QixXQUFXLENBQUMsTUFBYztJQUNoRCxNQUFNLEtBQUssR0FBRyxJQUFBLGVBQUssRUFBQyxNQUFNLENBQUMsQ0FBQztJQUM1QixLQUFLLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztJQUNyQixNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZDLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDckMsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNyQyxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZDLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDckMsT0FBTztRQUNMLEtBQUssRUFBRSxDQUFDLEdBQVcsRUFBRSxHQUFHLElBQVcsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztRQUM5RCxJQUFJLEVBQUUsQ0FBQyxHQUFXLEVBQUUsR0FBRyxJQUFXLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7UUFDNUQsSUFBSSxFQUFFLENBQUMsR0FBVyxFQUFFLEdBQUcsSUFBVyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO1FBQzVELEtBQUssRUFBRSxDQUFDLEdBQVcsRUFBRSxHQUFHLElBQVcsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztRQUM5RCxJQUFJLEVBQUUsQ0FBQyxHQUFXLEVBQUUsR0FBRyxJQUFXLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7S0FDN0QsQ0FBQztBQUNKLENBQUMifQ==
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "psadk",
3
3
  "email": "rakesh.ravuri@publicissapient.com",
4
- "version": "1.1.1",
4
+ "version": "1.1.2",
5
5
  "description": "ps adk adapter",
6
6
  "main": "build/main/index.js",
7
7
  "typings": "build/main/index.d.ts",