@mastra/react 1.7.0-alpha.9 → 1.7.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/dist/agent/hooks.d.ts.map +1 -1
- package/dist/agent/merge-history.d.ts +7 -0
- package/dist/agent/merge-history.d.ts.map +1 -0
- package/dist/index.cjs +51 -14
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +51 -14
- package/dist/index.js.map +1 -1
- package/package.json +5 -5
package/dist/index.js
CHANGED
|
@@ -1871,6 +1871,46 @@ const extractRunIdFromMessages = (messages) => {
|
|
|
1871
1871
|
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;
|
|
1872
1872
|
};
|
|
1873
1873
|
//#endregion
|
|
1874
|
+
//#region src/agent/merge-history.ts
|
|
1875
|
+
const liveClientMessageId = (message) => {
|
|
1876
|
+
const clientMessageId = message.content.metadata?.[CLIENT_MESSAGE_ID_KEY];
|
|
1877
|
+
return typeof clientMessageId === "string" ? clientMessageId : void 0;
|
|
1878
|
+
};
|
|
1879
|
+
const storedClientMessageId = (message) => {
|
|
1880
|
+
const signal = message.content.metadata?.signal;
|
|
1881
|
+
const clientMessageId = isRecord$1(signal) && isRecord$1(signal.metadata) ? signal.metadata[CLIENT_MESSAGE_ID_KEY] : void 0;
|
|
1882
|
+
return typeof clientMessageId === "string" ? clientMessageId : void 0;
|
|
1883
|
+
};
|
|
1884
|
+
const mergeHistoryIntoConversation = ({ conversation, history, previousHistory }) => {
|
|
1885
|
+
const previousById = new Map(previousHistory.map((message) => [message.id, message]));
|
|
1886
|
+
const live = conversation.filter((message) => previousById.get(message.id) !== message);
|
|
1887
|
+
const liveById = new Map(live.map((message) => [message.id, message]));
|
|
1888
|
+
const liveClientMessageIds = new Set(live.flatMap((message) => liveClientMessageId(message) ?? []));
|
|
1889
|
+
const historyIds = new Set(history.map((message) => message.id));
|
|
1890
|
+
const storedClientMessageIds = new Set(history.flatMap((message) => storedClientMessageId(message) ?? []));
|
|
1891
|
+
const mergedHistory = history.map((message) => {
|
|
1892
|
+
const liveCopy = liveById.get(message.id);
|
|
1893
|
+
if (liveCopy) return liveCopy;
|
|
1894
|
+
const clientMessageId = storedClientMessageId(message);
|
|
1895
|
+
if (!clientMessageId || !liveClientMessageIds.has(clientMessageId)) return message;
|
|
1896
|
+
return {
|
|
1897
|
+
...message,
|
|
1898
|
+
content: {
|
|
1899
|
+
...message.content,
|
|
1900
|
+
metadata: {
|
|
1901
|
+
...message.content.metadata,
|
|
1902
|
+
[CLIENT_MESSAGE_ID_KEY]: clientMessageId
|
|
1903
|
+
}
|
|
1904
|
+
}
|
|
1905
|
+
};
|
|
1906
|
+
});
|
|
1907
|
+
const unstoredLive = live.filter((message) => {
|
|
1908
|
+
const clientMessageId = liveClientMessageId(message);
|
|
1909
|
+
return !historyIds.has(message.id) && !(clientMessageId && storedClientMessageIds.has(clientMessageId));
|
|
1910
|
+
});
|
|
1911
|
+
return [...mergedHistory, ...unstoredLive];
|
|
1912
|
+
};
|
|
1913
|
+
//#endregion
|
|
1874
1914
|
//#region src/agent/hooks.ts
|
|
1875
1915
|
const extractPendingToolApprovalIdsFromMessages = (messages, runId) => {
|
|
1876
1916
|
const pendingToolApprovalIds = /* @__PURE__ */ new Set();
|
|
@@ -2027,13 +2067,11 @@ const useChat = ({ agentId, resourceId, threadId, initialMessages, requestContex
|
|
|
2027
2067
|
formattedMessages
|
|
2028
2068
|
};
|
|
2029
2069
|
if (sameThread) {
|
|
2030
|
-
|
|
2031
|
-
|
|
2032
|
-
|
|
2033
|
-
|
|
2034
|
-
|
|
2035
|
-
return [...formattedMessages.map((message) => liveById.get(message.id) ?? message), ...live.filter((message) => !historyIds.has(message.id))];
|
|
2036
|
-
});
|
|
2070
|
+
setMessages((current) => mergeHistoryIntoConversation({
|
|
2071
|
+
conversation: current,
|
|
2072
|
+
history: formattedMessages,
|
|
2073
|
+
previousHistory: previous.formattedMessages
|
|
2074
|
+
}));
|
|
2037
2075
|
setTasks(liveTasks.current ?? extractLatestTasksFromMessages(formattedMessages));
|
|
2038
2076
|
const historyRunId = extractRunIdFromMessages(formattedMessages);
|
|
2039
2077
|
if (liveRunFinished.current) return;
|
|
@@ -2223,13 +2261,12 @@ const useChat = ({ agentId, resourceId, threadId, initialMessages, requestContex
|
|
|
2223
2261
|
subscription.processDataStream({ onChunk: (chunk) => {
|
|
2224
2262
|
if (chunk.type === "thread-history") {
|
|
2225
2263
|
const history = resolveInitialMessages(chunk.payload.messages);
|
|
2226
|
-
const
|
|
2227
|
-
setMessages((current) => {
|
|
2228
|
-
|
|
2229
|
-
|
|
2230
|
-
|
|
2231
|
-
|
|
2232
|
-
});
|
|
2264
|
+
const previousHistory = lastHydration.current?.formattedMessages ?? [];
|
|
2265
|
+
setMessages((current) => mergeHistoryIntoConversation({
|
|
2266
|
+
conversation: current,
|
|
2267
|
+
history,
|
|
2268
|
+
previousHistory
|
|
2269
|
+
}));
|
|
2233
2270
|
setSubscriptionHistory({
|
|
2234
2271
|
key: `${agentId}:${resourceId ?? ""}:${threadId}`,
|
|
2235
2272
|
messages: chunk.payload.messages
|