psadk 1.1.37 → 1.1.39

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.
@@ -40,35 +40,32 @@ class PSClarifyTool extends PSAgentTool_1.PSAgentTool {
40
40
  this.answer = options.answer;
41
41
  }
42
42
  run(input, log) {
43
- if (!input.path || typeof input.path !== 'string') {
44
- throw new Error('Invalid file path provided.');
45
- }
46
43
  const logger = log || dlog;
47
- return new Promise((resolve, reject) => {
48
- const question = input.question;
49
- const question_context = input.content;
50
- // if (!filePath.startsWith(run.srcDir))
51
- // filePath = path.join(run.srcDir, lastevent.toolInput.request_body.path);
44
+ const question = input.question;
45
+ const question_context = input.question_context;
46
+ if (!question || typeof question !== 'string') {
47
+ throw new Error('Invalid question provided.');
48
+ }
49
+ return (async () => {
52
50
  try {
53
51
  logger.info(`❓ Agent need user input for question: ${question}`);
54
- const response = this.answer(question, question_context);
55
- // logger.info(`> Wrote ${content.length} bytes to file.`);
56
- return resolve({
52
+ const response = await this.answer(question, question_context);
53
+ return {
57
54
  status: 'success',
58
55
  answer: response,
59
- });
56
+ };
60
57
  }
61
58
  catch (error) {
62
59
  if (error instanceof Error) {
63
- reject(new Error(`Failed to clarify question: ${input.question}. Error: ${error.message}`));
60
+ throw new Error(`Failed to clarify question: ${question}. Error: ${error.message}`);
64
61
  }
65
62
  else {
66
- reject(new Error(`Failed to clarify question: ${input.question}. Unknown error.`));
63
+ throw new Error(`Failed to clarify question: ${question}. Unknown error.`);
67
64
  }
68
65
  }
69
- });
66
+ })();
70
67
  }
71
68
  }
72
69
  exports.PSClarifyTool = PSClarifyTool;
73
70
  PSClarifyTool.toolName = 'clarify_tool';
74
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUFNDbGFyaWZ5VG9vbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdG9vbHMvUFNDbGFyaWZ5VG9vbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSx1REFBdUQ7QUFDdkQsK0JBQTJCO0FBRzNCLGdEQUE2QztBQUM3Qyx1RUFBK0M7QUFFL0MsTUFBTSxJQUFJLEdBQUcsSUFBQSxxQkFBVyxFQUFDLG1CQUFtQixDQUFDLENBQUM7QUFDOUMsTUFBYSxhQUFjLFNBQVEseUJBQVc7SUFHNUMsWUFBWSxPQUVYO1FBQ0MsS0FBSyxDQUFDO1lBQ0osSUFBSSxFQUFFLGFBQWEsQ0FBQyxRQUFRO1lBQzVCLFdBQVcsRUFDVCwySUFBMkk7WUFDN0ksSUFBSSxFQUFFLEtBQUs7WUFDWCxlQUFlLEVBQUUsSUFBSTtZQUNyQixJQUFJLEVBQUUsSUFBSTtZQUNWLFdBQVcsRUFBRTtnQkFDWCxHQUFHLEVBQUUsb0JBQW9CLGFBQWEsQ0FBQyxRQUFRLEVBQUU7Z0JBQ2pELE1BQU0sRUFBRSxNQUFNO2dCQUNkLFdBQVcsRUFBRSxNQUFDLENBQUMsWUFBWSxDQUN6QixNQUFDO3FCQUNFLE1BQU0sQ0FBQztvQkFDTixRQUFRLEVBQUUsTUFBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQzt3QkFDeEIsS0FBSyxFQUFFLFVBQVU7d0JBQ2pCLFdBQVcsRUFBRSxnREFBZ0Q7cUJBQzlELENBQUM7b0JBQ0YsZ0JBQWdCLEVBQUUsTUFBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQzt3QkFDaEMsS0FBSyxFQUFFLGtCQUFrQjt3QkFDekIsV0FBVyxFQUNULGlIQUFpSDtxQkFDcEgsQ0FBQztpQkFDSCxDQUFDO3FCQUNELElBQUksQ0FBQztvQkFDSixLQUFLLEVBQUUsR0FBRyxhQUFhLENBQUMsUUFBUSxlQUFlO29CQUMvQyxXQUFXLEVBQUUsdUNBQXVDLGFBQWEsQ0FBQyxRQUFRLFFBQVE7aUJBQ25GLENBQUMsRUFDSixFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FDaEI7YUFDRjtTQUNGLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQztJQUMvQixDQUFDO0lBQ00sR0FBRyxDQUNSLEtBQTBCLEVBQzFCLEdBQW1CO1FBRW5CLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLE9BQU8sS0FBSyxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUNsRCxNQUFNLElBQUksS0FBSyxDQUFDLDZCQUE2QixDQUFDLENBQUM7UUFDakQsQ0FBQztRQUNELE1BQU0sTUFBTSxHQUFHLEdBQUcsSUFBSSxJQUFJLENBQUM7UUFDM0IsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNyQyxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO1lBQ2hDLE1BQU0sZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztZQUN2Qyx3Q0FBd0M7WUFDeEMsNEVBQTRFO1lBQzVFLElBQUksQ0FBQztnQkFDSCxNQUFNLENBQUMsSUFBSSxDQUFDLHlDQUF5QyxRQUFRLEVBQUUsQ0FBQyxDQUFDO2dCQUNqRSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO2dCQUN6RCwyREFBMkQ7Z0JBQzNELE9BQU8sT0FBTyxDQUFDO29CQUNiLE1BQU0sRUFBRSxTQUFTO29CQUNqQixNQUFNLEVBQUUsUUFBUTtpQkFDakIsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztZQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7Z0JBQ2YsSUFBSSxLQUFLLFlBQVksS0FBSyxFQUFFLENBQUM7b0JBQzNCLE1BQU0sQ0FDSixJQUFJLEtBQUssQ0FDUCwrQkFBK0IsS0FBSyxDQUFDLFFBQVEsWUFBWSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQ3pFLENBQ0YsQ0FBQztnQkFDSixDQUFDO3FCQUFNLENBQUM7b0JBQ04sTUFBTSxDQUNKLElBQUksS0FBSyxDQUNQLCtCQUErQixLQUFLLENBQUMsUUFBUSxrQkFBa0IsQ0FDaEUsQ0FDRixDQUFDO2dCQUNKLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOztBQTVFSCxzQ0E2RUM7QUE1RXdCLHNCQUFRLEdBQUcsY0FBYyxDQUFDIn0=
71
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUFNDbGFyaWZ5VG9vbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdG9vbHMvUFNDbGFyaWZ5VG9vbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSx1REFBdUQ7QUFDdkQsK0JBQTJCO0FBRzNCLGdEQUE2QztBQUM3Qyx1RUFBK0M7QUFFL0MsTUFBTSxJQUFJLEdBQUcsSUFBQSxxQkFBVyxFQUFDLG1CQUFtQixDQUFDLENBQUM7QUFDOUMsTUFBYSxhQUFjLFNBQVEseUJBQVc7SUFHNUMsWUFBWSxPQUVYO1FBQ0MsS0FBSyxDQUFDO1lBQ0osSUFBSSxFQUFFLGFBQWEsQ0FBQyxRQUFRO1lBQzVCLFdBQVcsRUFDVCwySUFBMkk7WUFDN0ksSUFBSSxFQUFFLEtBQUs7WUFDWCxlQUFlLEVBQUUsSUFBSTtZQUNyQixJQUFJLEVBQUUsSUFBSTtZQUNWLFdBQVcsRUFBRTtnQkFDWCxHQUFHLEVBQUUsb0JBQW9CLGFBQWEsQ0FBQyxRQUFRLEVBQUU7Z0JBQ2pELE1BQU0sRUFBRSxNQUFNO2dCQUNkLFdBQVcsRUFBRSxNQUFDLENBQUMsWUFBWSxDQUN6QixNQUFDO3FCQUNFLE1BQU0sQ0FBQztvQkFDTixRQUFRLEVBQUUsTUFBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQzt3QkFDeEIsS0FBSyxFQUFFLFVBQVU7d0JBQ2pCLFdBQVcsRUFBRSxnREFBZ0Q7cUJBQzlELENBQUM7b0JBQ0YsZ0JBQWdCLEVBQUUsTUFBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQzt3QkFDaEMsS0FBSyxFQUFFLGtCQUFrQjt3QkFDekIsV0FBVyxFQUNULGlIQUFpSDtxQkFDcEgsQ0FBQztpQkFDSCxDQUFDO3FCQUNELElBQUksQ0FBQztvQkFDSixLQUFLLEVBQUUsR0FBRyxhQUFhLENBQUMsUUFBUSxlQUFlO29CQUMvQyxXQUFXLEVBQUUsdUNBQXVDLGFBQWEsQ0FBQyxRQUFRLFFBQVE7aUJBQ25GLENBQUMsRUFDSixFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FDaEI7YUFDRjtTQUNGLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQztJQUMvQixDQUFDO0lBQ00sR0FBRyxDQUNSLEtBQTBCLEVBQzFCLEdBQW1CO1FBRW5CLE1BQU0sTUFBTSxHQUFHLEdBQUcsSUFBSSxJQUFJLENBQUM7UUFFM0IsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQztRQUNoQyxNQUFNLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQztRQUVoRCxJQUFJLENBQUMsUUFBUSxJQUFJLE9BQU8sUUFBUSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQzlDLE1BQU0sSUFBSSxLQUFLLENBQUMsNEJBQTRCLENBQUMsQ0FBQztRQUNoRCxDQUFDO1FBRUQsT0FBTyxDQUFDLEtBQUssSUFBSSxFQUFFO1lBQ2pCLElBQUksQ0FBQztnQkFDSCxNQUFNLENBQUMsSUFBSSxDQUFDLHlDQUF5QyxRQUFRLEVBQUUsQ0FBQyxDQUFDO2dCQUNqRSxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLGdCQUFnQixDQUFDLENBQUM7Z0JBQy9ELE9BQU87b0JBQ0wsTUFBTSxFQUFFLFNBQVM7b0JBQ2pCLE1BQU0sRUFBRSxRQUFRO2lCQUNqQixDQUFDO1lBQ0osQ0FBQztZQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7Z0JBQ2YsSUFBSSxLQUFLLFlBQVksS0FBSyxFQUFFLENBQUM7b0JBQzNCLE1BQU0sSUFBSSxLQUFLLENBQ2IsK0JBQStCLFFBQVEsWUFBWSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQ25FLENBQUM7Z0JBQ0osQ0FBQztxQkFBTSxDQUFDO29CQUNOLE1BQU0sSUFBSSxLQUFLLENBQ2IsK0JBQStCLFFBQVEsa0JBQWtCLENBQzFELENBQUM7Z0JBQ0osQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ1AsQ0FBQzs7QUF4RUgsc0NBeUVDO0FBeEV3QixzQkFBUSxHQUFHLGNBQWMsQ0FBQyJ9
@@ -1,10 +1,22 @@
1
1
  import { PSAgentLogger } from '../PSAgentLogger';
2
2
  import { PSAgentTool } from '../PSAgentTool';
3
+ export interface CommandSecurityOptions {
4
+ /** Validate/sanitize a command before execution. Return sanitized command string or throw/return null to reject. */
5
+ commandValidator?: (command: string) => string | null;
6
+ /** Restricted environment variables to pass to the child process. If set, replaces process.env entirely. */
7
+ env?: Record<string, string>;
8
+ /** Execution timeout in milliseconds (default: no timeout) */
9
+ timeoutMs?: number;
10
+ /** Max output buffer size in bytes (default: 10MB) */
11
+ maxBuffer?: number;
12
+ }
3
13
  export declare class PSCommandLineTool extends PSAgentTool {
4
14
  static readonly toolName = "run_commandline";
5
15
  private cwd;
16
+ private security?;
6
17
  constructor(options: {
7
18
  cwd: string;
19
+ security?: CommandSecurityOptions;
8
20
  });
9
21
  run(input: Record<string, any>, log?: PSAgentLogger): Promise<Record<string, any>>;
10
22
  }
@@ -31,6 +31,7 @@ class PSCommandLineTool extends PSAgentTool_1.PSAgentTool {
31
31
  },
32
32
  });
33
33
  this.cwd = options.cwd || process.cwd();
34
+ this.security = options.security;
34
35
  }
35
36
  run(input, log) {
36
37
  if (!input.command || typeof input.command !== 'string') {
@@ -38,10 +39,25 @@ class PSCommandLineTool extends PSAgentTool_1.PSAgentTool {
38
39
  }
39
40
  const logger = log || console;
40
41
  return new Promise((resolve, reject) => {
41
- const command = (0, helpers_1.unEscapeHTML)(input.command);
42
+ var _a, _b, _c, _d, _e, _f, _g;
43
+ let command = (0, helpers_1.unEscapeHTML)(input.command);
44
+ // Apply command validation if configured
45
+ if ((_a = this.security) === null || _a === void 0 ? void 0 : _a.commandValidator) {
46
+ const validated = this.security.commandValidator(command);
47
+ if (validated === null) {
48
+ return reject(new Error(`Command rejected by security policy: ${command}`));
49
+ }
50
+ command = validated;
51
+ }
42
52
  try {
43
53
  logger.info(`🛠️ Running command: \`${command}\``);
44
- const output = (0, child_process_1.execSync)(command, { cwd: this.cwd, encoding: 'utf-8' });
54
+ const output = (0, child_process_1.execSync)(command, {
55
+ cwd: this.cwd,
56
+ encoding: 'utf-8',
57
+ env: (_c = (_b = this.security) === null || _b === void 0 ? void 0 : _b.env) !== null && _c !== void 0 ? _c : undefined,
58
+ timeout: (_e = (_d = this.security) === null || _d === void 0 ? void 0 : _d.timeoutMs) !== null && _e !== void 0 ? _e : undefined,
59
+ maxBuffer: (_g = (_f = this.security) === null || _f === void 0 ? void 0 : _f.maxBuffer) !== null && _g !== void 0 ? _g : 10 * 1024 * 1024,
60
+ });
45
61
  logger.info('```bash\n' + `> ${command}\n` + `${output}\n` + '```\n\n');
46
62
  return resolve({
47
63
  status: 'success',
@@ -72,4 +88,4 @@ class PSCommandLineTool extends PSAgentTool_1.PSAgentTool {
72
88
  }
73
89
  exports.PSCommandLineTool = PSCommandLineTool;
74
90
  PSCommandLineTool.toolName = 'run_commandline';
75
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUFNDb21tYW5kTGluZVRvb2wuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3Rvb2xzL1BTQ29tbWFuZExpbmVUb29sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHVEQUF1RDtBQUN2RCxpREFBMkQ7QUFFM0QsK0JBQTJCO0FBRzNCLGdEQUE2QztBQUM3Qyw4Q0FBZ0Q7QUFFaEQsTUFBYSxpQkFBa0IsU0FBUSx5QkFBVztJQUdoRCxZQUFZLE9BQXdCO1FBQ2xDLEtBQUssQ0FBQztZQUNKLElBQUksRUFBRSxpQkFBaUIsQ0FBQyxRQUFRO1lBQ2hDLFdBQVcsRUFBRSwwREFBMEQ7WUFDdkUsSUFBSSxFQUFFLEtBQUs7WUFDWCxlQUFlLEVBQUUsSUFBSTtZQUNyQixJQUFJLEVBQUUsSUFBSTtZQUNWLFdBQVcsRUFBRTtnQkFDWCxHQUFHLEVBQUUsa0NBQWtDO2dCQUN2QyxNQUFNLEVBQUUsTUFBTTtnQkFDZCxXQUFXLEVBQUUsTUFBQyxDQUFDLFlBQVksQ0FDekIsTUFBQztxQkFDRSxNQUFNLENBQUM7b0JBQ04sT0FBTyxFQUFFLE1BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUM7d0JBQ3ZCLEtBQUssRUFBRSxTQUFTO3dCQUNoQixXQUFXLEVBQUUsK0NBQStDO3FCQUM3RCxDQUFDO2lCQUNILENBQUM7cUJBQ0QsSUFBSSxDQUFDO29CQUNKLEtBQUssRUFBRSw4QkFBOEI7b0JBQ3JDLFdBQVcsRUFDVCwyREFBMkQ7aUJBQzlELENBQUMsRUFDSixFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FDaEI7YUFDRjtTQUNGLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsSUFBSSxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDMUMsQ0FBQztJQUNNLEdBQUcsQ0FDUixLQUEwQixFQUMxQixHQUFtQjtRQUVuQixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sSUFBSSxPQUFPLEtBQUssQ0FBQyxPQUFPLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDeEQsTUFBTSxJQUFJLEtBQUssQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1FBQy9DLENBQUM7UUFDRCxNQUFNLE1BQU0sR0FBRyxHQUFHLElBQUksT0FBTyxDQUFDO1FBQzlCLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDckMsTUFBTSxPQUFPLEdBQUcsSUFBQSxzQkFBWSxFQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM1QyxJQUFJLENBQUM7Z0JBQ0gsTUFBTSxDQUFDLElBQUksQ0FBQywwQkFBMEIsT0FBTyxJQUFJLENBQUMsQ0FBQztnQkFDbkQsTUFBTSxNQUFNLEdBQUcsSUFBQSx3QkFBUSxFQUFDLE9BQU8sRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO2dCQUN2RSxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLE9BQU8sSUFBSSxHQUFHLEdBQUcsTUFBTSxJQUFJLEdBQUcsU0FBUyxDQUFDLENBQUM7Z0JBRXhFLE9BQU8sT0FBTyxDQUFDO29CQUNiLE1BQU0sRUFBRSxTQUFTO29CQUNqQixNQUFNLEVBQUUsTUFBTSxJQUFJLCtDQUErQztpQkFDbEUsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztZQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7Z0JBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDckIsTUFBTSxLQUFLLEdBQUcsS0FBaUMsQ0FBQztnQkFDaEQsSUFBSSxLQUFLLFlBQVksS0FBSyxFQUFFLENBQUM7b0JBQzNCLE1BQU0sQ0FDSixJQUFJLEtBQUssQ0FDUCw4QkFBOEIsT0FBTyxZQUFZLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FDakUsQ0FDRixDQUFDO2dCQUNKLENBQUM7cUJBQU0sSUFBSSxLQUFLLEVBQUUsQ0FBQztvQkFDakIsSUFDRSxLQUFLLENBQUMsTUFBTSxLQUFLLEVBQUU7d0JBQ25CLEtBQUssQ0FBQyxNQUFNLEtBQUssU0FBUzt3QkFDMUIsS0FBSyxDQUFDLE1BQU0sS0FBSyxTQUFTLEVBQzFCLENBQUM7d0JBQ0QsTUFBTSxDQUNKLElBQUksS0FBSyxDQUNQLEdBQUcsS0FBSyxDQUFDLE1BQU0sS0FBSyxLQUFLLENBQUMsTUFBTSxnQkFBZ0IsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUMvRCxDQUNGLENBQUM7b0JBQ0osQ0FBQzs7d0JBQ0MsTUFBTSxDQUNKLElBQUksS0FBSyxDQUNQLDhCQUE4QixPQUFPLGdCQUFnQixLQUFLLENBQUMsTUFBTSxZQUFZLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FDNUYsQ0FDRixDQUFDO2dCQUNOLENBQUM7cUJBQU0sQ0FBQztvQkFDTixNQUFNLENBQ0osSUFBSSxLQUFLLENBQUMsOEJBQThCLE9BQU8sa0JBQWtCLENBQUMsQ0FDbkUsQ0FBQztnQkFDSixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7QUFwRkgsOENBcUZDO0FBcEZ3QiwwQkFBUSxHQUFHLGlCQUFpQixDQUFDIn0=
91
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUFNDb21tYW5kTGluZVRvb2wuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3Rvb2xzL1BTQ29tbWFuZExpbmVUb29sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHVEQUF1RDtBQUN2RCxpREFBMkQ7QUFFM0QsK0JBQTJCO0FBRzNCLGdEQUE2QztBQUM3Qyw4Q0FBZ0Q7QUFhaEQsTUFBYSxpQkFBa0IsU0FBUSx5QkFBVztJQUloRCxZQUFZLE9BQTJEO1FBQ3JFLEtBQUssQ0FBQztZQUNKLElBQUksRUFBRSxpQkFBaUIsQ0FBQyxRQUFRO1lBQ2hDLFdBQVcsRUFBRSwwREFBMEQ7WUFDdkUsSUFBSSxFQUFFLEtBQUs7WUFDWCxlQUFlLEVBQUUsSUFBSTtZQUNyQixJQUFJLEVBQUUsSUFBSTtZQUNWLFdBQVcsRUFBRTtnQkFDWCxHQUFHLEVBQUUsa0NBQWtDO2dCQUN2QyxNQUFNLEVBQUUsTUFBTTtnQkFDZCxXQUFXLEVBQUUsTUFBQyxDQUFDLFlBQVksQ0FDekIsTUFBQztxQkFDRSxNQUFNLENBQUM7b0JBQ04sT0FBTyxFQUFFLE1BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUM7d0JBQ3ZCLEtBQUssRUFBRSxTQUFTO3dCQUNoQixXQUFXLEVBQUUsK0NBQStDO3FCQUM3RCxDQUFDO2lCQUNILENBQUM7cUJBQ0QsSUFBSSxDQUFDO29CQUNKLEtBQUssRUFBRSw4QkFBOEI7b0JBQ3JDLFdBQVcsRUFDVCwyREFBMkQ7aUJBQzlELENBQUMsRUFDSixFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FDaEI7YUFDRjtTQUNGLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsSUFBSSxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDeEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDO0lBQ25DLENBQUM7SUFDTSxHQUFHLENBQ1Is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
@@ -42,34 +42,31 @@ class PSClarifyTool extends PSAgentTool_1.PSAgentTool {
42
42
  this.answer = options.answer;
43
43
  }
44
44
  run(input, log) {
45
- if (!input.path || typeof input.path !== 'string') {
46
- throw new Error('Invalid file path provided.');
47
- }
48
45
  const logger = log || dlog;
49
- return new Promise((resolve, reject) => {
50
- const question = input.question;
51
- const question_context = input.content;
52
- // if (!filePath.startsWith(run.srcDir))
53
- // filePath = path.join(run.srcDir, lastevent.toolInput.request_body.path);
46
+ const question = input.question;
47
+ const question_context = input.question_context;
48
+ if (!question || typeof question !== 'string') {
49
+ throw new Error('Invalid question provided.');
50
+ }
51
+ return (async () => {
54
52
  try {
55
53
  logger.info(`❓ Agent need user input for question: ${question}`);
56
- const response = this.answer(question, question_context);
57
- // logger.info(`> Wrote ${content.length} bytes to file.`);
58
- return resolve({
54
+ const response = await this.answer(question, question_context);
55
+ return {
59
56
  status: 'success',
60
57
  answer: response,
61
- });
58
+ };
62
59
  }
63
60
  catch (error) {
64
61
  if (error instanceof Error) {
65
- reject(new Error(`Failed to clarify question: ${input.question}. Error: ${error.message}`));
62
+ throw new Error(`Failed to clarify question: ${question}. Error: ${error.message}`);
66
63
  }
67
64
  else {
68
- reject(new Error(`Failed to clarify question: ${input.question}. Unknown error.`));
65
+ throw new Error(`Failed to clarify question: ${question}. Unknown error.`);
69
66
  }
70
67
  }
71
- });
68
+ })();
72
69
  }
73
70
  }
74
71
  exports.PSClarifyTool = PSClarifyTool;
75
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUFNDbGFyaWZ5VG9vbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdG9vbHMvUFNDbGFyaWZ5VG9vbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSx1REFBdUQ7QUFDdkQsK0JBQTJCO0FBRzNCLGdEQUE2QztBQUM3Qyx1RUFBK0M7QUFFL0MsTUFBTSxJQUFJLEdBQUcsSUFBQSxxQkFBVyxFQUFDLG1CQUFtQixDQUFDLENBQUM7QUFDOUMsTUFBYSxhQUFjLFNBQVEseUJBQVc7SUFDckMsTUFBTSxDQUFVLFFBQVEsR0FBRyxjQUFjLENBQUM7SUFDekMsTUFBTSxDQUF5RDtJQUN2RSxZQUFZLE9BRVg7UUFDQyxLQUFLLENBQUM7WUFDSixJQUFJLEVBQUUsYUFBYSxDQUFDLFFBQVE7WUFDNUIsV0FBVyxFQUNULDJJQUEySTtZQUM3SSxJQUFJLEVBQUUsS0FBSztZQUNYLGVBQWUsRUFBRSxJQUFJO1lBQ3JCLElBQUksRUFBRSxJQUFJO1lBQ1YsV0FBVyxFQUFFO2dCQUNYLEdBQUcsRUFBRSxvQkFBb0IsYUFBYSxDQUFDLFFBQVEsRUFBRTtnQkFDakQsTUFBTSxFQUFFLE1BQU07Z0JBQ2QsV0FBVyxFQUFFLE1BQUMsQ0FBQyxZQUFZLENBQ3pCLE1BQUM7cUJBQ0UsTUFBTSxDQUFDO29CQUNOLFFBQVEsRUFBRSxNQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDO3dCQUN4QixLQUFLLEVBQUUsVUFBVTt3QkFDakIsV0FBVyxFQUFFLGdEQUFnRDtxQkFDOUQsQ0FBQztvQkFDRixnQkFBZ0IsRUFBRSxNQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDO3dCQUNoQyxLQUFLLEVBQUUsa0JBQWtCO3dCQUN6QixXQUFXLEVBQ1QsaUhBQWlIO3FCQUNwSCxDQUFDO2lCQUNILENBQUM7cUJBQ0QsSUFBSSxDQUFDO29CQUNKLEtBQUssRUFBRSxHQUFHLGFBQWEsQ0FBQyxRQUFRLGVBQWU7b0JBQy9DLFdBQVcsRUFBRSx1Q0FBdUMsYUFBYSxDQUFDLFFBQVEsUUFBUTtpQkFDbkYsQ0FBQyxFQUNKLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUNoQjthQUNGO1NBQ0YsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO0lBQy9CLENBQUM7SUFDTSxHQUFHLENBQ1IsS0FBMEIsRUFDMUIsR0FBbUI7UUFFbkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksT0FBTyxLQUFLLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ2xELE1BQU0sSUFBSSxLQUFLLENBQUMsNkJBQTZCLENBQUMsQ0FBQztRQUNqRCxDQUFDO1FBQ0QsTUFBTSxNQUFNLEdBQUcsR0FBRyxJQUFJLElBQUksQ0FBQztRQUMzQixPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ3JDLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUM7WUFDaEMsTUFBTSxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO1lBQ3ZDLHdDQUF3QztZQUN4Qyw0RUFBNEU7WUFDNUUsSUFBSSxDQUFDO2dCQUNILE1BQU0sQ0FBQyxJQUFJLENBQUMseUNBQXlDLFFBQVEsRUFBRSxDQUFDLENBQUM7Z0JBQ2pFLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLGdCQUFnQixDQUFDLENBQUM7Z0JBQ3pELDJEQUEyRDtnQkFDM0QsT0FBTyxPQUFPLENBQUM7b0JBQ2IsTUFBTSxFQUFFLFNBQVM7b0JBQ2pCLE1BQU0sRUFBRSxRQUFRO2lCQUNqQixDQUFDLENBQUM7WUFDTCxDQUFDO1lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztnQkFDZixJQUFJLEtBQUssWUFBWSxLQUFLLEVBQUUsQ0FBQztvQkFDM0IsTUFBTSxDQUNKLElBQUksS0FBSyxDQUNQLCtCQUErQixLQUFLLENBQUMsUUFBUSxZQUFZLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FDekUsQ0FDRixDQUFDO2dCQUNKLENBQUM7cUJBQU0sQ0FBQztvQkFDTixNQUFNLENBQ0osSUFBSSxLQUFLLENBQ1AsK0JBQStCLEtBQUssQ0FBQyxRQUFRLGtCQUFrQixDQUNoRSxDQUNGLENBQUM7Z0JBQ0osQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7O0FBNUVILHNDQTZFQyJ9
72
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUFNDbGFyaWZ5VG9vbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdG9vbHMvUFNDbGFyaWZ5VG9vbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSx1REFBdUQ7QUFDdkQsK0JBQTJCO0FBRzNCLGdEQUE2QztBQUM3Qyx1RUFBK0M7QUFFL0MsTUFBTSxJQUFJLEdBQUcsSUFBQSxxQkFBVyxFQUFDLG1CQUFtQixDQUFDLENBQUM7QUFDOUMsTUFBYSxhQUFjLFNBQVEseUJBQVc7SUFDckMsTUFBTSxDQUFVLFFBQVEsR0FBRyxjQUFjLENBQUM7SUFDekMsTUFBTSxDQUF5RDtJQUN2RSxZQUFZLE9BRVg7UUFDQyxLQUFLLENBQUM7WUFDSixJQUFJLEVBQUUsYUFBYSxDQUFDLFFBQVE7WUFDNUIsV0FBVyxFQUNULDJJQUEySTtZQUM3SSxJQUFJLEVBQUUsS0FBSztZQUNYLGVBQWUsRUFBRSxJQUFJO1lBQ3JCLElBQUksRUFBRSxJQUFJO1lBQ1YsV0FBVyxFQUFFO2dCQUNYLEdBQUcsRUFBRSxvQkFBb0IsYUFBYSxDQUFDLFFBQVEsRUFBRTtnQkFDakQsTUFBTSxFQUFFLE1BQU07Z0JBQ2QsV0FBVyxFQUFFLE1BQUMsQ0FBQyxZQUFZLENBQ3pCLE1BQUM7cUJBQ0UsTUFBTSxDQUFDO29CQUNOLFFBQVEsRUFBRSxNQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDO3dCQUN4QixLQUFLLEVBQUUsVUFBVTt3QkFDakIsV0FBVyxFQUFFLGdEQUFnRDtxQkFDOUQsQ0FBQztvQkFDRixnQkFBZ0IsRUFBRSxNQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDO3dCQUNoQyxLQUFLLEVBQUUsa0JBQWtCO3dCQUN6QixXQUFXLEVBQ1QsaUhBQWlIO3FCQUNwSCxDQUFDO2lCQUNILENBQUM7cUJBQ0QsSUFBSSxDQUFDO29CQUNKLEtBQUssRUFBRSxHQUFHLGFBQWEsQ0FBQyxRQUFRLGVBQWU7b0JBQy9DLFdBQVcsRUFBRSx1Q0FBdUMsYUFBYSxDQUFDLFFBQVEsUUFBUTtpQkFDbkYsQ0FBQyxFQUNKLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUNoQjthQUNGO1NBQ0YsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO0lBQy9CLENBQUM7SUFDTSxHQUFHLENBQ1IsS0FBMEIsRUFDMUIsR0FBbUI7UUFFbkIsTUFBTSxNQUFNLEdBQUcsR0FBRyxJQUFJLElBQUksQ0FBQztRQUUzQixNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO1FBQ2hDLE1BQU0sZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixDQUFDO1FBRWhELElBQUksQ0FBQyxRQUFRLElBQUksT0FBTyxRQUFRLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDOUMsTUFBTSxJQUFJLEtBQUssQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1FBQ2hELENBQUM7UUFFRCxPQUFPLENBQUMsS0FBSyxJQUFJLEVBQUU7WUFDakIsSUFBSSxDQUFDO2dCQUNILE1BQU0sQ0FBQyxJQUFJLENBQUMseUNBQXlDLFFBQVEsRUFBRSxDQUFDLENBQUM7Z0JBQ2pFLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztnQkFDL0QsT0FBTztvQkFDTCxNQUFNLEVBQUUsU0FBUztvQkFDakIsTUFBTSxFQUFFLFFBQVE7aUJBQ2pCLENBQUM7WUFDSixDQUFDO1lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztnQkFDZixJQUFJLEtBQUssWUFBWSxLQUFLLEVBQUUsQ0FBQztvQkFDM0IsTUFBTSxJQUFJLEtBQUssQ0FDYiwrQkFBK0IsUUFBUSxZQUFZLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FDbkUsQ0FBQztnQkFDSixDQUFDO3FCQUFNLENBQUM7b0JBQ04sTUFBTSxJQUFJLEtBQUssQ0FDYiwrQkFBK0IsUUFBUSxrQkFBa0IsQ0FDMUQsQ0FBQztnQkFDSixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDUCxDQUFDOztBQXhFSCxzQ0F5RUMifQ==
@@ -1,10 +1,22 @@
1
1
  import { PSAgentLogger } from '../PSAgentLogger';
2
2
  import { PSAgentTool } from '../PSAgentTool';
3
+ export interface CommandSecurityOptions {
4
+ /** Validate/sanitize a command before execution. Return sanitized command string or throw/return null to reject. */
5
+ commandValidator?: (command: string) => string | null;
6
+ /** Restricted environment variables to pass to the child process. If set, replaces process.env entirely. */
7
+ env?: Record<string, string>;
8
+ /** Execution timeout in milliseconds (default: no timeout) */
9
+ timeoutMs?: number;
10
+ /** Max output buffer size in bytes (default: 10MB) */
11
+ maxBuffer?: number;
12
+ }
3
13
  export declare class PSCommandLineTool extends PSAgentTool {
4
14
  static readonly toolName = "run_commandline";
5
15
  private cwd;
16
+ private security?;
6
17
  constructor(options: {
7
18
  cwd: string;
19
+ security?: CommandSecurityOptions;
8
20
  });
9
21
  run(input: Record<string, any>, log?: PSAgentLogger): Promise<Record<string, any>>;
10
22
  }
@@ -9,6 +9,7 @@ const helpers_1 = require("../utils/helpers");
9
9
  class PSCommandLineTool extends PSAgentTool_1.PSAgentTool {
10
10
  static toolName = 'run_commandline';
11
11
  cwd;
12
+ security;
12
13
  constructor(options) {
13
14
  super({
14
15
  name: PSCommandLineTool.toolName,
@@ -33,6 +34,7 @@ class PSCommandLineTool extends PSAgentTool_1.PSAgentTool {
33
34
  },
34
35
  });
35
36
  this.cwd = options.cwd || process.cwd();
37
+ this.security = options.security;
36
38
  }
37
39
  run(input, log) {
38
40
  if (!input.command || typeof input.command !== 'string') {
@@ -40,10 +42,24 @@ class PSCommandLineTool extends PSAgentTool_1.PSAgentTool {
40
42
  }
41
43
  const logger = log || console;
42
44
  return new Promise((resolve, reject) => {
43
- const command = (0, helpers_1.unEscapeHTML)(input.command);
45
+ let command = (0, helpers_1.unEscapeHTML)(input.command);
46
+ // Apply command validation if configured
47
+ if (this.security?.commandValidator) {
48
+ const validated = this.security.commandValidator(command);
49
+ if (validated === null) {
50
+ return reject(new Error(`Command rejected by security policy: ${command}`));
51
+ }
52
+ command = validated;
53
+ }
44
54
  try {
45
55
  logger.info(`🛠️ Running command: \`${command}\``);
46
- const output = (0, child_process_1.execSync)(command, { cwd: this.cwd, encoding: 'utf-8' });
56
+ const output = (0, child_process_1.execSync)(command, {
57
+ cwd: this.cwd,
58
+ encoding: 'utf-8',
59
+ env: this.security?.env ?? undefined,
60
+ timeout: this.security?.timeoutMs ?? undefined,
61
+ maxBuffer: this.security?.maxBuffer ?? 10 * 1024 * 1024,
62
+ });
47
63
  logger.info('```bash\n' + `> ${command}\n` + `${output}\n` + '```\n\n');
48
64
  return resolve({
49
65
  status: 'success',
@@ -73,4 +89,4 @@ class PSCommandLineTool extends PSAgentTool_1.PSAgentTool {
73
89
  }
74
90
  }
75
91
  exports.PSCommandLineTool = PSCommandLineTool;
76
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUFNDb21tYW5kTGluZVRvb2wuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3Rvb2xzL1BTQ29tbWFuZExpbmVUb29sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHVEQUF1RDtBQUN2RCxpREFBMkQ7QUFFM0QsK0JBQTJCO0FBRzNCLGdEQUE2QztBQUM3Qyw4Q0FBZ0Q7QUFFaEQsTUFBYSxpQkFBa0IsU0FBUSx5QkFBVztJQUN6QyxNQUFNLENBQVUsUUFBUSxHQUFHLGlCQUFpQixDQUFDO0lBQzVDLEdBQUcsQ0FBUztJQUNwQixZQUFZLE9BQXdCO1FBQ2xDLEtBQUssQ0FBQztZQUNKLElBQUksRUFBRSxpQkFBaUIsQ0FBQyxRQUFRO1lBQ2hDLFdBQVcsRUFBRSwwREFBMEQ7WUFDdkUsSUFBSSxFQUFFLEtBQUs7WUFDWCxlQUFlLEVBQUUsSUFBSTtZQUNyQixJQUFJLEVBQUUsSUFBSTtZQUNWLFdBQVcsRUFBRTtnQkFDWCxHQUFHLEVBQUUsa0NBQWtDO2dCQUN2QyxNQUFNLEVBQUUsTUFBTTtnQkFDZCxXQUFXLEVBQUUsTUFBQyxDQUFDLFlBQVksQ0FDekIsTUFBQztxQkFDRSxNQUFNLENBQUM7b0JBQ04sT0FBTyxFQUFFLE1BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUM7d0JBQ3ZCLEtBQUssRUFBRSxTQUFTO3dCQUNoQixXQUFXLEVBQUUsK0NBQStDO3FCQUM3RCxDQUFDO2lCQUNILENBQUM7cUJBQ0QsSUFBSSxDQUFDO29CQUNKLEtBQUssRUFBRSw4QkFBOEI7b0JBQ3JDLFdBQVcsRUFDVCwyREFBMkQ7aUJBQzlELENBQUMsRUFDSixFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FDaEI7YUFDRjtTQUNGLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsSUFBSSxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDMUMsQ0FBQztJQUNNLEdBQUcsQ0FDUixLQUEwQixFQUMxQixHQUFtQjtRQUVuQixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sSUFBSSxPQUFPLEtBQUssQ0FBQyxPQUFPLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDeEQsTUFBTSxJQUFJLEtBQUssQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1FBQy9DLENBQUM7UUFDRCxNQUFNLE1BQU0sR0FBRyxHQUFHLElBQUksT0FBTyxDQUFDO1FBQzlCLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDckMsTUFBTSxPQUFPLEdBQUcsSUFBQSxzQkFBWSxFQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM1QyxJQUFJLENBQUM7Z0JBQ0gsTUFBTSxDQUFDLElBQUksQ0FBQywwQkFBMEIsT0FBTyxJQUFJLENBQUMsQ0FBQztnQkFDbkQsTUFBTSxNQUFNLEdBQUcsSUFBQSx3QkFBUSxFQUFDLE9BQU8sRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO2dCQUN2RSxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLE9BQU8sSUFBSSxHQUFHLEdBQUcsTUFBTSxJQUFJLEdBQUcsU0FBUyxDQUFDLENBQUM7Z0JBRXhFLE9BQU8sT0FBTyxDQUFDO29CQUNiLE1BQU0sRUFBRSxTQUFTO29CQUNqQixNQUFNLEVBQUUsTUFBTSxJQUFJLCtDQUErQztpQkFDbEUsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztZQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7Z0JBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDckIsTUFBTSxLQUFLLEdBQUcsS0FBaUMsQ0FBQztnQkFDaEQsSUFBSSxLQUFLLFlBQVksS0FBSyxFQUFFLENBQUM7b0JBQzNCLE1BQU0sQ0FDSixJQUFJLEtBQUssQ0FDUCw4QkFBOEIsT0FBTyxZQUFZLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FDakUsQ0FDRixDQUFDO2dCQUNKLENBQUM7cUJBQU0sSUFBSSxLQUFLLEVBQUUsQ0FBQztvQkFDakIsSUFDRSxLQUFLLENBQUMsTUFBTSxLQUFLLEVBQUU7d0JBQ25CLEtBQUssQ0FBQyxNQUFNLEtBQUssU0FBUzt3QkFDMUIsS0FBSyxDQUFDLE1BQU0sS0FBSyxTQUFTLEVBQzFCLENBQUM7d0JBQ0QsTUFBTSxDQUNKLElBQUksS0FBSyxDQUNQLEdBQUcsS0FBSyxDQUFDLE1BQU0sS0FBSyxLQUFLLENBQUMsTUFBTSxnQkFBZ0IsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUMvRCxDQUNGLENBQUM7b0JBQ0osQ0FBQzs7d0JBQ0MsTUFBTSxDQUNKLElBQUksS0FBSyxDQUNQLDhCQUE4QixPQUFPLGdCQUFnQixLQUFLLENBQUMsTUFBTSxZQUFZLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FDNUYsQ0FDRixDQUFDO2dCQUNOLENBQUM7cUJBQU0sQ0FBQztvQkFDTixNQUFNLENBQ0osSUFBSSxLQUFLLENBQUMsOEJBQThCLE9BQU8sa0JBQWtCLENBQUMsQ0FDbkUsQ0FBQztnQkFDSixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7QUFwRkgsOENBcUZDIn0=
92
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUFNDb21tYW5kTGluZVRvb2wuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3Rvb2xzL1BTQ29tbWFuZExpbmVUb29sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHVEQUF1RDtBQUN2RCxpREFBMkQ7QUFFM0QsK0JBQTJCO0FBRzNCLGdEQUE2QztBQUM3Qyw4Q0FBZ0Q7QUFhaEQsTUFBYSxpQkFBa0IsU0FBUSx5QkFBVztJQUN6QyxNQUFNLENBQVUsUUFBUSxHQUFHLGlCQUFpQixDQUFDO0lBQzVDLEdBQUcsQ0FBUztJQUNaLFFBQVEsQ0FBMEI7SUFDMUMsWUFBWSxPQUEyRDtRQUNyRSxLQUFLLENBQUM7WUFDSixJQUFJLEVBQUUsaUJBQWlCLENBQUMsUUFBUTtZQUNoQyxXQUFXLEVBQUUsMERBQTBEO1lBQ3ZFLElBQUksRUFBRSxLQUFLO1lBQ1gsZUFBZSxFQUFFLElBQUk7WUFDckIsSUFBSSxFQUFFLElBQUk7WUFDVixXQUFXLEVBQUU7Z0JBQ1gsR0FBRyxFQUFFLGtDQUFrQztnQkFDdkMsTUFBTSxFQUFFLE1BQU07Z0JBQ2QsV0FBVyxFQUFFLE1BQUMsQ0FBQyxZQUFZLENBQ3pCLE1BQUM7cUJBQ0UsTUFBTSxDQUFDO29CQUNOLE9BQU8sRUFBRSxNQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDO3dCQUN2QixLQUFLLEVBQUUsU0FBUzt3QkFDaEIsV0FBVyxFQUFFLCtDQUErQztxQkFDN0QsQ0FBQztpQkFDSCxDQUFDO3FCQUNELElBQUksQ0FBQztvQkFDSixLQUFLLEVBQUUsOEJBQThCO29CQUNyQyxXQUFXLEVBQ1QsMkRBQTJEO2lCQUM5RCxDQUFDLEVBQ0osRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQ2hCO2FBQ0Y7U0FDRixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FB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
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.37",
4
+ "version": "1.1.39",
5
5
  "description": "ps adk adapter",
6
6
  "main": "build/main/index.js",
7
7
  "typings": "build/main/index.d.ts",