@mastra/server 1.18.1-alpha.0 → 1.19.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.
Files changed (31) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/dist/{chunk-U5XW3WOS.js → chunk-5CDCKTHB.js} +38 -20
  3. package/dist/chunk-5CDCKTHB.js.map +1 -0
  4. package/dist/{chunk-POOOTRUM.cjs → chunk-DAEHQAZC.cjs} +38 -20
  5. package/dist/chunk-DAEHQAZC.cjs.map +1 -0
  6. package/dist/{chunk-FTGC7KXM.js → chunk-TV5D5RRD.js} +132 -17
  7. package/dist/chunk-TV5D5RRD.js.map +1 -0
  8. package/dist/{chunk-MS7GNCN3.cjs → chunk-YSCEBPUJ.cjs} +145 -30
  9. package/dist/chunk-YSCEBPUJ.cjs.map +1 -0
  10. package/dist/docs/SKILL.md +1 -1
  11. package/dist/docs/assets/SOURCE_MAP.json +1 -1
  12. package/dist/docs/references/docs-server-custom-adapters.md +3 -1
  13. package/dist/{observational-memory-SASGM6OW-3S6D4TAF.js → observational-memory-B25SASRW-L4GYD2ZN.js} +3 -3
  14. package/dist/{observational-memory-SASGM6OW-3S6D4TAF.js.map → observational-memory-B25SASRW-L4GYD2ZN.js.map} +1 -1
  15. package/dist/{observational-memory-SASGM6OW-2G3RBRTW.cjs → observational-memory-B25SASRW-T76NSRNU.cjs} +26 -26
  16. package/dist/{observational-memory-SASGM6OW-2G3RBRTW.cjs.map → observational-memory-B25SASRW-T76NSRNU.cjs.map} +1 -1
  17. package/dist/server/handlers/agent-builder.cjs +16 -16
  18. package/dist/server/handlers/agent-builder.js +1 -1
  19. package/dist/server/handlers.cjs +2 -2
  20. package/dist/server/handlers.js +1 -1
  21. package/dist/server/server-adapter/index.cjs +24 -16
  22. package/dist/server/server-adapter/index.cjs.map +1 -1
  23. package/dist/server/server-adapter/index.js +10 -2
  24. package/dist/server/server-adapter/index.js.map +1 -1
  25. package/dist/server/server-adapter/routes/observability.d.ts +881 -119
  26. package/dist/server/server-adapter/routes/observability.d.ts.map +1 -1
  27. package/package.json +8 -8
  28. package/dist/chunk-FTGC7KXM.js.map +0 -1
  29. package/dist/chunk-MS7GNCN3.cjs.map +0 -1
  30. package/dist/chunk-POOOTRUM.cjs.map +0 -1
  31. package/dist/chunk-U5XW3WOS.js.map +0 -1
@@ -1,10 +1,10 @@
1
1
  import { openai } from './chunk-PALNMAC6.js';
2
2
  import { __commonJS as __commonJS$3, require_token_error as require_token_error$2, __toESM as __toESM$3 } from './chunk-JWVHBH4H.js';
3
+ import { actionIdPathParams, actionRunPathParams, streamAgentBuilderBodySchema, startAsyncAgentBuilderBodySchema, resumeAgentBuilderBodySchema, streamLegacyAgentBuilderBodySchema } from './chunk-S7PYDU5I.js';
3
4
  import { __commonJS as __commonJS$1, require_token_error, __toESM } from './chunk-BZZVTO7B.js';
4
5
  import { __commonJS as __commonJS$2, require_token_error as require_token_error$1, __toESM as __toESM$1 } from './chunk-PWAXLHKP.js';
5
- import { e, truncateStringByTokens, estimateTokenCount, resolveToolResultValue, formatToolResultForObserver } from './chunk-U5XW3WOS.js';
6
+ import { e, truncateStringByTokens, estimateTokenCount, resolveToolResultValue, formatToolResultForObserver } from './chunk-5CDCKTHB.js';
6
7
  import { LIST_WORKFLOWS_ROUTE, GET_WORKFLOW_BY_ID_ROUTE, LIST_WORKFLOW_RUNS_ROUTE, GET_WORKFLOW_RUN_BY_ID_ROUTE, CREATE_WORKFLOW_RUN_ROUTE, STREAM_WORKFLOW_ROUTE, START_ASYNC_WORKFLOW_ROUTE, START_WORKFLOW_RUN_ROUTE, OBSERVE_STREAM_WORKFLOW_ROUTE, RESUME_ASYNC_WORKFLOW_ROUTE, RESUME_WORKFLOW_ROUTE, RESUME_STREAM_WORKFLOW_ROUTE, CANCEL_WORKFLOW_RUN_ROUTE, STREAM_LEGACY_WORKFLOW_ROUTE, OBSERVE_STREAM_LEGACY_WORKFLOW_ROUTE } from './chunk-G2ZZKKQI.js';
7
- import { actionIdPathParams, actionRunPathParams, streamAgentBuilderBodySchema, startAsyncAgentBuilderBodySchema, resumeAgentBuilderBodySchema, streamLegacyAgentBuilderBodySchema } from './chunk-S7PYDU5I.js';
8
8
  import { listWorkflowsResponseSchema, workflowInfoSchema, workflowRunsResponseSchema, listWorkflowRunsQuerySchema, workflowRunResultSchema, workflowRunResultQuerySchema, createWorkflowRunResponseSchema, workflowExecutionResultSchema, workflowControlResponseSchema } from './chunk-7X4P2I6L.js';
9
9
  import { streamResponseSchema } from './chunk-V7EVEI4C.js';
10
10
  import { WorkflowRegistry } from './chunk-RGI5IQDO.js';
@@ -16157,18 +16157,54 @@ async function resolveCursorMessage(memory, cursor, access) {
16157
16157
  }
16158
16158
  const memoryStore = await memory.getMemoryStore();
16159
16159
  const result = await memoryStore.listMessagesById({ messageIds: [normalized] });
16160
- const message = result.messages.find((message2) => message2.id === normalized);
16160
+ let message = result.messages.find((message2) => message2.id === normalized) ?? null;
16161
+ if (!message) {
16162
+ message = await resolveCursorMessageByRecall(memory, normalized, access);
16163
+ }
16161
16164
  if (!message) {
16162
16165
  throw new Error(`Could not resolve cursor message: ${cursor}`);
16163
16166
  }
16164
16167
  if (access?.resourceId && message.resourceId !== access.resourceId) {
16165
16168
  throw new Error(`Could not resolve cursor message: ${cursor}`);
16166
16169
  }
16167
- if (access?.threadScope && message.threadId !== access.threadScope) {
16170
+ if (access?.enforceThreadScope && access.threadScope && message.threadId !== access.threadScope) {
16168
16171
  throw new Error(`Could not resolve cursor message: ${cursor}`);
16169
16172
  }
16170
16173
  return message;
16171
16174
  }
16175
+ async function resolveCursorMessageByRecall(memory, cursor, access) {
16176
+ if (access?.enforceThreadScope && access.threadScope) {
16177
+ const result = await memory.recall({
16178
+ threadId: access.threadScope,
16179
+ resourceId: access.resourceId,
16180
+ page: 0,
16181
+ perPage: false
16182
+ });
16183
+ return result.messages.find((message) => message.id === cursor) ?? null;
16184
+ }
16185
+ if (!access?.resourceId) {
16186
+ return null;
16187
+ }
16188
+ const threads = await memory.listThreads({
16189
+ page: 0,
16190
+ perPage: 100,
16191
+ orderBy: { field: "updatedAt", direction: "DESC" },
16192
+ filter: { resourceId: access.resourceId }
16193
+ });
16194
+ for (const thread of threads.threads) {
16195
+ const result = await memory.recall({
16196
+ threadId: thread.id,
16197
+ resourceId: access.resourceId,
16198
+ page: 0,
16199
+ perPage: false
16200
+ });
16201
+ const message = result.messages.find((message2) => message2.id === cursor);
16202
+ if (message) {
16203
+ return message;
16204
+ }
16205
+ }
16206
+ return null;
16207
+ }
16172
16208
  async function listThreadsForResource({
16173
16209
  memory,
16174
16210
  resourceId,
@@ -16420,6 +16456,27 @@ function buildRenderedText(parts, timestamps) {
16420
16456
  }
16421
16457
  return lines.join("\n");
16422
16458
  }
16459
+ async function getNextVisibleMessage({
16460
+ memory,
16461
+ threadId,
16462
+ resourceId,
16463
+ after
16464
+ }) {
16465
+ const result = await memory.recall({
16466
+ threadId,
16467
+ resourceId,
16468
+ page: 0,
16469
+ perPage: 50,
16470
+ orderBy: { field: "createdAt", direction: "ASC" },
16471
+ filter: {
16472
+ dateRange: {
16473
+ start: after,
16474
+ startExclusive: true
16475
+ }
16476
+ }
16477
+ });
16478
+ return result.messages.find(hasVisibleParts) ?? null;
16479
+ }
16423
16480
  var MAX_EXPAND_USER_TEXT_TOKENS = 200;
16424
16481
  var MAX_EXPAND_OTHER_TOKENS = 50;
16425
16482
  function expandLimit(part) {
@@ -16488,7 +16545,11 @@ async function recallPart({
16488
16545
  if (!threadId) {
16489
16546
  throw new Error("Thread ID is required for recall");
16490
16547
  }
16491
- const resolved = await resolveCursorMessage(memory, cursor, { resourceId, threadScope });
16548
+ const resolved = await resolveCursorMessage(memory, cursor, {
16549
+ resourceId,
16550
+ threadScope,
16551
+ enforceThreadScope: false
16552
+ });
16492
16553
  if ("hint" in resolved) {
16493
16554
  throw new Error(resolved.hint);
16494
16555
  }
@@ -16500,9 +16561,37 @@ async function recallPart({
16500
16561
  }
16501
16562
  const target = allParts.find((p) => p.partIndex === partIndex);
16502
16563
  if (!target) {
16503
- throw new Error(
16504
- `Part index ${partIndex} not found in message ${cursor}. Available indices: ${allParts.map((p) => p.partIndex).join(", ")}`
16505
- );
16564
+ const availableIndices = allParts.map((p) => p.partIndex).join(", ");
16565
+ const highestVisiblePartIndex = Math.max(...allParts.map((p) => p.partIndex));
16566
+ if (partIndex > highestVisiblePartIndex) {
16567
+ const nextMessage = await getNextVisibleMessage({
16568
+ memory,
16569
+ threadId,
16570
+ resourceId,
16571
+ after: resolved.createdAt
16572
+ });
16573
+ if (nextMessage) {
16574
+ const nextParts = formatMessageParts(nextMessage, "high");
16575
+ const firstNextPart = nextParts[0];
16576
+ if (firstNextPart) {
16577
+ const fallbackNote = `Part index ${partIndex} not found in message ${cursor}; showing partIndex ${firstNextPart.partIndex} from next message ${firstNextPart.messageId}.
16578
+
16579
+ `;
16580
+ const fallbackText = `${fallbackNote}${firstNextPart.text}`;
16581
+ const truncatedText2 = truncateStringByTokens(fallbackText, maxTokens);
16582
+ const wasTruncated2 = truncatedText2 !== fallbackText;
16583
+ return {
16584
+ text: truncatedText2,
16585
+ messageId: firstNextPart.messageId,
16586
+ partIndex: firstNextPart.partIndex,
16587
+ role: firstNextPart.role,
16588
+ type: firstNextPart.type,
16589
+ truncated: wasTruncated2
16590
+ };
16591
+ }
16592
+ }
16593
+ }
16594
+ throw new Error(`Part index ${partIndex} not found in message ${cursor}. Available indices: ${availableIndices}`);
16506
16595
  }
16507
16596
  const truncatedText = truncateStringByTokens(target.text, maxTokens);
16508
16597
  const wasTruncated = truncatedText !== target.text;
@@ -16540,7 +16629,11 @@ async function recallMessages({
16540
16629
  const rawPage = page === 0 ? 1 : page;
16541
16630
  const normalizedPage = Math.max(Math.min(rawPage, MAX_PAGE), -MAX_PAGE);
16542
16631
  const normalizedLimit = Math.min(limit, MAX_LIMIT);
16543
- const resolved = await resolveCursorMessage(memory, cursor, { resourceId, threadScope });
16632
+ const resolved = await resolveCursorMessage(memory, cursor, {
16633
+ resourceId,
16634
+ threadScope,
16635
+ enforceThreadScope: false
16636
+ });
16544
16637
  if ("hint" in resolved) {
16545
16638
  return {
16546
16639
  messages: resolved.hint,
@@ -16556,9 +16649,10 @@ async function recallMessages({
16556
16649
  };
16557
16650
  }
16558
16651
  const anchor = resolved;
16559
- if (anchor.threadId && anchor.threadId !== threadId) {
16652
+ const crossThreadId = anchor.threadId && anchor.threadId !== threadId ? anchor.threadId : void 0;
16653
+ if (crossThreadId && threadScope) {
16560
16654
  return {
16561
- messages: `Cursor does not belong to the active thread. Expected thread "${threadId}" but cursor "${cursor}" belongs to "${anchor.threadId}".`,
16655
+ messages: `Cursor does not belong to the active thread. Expected thread "${threadId}" but cursor "${cursor}" belongs to "${anchor.threadId}". Pass threadId="${anchor.threadId}" to browse that thread, or omit threadId and use this cursor directly in resource scope.`,
16562
16656
  count: 0,
16563
16657
  cursor,
16564
16658
  page: normalizedPage,
@@ -16570,7 +16664,10 @@ async function recallMessages({
16570
16664
  tokenOffset: 0
16571
16665
  };
16572
16666
  }
16573
- const resolvedThreadId = threadId;
16667
+ const resolvedThreadId = crossThreadId ?? threadId;
16668
+ if (!resolvedThreadId) {
16669
+ throw new Error("Thread ID is required for recall");
16670
+ }
16574
16671
  const isForward = normalizedPage > 0;
16575
16672
  const pageIndex = Math.max(Math.abs(normalizedPage), 1) - 1;
16576
16673
  const skip = pageIndex * normalizedLimit;
@@ -16852,7 +16949,25 @@ var recallTool = (_memoryConfig, options) => {
16852
16949
  threadScope = currentThreadId || void 0;
16853
16950
  }
16854
16951
  if (hasCursor && !hasExplicitThreadId && !currentThreadId) {
16855
- throw new Error("Current thread is required when browsing by cursor");
16952
+ if (!isResourceScope) {
16953
+ throw new Error("Current thread is required when browsing by cursor");
16954
+ }
16955
+ const resolved = await resolveCursorMessage(memory, cursor, { resourceId });
16956
+ if ("hint" in resolved) {
16957
+ return {
16958
+ messages: resolved.hint,
16959
+ count: 0,
16960
+ cursor,
16961
+ page: page ?? 1,
16962
+ limit: Math.min(limit ?? 20, 20),
16963
+ detail: detail ?? "low",
16964
+ hasNextPage: false,
16965
+ hasPrevPage: false,
16966
+ truncated: false,
16967
+ tokenOffset: 0
16968
+ };
16969
+ }
16970
+ targetThreadId = resolved.threadId;
16856
16971
  }
16857
16972
  if (!targetThreadId) {
16858
16973
  throw new Error("Thread ID is required for recall");
@@ -17919,7 +18034,7 @@ ${workingMemory}`;
17919
18034
  "Observational memory requires @mastra/core support for request-response-id-rotation. Please bump @mastra/core to a newer version."
17920
18035
  );
17921
18036
  }
17922
- const { ObservationalMemory: OMClass } = await import('./observational-memory-SASGM6OW-3S6D4TAF.js');
18037
+ const { ObservationalMemory: OMClass } = await import('./observational-memory-B25SASRW-L4GYD2ZN.js');
17923
18038
  const onIndexObservations = this.hasRetrievalSearch(omConfig.retrieval) ? async (observation) => {
17924
18039
  await this.indexObservation(observation);
17925
18040
  } : void 0;
@@ -18807,7 +18922,7 @@ Notes:
18807
18922
  if (!effectiveConfig) return null;
18808
18923
  const engine = await this.omEngine;
18809
18924
  if (!engine) return null;
18810
- const { ObservationalMemoryProcessor } = await import('./observational-memory-SASGM6OW-3S6D4TAF.js');
18925
+ const { ObservationalMemoryProcessor } = await import('./observational-memory-B25SASRW-L4GYD2ZN.js');
18811
18926
  return new ObservationalMemoryProcessor(engine, this);
18812
18927
  }
18813
18928
  };
@@ -30008,5 +30123,5 @@ var OBSERVE_STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE = createRoute({
30008
30123
  });
30009
30124
 
30010
30125
  export { CANCEL_AGENT_BUILDER_ACTION_RUN_ROUTE, CREATE_AGENT_BUILDER_ACTION_RUN_ROUTE, GET_AGENT_BUILDER_ACTION_BY_ID_ROUTE, GET_AGENT_BUILDER_ACTION_RUN_BY_ID_ROUTE, LIST_AGENT_BUILDER_ACTIONS_ROUTE, LIST_AGENT_BUILDER_ACTION_RUNS_ROUTE, OBSERVE_STREAM_AGENT_BUILDER_ACTION_ROUTE, OBSERVE_STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE, RESUME_AGENT_BUILDER_ACTION_ROUTE, RESUME_ASYNC_AGENT_BUILDER_ACTION_ROUTE, RESUME_STREAM_AGENT_BUILDER_ACTION_ROUTE, START_AGENT_BUILDER_ACTION_RUN_ROUTE, START_ASYNC_AGENT_BUILDER_ACTION_ROUTE, STREAM_AGENT_BUILDER_ACTION_ROUTE, STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE, agent_builder_exports };
30011
- //# sourceMappingURL=chunk-FTGC7KXM.js.map
30012
- //# sourceMappingURL=chunk-FTGC7KXM.js.map
30126
+ //# sourceMappingURL=chunk-TV5D5RRD.js.map
30127
+ //# sourceMappingURL=chunk-TV5D5RRD.js.map