@mastra/server 1.23.0-alpha.2 → 1.23.0-alpha.4

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 (66) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/{chunk-MNZBZOWQ.cjs → chunk-B2OFZDJQ.cjs} +11 -11
  3. package/dist/{chunk-MNZBZOWQ.cjs.map → chunk-B2OFZDJQ.cjs.map} +1 -1
  4. package/dist/{chunk-MFBT6P7Q.js → chunk-DGS7O6Q7.js} +3 -3
  5. package/dist/{chunk-MFBT6P7Q.js.map → chunk-DGS7O6Q7.js.map} +1 -1
  6. package/dist/{chunk-O2RWEEZ3.js → chunk-FLGIOJA5.js} +39 -18
  7. package/dist/chunk-FLGIOJA5.js.map +1 -0
  8. package/dist/{chunk-Z5ETZUOK.cjs → chunk-HHGZGERI.cjs} +4 -4
  9. package/dist/{chunk-Z5ETZUOK.cjs.map → chunk-HHGZGERI.cjs.map} +1 -1
  10. package/dist/{chunk-UZZDH3J2.cjs → chunk-LFZO2LHV.cjs} +5 -2
  11. package/dist/chunk-LFZO2LHV.cjs.map +1 -0
  12. package/dist/{chunk-KBG2XGCA.cjs → chunk-PNCR2M6Y.cjs} +39 -18
  13. package/dist/chunk-PNCR2M6Y.cjs.map +1 -0
  14. package/dist/{chunk-WGB6F36S.cjs → chunk-RNC7VEI6.cjs} +7 -3
  15. package/dist/chunk-RNC7VEI6.cjs.map +1 -0
  16. package/dist/{chunk-27XB5KOK.js → chunk-SE5M6GC6.js} +3 -3
  17. package/dist/{chunk-27XB5KOK.js.map → chunk-SE5M6GC6.js.map} +1 -1
  18. package/dist/{chunk-UUDXDJ7K.js → chunk-SZ2FSVP5.js} +5 -5
  19. package/dist/{chunk-UUDXDJ7K.js.map → chunk-SZ2FSVP5.js.map} +1 -1
  20. package/dist/{chunk-QJMOCS54.js → chunk-UTRP4B2Q.js} +5 -2
  21. package/dist/chunk-UTRP4B2Q.js.map +1 -0
  22. package/dist/{chunk-2HTJTFFI.cjs → chunk-UVK6YXEL.cjs} +119 -112
  23. package/dist/chunk-UVK6YXEL.cjs.map +1 -0
  24. package/dist/{chunk-4HARW5AZ.cjs → chunk-VMA5TY4H.cjs} +19 -19
  25. package/dist/{chunk-4HARW5AZ.cjs.map → chunk-VMA5TY4H.cjs.map} +1 -1
  26. package/dist/{chunk-H77IQ6X3.js → chunk-VXBTV6LH.js} +7 -3
  27. package/dist/chunk-VXBTV6LH.js.map +1 -0
  28. package/dist/{chunk-CUULQ4L3.js → chunk-XUIA3SIB.js} +14 -7
  29. package/dist/chunk-XUIA3SIB.js.map +1 -0
  30. package/dist/docs/SKILL.md +1 -1
  31. package/dist/docs/assets/SOURCE_MAP.json +1 -1
  32. package/dist/{observational-memory-B7AUSTEY-TJ76ZPT6.cjs → observational-memory-JQ34KLFS-CNLSTXO3.cjs} +26 -26
  33. package/dist/{observational-memory-B7AUSTEY-TJ76ZPT6.cjs.map → observational-memory-JQ34KLFS-CNLSTXO3.cjs.map} +1 -1
  34. package/dist/{observational-memory-B7AUSTEY-4KDTDMCO.js → observational-memory-JQ34KLFS-KLWGOGP4.js} +3 -3
  35. package/dist/{observational-memory-B7AUSTEY-4KDTDMCO.js.map → observational-memory-JQ34KLFS-KLWGOGP4.js.map} +1 -1
  36. package/dist/server/handlers/agent-builder.cjs +16 -16
  37. package/dist/server/handlers/agent-builder.js +1 -1
  38. package/dist/server/handlers/conversations.cjs +5 -5
  39. package/dist/server/handlers/conversations.js +1 -1
  40. package/dist/server/handlers/gateway-memory-client.cjs +8 -8
  41. package/dist/server/handlers/gateway-memory-client.d.ts +3 -0
  42. package/dist/server/handlers/gateway-memory-client.d.ts.map +1 -1
  43. package/dist/server/handlers/gateway-memory-client.js +1 -1
  44. package/dist/server/handlers/memory.cjs +27 -27
  45. package/dist/server/handlers/memory.d.ts +8 -0
  46. package/dist/server/handlers/memory.d.ts.map +1 -1
  47. package/dist/server/handlers/memory.js +1 -1
  48. package/dist/server/handlers.cjs +6 -6
  49. package/dist/server/handlers.js +3 -3
  50. package/dist/server/schemas/index.cjs +50 -50
  51. package/dist/server/schemas/index.js +2 -2
  52. package/dist/server/schemas/memory.d.ts +4 -0
  53. package/dist/server/schemas/memory.d.ts.map +1 -1
  54. package/dist/server/server-adapter/index.cjs +47 -47
  55. package/dist/server/server-adapter/index.js +3 -3
  56. package/dist/server/server-adapter/routes/memory.d.ts +8 -0
  57. package/dist/server/server-adapter/routes/memory.d.ts.map +1 -1
  58. package/package.json +6 -6
  59. package/dist/chunk-2HTJTFFI.cjs.map +0 -1
  60. package/dist/chunk-CUULQ4L3.js.map +0 -1
  61. package/dist/chunk-H77IQ6X3.js.map +0 -1
  62. package/dist/chunk-KBG2XGCA.cjs.map +0 -1
  63. package/dist/chunk-O2RWEEZ3.js.map +0 -1
  64. package/dist/chunk-QJMOCS54.js.map +0 -1
  65. package/dist/chunk-UZZDH3J2.cjs.map +0 -1
  66. package/dist/chunk-WGB6F36S.cjs.map +0 -1
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var chunkGNVZDFY5_cjs = require('./chunk-GNVZDFY5.cjs');
4
- var chunkWGB6F36S_cjs = require('./chunk-WGB6F36S.cjs');
4
+ var chunkRNC7VEI6_cjs = require('./chunk-RNC7VEI6.cjs');
5
5
  var z = require('zod');
6
6
 
7
7
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
@@ -21,7 +21,7 @@ var createConversationBodySchema = z__default.default.object({
21
21
  var conversationObjectSchema = z__default.default.object({
22
22
  id: z__default.default.string(),
23
23
  object: z__default.default.literal("conversation"),
24
- thread: chunkWGB6F36S_cjs.getThreadByIdResponseSchema
24
+ thread: chunkRNC7VEI6_cjs.getThreadByIdResponseSchema
25
25
  });
26
26
  var conversationDeletedSchema = z__default.default.object({
27
27
  id: z__default.default.string(),
@@ -41,5 +41,5 @@ exports.conversationIdPathParams = conversationIdPathParams;
41
41
  exports.conversationItemsListSchema = conversationItemsListSchema;
42
42
  exports.conversationObjectSchema = conversationObjectSchema;
43
43
  exports.createConversationBodySchema = createConversationBodySchema;
44
- //# sourceMappingURL=chunk-Z5ETZUOK.cjs.map
45
- //# sourceMappingURL=chunk-Z5ETZUOK.cjs.map
44
+ //# sourceMappingURL=chunk-HHGZGERI.cjs.map
45
+ //# sourceMappingURL=chunk-HHGZGERI.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/server/schemas/conversations.ts"],"names":["z","getThreadByIdResponseSchema","conversationItemSchema"],"mappings":";;;;;;;;;;AAIO,IAAM,wBAAA,GAA2BA,mBAAE,MAAA,CAAO;AAAA,EAC/C,cAAA,EAAgBA,kBAAA,CAAE,MAAA,EAAO,CAAE,SAAS,+CAA+C;AACrF,CAAC;AAEM,IAAM,4BAAA,GAA+BA,mBAAE,MAAA,CAAO;AAAA,EACnD,QAAA,EAAUA,kBAAA,CAAE,MAAA,EAAO,CAAE,SAAS,wDAAwD,CAAA;AAAA,EACtF,iBAAiBA,kBAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,qDAAqD,CAAA;AAAA,EACrG,aAAaA,kBAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,yDAAyD,CAAA;AAAA,EACrG,KAAA,EAAOA,kBAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC3B,QAAA,EAAUA,kBAAA,CAAE,MAAA,CAAOA,kBAAA,CAAE,MAAA,IAAUA,kBAAA,CAAE,OAAA,EAAS,CAAA,CAAE,QAAA;AAC9C,CAAC;AAIM,IAAM,wBAAA,GAA2BA,mBAAE,MAAA,CAAO;AAAA,EAC/C,EAAA,EAAIA,mBAAE,MAAA,EAAO;AAAA,EACb,MAAA,EAAQA,kBAAA,CAAE,OAAA,CAAQ,cAAc,CAAA;AAAA,EAChC,MAAA,EAAQC;AACV,CAAC;AAEM,IAAM,yBAAA,GAA4BD,mBAAE,MAAA,CAAO;AAAA,EAChD,EAAA,EAAIA,mBAAE,MAAA,EAAO;AAAA,EACb,MAAA,EAAQA,kBAAA,CAAE,OAAA,CAAQ,sBAAsB,CAAA;AAAA,EACxC,OAAA,EAASA,kBAAA,CAAE,OAAA,CAAQ,IAAI;AACzB,CAAC;AAEM,IAAM,2BAAA,GAA8BA,mBAAE,MAAA,CAAO;AAAA,EAClD,MAAA,EAAQA,kBAAA,CAAE,OAAA,CAAQ,MAAM,CAAA;AAAA,EACxB,IAAA,EAAMA,kBAAA,CAAE,KAAA,CAAME,wCAAsB,CAAA;AAAA,EACpC,QAAA,EAAUF,kBAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC9B,OAAA,EAASA,kBAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC7B,QAAA,EAAUA,mBAAE,OAAA;AACd,CAAC","file":"chunk-Z5ETZUOK.cjs","sourcesContent":["import z from 'zod';\nimport { getThreadByIdResponseSchema } from './memory';\nimport { conversationItemSchema } from './responses';\n\nexport const conversationIdPathParams = z.object({\n conversationId: z.string().describe('Unique identifier for the conversation thread'),\n});\n\nexport const createConversationBodySchema = z.object({\n agent_id: z.string().describe('Mastra agent ID used to create the conversation thread'),\n conversation_id: z.string().optional().describe('Optional conversation ID to use as the raw threadId'),\n resource_id: z.string().optional().describe('Optional resource ID to associate with the conversation'),\n title: z.string().optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n});\n\nexport type CreateConversationBody = z.infer<typeof createConversationBodySchema>;\n\nexport const conversationObjectSchema = z.object({\n id: z.string(),\n object: z.literal('conversation'),\n thread: getThreadByIdResponseSchema,\n});\n\nexport const conversationDeletedSchema = z.object({\n id: z.string(),\n object: z.literal('conversation.deleted'),\n deleted: z.literal(true),\n});\n\nexport const conversationItemsListSchema = z.object({\n object: z.literal('list'),\n data: z.array(conversationItemSchema),\n first_id: z.string().nullable(),\n last_id: z.string().nullable(),\n has_more: z.boolean(),\n});\n\nexport type ConversationObject = z.infer<typeof conversationObjectSchema>;\nexport type ConversationItemsList = z.infer<typeof conversationItemsListSchema>;\nexport type ConversationDeleted = z.infer<typeof conversationDeletedSchema>;\n"]}
1
+ {"version":3,"sources":["../src/server/schemas/conversations.ts"],"names":["z","getThreadByIdResponseSchema","conversationItemSchema"],"mappings":";;;;;;;;;;AAIO,IAAM,wBAAA,GAA2BA,mBAAE,MAAA,CAAO;AAAA,EAC/C,cAAA,EAAgBA,kBAAA,CAAE,MAAA,EAAO,CAAE,SAAS,+CAA+C;AACrF,CAAC;AAEM,IAAM,4BAAA,GAA+BA,mBAAE,MAAA,CAAO;AAAA,EACnD,QAAA,EAAUA,kBAAA,CAAE,MAAA,EAAO,CAAE,SAAS,wDAAwD,CAAA;AAAA,EACtF,iBAAiBA,kBAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,qDAAqD,CAAA;AAAA,EACrG,aAAaA,kBAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,yDAAyD,CAAA;AAAA,EACrG,KAAA,EAAOA,kBAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC3B,QAAA,EAAUA,kBAAA,CAAE,MAAA,CAAOA,kBAAA,CAAE,MAAA,IAAUA,kBAAA,CAAE,OAAA,EAAS,CAAA,CAAE,QAAA;AAC9C,CAAC;AAIM,IAAM,wBAAA,GAA2BA,mBAAE,MAAA,CAAO;AAAA,EAC/C,EAAA,EAAIA,mBAAE,MAAA,EAAO;AAAA,EACb,MAAA,EAAQA,kBAAA,CAAE,OAAA,CAAQ,cAAc,CAAA;AAAA,EAChC,MAAA,EAAQC;AACV,CAAC;AAEM,IAAM,yBAAA,GAA4BD,mBAAE,MAAA,CAAO;AAAA,EAChD,EAAA,EAAIA,mBAAE,MAAA,EAAO;AAAA,EACb,MAAA,EAAQA,kBAAA,CAAE,OAAA,CAAQ,sBAAsB,CAAA;AAAA,EACxC,OAAA,EAASA,kBAAA,CAAE,OAAA,CAAQ,IAAI;AACzB,CAAC;AAEM,IAAM,2BAAA,GAA8BA,mBAAE,MAAA,CAAO;AAAA,EAClD,MAAA,EAAQA,kBAAA,CAAE,OAAA,CAAQ,MAAM,CAAA;AAAA,EACxB,IAAA,EAAMA,kBAAA,CAAE,KAAA,CAAME,wCAAsB,CAAA;AAAA,EACpC,QAAA,EAAUF,kBAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC9B,OAAA,EAASA,kBAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC7B,QAAA,EAAUA,mBAAE,OAAA;AACd,CAAC","file":"chunk-HHGZGERI.cjs","sourcesContent":["import z from 'zod';\nimport { getThreadByIdResponseSchema } from './memory';\nimport { conversationItemSchema } from './responses';\n\nexport const conversationIdPathParams = z.object({\n conversationId: z.string().describe('Unique identifier for the conversation thread'),\n});\n\nexport const createConversationBodySchema = z.object({\n agent_id: z.string().describe('Mastra agent ID used to create the conversation thread'),\n conversation_id: z.string().optional().describe('Optional conversation ID to use as the raw threadId'),\n resource_id: z.string().optional().describe('Optional resource ID to associate with the conversation'),\n title: z.string().optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n});\n\nexport type CreateConversationBody = z.infer<typeof createConversationBodySchema>;\n\nexport const conversationObjectSchema = z.object({\n id: z.string(),\n object: z.literal('conversation'),\n thread: getThreadByIdResponseSchema,\n});\n\nexport const conversationDeletedSchema = z.object({\n id: z.string(),\n object: z.literal('conversation.deleted'),\n deleted: z.literal(true),\n});\n\nexport const conversationItemsListSchema = z.object({\n object: z.literal('list'),\n data: z.array(conversationItemSchema),\n first_id: z.string().nullable(),\n last_id: z.string().nullable(),\n has_more: z.boolean(),\n});\n\nexport type ConversationObject = z.infer<typeof conversationObjectSchema>;\nexport type ConversationItemsList = z.infer<typeof conversationItemsListSchema>;\nexport type ConversationDeleted = z.infer<typeof conversationDeletedSchema>;\n"]}
@@ -112,6 +112,9 @@ var GatewayMemoryClient = class {
112
112
  const query = new URLSearchParams();
113
113
  if (params.resourceId) query.set("resourceId", params.resourceId);
114
114
  if (params.limit != null) query.set("limit", String(params.limit));
115
+ if (params.from) query.set("from", params.from.toISOString());
116
+ if (params.to) query.set("to", params.to.toISOString());
117
+ if (params.offset != null) query.set("offset", String(params.offset));
115
118
  const qs = query.toString();
116
119
  try {
117
120
  return await this.request(`${this.threadPath(threadId)}/observations/history${qs ? "?" + qs : ""}`);
@@ -225,5 +228,5 @@ exports.isGatewayAgentAsync = isGatewayAgentAsync;
225
228
  exports.toLocalMessage = toLocalMessage;
226
229
  exports.toLocalOMRecord = toLocalOMRecord;
227
230
  exports.toLocalThread = toLocalThread;
228
- //# sourceMappingURL=chunk-UZZDH3J2.cjs.map
229
- //# sourceMappingURL=chunk-UZZDH3J2.cjs.map
231
+ //# sourceMappingURL=chunk-LFZO2LHV.cjs.map
232
+ //# sourceMappingURL=chunk-LFZO2LHV.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/server/handlers/gateway-memory-client.ts"],"names":[],"mappings":"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","file":"chunk-LFZO2LHV.cjs","sourcesContent":["/**\n * HTTP client for the Mastra Memory Gateway REST API.\n * Used to proxy memory operations from the local Mastra server to the remote gateway\n * when agents use `mastra/` model strings.\n */\n\ninterface GatewayThread {\n id: string;\n projectId: string;\n resourceId: string;\n title: string | null;\n metadata: Record<string, unknown> | null;\n createdAt: string;\n updatedAt: string;\n}\n\ninterface GatewayMessage {\n id: string;\n threadId: string;\n role: string;\n content: unknown;\n type: string;\n createdAt: string;\n}\n\ninterface GatewayOMRecord {\n id: string;\n scope: string;\n threadId: string | null;\n resourceId: string;\n createdAt: string;\n updatedAt: string;\n lastObservedAt: string | null;\n originType: string;\n generationCount: number;\n activeObservations: unknown;\n totalTokensObserved: number;\n observationTokenCount: number;\n pendingMessageTokens: number;\n isReflecting: boolean;\n isObserving: boolean;\n isBufferingObservation: boolean;\n isBufferingReflection: boolean;\n config?: Record<string, unknown>;\n bufferedObservationChunks?: unknown[];\n bufferedReflection?: string | null;\n bufferedReflectionTokens?: number | null;\n bufferedReflectionInputTokens?: number | null;\n}\n\nexport class GatewayMemoryClient {\n private baseUrl: string;\n private apiKey: string;\n\n constructor(baseUrl: string, apiKey: string) {\n // Strip trailing slashes and /v1 suffix so both URL forms resolve correctly\n this.baseUrl = baseUrl.replace(/\\/+$/, '').replace(/\\/v1$/, '') + '/v1/memory';\n this.apiKey = apiKey;\n }\n\n private threadPath(threadId: string): string {\n return `/threads/${encodeURIComponent(threadId)}`;\n }\n\n private async request<T>(path: string, options: RequestInit = {}): Promise<T> {\n const url = `${this.baseUrl}${path}`;\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), 10_000);\n try {\n const res = await fetch(url, {\n ...options,\n signal: options.signal ?? controller.signal,\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${this.apiKey}`,\n ...((options.headers as Record<string, string>) || {}),\n },\n });\n\n if (!res.ok) {\n const body = await res.text().catch(() => '');\n throw new Error(`Gateway API error ${res.status}: ${body}`);\n }\n\n return res.json() as Promise<T>;\n } finally {\n clearTimeout(timeout);\n }\n }\n\n // ── Threads ──────────────────────────────────────────────────\n\n async listThreads(params: {\n resourceId?: string;\n limit?: number;\n offset?: number;\n }): Promise<{ threads: GatewayThread[]; total: number }> {\n const query = new URLSearchParams();\n if (params.resourceId) query.set('resourceId', params.resourceId);\n if (params.limit != null) query.set('limit', String(params.limit));\n if (params.offset != null) query.set('offset', String(params.offset));\n const qs = query.toString();\n return this.request(`/threads${qs ? '?' + qs : ''}`);\n }\n\n async getThread(threadId: string): Promise<{ thread: GatewayThread } | null> {\n try {\n return await this.request(this.threadPath(threadId));\n } catch (e: unknown) {\n if (e instanceof Error && e.message.includes('404')) return null;\n throw e;\n }\n }\n\n async createThread(params: {\n id?: string;\n resourceId: string;\n title?: string;\n metadata?: Record<string, unknown>;\n }): Promise<{ thread: GatewayThread }> {\n return this.request('/threads', {\n method: 'POST',\n body: JSON.stringify(params),\n });\n }\n\n async updateThread(\n threadId: string,\n params: { title?: string; metadata?: Record<string, unknown> },\n ): Promise<{ thread: GatewayThread } | null> {\n try {\n return await this.request(this.threadPath(threadId), {\n method: 'PATCH',\n body: JSON.stringify(params),\n });\n } catch (e: unknown) {\n if (e instanceof Error && e.message.includes('404')) return null;\n throw e;\n }\n }\n\n async deleteThread(threadId: string): Promise<{ ok: boolean }> {\n try {\n return await this.request(this.threadPath(threadId), { method: 'DELETE' });\n } catch (e: unknown) {\n if (e instanceof Error && e.message.includes('404')) return { ok: false };\n throw e;\n }\n }\n\n // ── Messages ─────────────────────────────────────────────────\n\n async listMessages(\n threadId: string,\n params: { limit?: number; offset?: number; order?: string },\n ): Promise<{ messages: GatewayMessage[]; total: number } | null> {\n const query = new URLSearchParams();\n if (params.limit != null) query.set('limit', String(params.limit));\n if (params.offset != null) query.set('offset', String(params.offset));\n if (params.order) query.set('order', params.order);\n const qs = query.toString();\n try {\n return await this.request(`${this.threadPath(threadId)}/messages${qs ? '?' + qs : ''}`);\n } catch (e: unknown) {\n if (e instanceof Error && e.message.includes('404')) return null;\n throw e;\n }\n }\n\n // ── Observational Memory ─────────────────────────────────────\n\n async getObservations(threadId: string, resourceId?: string): Promise<{ observations: unknown }> {\n const query = new URLSearchParams();\n if (resourceId) query.set('resourceId', resourceId);\n const qs = query.toString();\n return this.request(`${this.threadPath(threadId)}/observations${qs ? '?' + qs : ''}`);\n }\n\n async getObservationRecord(threadId: string, resourceId?: string): Promise<{ record: GatewayOMRecord | null }> {\n const query = new URLSearchParams();\n if (resourceId) query.set('resourceId', resourceId);\n const qs = query.toString();\n try {\n return await this.request(`${this.threadPath(threadId)}/observations/record${qs ? '?' + qs : ''}`);\n } catch (e: unknown) {\n if (e instanceof Error && e.message.includes('404')) return { record: null };\n throw e;\n }\n }\n\n async getObservationHistory(\n threadId: string,\n params: { resourceId?: string; limit?: number; from?: Date; to?: Date; offset?: number },\n ): Promise<{ records: GatewayOMRecord[] }> {\n const query = new URLSearchParams();\n if (params.resourceId) query.set('resourceId', params.resourceId);\n if (params.limit != null) query.set('limit', String(params.limit));\n if (params.from) query.set('from', params.from.toISOString());\n if (params.to) query.set('to', params.to.toISOString());\n if (params.offset != null) query.set('offset', String(params.offset));\n const qs = query.toString();\n try {\n return await this.request(`${this.threadPath(threadId)}/observations/history${qs ? '?' + qs : ''}`);\n } catch (e: unknown) {\n if (e instanceof Error && e.message.includes('404')) return { records: [] };\n throw e;\n }\n }\n}\n\n// ── Helpers ──────────────────────────────────────────────────────\n\n/**\n * Convert a gateway thread to the local server thread format.\n */\nexport function toLocalThread(gt: GatewayThread) {\n return {\n id: gt.id,\n resourceId: gt.resourceId,\n title: gt.title ?? '',\n metadata: gt.metadata ?? {},\n createdAt: new Date(gt.createdAt),\n updatedAt: new Date(gt.updatedAt),\n };\n}\n\n/**\n * Convert a gateway message to the local server message format.\n */\nexport function toLocalMessage(gm: GatewayMessage) {\n return {\n id: gm.id,\n threadId: gm.threadId,\n role: gm.role,\n content: gm.content,\n type: gm.type,\n createdAt: new Date(gm.createdAt),\n };\n}\n\n/**\n * Convert a gateway OM record to the local server OM record format.\n */\nexport function toLocalOMRecord(gr: GatewayOMRecord) {\n return {\n id: gr.id,\n scope: gr.scope as 'thread' | 'resource',\n threadId: gr.threadId,\n resourceId: gr.resourceId,\n createdAt: new Date(gr.createdAt),\n updatedAt: new Date(gr.updatedAt),\n lastObservedAt: gr.lastObservedAt ? new Date(gr.lastObservedAt) : undefined,\n originType: gr.originType as 'initial' | 'reflection' | 'observation',\n generationCount: gr.generationCount,\n activeObservations: (gr.activeObservations ?? '') as string,\n totalTokensObserved: gr.totalTokensObserved,\n observationTokenCount: gr.observationTokenCount,\n pendingMessageTokens: gr.pendingMessageTokens,\n isReflecting: gr.isReflecting,\n isObserving: gr.isObserving,\n isBufferingObservation: gr.isBufferingObservation,\n isBufferingReflection: gr.isBufferingReflection,\n config: gr.config ?? {},\n bufferedObservationChunks: gr.bufferedObservationChunks ?? [],\n bufferedReflection: gr.bufferedReflection ?? undefined,\n bufferedReflectionTokens: gr.bufferedReflectionTokens ?? undefined,\n bufferedReflectionInputTokens: gr.bufferedReflectionInputTokens ?? undefined,\n };\n}\n\n// Singleton-ish lazy instance\nlet _gatewayClient: GatewayMemoryClient | null | undefined;\n\n/**\n * Get a GatewayMemoryClient instance, or null if gateway is not configured.\n */\nexport function getGatewayClient(): GatewayMemoryClient | null {\n if (_gatewayClient !== undefined) return _gatewayClient;\n const url = process.env.MASTRA_GATEWAY_URL || 'https://gateway-api.mastra.ai';\n const key = process.env.MASTRA_GATEWAY_API_KEY;\n if (!key) {\n _gatewayClient = null;\n return null;\n }\n _gatewayClient = new GatewayMemoryClient(url, key);\n return _gatewayClient;\n}\n\n/**\n * Check if an agent uses a gateway model (mastra/ prefix).\n * Sync version — can only check agent.model string directly.\n */\n\nexport function isGatewayAgent(agent: any): boolean {\n if (!agent) return false;\n try {\n const agentAny = agent as Record<string, unknown>;\n if (typeof agentAny.model === 'string' && agentAny.model.startsWith('mastra/')) {\n return true;\n }\n } catch {\n // Ignore errors during detection\n }\n return false;\n}\n\n/**\n * Async version of isGatewayAgent that can await getLLM().\n * Checks multiple paths to detect if an agent uses a mastra/ gateway model:\n * 1. agent.model as raw string (most reliable for directly configured agents)\n * 2. Resolved LLM's underlying ModelRouterLanguageModel config.routerId\n * 3. Resolved LLM's getModel() to access the router's config\n */\n\nexport async function isGatewayAgentAsync(agent: any): Promise<boolean> {\n if (!agent) return false;\n try {\n const agentAny = agent as Record<string, unknown>;\n\n // Check 1: agent.model is a raw string like 'mastra/openai/gpt-5-mini'\n if (typeof agentAny.model === 'string' && agentAny.model.startsWith('mastra/')) {\n return true;\n }\n\n // Check 2: Resolve the LLM and check the router's config.routerId\n // llm.getModelId() returns stripped ID (e.g., 'gpt-5-mini'), so we need\n // to access the underlying ModelRouterLanguageModel's config.routerId\n if (typeof agent.getLLM === 'function') {\n const llm = await Promise.resolve(agent.getLLM({}));\n if (llm) {\n // Try to access the underlying model's routerId via getModel()\n const llmAny = llm as Record<string, unknown>;\n if (typeof llmAny.getModel === 'function') {\n const underlyingModel = (llmAny as { getModel: () => unknown }).getModel();\n const modelAny = underlyingModel as Record<string, unknown>;\n // ModelRouterLanguageModel stores routerId in private config\n if (modelAny?.config && typeof modelAny.config === 'object') {\n const routerId = (modelAny.config as Record<string, unknown>).routerId;\n if (typeof routerId === 'string' && routerId.startsWith('mastra/')) {\n return true;\n }\n }\n }\n }\n }\n } catch {\n // Detection failed — not a gateway agent\n }\n return false;\n}\n"]}
@@ -1956,7 +1956,7 @@ var ObservationStrategy = class _ObservationStrategy {
1956
1956
  static create;
1957
1957
  /**
1958
1958
  * Run the full observation lifecycle.
1959
- * @returns `true` if a full observation cycle completed; `false` if skipped (stale lock) or async-buffer failure was swallowed.
1959
+ * @returns Result with `observed` flag and optional `usage` from the observer LLM call.
1960
1960
  * @throws On sync/resource-scoped observer failure after failed markers (same as pre–Option-A contract).
1961
1961
  */
1962
1962
  async run() {
@@ -1966,7 +1966,7 @@ var ObservationStrategy = class _ObservationStrategy {
1966
1966
  if (this.needsLock) {
1967
1967
  const fresh = await this.storage.getObservationalMemory(record.threadId, record.resourceId);
1968
1968
  if (fresh?.lastObservedAt && record.lastObservedAt && fresh.lastObservedAt > record.lastObservedAt) {
1969
- return false;
1969
+ return { observed: false };
1970
1970
  }
1971
1971
  }
1972
1972
  const { messages, existingObservations } = await this.prepare();
@@ -1987,7 +1987,7 @@ var ObservationStrategy = class _ObservationStrategy {
1987
1987
  observabilityContext: this.opts.observabilityContext
1988
1988
  });
1989
1989
  }
1990
- return true;
1990
+ return { observed: true, usage: output.usage };
1991
1991
  } catch (error) {
1992
1992
  await this.emitFailedMarkers(cycleId, error);
1993
1993
  if (!this.rethrowOnFailure) {
@@ -2006,7 +2006,7 @@ var ObservationStrategy = class _ObservationStrategy {
2006
2006
  });
2007
2007
  if (abortSignal?.aborted) throw error;
2008
2008
  omError("[OM] Observation failed", error);
2009
- return false;
2009
+ return { observed: false };
2010
2010
  }
2011
2011
  omError("[OM] Observation failed", error);
2012
2012
  throw error;
@@ -5190,7 +5190,7 @@ var ReflectorRunner = class {
5190
5190
  /**
5191
5191
  * Start an async buffered reflection in the background.
5192
5192
  */
5193
- startAsyncBufferedReflection(record, observationTokens, lockKey, writer, requestContext, observabilityContext) {
5193
+ startAsyncBufferedReflection(record, observationTokens, lockKey, writer, requestContext, observabilityContext, reflectionHooks) {
5194
5194
  const bufferKey = this.buffering.getReflectionBufferKey(lockKey);
5195
5195
  if (this.buffering.isAsyncBufferingInProgress(bufferKey)) {
5196
5196
  return;
@@ -5200,7 +5200,10 @@ var ReflectorRunner = class {
5200
5200
  this.storage.setBufferingReflectionFlag(record.id, true).catch((err) => {
5201
5201
  omError("[OM] Failed to set buffering reflection flag", err);
5202
5202
  });
5203
- const asyncOp = this.doAsyncBufferedReflection(record, bufferKey, writer, requestContext, observabilityContext).catch(async (error) => {
5203
+ reflectionHooks?.onReflectionStart?.();
5204
+ const asyncOp = this.doAsyncBufferedReflection(record, bufferKey, writer, requestContext, observabilityContext).then((usage) => {
5205
+ reflectionHooks?.onReflectionEnd?.({ usage });
5206
+ }).catch(async (error) => {
5204
5207
  if (writer) {
5205
5208
  const failedMarker = createBufferingFailedMarker({
5206
5209
  cycleId: `reflect-buf-${Date.now()}-${Math.random().toString(36).slice(2, 11)}`,
@@ -5216,6 +5219,10 @@ var ReflectorRunner = class {
5216
5219
  await this.persistMarkerToStorage(failedMarker, record.threadId ?? "", record.resourceId ?? void 0);
5217
5220
  }
5218
5221
  omError("[OM] Async buffered reflection failed", error);
5222
+ reflectionHooks?.onReflectionEnd?.({
5223
+ usage: void 0,
5224
+ error: error instanceof Error ? error : new Error(String(error))
5225
+ });
5219
5226
  BufferingCoordinator.lastBufferedBoundary.delete(bufferKey);
5220
5227
  }).finally(() => {
5221
5228
  BufferingCoordinator.asyncBufferingOps.delete(bufferKey);
@@ -5309,6 +5316,7 @@ var ReflectorRunner = class {
5309
5316
  });
5310
5317
  await this.persistMarkerToStorage(endMarker, currentRecord.threadId ?? "", currentRecord.resourceId ?? void 0);
5311
5318
  }
5319
+ return reflectResult.usage;
5312
5320
  }
5313
5321
  /**
5314
5322
  * Try to activate buffered reflection when threshold is reached.
@@ -5429,7 +5437,8 @@ ${unreflectedContent}` : freshRecord.bufferedReflection;
5429
5437
  lockKey,
5430
5438
  writer,
5431
5439
  requestContext,
5432
- observabilityContext
5440
+ observabilityContext,
5441
+ reflectionHooks
5433
5442
  );
5434
5443
  }
5435
5444
  }
@@ -5463,7 +5472,8 @@ ${unreflectedContent}` : freshRecord.bufferedReflection;
5463
5472
  lockKey,
5464
5473
  writer,
5465
5474
  requestContext,
5466
- observabilityContext
5475
+ observabilityContext,
5476
+ reflectionHooks
5467
5477
  );
5468
5478
  return;
5469
5479
  }
@@ -5502,6 +5512,8 @@ ${unreflectedContent}` : freshRecord.bufferedReflection;
5502
5512
  recordId: record.id,
5503
5513
  threadId
5504
5514
  } : void 0;
5515
+ let reflectionUsage;
5516
+ let reflectionError;
5505
5517
  try {
5506
5518
  const compressionStartLevel = await this.getCompressionStartLevel(requestContext);
5507
5519
  const reflectResult = await this.call(
@@ -5515,6 +5527,7 @@ ${unreflectedContent}` : freshRecord.bufferedReflection;
5515
5527
  requestContext,
5516
5528
  observabilityContext
5517
5529
  );
5530
+ reflectionUsage = reflectResult.usage;
5518
5531
  const reflectionTokenCount = this.tokenCounter.countObservations(reflectResult.observations);
5519
5532
  await this.storage.createReflectionGeneration({
5520
5533
  currentRecord: record,
@@ -5559,13 +5572,14 @@ ${unreflectedContent}` : freshRecord.bufferedReflection;
5559
5572
  await writer.custom(failedMarker).catch(() => {
5560
5573
  });
5561
5574
  }
5575
+ reflectionError = error instanceof Error ? error : new Error(String(error));
5562
5576
  if (abortSignal?.aborted) {
5563
5577
  throw error;
5564
5578
  }
5565
5579
  omError("[OM] Reflection failed", error);
5566
5580
  } finally {
5567
5581
  await this.storage.setReflectingFlag(record.id, false);
5568
- reflectionHooks?.onReflectionEnd?.();
5582
+ reflectionHooks?.onReflectionEnd?.({ usage: reflectionUsage, error: reflectionError });
5569
5583
  unregisterOp(record.id, "reflecting");
5570
5584
  }
5571
5585
  }
@@ -8908,6 +8922,7 @@ ${grouped}` : grouped;
8908
8922
  const lockKey = this.buffering.getLockKey(threadId, resourceId);
8909
8923
  const reflectionHooks = hooks ? { onReflectionStart: hooks.onReflectionStart, onReflectionEnd: hooks.onReflectionEnd } : void 0;
8910
8924
  let observed = false;
8925
+ let observationUsage;
8911
8926
  let generationBefore = -1;
8912
8927
  await this.withLock(lockKey, async () => {
8913
8928
  const freshRecord = await this.getOrCreateRecord(threadId, resourceId);
@@ -8924,8 +8939,9 @@ ${grouped}` : grouped;
8924
8939
  return;
8925
8940
  }
8926
8941
  hooks?.onObservationStart?.();
8942
+ let observationError;
8927
8943
  try {
8928
- observed = await ObservationStrategy.create(this, {
8944
+ const result = await ObservationStrategy.create(this, {
8929
8945
  record: freshRecord,
8930
8946
  threadId,
8931
8947
  resourceId,
@@ -8935,8 +8951,13 @@ ${grouped}` : grouped;
8935
8951
  writer: opts.writer,
8936
8952
  observabilityContext: opts.observabilityContext
8937
8953
  }).run();
8954
+ observed = result.observed;
8955
+ observationUsage = result.usage;
8956
+ } catch (error) {
8957
+ observationError = error instanceof Error ? error : new Error(String(error));
8958
+ throw error;
8938
8959
  } finally {
8939
- hooks?.onObservationEnd?.();
8960
+ hooks?.onObservationEnd?.({ usage: observationUsage, error: observationError });
8940
8961
  }
8941
8962
  });
8942
8963
  const record = await this.getOrCreateRecord(threadId, resourceId);
@@ -8957,7 +8978,7 @@ ${grouped}` : grouped;
8957
8978
  async reflect(threadId, resourceId, prompt, requestContext, observabilityContext) {
8958
8979
  const record = await this.getOrCreateRecord(threadId, resourceId);
8959
8980
  if (!record.activeObservations) {
8960
- return { reflected: false, record };
8981
+ return { reflected: false, record, usage: void 0 };
8961
8982
  }
8962
8983
  await this.storage.setReflectingFlag(record.id, true);
8963
8984
  registerOp(record.id, "reflecting");
@@ -8982,11 +9003,11 @@ ${grouped}` : grouped;
8982
9003
  tokenCount: reflectionTokenCount
8983
9004
  });
8984
9005
  const updatedRecord = await this.getOrCreateRecord(threadId, resourceId);
8985
- return { reflected: true, record: updatedRecord };
9006
+ return { reflected: true, record: updatedRecord, usage: reflectResult.usage };
8986
9007
  } catch (error) {
8987
9008
  omError("[OM] reflect() failed", error);
8988
9009
  const latestRecord = await this.getOrCreateRecord(threadId, resourceId);
8989
- return { reflected: false, record: latestRecord };
9010
+ return { reflected: false, record: latestRecord, usage: void 0 };
8990
9011
  } finally {
8991
9012
  await this.storage.setReflectingFlag(record.id, false);
8992
9013
  unregisterOp(record.id, "reflecting");
@@ -9010,9 +9031,9 @@ ${grouped}` : grouped;
9010
9031
  /**
9011
9032
  * Get observation history (previous generations)
9012
9033
  */
9013
- async getHistory(threadId, resourceId, limit) {
9034
+ async getHistory(threadId, resourceId, limit, options) {
9014
9035
  const ids = this.getStorageIds(threadId, resourceId);
9015
- return this.storage.getObservationalMemoryHistory(ids.threadId, ids.resourceId, limit);
9036
+ return this.storage.getObservationalMemoryHistory(ids.threadId, ids.resourceId, limit, options);
9016
9037
  }
9017
9038
  /**
9018
9039
  * Clear all memory for a specific thread/resource
@@ -9581,5 +9602,5 @@ exports.stripEphemeralAnchorIds = stripEphemeralAnchorIds;
9581
9602
  exports.stripObservationGroups = stripObservationGroups;
9582
9603
  exports.truncateStringByTokens = truncateStringByTokens;
9583
9604
  exports.wrapInObservationGroup = wrapInObservationGroup;
9584
- //# sourceMappingURL=chunk-KBG2XGCA.cjs.map
9585
- //# sourceMappingURL=chunk-KBG2XGCA.cjs.map
9605
+ //# sourceMappingURL=chunk-PNCR2M6Y.cjs.map
9606
+ //# sourceMappingURL=chunk-PNCR2M6Y.cjs.map