@relevanceai/sdk 3.0.0-alpha.4 → 3.0.0-alpha.5
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 +195 -100
- package/esm/agent.d.ts +41 -8
- package/esm/agent.js +150 -13
- package/esm/client.d.ts +6 -1
- package/esm/client.js +38 -4
- package/esm/event.d.ts +6 -25
- package/esm/event.js +4 -19
- package/esm/key.d.ts +1 -1
- package/esm/message/agent-error.d.ts +7 -2
- package/esm/message/agent-error.js +8 -2
- package/esm/message/agent.d.ts +2 -2
- package/esm/message/agent.js +2 -2
- package/esm/message/task.d.ts +25 -4
- package/esm/message/task.js +26 -2
- package/esm/message/tool.d.ts +16 -6
- package/esm/message/tool.js +32 -6
- package/esm/message/user.d.ts +2 -2
- package/esm/message/user.js +2 -2
- package/esm/message/workforce-agent-handover.d.ts +23 -0
- package/esm/message/workforce-agent-handover.js +3 -0
- package/esm/message/workforce-agent.d.ts +23 -0
- package/esm/message/workforce-agent.js +3 -0
- package/esm/mod.d.ts +1 -6
- package/esm/mod.js +1 -1
- package/esm/task/agent-strategy.d.ts +26 -0
- package/esm/task/agent-strategy.js +63 -0
- package/esm/task/task.d.ts +59 -0
- package/esm/task/task.js +166 -0
- package/esm/task/workforce-strategy.d.ts +17 -0
- package/esm/task/workforce-strategy.js +68 -0
- package/esm/utils.d.ts +1 -0
- package/esm/utils.js +4 -0
- package/esm/workforce.d.ts +22 -0
- package/esm/workforce.js +50 -0
- package/package.json +1 -1
- package/script/agent.d.ts +41 -8
- package/script/agent.js +151 -13
- package/script/client.d.ts +6 -1
- package/script/client.js +37 -3
- package/script/event.d.ts +6 -25
- package/script/event.js +6 -23
- package/script/key.d.ts +1 -1
- package/script/message/agent-error.d.ts +7 -2
- package/script/message/agent-error.js +7 -1
- package/script/message/agent.d.ts +2 -2
- package/script/message/agent.js +1 -1
- package/script/message/task.d.ts +25 -4
- package/script/message/task.js +28 -4
- package/script/message/tool.d.ts +16 -6
- package/script/message/tool.js +31 -5
- package/script/message/user.d.ts +2 -2
- package/script/message/user.js +1 -1
- package/script/message/workforce-agent-handover.d.ts +23 -0
- package/script/message/workforce-agent-handover.js +7 -0
- package/script/message/workforce-agent.d.ts +23 -0
- package/script/message/workforce-agent.js +7 -0
- package/script/mod.d.ts +1 -6
- package/script/mod.js +3 -3
- package/script/task/agent-strategy.d.ts +26 -0
- package/script/task/agent-strategy.js +67 -0
- package/script/task/task.d.ts +59 -0
- package/script/task/task.js +170 -0
- package/script/task/workforce-strategy.d.ts +17 -0
- package/script/task/workforce-strategy.js +72 -0
- package/script/utils.d.ts +1 -0
- package/script/utils.js +5 -0
- package/script/workforce.d.ts +22 -0
- package/script/workforce.js +54 -0
- package/esm/task.d.ts +0 -57
- package/esm/task.js +0 -259
- package/script/task.d.ts +0 -57
- package/script/task.js +0 -263
package/script/agent.js
CHANGED
|
@@ -1,13 +1,98 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.Agent = void 0;
|
|
4
|
+
exports.stateToStatus = stateToStatus;
|
|
4
5
|
const client_js_1 = require("./client.js");
|
|
5
|
-
const task_js_1 = require("./task.js");
|
|
6
6
|
const utils_js_1 = require("./utils.js");
|
|
7
|
+
const agent_strategy_js_1 = require("./task/agent-strategy.js");
|
|
8
|
+
const task_js_1 = require("./task/task.js");
|
|
9
|
+
/**
|
|
10
|
+
* Converts an AgentTaskState to a simplified TaskStatus.
|
|
11
|
+
*
|
|
12
|
+
* @dev
|
|
13
|
+
* We want to simplify because our states are simplified in the UI and also
|
|
14
|
+
* some states have combined reasoning that the consumer does not need to care
|
|
15
|
+
* about. i.e. "queued-for-approval" "queued-for-rerun" should just be "queued".
|
|
16
|
+
*
|
|
17
|
+
* @param {AgentTaskState} state The agent task state to convert.
|
|
18
|
+
* @returns {TaskStatus} The simplified task status.
|
|
19
|
+
*/
|
|
20
|
+
function stateToStatus(state) {
|
|
21
|
+
switch (state) {
|
|
22
|
+
case "paused":
|
|
23
|
+
return "paused";
|
|
24
|
+
case "idle":
|
|
25
|
+
return "idle";
|
|
26
|
+
case "starting-up":
|
|
27
|
+
case "waiting-for-capacity":
|
|
28
|
+
case "queued-for-approval":
|
|
29
|
+
case "queued-for-rerun":
|
|
30
|
+
return "queued";
|
|
31
|
+
case "running":
|
|
32
|
+
return "running";
|
|
33
|
+
case "pending-approval":
|
|
34
|
+
case "escalated":
|
|
35
|
+
return "action";
|
|
36
|
+
case "timed-out":
|
|
37
|
+
return "error";
|
|
38
|
+
case "cancelled":
|
|
39
|
+
return "cancelled";
|
|
40
|
+
case "completed":
|
|
41
|
+
return "completed";
|
|
42
|
+
case "unrecoverable":
|
|
43
|
+
case "errored-pending-approval":
|
|
44
|
+
return "error";
|
|
45
|
+
default:
|
|
46
|
+
throw new Error(`unhandled task state: ${state}`);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Reverses {@link stateToStatus} returning the group of task states a _simplified_
|
|
51
|
+
* status may relate to.
|
|
52
|
+
*
|
|
53
|
+
* @see {stateToStatus}
|
|
54
|
+
* @param {TaskStatus} status
|
|
55
|
+
* @returns {AgentTaskState[]}
|
|
56
|
+
*/
|
|
57
|
+
function statusToStates(status) {
|
|
58
|
+
switch (status) {
|
|
59
|
+
case "not-started":
|
|
60
|
+
// a special sdk-only status
|
|
61
|
+
return [];
|
|
62
|
+
case "idle":
|
|
63
|
+
return ["idle"];
|
|
64
|
+
case "paused":
|
|
65
|
+
return ["paused"];
|
|
66
|
+
case "queued":
|
|
67
|
+
return [
|
|
68
|
+
"starting-up",
|
|
69
|
+
"waiting-for-capacity",
|
|
70
|
+
"queued-for-approval",
|
|
71
|
+
"queued-for-rerun",
|
|
72
|
+
];
|
|
73
|
+
case "running":
|
|
74
|
+
return ["running"];
|
|
75
|
+
case "action":
|
|
76
|
+
return ["pending-approval", "escalated"];
|
|
77
|
+
case "completed":
|
|
78
|
+
return ["completed"];
|
|
79
|
+
case "cancelled":
|
|
80
|
+
return ["cancelled"];
|
|
81
|
+
case "error":
|
|
82
|
+
return ["errored-pending-approval", "timed-out", "unrecoverable"];
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
function sortOptionsToParam(sort) {
|
|
86
|
+
if ("createdAt" in sort) {
|
|
87
|
+
return { insert_date: sort.createdAt };
|
|
88
|
+
}
|
|
89
|
+
else if ("updatedAt" in sort) {
|
|
90
|
+
return { update_date: sort.updatedAt };
|
|
91
|
+
}
|
|
92
|
+
throw new Error("invalid sort option");
|
|
93
|
+
}
|
|
7
94
|
const taskPrefixDelimiter = "_-_";
|
|
8
95
|
class Agent {
|
|
9
|
-
#config;
|
|
10
|
-
client;
|
|
11
96
|
static async get(id, client = client_js_1.Client.default()) {
|
|
12
97
|
const config = await Agent.#fetchConfig(id, client);
|
|
13
98
|
return new Agent(config, client);
|
|
@@ -15,6 +100,8 @@ class Agent {
|
|
|
15
100
|
static #fetchConfig(agentId, client = client_js_1.Client.default()) {
|
|
16
101
|
return client.fetch(`/agents/${agentId}/get`).then(({ agent }) => agent);
|
|
17
102
|
}
|
|
103
|
+
#config;
|
|
104
|
+
client;
|
|
18
105
|
constructor(config, client) {
|
|
19
106
|
this.client = client;
|
|
20
107
|
this.#config = config;
|
|
@@ -22,6 +109,12 @@ class Agent {
|
|
|
22
109
|
get id() {
|
|
23
110
|
return this.#config.agent_id;
|
|
24
111
|
}
|
|
112
|
+
get region() {
|
|
113
|
+
return this.client.region;
|
|
114
|
+
}
|
|
115
|
+
get project() {
|
|
116
|
+
return this.client.project;
|
|
117
|
+
}
|
|
25
118
|
get name() {
|
|
26
119
|
return this.#config.name;
|
|
27
120
|
}
|
|
@@ -37,16 +130,54 @@ class Agent {
|
|
|
37
130
|
get updatedAt() {
|
|
38
131
|
return new Date(this.#config.update_date_);
|
|
39
132
|
}
|
|
40
|
-
get region() {
|
|
41
|
-
return this.client.region;
|
|
42
|
-
}
|
|
43
|
-
get project() {
|
|
44
|
-
return this.client.project;
|
|
45
|
-
}
|
|
46
133
|
getTask(taskId) {
|
|
47
|
-
return
|
|
134
|
+
return agent_strategy_js_1.AgentStrategy.get(taskId, this, this.client);
|
|
135
|
+
}
|
|
136
|
+
async getTasks({ sort = { createdAt: "asc" }, pageSize = 100, page = 1, search, filter, } = {}) {
|
|
137
|
+
const filtersParam = [{
|
|
138
|
+
condition: "==",
|
|
139
|
+
condition_value: [this.id],
|
|
140
|
+
field: "conversation.agent_id",
|
|
141
|
+
filter_type: "exact_match",
|
|
142
|
+
}];
|
|
143
|
+
if (filter) {
|
|
144
|
+
for (const [field, value] of Object.entries(filter)) {
|
|
145
|
+
switch (field) {
|
|
146
|
+
case "status":
|
|
147
|
+
filtersParam.push({
|
|
148
|
+
condition: "==",
|
|
149
|
+
condition_value: value.flatMap((s) => statusToStates(s)),
|
|
150
|
+
field: "conversation.state",
|
|
151
|
+
filter_type: "exact_match",
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
const sortParam = sortOptionsToParam(sort);
|
|
157
|
+
const query = new URLSearchParams([
|
|
158
|
+
["filters", JSON.stringify(filtersParam)],
|
|
159
|
+
["sort", JSON.stringify([sortParam])],
|
|
160
|
+
["page_size", pageSize.toString()],
|
|
161
|
+
["page", page.toString()],
|
|
162
|
+
]);
|
|
163
|
+
if (search?.trim()) {
|
|
164
|
+
query.set("query", search.trim());
|
|
165
|
+
}
|
|
166
|
+
const { results } = await this.client.fetch(`/agents/conversations/list?${query.toString()}`);
|
|
167
|
+
return results.map(({ metadata }) => new task_js_1.Task({
|
|
168
|
+
id: metadata.knowledge_set,
|
|
169
|
+
region: this.client.region,
|
|
170
|
+
project: this.client.project,
|
|
171
|
+
name: metadata.conversation.title,
|
|
172
|
+
status: stateToStatus(metadata.conversation.state),
|
|
173
|
+
createdAt: new Date(metadata.insert_date),
|
|
174
|
+
updatedAt: new Date(metadata.update_date),
|
|
175
|
+
}, new agent_strategy_js_1.AgentStrategy(metadata.knowledge_set, this, this.client)));
|
|
48
176
|
}
|
|
49
|
-
async sendMessage(message,
|
|
177
|
+
async sendMessage(message, attachOrTask, maybeTask) {
|
|
178
|
+
const hasAttachments = Array.isArray(attachOrTask);
|
|
179
|
+
const attachFiles = hasAttachments ? attachOrTask : [];
|
|
180
|
+
const task = hasAttachments ? maybeTask : attachOrTask;
|
|
50
181
|
let taskId;
|
|
51
182
|
// embed keys require a task prefixing for new tasks
|
|
52
183
|
if (!task && this.client.isEmbedKey()) {
|
|
@@ -55,6 +186,10 @@ class Agent {
|
|
|
55
186
|
else if (task) {
|
|
56
187
|
taskId = task.id;
|
|
57
188
|
}
|
|
189
|
+
const attachments = [];
|
|
190
|
+
for (const item of attachFiles) {
|
|
191
|
+
attachments.push(item instanceof File ? await this.client.uploadTempFile(item) : item);
|
|
192
|
+
}
|
|
58
193
|
const res = await this.client.fetch("/agents/trigger", {
|
|
59
194
|
method: "POST",
|
|
60
195
|
body: JSON.stringify({
|
|
@@ -63,12 +198,15 @@ class Agent {
|
|
|
63
198
|
message: {
|
|
64
199
|
role: "user",
|
|
65
200
|
content: message,
|
|
66
|
-
attachments:
|
|
201
|
+
attachments: attachments.map(({ fileName, fileUrl }) => ({
|
|
202
|
+
file_name: fileName,
|
|
203
|
+
file_url: fileUrl,
|
|
204
|
+
})),
|
|
67
205
|
},
|
|
68
206
|
}),
|
|
69
207
|
});
|
|
70
208
|
if (task) {
|
|
71
|
-
task[task_js_1.
|
|
209
|
+
task[task_js_1.resetBackoffDuration]();
|
|
72
210
|
}
|
|
73
211
|
return task ?? this.getTask(res.conversation_id);
|
|
74
212
|
}
|
package/script/client.d.ts
CHANGED
|
@@ -5,6 +5,10 @@ type CreateClientOptions = {
|
|
|
5
5
|
region: Region;
|
|
6
6
|
project: string;
|
|
7
7
|
};
|
|
8
|
+
export type Attachment = {
|
|
9
|
+
fileName: string;
|
|
10
|
+
fileUrl: string;
|
|
11
|
+
};
|
|
8
12
|
/**
|
|
9
13
|
* Creates and returns the _default_ client instance.
|
|
10
14
|
*
|
|
@@ -26,7 +30,8 @@ export declare class Client {
|
|
|
26
30
|
get region(): Region;
|
|
27
31
|
get project(): string;
|
|
28
32
|
isEmbedKey(): boolean;
|
|
29
|
-
fetch<T>(input: "/agents/trigger" | `/agents/${string}/get` | `/agents/${string}/tasks/${string}/metadata` | `/agents/${string}/tasks/${string}/view` | "/agents/conversations/list", init?: RequestInit): Promise<T>;
|
|
33
|
+
fetch<T>(input: "/agents/trigger" | `/agents/${string}/get` | `/agents/${string}/tasks/${string}/metadata` | `/agents/${string}/tasks/${string}/view` | "/agents/conversations/list" | "/services/get_temporary_file_upload_url" | `/workforce/items/${string}` | `/workforce/tasks/${string}/metadata` | `/workforce/items/${string}/tasks/${string}/messages` | "/workforce/trigger", init?: RequestInit): Promise<T>;
|
|
30
34
|
url(path: string): URL;
|
|
35
|
+
uploadTempFile(file: File): Promise<Attachment>;
|
|
31
36
|
}
|
|
32
37
|
export {};
|
package/script/client.js
CHANGED
|
@@ -54,11 +54,16 @@ class Client {
|
|
|
54
54
|
}
|
|
55
55
|
async fetch(input, init) {
|
|
56
56
|
const url = this.url(input);
|
|
57
|
-
const
|
|
58
|
-
|
|
57
|
+
const reqInit = Object.assign({}, init, {
|
|
58
|
+
headers: {
|
|
59
|
+
...this.key.fetchHeaders(),
|
|
60
|
+
...init?.headers,
|
|
61
|
+
},
|
|
62
|
+
});
|
|
63
|
+
const response = await fetch(url, reqInit);
|
|
59
64
|
if (!response.ok) {
|
|
60
65
|
const body = await response.text();
|
|
61
|
-
console.error(
|
|
66
|
+
console.error("client#fetch(): request failed.", url, body, reqInit);
|
|
62
67
|
throw new Error(response.statusText);
|
|
63
68
|
}
|
|
64
69
|
return response.json();
|
|
@@ -69,5 +74,34 @@ class Client {
|
|
|
69
74
|
}
|
|
70
75
|
return new URL((0, utils_js_1.cleanPath)(path), this.baseURL);
|
|
71
76
|
}
|
|
77
|
+
async uploadTempFile(file) {
|
|
78
|
+
const { upload_url: uploadUrl, download_url: downloadUrl } = await this
|
|
79
|
+
.fetch("/services/get_temporary_file_upload_url", {
|
|
80
|
+
method: "POST",
|
|
81
|
+
body: JSON.stringify({
|
|
82
|
+
filename: file.name,
|
|
83
|
+
extension: (0, utils_js_1.getFileExtension)(file.name),
|
|
84
|
+
}),
|
|
85
|
+
});
|
|
86
|
+
let content = file.type;
|
|
87
|
+
if (file.type.startsWith("text/")) {
|
|
88
|
+
content += "; charset=utf-8"; // force utf-8 for text files
|
|
89
|
+
}
|
|
90
|
+
const response = await fetch(uploadUrl, {
|
|
91
|
+
method: "PUT",
|
|
92
|
+
body: file,
|
|
93
|
+
headers: {
|
|
94
|
+
"content-type": content,
|
|
95
|
+
"x-amz-tagging": "Expire=true",
|
|
96
|
+
},
|
|
97
|
+
});
|
|
98
|
+
if (!response.ok) {
|
|
99
|
+
throw new Error(response.statusText);
|
|
100
|
+
}
|
|
101
|
+
return {
|
|
102
|
+
fileName: file.name,
|
|
103
|
+
fileUrl: downloadUrl,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
72
106
|
}
|
|
73
107
|
exports.Client = Client;
|
package/script/event.d.ts
CHANGED
|
@@ -1,33 +1,14 @@
|
|
|
1
1
|
import type { AgentErrorMessage } from "./message/agent-error.js";
|
|
2
|
-
import type {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
export declare class TaskStartEvent extends CustomEvent<{
|
|
7
|
-
id: string;
|
|
8
|
-
status: TaskStatus;
|
|
9
|
-
}> {
|
|
10
|
-
readonly type = "start";
|
|
11
|
-
constructor(id: string, status: TaskStatus);
|
|
12
|
-
}
|
|
13
|
-
export declare class TaskStatusEvent extends CustomEvent<{
|
|
14
|
-
status: TaskStatus;
|
|
15
|
-
}> {
|
|
16
|
-
readonly type = "status";
|
|
17
|
-
constructor(status: TaskStatus);
|
|
2
|
+
import type { AnyTaskMessage } from "./message/task.js";
|
|
3
|
+
export declare class TaskUpdatedEvent extends CustomEvent<void> {
|
|
4
|
+
readonly type = "update";
|
|
5
|
+
constructor();
|
|
18
6
|
}
|
|
19
7
|
export declare class TaskMessageEvent extends CustomEvent<{
|
|
20
|
-
message:
|
|
8
|
+
message: AnyTaskMessage;
|
|
21
9
|
}> {
|
|
22
10
|
readonly type = "message";
|
|
23
|
-
constructor(message:
|
|
24
|
-
isUserMessage(): boolean;
|
|
25
|
-
}
|
|
26
|
-
export declare class TaskUpdateEvent extends CustomEvent<{
|
|
27
|
-
message: ToolMessage;
|
|
28
|
-
}> {
|
|
29
|
-
readonly type = "update";
|
|
30
|
-
constructor(message: ToolMessage);
|
|
11
|
+
constructor(message: AnyTaskMessage);
|
|
31
12
|
}
|
|
32
13
|
export declare class TaskErrorEvent extends CustomEvent<{
|
|
33
14
|
message: AgentErrorMessage;
|
package/script/event.js
CHANGED
|
@@ -1,37 +1,20 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.TaskErrorEvent = exports.
|
|
4
|
-
class
|
|
5
|
-
type = "
|
|
6
|
-
constructor(
|
|
7
|
-
super("
|
|
8
|
-
}
|
|
9
|
-
}
|
|
10
|
-
exports.TaskStartEvent = TaskStartEvent;
|
|
11
|
-
class TaskStatusEvent extends CustomEvent {
|
|
12
|
-
type = "status";
|
|
13
|
-
constructor(status) {
|
|
14
|
-
super("status", { detail: { status } });
|
|
3
|
+
exports.TaskErrorEvent = exports.TaskMessageEvent = exports.TaskUpdatedEvent = void 0;
|
|
4
|
+
class TaskUpdatedEvent extends CustomEvent {
|
|
5
|
+
type = "update";
|
|
6
|
+
constructor() {
|
|
7
|
+
super("update");
|
|
15
8
|
}
|
|
16
9
|
}
|
|
17
|
-
exports.
|
|
10
|
+
exports.TaskUpdatedEvent = TaskUpdatedEvent;
|
|
18
11
|
class TaskMessageEvent extends CustomEvent {
|
|
19
12
|
type = "message";
|
|
20
13
|
constructor(message) {
|
|
21
14
|
super("message", { detail: { message } });
|
|
22
15
|
}
|
|
23
|
-
isUserMessage() {
|
|
24
|
-
return this.detail.message.type === "user-message";
|
|
25
|
-
}
|
|
26
16
|
}
|
|
27
17
|
exports.TaskMessageEvent = TaskMessageEvent;
|
|
28
|
-
class TaskUpdateEvent extends CustomEvent {
|
|
29
|
-
type = "update";
|
|
30
|
-
constructor(message) {
|
|
31
|
-
super("update", { detail: { message } });
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
exports.TaskUpdateEvent = TaskUpdateEvent;
|
|
35
18
|
class TaskErrorEvent extends CustomEvent {
|
|
36
19
|
type = "error";
|
|
37
20
|
constructor(message) {
|
package/script/key.d.ts
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { GenericMessage } from "./task.js";
|
|
2
2
|
export interface AgentErrorMessageContent {
|
|
3
3
|
type: "agent-error";
|
|
4
|
+
errors: {
|
|
5
|
+
body: string;
|
|
6
|
+
}[];
|
|
4
7
|
}
|
|
5
|
-
export declare class AgentErrorMessage extends
|
|
8
|
+
export declare class AgentErrorMessage extends GenericMessage<AgentErrorMessageContent> {
|
|
9
|
+
get errors(): string[];
|
|
10
|
+
get lastError(): string;
|
|
6
11
|
}
|
|
@@ -2,6 +2,12 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.AgentErrorMessage = void 0;
|
|
4
4
|
const task_js_1 = require("./task.js");
|
|
5
|
-
class AgentErrorMessage extends task_js_1.
|
|
5
|
+
class AgentErrorMessage extends task_js_1.GenericMessage {
|
|
6
|
+
get errors() {
|
|
7
|
+
return this.message.content.errors.map((e) => e.body);
|
|
8
|
+
}
|
|
9
|
+
get lastError() {
|
|
10
|
+
return this.errors.at(-1);
|
|
11
|
+
}
|
|
6
12
|
}
|
|
7
13
|
exports.AgentErrorMessage = AgentErrorMessage;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { GenericMessage } from "./task.js";
|
|
2
2
|
export interface AgentMessageContent {
|
|
3
3
|
type: "agent-message";
|
|
4
4
|
text: string;
|
|
5
5
|
}
|
|
6
|
-
export declare class AgentMessage extends
|
|
6
|
+
export declare class AgentMessage extends GenericMessage<AgentMessageContent> {
|
|
7
7
|
get text(): string;
|
|
8
8
|
get agentId(): string;
|
|
9
9
|
}
|
package/script/message/agent.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.AgentMessage = void 0;
|
|
4
4
|
const task_js_1 = require("./task.js");
|
|
5
|
-
class AgentMessage extends task_js_1.
|
|
5
|
+
class AgentMessage extends task_js_1.GenericMessage {
|
|
6
6
|
get text() {
|
|
7
7
|
return this.message.content.text;
|
|
8
8
|
}
|
package/script/message/task.d.ts
CHANGED
|
@@ -2,7 +2,10 @@ import type { AgentMessage } from "./agent.js";
|
|
|
2
2
|
import type { AgentErrorMessage } from "./agent-error.js";
|
|
3
3
|
import type { ToolMessage } from "./tool.js";
|
|
4
4
|
import type { UserMessage } from "./user.js";
|
|
5
|
-
|
|
5
|
+
import type { WorkforceAgentMessage } from "./workforce-agent.js";
|
|
6
|
+
import type { WorkforceAgentHandoverMessage } from "./workforce-agent-handover.js";
|
|
7
|
+
export type AnyTaskMessage = AgentMessage | AgentErrorMessage | ToolMessage | UserMessage | WorkforceAgentMessage | WorkforceAgentHandoverMessage;
|
|
8
|
+
export type TaskMessageType = AnyTaskMessage["type"];
|
|
6
9
|
interface MessageContent {
|
|
7
10
|
type: AnyTaskMessage["type"];
|
|
8
11
|
}
|
|
@@ -11,13 +14,13 @@ export interface TaskMessageData<C extends MessageContent = MessageContent> {
|
|
|
11
14
|
insert_date_: string;
|
|
12
15
|
content: C;
|
|
13
16
|
}
|
|
14
|
-
export declare abstract class
|
|
17
|
+
export declare abstract class GenericMessage<C extends MessageContent = MessageContent> {
|
|
15
18
|
protected readonly message: TaskMessageData<C>;
|
|
16
19
|
constructor(message: TaskMessageData<C>);
|
|
17
20
|
/**
|
|
18
21
|
* The task's message type.
|
|
19
22
|
*
|
|
20
|
-
* @property {
|
|
23
|
+
* @property {TaskMessageType}
|
|
21
24
|
*/
|
|
22
25
|
get type(): C["type"];
|
|
23
26
|
/**
|
|
@@ -37,6 +40,24 @@ export declare abstract class TaskMessage<C extends MessageContent = MessageCont
|
|
|
37
40
|
*
|
|
38
41
|
* @returns {boolean}
|
|
39
42
|
*/
|
|
40
|
-
isAgent():
|
|
43
|
+
isAgent(): this is AgentMessage;
|
|
44
|
+
/**
|
|
45
|
+
* Returns if the message is from a tool.
|
|
46
|
+
*
|
|
47
|
+
* @returns {boolean}
|
|
48
|
+
*/
|
|
49
|
+
isTool(): this is ToolMessage;
|
|
50
|
+
/**
|
|
51
|
+
* Returns if the message was sent from a user.
|
|
52
|
+
*
|
|
53
|
+
* @returns {boolean}
|
|
54
|
+
*/
|
|
55
|
+
isUser(): this is UserMessage;
|
|
56
|
+
/**
|
|
57
|
+
* Returns if the message was an error sent by the agent.
|
|
58
|
+
*
|
|
59
|
+
* @returns {boolean}
|
|
60
|
+
*/
|
|
61
|
+
isAgentError(): this is AgentErrorMessage;
|
|
41
62
|
}
|
|
42
63
|
export {};
|
package/script/message/task.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
class
|
|
3
|
+
exports.GenericMessage = void 0;
|
|
4
|
+
class GenericMessage {
|
|
5
5
|
message;
|
|
6
6
|
constructor(message) {
|
|
7
7
|
this.message = message;
|
|
@@ -9,7 +9,7 @@ class TaskMessage {
|
|
|
9
9
|
/**
|
|
10
10
|
* The task's message type.
|
|
11
11
|
*
|
|
12
|
-
* @property {
|
|
12
|
+
* @property {TaskMessageType}
|
|
13
13
|
*/
|
|
14
14
|
get type() {
|
|
15
15
|
return this.message.content.type;
|
|
@@ -38,5 +38,29 @@ class TaskMessage {
|
|
|
38
38
|
isAgent() {
|
|
39
39
|
return this.type === "agent-message";
|
|
40
40
|
}
|
|
41
|
+
/**
|
|
42
|
+
* Returns if the message is from a tool.
|
|
43
|
+
*
|
|
44
|
+
* @returns {boolean}
|
|
45
|
+
*/
|
|
46
|
+
isTool() {
|
|
47
|
+
return this.type === "tool-run";
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Returns if the message was sent from a user.
|
|
51
|
+
*
|
|
52
|
+
* @returns {boolean}
|
|
53
|
+
*/
|
|
54
|
+
isUser() {
|
|
55
|
+
return this.type === "user-message";
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Returns if the message was an error sent by the agent.
|
|
59
|
+
*
|
|
60
|
+
* @returns {boolean}
|
|
61
|
+
*/
|
|
62
|
+
isAgentError() {
|
|
63
|
+
return this.type === "agent-error";
|
|
64
|
+
}
|
|
41
65
|
}
|
|
42
|
-
exports.
|
|
66
|
+
exports.GenericMessage = GenericMessage;
|
package/script/message/tool.d.ts
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import type { Region } from "../region.js";
|
|
2
|
-
import {
|
|
2
|
+
import { GenericMessage } from "./task.js";
|
|
3
|
+
type ToolState = "cancelled" | "error" | "finished" | "pending" | "running";
|
|
4
|
+
export type ToolStatus = "cancelled" | "error" | "completed" | "pending" | "running";
|
|
3
5
|
export interface ToolMessageContent {
|
|
4
6
|
type: "tool-run";
|
|
5
|
-
tool_run_state:
|
|
7
|
+
tool_run_state: ToolState;
|
|
6
8
|
output: Record<string, unknown> & {
|
|
7
9
|
_agent_conversation_details?: {
|
|
8
10
|
agent_id: string;
|
|
@@ -25,13 +27,13 @@ export interface ToolMessageContent {
|
|
|
25
27
|
project: string;
|
|
26
28
|
};
|
|
27
29
|
}
|
|
28
|
-
export declare class ToolMessage extends
|
|
30
|
+
export declare class ToolMessage extends GenericMessage<ToolMessageContent> {
|
|
29
31
|
/**
|
|
30
32
|
* The tool status for _this_ message.
|
|
31
33
|
*
|
|
32
|
-
* @property {
|
|
34
|
+
* @property {ToolStatus}
|
|
33
35
|
*/
|
|
34
|
-
get status():
|
|
36
|
+
get status(): ToolStatus;
|
|
35
37
|
/**
|
|
36
38
|
* Parameters used to call the tool.
|
|
37
39
|
*
|
|
@@ -64,7 +66,7 @@ export declare class ToolMessage extends TaskMessage<ToolMessageContent> {
|
|
|
64
66
|
* The agent's ID, if a sub-agent.
|
|
65
67
|
*
|
|
66
68
|
* @property {string}
|
|
67
|
-
* @see {@link ToolMessage
|
|
69
|
+
* @see {@link ToolMessage#isSubAgent}
|
|
68
70
|
*/
|
|
69
71
|
get agentId(): string | null;
|
|
70
72
|
/**
|
|
@@ -105,4 +107,12 @@ export declare class ToolMessage extends TaskMessage<ToolMessageContent> {
|
|
|
105
107
|
* @returns {boolean}
|
|
106
108
|
*/
|
|
107
109
|
hasErrors(): boolean;
|
|
110
|
+
/**
|
|
111
|
+
* Checks if the tool message is currently running. Note that pending tools
|
|
112
|
+
* are also classified as running as they are just scheduled for running.
|
|
113
|
+
*
|
|
114
|
+
* @returns {boolean}
|
|
115
|
+
*/
|
|
116
|
+
isRunning(): boolean;
|
|
108
117
|
}
|
|
118
|
+
export {};
|
package/script/message/tool.js
CHANGED
|
@@ -2,14 +2,25 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ToolMessage = void 0;
|
|
4
4
|
const task_js_1 = require("./task.js");
|
|
5
|
-
class ToolMessage extends task_js_1.
|
|
5
|
+
class ToolMessage extends task_js_1.GenericMessage {
|
|
6
6
|
/**
|
|
7
7
|
* The tool status for _this_ message.
|
|
8
8
|
*
|
|
9
|
-
* @property {
|
|
9
|
+
* @property {ToolStatus}
|
|
10
10
|
*/
|
|
11
|
+
// deno-lint-ignore getter-return
|
|
11
12
|
get status() {
|
|
12
|
-
|
|
13
|
+
const status = this.message.content.tool_run_state;
|
|
14
|
+
switch (status) {
|
|
15
|
+
case "cancelled":
|
|
16
|
+
case "pending":
|
|
17
|
+
case "running":
|
|
18
|
+
case "error":
|
|
19
|
+
return status;
|
|
20
|
+
// agents and tools have different end statuses, align them
|
|
21
|
+
case "finished":
|
|
22
|
+
return "completed";
|
|
23
|
+
}
|
|
13
24
|
}
|
|
14
25
|
/**
|
|
15
26
|
* Parameters used to call the tool.
|
|
@@ -25,7 +36,7 @@ class ToolMessage extends task_js_1.TaskMessage {
|
|
|
25
36
|
* @property {object|null}
|
|
26
37
|
*/
|
|
27
38
|
get output() {
|
|
28
|
-
return this.status === "
|
|
39
|
+
return this.status === "completed" ? this.message.content.output : null;
|
|
29
40
|
}
|
|
30
41
|
/**
|
|
31
42
|
* Tool errors.
|
|
@@ -51,7 +62,7 @@ class ToolMessage extends task_js_1.TaskMessage {
|
|
|
51
62
|
* The agent's ID, if a sub-agent.
|
|
52
63
|
*
|
|
53
64
|
* @property {string}
|
|
54
|
-
* @see {@link ToolMessage
|
|
65
|
+
* @see {@link ToolMessage#isSubAgent}
|
|
55
66
|
*/
|
|
56
67
|
get agentId() {
|
|
57
68
|
return this.isSubAgent()
|
|
@@ -109,5 +120,20 @@ class ToolMessage extends task_js_1.TaskMessage {
|
|
|
109
120
|
hasErrors() {
|
|
110
121
|
return this.message.content.errors.length > 0;
|
|
111
122
|
}
|
|
123
|
+
/**
|
|
124
|
+
* Checks if the tool message is currently running. Note that pending tools
|
|
125
|
+
* are also classified as running as they are just scheduled for running.
|
|
126
|
+
*
|
|
127
|
+
* @returns {boolean}
|
|
128
|
+
*/
|
|
129
|
+
isRunning() {
|
|
130
|
+
switch (this.status) {
|
|
131
|
+
case "pending":
|
|
132
|
+
case "running":
|
|
133
|
+
return true;
|
|
134
|
+
default:
|
|
135
|
+
return false;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
112
138
|
}
|
|
113
139
|
exports.ToolMessage = ToolMessage;
|
package/script/message/user.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { GenericMessage } from "./task.js";
|
|
2
2
|
export interface UserMessageContent {
|
|
3
3
|
type: "user-message";
|
|
4
4
|
text: string;
|
|
5
5
|
is_trigger_message: boolean;
|
|
6
6
|
}
|
|
7
|
-
export declare class UserMessage extends
|
|
7
|
+
export declare class UserMessage extends GenericMessage<UserMessageContent> {
|
|
8
8
|
/**
|
|
9
9
|
* The message as text sent.
|
|
10
10
|
*
|