@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.
@@ -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":"AAEA,OAAO,KAAK,EAAY,eAAe,EAA4B,MAAM,iCAAiC,CAAC;AAE3G,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAEnE,OAAO,KAAK,EAAE,SAAS,EAAiB,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAmBtF,OAAO,KAAK,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AA0JpF,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,eAAe,EAAE,CAAC;IACpC,6FAA6F;IAC7F,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC;;;;OAIG;IACH,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3D,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,0BAA0B,CAAC,EAAE,MAAM,IAAI,CAAC;IACxC;;;OAGG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,uEAAuE;IACvE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,OAAO,GAAG;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACrD;AAED,UAAU,UAAU;IAClB,gBAAgB,EAAE,eAAe,EAAE,CAAC;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC;AAED,MAAM,MAAM,eAAe,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,gBAAgB,CAAC,EAAE,eAAe,EAAE,CAAA;CAAE,GAAG,CACtF,CAAC;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,GAAG,IAAI,CAAC,YAAY,EAAE,kBAAkB,CAAC,CAAC,GAC/D,CAAC;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAAG,IAAI,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAC,GAC3D,CAAC;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GAAG,IAAI,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC,GAC7D,CAAC;IAAE,IAAI,CAAC,EAAE,SAAS,CAAA;CAAE,GAAG,IAAI,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAC,CAChE,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG;IACtC,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,eAAe,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;CAC3C,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,UAAU,GAAG;IACpC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9C,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;IAC1C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG;IACrC,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7D,CAAC;AAoDF,eAAO,MAAM,OAAO,wOAajB,eAAe;;qCAygCyC,eAAe;;;;;;;;;;;kCAzP7B,MAAM,eAAe,OAAO;kCAuE5B,MAAM;0CAoDE,MAAM;0CA2BN,MAAM;;;;oBA94BvB,UAAU,GAAG,UAAU;;;uCAy6BT,MAAM,UAAU,MAAM;uCAoCtB,MAAM,UAAU,MAAM;;;oBA18BtC,UAAU,GAAG,UAAU;;;CAojCxD,CAAC"}
@@ -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
@@ -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;
@@ -2171,6 +2209,13 @@ const useChat = ({ agentId, resourceId, threadId, initialMessages, requestContex
2171
2209
  pendingToolApprovalIdsRef.current.add(toolCallId);
2172
2210
  setIsAwaitingToolApproval(true);
2173
2211
  }
2212
+ if (runId) {
2213
+ if (!liveRunId.current || liveRunFinished.current) {
2214
+ liveRunId.current = runId;
2215
+ liveRunFinished.current = false;
2216
+ }
2217
+ if (liveRunId.current === runId) _currentRunId.current = runId;
2218
+ }
2174
2219
  setIsRunning(false);
2175
2220
  }
2176
2221
  if (isTerminal) {
@@ -2217,13 +2262,12 @@ const useChat = ({ agentId, resourceId, threadId, initialMessages, requestContex
2217
2262
  subscription.processDataStream({ onChunk: (chunk) => {
2218
2263
  if (chunk.type === "thread-history") {
2219
2264
  const history = resolveInitialMessages(chunk.payload.messages);
2220
- const previousById = new Map((lastHydration.current?.formattedMessages ?? []).map((message) => [message.id, message]));
2221
- setMessages((current) => {
2222
- const live = current.filter((message) => previousById.get(message.id) !== message);
2223
- const liveById = new Map(live.map((message) => [message.id, message]));
2224
- const historyIds = new Set(history.map((message) => message.id));
2225
- return [...history.map((message) => liveById.get(message.id) ?? message), ...live.filter((message) => !historyIds.has(message.id))];
2226
- });
2265
+ const previousHistory = lastHydration.current?.formattedMessages ?? [];
2266
+ setMessages((current) => mergeHistoryIntoConversation({
2267
+ conversation: current,
2268
+ history,
2269
+ previousHistory
2270
+ }));
2227
2271
  setSubscriptionHistory({
2228
2272
  key: `${agentId}:${resourceId ?? ""}:${threadId}`,
2229
2273
  messages: chunk.payload.messages