psadk 1.4.7 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +153 -0
- package/build/main/index.d.ts +1 -0
- package/build/main/lib/PSAI.js +1 -2
- package/build/main/lib/PSAgent.d.ts +50 -13
- package/build/main/lib/PSAgent.js +179 -502
- package/build/main/lib/PSAgentConfig.d.ts +114 -2
- package/build/main/lib/PSAgentLogger.js +1 -2
- package/build/main/lib/PSAgentTool.d.ts +8 -3
- package/build/main/lib/PSAgentTool.js +3 -3
- package/build/main/lib/agent-core/package.json +1 -1
- package/build/main/lib/agent-core/{agent-loop.d.ts → src/agent-loop.d.ts} +1 -1
- package/build/main/lib/agent-core/src/agent-loop.js +514 -0
- package/build/{module/lib/agent-core → main/lib/agent-core/src}/agent.d.ts +2 -2
- package/build/main/lib/agent-core/src/agent.js +419 -0
- package/build/main/lib/agent-core/{harness → src/harness}/agent-harness.d.ts +36 -26
- package/build/main/lib/agent-core/src/harness/agent-harness.js +1028 -0
- package/build/main/lib/agent-core/src/harness/compaction/branch-summarization.d.ts +52 -0
- package/build/main/lib/agent-core/src/harness/compaction/branch-summarization.js +182 -0
- package/build/main/lib/agent-core/src/harness/compaction/compaction.d.ts +94 -0
- package/build/main/lib/agent-core/src/harness/compaction/compaction.js +550 -0
- package/build/main/lib/agent-core/src/harness/compaction/utils.d.ts +24 -0
- package/build/main/lib/agent-core/src/harness/compaction/utils.js +131 -0
- package/build/main/lib/agent-core/src/harness/env/nodejs.d.ts +50 -0
- package/build/main/lib/agent-core/src/harness/env/nodejs.js +494 -0
- package/build/main/lib/agent-core/{harness → src/harness}/messages.d.ts +2 -2
- package/build/{module/lib/agent-core → main/lib/agent-core/src}/harness/messages.js +1 -1
- package/build/main/lib/agent-core/{harness → src/harness}/prompt-templates.d.ts +4 -1
- package/build/main/lib/agent-core/src/harness/prompt-templates.js +235 -0
- package/build/{module/lib/agent-core/harness/session/repo/jsonl.d.ts → main/lib/agent-core/src/harness/session/jsonl-repo.d.ts} +7 -1
- package/build/main/lib/agent-core/src/harness/session/jsonl-repo.js +106 -0
- package/build/{module/lib/agent-core/harness/session/storage/jsonl.d.ts → main/lib/agent-core/src/harness/session/jsonl-storage.d.ts} +7 -4
- package/build/main/lib/agent-core/src/harness/session/jsonl-storage.js +234 -0
- package/build/main/lib/agent-core/{harness/session/repo/memory.d.ts → src/harness/session/memory-repo.d.ts} +1 -1
- package/build/main/lib/agent-core/src/harness/session/memory-repo.js +45 -0
- package/build/main/lib/agent-core/{harness/session/storage/memory.d.ts → src/harness/session/memory-storage.d.ts} +4 -5
- package/build/main/lib/agent-core/src/harness/session/memory-storage.js +116 -0
- package/build/main/lib/agent-core/{harness/session/repo/shared.d.ts → src/harness/session/repo-utils.d.ts} +3 -2
- package/build/main/lib/agent-core/src/harness/session/repo-utils.js +39 -0
- package/build/{module/lib/agent-core → main/lib/agent-core/src}/harness/session/session.d.ts +3 -2
- package/build/main/lib/agent-core/src/harness/session/session.js +213 -0
- package/build/main/lib/agent-core/src/harness/session/uuid.d.ts +1 -0
- package/build/main/lib/agent-core/src/harness/session/uuid.js +54 -0
- package/build/main/lib/agent-core/{harness → src/harness}/skills.d.ts +4 -1
- package/build/main/lib/agent-core/src/harness/skills.js +353 -0
- package/build/main/lib/agent-core/{harness → src/harness}/system-prompt.d.ts +1 -1
- package/build/main/lib/agent-core/src/harness/system-prompt.js +30 -0
- package/build/{module/lib/agent-core → main/lib/agent-core/src}/harness/types.d.ts +160 -70
- package/build/main/lib/agent-core/src/harness/types.js +94 -0
- package/build/main/lib/agent-core/{harness → src/harness}/utils/shell-output.d.ts +2 -2
- package/build/main/lib/agent-core/src/harness/utils/shell-output.js +134 -0
- package/build/main/lib/agent-core/src/harness/utils/truncate.js +294 -0
- package/build/main/lib/agent-core/src/index.d.ts +19 -0
- package/build/main/lib/agent-core/src/index.js +25 -0
- package/build/main/lib/agent-core/src/node.d.ts +2 -0
- package/build/main/lib/agent-core/src/node.js +3 -0
- package/build/main/lib/agent-core/{proxy.js → src/proxy.js} +3 -2
- package/build/{module/lib/agent-core → main/lib/agent-core/src}/types.d.ts +13 -1
- package/build/{module/lib/agent-core → main/lib/agent-core/src}/types.js +1 -1
- package/build/main/lib/localAgent.d.ts +35 -0
- package/build/main/lib/localAgent.js +329 -0
- package/build/main/lib/remoteAgent.d.ts +25 -0
- package/build/main/lib/remoteAgent.js +311 -0
- package/build/main/lib/tools/BraveWebSearchTool.js +1 -2
- package/build/main/lib/tools/PSArtifactTool.js +1 -2
- package/build/main/lib/tools/PSClarifyTool.js +1 -2
- package/build/main/lib/tools/PSCommandLineTool.js +1 -2
- package/build/main/lib/tools/PSMemoryTool.js +1 -2
- package/build/main/lib/tools/PSReadFileTool.js +1 -2
- package/build/main/lib/tools/PSRetrievalTool.js +1 -2
- package/build/main/lib/tools/PSSkillTool.js +1 -2
- package/build/main/lib/tools/PSSubAgentTool.js +1 -1
- package/build/main/lib/tools/PSWriteFileTool.js +1 -2
- package/build/main/lib/tools/TodoTool.js +1 -2
- package/build/main/lib/utils/debuglogger.js +1 -2
- package/build/main/lib/utils/helpers.js +1 -6
- package/build/module/index.d.ts +1 -0
- package/build/module/lib/PSAI.js +1 -2
- package/build/module/lib/PSAgent.d.ts +50 -13
- package/build/module/lib/PSAgent.js +179 -502
- package/build/module/lib/PSAgentConfig.d.ts +114 -2
- package/build/module/lib/PSAgentLogger.js +1 -2
- package/build/module/lib/PSAgentTool.d.ts +8 -3
- package/build/module/lib/PSAgentTool.js +3 -3
- package/build/module/lib/agent-core/{agent-loop.d.ts → src/agent-loop.d.ts} +1 -1
- package/build/module/lib/agent-core/src/agent-loop.js +514 -0
- package/build/{main/lib/agent-core → module/lib/agent-core/src}/agent.d.ts +2 -2
- package/build/module/lib/agent-core/src/agent.js +419 -0
- package/build/module/lib/agent-core/{harness → src/harness}/agent-harness.d.ts +36 -26
- package/build/module/lib/agent-core/src/harness/agent-harness.js +1028 -0
- package/build/module/lib/agent-core/src/harness/compaction/branch-summarization.d.ts +52 -0
- package/build/module/lib/agent-core/src/harness/compaction/branch-summarization.js +182 -0
- package/build/module/lib/agent-core/src/harness/compaction/compaction.d.ts +94 -0
- package/build/module/lib/agent-core/src/harness/compaction/compaction.js +550 -0
- package/build/module/lib/agent-core/src/harness/compaction/utils.d.ts +24 -0
- package/build/module/lib/agent-core/src/harness/compaction/utils.js +131 -0
- package/build/module/lib/agent-core/src/harness/env/nodejs.d.ts +50 -0
- package/build/module/lib/agent-core/src/harness/env/nodejs.js +494 -0
- package/build/module/lib/agent-core/{harness → src/harness}/messages.d.ts +2 -2
- package/build/{main/lib/agent-core → module/lib/agent-core/src}/harness/messages.js +1 -1
- package/build/module/lib/agent-core/{harness → src/harness}/prompt-templates.d.ts +4 -1
- package/build/module/lib/agent-core/src/harness/prompt-templates.js +235 -0
- package/build/{main/lib/agent-core/harness/session/repo/jsonl.d.ts → module/lib/agent-core/src/harness/session/jsonl-repo.d.ts} +7 -1
- package/build/module/lib/agent-core/src/harness/session/jsonl-repo.js +106 -0
- package/build/{main/lib/agent-core/harness/session/storage/jsonl.d.ts → module/lib/agent-core/src/harness/session/jsonl-storage.d.ts} +7 -4
- package/build/module/lib/agent-core/src/harness/session/jsonl-storage.js +234 -0
- package/build/module/lib/agent-core/{harness/session/repo/memory.d.ts → src/harness/session/memory-repo.d.ts} +1 -1
- package/build/module/lib/agent-core/src/harness/session/memory-repo.js +45 -0
- package/build/module/lib/agent-core/{harness/session/storage/memory.d.ts → src/harness/session/memory-storage.d.ts} +4 -5
- package/build/module/lib/agent-core/src/harness/session/memory-storage.js +116 -0
- package/build/module/lib/agent-core/{harness/session/repo/shared.d.ts → src/harness/session/repo-utils.d.ts} +3 -2
- package/build/module/lib/agent-core/src/harness/session/repo-utils.js +39 -0
- package/build/{main/lib/agent-core → module/lib/agent-core/src}/harness/session/session.d.ts +3 -2
- package/build/module/lib/agent-core/src/harness/session/session.js +213 -0
- package/build/module/lib/agent-core/src/harness/session/uuid.d.ts +1 -0
- package/build/module/lib/agent-core/src/harness/session/uuid.js +54 -0
- package/build/module/lib/agent-core/{harness → src/harness}/skills.d.ts +4 -1
- package/build/module/lib/agent-core/src/harness/skills.js +353 -0
- package/build/module/lib/agent-core/{harness → src/harness}/system-prompt.d.ts +1 -1
- package/build/module/lib/agent-core/src/harness/system-prompt.js +30 -0
- package/build/{main/lib/agent-core → module/lib/agent-core/src}/harness/types.d.ts +160 -70
- package/build/module/lib/agent-core/src/harness/types.js +94 -0
- package/build/module/lib/agent-core/{harness → src/harness}/utils/shell-output.d.ts +2 -2
- package/build/module/lib/agent-core/src/harness/utils/shell-output.js +134 -0
- package/build/module/lib/agent-core/src/harness/utils/truncate.js +294 -0
- package/build/module/lib/agent-core/src/index.d.ts +19 -0
- package/build/module/lib/agent-core/src/index.js +25 -0
- package/build/module/lib/agent-core/src/node.d.ts +2 -0
- package/build/module/lib/agent-core/src/node.js +3 -0
- package/build/module/lib/agent-core/{proxy.js → src/proxy.js} +3 -2
- package/build/{main/lib/agent-core → module/lib/agent-core/src}/types.d.ts +13 -1
- package/build/{main/lib/agent-core → module/lib/agent-core/src}/types.js +1 -1
- package/build/module/lib/localAgent.d.ts +35 -0
- package/build/module/lib/localAgent.js +329 -0
- package/build/module/lib/remoteAgent.d.ts +25 -0
- package/build/module/lib/remoteAgent.js +311 -0
- package/build/module/lib/tools/BraveWebSearchTool.js +1 -2
- package/build/module/lib/tools/PSArtifactTool.js +1 -2
- package/build/module/lib/tools/PSClarifyTool.js +1 -2
- package/build/module/lib/tools/PSCommandLineTool.js +1 -2
- package/build/module/lib/tools/PSMemoryTool.js +1 -2
- package/build/module/lib/tools/PSReadFileTool.js +1 -2
- package/build/module/lib/tools/PSRetrievalTool.js +1 -2
- package/build/module/lib/tools/PSSkillTool.js +1 -2
- package/build/module/lib/tools/PSSubAgentTool.js +1 -1
- package/build/module/lib/tools/PSWriteFileTool.js +1 -2
- package/build/module/lib/tools/TodoTool.js +1 -2
- package/build/module/lib/utils/debuglogger.js +1 -2
- package/build/module/lib/utils/helpers.js +1 -6
- package/package.json +3 -2
- package/build/main/lib/agent-core/agent-loop.js +0 -483
- package/build/main/lib/agent-core/agent.js +0 -419
- package/build/main/lib/agent-core/harness/agent-harness.js +0 -772
- package/build/main/lib/agent-core/harness/compaction/branch-summarization.d.ts +0 -87
- package/build/main/lib/agent-core/harness/compaction/branch-summarization.js +0 -246
- package/build/main/lib/agent-core/harness/compaction/compaction.d.ts +0 -121
- package/build/main/lib/agent-core/harness/compaction/compaction.js +0 -637
- package/build/main/lib/agent-core/harness/compaction/utils.d.ts +0 -37
- package/build/main/lib/agent-core/harness/compaction/utils.js +0 -153
- package/build/main/lib/agent-core/harness/env/nodejs.d.ts +0 -43
- package/build/main/lib/agent-core/harness/env/nodejs.js +0 -353
- package/build/main/lib/agent-core/harness/execution-env.d.ts +0 -3
- package/build/main/lib/agent-core/harness/execution-env.js +0 -3
- package/build/main/lib/agent-core/harness/prompt-templates.js +0 -204
- package/build/main/lib/agent-core/harness/session/repo/jsonl.js +0 -98
- package/build/main/lib/agent-core/harness/session/repo/memory.js +0 -46
- package/build/main/lib/agent-core/harness/session/repo/shared.js +0 -31
- package/build/main/lib/agent-core/harness/session/session.js +0 -199
- package/build/main/lib/agent-core/harness/session/storage/jsonl.js +0 -170
- package/build/main/lib/agent-core/harness/session/storage/memory.js +0 -94
- package/build/main/lib/agent-core/harness/skills.js +0 -266
- package/build/main/lib/agent-core/harness/system-prompt.js +0 -30
- package/build/main/lib/agent-core/harness/types.js +0 -16
- package/build/main/lib/agent-core/harness/utils/shell-output.js +0 -101
- package/build/main/lib/agent-core/harness/utils/truncate.js +0 -208
- package/build/main/lib/agent-core/index.d.ts +0 -19
- package/build/main/lib/agent-core/index.js +0 -25
- package/build/module/lib/agent-core/agent-loop.js +0 -483
- package/build/module/lib/agent-core/agent.js +0 -419
- package/build/module/lib/agent-core/harness/agent-harness.js +0 -772
- package/build/module/lib/agent-core/harness/compaction/branch-summarization.d.ts +0 -87
- package/build/module/lib/agent-core/harness/compaction/branch-summarization.js +0 -246
- package/build/module/lib/agent-core/harness/compaction/compaction.d.ts +0 -121
- package/build/module/lib/agent-core/harness/compaction/compaction.js +0 -637
- package/build/module/lib/agent-core/harness/compaction/utils.d.ts +0 -37
- package/build/module/lib/agent-core/harness/compaction/utils.js +0 -153
- package/build/module/lib/agent-core/harness/env/nodejs.d.ts +0 -43
- package/build/module/lib/agent-core/harness/env/nodejs.js +0 -353
- package/build/module/lib/agent-core/harness/execution-env.d.ts +0 -3
- package/build/module/lib/agent-core/harness/execution-env.js +0 -3
- package/build/module/lib/agent-core/harness/prompt-templates.js +0 -204
- package/build/module/lib/agent-core/harness/session/repo/jsonl.js +0 -98
- package/build/module/lib/agent-core/harness/session/repo/memory.js +0 -46
- package/build/module/lib/agent-core/harness/session/repo/shared.js +0 -31
- package/build/module/lib/agent-core/harness/session/session.js +0 -199
- package/build/module/lib/agent-core/harness/session/storage/jsonl.js +0 -170
- package/build/module/lib/agent-core/harness/session/storage/memory.js +0 -94
- package/build/module/lib/agent-core/harness/skills.js +0 -266
- package/build/module/lib/agent-core/harness/system-prompt.js +0 -30
- package/build/module/lib/agent-core/harness/types.js +0 -16
- package/build/module/lib/agent-core/harness/utils/shell-output.js +0 -101
- package/build/module/lib/agent-core/harness/utils/truncate.js +0 -208
- package/build/module/lib/agent-core/index.d.ts +0 -19
- package/build/module/lib/agent-core/index.js +0 -25
- /package/build/main/lib/agent-core/{harness → src/harness}/utils/truncate.d.ts +0 -0
- /package/build/main/lib/agent-core/{proxy.d.ts → src/proxy.d.ts} +0 -0
- /package/build/module/lib/agent-core/{harness → src/harness}/utils/truncate.d.ts +0 -0
- /package/build/module/lib/agent-core/{proxy.d.ts → src/proxy.d.ts} +0 -0
|
@@ -5,7 +5,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.PSAgent = void 0;
|
|
7
7
|
exports.sleep = sleep;
|
|
8
|
-
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
9
8
|
const node_fs_1 = __importDefault(require("node:fs"));
|
|
10
9
|
const node_os_1 = __importDefault(require("node:os"));
|
|
11
10
|
const node_path_1 = __importDefault(require("node:path"));
|
|
@@ -14,11 +13,12 @@ const express_1 = require("@a2a-js/sdk/server/express");
|
|
|
14
13
|
const cors_1 = __importDefault(require("cors"));
|
|
15
14
|
const express_2 = __importDefault(require("express"));
|
|
16
15
|
const fetch_retry_1 = __importDefault(require("fetch-retry"));
|
|
17
|
-
const uuid_1 = require("uuid"); // For generating unique IDs
|
|
18
16
|
const yaml_1 = __importDefault(require("yaml"));
|
|
19
17
|
const v4_1 = require("zod/v4");
|
|
20
18
|
const PSAgentTask_1 = require("./PSAgentTask");
|
|
21
19
|
const PSAgentTool_1 = require("./PSAgentTool");
|
|
20
|
+
const localAgent_1 = require("./localAgent");
|
|
21
|
+
const remoteAgent_1 = require("./remoteAgent");
|
|
22
22
|
const PSSubAgentTool_1 = require("./tools/PSSubAgentTool");
|
|
23
23
|
const apiEndpoints_1 = require("./utils/apiEndpoints");
|
|
24
24
|
const debuglogger_1 = __importDefault(require("./utils/debuglogger"));
|
|
@@ -29,6 +29,14 @@ const fetch = (0, fetch_retry_1.default)(global.fetch);
|
|
|
29
29
|
async function sleep(ms) {
|
|
30
30
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
31
31
|
}
|
|
32
|
+
// ─── Type guard ──────────────────────────────────────────────────────────────────
|
|
33
|
+
/**
|
|
34
|
+
* Narrows a {@link PSAgentConfigWithLocal} to {@link PSAgentLocalConfig}.
|
|
35
|
+
* Used internally to provide TypeScript access to local-only options.
|
|
36
|
+
*/
|
|
37
|
+
function isLocalConfig(config) {
|
|
38
|
+
return config.local === true;
|
|
39
|
+
}
|
|
32
40
|
/**
|
|
33
41
|
* PSAgent class to manage AI agents with tools and tasks
|
|
34
42
|
* Implements AgentExecutor interface from A2A SDK
|
|
@@ -81,9 +89,15 @@ class PSAgent {
|
|
|
81
89
|
log;
|
|
82
90
|
serviceUrls;
|
|
83
91
|
cancelledTasks = new Set();
|
|
92
|
+
/**
|
|
93
|
+
* Internal local-mode support module.
|
|
94
|
+
* Only populated when `config.local === true`.
|
|
95
|
+
* @internal
|
|
96
|
+
*/
|
|
97
|
+
/** agent-core Agent instance. Only set when config.local === true. */
|
|
98
|
+
localCoreAgent;
|
|
84
99
|
cancelTask = async (taskId) => {
|
|
85
100
|
this.cancelledTasks.add(taskId);
|
|
86
|
-
// The execute loop is responsible for publishing the final state
|
|
87
101
|
};
|
|
88
102
|
/**
|
|
89
103
|
* create a new PSAgent with the given config
|
|
@@ -96,7 +110,11 @@ class PSAgent {
|
|
|
96
110
|
if (services) {
|
|
97
111
|
this.serviceUrls = services;
|
|
98
112
|
}
|
|
113
|
+
if (isLocalConfig(config)) {
|
|
114
|
+
this.localCoreAgent = (0, localAgent_1.buildLocalAgent)(config, (s) => this.getBaseUrl(s), () => this.Tools, this.log);
|
|
115
|
+
}
|
|
99
116
|
}
|
|
117
|
+
// ─── Original PSAgent public API (unchanged) ──────────────────────────────────
|
|
100
118
|
/**
|
|
101
119
|
* Get the Agent Class
|
|
102
120
|
* @returns Agent class from config or default "LlmAgent"
|
|
@@ -170,7 +188,6 @@ class PSAgent {
|
|
|
170
188
|
const mergedTools = [...(this.config.tools || []), ...this.tools];
|
|
171
189
|
if (this.config.sub_agents && this.config.sub_agents.length > 0) {
|
|
172
190
|
const subagents = [];
|
|
173
|
-
// add a PSSubAgentTool for each sub_agent in config
|
|
174
191
|
for (const subAgentConfig of this.config.sub_agents) {
|
|
175
192
|
subagents.push(new PSAgent(Object.assign({}, subAgentConfig, { token: this.config.token })));
|
|
176
193
|
}
|
|
@@ -225,17 +242,14 @@ class PSAgent {
|
|
|
225
242
|
if (!this.tools) {
|
|
226
243
|
this.tools = [];
|
|
227
244
|
}
|
|
228
|
-
let toolIndex = this.config.tools?.findIndex((t) => t.Name === tool.Name) ||
|
|
229
|
-
|
|
245
|
+
let toolIndex = this.config.tools?.findIndex((t) => t.Name === tool.Name) ||
|
|
246
|
+
-1;
|
|
247
|
+
if (toolIndex !== -1)
|
|
230
248
|
throw new Error(`Tool with name ${tool.Name} already exists in config`);
|
|
231
|
-
}
|
|
232
249
|
toolIndex = this.tools.findIndex((t) => t.Name === tool.Name);
|
|
233
|
-
if (toolIndex !== -1)
|
|
250
|
+
if (toolIndex !== -1)
|
|
234
251
|
throw new Error(`Tool with name ${tool.Name} already exists in agent`);
|
|
235
|
-
|
|
236
|
-
else {
|
|
237
|
-
this.tools.push(tool);
|
|
238
|
-
}
|
|
252
|
+
this.tools.push(tool);
|
|
239
253
|
}
|
|
240
254
|
// get token from config or environment variable
|
|
241
255
|
async getToken() {
|
|
@@ -255,24 +269,20 @@ class PSAgent {
|
|
|
255
269
|
headers['x-client-id'] = process.env.PS_CLIENT_ID || '';
|
|
256
270
|
headers['x-project-id'] = process.env.PS_PROJECT_ID || '';
|
|
257
271
|
headers['x-workspace-id'] = process.env.PS_WORKSPACE_ID || '';
|
|
258
|
-
if (this.config.additional_headers)
|
|
272
|
+
if (this.config.additional_headers)
|
|
259
273
|
Object.assign(headers, this.config.additional_headers);
|
|
260
|
-
}
|
|
261
274
|
return headers;
|
|
262
275
|
}
|
|
263
276
|
// Get base URL from environment variable or use default
|
|
264
277
|
// uses env variable PS_API_URL if set, otherwise defaults to https://dev.lionis.ai
|
|
265
278
|
getBaseUrl(service = 'agents') {
|
|
266
279
|
if (this.serviceUrls) {
|
|
267
|
-
// Use service-specific URL if available
|
|
268
280
|
const serviceUrl = this.serviceUrls[service];
|
|
269
|
-
if (serviceUrl)
|
|
270
|
-
return serviceUrl.replace(/\/+$/, '');
|
|
271
|
-
}
|
|
281
|
+
if (serviceUrl)
|
|
282
|
+
return serviceUrl.replace(/\/+$/, '');
|
|
272
283
|
}
|
|
273
|
-
// Fallback to environment variable or default
|
|
274
284
|
const baseUrl = process.env.PS_API_URL || 'https://dev.lionis.ai';
|
|
275
|
-
return baseUrl.replace(/\/+$/, '');
|
|
285
|
+
return baseUrl.replace(/\/+$/, '');
|
|
276
286
|
}
|
|
277
287
|
/**
|
|
278
288
|
* start a new temp agent on the agent platform
|
|
@@ -291,43 +301,21 @@ class PSAgent {
|
|
|
291
301
|
title: 'query',
|
|
292
302
|
description: 'The query by the user.',
|
|
293
303
|
}),
|
|
294
|
-
// history: z.array(z.object({
|
|
295
|
-
// role: z.enum(["user", "model"]).meta({
|
|
296
|
-
// title: "role",
|
|
297
|
-
// description: "Role of the message sender"
|
|
298
|
-
// }),
|
|
299
|
-
// content: z.string().meta({
|
|
300
|
-
// title: "content",
|
|
301
|
-
// description: "Content of the message"
|
|
302
|
-
// })
|
|
303
|
-
// })).optional().meta({
|
|
304
|
-
// title: "history",
|
|
305
|
-
// description: "List of the User and Assistant chat history"
|
|
306
|
-
// })
|
|
307
304
|
})
|
|
308
305
|
.meta({
|
|
309
306
|
title: 'request_body',
|
|
310
307
|
description: 'The request body parameters for the agent.',
|
|
311
308
|
}), { io: 'input' }));
|
|
312
|
-
//check if the input confirms to the input schema
|
|
313
|
-
// const parseResult = z.object(ischema).safeParse(input);
|
|
314
|
-
// if (!parseResult.success) {
|
|
315
|
-
// log?.error('Input validation failed:', parseResult.error.message);
|
|
316
|
-
// throw new Error(`Input validation failed: ${parseResult.error.issues.map(issue=>issue.message).join(', ')}`);
|
|
317
|
-
// }
|
|
318
309
|
if (ischema.properties) {
|
|
319
310
|
Object.assign(ischema.properties, {
|
|
320
311
|
history: {
|
|
321
312
|
type: 'array',
|
|
322
|
-
items: {
|
|
323
|
-
type: 'object',
|
|
324
|
-
},
|
|
313
|
+
items: { type: 'object' },
|
|
325
314
|
description: 'List of the User and Assistant chat history',
|
|
326
315
|
title: 'Chat history',
|
|
327
316
|
},
|
|
328
317
|
});
|
|
329
318
|
}
|
|
330
|
-
// console.log("input schema:", JSON.stringify(ischema, null, 2));
|
|
331
319
|
const output_schema = this.OutputSchema ||
|
|
332
320
|
(0, helpers_1.removeSchemaMetadata)(v4_1.z.toJSONSchema(v4_1.z
|
|
333
321
|
.object({
|
|
@@ -347,7 +335,7 @@ class PSAgent {
|
|
|
347
335
|
system_prompt: this.Instruction,
|
|
348
336
|
llm: this.Model || 'gpt-5',
|
|
349
337
|
input_schema: ischema,
|
|
350
|
-
output_schema
|
|
338
|
+
output_schema,
|
|
351
339
|
},
|
|
352
340
|
input_params: Object.assign(input, { history: history || [] }),
|
|
353
341
|
tasks: this.Tasks.map((task) => ({
|
|
@@ -378,17 +366,12 @@ class PSAgent {
|
|
|
378
366
|
dlog.debug(`Starting agent with body: ${JSON.stringify(body, null, 2)}`);
|
|
379
367
|
try {
|
|
380
368
|
const headers = await this.getAuthHeaders();
|
|
381
|
-
// log?.debug('Starting agent with headers:', headers);
|
|
382
|
-
// log?.debug('Starting agent with body:', JSON.stringify(body.input_params, null, 2));
|
|
383
369
|
const response = await fetch(apiEndpoints_1.API_ENDPOINTS.AGENTS_SERVICE(this.getBaseUrl('agents'), '/temp_agent'), {
|
|
384
370
|
method: 'POST',
|
|
385
|
-
headers: {
|
|
386
|
-
'Content-Type': 'application/json',
|
|
387
|
-
...headers,
|
|
388
|
-
},
|
|
371
|
+
headers: { 'Content-Type': 'application/json', ...headers },
|
|
389
372
|
body: JSON.stringify(body),
|
|
390
373
|
retries: 3,
|
|
391
|
-
retryOn:
|
|
374
|
+
retryOn: (attempt, error, response) => {
|
|
392
375
|
// retry on any network error, or 4xx or 5xx status codes
|
|
393
376
|
if (error !== null || (response.status > 400 && attempt < 4)) {
|
|
394
377
|
log?.warn(`retrying execute agent, attempt number ${attempt + 1}, status: ${response.status}`, error);
|
|
@@ -396,9 +379,7 @@ class PSAgent {
|
|
|
396
379
|
}
|
|
397
380
|
return false;
|
|
398
381
|
},
|
|
399
|
-
retryDelay:
|
|
400
|
-
return Math.pow(2, attempt) * 1000; // 1000, 2000, 4000
|
|
401
|
-
},
|
|
382
|
+
retryDelay: (attempt) => Math.pow(2, attempt) * 1000, // 1000, 2000, 4000
|
|
402
383
|
});
|
|
403
384
|
if (!response.ok) {
|
|
404
385
|
let errorDetails;
|
|
@@ -408,9 +389,8 @@ class PSAgent {
|
|
|
408
389
|
catch (e) {
|
|
409
390
|
throw new Error(`Unable to start agent. status: ${response.status}. ${e}`);
|
|
410
391
|
}
|
|
411
|
-
if (errorDetails)
|
|
392
|
+
if (errorDetails)
|
|
412
393
|
throw new Error(`Unable to start agent. status: ${response.status}, details: ${JSON.stringify(errorDetails, null, 2)}`);
|
|
413
|
-
}
|
|
414
394
|
}
|
|
415
395
|
const responseData = await response.json();
|
|
416
396
|
this.agentId = responseData.data.agent_id;
|
|
@@ -430,9 +410,8 @@ class PSAgent {
|
|
|
430
410
|
*/
|
|
431
411
|
async instruct(instruction) {
|
|
432
412
|
const log = this.log;
|
|
433
|
-
if (!this.agentId)
|
|
413
|
+
if (!this.agentId)
|
|
434
414
|
throw new Error('Agent ID is not set');
|
|
435
|
-
}
|
|
436
415
|
try {
|
|
437
416
|
const response = await fetch(apiEndpoints_1.API_ENDPOINTS.AGENTS_SERVICE(this.getBaseUrl('agents'), `/${this.agentId}/instruct`), {
|
|
438
417
|
method: 'POST',
|
|
@@ -442,20 +421,17 @@ class PSAgent {
|
|
|
442
421
|
},
|
|
443
422
|
body: JSON.stringify({
|
|
444
423
|
correlation_id: this.CorrelationId,
|
|
445
|
-
instruction
|
|
424
|
+
instruction,
|
|
446
425
|
}),
|
|
447
426
|
retries: 3,
|
|
448
|
-
retryOn:
|
|
449
|
-
// retry on any network error, or 4xx or 5xx status codes
|
|
427
|
+
retryOn: (attempt, error, response) => {
|
|
450
428
|
if (error !== null || (response.status >= 400 && attempt < 4)) {
|
|
451
|
-
log?.warn(`retrying instruct agent, attempt number ${attempt + 1} ${response.status}
|
|
429
|
+
log?.warn(`retrying instruct agent, attempt number ${attempt + 1} ${response.status} ${JSON.stringify(response)}`, error);
|
|
452
430
|
return true;
|
|
453
431
|
}
|
|
454
432
|
return false;
|
|
455
433
|
},
|
|
456
|
-
retryDelay:
|
|
457
|
-
return Math.pow(2, attempt) * 1000; // 1000, 2000, 4000
|
|
458
|
-
},
|
|
434
|
+
retryDelay: (attempt) => Math.pow(2, attempt) * 1000,
|
|
459
435
|
});
|
|
460
436
|
if (!response.ok) {
|
|
461
437
|
log?.error('Error instructing agent:', await response.json());
|
|
@@ -476,9 +452,10 @@ class PSAgent {
|
|
|
476
452
|
*/
|
|
477
453
|
async resume(tooloutput) {
|
|
478
454
|
const log = this.log;
|
|
479
|
-
if (
|
|
455
|
+
if (this.localCoreAgent)
|
|
456
|
+
return {};
|
|
457
|
+
if (!this.agentId)
|
|
480
458
|
throw new Error('Agent ID is not set');
|
|
481
|
-
}
|
|
482
459
|
try {
|
|
483
460
|
const response = await fetch(apiEndpoints_1.API_ENDPOINTS.AGENTS_SERVICE(this.getBaseUrl('agents'), `/${this.agentId}/resume`), {
|
|
484
461
|
method: 'POST',
|
|
@@ -491,7 +468,7 @@ class PSAgent {
|
|
|
491
468
|
tool_output_override: tooloutput,
|
|
492
469
|
}),
|
|
493
470
|
retries: 3,
|
|
494
|
-
retryOn:
|
|
471
|
+
retryOn: (attempt, error, response) => {
|
|
495
472
|
// retry on any network error, or 4xx or 5xx status codes
|
|
496
473
|
if (error !== null || (response.status >= 400 && attempt < 4)) {
|
|
497
474
|
log?.warn(`retrying resume, attempt number ${attempt + 1} ${response.status} ${JSON.stringify(response)}`, error);
|
|
@@ -499,9 +476,7 @@ class PSAgent {
|
|
|
499
476
|
}
|
|
500
477
|
return false;
|
|
501
478
|
},
|
|
502
|
-
retryDelay:
|
|
503
|
-
return Math.pow(2, attempt) * 1000; // 1000, 2000, 4000
|
|
504
|
-
},
|
|
479
|
+
retryDelay: (attempt) => Math.pow(2, attempt) * 1000, // 1000, 2000, 4000
|
|
505
480
|
});
|
|
506
481
|
if (!response.ok) {
|
|
507
482
|
log?.error('Error resuming agent:', await response.json());
|
|
@@ -522,9 +497,13 @@ class PSAgent {
|
|
|
522
497
|
* @param log optional logger to use for logging, defaults to agent's logger
|
|
523
498
|
*/
|
|
524
499
|
async cancel(log) {
|
|
525
|
-
if (
|
|
526
|
-
|
|
500
|
+
if (this.localCoreAgent) {
|
|
501
|
+
if (this.localCoreAgent.state.isStreaming)
|
|
502
|
+
this.localCoreAgent.abort();
|
|
503
|
+
return;
|
|
527
504
|
}
|
|
505
|
+
if (!this.AgentId)
|
|
506
|
+
throw new Error('Agent is not started');
|
|
528
507
|
try {
|
|
529
508
|
const response = await fetch(apiEndpoints_1.API_ENDPOINTS.AGENTS_SERVICE(this.getBaseUrl('agents'), `/${this.agentId}`), {
|
|
530
509
|
method: 'DELETE',
|
|
@@ -533,7 +512,7 @@ class PSAgent {
|
|
|
533
512
|
...(await this.getAuthHeaders()),
|
|
534
513
|
},
|
|
535
514
|
retries: 3,
|
|
536
|
-
retryOn:
|
|
515
|
+
retryOn: (attempt, error, response) => {
|
|
537
516
|
// retry on any network error, or 4xx or 5xx status codes
|
|
538
517
|
if (error !== null || (response.status >= 400 && attempt < 4)) {
|
|
539
518
|
log?.warn(`retrying cancel agent, attempt number ${attempt + 1}`);
|
|
@@ -541,9 +520,7 @@ class PSAgent {
|
|
|
541
520
|
}
|
|
542
521
|
return false;
|
|
543
522
|
},
|
|
544
|
-
retryDelay:
|
|
545
|
-
return Math.pow(2, attempt) * 1000; // 1000, 2000, 4000
|
|
546
|
-
},
|
|
523
|
+
retryDelay: (attempt) => Math.pow(2, attempt) * 1000, // 1000, 2000, 4000
|
|
547
524
|
});
|
|
548
525
|
if (!response.ok) {
|
|
549
526
|
let errorDetails;
|
|
@@ -554,9 +531,8 @@ class PSAgent {
|
|
|
554
531
|
catch (e) {
|
|
555
532
|
throw new Error(`Unable to cancel agent status: ${response.status}, ${e}`);
|
|
556
533
|
}
|
|
557
|
-
if (errorDetails)
|
|
534
|
+
if (errorDetails)
|
|
558
535
|
throw new Error(`Unable to cancel agent status: ${response.status}, details: ${JSON.stringify(errorDetails)}`);
|
|
559
|
-
}
|
|
560
536
|
}
|
|
561
537
|
log?.info(`Agent ${this.agentId} cancelled successfully`);
|
|
562
538
|
}
|
|
@@ -571,9 +547,10 @@ class PSAgent {
|
|
|
571
547
|
* @see https://dev.lionis.ai/api/v1/events/events?correlationId={{correlation_id}}
|
|
572
548
|
*/
|
|
573
549
|
async getEvents() {
|
|
574
|
-
if (
|
|
550
|
+
if (this.localCoreAgent)
|
|
551
|
+
return this.localCoreAgent.state.messages.map((m) => ({ ...m }));
|
|
552
|
+
if (!this.CorrelationId)
|
|
575
553
|
throw new Error('Correlation ID is not set');
|
|
576
|
-
}
|
|
577
554
|
try {
|
|
578
555
|
const response = await fetch(apiEndpoints_1.API_ENDPOINTS.EVENTS_SERVICE(this.getBaseUrl('events'), `/events?correlationId=${this.correlationId}`), {
|
|
579
556
|
method: 'GET',
|
|
@@ -582,27 +559,19 @@ class PSAgent {
|
|
|
582
559
|
...(await this.getAuthHeaders()),
|
|
583
560
|
},
|
|
584
561
|
retries: 3,
|
|
585
|
-
retryOn:
|
|
562
|
+
retryOn: (attempt, error, response) => {
|
|
586
563
|
// retry on any network error, or 4xx or 5xx status codes
|
|
587
|
-
if (error !== null || (response.status >= 400 && attempt < 4))
|
|
588
|
-
//log?.warn(`retrying getEvents, attempt number ${attempt + 1}`);
|
|
564
|
+
if (error !== null || (response.status >= 400 && attempt < 4))
|
|
589
565
|
return true;
|
|
590
|
-
}
|
|
591
566
|
return false;
|
|
592
567
|
},
|
|
593
|
-
retryDelay:
|
|
594
|
-
return Math.pow(2, attempt) * 1000; // 1000, 2000, 4000
|
|
595
|
-
},
|
|
568
|
+
retryDelay: (attempt) => Math.pow(2, attempt) * 1000,
|
|
596
569
|
});
|
|
597
|
-
if (!response.ok)
|
|
598
|
-
//log.error("Error fetching agent events:", await response.json());
|
|
570
|
+
if (!response.ok)
|
|
599
571
|
throw new Error(`HTTP error! status: ${response.status}`);
|
|
600
|
-
|
|
601
|
-
const eventsData = await response.json();
|
|
602
|
-
return eventsData;
|
|
572
|
+
return (await response.json());
|
|
603
573
|
}
|
|
604
574
|
catch (error) {
|
|
605
|
-
//log.error("Error fetching agent events:", error);
|
|
606
575
|
throw new Error(`Failed to fetch agent events: ${error instanceof Error ? error.message : String(error)}`);
|
|
607
576
|
}
|
|
608
577
|
}
|
|
@@ -620,9 +589,8 @@ class PSAgent {
|
|
|
620
589
|
* ```
|
|
621
590
|
*/
|
|
622
591
|
async getEvaluationData() {
|
|
623
|
-
if (!this.agentId)
|
|
592
|
+
if (!this.agentId)
|
|
624
593
|
throw new Error('Agent ID is not set');
|
|
625
|
-
}
|
|
626
594
|
const requestUrl = `${this.getBaseUrl('llmtrack')}/web/v1/llmtrack-ui/api/getEvaluationData?agentId=${this.agentId}`;
|
|
627
595
|
try {
|
|
628
596
|
const response = await fetch(requestUrl, {
|
|
@@ -632,16 +600,12 @@ class PSAgent {
|
|
|
632
600
|
Authorization: `${await this.getToken()}`,
|
|
633
601
|
},
|
|
634
602
|
retries: 3,
|
|
635
|
-
retryOn:
|
|
636
|
-
|
|
637
|
-
if (error !== null || (response.status >= 400 && attempt < 4)) {
|
|
603
|
+
retryOn: (attempt, error, response) => {
|
|
604
|
+
if (error !== null || (response.status >= 400 && attempt < 4))
|
|
638
605
|
return true;
|
|
639
|
-
}
|
|
640
606
|
return false;
|
|
641
607
|
},
|
|
642
|
-
retryDelay:
|
|
643
|
-
return Math.pow(2, attempt) * 1000; // 1000, 2000, 4000
|
|
644
|
-
},
|
|
608
|
+
retryDelay: (attempt) => Math.pow(2, attempt) * 1000,
|
|
645
609
|
});
|
|
646
610
|
if (!response.ok) {
|
|
647
611
|
const errorText = await response.text();
|
|
@@ -708,377 +672,12 @@ class PSAgent {
|
|
|
708
672
|
}
|
|
709
673
|
return results;
|
|
710
674
|
}
|
|
711
|
-
/**
|
|
712
|
-
*
|
|
713
|
-
* @param requestContext
|
|
714
|
-
* @param eventBus
|
|
715
|
-
* @returns
|
|
716
|
-
*/
|
|
717
|
-
async execute(requestContext, eventBus) {
|
|
718
|
-
const log = this.log;
|
|
719
|
-
const userMessage = requestContext.userMessage;
|
|
720
|
-
const existingTask = requestContext.task;
|
|
721
|
-
const taskId = existingTask?.id || (0, uuid_1.v4)();
|
|
722
|
-
const contextId = userMessage.contextId || existingTask?.contextId || (0, uuid_1.v4)();
|
|
723
|
-
log?.info(`[${this.Name}:AgentExecutor] Processing message ${userMessage.messageId} for task ${taskId} (context: ${contextId})`);
|
|
724
|
-
// 1. Publish initial Task event if it's a new task
|
|
725
|
-
if (!existingTask) {
|
|
726
|
-
const initialTask = {
|
|
727
|
-
kind: 'task',
|
|
728
|
-
id: taskId,
|
|
729
|
-
contextId: contextId,
|
|
730
|
-
status: {
|
|
731
|
-
state: 'submitted',
|
|
732
|
-
timestamp: new Date().toISOString(),
|
|
733
|
-
},
|
|
734
|
-
history: [userMessage],
|
|
735
|
-
metadata: userMessage.metadata,
|
|
736
|
-
artifacts: [], // Initialize artifacts array
|
|
737
|
-
};
|
|
738
|
-
eventBus.publish(initialTask);
|
|
739
|
-
}
|
|
740
|
-
// 2. Publish "working" status update
|
|
741
|
-
let workingStatusUpdate = {
|
|
742
|
-
kind: 'status-update',
|
|
743
|
-
taskId: taskId,
|
|
744
|
-
contextId: contextId,
|
|
745
|
-
status: {
|
|
746
|
-
state: 'working',
|
|
747
|
-
message: {
|
|
748
|
-
kind: 'message',
|
|
749
|
-
role: 'agent',
|
|
750
|
-
messageId: (0, uuid_1.v4)(),
|
|
751
|
-
parts: [{ kind: 'text', text: 'Initializing the agent...' }],
|
|
752
|
-
taskId: taskId,
|
|
753
|
-
contextId: contextId,
|
|
754
|
-
},
|
|
755
|
-
timestamp: new Date().toISOString(),
|
|
756
|
-
},
|
|
757
|
-
final: false,
|
|
758
|
-
};
|
|
759
|
-
eventBus.publish(workingStatusUpdate);
|
|
760
|
-
// 3. Prepare messages for history
|
|
761
|
-
const history = existingTask?.history ? [...existingTask.history] : [];
|
|
762
|
-
if (!history.find((m) => m.messageId === userMessage.messageId)) {
|
|
763
|
-
history.push(userMessage);
|
|
764
|
-
}
|
|
765
|
-
log?.debug(`[${this.Name}:AgentExecutor] Total messages in history: ${history.length}`);
|
|
766
|
-
const messages = history
|
|
767
|
-
.map((m) => ({
|
|
768
|
-
role: (m.role === 'agent' ? 'model' : 'user'),
|
|
769
|
-
content: m.parts
|
|
770
|
-
.filter((p) => p.kind === 'text' && !!p.text)
|
|
771
|
-
.map((p) => p.text)
|
|
772
|
-
.join('\n'),
|
|
773
|
-
// .map((p) => ({
|
|
774
|
-
// text: (p as TextPart).text,
|
|
775
|
-
// })),
|
|
776
|
-
}))
|
|
777
|
-
.filter((m) => m.content.length > 0);
|
|
778
|
-
if (messages.length === 0) {
|
|
779
|
-
log?.warn(`[${this.Name}:AgentExecutor] No valid text messages found in history for task ${taskId}.`);
|
|
780
|
-
const failureUpdate = {
|
|
781
|
-
kind: 'status-update',
|
|
782
|
-
taskId: taskId,
|
|
783
|
-
contextId: contextId,
|
|
784
|
-
status: {
|
|
785
|
-
state: 'failed',
|
|
786
|
-
message: {
|
|
787
|
-
kind: 'message',
|
|
788
|
-
role: 'agent',
|
|
789
|
-
messageId: (0, uuid_1.v4)(),
|
|
790
|
-
parts: [
|
|
791
|
-
{ kind: 'text', text: 'No input message found to process.' },
|
|
792
|
-
],
|
|
793
|
-
taskId: taskId,
|
|
794
|
-
contextId: contextId,
|
|
795
|
-
},
|
|
796
|
-
timestamp: new Date().toISOString(),
|
|
797
|
-
},
|
|
798
|
-
final: true,
|
|
799
|
-
};
|
|
800
|
-
eventBus.publish(failureUpdate);
|
|
801
|
-
return;
|
|
802
|
-
}
|
|
803
|
-
try {
|
|
804
|
-
const input = {};
|
|
805
|
-
if (userMessage.parts && userMessage.parts.length > 0) {
|
|
806
|
-
for (const part of userMessage.parts) {
|
|
807
|
-
if (part.kind === 'text' && part.text) {
|
|
808
|
-
input['query'] = part.text;
|
|
809
|
-
}
|
|
810
|
-
// TODO: handle other part kinds (e.g., images, files) here as needed
|
|
811
|
-
}
|
|
812
|
-
}
|
|
813
|
-
// if (this.Tools.length === 0) {
|
|
814
|
-
// const ai=new PSAI(this.Token||'',this.getBaseUrl(),log);
|
|
815
|
-
// const llmResponse:any = await ai.llm(input.query, this.Model);
|
|
816
|
-
// //console.log("llmResponse:", llmResponse);
|
|
817
|
-
// const completedUpdate: TaskStatusUpdateEvent = {
|
|
818
|
-
// kind: 'status-update',
|
|
819
|
-
// taskId: taskId,
|
|
820
|
-
// contextId: contextId,
|
|
821
|
-
// status: {
|
|
822
|
-
// state: 'completed',
|
|
823
|
-
// message: {
|
|
824
|
-
// kind: 'message',
|
|
825
|
-
// role: 'agent',
|
|
826
|
-
// messageId: uuidv4(),
|
|
827
|
-
// parts: [{ kind: 'text', text: llmResponse.choices[0].message.content }],
|
|
828
|
-
// taskId: taskId,
|
|
829
|
-
// contextId: contextId,
|
|
830
|
-
// },
|
|
831
|
-
// timestamp: new Date().toISOString(),
|
|
832
|
-
// },
|
|
833
|
-
// final: true,
|
|
834
|
-
// };
|
|
835
|
-
// eventBus.publish(completedUpdate);
|
|
836
|
-
// return;
|
|
837
|
-
// }
|
|
838
|
-
this.log?.debug(`Agent input: ${JSON.stringify(input)}`);
|
|
839
|
-
await this.start(input, messages.slice(0, -1), log);
|
|
840
|
-
workingStatusUpdate = {
|
|
841
|
-
kind: 'status-update',
|
|
842
|
-
taskId: taskId,
|
|
843
|
-
contextId: contextId,
|
|
844
|
-
status: {
|
|
845
|
-
state: 'working',
|
|
846
|
-
message: {
|
|
847
|
-
kind: 'message',
|
|
848
|
-
role: 'agent',
|
|
849
|
-
messageId: (0, uuid_1.v4)(),
|
|
850
|
-
parts: [
|
|
851
|
-
{
|
|
852
|
-
kind: 'text',
|
|
853
|
-
text: `started new agent ${this.AgentId}, correlationid: ${this.correlationId}`,
|
|
854
|
-
},
|
|
855
|
-
],
|
|
856
|
-
taskId: taskId,
|
|
857
|
-
contextId: contextId,
|
|
858
|
-
},
|
|
859
|
-
timestamp: new Date().toISOString(),
|
|
860
|
-
},
|
|
861
|
-
final: false,
|
|
862
|
-
};
|
|
863
|
-
eventBus.publish(workingStatusUpdate);
|
|
864
|
-
let events;
|
|
865
|
-
let lastevent = {
|
|
866
|
-
timestamp: Date.now(),
|
|
867
|
-
};
|
|
868
|
-
let processedEvents = 0;
|
|
869
|
-
do {
|
|
870
|
-
do {
|
|
871
|
-
if (this.cancelledTasks.has(taskId)) {
|
|
872
|
-
log?.info(`[${this.Name}:AgentExecutor] Task ${taskId} has been cancelled.`);
|
|
873
|
-
// Publish the final 'canceled' status.
|
|
874
|
-
const cancelledUpdate = {
|
|
875
|
-
kind: 'status-update',
|
|
876
|
-
taskId: taskId,
|
|
877
|
-
contextId: contextId,
|
|
878
|
-
status: {
|
|
879
|
-
state: 'canceled',
|
|
880
|
-
timestamp: new Date().toISOString(),
|
|
881
|
-
},
|
|
882
|
-
final: true,
|
|
883
|
-
};
|
|
884
|
-
eventBus.publish(cancelledUpdate);
|
|
885
|
-
eventBus.finished();
|
|
886
|
-
// Clean up and exit.
|
|
887
|
-
this.cancelledTasks.delete(taskId);
|
|
888
|
-
return;
|
|
889
|
-
}
|
|
890
|
-
await sleep(500);
|
|
891
|
-
//log?.info(`[${this.Name}:AgentExecutor] Fetching events for correlation ID ${this.CorrelationId}`);
|
|
892
|
-
events = await this.getEvents();
|
|
893
|
-
if (events.length > processedEvents) {
|
|
894
|
-
events = events.slice(processedEvents); // get only new events
|
|
895
|
-
}
|
|
896
|
-
} while (events.length === 0);
|
|
897
|
-
const event = events[0];
|
|
898
|
-
if (lastevent.timestamp !== event.timestamp) {
|
|
899
|
-
//log?.debug(`[${this.Name}:AgentExecutor] New event: ${event.timestamp} Last Event: ${lastevent.timestamp} `);
|
|
900
|
-
lastevent = event;
|
|
901
|
-
if (lastevent.agentStatus === 'waiting') {
|
|
902
|
-
if (lastevent.tool.startsWith('mcp_')) {
|
|
903
|
-
//TODO: handle mcp tools
|
|
904
|
-
log?.info(`[${this.Name}:AgentExecutor] waiting for mcp tool ${lastevent.tool} to complete...`);
|
|
905
|
-
}
|
|
906
|
-
else if (lastevent.tool) {
|
|
907
|
-
log?.info(`[${this.Name}:AgentExecutor] toolcall: ${lastevent.tool}, ts:${lastevent.timestamp}, c:${processedEvents}\n`);
|
|
908
|
-
let workingStatusUpdate = {
|
|
909
|
-
kind: 'status-update',
|
|
910
|
-
taskId: taskId,
|
|
911
|
-
contextId: contextId,
|
|
912
|
-
status: {
|
|
913
|
-
state: 'working',
|
|
914
|
-
message: {
|
|
915
|
-
kind: 'message',
|
|
916
|
-
role: 'agent',
|
|
917
|
-
messageId: (0, uuid_1.v4)(),
|
|
918
|
-
parts: [
|
|
919
|
-
{
|
|
920
|
-
kind: 'text',
|
|
921
|
-
text: `invoking tool ${lastevent.tool}(${JSON.stringify(lastevent.toolInput.request_body)})...\n`,
|
|
922
|
-
},
|
|
923
|
-
],
|
|
924
|
-
taskId: taskId,
|
|
925
|
-
contextId: contextId,
|
|
926
|
-
metadata: {
|
|
927
|
-
data: lastevent.toolInput.request_body,
|
|
928
|
-
},
|
|
929
|
-
},
|
|
930
|
-
timestamp: new Date().toISOString(),
|
|
931
|
-
},
|
|
932
|
-
final: false,
|
|
933
|
-
};
|
|
934
|
-
eventBus.publish(workingStatusUpdate);
|
|
935
|
-
const res = await this.executeTool(lastevent.tool, lastevent.toolInput.request_body, log);
|
|
936
|
-
let statusMsg = `Tool ${lastevent.tool} executed `;
|
|
937
|
-
if (res.error) {
|
|
938
|
-
log?.error(`${res.error}`);
|
|
939
|
-
statusMsg += `with error: ${res.error.message || res.error.toString()}`;
|
|
940
|
-
}
|
|
941
|
-
else {
|
|
942
|
-
statusMsg += `successfully.`;
|
|
943
|
-
}
|
|
944
|
-
workingStatusUpdate = {
|
|
945
|
-
kind: 'status-update',
|
|
946
|
-
taskId: taskId,
|
|
947
|
-
contextId: contextId,
|
|
948
|
-
status: {
|
|
949
|
-
state: 'working',
|
|
950
|
-
message: {
|
|
951
|
-
kind: 'message',
|
|
952
|
-
role: 'agent',
|
|
953
|
-
messageId: (0, uuid_1.v4)(),
|
|
954
|
-
parts: [{ kind: 'text', text: statusMsg }],
|
|
955
|
-
taskId: taskId,
|
|
956
|
-
contextId: contextId,
|
|
957
|
-
},
|
|
958
|
-
timestamp: new Date().toISOString(),
|
|
959
|
-
},
|
|
960
|
-
final: false,
|
|
961
|
-
};
|
|
962
|
-
eventBus.publish(workingStatusUpdate);
|
|
963
|
-
}
|
|
964
|
-
}
|
|
965
|
-
else if (lastevent.agentStatus === 'pending') {
|
|
966
|
-
//log(`\n\n#### ${lastevent.agentStatus}:\n`);
|
|
967
|
-
}
|
|
968
|
-
else if (lastevent.agentStatus === 'in-progress') {
|
|
969
|
-
if (lastevent.tool === 'generate_plan_tool' &&
|
|
970
|
-
lastevent.toolOutput) {
|
|
971
|
-
log?.info('```log-Agent_Plan\n' + lastevent.toolOutput + '\n```');
|
|
972
|
-
}
|
|
973
|
-
else if (lastevent.message.indexOf('resume')) {
|
|
974
|
-
//log.info(`.`);
|
|
975
|
-
}
|
|
976
|
-
else
|
|
977
|
-
log?.info(`\n\n#### ${lastevent.message}:\n`);
|
|
978
|
-
}
|
|
979
|
-
else if (lastevent.agentStatus === 'completed') {
|
|
980
|
-
log?.info(`Agent Execution Completed`);
|
|
981
|
-
log?.info(`---`);
|
|
982
|
-
log?.done(JSON.stringify(lastevent.output, null, 2));
|
|
983
|
-
}
|
|
984
|
-
else {
|
|
985
|
-
log?.warn(`#### ${lastevent.agentStatus}`);
|
|
986
|
-
log?.warn('last event:', lastevent);
|
|
987
|
-
log?.error(`Agent execution failed: ${JSON.stringify(lastevent)}`);
|
|
988
|
-
log?.done(' Agent execution failed ');
|
|
989
|
-
}
|
|
990
|
-
processedEvents++;
|
|
991
|
-
}
|
|
992
|
-
} while (lastevent?.agentStatus !== 'failed' &&
|
|
993
|
-
lastevent?.agentStatus !== 'completed');
|
|
994
|
-
if (lastevent?.agentStatus === 'failed') {
|
|
995
|
-
const failureUpdate = {
|
|
996
|
-
kind: 'status-update',
|
|
997
|
-
taskId: taskId,
|
|
998
|
-
contextId: contextId,
|
|
999
|
-
status: {
|
|
1000
|
-
state: 'failed',
|
|
1001
|
-
message: {
|
|
1002
|
-
kind: 'message',
|
|
1003
|
-
role: 'agent',
|
|
1004
|
-
messageId: (0, uuid_1.v4)(),
|
|
1005
|
-
parts: [
|
|
1006
|
-
{
|
|
1007
|
-
kind: 'text',
|
|
1008
|
-
text: `Agent execution failed: ${lastevent?.message || ''}`,
|
|
1009
|
-
},
|
|
1010
|
-
],
|
|
1011
|
-
taskId: taskId,
|
|
1012
|
-
contextId: contextId,
|
|
1013
|
-
},
|
|
1014
|
-
timestamp: new Date().toISOString(),
|
|
1015
|
-
},
|
|
1016
|
-
final: true,
|
|
1017
|
-
};
|
|
1018
|
-
eventBus.publish(failureUpdate);
|
|
1019
|
-
}
|
|
1020
|
-
else if (lastevent?.agentStatus === 'completed') {
|
|
1021
|
-
const completedUpdate = {
|
|
1022
|
-
kind: 'status-update',
|
|
1023
|
-
taskId: taskId,
|
|
1024
|
-
contextId: contextId,
|
|
1025
|
-
status: {
|
|
1026
|
-
state: 'completed',
|
|
1027
|
-
message: {
|
|
1028
|
-
kind: 'message',
|
|
1029
|
-
role: 'agent',
|
|
1030
|
-
messageId: (0, uuid_1.v4)(),
|
|
1031
|
-
parts: [
|
|
1032
|
-
{ kind: 'text', text: lastevent.output.response },
|
|
1033
|
-
{ kind: 'data', data: lastevent.output },
|
|
1034
|
-
],
|
|
1035
|
-
taskId: taskId,
|
|
1036
|
-
contextId: contextId,
|
|
1037
|
-
},
|
|
1038
|
-
timestamp: new Date().toISOString(),
|
|
1039
|
-
},
|
|
1040
|
-
final: true,
|
|
1041
|
-
};
|
|
1042
|
-
eventBus.publish(completedUpdate);
|
|
1043
|
-
}
|
|
1044
|
-
return;
|
|
1045
|
-
}
|
|
1046
|
-
catch (error) {
|
|
1047
|
-
log?.error(`[${this.Name}:AgentExecutor] Error processing task ${taskId}:`, error);
|
|
1048
|
-
const errorUpdate = {
|
|
1049
|
-
kind: 'status-update',
|
|
1050
|
-
taskId: taskId,
|
|
1051
|
-
contextId: contextId,
|
|
1052
|
-
status: {
|
|
1053
|
-
state: 'failed',
|
|
1054
|
-
message: {
|
|
1055
|
-
kind: 'message',
|
|
1056
|
-
role: 'agent',
|
|
1057
|
-
messageId: (0, uuid_1.v4)(),
|
|
1058
|
-
parts: [
|
|
1059
|
-
{
|
|
1060
|
-
kind: 'text',
|
|
1061
|
-
text: `Error processing your message: ${error instanceof Error ? error.message : String(error)}`,
|
|
1062
|
-
},
|
|
1063
|
-
],
|
|
1064
|
-
taskId: taskId,
|
|
1065
|
-
contextId: contextId,
|
|
1066
|
-
},
|
|
1067
|
-
timestamp: new Date().toISOString(),
|
|
1068
|
-
},
|
|
1069
|
-
final: true,
|
|
1070
|
-
};
|
|
1071
|
-
eventBus.publish(errorUpdate);
|
|
1072
|
-
}
|
|
1073
|
-
}
|
|
1074
|
-
// Function to get the host IP address
|
|
1075
675
|
getHostIPAddress() {
|
|
1076
676
|
const interfaces = node_os_1.default.networkInterfaces();
|
|
1077
677
|
for (const interfaceName in interfaces) {
|
|
1078
678
|
for (const interfaceInfo of interfaces[interfaceName] || []) {
|
|
1079
|
-
if (interfaceInfo.family === 'IPv4' && !interfaceInfo.internal)
|
|
679
|
+
if (interfaceInfo.family === 'IPv4' && !interfaceInfo.internal)
|
|
1080
680
|
return interfaceInfo.address;
|
|
1081
|
-
}
|
|
1082
681
|
}
|
|
1083
682
|
}
|
|
1084
683
|
return 'localhost';
|
|
@@ -1096,11 +695,9 @@ class PSAgent {
|
|
|
1096
695
|
* @returns A2A Express app
|
|
1097
696
|
*/
|
|
1098
697
|
getA2AServer(taskStore = new server_1.InMemoryTaskStore()) {
|
|
1099
|
-
// Set up the server.
|
|
1100
698
|
const requestHandler = new server_1.DefaultRequestHandler(this.getAgentCard(), taskStore, this);
|
|
1101
699
|
const appBuilder = new express_1.A2AExpressApp(requestHandler);
|
|
1102
700
|
const expressApp = (0, express_2.default)();
|
|
1103
|
-
// Add CORS middleware
|
|
1104
701
|
expressApp.use([
|
|
1105
702
|
(0, cors_1.default)({
|
|
1106
703
|
origin: '*',
|
|
@@ -1117,20 +714,18 @@ class PSAgent {
|
|
|
1117
714
|
version: '0.0.1', // Incremented version
|
|
1118
715
|
protocolVersion: '0.3.0',
|
|
1119
716
|
name: this.Name,
|
|
1120
|
-
description: this.Description,
|
|
1121
|
-
//
|
|
1122
|
-
url: `http://${this.getHostIPAddress()}:${this.getPort()}/`,
|
|
717
|
+
description: this.Description, // Adjust the base URL and port in A2AExpressApp
|
|
718
|
+
url: `http://${this.getHostIPAddress()}:${this.getPort()}/`, // Added provider URL
|
|
1123
719
|
provider: {
|
|
1124
720
|
organization: 'PS',
|
|
1125
|
-
url: `https://${this.getHostIPAddress()}`,
|
|
721
|
+
url: `https://${this.getHostIPAddress()}`,
|
|
1126
722
|
},
|
|
1127
723
|
capabilities: {
|
|
1128
724
|
streaming: true, // The new framework supports streaming
|
|
1129
725
|
pushNotifications: false, // Assuming not implemented for this agent yet
|
|
1130
726
|
stateTransitionHistory: true, // Agent uses history
|
|
1131
727
|
},
|
|
1132
|
-
|
|
1133
|
-
securitySchemes: undefined, // Or define actual security schemes if any
|
|
728
|
+
securitySchemes: undefined,
|
|
1134
729
|
security: undefined,
|
|
1135
730
|
defaultInputModes: ['text'],
|
|
1136
731
|
defaultOutputModes: ['text', 'task-status'], // task-status is a common output mode
|
|
@@ -1158,44 +753,126 @@ class PSAgent {
|
|
|
1158
753
|
};
|
|
1159
754
|
}
|
|
1160
755
|
static FromConfigFile(config_path) {
|
|
1161
|
-
if (!node_fs_1.default.existsSync(config_path))
|
|
756
|
+
if (!node_fs_1.default.existsSync(config_path))
|
|
1162
757
|
throw new Error(`Config file ${config_path} does not exist`);
|
|
1163
|
-
}
|
|
1164
758
|
const ext = node_path_1.default.extname(config_path).toLowerCase();
|
|
1165
759
|
let configData;
|
|
1166
760
|
if (ext === '.json') {
|
|
1167
|
-
|
|
1168
|
-
configData = JSON.parse(fileContent);
|
|
761
|
+
configData = JSON.parse(node_fs_1.default.readFileSync(config_path, 'utf-8'));
|
|
1169
762
|
}
|
|
1170
763
|
else if (ext === '.yaml' || ext === '.yml') {
|
|
1171
|
-
|
|
1172
|
-
configData = yaml_1.default.parse(fileContent);
|
|
764
|
+
configData = yaml_1.default.parse(node_fs_1.default.readFileSync(config_path, 'utf-8'));
|
|
1173
765
|
}
|
|
1174
766
|
else {
|
|
1175
767
|
throw new Error('Unsupported config file format. Use JSON or YAML.');
|
|
1176
768
|
}
|
|
1177
|
-
|
|
1178
|
-
|
|
1179
|
-
for (const field of requiredFields) {
|
|
1180
|
-
if (!configData[field]) {
|
|
769
|
+
for (const field of ['name', 'description', 'instruction']) {
|
|
770
|
+
if (!configData[field])
|
|
1181
771
|
throw new Error(`Missing required field '${field}' in config file.`);
|
|
1182
|
-
}
|
|
1183
|
-
}
|
|
1184
|
-
// Convert tools and tasks if present
|
|
1185
|
-
if (configData.tools && Array.isArray(configData.tools)) {
|
|
1186
|
-
configData.tools = configData.tools.map((toolConfig) => new PSAgentTool_1.PSAgentTool(toolConfig));
|
|
1187
|
-
}
|
|
1188
|
-
else {
|
|
1189
|
-
configData.tools = [];
|
|
1190
|
-
}
|
|
1191
|
-
if (configData.tasks && Array.isArray(configData.tasks)) {
|
|
1192
|
-
configData.tasks = configData.tasks.map((taskConfig) => new PSAgentTask_1.PSAgentTask(taskConfig.name, taskConfig.description));
|
|
1193
|
-
}
|
|
1194
|
-
else {
|
|
1195
|
-
configData.tasks = [];
|
|
1196
772
|
}
|
|
773
|
+
configData.tools = Array.isArray(configData.tools)
|
|
774
|
+
? configData.tools.map((t) => new PSAgentTool_1.PSAgentTool(t))
|
|
775
|
+
: [];
|
|
776
|
+
configData.tasks = Array.isArray(configData.tasks)
|
|
777
|
+
? configData.tasks.map((t) => new PSAgentTask_1.PSAgentTask(t.name, t.description))
|
|
778
|
+
: [];
|
|
1197
779
|
return new PSAgent(configData);
|
|
1198
780
|
}
|
|
781
|
+
// ─── Local Agent API ──────────────────────────────────────────────────────────
|
|
782
|
+
// this.localCoreAgent is the agent-core Agent, set only when local: true.
|
|
783
|
+
// Methods guard with _assertLocal(), then talk to this.localCoreAgent directly.
|
|
784
|
+
_assertLocal(method) {
|
|
785
|
+
if (!this.localCoreAgent)
|
|
786
|
+
throw new Error(`PSAgent.${method}() is only available when config.local === true. ` +
|
|
787
|
+
`Pass { local: true } to the PSAgent constructor to enable local mode.`);
|
|
788
|
+
}
|
|
789
|
+
/** The underlying agent-core Agent. Only set when local: true. */
|
|
790
|
+
get localAgent() {
|
|
791
|
+
return this.localCoreAgent;
|
|
792
|
+
}
|
|
793
|
+
/** Prompt the local Agent. @throws if not in local mode. */
|
|
794
|
+
async prompt(input, images) {
|
|
795
|
+
this._assertLocal('prompt');
|
|
796
|
+
if (typeof input === 'string')
|
|
797
|
+
return this.localCoreAgent.prompt(input, images);
|
|
798
|
+
return this.localCoreAgent.prompt(input);
|
|
799
|
+
}
|
|
800
|
+
/** Continue from the current transcript. @throws if not in local mode. */
|
|
801
|
+
async continueLocal() {
|
|
802
|
+
this._assertLocal('continueLocal');
|
|
803
|
+
return this.localCoreAgent.continue();
|
|
804
|
+
}
|
|
805
|
+
/** Abort the in-flight run. @throws if not in local mode. */
|
|
806
|
+
abortLocal() {
|
|
807
|
+
this._assertLocal('abortLocal');
|
|
808
|
+
this.localCoreAgent.abort();
|
|
809
|
+
}
|
|
810
|
+
/** Resolve when the current run settles. @throws if not in local mode. */
|
|
811
|
+
waitForLocalIdle() {
|
|
812
|
+
this._assertLocal('waitForLocalIdle');
|
|
813
|
+
return this.localCoreAgent.waitForIdle();
|
|
814
|
+
}
|
|
815
|
+
/** Reset the transcript and queues. @throws if not in local mode. */
|
|
816
|
+
resetLocal() {
|
|
817
|
+
this._assertLocal('resetLocal');
|
|
818
|
+
this.localCoreAgent.reset();
|
|
819
|
+
}
|
|
820
|
+
/** Queue a steering message. @throws if not in local mode. */
|
|
821
|
+
steerLocal(message) {
|
|
822
|
+
this._assertLocal('steerLocal');
|
|
823
|
+
this.localCoreAgent.steer(message);
|
|
824
|
+
}
|
|
825
|
+
/** Queue a follow-up message. @throws if not in local mode. */
|
|
826
|
+
followUpLocal(message) {
|
|
827
|
+
this._assertLocal('followUpLocal');
|
|
828
|
+
this.localCoreAgent.followUp(message);
|
|
829
|
+
}
|
|
830
|
+
/** Subscribe to lifecycle events. @throws if not in local mode. */
|
|
831
|
+
subscribeLocal(listener) {
|
|
832
|
+
this._assertLocal('subscribeLocal');
|
|
833
|
+
return this.localCoreAgent.subscribe(listener);
|
|
834
|
+
}
|
|
835
|
+
// ── Local state accessors ─────────────────────────────────────────────────────
|
|
836
|
+
/** Read-only view of the current agent state. Only set when local: true. */
|
|
837
|
+
get localState() {
|
|
838
|
+
return this.localCoreAgent?.state;
|
|
839
|
+
}
|
|
840
|
+
set localSteeringMode(mode) {
|
|
841
|
+
this._assertLocal('localSteeringMode');
|
|
842
|
+
this.localCoreAgent.steeringMode = mode;
|
|
843
|
+
}
|
|
844
|
+
get localSteeringMode() {
|
|
845
|
+
return this.localCoreAgent?.steeringMode;
|
|
846
|
+
}
|
|
847
|
+
set localFollowUpMode(mode) {
|
|
848
|
+
this._assertLocal('localFollowUpMode');
|
|
849
|
+
this.localCoreAgent.followUpMode = mode;
|
|
850
|
+
}
|
|
851
|
+
get localFollowUpMode() {
|
|
852
|
+
return this.localCoreAgent?.followUpMode;
|
|
853
|
+
}
|
|
854
|
+
// ─── A2A execute override: route by local flag ────────────────────────────────
|
|
855
|
+
/**
|
|
856
|
+
* A2A AgentExecutor entry point.
|
|
857
|
+
*
|
|
858
|
+
* When `config.local === true` the call is routed to the local support module.
|
|
859
|
+
* Otherwise the original remote platform path is used.
|
|
860
|
+
*/
|
|
861
|
+
async execute(requestContext, eventBus) {
|
|
862
|
+
if (this.localCoreAgent) {
|
|
863
|
+
// Rebuild with current tool list so dynamically added tools are included.
|
|
864
|
+
this.localCoreAgent = (0, localAgent_1.buildLocalAgent)(this.config, (s) => this.getBaseUrl(s), () => this.Tools, this.log);
|
|
865
|
+
return (0, localAgent_1.executeLocalAgent)(this.localCoreAgent, requestContext, eventBus, this.cancelledTasks, this.config.name, this.log);
|
|
866
|
+
}
|
|
867
|
+
return (0, remoteAgent_1.executeRemoteAgent)({
|
|
868
|
+
name: this.Name,
|
|
869
|
+
log: this.log,
|
|
870
|
+
cancelledTasks: this.cancelledTasks,
|
|
871
|
+
start: (input, messages, log) => this.start(input, messages, log),
|
|
872
|
+
getEvents: () => this.getEvents(),
|
|
873
|
+
executeTool: (toolName, input, log) => this.executeTool(toolName, input, log),
|
|
874
|
+
}, requestContext, eventBus);
|
|
875
|
+
}
|
|
1199
876
|
}
|
|
1200
877
|
exports.PSAgent = PSAgent;
|
|
1201
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUFNBZ2VudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvUFNBZ2VudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFpREEsc0JBRUM7QUFuREQsdURBQXVEO0FBQ3ZELHNEQUF5QjtBQUN6QixzREFBeUI7QUFDekIsMERBQTZCO0FBUTdCLCtDQU80QjtBQUM1Qix3REFBMkQ7QUFDM0QsZ0RBQXdCO0FBQ3hCLHNEQUE4QjtBQUM5Qiw4REFBcUM7QUFDckMsK0JBQW9DLENBQUMsNEJBQTRCO0FBQ2pFLGdEQUF3QjtBQUN4QiwrQkFBMkI7QUFLM0IsK0NBQTRDO0FBQzVDLCtDQUFnRTtBQUNoRSwyREFBd0Q7QUFDeEQsdURBQXFEO0FBQ3JELHNFQUE4QztBQUM5Qyw2Q0FBdUQ7QUFTdkQsTUFBTSxJQUFJLEdBQUcsSUFBQSxxQkFBVyxFQUFDLGVBQWUsQ0FBQyxDQUFDO0FBRTFDLHVFQUF1RTtBQUN2RSxNQUFNLEtBQUssR0FBRyxJQUFBLHFCQUFVLEVBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBRWhDLEtBQUssVUFBVSxLQUFLLENBQUMsRUFBVTtJQUNwQyxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDM0QsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EwQ0c7QUFDSCxNQUFhLE9BQU87SUFDbEIsTUFBTSxDQUFnQjtJQUNkLEtBQUssR0FBa0IsRUFBRSxDQUFDO0lBQzFCLEtBQUssR0FBa0IsRUFBRSxDQUFDO0lBQzFCLE9BQU8sQ0FBVTtJQUNqQixhQUFhLENBQVU7SUFDZCxHQUFHLENBQWlCO0lBQzdCLFdBQVcsQ0FBZTtJQUUxQixjQUFjLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztJQUVwQyxVQUFVLEdBQUcsS0FBSyxFQUN2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
|
|
878
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUFNBZ2VudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvUFNBZ2VudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUF5REEsc0JBRUM7QUEzREQsc0RBQXlCO0FBQ3pCLHNEQUF5QjtBQUN6QiwwREFBNkI7QUFHN0IsK0NBTzRCO0FBQzVCLHdEQUEyRDtBQUUzRCxnREFBd0I7QUFDeEIsc0RBQThCO0FBQzlCLDhEQUFxQztBQUNyQyxnREFBd0I7QUFDeEIsK0JBQTJCO0FBTzNCLCtDQUE0QztBQUM1QywrQ0FBZ0U7QUFRaEUsNkNBQWtFO0FBQ2xFLCtDQUFtRDtBQUNuRCwyREFBd0Q7QUFDeEQsdURBQXFEO0FBQ3JELHNFQUE4QztBQUM5Qyw2Q0FBdUQ7QUFhdkQsTUFBTSxJQUFJLEdBQUcsSUFBQSxxQkFBVyxFQUFDLGVBQWUsQ0FBQyxDQUFDO0FBQzFDLHVFQUF1RTtBQUN2RSxNQUFNLEtBQUssR0FBRyxJQUFBLHFCQUFVLEVBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBRWhDLEtBQUssVUFBVSxLQUFLLENBQUMsRUFBVTtJQUNwQyxPQUFPLElBQUksT0FBTyxDQUFPLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDakUsQ0FBQztBQUVELG9GQUFvRjtBQUVwRjs7O0dBR0c7QUFDSCxTQUFTLGFBQWEsQ0FDcEIsTUFBOEI7SUFFOUIsT0FBUSxNQUE2QixDQUFDLEtBQUssS0FBSyxJQUFJLENBQUM7QUFDdkQsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EwQ0c7QUFFSCxNQUFhLE9BQU87SUFDbEIsTUFBTSxDQUF5QjtJQUN2QixLQUFLLEdBQWtCLEVBQUUsQ0FBQztJQUMxQixLQUFLLEdBQWtCLEVBQUUsQ0FBQztJQUMxQixPQUFPLENBQVU7SUFDakIsYUFBYSxDQUFV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
|