@mastra/react 1.7.0-alpha.9 → 1.7.1-alpha.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 +1 @@
1
- {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/agent/hooks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/agent/hooks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { MastraDBMessage } from '@mastra/core/agent/message-list';
2
+ export declare const mergeHistoryIntoConversation: ({ conversation, history, previousHistory, }: {
3
+ conversation: MastraDBMessage[];
4
+ history: MastraDBMessage[];
5
+ previousHistory: MastraDBMessage[];
6
+ }) => MastraDBMessage[];
7
+ //# sourceMappingURL=merge-history.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge-history.d.ts","sourceRoot":"","sources":["../../src/agent/merge-history.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAiBvE,eAAO,MAAM,4BAA4B,gDAItC;IACD,YAAY,EAAE,eAAe,EAAE,CAAC;IAChC,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,eAAe,EAAE,eAAe,EAAE,CAAC;CACpC,KAAG,eAAe,EA4BlB,CAAC"}
package/dist/index.cjs CHANGED
@@ -298,7 +298,7 @@ const mergeBgTaskMetadata = (existing, mode, args, otherMetadata) => {
298
298
  * `mapWorkflowStreamChunkToWatchResult` from the previous accumulator.
299
299
  */
300
300
  const mapWorkflowStreamChunkToWatchResult = (prev, chunk) => {
301
- const previous = prev ?? {
301
+ const previous = prev && typeof prev === "object" && prev.steps && typeof prev.steps === "object" ? prev : {
302
302
  status: "running",
303
303
  input: void 0,
304
304
  steps: {}
@@ -1872,6 +1872,46 @@ const extractRunIdFromMessages = (messages) => {
1872
1872
  for (const message of messages) for (const source of getRunIdMetadataSources(message.content?.metadata)) for (const entry of Object.values(source)) if (isRecord(entry) && typeof entry.runId === "string" && entry.runId.length > 0) return entry.runId;
1873
1873
  };
1874
1874
  //#endregion
1875
+ //#region src/agent/merge-history.ts
1876
+ const liveClientMessageId = (message) => {
1877
+ const clientMessageId = message.content.metadata?.[CLIENT_MESSAGE_ID_KEY];
1878
+ return typeof clientMessageId === "string" ? clientMessageId : void 0;
1879
+ };
1880
+ const storedClientMessageId = (message) => {
1881
+ const signal = message.content.metadata?.signal;
1882
+ const clientMessageId = isRecord$1(signal) && isRecord$1(signal.metadata) ? signal.metadata[CLIENT_MESSAGE_ID_KEY] : void 0;
1883
+ return typeof clientMessageId === "string" ? clientMessageId : void 0;
1884
+ };
1885
+ const mergeHistoryIntoConversation = ({ conversation, history, previousHistory }) => {
1886
+ const previousById = new Map(previousHistory.map((message) => [message.id, message]));
1887
+ const live = conversation.filter((message) => previousById.get(message.id) !== message);
1888
+ const liveById = new Map(live.map((message) => [message.id, message]));
1889
+ const liveClientMessageIds = new Set(live.flatMap((message) => liveClientMessageId(message) ?? []));
1890
+ const historyIds = new Set(history.map((message) => message.id));
1891
+ const storedClientMessageIds = new Set(history.flatMap((message) => storedClientMessageId(message) ?? []));
1892
+ const mergedHistory = history.map((message) => {
1893
+ const liveCopy = liveById.get(message.id);
1894
+ if (liveCopy) return liveCopy;
1895
+ const clientMessageId = storedClientMessageId(message);
1896
+ if (!clientMessageId || !liveClientMessageIds.has(clientMessageId)) return message;
1897
+ return {
1898
+ ...message,
1899
+ content: {
1900
+ ...message.content,
1901
+ metadata: {
1902
+ ...message.content.metadata,
1903
+ [CLIENT_MESSAGE_ID_KEY]: clientMessageId
1904
+ }
1905
+ }
1906
+ };
1907
+ });
1908
+ const unstoredLive = live.filter((message) => {
1909
+ const clientMessageId = liveClientMessageId(message);
1910
+ return !historyIds.has(message.id) && !(clientMessageId && storedClientMessageIds.has(clientMessageId));
1911
+ });
1912
+ return [...mergedHistory, ...unstoredLive];
1913
+ };
1914
+ //#endregion
1875
1915
  //#region src/agent/hooks.ts
1876
1916
  const extractPendingToolApprovalIdsFromMessages = (messages, runId) => {
1877
1917
  const pendingToolApprovalIds = /* @__PURE__ */ new Set();
@@ -2028,13 +2068,11 @@ const useChat = ({ agentId, resourceId, threadId, initialMessages, requestContex
2028
2068
  formattedMessages
2029
2069
  };
2030
2070
  if (sameThread) {
2031
- const previousById = new Map(previous.formattedMessages.map((message) => [message.id, message]));
2032
- setMessages((current) => {
2033
- const live = current.filter((message) => previousById.get(message.id) !== message);
2034
- const liveById = new Map(live.map((message) => [message.id, message]));
2035
- const historyIds = new Set(formattedMessages.map((message) => message.id));
2036
- return [...formattedMessages.map((message) => liveById.get(message.id) ?? message), ...live.filter((message) => !historyIds.has(message.id))];
2037
- });
2071
+ setMessages((current) => mergeHistoryIntoConversation({
2072
+ conversation: current,
2073
+ history: formattedMessages,
2074
+ previousHistory: previous.formattedMessages
2075
+ }));
2038
2076
  setTasks(liveTasks.current ?? extractLatestTasksFromMessages(formattedMessages));
2039
2077
  const historyRunId = extractRunIdFromMessages(formattedMessages);
2040
2078
  if (liveRunFinished.current) return;
@@ -2224,13 +2262,12 @@ const useChat = ({ agentId, resourceId, threadId, initialMessages, requestContex
2224
2262
  subscription.processDataStream({ onChunk: (chunk) => {
2225
2263
  if (chunk.type === "thread-history") {
2226
2264
  const history = resolveInitialMessages(chunk.payload.messages);
2227
- const previousById = new Map((lastHydration.current?.formattedMessages ?? []).map((message) => [message.id, message]));
2228
- setMessages((current) => {
2229
- const live = current.filter((message) => previousById.get(message.id) !== message);
2230
- const liveById = new Map(live.map((message) => [message.id, message]));
2231
- const historyIds = new Set(history.map((message) => message.id));
2232
- return [...history.map((message) => liveById.get(message.id) ?? message), ...live.filter((message) => !historyIds.has(message.id))];
2233
- });
2265
+ const previousHistory = lastHydration.current?.formattedMessages ?? [];
2266
+ setMessages((current) => mergeHistoryIntoConversation({
2267
+ conversation: current,
2268
+ history,
2269
+ previousHistory
2270
+ }));
2234
2271
  setSubscriptionHistory({
2235
2272
  key: `${agentId}:${resourceId ?? ""}:${threadId}`,
2236
2273
  messages: chunk.payload.messages