@meshagent/meshagent-agents 0.43.2 → 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.
@@ -1,6 +1,6 @@
1
1
  import { Field, Schema, Utf8, tableFromArrays, } from "apache-arrow";
2
2
  import { ChangeEmitter } from "./change-emitter.js";
3
- import { DeleteThread, ListThreads, RenameThread, } from "./agent-messages.js";
3
+ import { DeleteThread, ListThreads, RenameThread, UnwatchThreads, WatchThreads, } from "./agent-messages.js";
4
4
  export const defaultUntitledThreadName = "New Chat";
5
5
  const uuidPattern = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
6
6
  export class ThreadListEntry {
@@ -304,10 +304,12 @@ export class AgentThreadStorageRepository extends ThreadStorageRepository {
304
304
  this.handleEvent(next.value);
305
305
  }
306
306
  })();
307
- await new Promise((resolve) => {
307
+ const ready = new Promise((resolve) => {
308
308
  this.pendingOpen = { resolve };
309
- void this.requestList();
310
309
  });
310
+ await this.chatClient.sendAgentMessage(new WatchThreads(), { ignoreOffline: true });
311
+ await this.requestList();
312
+ await ready;
311
313
  }
312
314
  async close() {
313
315
  this.closed = true;
@@ -316,6 +318,7 @@ export class AgentThreadStorageRepository extends ThreadStorageRepository {
316
318
  this.pendingListMessageId = undefined;
317
319
  this.pendingOpen?.resolve();
318
320
  this.pendingOpen = undefined;
321
+ await this.chatClient.sendAgentMessage(new UnwatchThreads(), { ignoreOffline: true }).catch(() => undefined);
319
322
  }
320
323
  entries() {
321
324
  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";
@@ -170,6 +172,7 @@ export declare class AgentProviderInfo {
170
172
  readonly name: string;
171
173
  readonly friendlyName: string;
172
174
  readonly description?: string;
175
+ readonly backend?: string;
173
176
  readonly defaultModel: string;
174
177
  readonly models: AgentModelInfo[];
175
178
  constructor(params: JsonMap);
@@ -238,7 +241,8 @@ export declare abstract class AgentMessage {
238
241
  readonly type: string;
239
242
  readonly messageId: string;
240
243
  readonly senderName?: string;
241
- protected constructor({ type, messageId, message_id, senderName, sender_name }: JsonMap);
244
+ readonly createdAt: string;
245
+ protected constructor({ type, messageId, message_id, senderName, sender_name, createdAt, created_at }: JsonMap);
242
246
  toJson(): JsonMap;
243
247
  static fromJson(json: JsonMap): AgentMessage;
244
248
  }
@@ -271,6 +275,8 @@ export declare const ParticipantDisconnect: MessageCtor;
271
275
  export declare const DeleteThread: MessageCtor;
272
276
  export declare const RenameThread: MessageCtor;
273
277
  export declare const ListThreads: MessageCtor;
278
+ export declare const WatchThreads: MessageCtor;
279
+ export declare const UnwatchThreads: MessageCtor;
274
280
  export declare const ThreadsListed: MessageCtor;
275
281
  export declare const ThreadCreated: MessageCtor;
276
282
  export declare const ThreadUpdated: MessageCtor;
@@ -1,9 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.agentToolCallStartedType = exports.agentToolCallInProgressType = 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.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.StartThread = exports.AgentLLMMessage = 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 = void 0;
5
- exports.AgentToolCallLogDelta = exports.AgentToolCallArgumentsDelta = exports.AgentToolCallStarted = exports.AgentToolCallInProgress = 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.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 = 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 = 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";
@@ -492,6 +494,7 @@ class AgentProviderInfo {
492
494
  this.name = String(params.name);
493
495
  this.friendlyName = String(params.friendlyName ?? params.friendly_name);
494
496
  this.description = stringOrNull(params.description);
497
+ this.backend = stringOrNull(params.backend);
495
498
  this.defaultModel = String(params.defaultModel ?? params.default_model);
496
499
  this.models = Array.isArray(params.models) ? params.models.map((entry) => entry instanceof AgentModelInfo ? entry : AgentModelInfo.fromJson(requiredObjectValue(entry))) : [];
497
500
  }
@@ -503,6 +506,7 @@ class AgentProviderInfo {
503
506
  name: this.name,
504
507
  friendly_name: this.friendlyName,
505
508
  ...(this.description != null ? { description: this.description } : {}),
509
+ ...(this.backend != null ? { backend: this.backend } : {}),
506
510
  default_model: this.defaultModel,
507
511
  models: this.models.map((entry) => entry.toJson()),
508
512
  };
@@ -630,11 +634,12 @@ class AgentContextWindowUsage {
630
634
  this.compactionThreshold = intOrNull(params.compactionThreshold ?? params.compaction_threshold);
631
635
  }
632
636
  static fromJson(json) {
637
+ const usedTokens = intOrNull(json.used_tokens ?? json.usedTokens) ?? 0;
633
638
  return new AgentContextWindowUsage({
634
- usedTokens: requiredInt(json, "used_tokens"),
635
- totalTokens: intOrNull(json.total_tokens),
636
- compactionMode: stringOrNull(json.compaction_mode),
637
- compactionThreshold: intOrNull(json.compaction_threshold),
639
+ usedTokens,
640
+ totalTokens: intOrNull(json.total_tokens ?? json.totalTokens),
641
+ compactionMode: stringOrNull(json.compaction_mode ?? json.compactionMode),
642
+ compactionThreshold: intOrNull(json.compaction_threshold ?? json.compactionThreshold),
638
643
  });
639
644
  }
640
645
  toJson() {
@@ -651,16 +656,18 @@ function omitUndefined(value) {
651
656
  return Object.fromEntries(Object.entries(value).filter(([, entry]) => entry !== undefined));
652
657
  }
653
658
  class AgentMessage {
654
- constructor({ type, messageId, message_id, senderName, sender_name }) {
659
+ constructor({ type, messageId, message_id, senderName, sender_name, createdAt, created_at }) {
655
660
  this.type = String(type);
656
661
  const resolvedMessageId = stringOrNull(messageId ?? message_id)?.trim();
657
662
  this.messageId = resolvedMessageId == null || resolvedMessageId.length === 0 ? (0, uuid_1.v4)() : resolvedMessageId;
658
663
  this.senderName = stringOrNull(senderName ?? sender_name);
664
+ this.createdAt = stringOrNull(createdAt ?? created_at) ?? new Date().toISOString();
659
665
  }
660
666
  toJson() {
661
667
  return {
662
668
  type: this.type,
663
669
  message_id: this.messageId,
670
+ created_at: this.createdAt,
664
671
  ...(this.senderName != null ? { sender_name: this.senderName } : {}),
665
672
  };
666
673
  }
@@ -727,6 +734,7 @@ function makeMessageClass({ type, base = "message", fields = [], }) {
727
734
  const params = {
728
735
  messageId: stringOrNull(json.message_id),
729
736
  senderName: stringOrNull(json.sender_name),
737
+ createdAt: stringOrNull(json.created_at),
730
738
  };
731
739
  if (base !== "message") {
732
740
  params.threadId = requiredString(json, "thread_id");
@@ -878,6 +886,7 @@ const turnOptions = [
878
886
  s("turnId"),
879
887
  contentList("content"),
880
888
  s("provider"),
889
+ s("backend"),
881
890
  s("model"),
882
891
  s("voice"),
883
892
  sl("outputModalities"),
@@ -912,6 +921,7 @@ exports.StartThread = makeMessageClass({
912
921
  s("name"),
913
922
  s("realtimeProtocol"),
914
923
  s("provider"),
924
+ s("backend"),
915
925
  s("model"),
916
926
  s("voice"),
917
927
  sl("outputModalities"),
@@ -935,6 +945,8 @@ exports.ParticipantDisconnect = makeMessageClass({ type: exports.agentParticipan
935
945
  exports.DeleteThread = makeMessageClass({ type: exports.agentThreadDeleteType, base: "thread" });
936
946
  exports.RenameThread = makeMessageClass({ type: exports.agentThreadRenameType, base: "thread", fields: [s("name", "name", true)] });
937
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 });
938
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")] });
939
951
  exports.ThreadCreated = makeMessageClass({ type: exports.agentThreadCreatedType, fields: [obj("thread", "thread", AgentThreadListEntry.fromJson, true)] });
940
952
  exports.ThreadUpdated = makeMessageClass({ type: exports.agentThreadUpdatedType, fields: [obj("thread", "thread", AgentThreadListEntry.fromJson, true)] });
@@ -943,8 +955,8 @@ exports.CapabilitiesRequest = makeMessageClass({ type: exports.agentCapabilities
943
955
  exports.CapabilitiesResponse = makeMessageClass({ type: exports.agentCapabilitiesResponseType, base: "thread", fields: [s("sourceMessageId", "source_message_id", true), s("version", "version", true), objList("toolkits", "toolkits", ToolkitCapabilities.fromJson, true)] });
944
956
  exports.ModelsRequest = makeMessageClass({ type: exports.agentModelsRequestType });
945
957
  exports.ModelsResponse = makeMessageClass({ type: exports.agentModelsResponseType, fields: [s("sourceMessageId", "source_message_id", true), objList("providers", "providers", AgentProviderInfo.fromJson, true)] });
946
- exports.ChangeModel = makeMessageClass({ type: exports.agentModelChangeType, base: "thread", fields: [s("provider"), s("model"), s("voice")] });
947
- exports.AgentModelChanged = makeMessageClass({ type: exports.agentModelChangedType, base: "thread", fields: [s("sourceMessageId"), s("provider", "provider", true), s("model", "model", true), s("voice"), audioFormat("inputFormat"), audioFormat("outputFormat"), s("turnDetection"), sl("outputModalities", "output_modalities", ["text"], true), sl("realtimeProtocols", "realtime_protocols", [], true)] });
958
+ exports.ChangeModel = makeMessageClass({ type: exports.agentModelChangeType, base: "thread", fields: [s("backend"), s("provider"), s("model"), s("voice")] });
959
+ exports.AgentModelChanged = makeMessageClass({ type: exports.agentModelChangedType, base: "thread", fields: [s("sourceMessageId"), s("backend"), s("provider", "provider", true), s("model", "model", true), s("voice"), audioFormat("inputFormat"), audioFormat("outputFormat"), s("turnDetection"), sl("outputModalities", "output_modalities", ["text"], true), sl("realtimeProtocols", "realtime_protocols", [], true), { prop: "supportsAttachments", json: "supports_attachments", from: (value) => value === true, default: () => false }, sl("accepts", "accepts", [], true)] });
948
960
  exports.ThreadCleared = makeMessageClass({ type: exports.agentThreadClearedType, base: "thread", fields: [s("sourceMessageId", "source_message_id", true)] });
949
961
  exports.TurnStartAccepted = makeMessageClass({ type: exports.agentTurnStartAcceptedType, base: "thread", fields: [s("turnId"), s("sourceMessageId", "source_message_id", true), contentList("content")] });
950
962
  exports.TurnStartRejected = makeMessageClass({ type: exports.agentTurnStartRejectedType, base: "thread", fields: [s("sourceMessageId", "source_message_id", true), obj("error", "error", AgentError.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, 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;
@@ -78,6 +80,7 @@ export declare class ChatThreadStartResult {
78
80
  export declare abstract class BaseChatClient extends ChangeEmitter {
79
81
  private readonly sessionsByPath;
80
82
  private readonly pendingStartRequests;
83
+ private readonly pendingSessionEventsByPath;
81
84
  private readonly eventQueue;
82
85
  private _connectionStatus?;
83
86
  get events(): AsyncIterable<AgentMessageEvent>;
@@ -88,16 +91,19 @@ export declare abstract class BaseChatClient extends ChangeEmitter {
88
91
  agentParticipant(): RemoteParticipant | null;
89
92
  localParticipantName(): string | undefined;
90
93
  protected cleanParticipantName(value: string | undefined): string | undefined;
91
- openThread(threadPath: string, { load, sinceTurn, reloadIfOpen }?: {
94
+ openThread(threadPath: string, { load, sinceTurn, reloadIfOpen, drainPendingEvents, }?: {
92
95
  load?: boolean;
93
96
  sinceTurn?: string;
94
97
  reloadIfOpen?: boolean;
98
+ drainPendingEvents?: boolean;
95
99
  }): ChatThreadSession;
96
- startThread({ messageId, message, attachments, name, provider, model, voice, outputModalities, realtimeProtocol, senderName, clientToolkits, omitContent, }: {
100
+ private openSession;
101
+ startThread({ messageId, message, attachments, name, backend, provider, model, voice, outputModalities, realtimeProtocol, senderName, clientToolkits, toolChoice, omitContent, }: {
97
102
  messageId?: string;
98
103
  message: string;
99
104
  attachments: string[];
100
105
  name?: string;
106
+ backend?: string;
101
107
  provider?: string;
102
108
  model?: string;
103
109
  voice?: string;
@@ -105,13 +111,17 @@ export declare abstract class BaseChatClient extends ChangeEmitter {
105
111
  realtimeProtocol?: string;
106
112
  senderName?: string;
107
113
  clientToolkits?: ClientToolkitDescription[];
114
+ toolChoice?: ToolChoice;
108
115
  omitContent?: boolean;
109
116
  }): Promise<ChatThreadStartResult>;
117
+ private resolvedStartThreadMessage;
110
118
  abstract sendAgentMessage(message: AgentMessage, options?: {
111
119
  attachment?: Uint8Array;
112
120
  ignoreOffline?: boolean;
113
121
  }): Promise<void>;
114
- handleAgentMessage(message: AgentMessage, { attachment }?: {
122
+ private drainPendingSessionEvents;
123
+ handleAgentMessage(message: AgentMessage, { createdAt, attachment }?: {
124
+ createdAt?: Date;
115
125
  attachment?: Uint8Array;
116
126
  }): void;
117
127
  emitConnectionStatus({ status, message, reason, retryDelay, }: {
@@ -126,9 +136,7 @@ export declare class MessagingChatClient extends BaseChatClient {
126
136
  readonly room: RoomClient;
127
137
  readonly agentName?: string;
128
138
  private readonly pendingParticipantWaits;
129
- private readonly roomAbortController;
130
139
  private started;
131
- private roomPump?;
132
140
  constructor({ room, agentName }: {
133
141
  room: RoomClient;
134
142
  agentName?: string;
@@ -145,17 +153,24 @@ export declare class MessagingChatClient extends BaseChatClient {
145
153
  ignoreOffline?: boolean;
146
154
  }): Promise<void>;
147
155
  private readonly onMessagingChanged;
148
- private consumeRoomEvents;
149
- private onRoomEvent;
156
+ private readonly onMessagingMessage;
150
157
  }
151
158
  export declare class ChatThreadSession extends ChangeEmitter {
152
159
  private readonly client;
153
160
  readonly threadPath: string;
154
161
  private readonly _messages;
162
+ private readonly messageIndexes;
163
+ private readonly localAgentMessageIds;
164
+ private readonly pendingLocalInputMessageIds;
165
+ private readonly mergedDeltaMessageIds;
155
166
  private readonly pendingInputsById;
156
167
  private openState;
157
168
  private loadStateValue;
158
169
  private lastCompletedTurnIdValue?;
170
+ private activeTurnIdValue?;
171
+ private threadStatusValue?;
172
+ private currentModelValue?;
173
+ private modelsResponseValue?;
159
174
  private lastAgentMessageType?;
160
175
  private lastAgentMessageAt?;
161
176
  constructor({ client, threadPath }: {
@@ -168,15 +183,21 @@ export declare class ChatThreadSession extends ChangeEmitter {
168
183
  get loadState(): ChatThreadSessionLoadState;
169
184
  get isLoading(): boolean;
170
185
  get lastCompletedTurnId(): string | undefined;
186
+ get activeTurnId(): string | undefined;
187
+ get threadStatus(): InstanceType<typeof AgentThreadStatus> | undefined;
188
+ get currentModel(): InstanceType<typeof AgentModelChanged> | undefined;
189
+ get modelsResponse(): InstanceType<typeof ModelsResponse> | undefined;
171
190
  open({ load, sinceTurn }?: {
172
191
  load?: boolean;
173
192
  sinceTurn?: string;
174
193
  }): Promise<void>;
194
+ private resetReplayState;
175
195
  close(): Promise<void>;
176
196
  requestModels({ ignoreOffline }?: {
177
197
  ignoreOffline?: boolean;
178
198
  }): Promise<void>;
179
- changeModel({ provider, model, voice }: {
199
+ changeModel({ backend, provider, model, voice }: {
200
+ backend?: string;
180
201
  provider: string;
181
202
  model: string;
182
203
  voice?: string;
@@ -187,18 +208,20 @@ export declare class ChatThreadSession extends ChangeEmitter {
187
208
  requestId: string;
188
209
  response: Content;
189
210
  }): Promise<void>;
190
- sendText({ messageId, text, attachments, steer, turnId, provider, model, voice, outputModalities, senderName, clientToolkits, }: {
211
+ sendText({ messageId, text, attachments, steer, turnId, backend, provider, model, voice, outputModalities, senderName, clientToolkits, toolChoice, }: {
191
212
  messageId?: string;
192
213
  text: string;
193
214
  attachments: string[];
194
215
  steer?: boolean;
195
216
  turnId?: string;
217
+ backend?: string;
196
218
  provider?: string;
197
219
  model?: string;
198
220
  voice?: string;
199
221
  outputModalities?: string[];
200
222
  senderName?: string;
201
223
  clientToolkits?: ClientToolkitDescription[];
224
+ toolChoice?: ToolChoice;
202
225
  }): Promise<string>;
203
226
  sendRealtimeAudioChunk({ chunk, format }: {
204
227
  chunk: Uint8Array;
@@ -214,6 +237,14 @@ export declare class ChatThreadSession extends ChangeEmitter {
214
237
  deleteThread(threadPath: string): Promise<void>;
215
238
  renameThread(threadPath: string, name: string): Promise<void>;
216
239
  addAgentMessage(event: AgentMessageEvent): void;
240
+ private updateSessionState;
241
+ private updatePendingInputsForMessage;
242
+ private appendRenderableMessage;
243
+ private appendMessage;
244
+ private upsertItemMessage;
245
+ private appendOrMergeDelta;
246
+ private indexMessagesFrom;
247
+ private applyActiveModel;
217
248
  markClosed({ notify }?: {
218
249
  notify?: boolean;
219
250
  }): void;