@meshagent/meshagent-agents 0.43.3 → 0.44.1
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 +14 -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 +23 -5
- package/dist/browser/chat-client.js +237 -30
- package/dist/browser/thread-storage.d.ts +1 -0
- package/dist/browser/thread-storage.js +18 -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 +23 -5
- package/dist/esm/chat-client.js +238 -31
- package/dist/esm/thread-storage.d.ts +1 -0
- package/dist/esm/thread-storage.js +19 -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 +23 -5
- package/dist/node/chat-client.js +237 -30
- package/dist/node/thread-storage.d.ts +1 -0
- package/dist/node/thread-storage.js +18 -2
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,17 @@
|
|
|
1
|
+
## [0.44.1]
|
|
2
|
+
- Stability
|
|
3
|
+
|
|
4
|
+
## [0.44.0]
|
|
5
|
+
- TypeScript agent clients now support thread watch/unwatch, multiple thread storages, and richer start-thread payloads, including tool-choice metadata.
|
|
6
|
+
- 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.
|
|
7
|
+
- Tailwind chat UI now tracks thread status, reasoning traces, shell output, file attachments, and improved file preview behavior for streamed agent content.
|
|
8
|
+
|
|
9
|
+
## [0.43.4]
|
|
10
|
+
- TypeScript agent messages and events now carry `created_at`, parse it on input, and preserve it when streamed deltas are merged.
|
|
11
|
+
- 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.
|
|
12
|
+
- Live chat test coverage expanded for thread creation, acknowledgements, steer/interrupt flows, and client tool request handling.
|
|
13
|
+
- The workspace app template was rebranded from the meeting app naming and its deploy tag was updated accordingly.
|
|
14
|
+
|
|
1
15
|
## [0.43.3]
|
|
2
16
|
- Stability
|
|
3
17
|
|
|
@@ -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, }: {
|
|
@@ -132,6 +137,11 @@ export declare class MessagingChatClient extends BaseChatClient {
|
|
|
132
137
|
readonly agentName?: string;
|
|
133
138
|
private readonly pendingParticipantWaits;
|
|
134
139
|
private started;
|
|
140
|
+
private agentParticipantId?;
|
|
141
|
+
private hasConnected;
|
|
142
|
+
private waitingForParticipant;
|
|
143
|
+
private roomAbortController?;
|
|
144
|
+
private messagingListenersAttached;
|
|
135
145
|
constructor({ room, agentName }: {
|
|
136
146
|
room: RoomClient;
|
|
137
147
|
agentName?: string;
|
|
@@ -139,6 +149,8 @@ export declare class MessagingChatClient extends BaseChatClient {
|
|
|
139
149
|
localParticipantName(): string | undefined;
|
|
140
150
|
start(): Promise<void>;
|
|
141
151
|
stop(): Promise<void>;
|
|
152
|
+
private attachMessagingListeners;
|
|
153
|
+
private detachMessagingListeners;
|
|
142
154
|
agentParticipant(): RemoteParticipant | null;
|
|
143
155
|
waitForAgentParticipant({ waitKey }?: {
|
|
144
156
|
waitKey?: string;
|
|
@@ -148,6 +160,10 @@ export declare class MessagingChatClient extends BaseChatClient {
|
|
|
148
160
|
ignoreOffline?: boolean;
|
|
149
161
|
}): Promise<void>;
|
|
150
162
|
private readonly onMessagingChanged;
|
|
163
|
+
private readonly onMessagingParticipantChanged;
|
|
164
|
+
private readonly onMessagingParticipantRemoved;
|
|
165
|
+
private startRoomStatusListener;
|
|
166
|
+
private reopenOpenSessions;
|
|
151
167
|
private readonly onMessagingMessage;
|
|
152
168
|
}
|
|
153
169
|
export declare class ChatThreadSession extends ChangeEmitter {
|
|
@@ -186,6 +202,7 @@ export declare class ChatThreadSession extends ChangeEmitter {
|
|
|
186
202
|
load?: boolean;
|
|
187
203
|
sinceTurn?: string;
|
|
188
204
|
}): Promise<void>;
|
|
205
|
+
private resetReplayState;
|
|
189
206
|
close(): Promise<void>;
|
|
190
207
|
requestModels({ ignoreOffline }?: {
|
|
191
208
|
ignoreOffline?: boolean;
|
|
@@ -202,7 +219,7 @@ export declare class ChatThreadSession extends ChangeEmitter {
|
|
|
202
219
|
requestId: string;
|
|
203
220
|
response: Content;
|
|
204
221
|
}): Promise<void>;
|
|
205
|
-
sendText({ messageId, text, attachments, steer, turnId, backend, provider, model, voice, outputModalities, senderName, clientToolkits, }: {
|
|
222
|
+
sendText({ messageId, text, attachments, steer, turnId, backend, provider, model, voice, outputModalities, senderName, clientToolkits, toolChoice, }: {
|
|
206
223
|
messageId?: string;
|
|
207
224
|
text: string;
|
|
208
225
|
attachments: string[];
|
|
@@ -215,6 +232,7 @@ export declare class ChatThreadSession extends ChangeEmitter {
|
|
|
215
232
|
outputModalities?: string[];
|
|
216
233
|
senderName?: string;
|
|
217
234
|
clientToolkits?: ClientToolkitDescription[];
|
|
235
|
+
toolChoice?: ToolChoice;
|
|
218
236
|
}): Promise<string>;
|
|
219
237
|
sendRealtimeAudioChunk({ chunk, format }: {
|
|
220
238
|
chunk: Uint8Array;
|