@meshagent/meshagent-agents 0.43.3 → 0.44.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/CHANGELOG.md +11 -0
- package/dist/browser/agent-messages.d.ts +6 -1
- package/dist/browser/agent-messages.js +12 -5
- package/dist/browser/chat-client.d.ts +12 -5
- package/dist/browser/chat-client.js +115 -16
- package/dist/browser/thread-storage.js +5 -2
- package/dist/esm/agent-messages.d.ts +6 -1
- package/dist/esm/agent-messages.js +8 -1
- package/dist/esm/chat-client.d.ts +12 -5
- package/dist/esm/chat-client.js +116 -17
- package/dist/esm/thread-storage.js +6 -3
- package/dist/node/agent-messages.d.ts +6 -1
- package/dist/node/agent-messages.js +12 -5
- package/dist/node/chat-client.d.ts +12 -5
- package/dist/node/chat-client.js +115 -16
- package/dist/node/thread-storage.js +5 -2
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,14 @@
|
|
|
1
|
+
## [0.44.0]
|
|
2
|
+
- TypeScript agent clients now support thread watch/unwatch, multiple thread storages, and richer start-thread payloads, including tool-choice metadata.
|
|
3
|
+
- Chat sessions now preserve event timestamps, reset replay state correctly, and handle more agent message types such as tool-call progress, secret requests, model changes, interrupts, and usage updates.
|
|
4
|
+
- Tailwind chat UI now tracks thread status, reasoning traces, shell output, file attachments, and improved file preview behavior for streamed agent content.
|
|
5
|
+
|
|
6
|
+
## [0.43.4]
|
|
7
|
+
- TypeScript agent messages and events now carry `created_at`, parse it on input, and preserve it when streamed deltas are merged.
|
|
8
|
+
- Messaging chat clients now accept thread lifecycle events without a participant ID and carry room message timestamps into session events for more accurate live synchronization.
|
|
9
|
+
- Live chat test coverage expanded for thread creation, acknowledgements, steer/interrupt flows, and client tool request handling.
|
|
10
|
+
- The workspace app template was rebranded from the meeting app naming and its deploy tag was updated accordingly.
|
|
11
|
+
|
|
1
12
|
## [0.43.3]
|
|
2
13
|
- Stability
|
|
3
14
|
|
|
@@ -19,6 +19,8 @@ export declare const agentParticipantDisconnectType = "meshagent.agent.participa
|
|
|
19
19
|
export declare const agentThreadDeleteType = "meshagent.agent.thread.delete";
|
|
20
20
|
export declare const agentThreadRenameType = "meshagent.agent.thread.rename";
|
|
21
21
|
export declare const agentThreadListType = "meshagent.agent.thread.list";
|
|
22
|
+
export declare const agentThreadWatchType = "meshagent.agent.thread.watch";
|
|
23
|
+
export declare const agentThreadUnwatchType = "meshagent.agent.thread.unwatch";
|
|
22
24
|
export declare const agentThreadListedType = "meshagent.agent.thread.listed";
|
|
23
25
|
export declare const agentThreadCreatedType = "meshagent.agent.thread.created";
|
|
24
26
|
export declare const agentThreadUpdatedType = "meshagent.agent.thread.updated";
|
|
@@ -239,7 +241,8 @@ export declare abstract class AgentMessage {
|
|
|
239
241
|
readonly type: string;
|
|
240
242
|
readonly messageId: string;
|
|
241
243
|
readonly senderName?: string;
|
|
242
|
-
|
|
244
|
+
readonly createdAt: string;
|
|
245
|
+
protected constructor({ type, messageId, message_id, senderName, sender_name, createdAt, created_at }: JsonMap);
|
|
243
246
|
toJson(): JsonMap;
|
|
244
247
|
static fromJson(json: JsonMap): AgentMessage;
|
|
245
248
|
}
|
|
@@ -272,6 +275,8 @@ export declare const ParticipantDisconnect: MessageCtor;
|
|
|
272
275
|
export declare const DeleteThread: MessageCtor;
|
|
273
276
|
export declare const RenameThread: MessageCtor;
|
|
274
277
|
export declare const ListThreads: MessageCtor;
|
|
278
|
+
export declare const WatchThreads: MessageCtor;
|
|
279
|
+
export declare const UnwatchThreads: MessageCtor;
|
|
275
280
|
export declare const ThreadsListed: MessageCtor;
|
|
276
281
|
export declare const ThreadCreated: MessageCtor;
|
|
277
282
|
export declare const ThreadUpdated: MessageCtor;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
exports.
|
|
5
|
-
exports.
|
|
6
|
-
exports.AgentClientToolCallResponse = exports.AgentSecretResponse = exports.RejectAgentToolCall = exports.ApproveAgentToolCall = exports.AgentUsageUpdated = exports.AgentContextCompacted = exports.AgentAudioInputSpeechEnded = exports.AgentAudioInputSpeechStarted = exports.AgentAudioTranscriptionFailed = exports.AgentAudioTranscriptionCompleted = exports.AgentAudioTranscriptionDelta = exports.AgentAudioTranscriptionStarted = exports.AgentAudioGenerationFailed = exports.AgentAudioGenerationCompleted = exports.AgentAudioGenerationDelta = exports.AgentAudioGenerationStarted = exports.AgentImageGenerationFailed = exports.AgentImageGenerationCompleted = exports.AgentImageGenerationPartial = exports.AgentImageGenerationStarted = exports.AgentThreadEvent = exports.AgentConnectionStatus = exports.AgentThreadStatus = exports.AgentClientToolCallCancelled = exports.AgentClientToolCallRequested = exports.AgentSecretRequested = exports.AgentToolCallApprovalRequested = exports.AgentToolCallEnded = void 0;
|
|
3
|
+
exports.agentToolCallPendingType = exports.agentFileContentEndedType = exports.agentFileContentDeltaType = exports.agentFileContentStartedType = exports.agentTextContentEndedType = exports.agentTextContentDeltaType = exports.agentTextContentStartedType = exports.agentReasoningContentEndedType = exports.agentReasoningContentDeltaType = exports.agentReasoningContentStartedType = exports.agentTurnEndedType = exports.agentTurnStartedType = exports.agentTurnSteerRejectedType = exports.agentTurnSteeredType = exports.agentTurnSteerAcceptedType = exports.agentTurnInterruptedType = exports.agentTurnInterruptAcceptedType = exports.agentTurnStartRejectedType = exports.agentTurnStartAcceptedType = exports.agentThreadClearedType = exports.agentModelChangedType = exports.agentModelChangeType = exports.agentModelsResponseType = exports.agentModelsRequestType = exports.agentCapabilitiesResponseType = exports.agentCapabilitiesRequestType = exports.agentThreadDeletedType = exports.agentThreadUpdatedType = exports.agentThreadCreatedType = exports.agentThreadListedType = exports.agentThreadUnwatchType = exports.agentThreadWatchType = exports.agentThreadListType = exports.agentThreadRenameType = exports.agentThreadDeleteType = exports.agentParticipantDisconnectType = exports.agentParticipantConnectType = exports.agentThreadCloseType = exports.agentThreadOpenType = exports.agentThreadStartRejectedType = exports.agentThreadLoadedType = exports.agentThreadStartedType = exports.agentThreadStartType = exports.agentRealtimeAudioCommitType = exports.agentRealtimeAudioChunkType = exports.agentThreadClearType = exports.agentTurnInterruptType = exports.agentTurnSteerType = exports.agentTurnStartType = exports.agentRoomMessageType = void 0;
|
|
4
|
+
exports.AgentThreadMessage = exports.AgentMessage = exports.AgentContextWindowUsage = exports.AgentGeneratedAudio = exports.AgentGeneratedImage = exports.AgentToolCallLogLine = exports.AgentRealtimeConnectionInfo = exports.AgentThreadListEntry = exports.AgentProviderInfo = exports.AgentModelInfo = exports.ToolkitCapabilities = exports.ToolkitToolCapabilities = exports.AgentError = exports.AgentAudioFormat = exports.TurnToolkitConfig = exports.ClientToolkitDescription = exports.TurnMcpConfig = exports.ToolChoice = exports.agentClientToolCallResponseType = exports.agentSecretResponseType = exports.agentToolRejectType = exports.agentToolApproveType = exports.agentUsageUpdatedType = exports.agentContextCompactedType = exports.agentAudioInputSpeechEndedType = exports.agentAudioInputSpeechStartedType = exports.agentAudioTranscriptionFailedType = exports.agentAudioTranscriptionCompletedType = exports.agentAudioTranscriptionDeltaType = exports.agentAudioTranscriptionStartedType = exports.agentAudioGenerationFailedType = exports.agentAudioGenerationCompletedType = exports.agentAudioGenerationDeltaType = exports.agentAudioGenerationStartedType = exports.agentImageGenerationFailedType = exports.agentImageGenerationCompletedType = exports.agentImageGenerationPartialType = exports.agentImageGenerationStartedType = exports.agentThreadEventType = exports.agentConnectionStatusType = exports.agentThreadStatusType = exports.agentSecretRequestedType = exports.agentClientToolCallCancelledType = exports.agentClientToolCallRequestedType = exports.agentToolCallApprovalRequestedType = exports.agentToolCallEndedType = exports.agentToolCallLogDeltaType = exports.agentToolCallArgumentsDeltaType = exports.agentToolCallStartedType = exports.agentToolCallInProgressType = void 0;
|
|
5
|
+
exports.AgentToolCallPending = exports.AgentFileContentEnded = exports.AgentFileContentDelta = exports.AgentFileContentStarted = exports.AgentTextContentEnded = exports.AgentTextContentDelta = exports.AgentTextContentStarted = exports.AgentReasoningContentEnded = exports.AgentReasoningContentDelta = exports.AgentReasoningContentStarted = exports.ThreadStartRejected = exports.ThreadLoaded = exports.ThreadStarted = exports.TurnEnded = exports.TurnStarted = exports.TurnSteerRejected = exports.TurnSteered = exports.TurnSteerAccepted = exports.TurnInterrupted = exports.TurnInterruptAccepted = exports.TurnStartRejected = exports.TurnStartAccepted = exports.ThreadCleared = exports.AgentModelChanged = exports.ChangeModel = exports.ModelsResponse = exports.ModelsRequest = exports.CapabilitiesResponse = exports.CapabilitiesRequest = exports.ThreadDeleted = exports.ThreadUpdated = exports.ThreadCreated = exports.ThreadsListed = exports.UnwatchThreads = exports.WatchThreads = exports.ListThreads = exports.RenameThread = exports.DeleteThread = exports.ParticipantDisconnect = exports.ParticipantConnect = exports.CloseThread = exports.OpenThread = exports.ClearThread = exports.AgentRealtimeAudioCommit = exports.AgentRealtimeAudioChunk = exports.TurnInterrupt = exports.TurnSteer = exports.TurnStart = exports.StartThread = exports.AgentLLMMessage = void 0;
|
|
6
|
+
exports.AgentClientToolCallResponse = exports.AgentSecretResponse = exports.RejectAgentToolCall = exports.ApproveAgentToolCall = exports.AgentUsageUpdated = exports.AgentContextCompacted = exports.AgentAudioInputSpeechEnded = exports.AgentAudioInputSpeechStarted = exports.AgentAudioTranscriptionFailed = exports.AgentAudioTranscriptionCompleted = exports.AgentAudioTranscriptionDelta = exports.AgentAudioTranscriptionStarted = exports.AgentAudioGenerationFailed = exports.AgentAudioGenerationCompleted = exports.AgentAudioGenerationDelta = exports.AgentAudioGenerationStarted = exports.AgentImageGenerationFailed = exports.AgentImageGenerationCompleted = exports.AgentImageGenerationPartial = exports.AgentImageGenerationStarted = exports.AgentThreadEvent = exports.AgentConnectionStatus = exports.AgentThreadStatus = exports.AgentClientToolCallCancelled = exports.AgentClientToolCallRequested = exports.AgentSecretRequested = exports.AgentToolCallApprovalRequested = exports.AgentToolCallEnded = exports.AgentToolCallLogDelta = exports.AgentToolCallArgumentsDelta = exports.AgentToolCallStarted = exports.AgentToolCallInProgress = void 0;
|
|
7
7
|
exports.agentInputContent = agentInputContent;
|
|
8
8
|
const meshagent_1 = require("@meshagent/meshagent");
|
|
9
9
|
const uuid_1 = require("uuid");
|
|
@@ -25,6 +25,8 @@ exports.agentParticipantDisconnectType = "meshagent.agent.participant.disconnect
|
|
|
25
25
|
exports.agentThreadDeleteType = "meshagent.agent.thread.delete";
|
|
26
26
|
exports.agentThreadRenameType = "meshagent.agent.thread.rename";
|
|
27
27
|
exports.agentThreadListType = "meshagent.agent.thread.list";
|
|
28
|
+
exports.agentThreadWatchType = "meshagent.agent.thread.watch";
|
|
29
|
+
exports.agentThreadUnwatchType = "meshagent.agent.thread.unwatch";
|
|
28
30
|
exports.agentThreadListedType = "meshagent.agent.thread.listed";
|
|
29
31
|
exports.agentThreadCreatedType = "meshagent.agent.thread.created";
|
|
30
32
|
exports.agentThreadUpdatedType = "meshagent.agent.thread.updated";
|
|
@@ -654,16 +656,18 @@ function omitUndefined(value) {
|
|
|
654
656
|
return Object.fromEntries(Object.entries(value).filter(([, entry]) => entry !== undefined));
|
|
655
657
|
}
|
|
656
658
|
class AgentMessage {
|
|
657
|
-
constructor({ type, messageId, message_id, senderName, sender_name }) {
|
|
659
|
+
constructor({ type, messageId, message_id, senderName, sender_name, createdAt, created_at }) {
|
|
658
660
|
this.type = String(type);
|
|
659
661
|
const resolvedMessageId = stringOrNull(messageId ?? message_id)?.trim();
|
|
660
662
|
this.messageId = resolvedMessageId == null || resolvedMessageId.length === 0 ? (0, uuid_1.v4)() : resolvedMessageId;
|
|
661
663
|
this.senderName = stringOrNull(senderName ?? sender_name);
|
|
664
|
+
this.createdAt = stringOrNull(createdAt ?? created_at) ?? new Date().toISOString();
|
|
662
665
|
}
|
|
663
666
|
toJson() {
|
|
664
667
|
return {
|
|
665
668
|
type: this.type,
|
|
666
669
|
message_id: this.messageId,
|
|
670
|
+
created_at: this.createdAt,
|
|
667
671
|
...(this.senderName != null ? { sender_name: this.senderName } : {}),
|
|
668
672
|
};
|
|
669
673
|
}
|
|
@@ -730,6 +734,7 @@ function makeMessageClass({ type, base = "message", fields = [], }) {
|
|
|
730
734
|
const params = {
|
|
731
735
|
messageId: stringOrNull(json.message_id),
|
|
732
736
|
senderName: stringOrNull(json.sender_name),
|
|
737
|
+
createdAt: stringOrNull(json.created_at),
|
|
733
738
|
};
|
|
734
739
|
if (base !== "message") {
|
|
735
740
|
params.threadId = requiredString(json, "thread_id");
|
|
@@ -940,6 +945,8 @@ exports.ParticipantDisconnect = makeMessageClass({ type: exports.agentParticipan
|
|
|
940
945
|
exports.DeleteThread = makeMessageClass({ type: exports.agentThreadDeleteType, base: "thread" });
|
|
941
946
|
exports.RenameThread = makeMessageClass({ type: exports.agentThreadRenameType, base: "thread", fields: [s("name", "name", true)] });
|
|
942
947
|
exports.ListThreads = makeMessageClass({ type: exports.agentThreadListType, fields: [{ prop: "limit", json: "limit", from: (value) => intOrNull(value) ?? 200, default: () => 200, always: true }, { prop: "offset", json: "offset", from: (value) => intOrNull(value) ?? 0, default: () => 0, always: true }] });
|
|
948
|
+
exports.WatchThreads = makeMessageClass({ type: exports.agentThreadWatchType });
|
|
949
|
+
exports.UnwatchThreads = makeMessageClass({ type: exports.agentThreadUnwatchType });
|
|
943
950
|
exports.ThreadsListed = makeMessageClass({ type: exports.agentThreadListedType, fields: [s("sourceMessageId", "source_message_id", true), objList("threads", "threads", AgentThreadListEntry.fromJson, true), i("total"), i("offset"), i("limit")] });
|
|
944
951
|
exports.ThreadCreated = makeMessageClass({ type: exports.agentThreadCreatedType, fields: [obj("thread", "thread", AgentThreadListEntry.fromJson, true)] });
|
|
945
952
|
exports.ThreadUpdated = makeMessageClass({ type: exports.agentThreadUpdatedType, fields: [obj("thread", "thread", AgentThreadListEntry.fromJson, true)] });
|
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
import { RemoteParticipant } from "@meshagent/meshagent";
|
|
2
2
|
import type { RoomClient, Content } from "@meshagent/meshagent";
|
|
3
|
-
import { AgentMessage, AgentModelChanged, AgentThreadStatus, ModelsResponse, AgentConnectionStatus } from "./agent-messages.js";
|
|
3
|
+
import { AgentMessage, AgentModelChanged, AgentThreadStatus, ModelsResponse, ToolChoice, AgentConnectionStatus } from "./agent-messages.js";
|
|
4
4
|
import type { AgentPayload, JsonMap, ClientToolkitDescription } from "./agent-messages.js";
|
|
5
5
|
import { ChangeEmitter } from "./change-emitter.js";
|
|
6
6
|
export declare class AgentMessageEvent {
|
|
7
7
|
readonly message: AgentMessage;
|
|
8
|
+
readonly createdAt: Date;
|
|
8
9
|
readonly attachment?: Uint8Array;
|
|
9
|
-
constructor({ message, attachment }: {
|
|
10
|
+
constructor({ message, createdAt, attachment }: {
|
|
10
11
|
message: AgentMessage;
|
|
12
|
+
createdAt?: Date;
|
|
11
13
|
attachment?: Uint8Array;
|
|
12
14
|
});
|
|
13
15
|
get payload(): AgentPayload;
|
|
@@ -96,7 +98,7 @@ export declare abstract class BaseChatClient extends ChangeEmitter {
|
|
|
96
98
|
drainPendingEvents?: boolean;
|
|
97
99
|
}): ChatThreadSession;
|
|
98
100
|
private openSession;
|
|
99
|
-
startThread({ messageId, message, attachments, name, backend, provider, model, voice, outputModalities, realtimeProtocol, senderName, clientToolkits, omitContent, }: {
|
|
101
|
+
startThread({ messageId, message, attachments, name, backend, provider, model, voice, outputModalities, realtimeProtocol, senderName, clientToolkits, toolChoice, omitContent, }: {
|
|
100
102
|
messageId?: string;
|
|
101
103
|
message: string;
|
|
102
104
|
attachments: string[];
|
|
@@ -109,14 +111,17 @@ export declare abstract class BaseChatClient extends ChangeEmitter {
|
|
|
109
111
|
realtimeProtocol?: string;
|
|
110
112
|
senderName?: string;
|
|
111
113
|
clientToolkits?: ClientToolkitDescription[];
|
|
114
|
+
toolChoice?: ToolChoice;
|
|
112
115
|
omitContent?: boolean;
|
|
113
116
|
}): Promise<ChatThreadStartResult>;
|
|
117
|
+
private resolvedStartThreadMessage;
|
|
114
118
|
abstract sendAgentMessage(message: AgentMessage, options?: {
|
|
115
119
|
attachment?: Uint8Array;
|
|
116
120
|
ignoreOffline?: boolean;
|
|
117
121
|
}): Promise<void>;
|
|
118
122
|
private drainPendingSessionEvents;
|
|
119
|
-
handleAgentMessage(message: AgentMessage, { attachment }?: {
|
|
123
|
+
handleAgentMessage(message: AgentMessage, { createdAt, attachment }?: {
|
|
124
|
+
createdAt?: Date;
|
|
120
125
|
attachment?: Uint8Array;
|
|
121
126
|
}): void;
|
|
122
127
|
emitConnectionStatus({ status, message, reason, retryDelay, }: {
|
|
@@ -186,6 +191,7 @@ export declare class ChatThreadSession extends ChangeEmitter {
|
|
|
186
191
|
load?: boolean;
|
|
187
192
|
sinceTurn?: string;
|
|
188
193
|
}): Promise<void>;
|
|
194
|
+
private resetReplayState;
|
|
189
195
|
close(): Promise<void>;
|
|
190
196
|
requestModels({ ignoreOffline }?: {
|
|
191
197
|
ignoreOffline?: boolean;
|
|
@@ -202,7 +208,7 @@ export declare class ChatThreadSession extends ChangeEmitter {
|
|
|
202
208
|
requestId: string;
|
|
203
209
|
response: Content;
|
|
204
210
|
}): Promise<void>;
|
|
205
|
-
sendText({ messageId, text, attachments, steer, turnId, backend, provider, model, voice, outputModalities, senderName, clientToolkits, }: {
|
|
211
|
+
sendText({ messageId, text, attachments, steer, turnId, backend, provider, model, voice, outputModalities, senderName, clientToolkits, toolChoice, }: {
|
|
206
212
|
messageId?: string;
|
|
207
213
|
text: string;
|
|
208
214
|
attachments: string[];
|
|
@@ -215,6 +221,7 @@ export declare class ChatThreadSession extends ChangeEmitter {
|
|
|
215
221
|
outputModalities?: string[];
|
|
216
222
|
senderName?: string;
|
|
217
223
|
clientToolkits?: ClientToolkitDescription[];
|
|
224
|
+
toolChoice?: ToolChoice;
|
|
218
225
|
}): Promise<string>;
|
|
219
226
|
sendRealtimeAudioChunk({ chunk, format }: {
|
|
220
227
|
chunk: Uint8Array;
|
|
@@ -6,12 +6,13 @@ const uuid_1 = require("uuid");
|
|
|
6
6
|
const agent_messages_js_1 = require("./agent-messages.js");
|
|
7
7
|
const change_emitter_js_1 = require("./change-emitter.js");
|
|
8
8
|
class AgentMessageEvent {
|
|
9
|
-
constructor({ message, attachment }) {
|
|
9
|
+
constructor({ message, createdAt, attachment }) {
|
|
10
10
|
this.message = message;
|
|
11
|
+
this.createdAt = createdAt ?? dateOrNull(message.createdAt) ?? new Date();
|
|
11
12
|
this.attachment = attachment;
|
|
12
13
|
}
|
|
13
14
|
get payload() {
|
|
14
|
-
return this.message.toJson();
|
|
15
|
+
return { ...this.message.toJson(), created_at: this.createdAt.toISOString() };
|
|
15
16
|
}
|
|
16
17
|
}
|
|
17
18
|
exports.AgentMessageEvent = AgentMessageEvent;
|
|
@@ -203,7 +204,7 @@ class BaseChatClient extends change_emitter_js_1.ChangeEmitter {
|
|
|
203
204
|
this.notifyListeners();
|
|
204
205
|
});
|
|
205
206
|
}
|
|
206
|
-
async startThread({ messageId, message, attachments, name, backend, provider, model, voice, outputModalities, realtimeProtocol, senderName, clientToolkits, omitContent = false, }) {
|
|
207
|
+
async startThread({ messageId, message, attachments, name, backend, provider, model, voice, outputModalities, realtimeProtocol, senderName, clientToolkits, toolChoice, omitContent = false, }) {
|
|
207
208
|
const resolvedMessageId = messageId == null || messageId.trim() === "" ? (0, uuid_1.v4)() : messageId.trim();
|
|
208
209
|
const resolvedSenderName = this.cleanParticipantName(senderName) ?? this.localParticipantName();
|
|
209
210
|
const payload = new agent_messages_js_1.StartThread({
|
|
@@ -218,6 +219,7 @@ class BaseChatClient extends change_emitter_js_1.ChangeEmitter {
|
|
|
218
219
|
realtimeProtocol: nonEmptyTrimmed(realtimeProtocol),
|
|
219
220
|
senderName: resolvedSenderName,
|
|
220
221
|
clientToolkits: clientToolkits != null && clientToolkits.length > 0 ? clientToolkits : undefined,
|
|
222
|
+
toolChoice: toolChoice?.toJson(),
|
|
221
223
|
});
|
|
222
224
|
const completer = new meshagent_1.Completer();
|
|
223
225
|
this.pendingStartRequests.set(resolvedMessageId, completer);
|
|
@@ -232,7 +234,10 @@ class BaseChatClient extends change_emitter_js_1.ChangeEmitter {
|
|
|
232
234
|
}
|
|
233
235
|
const session = this.openThread(threadPath, { load: false, drainPendingEvents: false });
|
|
234
236
|
if (!omitContent) {
|
|
235
|
-
session.addAgentMessage(new AgentMessageEvent({
|
|
237
|
+
session.addAgentMessage(new AgentMessageEvent({
|
|
238
|
+
message: this.resolvedStartThreadMessage({ payload, threadPath }),
|
|
239
|
+
createdAt: dateOrNull(payload.createdAt) ?? undefined,
|
|
240
|
+
}));
|
|
236
241
|
}
|
|
237
242
|
this.drainPendingSessionEvents(threadPath, session);
|
|
238
243
|
return new ChatThreadStartResult({
|
|
@@ -247,6 +252,23 @@ class BaseChatClient extends change_emitter_js_1.ChangeEmitter {
|
|
|
247
252
|
this.pendingStartRequests.delete(resolvedMessageId);
|
|
248
253
|
}
|
|
249
254
|
}
|
|
255
|
+
resolvedStartThreadMessage({ payload, threadPath, }) {
|
|
256
|
+
return new agent_messages_js_1.TurnStart({
|
|
257
|
+
threadId: threadPath,
|
|
258
|
+
messageId: payload.messageId,
|
|
259
|
+
senderName: payload.senderName,
|
|
260
|
+
content: payload.content,
|
|
261
|
+
backend: payload.backend,
|
|
262
|
+
provider: payload.provider,
|
|
263
|
+
model: payload.model,
|
|
264
|
+
voice: payload.voice,
|
|
265
|
+
outputModalities: payload.outputModalities,
|
|
266
|
+
instructions: payload.instructions,
|
|
267
|
+
mcp: payload.mcp,
|
|
268
|
+
clientToolkits: payload.clientToolkits,
|
|
269
|
+
toolkits: payload.toolkits,
|
|
270
|
+
});
|
|
271
|
+
}
|
|
250
272
|
drainPendingSessionEvents(threadPath, session) {
|
|
251
273
|
const pendingEvents = this.pendingSessionEventsByPath.get(threadPath);
|
|
252
274
|
if (pendingEvents == null) {
|
|
@@ -257,16 +279,16 @@ class BaseChatClient extends change_emitter_js_1.ChangeEmitter {
|
|
|
257
279
|
session.addAgentMessage(event);
|
|
258
280
|
}
|
|
259
281
|
}
|
|
260
|
-
handleAgentMessage(message, { attachment } = {}) {
|
|
282
|
+
handleAgentMessage(message, { createdAt, attachment } = {}) {
|
|
261
283
|
if (message.type === agent_messages_js_1.agentConnectionStatusType) {
|
|
262
284
|
this._connectionStatus = message;
|
|
263
285
|
for (const session of this.sessionsByPath.values()) {
|
|
264
286
|
if (session.isOpen) {
|
|
265
|
-
session.addAgentMessage(new AgentMessageEvent({ message, attachment }));
|
|
287
|
+
session.addAgentMessage(new AgentMessageEvent({ message, createdAt, attachment }));
|
|
266
288
|
}
|
|
267
289
|
}
|
|
268
290
|
}
|
|
269
|
-
this.eventQueue.add(new AgentMessageEvent({ message, attachment }));
|
|
291
|
+
this.eventQueue.add(new AgentMessageEvent({ message, createdAt, attachment }));
|
|
270
292
|
const sourceMessageId = sourceMessageIdFor(message);
|
|
271
293
|
if ((message.type === agent_messages_js_1.agentThreadStartedType || message.type === agent_messages_js_1.agentThreadStartRejectedType) &&
|
|
272
294
|
sourceMessageId != null &&
|
|
@@ -281,7 +303,7 @@ class BaseChatClient extends change_emitter_js_1.ChangeEmitter {
|
|
|
281
303
|
this.notifyListeners();
|
|
282
304
|
return;
|
|
283
305
|
}
|
|
284
|
-
const event = new AgentMessageEvent({ message, attachment });
|
|
306
|
+
const event = new AgentMessageEvent({ message, createdAt, attachment });
|
|
285
307
|
const session = this.sessionsByPath.get(threadPath);
|
|
286
308
|
if (session != null) {
|
|
287
309
|
session.addAgentMessage(event);
|
|
@@ -344,10 +366,15 @@ class MessagingChatClient extends BaseChatClient {
|
|
|
344
366
|
return;
|
|
345
367
|
}
|
|
346
368
|
const participant = this.agentParticipant();
|
|
347
|
-
|
|
369
|
+
const fromSelectedAgent = participant != null && roomMessage.fromParticipantId === participant.id;
|
|
370
|
+
const fromParticipantlessThreadList = roomMessage.fromParticipantId == null && isThreadListMessage(roomMessage.message);
|
|
371
|
+
if (!fromSelectedAgent && !fromParticipantlessThreadList) {
|
|
348
372
|
return;
|
|
349
373
|
}
|
|
350
|
-
this.handleAgentMessage(agent_messages_js_1.AgentMessage.fromJson(roomMessage.message), {
|
|
374
|
+
this.handleAgentMessage(agent_messages_js_1.AgentMessage.fromJson(roomMessage.message), {
|
|
375
|
+
createdAt: dateOrNull(roomMessage.message.created_at),
|
|
376
|
+
attachment: roomMessage.attachment,
|
|
377
|
+
});
|
|
351
378
|
};
|
|
352
379
|
this.room = room;
|
|
353
380
|
this.agentName = agentName;
|
|
@@ -416,6 +443,12 @@ class MessagingChatClient extends BaseChatClient {
|
|
|
416
443
|
}
|
|
417
444
|
}
|
|
418
445
|
exports.MessagingChatClient = MessagingChatClient;
|
|
446
|
+
function isThreadListMessage(message) {
|
|
447
|
+
return message.type === agent_messages_js_1.agentThreadListedType
|
|
448
|
+
|| message.type === agent_messages_js_1.agentThreadCreatedType
|
|
449
|
+
|| message.type === agent_messages_js_1.agentThreadUpdatedType
|
|
450
|
+
|| message.type === agent_messages_js_1.agentThreadDeletedType;
|
|
451
|
+
}
|
|
419
452
|
class ChatThreadSession extends change_emitter_js_1.ChangeEmitter {
|
|
420
453
|
constructor({ client, threadPath }) {
|
|
421
454
|
super();
|
|
@@ -463,6 +496,9 @@ class ChatThreadSession extends change_emitter_js_1.ChangeEmitter {
|
|
|
463
496
|
async open({ load = true, sinceTurn } = {}) {
|
|
464
497
|
if (this.openState) {
|
|
465
498
|
if (load) {
|
|
499
|
+
if (sinceTurn == null) {
|
|
500
|
+
this.resetReplayState();
|
|
501
|
+
}
|
|
466
502
|
const openThread = new agent_messages_js_1.OpenThread({ threadId: this.threadPath, load: true, sinceTurn });
|
|
467
503
|
this.setLoadState(this.loadingStateForOpen(openThread, sinceTurn));
|
|
468
504
|
try {
|
|
@@ -493,6 +529,17 @@ class ChatThreadSession extends change_emitter_js_1.ChangeEmitter {
|
|
|
493
529
|
throw error;
|
|
494
530
|
}
|
|
495
531
|
}
|
|
532
|
+
resetReplayState() {
|
|
533
|
+
this._messages.length = 0;
|
|
534
|
+
this.messageIndexes.clear();
|
|
535
|
+
this.localAgentMessageIds.clear();
|
|
536
|
+
this.pendingLocalInputMessageIds.clear();
|
|
537
|
+
this.mergedDeltaMessageIds.clear();
|
|
538
|
+
this.pendingInputsById.clear();
|
|
539
|
+
this.lastCompletedTurnIdValue = undefined;
|
|
540
|
+
this.lastAgentMessageType = undefined;
|
|
541
|
+
this.lastAgentMessageAt = undefined;
|
|
542
|
+
}
|
|
496
543
|
async close() {
|
|
497
544
|
if (!this.openState) {
|
|
498
545
|
return;
|
|
@@ -524,7 +571,7 @@ class ChatThreadSession extends change_emitter_js_1.ChangeEmitter {
|
|
|
524
571
|
response,
|
|
525
572
|
}));
|
|
526
573
|
}
|
|
527
|
-
async sendText({ messageId, text, attachments, steer = false, turnId, backend, provider, model, voice, outputModalities, senderName, clientToolkits, }) {
|
|
574
|
+
async sendText({ messageId, text, attachments, steer = false, turnId, backend, provider, model, voice, outputModalities, senderName, clientToolkits, toolChoice, }) {
|
|
528
575
|
const resolvedMessageId = messageId == null || messageId.trim() === "" ? (0, uuid_1.v4)() : messageId.trim();
|
|
529
576
|
const currentModel = this.currentModelValue;
|
|
530
577
|
const resolvedBackend = nonEmptyTrimmed(backend) ?? currentModel?.backend;
|
|
@@ -553,6 +600,7 @@ class ChatThreadSession extends change_emitter_js_1.ChangeEmitter {
|
|
|
553
600
|
voice: resolvedVoice,
|
|
554
601
|
outputModalities: resolvedOutputModalities,
|
|
555
602
|
clientToolkits: clientToolkits != null && clientToolkits.length > 0 ? clientToolkits : undefined,
|
|
603
|
+
toolChoice: toolChoice?.toJson(),
|
|
556
604
|
});
|
|
557
605
|
this.localAgentMessageIds.add(resolvedMessageId);
|
|
558
606
|
this.pendingLocalInputMessageIds.add(resolvedMessageId);
|
|
@@ -602,9 +650,9 @@ class ChatThreadSession extends change_emitter_js_1.ChangeEmitter {
|
|
|
602
650
|
const message = event.message;
|
|
603
651
|
const type = message.type;
|
|
604
652
|
this.lastAgentMessageType = type;
|
|
605
|
-
this.lastAgentMessageAt =
|
|
653
|
+
this.lastAgentMessageAt = event.createdAt;
|
|
606
654
|
this.updateSessionState(message);
|
|
607
|
-
this.updatePendingInputsForMessage(message);
|
|
655
|
+
this.updatePendingInputsForMessage(message, event.createdAt);
|
|
608
656
|
this.appendRenderableMessage(event);
|
|
609
657
|
this.notifyListeners();
|
|
610
658
|
}
|
|
@@ -670,7 +718,7 @@ class ChatThreadSession extends change_emitter_js_1.ChangeEmitter {
|
|
|
670
718
|
}), { notify: false });
|
|
671
719
|
}
|
|
672
720
|
}
|
|
673
|
-
updatePendingInputsForMessage(message) {
|
|
721
|
+
updatePendingInputsForMessage(message, createdAt) {
|
|
674
722
|
const type = message.type;
|
|
675
723
|
const messageId = message.messageId;
|
|
676
724
|
const sourceMessageId = sourceMessageIdFor(message);
|
|
@@ -684,7 +732,7 @@ class ChatThreadSession extends change_emitter_js_1.ChangeEmitter {
|
|
|
684
732
|
messageType: type,
|
|
685
733
|
threadPath: this.threadPath,
|
|
686
734
|
payload: message,
|
|
687
|
-
createdAt
|
|
735
|
+
createdAt,
|
|
688
736
|
awaitingAcceptance: true,
|
|
689
737
|
awaitingApplication: true,
|
|
690
738
|
}));
|
|
@@ -723,6 +771,31 @@ class ChatThreadSession extends change_emitter_js_1.ChangeEmitter {
|
|
|
723
771
|
}
|
|
724
772
|
return;
|
|
725
773
|
}
|
|
774
|
+
if (message.type === agent_messages_js_1.agentToolCallEndedType) {
|
|
775
|
+
const itemId = normalizedString(message.itemId);
|
|
776
|
+
if (itemId != null) {
|
|
777
|
+
this.upsertItemMessage(`tool_call:${itemId}`, event);
|
|
778
|
+
}
|
|
779
|
+
else if (message.error != null) {
|
|
780
|
+
this.appendMessage(event);
|
|
781
|
+
}
|
|
782
|
+
return;
|
|
783
|
+
}
|
|
784
|
+
if (message.type === agent_messages_js_1.agentToolCallPendingType || message.type === agent_messages_js_1.agentToolCallInProgressType || message.type === agent_messages_js_1.agentToolCallStartedType) {
|
|
785
|
+
const itemId = normalizedString(message.itemId);
|
|
786
|
+
if (itemId != null) {
|
|
787
|
+
this.upsertItemMessage(`tool_call:${itemId}`, event);
|
|
788
|
+
}
|
|
789
|
+
return;
|
|
790
|
+
}
|
|
791
|
+
if (message.type === agent_messages_js_1.agentSecretRequestedType) {
|
|
792
|
+
this.appendMessage(event);
|
|
793
|
+
return;
|
|
794
|
+
}
|
|
795
|
+
if (message.type === agent_messages_js_1.agentModelChangedType) {
|
|
796
|
+
this.appendMessage(event);
|
|
797
|
+
return;
|
|
798
|
+
}
|
|
726
799
|
if (message.type === agent_messages_js_1.agentThreadStartType || message.type === agent_messages_js_1.agentTurnStartType || message.type === agent_messages_js_1.agentTurnSteerType) {
|
|
727
800
|
if (agentInputText(message.content).trim() !== "") {
|
|
728
801
|
this.appendMessage(event);
|
|
@@ -738,6 +811,18 @@ class ChatThreadSession extends change_emitter_js_1.ChangeEmitter {
|
|
|
738
811
|
if (agentInputText(message.content).trim() !== "") {
|
|
739
812
|
this.appendMessage(event, { beforePendingLocalInputs: true });
|
|
740
813
|
}
|
|
814
|
+
else {
|
|
815
|
+
this.appendMessage(event);
|
|
816
|
+
}
|
|
817
|
+
return;
|
|
818
|
+
}
|
|
819
|
+
if (message.type === agent_messages_js_1.agentTurnStartedType ||
|
|
820
|
+
message.type === agent_messages_js_1.agentTurnSteeredType ||
|
|
821
|
+
message.type === agent_messages_js_1.agentTurnStartRejectedType ||
|
|
822
|
+
message.type === agent_messages_js_1.agentTurnSteerRejectedType ||
|
|
823
|
+
message.type === agent_messages_js_1.agentTurnInterruptAcceptedType ||
|
|
824
|
+
message.type === agent_messages_js_1.agentTurnInterruptedType) {
|
|
825
|
+
this.appendMessage(event);
|
|
741
826
|
return;
|
|
742
827
|
}
|
|
743
828
|
if (isMergeableDelta(message)) {
|
|
@@ -751,6 +836,10 @@ class ChatThreadSession extends change_emitter_js_1.ChangeEmitter {
|
|
|
751
836
|
}
|
|
752
837
|
return;
|
|
753
838
|
}
|
|
839
|
+
if (message.type === agent_messages_js_1.agentUsageUpdatedType) {
|
|
840
|
+
this.appendMessage(event);
|
|
841
|
+
return;
|
|
842
|
+
}
|
|
754
843
|
if (message instanceof agent_messages_js_1.AgentClientToolCallRequested) {
|
|
755
844
|
this.appendMessage(event);
|
|
756
845
|
}
|
|
@@ -803,7 +892,7 @@ class ChatThreadSession extends change_emitter_js_1.ChangeEmitter {
|
|
|
803
892
|
const existing = this._messages[existingIndex].message;
|
|
804
893
|
const merged = mergeDeltaMessage(existing, message);
|
|
805
894
|
if (merged != null) {
|
|
806
|
-
this._messages[existingIndex] = new AgentMessageEvent({ message: merged, attachment: event.attachment });
|
|
895
|
+
this._messages[existingIndex] = new AgentMessageEvent({ message: merged, createdAt: event.createdAt, attachment: event.attachment });
|
|
807
896
|
}
|
|
808
897
|
}
|
|
809
898
|
indexMessagesFrom(start) {
|
|
@@ -968,6 +1057,16 @@ function normalizedString(value) {
|
|
|
968
1057
|
const normalized = value?.trim();
|
|
969
1058
|
return normalized == null || normalized === "" ? undefined : normalized;
|
|
970
1059
|
}
|
|
1060
|
+
function dateOrNull(value) {
|
|
1061
|
+
if (value instanceof Date && !Number.isNaN(value.getTime())) {
|
|
1062
|
+
return value;
|
|
1063
|
+
}
|
|
1064
|
+
if (typeof value !== "string" || value.trim() === "") {
|
|
1065
|
+
return undefined;
|
|
1066
|
+
}
|
|
1067
|
+
const parsed = new Date(value);
|
|
1068
|
+
return Number.isNaN(parsed.getTime()) ? undefined : parsed;
|
|
1069
|
+
}
|
|
971
1070
|
function nonEmptyTrimmed(value) {
|
|
972
1071
|
const normalized = value?.trim();
|
|
973
1072
|
return normalized == null || normalized === "" ? undefined : normalized;
|
|
@@ -313,10 +313,12 @@ class AgentThreadStorageRepository extends ThreadStorageRepository {
|
|
|
313
313
|
this.handleEvent(next.value);
|
|
314
314
|
}
|
|
315
315
|
})();
|
|
316
|
-
|
|
316
|
+
const ready = new Promise((resolve) => {
|
|
317
317
|
this.pendingOpen = { resolve };
|
|
318
|
-
void this.requestList();
|
|
319
318
|
});
|
|
319
|
+
await this.chatClient.sendAgentMessage(new agent_messages_js_1.WatchThreads(), { ignoreOffline: true });
|
|
320
|
+
await this.requestList();
|
|
321
|
+
await ready;
|
|
320
322
|
}
|
|
321
323
|
async close() {
|
|
322
324
|
this.closed = true;
|
|
@@ -325,6 +327,7 @@ class AgentThreadStorageRepository extends ThreadStorageRepository {
|
|
|
325
327
|
this.pendingListMessageId = undefined;
|
|
326
328
|
this.pendingOpen?.resolve();
|
|
327
329
|
this.pendingOpen = undefined;
|
|
330
|
+
await this.chatClient.sendAgentMessage(new agent_messages_js_1.UnwatchThreads(), { ignoreOffline: true }).catch(() => undefined);
|
|
328
331
|
}
|
|
329
332
|
entries() {
|
|
330
333
|
return [...this.entriesByPath.values()];
|
|
@@ -19,6 +19,8 @@ export declare const agentParticipantDisconnectType = "meshagent.agent.participa
|
|
|
19
19
|
export declare const agentThreadDeleteType = "meshagent.agent.thread.delete";
|
|
20
20
|
export declare const agentThreadRenameType = "meshagent.agent.thread.rename";
|
|
21
21
|
export declare const agentThreadListType = "meshagent.agent.thread.list";
|
|
22
|
+
export declare const agentThreadWatchType = "meshagent.agent.thread.watch";
|
|
23
|
+
export declare const agentThreadUnwatchType = "meshagent.agent.thread.unwatch";
|
|
22
24
|
export declare const agentThreadListedType = "meshagent.agent.thread.listed";
|
|
23
25
|
export declare const agentThreadCreatedType = "meshagent.agent.thread.created";
|
|
24
26
|
export declare const agentThreadUpdatedType = "meshagent.agent.thread.updated";
|
|
@@ -239,7 +241,8 @@ export declare abstract class AgentMessage {
|
|
|
239
241
|
readonly type: string;
|
|
240
242
|
readonly messageId: string;
|
|
241
243
|
readonly senderName?: string;
|
|
242
|
-
|
|
244
|
+
readonly createdAt: string;
|
|
245
|
+
protected constructor({ type, messageId, message_id, senderName, sender_name, createdAt, created_at }: JsonMap);
|
|
243
246
|
toJson(): JsonMap;
|
|
244
247
|
static fromJson(json: JsonMap): AgentMessage;
|
|
245
248
|
}
|
|
@@ -272,6 +275,8 @@ export declare const ParticipantDisconnect: MessageCtor;
|
|
|
272
275
|
export declare const DeleteThread: MessageCtor;
|
|
273
276
|
export declare const RenameThread: MessageCtor;
|
|
274
277
|
export declare const ListThreads: MessageCtor;
|
|
278
|
+
export declare const WatchThreads: MessageCtor;
|
|
279
|
+
export declare const UnwatchThreads: MessageCtor;
|
|
275
280
|
export declare const ThreadsListed: MessageCtor;
|
|
276
281
|
export declare const ThreadCreated: MessageCtor;
|
|
277
282
|
export declare const ThreadUpdated: MessageCtor;
|
|
@@ -18,6 +18,8 @@ export const agentParticipantDisconnectType = "meshagent.agent.participant.disco
|
|
|
18
18
|
export const agentThreadDeleteType = "meshagent.agent.thread.delete";
|
|
19
19
|
export const agentThreadRenameType = "meshagent.agent.thread.rename";
|
|
20
20
|
export const agentThreadListType = "meshagent.agent.thread.list";
|
|
21
|
+
export const agentThreadWatchType = "meshagent.agent.thread.watch";
|
|
22
|
+
export const agentThreadUnwatchType = "meshagent.agent.thread.unwatch";
|
|
21
23
|
export const agentThreadListedType = "meshagent.agent.thread.listed";
|
|
22
24
|
export const agentThreadCreatedType = "meshagent.agent.thread.created";
|
|
23
25
|
export const agentThreadUpdatedType = "meshagent.agent.thread.updated";
|
|
@@ -631,16 +633,18 @@ function omitUndefined(value) {
|
|
|
631
633
|
return Object.fromEntries(Object.entries(value).filter(([, entry]) => entry !== undefined));
|
|
632
634
|
}
|
|
633
635
|
export class AgentMessage {
|
|
634
|
-
constructor({ type, messageId, message_id, senderName, sender_name }) {
|
|
636
|
+
constructor({ type, messageId, message_id, senderName, sender_name, createdAt, created_at }) {
|
|
635
637
|
this.type = String(type);
|
|
636
638
|
const resolvedMessageId = stringOrNull(messageId ?? message_id)?.trim();
|
|
637
639
|
this.messageId = resolvedMessageId == null || resolvedMessageId.length === 0 ? uuidv4() : resolvedMessageId;
|
|
638
640
|
this.senderName = stringOrNull(senderName ?? sender_name);
|
|
641
|
+
this.createdAt = stringOrNull(createdAt ?? created_at) ?? new Date().toISOString();
|
|
639
642
|
}
|
|
640
643
|
toJson() {
|
|
641
644
|
return {
|
|
642
645
|
type: this.type,
|
|
643
646
|
message_id: this.messageId,
|
|
647
|
+
created_at: this.createdAt,
|
|
644
648
|
...(this.senderName != null ? { sender_name: this.senderName } : {}),
|
|
645
649
|
};
|
|
646
650
|
}
|
|
@@ -704,6 +708,7 @@ function makeMessageClass({ type, base = "message", fields = [], }) {
|
|
|
704
708
|
const params = {
|
|
705
709
|
messageId: stringOrNull(json.message_id),
|
|
706
710
|
senderName: stringOrNull(json.sender_name),
|
|
711
|
+
createdAt: stringOrNull(json.created_at),
|
|
707
712
|
};
|
|
708
713
|
if (base !== "message") {
|
|
709
714
|
params.threadId = requiredString(json, "thread_id");
|
|
@@ -914,6 +919,8 @@ export const ParticipantDisconnect = makeMessageClass({ type: agentParticipantDi
|
|
|
914
919
|
export const DeleteThread = makeMessageClass({ type: agentThreadDeleteType, base: "thread" });
|
|
915
920
|
export const RenameThread = makeMessageClass({ type: agentThreadRenameType, base: "thread", fields: [s("name", "name", true)] });
|
|
916
921
|
export const ListThreads = makeMessageClass({ type: agentThreadListType, fields: [{ prop: "limit", json: "limit", from: (value) => intOrNull(value) ?? 200, default: () => 200, always: true }, { prop: "offset", json: "offset", from: (value) => intOrNull(value) ?? 0, default: () => 0, always: true }] });
|
|
922
|
+
export const WatchThreads = makeMessageClass({ type: agentThreadWatchType });
|
|
923
|
+
export const UnwatchThreads = makeMessageClass({ type: agentThreadUnwatchType });
|
|
917
924
|
export const ThreadsListed = makeMessageClass({ type: agentThreadListedType, fields: [s("sourceMessageId", "source_message_id", true), objList("threads", "threads", AgentThreadListEntry.fromJson, true), i("total"), i("offset"), i("limit")] });
|
|
918
925
|
export const ThreadCreated = makeMessageClass({ type: agentThreadCreatedType, fields: [obj("thread", "thread", AgentThreadListEntry.fromJson, true)] });
|
|
919
926
|
export const ThreadUpdated = makeMessageClass({ type: agentThreadUpdatedType, fields: [obj("thread", "thread", AgentThreadListEntry.fromJson, true)] });
|
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
import { RemoteParticipant } from "@meshagent/meshagent";
|
|
2
2
|
import type { RoomClient, Content } from "@meshagent/meshagent";
|
|
3
|
-
import { AgentMessage, AgentModelChanged, AgentThreadStatus, ModelsResponse, AgentConnectionStatus } from "./agent-messages.js";
|
|
3
|
+
import { AgentMessage, AgentModelChanged, AgentThreadStatus, ModelsResponse, ToolChoice, AgentConnectionStatus } from "./agent-messages.js";
|
|
4
4
|
import type { AgentPayload, JsonMap, ClientToolkitDescription } from "./agent-messages.js";
|
|
5
5
|
import { ChangeEmitter } from "./change-emitter.js";
|
|
6
6
|
export declare class AgentMessageEvent {
|
|
7
7
|
readonly message: AgentMessage;
|
|
8
|
+
readonly createdAt: Date;
|
|
8
9
|
readonly attachment?: Uint8Array;
|
|
9
|
-
constructor({ message, attachment }: {
|
|
10
|
+
constructor({ message, createdAt, attachment }: {
|
|
10
11
|
message: AgentMessage;
|
|
12
|
+
createdAt?: Date;
|
|
11
13
|
attachment?: Uint8Array;
|
|
12
14
|
});
|
|
13
15
|
get payload(): AgentPayload;
|
|
@@ -96,7 +98,7 @@ export declare abstract class BaseChatClient extends ChangeEmitter {
|
|
|
96
98
|
drainPendingEvents?: boolean;
|
|
97
99
|
}): ChatThreadSession;
|
|
98
100
|
private openSession;
|
|
99
|
-
startThread({ messageId, message, attachments, name, backend, provider, model, voice, outputModalities, realtimeProtocol, senderName, clientToolkits, omitContent, }: {
|
|
101
|
+
startThread({ messageId, message, attachments, name, backend, provider, model, voice, outputModalities, realtimeProtocol, senderName, clientToolkits, toolChoice, omitContent, }: {
|
|
100
102
|
messageId?: string;
|
|
101
103
|
message: string;
|
|
102
104
|
attachments: string[];
|
|
@@ -109,14 +111,17 @@ export declare abstract class BaseChatClient extends ChangeEmitter {
|
|
|
109
111
|
realtimeProtocol?: string;
|
|
110
112
|
senderName?: string;
|
|
111
113
|
clientToolkits?: ClientToolkitDescription[];
|
|
114
|
+
toolChoice?: ToolChoice;
|
|
112
115
|
omitContent?: boolean;
|
|
113
116
|
}): Promise<ChatThreadStartResult>;
|
|
117
|
+
private resolvedStartThreadMessage;
|
|
114
118
|
abstract sendAgentMessage(message: AgentMessage, options?: {
|
|
115
119
|
attachment?: Uint8Array;
|
|
116
120
|
ignoreOffline?: boolean;
|
|
117
121
|
}): Promise<void>;
|
|
118
122
|
private drainPendingSessionEvents;
|
|
119
|
-
handleAgentMessage(message: AgentMessage, { attachment }?: {
|
|
123
|
+
handleAgentMessage(message: AgentMessage, { createdAt, attachment }?: {
|
|
124
|
+
createdAt?: Date;
|
|
120
125
|
attachment?: Uint8Array;
|
|
121
126
|
}): void;
|
|
122
127
|
emitConnectionStatus({ status, message, reason, retryDelay, }: {
|
|
@@ -186,6 +191,7 @@ export declare class ChatThreadSession extends ChangeEmitter {
|
|
|
186
191
|
load?: boolean;
|
|
187
192
|
sinceTurn?: string;
|
|
188
193
|
}): Promise<void>;
|
|
194
|
+
private resetReplayState;
|
|
189
195
|
close(): Promise<void>;
|
|
190
196
|
requestModels({ ignoreOffline }?: {
|
|
191
197
|
ignoreOffline?: boolean;
|
|
@@ -202,7 +208,7 @@ export declare class ChatThreadSession extends ChangeEmitter {
|
|
|
202
208
|
requestId: string;
|
|
203
209
|
response: Content;
|
|
204
210
|
}): Promise<void>;
|
|
205
|
-
sendText({ messageId, text, attachments, steer, turnId, backend, provider, model, voice, outputModalities, senderName, clientToolkits, }: {
|
|
211
|
+
sendText({ messageId, text, attachments, steer, turnId, backend, provider, model, voice, outputModalities, senderName, clientToolkits, toolChoice, }: {
|
|
206
212
|
messageId?: string;
|
|
207
213
|
text: string;
|
|
208
214
|
attachments: string[];
|
|
@@ -215,6 +221,7 @@ export declare class ChatThreadSession extends ChangeEmitter {
|
|
|
215
221
|
outputModalities?: string[];
|
|
216
222
|
senderName?: string;
|
|
217
223
|
clientToolkits?: ClientToolkitDescription[];
|
|
224
|
+
toolChoice?: ToolChoice;
|
|
218
225
|
}): Promise<string>;
|
|
219
226
|
sendRealtimeAudioChunk({ chunk, format }: {
|
|
220
227
|
chunk: Uint8Array;
|