@mastra/react 1.7.0-alpha.0 → 1.7.0-alpha.10
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 +58 -14
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +58 -14
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
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;
|
|
@@ -2170,6 +2208,13 @@ const useChat = ({ agentId, resourceId, threadId, initialMessages, requestContex
|
|
|
2170
2208
|
pendingToolApprovalIdsRef.current.add(toolCallId);
|
|
2171
2209
|
setIsAwaitingToolApproval(true);
|
|
2172
2210
|
}
|
|
2211
|
+
if (runId) {
|
|
2212
|
+
if (!liveRunId.current || liveRunFinished.current) {
|
|
2213
|
+
liveRunId.current = runId;
|
|
2214
|
+
liveRunFinished.current = false;
|
|
2215
|
+
}
|
|
2216
|
+
if (liveRunId.current === runId) _currentRunId.current = runId;
|
|
2217
|
+
}
|
|
2173
2218
|
setIsRunning(false);
|
|
2174
2219
|
}
|
|
2175
2220
|
if (isTerminal) {
|
|
@@ -2216,13 +2261,12 @@ const useChat = ({ agentId, resourceId, threadId, initialMessages, requestContex
|
|
|
2216
2261
|
subscription.processDataStream({ onChunk: (chunk) => {
|
|
2217
2262
|
if (chunk.type === "thread-history") {
|
|
2218
2263
|
const history = resolveInitialMessages(chunk.payload.messages);
|
|
2219
|
-
const
|
|
2220
|
-
setMessages((current) => {
|
|
2221
|
-
|
|
2222
|
-
|
|
2223
|
-
|
|
2224
|
-
|
|
2225
|
-
});
|
|
2264
|
+
const previousHistory = lastHydration.current?.formattedMessages ?? [];
|
|
2265
|
+
setMessages((current) => mergeHistoryIntoConversation({
|
|
2266
|
+
conversation: current,
|
|
2267
|
+
history,
|
|
2268
|
+
previousHistory
|
|
2269
|
+
}));
|
|
2226
2270
|
setSubscriptionHistory({
|
|
2227
2271
|
key: `${agentId}:${resourceId ?? ""}:${threadId}`,
|
|
2228
2272
|
messages: chunk.payload.messages
|