@mastra/server 1.68.0-alpha.0 → 1.68.0-alpha.11

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 (471) hide show
  1. package/dist/_types/@internal_core/dist/storage/index.d.ts +5 -3
  2. package/dist/_types/@internal_core/package.json +1 -0
  3. package/dist/_types/@internal_voice/dist/_types/@internal_core/dist/routes/index.d.ts +1 -1
  4. package/dist/_types/@internal_voice/dist/_types/zod/v4/classic/checks.d.ts +1 -1
  5. package/dist/_types/@internal_voice/dist/_types/zod/v4/classic/compat.d.ts +9 -11
  6. package/dist/_types/@internal_voice/dist/_types/zod/v4/classic/deep-partial.d.ts +14 -0
  7. package/dist/_types/@internal_voice/dist/_types/zod/v4/classic/errors.d.ts +3 -4
  8. package/dist/_types/@internal_voice/dist/_types/zod/v4/classic/external.d.ts +5 -2
  9. package/dist/_types/@internal_voice/dist/_types/zod/v4/classic/in-out.d.ts +8 -0
  10. package/dist/_types/@internal_voice/dist/_types/zod/v4/classic/index.d.ts +1 -2
  11. package/dist/_types/@internal_voice/dist/_types/zod/v4/classic/iso.d.ts +2 -17
  12. package/dist/_types/@internal_voice/dist/_types/zod/v4/classic/parse.d.ts +17 -4
  13. package/dist/_types/@internal_voice/dist/_types/zod/v4/classic/schemas.d.ts +68 -19
  14. package/dist/_types/@internal_voice/dist/_types/zod/v4/core/api.d.ts +22 -12
  15. package/dist/_types/@internal_voice/dist/_types/zod/v4/core/checks.d.ts +29 -13
  16. package/dist/_types/@internal_voice/dist/_types/zod/v4/core/compile.d.ts +65 -0
  17. package/dist/_types/@internal_voice/dist/_types/zod/v4/core/core.d.ts +16 -4
  18. package/dist/_types/@internal_voice/dist/_types/zod/v4/core/doc.d.ts +3 -1
  19. package/dist/_types/@internal_voice/dist/_types/zod/v4/core/errors.d.ts +4 -0
  20. package/dist/_types/@internal_voice/dist/_types/zod/v4/core/index.d.ts +3 -0
  21. package/dist/_types/@internal_voice/dist/_types/zod/v4/core/json-schema-generator.d.ts +2 -2
  22. package/dist/_types/@internal_voice/dist/_types/zod/v4/core/json-schema-processors.d.ts +16 -0
  23. package/dist/_types/@internal_voice/dist/_types/zod/v4/core/json-schema.d.ts +2 -1
  24. package/dist/_types/@internal_voice/dist/_types/zod/v4/core/memoizer.d.ts +15 -0
  25. package/dist/_types/@internal_voice/dist/_types/zod/v4/core/parse.d.ts +14 -11
  26. package/dist/_types/@internal_voice/dist/_types/zod/v4/core/regexes.d.ts +5 -0
  27. package/dist/_types/@internal_voice/dist/_types/zod/v4/core/schemas.d.ts +123 -34
  28. package/dist/_types/@internal_voice/dist/_types/zod/v4/core/to-json-schema.d.ts +45 -5
  29. package/dist/_types/@internal_voice/dist/_types/zod/v4/core/util.d.ts +79 -1
  30. package/dist/_types/@internal_voice/dist/_types/zod/v4/core/versions.d.ts +1 -1
  31. package/dist/_types/@internal_voice/dist/_types/zod/v4/index.d.cts +2 -2
  32. package/dist/_types/@internal_voice/dist/_types/zod/v4/locales/bn.d.ts +4 -0
  33. package/dist/_types/@internal_voice/dist/_types/zod/v4/locales/ckb.d.ts +4 -0
  34. package/dist/_types/@internal_voice/dist/_types/zod/v4/locales/gu.d.ts +4 -0
  35. package/dist/_types/@internal_voice/dist/_types/zod/v4/locales/hi.d.ts +4 -0
  36. package/dist/_types/@internal_voice/dist/_types/zod/v4/locales/index.d.ts +11 -0
  37. package/dist/_types/@internal_voice/dist/_types/zod/v4/locales/kn.d.ts +4 -0
  38. package/dist/_types/@internal_voice/dist/_types/zod/v4/locales/ne.d.ts +4 -0
  39. package/dist/_types/@internal_voice/dist/_types/zod/v4/locales/nn.d.ts +4 -0
  40. package/dist/_types/@internal_voice/dist/_types/zod/v4/locales/pt-BR.d.ts +4 -0
  41. package/dist/_types/@internal_voice/dist/_types/zod/v4/locales/sk.d.ts +4 -0
  42. package/dist/_types/@internal_voice/dist/_types/zod/v4/locales/tg.d.ts +4 -0
  43. package/dist/_types/@internal_voice/dist/_types/zod/v4/locales/tk.d.ts +4 -0
  44. package/dist/_types/@internal_voice/dist/routes/index.d.ts +15 -15
  45. package/dist/_types/@internal_voice/package.json +1 -0
  46. package/dist/_types/@mastra_schema-compat/dist/_types/@internal_ai-sdk-v4/dist/index.d.ts +1 -1
  47. package/dist/_types/@mastra_schema-compat/dist/_types/@internal_ai-sdk-v5/dist/index.d.ts +1 -1
  48. package/dist/_types/@mastra_schema-compat/dist/_types/@internal_ai-v6/dist/index.d.ts +1 -1
  49. package/dist/_types/@mastra_schema-compat/dist/provider-compats/anthropic.d.ts +2 -2
  50. package/dist/_types/@mastra_schema-compat/dist/provider-compats/deepseek.d.ts +2 -2
  51. package/dist/_types/@mastra_schema-compat/dist/provider-compats/google.d.ts +1 -1
  52. package/dist/_types/@mastra_schema-compat/dist/provider-compats/meta.d.ts +2 -2
  53. package/dist/_types/@mastra_schema-compat/dist/provider-compats/openai.d.ts +1 -1
  54. package/dist/_types/@mastra_schema-compat/dist/schema.types.d.ts +4 -4
  55. package/dist/_types/@mastra_schema-compat/dist/standard-schema/standard-schema.d.ts +2 -2
  56. package/dist/_types/@mastra_schema-compat/dist/standard-schema/standard-schema.types.d.ts +1 -1
  57. package/dist/_types/@mastra_schema-compat/dist/zod-to-json.d.ts +1 -1
  58. package/dist/_types/@mastra_schema-compat/package.json +1 -0
  59. package/dist/{a2a-8C4O2dVJ.js → a2a-BS0gTQk3.js} +94 -14
  60. package/dist/a2a-BS0gTQk3.js.map +1 -0
  61. package/dist/{a2a-MPoM5lzS.cjs → a2a-CBl-c-lm.cjs} +105 -13
  62. package/dist/a2a-CBl-c-lm.cjs.map +1 -0
  63. package/dist/{a2a-DQ8GeDz4.cjs → a2a-Cr-pxMJm.cjs} +151 -47
  64. package/dist/a2a-Cr-pxMJm.cjs.map +1 -0
  65. package/dist/{a2a-DUBjstWk.js → a2a-D2AP2MGB.js} +151 -47
  66. package/dist/a2a-D2AP2MGB.js.map +1 -0
  67. package/dist/{agent-versions-NGajm4l5.js → agent-versions-CiV6tT74.js} +2 -2
  68. package/dist/{agent-versions-NGajm4l5.js.map → agent-versions-CiV6tT74.js.map} +1 -1
  69. package/dist/{agent-versions-D99q4Gos.cjs → agent-versions-D2QdSbFn.cjs} +2 -2
  70. package/dist/{agent-versions-D99q4Gos.cjs.map → agent-versions-D2QdSbFn.cjs.map} +1 -1
  71. package/dist/{agents-CZE_MSQE.cjs → agents-BN8QmLxk.cjs} +25 -7
  72. package/dist/agents-BN8QmLxk.cjs.map +1 -0
  73. package/dist/{agents-ssoMemNs.js → agents-DCYUhwHn.js} +25 -7
  74. package/dist/agents-DCYUhwHn.js.map +1 -0
  75. package/dist/{api-schema-manifest-CeREx1dB.js → api-schema-manifest-DRBrp4e0.js} +3 -3
  76. package/dist/{api-schema-manifest-CeREx1dB.js.map → api-schema-manifest-DRBrp4e0.js.map} +1 -1
  77. package/dist/{api-schema-manifest-DzWP4nLu.cjs → api-schema-manifest-hEcC_Jev.cjs} +3 -3
  78. package/dist/{api-schema-manifest-DzWP4nLu.cjs.map → api-schema-manifest-hEcC_Jev.cjs.map} +1 -1
  79. package/dist/{background-tasks-kXPoCvgG.js → background-tasks-D7X7M0TU.js} +2 -2
  80. package/dist/{background-tasks-kXPoCvgG.js.map → background-tasks-D7X7M0TU.js.map} +1 -1
  81. package/dist/{background-tasks-CFJ0vNgp.cjs → background-tasks-NjqWJcUw.cjs} +2 -2
  82. package/dist/{background-tasks-CFJ0vNgp.cjs.map → background-tasks-NjqWJcUw.cjs.map} +1 -1
  83. package/dist/{builder-registry-r71f11_E.cjs → builder-registry-BtwztV7s.cjs} +4 -4
  84. package/dist/{builder-registry-r71f11_E.cjs.map → builder-registry-BtwztV7s.cjs.map} +1 -1
  85. package/dist/{builder-registry-DI3Ysclf.js → builder-registry-CZW_Z4DV.js} +4 -4
  86. package/dist/{builder-registry-DI3Ysclf.js.map → builder-registry-CZW_Z4DV.js.map} +1 -1
  87. package/dist/{channels-CGDo0Prv.cjs → channels-pCkdvG0z.cjs} +2 -2
  88. package/dist/{channels-CGDo0Prv.cjs.map → channels-pCkdvG0z.cjs.map} +1 -1
  89. package/dist/{channels-B_K1oJ7S.js → channels-uSO1ySnT.js} +2 -2
  90. package/dist/{channels-B_K1oJ7S.js.map → channels-uSO1ySnT.js.map} +1 -1
  91. package/dist/{conversations-b3vJRHF3.js → conversations-BQSekCFg.js} +2 -2
  92. package/dist/{conversations-b3vJRHF3.js.map → conversations-BQSekCFg.js.map} +1 -1
  93. package/dist/{conversations-DstENx2x.cjs → conversations-X5vg7ZxV.cjs} +2 -2
  94. package/dist/{conversations-DstENx2x.cjs.map → conversations-X5vg7ZxV.cjs.map} +1 -1
  95. package/dist/{datasets-zlaJQ9D0.cjs → datasets-DNNuDeQ2.cjs} +40 -10
  96. package/dist/datasets-DNNuDeQ2.cjs.map +1 -0
  97. package/dist/{datasets-CCC2huR0.js → datasets-L8o0f3nY.js} +40 -10
  98. package/dist/datasets-L8o0f3nY.js.map +1 -0
  99. package/dist/{dist-D6F_HzDS.cjs → dist-B0uCWZUF.cjs} +4 -4
  100. package/dist/{dist-D6F_HzDS.cjs.map → dist-B0uCWZUF.cjs.map} +1 -1
  101. package/dist/{dist-C9yKk16g.cjs → dist-BQ0VOLA9.cjs} +3 -3
  102. package/dist/{dist-C9yKk16g.cjs.map → dist-BQ0VOLA9.cjs.map} +1 -1
  103. package/dist/{dist-k6UeNFHu.js → dist-Bl3UrwJs.js} +3 -3
  104. package/dist/{dist-k6UeNFHu.js.map → dist-Bl3UrwJs.js.map} +1 -1
  105. package/dist/{dist-B6qmZNb0.cjs → dist-C2u5Kqxy.cjs} +3 -3
  106. package/dist/{dist-B6qmZNb0.cjs.map → dist-C2u5Kqxy.cjs.map} +1 -1
  107. package/dist/{dist-BKxbtiJd.cjs → dist-CF1rK7oZ.cjs} +874 -192
  108. package/dist/dist-CF1rK7oZ.cjs.map +1 -0
  109. package/dist/{dist-C76EmJsT.cjs → dist-CkFmsB2E.cjs} +3 -3
  110. package/dist/{dist-C76EmJsT.cjs.map → dist-CkFmsB2E.cjs.map} +1 -1
  111. package/dist/{dist-Da8AufS5.js → dist-D1rb-p2Y.js} +4 -4
  112. package/dist/{dist-Da8AufS5.js.map → dist-D1rb-p2Y.js.map} +1 -1
  113. package/dist/{dist-Chgswf37.js → dist-DD1mFVAc.js} +3 -3
  114. package/dist/{dist-Chgswf37.js.map → dist-DD1mFVAc.js.map} +1 -1
  115. package/dist/{dist-Wjq6PT76.js → dist-DJ7t3yBx.js} +3 -3
  116. package/dist/{dist-Wjq6PT76.js.map → dist-DJ7t3yBx.js.map} +1 -1
  117. package/dist/{dist-CLQt62Pi.cjs → dist-DO5NHh-t.cjs} +3 -3
  118. package/dist/{dist-CLQt62Pi.cjs.map → dist-DO5NHh-t.cjs.map} +1 -1
  119. package/dist/{dist-XnA2Lowr.js → dist-DiEECrlS.js} +3 -3
  120. package/dist/{dist-XnA2Lowr.js.map → dist-DiEECrlS.js.map} +1 -1
  121. package/dist/{dist-DoTDZ7wF.js → dist-Dx2Qp8Rj.js} +3 -3
  122. package/dist/{dist-DoTDZ7wF.js.map → dist-Dx2Qp8Rj.js.map} +1 -1
  123. package/dist/{dist-DOpm-tIl.js → dist-dfcZRhcQ.js} +871 -189
  124. package/dist/dist-dfcZRhcQ.js.map +1 -0
  125. package/dist/{dist-DpM-6UBk.cjs → dist-vM0zJcP5.cjs} +3 -3
  126. package/dist/{dist-DpM-6UBk.cjs.map → dist-vM0zJcP5.cjs.map} +1 -1
  127. package/dist/docs/SKILL.md +2 -2
  128. package/dist/docs/assets/SOURCE_MAP.json +1 -1
  129. package/dist/docs/references/docs-connections-a2a.md +4 -3
  130. package/dist/docs/references/docs-server-custom-adapters.md +43 -0
  131. package/dist/docs/references/reference-observability-tracing-trace-query.md +289 -46
  132. package/dist/{dynamic-workflows-DeUG3lA2.cjs → dynamic-workflows-BiX72mRA.cjs} +2 -2
  133. package/dist/{dynamic-workflows-DeUG3lA2.cjs.map → dynamic-workflows-BiX72mRA.cjs.map} +1 -1
  134. package/dist/{dynamic-workflows-C3DXgmSP.js → dynamic-workflows-CVrxi8y7.js} +2 -2
  135. package/dist/{dynamic-workflows-C3DXgmSP.js.map → dynamic-workflows-CVrxi8y7.js.map} +1 -1
  136. package/dist/{editor-builder-D6P_hq7c.js → editor-builder-Blheim55.js} +2 -2
  137. package/dist/{editor-builder-D6P_hq7c.js.map → editor-builder-Blheim55.js.map} +1 -1
  138. package/dist/{editor-builder-BI5yHrbT.js → editor-builder-D287Qf1k.js} +3 -3
  139. package/dist/{editor-builder-BI5yHrbT.js.map → editor-builder-D287Qf1k.js.map} +1 -1
  140. package/dist/{editor-builder-CKAeON9r.cjs → editor-builder-D85orYra.cjs} +3 -3
  141. package/dist/{editor-builder-CKAeON9r.cjs.map → editor-builder-D85orYra.cjs.map} +1 -1
  142. package/dist/{editor-builder-BHf-g7q9.cjs → editor-builder-DhUUVbQ-.cjs} +2 -2
  143. package/dist/{editor-builder-BHf-g7q9.cjs.map → editor-builder-DhUUVbQ-.cjs.map} +1 -1
  144. package/dist/{mcp-BPmrXX9r.cjs → mcp-CdZzch5c.cjs} +11 -3
  145. package/dist/mcp-CdZzch5c.cjs.map +1 -0
  146. package/dist/{mcp-B_OMG3Ol.js → mcp-ea7f_n2D.js} +11 -3
  147. package/dist/mcp-ea7f_n2D.js.map +1 -0
  148. package/dist/{memory-BvKPIpyH.js → memory-CZT-ptes.js} +9 -3
  149. package/dist/memory-CZT-ptes.js.map +1 -0
  150. package/dist/{memory-CDYtqQnE.cjs → memory-D2TG_RVj.cjs} +9 -3
  151. package/dist/memory-D2TG_RVj.cjs.map +1 -0
  152. package/dist/message-history-CkUYxSaS.cjs +22 -0
  153. package/dist/message-history-CkUYxSaS.cjs.map +1 -0
  154. package/dist/message-history-_kbQlA4r.js +11 -0
  155. package/dist/message-history-_kbQlA4r.js.map +1 -0
  156. package/dist/{observability-new-endpoints-I2OxQzfY.cjs → observability-new-endpoints-CDrOjmJw.cjs} +253 -7
  157. package/dist/observability-new-endpoints-CDrOjmJw.cjs.map +1 -0
  158. package/dist/{observability-new-endpoints-pIq_OWa8.js → observability-new-endpoints-CWfdrnzJ.js} +238 -10
  159. package/dist/observability-new-endpoints-CWfdrnzJ.js.map +1 -0
  160. package/dist/{route-builder-DupY8fkI.cjs → route-builder-CbCx1upL.cjs} +5 -5
  161. package/dist/{route-builder-DupY8fkI.cjs.map → route-builder-CbCx1upL.cjs.map} +1 -1
  162. package/dist/{route-builder-BukcT_Kp.js → route-builder-DDOjv0sM.js} +3 -3
  163. package/dist/{route-builder-BukcT_Kp.js.map → route-builder-DDOjv0sM.js.map} +1 -1
  164. package/dist/{routes-PJ3eKHbs.cjs → routes-C_j75KdR.cjs} +14 -11
  165. package/dist/routes-C_j75KdR.cjs.map +1 -0
  166. package/dist/{routes-BJZtqLVx.js → routes-DOL9nlPr.js} +14 -11
  167. package/dist/routes-DOL9nlPr.js.map +1 -0
  168. package/dist/{schedules-DaEv0Usj.cjs → schedules-ByXP9Fgm.cjs} +15 -9
  169. package/dist/schedules-ByXP9Fgm.cjs.map +1 -0
  170. package/dist/{schedules-BzymFGR_.js → schedules-Cy6FhkZX.js} +15 -9
  171. package/dist/schedules-Cy6FhkZX.js.map +1 -0
  172. package/dist/{schema-D_ikovK6-DQrOVw5N.cjs → schema-BwlBcZRB-BLwYP0BY.cjs} +6 -6
  173. package/dist/{schema-D_ikovK6-DQrOVw5N.cjs.map → schema-BwlBcZRB-BLwYP0BY.cjs.map} +1 -1
  174. package/dist/{schema-D_ikovK6-BzTeMhWf.js → schema-BwlBcZRB-DUSSQ9TD.js} +6 -6
  175. package/dist/{schema-D_ikovK6-BzTeMhWf.js.map → schema-BwlBcZRB-DUSSQ9TD.js.map} +1 -1
  176. package/dist/schema-DM4T8wfR.cjs +1 -0
  177. package/dist/schema-Fa9iirVJ.js +2 -0
  178. package/dist/{scorer-versions-B6U7batJ.cjs → scorer-versions-DAsYq5b3.cjs} +2 -2
  179. package/dist/{scorer-versions-B6U7batJ.cjs.map → scorer-versions-DAsYq5b3.cjs.map} +1 -1
  180. package/dist/{scorer-versions-Dh2iaz4Y.js → scorer-versions-VpbcaDi8.js} +2 -2
  181. package/dist/{scorer-versions-Dh2iaz4Y.js.map → scorer-versions-VpbcaDi8.js.map} +1 -1
  182. package/dist/server/a2a/agent-card-signing.d.ts +8 -4
  183. package/dist/server/a2a/agent-card-signing.d.ts.map +1 -1
  184. package/dist/server/a2a/agent-card-v1.d.ts +6 -0
  185. package/dist/server/a2a/agent-card-v1.d.ts.map +1 -0
  186. package/dist/server/handlers/a2a.cjs +1 -1
  187. package/dist/server/handlers/a2a.d.ts +205 -61
  188. package/dist/server/handlers/a2a.d.ts.map +1 -1
  189. package/dist/server/handlers/a2a.js +1 -1
  190. package/dist/server/handlers/agent-builder.cjs +4 -4
  191. package/dist/server/handlers/agent-builder.d.ts +64 -64
  192. package/dist/server/handlers/agent-builder.js +4 -4
  193. package/dist/server/handlers/agent-controller.cjs +2 -2
  194. package/dist/server/handlers/agent-controller.d.ts +145 -145
  195. package/dist/server/handlers/agent-controller.js +2 -2
  196. package/dist/server/handlers/agent-versions.cjs +3 -3
  197. package/dist/server/handlers/agent-versions.d.ts +136 -40
  198. package/dist/server/handlers/agent-versions.d.ts.map +1 -1
  199. package/dist/server/handlers/agent-versions.js +3 -3
  200. package/dist/server/handlers/agents.cjs +11 -10
  201. package/dist/server/handlers/agents.cjs.map +1 -1
  202. package/dist/server/handlers/agents.d.ts +238 -152
  203. package/dist/server/handlers/agents.d.ts.map +1 -1
  204. package/dist/server/handlers/agents.js +10 -9
  205. package/dist/server/handlers/agents.js.map +1 -1
  206. package/dist/server/handlers/auth.cjs +2 -5
  207. package/dist/server/handlers/auth.cjs.map +1 -1
  208. package/dist/server/handlers/auth.d.ts +80 -80
  209. package/dist/server/handlers/auth.d.ts.map +1 -1
  210. package/dist/server/handlers/auth.js +2 -5
  211. package/dist/server/handlers/auth.js.map +1 -1
  212. package/dist/server/handlers/background-tasks.cjs +1 -1
  213. package/dist/server/handlers/background-tasks.d.ts +12 -12
  214. package/dist/server/handlers/background-tasks.js +1 -1
  215. package/dist/server/handlers/builder-registry.cjs +1 -1
  216. package/dist/server/handlers/builder-registry.d.ts +20 -20
  217. package/dist/server/handlers/builder-registry.js +1 -1
  218. package/dist/server/handlers/channels.cjs +1 -1
  219. package/dist/server/handlers/channels.d.ts +16 -16
  220. package/dist/server/handlers/channels.js +1 -1
  221. package/dist/server/handlers/conversations.cjs +2 -2
  222. package/dist/server/handlers/conversations.d.ts +16 -16
  223. package/dist/server/handlers/conversations.js +2 -2
  224. package/dist/server/handlers/datasets.cjs +18 -13
  225. package/dist/server/handlers/datasets.cjs.map +1 -1
  226. package/dist/server/handlers/datasets.d.ts +354 -142
  227. package/dist/server/handlers/datasets.d.ts.map +1 -1
  228. package/dist/server/handlers/datasets.js +18 -13
  229. package/dist/server/handlers/datasets.js.map +1 -1
  230. package/dist/server/handlers/dynamic-workflows.cjs +1 -1
  231. package/dist/server/handlers/dynamic-workflows.d.ts +76 -76
  232. package/dist/server/handlers/dynamic-workflows.js +1 -1
  233. package/dist/server/handlers/editor-builder.cjs +1 -1
  234. package/dist/server/handlers/editor-builder.d.ts +12 -12
  235. package/dist/server/handlers/editor-builder.js +1 -1
  236. package/dist/server/handlers/favorites-enrichment.cjs +1 -1
  237. package/dist/server/handlers/favorites-enrichment.js +1 -1
  238. package/dist/server/handlers/logs.cjs +1 -1
  239. package/dist/server/handlers/logs.d.ts +12 -12
  240. package/dist/server/handlers/logs.js +1 -1
  241. package/dist/server/handlers/mcp-client-versions.cjs +3 -3
  242. package/dist/server/handlers/mcp-client-versions.d.ts +28 -28
  243. package/dist/server/handlers/mcp-client-versions.js +3 -3
  244. package/dist/server/handlers/mcp.cjs +34 -3
  245. package/dist/server/handlers/mcp.cjs.map +1 -1
  246. package/dist/server/handlers/mcp.d.ts +55 -42
  247. package/dist/server/handlers/mcp.d.ts.map +1 -1
  248. package/dist/server/handlers/mcp.js +34 -3
  249. package/dist/server/handlers/mcp.js.map +1 -1
  250. package/dist/server/handlers/memory.cjs +3 -4
  251. package/dist/server/handlers/memory.cjs.map +1 -1
  252. package/dist/server/handlers/memory.d.ts +176 -152
  253. package/dist/server/handlers/memory.d.ts.map +1 -1
  254. package/dist/server/handlers/memory.js +3 -4
  255. package/dist/server/handlers/memory.js.map +1 -1
  256. package/dist/server/handlers/observability-new-endpoints.cjs +4 -1
  257. package/dist/server/handlers/observability-new-endpoints.d.ts +1092 -518
  258. package/dist/server/handlers/observability-new-endpoints.d.ts.map +1 -1
  259. package/dist/server/handlers/observability-new-endpoints.js +2 -2
  260. package/dist/server/handlers/observability-shared.cjs +41 -2
  261. package/dist/server/handlers/observability-shared.cjs.map +1 -1
  262. package/dist/server/handlers/observability-shared.d.ts +24 -0
  263. package/dist/server/handlers/observability-shared.d.ts.map +1 -1
  264. package/dist/server/handlers/observability-shared.js +37 -2
  265. package/dist/server/handlers/observability-shared.js.map +1 -1
  266. package/dist/server/handlers/observability.cjs +8 -2
  267. package/dist/server/handlers/observability.cjs.map +1 -1
  268. package/dist/server/handlers/observability.d.ts +33 -27
  269. package/dist/server/handlers/observability.d.ts.map +1 -1
  270. package/dist/server/handlers/observability.js +6 -3
  271. package/dist/server/handlers/observability.js.map +1 -1
  272. package/dist/server/handlers/plans.cjs +2 -2
  273. package/dist/server/handlers/plans.d.ts +4 -4
  274. package/dist/server/handlers/plans.js +2 -2
  275. package/dist/server/handlers/processor-providers.cjs +1 -1
  276. package/dist/server/handlers/processor-providers.d.ts +8 -8
  277. package/dist/server/handlers/processor-providers.js +1 -1
  278. package/dist/server/handlers/processors.cjs +1 -1
  279. package/dist/server/handlers/processors.d.ts +12 -12
  280. package/dist/server/handlers/processors.js +1 -1
  281. package/dist/server/handlers/prompt-block-versions.cjs +3 -3
  282. package/dist/server/handlers/prompt-block-versions.d.ts +28 -28
  283. package/dist/server/handlers/prompt-block-versions.js +3 -3
  284. package/dist/server/handlers/responses.cjs +1 -1
  285. package/dist/server/handlers/responses.d.ts +12 -12
  286. package/dist/server/handlers/responses.js +1 -1
  287. package/dist/server/handlers/schedules.cjs +1 -1
  288. package/dist/server/handlers/schedules.d.ts +52 -36
  289. package/dist/server/handlers/schedules.d.ts.map +1 -1
  290. package/dist/server/handlers/schedules.js +1 -1
  291. package/dist/server/handlers/scorer-versions.cjs +3 -3
  292. package/dist/server/handlers/scorer-versions.d.ts +28 -28
  293. package/dist/server/handlers/scorer-versions.js +3 -3
  294. package/dist/server/handlers/scores.cjs +1 -1
  295. package/dist/server/handlers/scores.d.ts +24 -24
  296. package/dist/server/handlers/scores.js +1 -1
  297. package/dist/server/handlers/stored-agent-favorites.cjs +4 -4
  298. package/dist/server/handlers/stored-agent-favorites.d.ts +8 -8
  299. package/dist/server/handlers/stored-agent-favorites.js +4 -4
  300. package/dist/server/handlers/stored-agents.cjs +5 -5
  301. package/dist/server/handlers/stored-agents.d.ts +140 -44
  302. package/dist/server/handlers/stored-agents.d.ts.map +1 -1
  303. package/dist/server/handlers/stored-agents.js +5 -5
  304. package/dist/server/handlers/stored-mcp-clients.cjs +3 -3
  305. package/dist/server/handlers/stored-mcp-clients.d.ts +20 -20
  306. package/dist/server/handlers/stored-mcp-clients.js +3 -3
  307. package/dist/server/handlers/stored-prompt-blocks.cjs +3 -3
  308. package/dist/server/handlers/stored-prompt-blocks.d.ts +20 -20
  309. package/dist/server/handlers/stored-prompt-blocks.js +3 -3
  310. package/dist/server/handlers/stored-scorers.cjs +3 -3
  311. package/dist/server/handlers/stored-scorers.d.ts +20 -20
  312. package/dist/server/handlers/stored-scorers.js +3 -3
  313. package/dist/server/handlers/stored-skill-favorites.cjs +4 -4
  314. package/dist/server/handlers/stored-skill-favorites.d.ts +8 -8
  315. package/dist/server/handlers/stored-skill-favorites.js +4 -4
  316. package/dist/server/handlers/stored-skills.cjs +4 -4
  317. package/dist/server/handlers/stored-skills.d.ts +24 -24
  318. package/dist/server/handlers/stored-skills.js +4 -4
  319. package/dist/server/handlers/stored-workspaces.cjs +2 -2
  320. package/dist/server/handlers/stored-workspaces.d.ts +20 -20
  321. package/dist/server/handlers/stored-workspaces.js +2 -2
  322. package/dist/server/handlers/system.cjs +7 -5
  323. package/dist/server/handlers/system.cjs.map +1 -1
  324. package/dist/server/handlers/system.d.ts +10 -8
  325. package/dist/server/handlers/system.d.ts.map +1 -1
  326. package/dist/server/handlers/system.js +7 -5
  327. package/dist/server/handlers/system.js.map +1 -1
  328. package/dist/server/handlers/tool-providers.cjs +1 -1
  329. package/dist/server/handlers/tool-providers.d.ts +52 -52
  330. package/dist/server/handlers/tool-providers.js +1 -1
  331. package/dist/server/handlers/tools.cjs +6 -6
  332. package/dist/server/handlers/tools.d.ts +26 -20
  333. package/dist/server/handlers/tools.d.ts.map +1 -1
  334. package/dist/server/handlers/tools.js +5 -5
  335. package/dist/server/handlers/validate-agent-instructions.cjs +1 -1
  336. package/dist/server/handlers/validate-agent-instructions.js +1 -1
  337. package/dist/server/handlers/vector.cjs +1 -1
  338. package/dist/server/handlers/vector.d.ts +32 -32
  339. package/dist/server/handlers/vector.js +1 -1
  340. package/dist/server/handlers/workflow-builder.cjs +1 -1
  341. package/dist/server/handlers/workflow-builder.d.ts +8 -8
  342. package/dist/server/handlers/workflow-builder.js +1 -1
  343. package/dist/server/handlers/workflows.cjs +3 -3
  344. package/dist/server/handlers/workflows.d.ts +108 -108
  345. package/dist/server/handlers/workflows.js +3 -3
  346. package/dist/server/handlers/workspace.cjs +2 -2
  347. package/dist/server/handlers/workspace.d.ts +172 -172
  348. package/dist/server/handlers/workspace.js +2 -2
  349. package/dist/server/handlers.cjs +2 -2
  350. package/dist/server/handlers.js +2 -2
  351. package/dist/server/schemas/a2a.d.ts +165 -9
  352. package/dist/server/schemas/a2a.d.ts.map +1 -1
  353. package/dist/server/schemas/agent-versions.d.ts +70 -10
  354. package/dist/server/schemas/agent-versions.d.ts.map +1 -1
  355. package/dist/server/schemas/agents.d.ts +49 -1
  356. package/dist/server/schemas/agents.d.ts.map +1 -1
  357. package/dist/server/schemas/datasets.d.ts +90 -4
  358. package/dist/server/schemas/datasets.d.ts.map +1 -1
  359. package/dist/server/schemas/feedback.d.ts +3 -3
  360. package/dist/server/schemas/index.cjs +14 -14
  361. package/dist/server/schemas/index.js +14 -14
  362. package/dist/server/schemas/mcp.d.ts +8 -2
  363. package/dist/server/schemas/mcp.d.ts.map +1 -1
  364. package/dist/server/schemas/memory-config.d.ts +10 -2
  365. package/dist/server/schemas/memory-config.d.ts.map +1 -1
  366. package/dist/server/schemas/memory.d.ts +36 -28
  367. package/dist/server/schemas/memory.d.ts.map +1 -1
  368. package/dist/server/schemas/message-history.d.ts +7 -0
  369. package/dist/server/schemas/message-history.d.ts.map +1 -0
  370. package/dist/server/schemas/schedules.d.ts +9 -3
  371. package/dist/server/schemas/schedules.d.ts.map +1 -1
  372. package/dist/server/schemas/stored-agents.d.ts +140 -20
  373. package/dist/server/schemas/stored-agents.d.ts.map +1 -1
  374. package/dist/server/schemas/system.d.ts +2 -0
  375. package/dist/server/schemas/system.d.ts.map +1 -1
  376. package/dist/server/schemas/workspace.d.ts +6 -6
  377. package/dist/server/schemas/workspace.d.ts.map +1 -1
  378. package/dist/server/server-adapter/api-schema-manifest.d.ts +1 -1
  379. package/dist/server/server-adapter/index.cjs +4 -3
  380. package/dist/server/server-adapter/index.cjs.map +1 -1
  381. package/dist/server/server-adapter/index.d.ts +1 -0
  382. package/dist/server/server-adapter/index.d.ts.map +1 -1
  383. package/dist/server/server-adapter/index.js +4 -4
  384. package/dist/server/server-adapter/index.js.map +1 -1
  385. package/dist/server/server-adapter/openapi-utils.d.ts +1 -1
  386. package/dist/server/server-adapter/routes/a2a.d.ts +193 -59
  387. package/dist/server/server-adapter/routes/a2a.d.ts.map +1 -1
  388. package/dist/server/server-adapter/routes/agent-builder.d.ts +64 -64
  389. package/dist/server/server-adapter/routes/channels.d.ts +16 -16
  390. package/dist/server/server-adapter/routes/conversations.d.ts +16 -16
  391. package/dist/server/server-adapter/routes/datasets.d.ts +354 -142
  392. package/dist/server/server-adapter/routes/datasets.d.ts.map +1 -1
  393. package/dist/server/server-adapter/routes/editor-builder.d.ts +40 -40
  394. package/dist/server/server-adapter/routes/legacy.d.ts +16 -16
  395. package/dist/server/server-adapter/routes/logs.d.ts +12 -12
  396. package/dist/server/server-adapter/routes/mcp.d.ts +54 -42
  397. package/dist/server/server-adapter/routes/mcp.d.ts.map +1 -1
  398. package/dist/server/server-adapter/routes/memory.d.ts +176 -152
  399. package/dist/server/server-adapter/routes/memory.d.ts.map +1 -1
  400. package/dist/server/server-adapter/routes/observability.d.ts +652 -286
  401. package/dist/server/server-adapter/routes/observability.d.ts.map +1 -1
  402. package/dist/server/server-adapter/routes/processor-providers.d.ts +8 -8
  403. package/dist/server/server-adapter/routes/processors.d.ts +12 -12
  404. package/dist/server/server-adapter/routes/responses.d.ts +12 -12
  405. package/dist/server/server-adapter/routes/scorers.d.ts +24 -24
  406. package/dist/server/server-adapter/routes/stored-mcp-clients.d.ts +48 -48
  407. package/dist/server/server-adapter/routes/stored-prompt-blocks.d.ts +48 -48
  408. package/dist/server/server-adapter/routes/stored-scorers.d.ts +48 -48
  409. package/dist/server/server-adapter/routes/stored-skills.d.ts +32 -32
  410. package/dist/server/server-adapter/routes/stored-workspaces.d.ts +20 -20
  411. package/dist/server/server-adapter/routes/system.d.ts +10 -8
  412. package/dist/server/server-adapter/routes/system.d.ts.map +1 -1
  413. package/dist/server/server-adapter/routes/tool-providers.d.ts +52 -52
  414. package/dist/server/server-adapter/routes/tools.d.ts +16 -12
  415. package/dist/server/server-adapter/routes/tools.d.ts.map +1 -1
  416. package/dist/server/server-adapter/routes/vectors.d.ts +32 -32
  417. package/dist/server/server-adapter/routes/workflows.d.ts +100 -100
  418. package/dist/server/server-adapter/routes/workspace.d.ts +90 -90
  419. package/dist/{stored-agents-BJMM5f9A.cjs → stored-agents-61cRlWax.cjs} +8 -4
  420. package/dist/stored-agents-61cRlWax.cjs.map +1 -0
  421. package/dist/{stored-agents-AC0najKd.js → stored-agents-CuEn_6cd.js} +8 -4
  422. package/dist/stored-agents-CuEn_6cd.js.map +1 -0
  423. package/dist/{stored-scorers-CWxW1_mY.cjs → stored-scorers-BLj27wz5.cjs} +2 -2
  424. package/dist/{stored-scorers-CWxW1_mY.cjs.map → stored-scorers-BLj27wz5.cjs.map} +1 -1
  425. package/dist/{stored-scorers-B8QVQCCs.js → stored-scorers-D7dAXnFk.js} +2 -2
  426. package/dist/{stored-scorers-B8QVQCCs.js.map → stored-scorers-D7dAXnFk.js.map} +1 -1
  427. package/dist/{system-Cfo5a63a.cjs → system-D85p7-oz.cjs} +3 -2
  428. package/dist/system-D85p7-oz.cjs.map +1 -0
  429. package/dist/{system-DT2JfUun.js → system-DMAG21IT.js} +3 -2
  430. package/dist/system-DMAG21IT.js.map +1 -0
  431. package/dist/{utils-WcR0QSUB.cjs → utils-DbHFc3hG.cjs} +5 -5
  432. package/dist/{utils-WcR0QSUB.cjs.map → utils-DbHFc3hG.cjs.map} +1 -1
  433. package/dist/{utils-Duk4hfT_.js → utils-mRt04Bqa.js} +3 -3
  434. package/dist/{utils-Duk4hfT_.js.map → utils-mRt04Bqa.js.map} +1 -1
  435. package/dist/{workflow-builder-D5dPsrog.cjs → workflow-builder-ZEU0Rafo.cjs} +4 -4
  436. package/dist/{workflow-builder-D5dPsrog.cjs.map → workflow-builder-ZEU0Rafo.cjs.map} +1 -1
  437. package/dist/{workflow-builder-Eape8SyU.js → workflow-builder-fkwRyZUG.js} +4 -4
  438. package/dist/{workflow-builder-Eape8SyU.js.map → workflow-builder-fkwRyZUG.js.map} +1 -1
  439. package/dist/{workspace-Cz9hE2ei.cjs → workspace-BE_j73fm.cjs} +21 -7
  440. package/dist/workspace-BE_j73fm.cjs.map +1 -0
  441. package/dist/{workspace-S5GiJ3Nx.js → workspace-SmQR_sZ4.js} +21 -7
  442. package/dist/workspace-SmQR_sZ4.js.map +1 -0
  443. package/package.json +11 -11
  444. package/dist/a2a-8C4O2dVJ.js.map +0 -1
  445. package/dist/a2a-DQ8GeDz4.cjs.map +0 -1
  446. package/dist/a2a-DUBjstWk.js.map +0 -1
  447. package/dist/a2a-MPoM5lzS.cjs.map +0 -1
  448. package/dist/agents-CZE_MSQE.cjs.map +0 -1
  449. package/dist/agents-ssoMemNs.js.map +0 -1
  450. package/dist/datasets-CCC2huR0.js.map +0 -1
  451. package/dist/datasets-zlaJQ9D0.cjs.map +0 -1
  452. package/dist/dist-BKxbtiJd.cjs.map +0 -1
  453. package/dist/dist-DOpm-tIl.js.map +0 -1
  454. package/dist/mcp-BPmrXX9r.cjs.map +0 -1
  455. package/dist/mcp-B_OMG3Ol.js.map +0 -1
  456. package/dist/memory-BvKPIpyH.js.map +0 -1
  457. package/dist/memory-CDYtqQnE.cjs.map +0 -1
  458. package/dist/observability-new-endpoints-I2OxQzfY.cjs.map +0 -1
  459. package/dist/observability-new-endpoints-pIq_OWa8.js.map +0 -1
  460. package/dist/routes-BJZtqLVx.js.map +0 -1
  461. package/dist/routes-PJ3eKHbs.cjs.map +0 -1
  462. package/dist/schedules-BzymFGR_.js.map +0 -1
  463. package/dist/schedules-DaEv0Usj.cjs.map +0 -1
  464. package/dist/schema-BF_cZG0Y.js +0 -2
  465. package/dist/schema-C7CvwM1d.cjs +0 -1
  466. package/dist/stored-agents-AC0najKd.js.map +0 -1
  467. package/dist/stored-agents-BJMM5f9A.cjs.map +0 -1
  468. package/dist/system-Cfo5a63a.cjs.map +0 -1
  469. package/dist/system-DT2JfUun.js.map +0 -1
  470. package/dist/workspace-Cz9hE2ei.cjs.map +0 -1
  471. package/dist/workspace-S5GiJ3Nx.js.map +0 -1
@@ -1,8 +1,8 @@
1
1
  const require_rolldown_runtime = require("./rolldown-runtime-Bd6kNlEP.cjs");
2
- const require_schema_D_ikovK6 = require("./schema-D_ikovK6-DQrOVw5N.cjs");
3
- require("./schema-C7CvwM1d.cjs");
2
+ const require_schema_BwlBcZRB = require("./schema-BwlBcZRB-BLwYP0BY.cjs");
3
+ require("./schema-DM4T8wfR.cjs");
4
4
  const require_sync$1 = require("./sync-C4LbbSKR.cjs");
5
- const require_dist = require("./dist-CLQt62Pi.cjs");
5
+ const require_dist = require("./dist-DO5NHh-t.cjs");
6
6
  let zod_v4 = require("zod/v4");
7
7
  zod_v4 = require_rolldown_runtime.__toESM(zod_v4, 1);
8
8
  let _mastra_core_schema = require("@mastra/core/schema");
@@ -4029,62 +4029,6 @@ async function e() {
4029
4029
  }((await WebAssembly.instantiate(t)).instance);
4030
4030
  }
4031
4031
  //#endregion
4032
- //#region ../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/tokenx/1.3.0/09093cdaeebfe25c39ba9052d6277b45fc99abf5e14e859f60f338f5c5160afd/node_modules/tokenx/dist/index.mjs
4033
- const PATTERNS = {
4034
- whitespace: /^\s+$/,
4035
- cjk: /[\u4E00-\u9FFF\u3400-\u4DBF\u3000-\u303F\uFF00-\uFFEF\u30A0-\u30FF\u2E80-\u2EFF\u31C0-\u31EF\u3200-\u32FF\u3300-\u33FF\uAC00-\uD7AF\u1100-\u11FF\u3130-\u318F\uA960-\uA97F\uD7B0-\uD7FF]/,
4036
- numeric: /^\d+(?:[.,]\d+)*$/,
4037
- punctuation: /[.,!?;(){}[\]<>:/\\|@#$%^&*+=`~_-]/,
4038
- alphanumeric: /^[a-zA-Z0-9\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF]+$/
4039
- };
4040
- const TOKEN_SPLIT_PATTERN = /* @__PURE__ */ new RegExp(`(\\s+|${PATTERNS.punctuation.source}+)`);
4041
- const DEFAULT_CHARS_PER_TOKEN = 6;
4042
- const SHORT_TOKEN_THRESHOLD = 3;
4043
- const DEFAULT_LANGUAGE_CONFIGS = [
4044
- {
4045
- pattern: /[äöüßẞ]/i,
4046
- averageCharsPerToken: 3
4047
- },
4048
- {
4049
- pattern: /[éèêëàâîïôûùüÿçœæáíóúñ]/i,
4050
- averageCharsPerToken: 3
4051
- },
4052
- {
4053
- pattern: /[ąćęłńóśźżěščřžýůúďťň]/i,
4054
- averageCharsPerToken: 3.5
4055
- }
4056
- ];
4057
- /**
4058
- * Estimates the number of tokens in a text string using heuristic rules.
4059
- */
4060
- function estimateTokenCount(text, options = {}) {
4061
- if (!text) return 0;
4062
- const { defaultCharsPerToken = DEFAULT_CHARS_PER_TOKEN, languageConfigs = DEFAULT_LANGUAGE_CONFIGS } = options;
4063
- const segments = text.split(TOKEN_SPLIT_PATTERN).filter(Boolean);
4064
- let tokenCount = 0;
4065
- for (const segment of segments) tokenCount += estimateSegmentTokens(segment, languageConfigs, defaultCharsPerToken);
4066
- return tokenCount;
4067
- }
4068
- function estimateSegmentTokens(segment, languageConfigs, defaultCharsPerToken) {
4069
- if (PATTERNS.whitespace.test(segment)) return 0;
4070
- if (PATTERNS.cjk.test(segment)) return getCharacterCount(segment);
4071
- if (PATTERNS.numeric.test(segment)) return 1;
4072
- if (segment.length <= SHORT_TOKEN_THRESHOLD) return 1;
4073
- if (PATTERNS.punctuation.test(segment)) return segment.length > 1 ? Math.ceil(segment.length / 2) : 1;
4074
- if (PATTERNS.alphanumeric.test(segment)) {
4075
- const charsPerToken$1 = getLanguageSpecificCharsPerToken(segment, languageConfigs) ?? defaultCharsPerToken;
4076
- return Math.ceil(segment.length / charsPerToken$1);
4077
- }
4078
- const charsPerToken = getLanguageSpecificCharsPerToken(segment, languageConfigs) ?? defaultCharsPerToken;
4079
- return Math.ceil(segment.length / charsPerToken);
4080
- }
4081
- function getLanguageSpecificCharsPerToken(segment, languageConfigs) {
4082
- for (const config of languageConfigs) if (config.pattern.test(segment)) return config.averageCharsPerToken;
4083
- }
4084
- function getCharacterCount(text) {
4085
- return Array.from(text).length;
4086
- }
4087
- //#endregion
4088
4032
  //#region ../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/diff/8.0.4/6781cdda9837821c30a1f4c4db1d9286b838fe139b78d9658b2471e961b45953/node_modules/diff/libesm/diff/base.js
4089
4033
  var import_sync = /* @__PURE__ */ require_rolldown_runtime.__toESM(require_sync$1.require_sync(), 1);
4090
4034
  var Diff = class {
@@ -4694,7 +4638,7 @@ function splitLines(text) {
4694
4638
  return result;
4695
4639
  }
4696
4640
  //#endregion
4697
- //#region ../memory/dist/src-Dt8oPiQN.js
4641
+ //#region ../memory/dist/src-zTE4189S.js
4698
4642
  var __defProp$3 = Object.defineProperty;
4699
4643
  var __exportAll = (all, no_symbols) => {
4700
4644
  let target = {};
@@ -22877,6 +22821,410 @@ function safeSlice(str, end) {
22877
22821
  const safeEnd = code >= 55296 && code <= 56319 ? end - 1 : end;
22878
22822
  return str.slice(0, safeEnd);
22879
22823
  }
22824
+ const PATTERNS = {
22825
+ whitespace: /^\s+$/,
22826
+ cjk: /[\u4E00-\u9FFF\u3400-\u4DBF\u3000-\u303F\uFF00-\uFFEF\u30A0-\u30FF\u2E80-\u2EFF\u31C0-\u31EF\u3200-\u32FF\u3300-\u33FF\uAC00-\uD7AF\u1100-\u11FF\u3130-\u318F\uA960-\uA97F\uD7B0-\uD7FF]/,
22827
+ numeric: /^\d+(?:[.,]\d+)*$/,
22828
+ punctuation: /[.,!?;(){}[\]<>:/\\|@#$%^&*+=`~_-]/,
22829
+ alphanumeric: /^[a-zA-Z0-9\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF]+$/
22830
+ };
22831
+ const TOKEN_SPLIT_PATTERN = /* @__PURE__ */ new RegExp(`(\\s+|${PATTERNS.punctuation.source}+)`);
22832
+ const DEFAULT_CHARS_PER_TOKEN = 6;
22833
+ const SHORT_TOKEN_THRESHOLD = 3;
22834
+ const DEFAULT_LANGUAGE_CONFIGS = [
22835
+ {
22836
+ pattern: /[äöüßẞ]/i,
22837
+ averageCharsPerToken: 3
22838
+ },
22839
+ {
22840
+ pattern: /[éèêëàâîïôûùüÿçœæáíóúñ]/i,
22841
+ averageCharsPerToken: 3
22842
+ },
22843
+ {
22844
+ pattern: /[ąćęłńóśźżěščřžýůúďťň]/i,
22845
+ averageCharsPerToken: 3.5
22846
+ }
22847
+ ];
22848
+ /**
22849
+ * Estimates the number of tokens in a text string using heuristic rules.
22850
+ */
22851
+ function estimateTokenCount(text, options = {}) {
22852
+ if (!text) return 0;
22853
+ const { defaultCharsPerToken = DEFAULT_CHARS_PER_TOKEN, languageConfigs = DEFAULT_LANGUAGE_CONFIGS } = options;
22854
+ const segments = text.split(TOKEN_SPLIT_PATTERN).filter(Boolean);
22855
+ let tokenCount = 0;
22856
+ for (const segment of segments) tokenCount += estimateSegmentTokens(segment, languageConfigs, defaultCharsPerToken);
22857
+ return tokenCount;
22858
+ }
22859
+ function estimateSegmentTokens(segment, languageConfigs, defaultCharsPerToken) {
22860
+ if (PATTERNS.whitespace.test(segment)) return 0;
22861
+ if (PATTERNS.cjk.test(segment)) return getCharacterCount(segment);
22862
+ if (PATTERNS.numeric.test(segment)) return 1;
22863
+ if (segment.length <= SHORT_TOKEN_THRESHOLD) return 1;
22864
+ if (PATTERNS.punctuation.test(segment)) return segment.length > 1 ? Math.ceil(segment.length / 2) : 1;
22865
+ if (PATTERNS.alphanumeric.test(segment)) {
22866
+ const charsPerToken$1 = getLanguageSpecificCharsPerToken(segment, languageConfigs) ?? defaultCharsPerToken;
22867
+ return Math.ceil(segment.length / charsPerToken$1);
22868
+ }
22869
+ const charsPerToken = getLanguageSpecificCharsPerToken(segment, languageConfigs) ?? defaultCharsPerToken;
22870
+ return Math.ceil(segment.length / charsPerToken);
22871
+ }
22872
+ function getLanguageSpecificCharsPerToken(segment, languageConfigs) {
22873
+ for (const config of languageConfigs) if (config.pattern.test(segment)) return config.averageCharsPerToken;
22874
+ }
22875
+ function getCharacterCount(text) {
22876
+ return Array.from(text).length;
22877
+ }
22878
+ const DEFAULT_OBSERVER_TOOL_ARGUMENT_MAX_TOKENS = 2e3;
22879
+ const OBSERVER_TOOL_ARGUMENT_INLINE_STRING_MAX_CHARS = 160;
22880
+ const OBSERVER_TOOL_ARGUMENT_MAX_DEPTH = 5;
22881
+ const OBSERVER_TOOL_ARGUMENT_MAX_ENTRIES_PER_CONTAINER = 20;
22882
+ const OBSERVER_TOOL_ARGUMENT_MAX_OUTLINE_ENTRIES = 100;
22883
+ const OBSERVER_TOOL_ARGUMENT_MAX_PATH_CHARS = 160;
22884
+ function isObjectLike$1(value) {
22885
+ return typeof value === "object" && value !== null;
22886
+ }
22887
+ function sanitizeSurrogates(value) {
22888
+ let sanitized = "";
22889
+ for (let index = 0; index < value.length; index++) {
22890
+ const code = value.charCodeAt(index);
22891
+ if (code >= 55296 && code <= 56319) {
22892
+ const next = value.charCodeAt(index + 1);
22893
+ if (next >= 56320 && next <= 57343) {
22894
+ sanitized += value.charAt(index) + value.charAt(index + 1);
22895
+ index++;
22896
+ } else sanitized += "�";
22897
+ continue;
22898
+ }
22899
+ sanitized += code >= 56320 && code <= 57343 ? "�" : value[index];
22900
+ }
22901
+ return sanitized;
22902
+ }
22903
+ function stablePathDigest(value) {
22904
+ let hash = 2166136261;
22905
+ for (let index = 0; index < value.length; index++) hash = Math.imul(hash ^ value.charCodeAt(index), 16777619);
22906
+ return (hash >>> 0).toString(16).padStart(8, "0");
22907
+ }
22908
+ function safeTail(value, length) {
22909
+ let start = Math.max(0, value.length - length);
22910
+ if (start > 0) {
22911
+ const code = value.charCodeAt(start);
22912
+ if (code >= 56320 && code <= 57343) start++;
22913
+ }
22914
+ return value.slice(start);
22915
+ }
22916
+ function truncatePath(path$3) {
22917
+ if (path$3.length <= OBSERVER_TOOL_ARGUMENT_MAX_PATH_CHARS) return path$3;
22918
+ const headLength = 50;
22919
+ const tailLength = 60;
22920
+ const omitted = path$3.length - headLength - tailLength;
22921
+ return `${safeSlice(path$3, headLength)}…[${omitted} chars; ${stablePathDigest(path$3)}]…${safeTail(path$3, tailLength)}`;
22922
+ }
22923
+ function formatPath(parent, key, isArray) {
22924
+ if (isArray) return truncatePath(`${parent}[${key}]`);
22925
+ const stringKey = String(key);
22926
+ const segment = /^[A-Za-z_$][A-Za-z0-9_$]*$/.test(stringKey) ? stringKey : `[${JSON.stringify(stringKey)}]`;
22927
+ return truncatePath(parent ? `${parent}.${segment}` : segment);
22928
+ }
22929
+ function formatPrimitive(value) {
22930
+ if (typeof value === "string") return JSON.stringify(value);
22931
+ if (typeof value === "bigint") return `<bigint> ${value}`;
22932
+ if (typeof value === "symbol" || typeof value === "function") return JSON.stringify(String(value));
22933
+ if (value === void 0) return "<undefined>";
22934
+ if (typeof value === "number" && Object.is(value, -0)) return "-0";
22935
+ return String(value);
22936
+ }
22937
+ function containerSummary(value) {
22938
+ if (!Array.isArray(value)) return "<object>";
22939
+ try {
22940
+ return `<array, ${value.length} ${value.length === 1 ? "item" : "items"}>`;
22941
+ } catch {
22942
+ return "<array, unknown length>";
22943
+ }
22944
+ }
22945
+ function readEntries(value) {
22946
+ const entries = [];
22947
+ try {
22948
+ if (Array.isArray(value)) {
22949
+ const length = value.length;
22950
+ const visibleLength = Math.min(length, OBSERVER_TOOL_ARGUMENT_MAX_ENTRIES_PER_CONTAINER);
22951
+ for (let index = 0; index < visibleLength; index++) {
22952
+ if (!(index in value)) {
22953
+ entries.push({
22954
+ key: index,
22955
+ unavailable: "hole"
22956
+ });
22957
+ continue;
22958
+ }
22959
+ try {
22960
+ entries.push({
22961
+ key: index,
22962
+ value: value[index]
22963
+ });
22964
+ } catch {
22965
+ entries.push({
22966
+ key: index,
22967
+ unavailable: "unreadable"
22968
+ });
22969
+ }
22970
+ }
22971
+ return {
22972
+ entries,
22973
+ hasMore: length > visibleLength,
22974
+ unavailable: false
22975
+ };
22976
+ }
22977
+ let hasMore = false;
22978
+ for (const key in value) {
22979
+ if (!Object.prototype.hasOwnProperty.call(value, key)) continue;
22980
+ if (entries.length >= OBSERVER_TOOL_ARGUMENT_MAX_ENTRIES_PER_CONTAINER) {
22981
+ hasMore = true;
22982
+ break;
22983
+ }
22984
+ try {
22985
+ entries.push({
22986
+ key,
22987
+ value: value[key]
22988
+ });
22989
+ } catch {
22990
+ entries.push({
22991
+ key,
22992
+ unavailable: "unreadable"
22993
+ });
22994
+ }
22995
+ }
22996
+ return {
22997
+ entries,
22998
+ hasMore,
22999
+ unavailable: false
23000
+ };
23001
+ } catch {
23002
+ return {
23003
+ entries,
23004
+ hasMore: false,
23005
+ unavailable: true
23006
+ };
23007
+ }
23008
+ }
23009
+ function fits(text, limits) {
23010
+ return text.length <= limits.maxCharacters && estimateTokenCount(text) <= limits.maxTokens;
23011
+ }
23012
+ function joinEntries(entries, marker) {
23013
+ const lines = [...entries].sort((a, b) => a.order - b.order).map((entry) => entry.text);
23014
+ if (marker) lines.push(marker);
23015
+ return lines.join("\n");
23016
+ }
23017
+ function selectOutlineEntries(entries, limits) {
23018
+ const all = joinEntries(entries);
23019
+ if (fits(all, limits)) return all;
23020
+ const marker = "... [additional argument fields omitted by size limit]";
23021
+ const selected = [];
23022
+ const candidates = [...entries].sort((a, b) => {
23023
+ if (a.depth !== b.depth) return a.depth - b.depth;
23024
+ return estimateTokenCount(a.text) - estimateTokenCount(b.text) || a.text.length - b.text.length || a.order - b.order;
23025
+ });
23026
+ for (const candidate of candidates) if (fits(joinEntries([...selected, candidate], marker), limits)) selected.push(candidate);
23027
+ const rendered = joinEntries(selected, marker);
23028
+ if (fits(rendered, limits)) return rendered;
23029
+ if (fits(marker, limits)) return marker;
23030
+ return fits("…", limits) ? "…" : "";
23031
+ }
23032
+ function indentPreview(value) {
23033
+ return value.split("\n").map((line) => ` | ${line}`).join("\n");
23034
+ }
23035
+ function formatPreview(path$4, value, limits, prefix = "") {
23036
+ const sanitizedValue = sanitizeSurrogates(value);
23037
+ const marker = (visible) => {
23038
+ const omitted = sanitizedValue.length - visible.length;
23039
+ return `${path$4}:\n${indentPreview(visible)}${omitted > 0 ? `\n | ... [${omitted} characters omitted]` : ""}`;
23040
+ };
23041
+ let low = 0;
23042
+ let high = sanitizedValue.length;
23043
+ let best = "";
23044
+ while (low <= high) {
23045
+ const mid = Math.floor((low + high) / 2);
23046
+ const candidate = marker(safeSlice(sanitizedValue, mid));
23047
+ if (fits(prefix ? `${prefix}\n${candidate}` : candidate, limits)) {
23048
+ best = candidate;
23049
+ low = mid + 1;
23050
+ } else high = mid - 1;
23051
+ }
23052
+ return best;
23053
+ }
23054
+ function appendWithinBudget(base, addition, limits) {
23055
+ if (!addition) return;
23056
+ const candidate = base ? `${base}\n${addition}` : addition;
23057
+ return fits(candidate, limits) ? candidate : void 0;
23058
+ }
23059
+ /**
23060
+ * Formats tool arguments for the Observer without allowing a large early value
23061
+ * to hide concise sibling fields. A breadth-first structural outline is selected
23062
+ * before bounded previews of large strings are added.
23063
+ */
23064
+ function formatToolArgumentsForObserver(value, options) {
23065
+ const limits = {
23066
+ maxTokens: options?.maxTokens ?? DEFAULT_OBSERVER_TOOL_ARGUMENT_MAX_TOKENS,
23067
+ maxCharacters: options?.maxCharacters ?? Number.POSITIVE_INFINITY
23068
+ };
23069
+ if (limits.maxTokens <= 0 || limits.maxCharacters <= 0) return "";
23070
+ if (!isObjectLike$1(value)) {
23071
+ if (typeof value !== "string" || value.length <= OBSERVER_TOOL_ARGUMENT_INLINE_STRING_MAX_CHARS) {
23072
+ const primitive = formatPrimitive(value);
23073
+ return fits(primitive, limits) ? primitive : fits("…", limits) ? "…" : "";
23074
+ }
23075
+ const summary = `<string, ${value.length} characters; preview size-limited>`;
23076
+ const rendered = appendWithinBudget(summary, formatPreview("preview", value, limits, summary), limits);
23077
+ if (rendered) return rendered;
23078
+ if (fits(summary, limits)) return summary;
23079
+ return fits("…", limits) ? "…" : "";
23080
+ }
23081
+ const outline = [];
23082
+ const previews = [];
23083
+ const pending = [{
23084
+ path: "",
23085
+ value,
23086
+ depth: 0,
23087
+ ancestors: /* @__PURE__ */ new Set([value])
23088
+ }];
23089
+ let outlineEntries = 0;
23090
+ let order = 0;
23091
+ let structuralLimitReached = false;
23092
+ while (pending.length > 0 && outlineEntries < OBSERVER_TOOL_ARGUMENT_MAX_OUTLINE_ENTRIES) {
23093
+ const current = pending.shift();
23094
+ const read = readEntries(current.value);
23095
+ if (read.unavailable) {
23096
+ outline.push({
23097
+ text: `${current.path || "arguments"}: [unavailable container]`,
23098
+ depth: current.depth,
23099
+ order: order++
23100
+ });
23101
+ outlineEntries++;
23102
+ continue;
23103
+ }
23104
+ if (read.entries.length === 0 && !read.hasMore) {
23105
+ outline.push({
23106
+ text: `${current.path || "arguments"}: [empty ${Array.isArray(current.value) ? "array" : "object"}]`,
23107
+ depth: current.depth,
23108
+ order: order++
23109
+ });
23110
+ outlineEntries++;
23111
+ continue;
23112
+ }
23113
+ if (read.hasMore) {
23114
+ outline.push({
23115
+ text: `${current.path || (Array.isArray(current.value) ? "items" : "fields")}: ... [additional entries omitted]`,
23116
+ depth: current.depth,
23117
+ order: order++
23118
+ });
23119
+ outlineEntries++;
23120
+ }
23121
+ for (const entry of read.entries) {
23122
+ if (outlineEntries >= OBSERVER_TOOL_ARGUMENT_MAX_OUTLINE_ENTRIES) {
23123
+ structuralLimitReached = true;
23124
+ break;
23125
+ }
23126
+ const path$5 = formatPath(current.path, entry.key, Array.isArray(current.value));
23127
+ outlineEntries++;
23128
+ if (entry.unavailable) {
23129
+ outline.push({
23130
+ text: `${path$5}: [${entry.unavailable}]`,
23131
+ depth: current.depth,
23132
+ order: order++
23133
+ });
23134
+ continue;
23135
+ }
23136
+ const entryValue = entry.value;
23137
+ if (typeof entryValue === "string" && entryValue.length > OBSERVER_TOOL_ARGUMENT_INLINE_STRING_MAX_CHARS) {
23138
+ outline.push({
23139
+ text: `${path$5}: <string, ${entryValue.length} characters; preview size-limited>`,
23140
+ depth: current.depth,
23141
+ order: order++
23142
+ });
23143
+ previews.push({
23144
+ path: path$5,
23145
+ value: entryValue
23146
+ });
23147
+ continue;
23148
+ }
23149
+ if (!isObjectLike$1(entryValue)) {
23150
+ outline.push({
23151
+ text: `${path$5}: ${formatPrimitive(entryValue)}`,
23152
+ depth: current.depth,
23153
+ order: order++
23154
+ });
23155
+ continue;
23156
+ }
23157
+ if (current.ancestors.has(entryValue)) {
23158
+ outline.push({
23159
+ text: `${path$5}: [circular]`,
23160
+ depth: current.depth,
23161
+ order: order++
23162
+ });
23163
+ continue;
23164
+ }
23165
+ const summary = containerSummary(entryValue);
23166
+ if (current.depth >= OBSERVER_TOOL_ARGUMENT_MAX_DEPTH) {
23167
+ outline.push({
23168
+ text: `${path$5}: ${summary} [max depth reached]`,
23169
+ depth: current.depth,
23170
+ order: order++
23171
+ });
23172
+ continue;
23173
+ }
23174
+ outline.push({
23175
+ text: `${path$5}: ${summary}`,
23176
+ depth: current.depth,
23177
+ order: order++
23178
+ });
23179
+ pending.push({
23180
+ path: path$5,
23181
+ value: entryValue,
23182
+ depth: current.depth + 1,
23183
+ ancestors: /* @__PURE__ */ new Set([...current.ancestors, entryValue])
23184
+ });
23185
+ }
23186
+ }
23187
+ if (pending.length > 0 || structuralLimitReached) outline.push({
23188
+ text: "... [additional nested entries omitted by structure limit]",
23189
+ depth: Number.POSITIVE_INFINITY,
23190
+ order: order++
23191
+ });
23192
+ if (previews.length === 0) return selectOutlineEntries(outline, limits);
23193
+ const previewHeader = "Large string previews (size-limited):";
23194
+ const renderedOutline = selectOutlineEntries(outline, limits);
23195
+ const withPreviewHeader = appendWithinBudget(renderedOutline, previewHeader, limits);
23196
+ if (!withPreviewHeader) return renderedOutline;
23197
+ let rendered = withPreviewHeader;
23198
+ let renderedPreviews = 0;
23199
+ let omittedPreviews = 0;
23200
+ for (let index = 0; index < previews.length; index++) {
23201
+ const remainingCount = previews.length - index;
23202
+ const remainingTokens = Math.max(0, limits.maxTokens - estimateTokenCount(rendered));
23203
+ const remainingCharacters = Math.max(0, limits.maxCharacters - rendered.length - 1);
23204
+ const previewLimits = {
23205
+ maxTokens: estimateTokenCount(rendered) + Math.floor(remainingTokens / remainingCount),
23206
+ maxCharacters: rendered.length + 1 + Math.floor(remainingCharacters / remainingCount)
23207
+ };
23208
+ const preview = formatPreview(previews[index].path, previews[index].value, previewLimits, rendered);
23209
+ if (!preview) {
23210
+ omittedPreviews++;
23211
+ continue;
23212
+ }
23213
+ const withPreview = appendWithinBudget(rendered, preview, limits);
23214
+ if (!withPreview) {
23215
+ omittedPreviews++;
23216
+ continue;
23217
+ }
23218
+ rendered = withPreview;
23219
+ renderedPreviews++;
23220
+ }
23221
+ if (renderedPreviews === 0) return renderedOutline;
23222
+ if (omittedPreviews > 0) {
23223
+ const marker = `... [${omittedPreviews} large string ${omittedPreviews === 1 ? "preview" : "previews"} omitted]`;
23224
+ rendered = appendWithinBudget(rendered, marker, limits) ?? rendered;
23225
+ }
23226
+ return rendered;
23227
+ }
22880
23228
  const ENCRYPTED_CONTENT_KEY = "encryptedContent";
22881
23229
  const ENCRYPTED_CONTENT_REDACTION_THRESHOLD = 256;
22882
23230
  function isObjectLike(value) {
@@ -22954,7 +23302,7 @@ function truncateStringByTokens(text, maxTokens) {
22954
23302
  return best;
22955
23303
  }
22956
23304
  function formatToolResultForObserver(value, options) {
22957
- return truncateStringByTokens(stringifyToolResult(value), options?.maxTokens ?? 1e4);
23305
+ return truncateStringByTokens(stringifyToolResult(value), options?.maxTokens ?? 5e3);
22958
23306
  }
22959
23307
  /**
22960
23308
  * The core extraction instructions for the Observer.
@@ -23639,9 +23987,52 @@ function getTemporalGapMarkerText(msg) {
23639
23987
  if (metadata?.reminderType === "temporal-gap" && typeof metadata.gapText === "string") return metadata.gapText;
23640
23988
  if (typeof metadata?.systemReminder === "object" && metadata.systemReminder && "type" in metadata.systemReminder && metadata.systemReminder.type === "temporal-gap" && "gapText" in metadata.systemReminder && typeof metadata.systemReminder.gapText === "string") return metadata.systemReminder.gapText;
23641
23989
  }
23642
- function formatObserverMessage(msg, counter, options) {
23990
+ function isCallLikeToolInvocation(invocation) {
23991
+ return invocation.state === "call" || invocation.state === "partial-call" || invocation.state === "approval-requested" || invocation.state === "approval-responded";
23992
+ }
23993
+ function isTerminalToolInvocation(invocation) {
23994
+ return invocation.state === "result" || invocation.state === "output-error" || invocation.state === "output-denied";
23995
+ }
23996
+ function createObserverToolFormattingState(messages) {
23997
+ const exchanges = /* @__PURE__ */ new Map();
23998
+ const occurrences = /* @__PURE__ */ new Map();
23999
+ let occurrence = 0;
24000
+ for (const message of messages) {
24001
+ if (typeof message.content === "string" || !Array.isArray(message.content?.parts)) continue;
24002
+ for (const part of message.content.parts) {
24003
+ if (part.type !== "tool-invocation") continue;
24004
+ const invocation = part.toolInvocation;
24005
+ occurrences.set(part, occurrence);
24006
+ if (!isCallLikeToolInvocation(invocation) && !isTerminalToolInvocation(invocation)) {
24007
+ occurrence++;
24008
+ continue;
24009
+ }
24010
+ const exchange = exchanges.get(invocation.toolCallId) ?? { firstOccurrence: occurrence };
24011
+ if (isCallLikeToolInvocation(invocation) && (invocation.args !== void 0 || exchange.signature === void 0)) exchange.signature = invocation;
24012
+ if (isTerminalToolInvocation(invocation)) exchange.terminal = {
24013
+ ...invocation,
24014
+ occurrence
24015
+ };
24016
+ exchanges.set(invocation.toolCallId, exchange);
24017
+ occurrence++;
24018
+ }
24019
+ }
24020
+ for (const exchange of exchanges.values()) if (exchange.terminal?.args !== void 0) exchange.signature = exchange.terminal;
24021
+ else if (!exchange.signature && exchange.terminal) exchange.signature = exchange.terminal;
24022
+ return {
24023
+ exchanges,
24024
+ occurrences,
24025
+ emittedCalls: /* @__PURE__ */ new Set(),
24026
+ emittedOutcomes: /* @__PURE__ */ new Set()
24027
+ };
24028
+ }
24029
+ function formatObserverToolArguments(args, maxCharacters) {
24030
+ if (args === void 0) return maybeTruncate("[arguments unavailable]", maxCharacters);
24031
+ return formatToolArgumentsForObserver(args, { maxCharacters: maxCharacters || void 0 });
24032
+ }
24033
+ function formatObserverMessage(msg, counter, toolFormatting, options) {
23643
24034
  const maxLen = options?.maxPartLength;
23644
- const maxToolResultTokens = options?.maxToolResultTokens ?? 1e4;
24035
+ const maxToolResultTokens = options?.maxToolResultTokens ?? 5e3;
23645
24036
  const attachmentFilter = options?.attachmentFilter;
23646
24037
  const role = msg.role.charAt(0).toUpperCase() + msg.role.slice(1);
23647
24038
  const attachments = [];
@@ -23668,14 +24059,31 @@ function formatObserverMessage(msg, counter, options) {
23668
24059
  }
23669
24060
  if (part.type === "tool-invocation") {
23670
24061
  const inv = part.toolInvocation;
24062
+ const occurrence = toolFormatting.occurrences.get(part);
24063
+ const exchange = toolFormatting.exchanges.get(inv.toolCallId);
24064
+ if (exchange && occurrence === exchange.firstOccurrence && exchange.signature && !toolFormatting.emittedCalls.has(inv.toolCallId)) {
24065
+ toolFormatting.emittedCalls.add(inv.toolCallId);
24066
+ pushLine(`Tool Call ${exchange.signature.toolName}`, formatObserverToolArguments(exchange.signature.args, maxLen), partCreatedAt);
24067
+ }
23671
24068
  if (inv.state === "result") {
23672
24069
  const { value: resultForObserver } = resolveToolResultValue(part, inv.result);
23673
24070
  const { resultWithoutAttachments, attachments: extractedAttachments } = extractToolResultAttachments(resultForObserver, counter, attachmentFilter);
23674
24071
  if (extractedAttachments.length > 0) attachments.push(...extractedAttachments);
23675
- pushLine(`Tool Result ${inv.toolName}`, maybeTruncate(formatToolResultForObserver(resultWithoutAttachments, { maxTokens: maxToolResultTokens }), maxLen), partCreatedAt);
24072
+ if (exchange?.terminal?.occurrence === occurrence && !toolFormatting.emittedOutcomes.has(inv.toolCallId)) {
24073
+ toolFormatting.emittedOutcomes.add(inv.toolCallId);
24074
+ const hasResult = resultWithoutAttachments !== void 0 && (typeof resultWithoutAttachments !== "string" || resultWithoutAttachments.trim().length > 0);
24075
+ const body = inv.isError ? hasResult ? formatToolResultForObserver(resultWithoutAttachments, { maxTokens: maxToolResultTokens }) : inv.errorText?.trim() ? inv.errorText : "Tool execution failed" : hasResult ? formatToolResultForObserver(resultWithoutAttachments, { maxTokens: maxToolResultTokens }) : "[empty result]";
24076
+ pushLine(`${inv.isError ? "Tool Error" : "Tool Result"} ${inv.toolName}`, maybeTruncate(body, maxLen), partCreatedAt);
24077
+ }
24078
+ return;
24079
+ }
24080
+ if (exchange?.terminal?.occurrence === occurrence && !toolFormatting.emittedOutcomes.has(inv.toolCallId)) {
24081
+ toolFormatting.emittedOutcomes.add(inv.toolCallId);
24082
+ if (inv.state === "output-error") pushLine(`Tool Error ${inv.toolName}`, maybeTruncate(inv.errorText?.trim() ? inv.errorText : "Tool execution failed", maxLen), partCreatedAt);
24083
+ else if (inv.state === "output-denied") pushLine(`Tool Denied ${inv.toolName}`, maybeTruncate(inv.approval?.reason?.trim() ? inv.approval.reason : "Tool call was not approved by the user", maxLen), partCreatedAt);
23676
24084
  return;
23677
24085
  }
23678
- pushLine(`Tool Call ${inv.toolName}`, maybeTruncate(JSON.stringify(inv.args, null, 2), maxLen), partCreatedAt);
24086
+ if (!exchange) pushLine(`Tool Call ${inv.toolName}`, formatObserverToolArguments(inv.args, maxLen), partCreatedAt);
23679
24087
  return;
23680
24088
  }
23681
24089
  const partType = part.type;
@@ -23709,10 +24117,11 @@ function formatMessagesForObserver(messages, options) {
23709
24117
  nextImageId: 1,
23710
24118
  nextFileId: 1
23711
24119
  };
24120
+ const toolFormatting = createObserverToolFormattingState(messages);
23712
24121
  const sections = [];
23713
24122
  let context = {};
23714
24123
  for (const message of messages) {
23715
- const formatted = formatObserverMessage(message, counter, options);
24124
+ const formatted = formatObserverMessage(message, counter, toolFormatting, options);
23716
24125
  if (formatted.lines.length === 0) continue;
23717
24126
  const rendered = formatObserverLines(formatted.lines, context);
23718
24127
  if (!rendered.text) continue;
@@ -23735,13 +24144,14 @@ function buildObserverHistoryMessage(messages, options) {
23735
24144
  nextImageId: 1,
23736
24145
  nextFileId: 1
23737
24146
  };
24147
+ const toolFormatting = createObserverToolFormattingState(messages);
23738
24148
  const content = [{
23739
24149
  type: "text",
23740
24150
  text: "## New Message History to Observe\n\n"
23741
24151
  }];
23742
24152
  let context = {};
23743
24153
  messages.forEach((message) => {
23744
- const formatted = formatObserverMessage(message, counter, options);
24154
+ const formatted = formatObserverMessage(message, counter, toolFormatting, options);
23745
24155
  if (formatted.lines.length === 0 && formatted.attachments.length === 0) return;
23746
24156
  context = appendFormattedObserverMessage(content, formatted, context);
23747
24157
  });
@@ -23769,10 +24179,11 @@ function buildMultiThreadObserverHistoryMessage(messagesByThread, threadOrder, o
23769
24179
  const messages = messagesByThread.get(threadId);
23770
24180
  if (!messages || messages.length === 0) return;
23771
24181
  const threadContent = [];
24182
+ const toolFormatting = createObserverToolFormattingState(messages);
23772
24183
  let context = {};
23773
24184
  let hasVisibleContent = false;
23774
24185
  messages.forEach((message) => {
23775
- const formatted = formatObserverMessage(message, counter, options);
24186
+ const formatted = formatObserverMessage(message, counter, toolFormatting, options);
23776
24187
  if (formatted.lines.length === 0 && formatted.attachments.length === 0) return;
23777
24188
  context = appendFormattedObserverMessage(threadContent, formatted, context);
23778
24189
  hasVisibleContent = true;
@@ -24458,15 +24869,14 @@ var ObserverRunner = class {
24458
24869
  this.mastra = mastra;
24459
24870
  }
24460
24871
  createAgent(model, isMultiThread = false, memory, extractors = this.observationConfig.extractors ?? []) {
24461
- const agent = new _mastra_core_agent.Agent({
24872
+ return new _mastra_core_agent.Agent({
24462
24873
  id: isMultiThread ? "multi-thread-observer" : "observational-memory-observer",
24463
24874
  name: isMultiThread ? "multi-thread-observer" : "Observer",
24464
24875
  instructions: buildObserverSystemPrompt(isMultiThread, this.observationConfig.instruction, this.observationConfig.threadTitle, extractors),
24465
24876
  model,
24466
- ...memory ? { memory } : {}
24877
+ ...memory ? { memory } : {},
24878
+ ...this.mastra ? { mastra: this.mastra } : {}
24467
24879
  });
24468
- if (this.mastra) agent.__registerMastra(this.mastra);
24469
- return agent;
24470
24880
  }
24471
24881
  /**
24472
24882
  * Extract a router-style model ID (`provider/model`) from a model config.
@@ -25524,9 +25934,9 @@ function createTimeoutSignal(timeoutMs) {
25524
25934
  };
25525
25935
  }
25526
25936
  function getNumericResponseField(value, paths) {
25527
- for (const path$3 of paths) {
25937
+ for (const path$6 of paths) {
25528
25938
  let current = value;
25529
- for (const segment of path$3) {
25939
+ for (const segment of path$6) {
25530
25940
  current = getObjectValue(current, segment);
25531
25941
  if (current === void 0) break;
25532
25942
  }
@@ -26108,7 +26518,7 @@ var TokenCounter = class TokenCounter {
26108
26518
  let tokens = 0;
26109
26519
  let overheadDelta = 0;
26110
26520
  if (invocation.toolName) tokens += this.readOrPersistPartEstimate(part, "tool-call-name", invocation.toolName);
26111
- if (invocation.args) if (typeof invocation.args === "string") tokens += this.readOrPersistPartEstimate(part, "tool-call-args", invocation.args);
26521
+ if (invocation.args !== void 0) if (typeof invocation.args === "string") tokens += this.readOrPersistPartEstimate(part, "tool-call-args", invocation.args);
26112
26522
  else {
26113
26523
  const argsJson = JSON.stringify(invocation.args);
26114
26524
  tokens += this.readOrPersistPartEstimate(part, "tool-call-args-json", argsJson);
@@ -26154,8 +26564,11 @@ var TokenCounter = class TokenCounter {
26154
26564
  }
26155
26565
  if (state === "result") {
26156
26566
  extraMessageDelta++;
26567
+ const signature = this.countToolCallSignature(part, invocation);
26568
+ tokens += signature.tokens;
26569
+ overheadDelta += signature.overheadDelta;
26157
26570
  const { value: resultForCounting, usingStoredModelOutput } = this.resolveToolResultForTokenCounting(part, invocation.result);
26158
- if (resultForCounting !== void 0) {
26571
+ if (resultForCounting !== void 0 && (typeof resultForCounting !== "string" || resultForCounting.trim().length > 0)) {
26159
26572
  const contentTokens = this.countMultimodalToolResultContent(part, resultForCounting);
26160
26573
  if (contentTokens !== void 0) tokens += contentTokens;
26161
26574
  else {
@@ -26163,6 +26576,9 @@ var TokenCounter = class TokenCounter {
26163
26576
  tokens += this.readOrPersistPartEstimate(part, usingStoredModelOutput ? "tool-result-model-output-json" : "tool-result-json", formattedResult);
26164
26577
  }
26165
26578
  if (typeof resultForCounting !== "string") overheadDelta -= 12;
26579
+ } else {
26580
+ const fallback = invocation.isError ? invocation.errorText?.trim() ? invocation.errorText : "Tool execution failed" : "[empty result]";
26581
+ tokens += this.readOrPersistPartEstimate(part, invocation.isError ? "tool-result-error" : "tool-result-json", fallback);
26166
26582
  }
26167
26583
  return {
26168
26584
  tokens,
@@ -26172,7 +26588,10 @@ var TokenCounter = class TokenCounter {
26172
26588
  }
26173
26589
  if (state === "output-denied") {
26174
26590
  extraMessageDelta++;
26175
- const reason = invocation.approval?.reason ?? "Tool call was not approved by the user";
26591
+ const signature = this.countToolCallSignature(part, invocation);
26592
+ tokens += signature.tokens;
26593
+ overheadDelta += signature.overheadDelta;
26594
+ const reason = invocation.approval?.reason?.trim() ? invocation.approval.reason : "Tool call was not approved by the user";
26176
26595
  tokens += this.readOrPersistPartEstimate(part, "tool-result-denied", reason);
26177
26596
  return {
26178
26597
  tokens,
@@ -26182,7 +26601,10 @@ var TokenCounter = class TokenCounter {
26182
26601
  }
26183
26602
  if (state === "output-error") {
26184
26603
  extraMessageDelta++;
26185
- const errorMessage = typeof invocation.errorText === "string" ? invocation.errorText : "Tool execution failed";
26604
+ const signature = this.countToolCallSignature(part, invocation);
26605
+ tokens += signature.tokens;
26606
+ overheadDelta += signature.overheadDelta;
26607
+ const errorMessage = invocation.errorText?.trim() ? invocation.errorText : "Tool execution failed";
26186
26608
  tokens += this.readOrPersistPartEstimate(part, "tool-result-error", errorMessage);
26187
26609
  return {
26188
26610
  tokens,
@@ -26209,7 +26631,12 @@ var TokenCounter = class TokenCounter {
26209
26631
  };
26210
26632
  }
26211
26633
  /**
26212
- * Count tokens in a single message
26634
+ * Count tokens in a single message.
26635
+ *
26636
+ * Canonical terminal invocations carry their call signature and outcome in one part. Legacy or
26637
+ * foreign histories may instead repeat the same signature across separate call and result
26638
+ * messages; those signatures are intentionally counted once per message because this API has no
26639
+ * sequence context. The conservative overcount can activate observation earlier, never later.
26213
26640
  */
26214
26641
  countMessage(message) {
26215
26642
  let payloadTokens = this.countString(message.role);
@@ -26897,13 +27324,13 @@ function renderFormattedParts(parts, timestamps, options) {
26897
27324
  tokenOffset: expandedTokens - options.maxTokens
26898
27325
  };
26899
27326
  }
26900
- async function recallPart({ memory, threadId, resourceId, cursor, partIndex, charOffset, threadScope, maxTokens = DEFAULT_MAX_RESULT_TOKENS }) {
27327
+ async function recallPart({ memory, threadId, resourceId, cursor, partIndex, charOffset, threadScope, retrievalScope = "thread", maxTokens = DEFAULT_MAX_RESULT_TOKENS }) {
26901
27328
  if (!memory || typeof memory.getMemoryStore !== "function") throw new Error("Memory instance is required for recall");
26902
27329
  if (!threadId) throw new Error("Thread ID is required for recall");
26903
27330
  const resolved = await resolveCursorMessage(memory, cursor, {
26904
27331
  resourceId,
26905
27332
  threadScope,
26906
- enforceThreadScope: false
27333
+ enforceThreadScope: retrievalScope !== "resource"
26907
27334
  });
26908
27335
  if ("hint" in resolved) throw new Error(resolved.hint);
26909
27336
  const allParts = formatMessageParts(resolved, "high");
@@ -26914,7 +27341,7 @@ async function recallPart({ memory, threadId, resourceId, cursor, partIndex, cha
26914
27341
  if (partIndex > Math.max(...allParts.map((p) => p.partIndex))) {
26915
27342
  const nextMessage = await getNextVisibleMessage({
26916
27343
  memory,
26917
- threadId,
27344
+ threadId: resolved.threadId ?? threadId,
26918
27345
  resourceId,
26919
27346
  after: resolved.createdAt
26920
27347
  });
@@ -26953,7 +27380,7 @@ async function recallPart({ memory, threadId, resourceId, cursor, partIndex, cha
26953
27380
  note
26954
27381
  };
26955
27382
  }
26956
- async function recallMessages({ memory, threadId, resourceId, cursor, page = 1, limit = 20, detail = "low", partType, toolName, threadScope, maxTokens = DEFAULT_MAX_RESULT_TOKENS }) {
27383
+ async function recallMessages({ memory, threadId, resourceId, cursor, page = 1, limit = 20, detail = "low", partType, toolName, threadScope, retrievalScope = "thread", maxTokens = DEFAULT_MAX_RESULT_TOKENS }) {
26957
27384
  if (!memory) throw new Error("Memory instance is required for recall");
26958
27385
  if (!threadId) throw new Error("Thread ID is required for recall");
26959
27386
  if (typeof memory.getMemoryStore !== "function") throw new Error("recall requires a Memory instance with storage access");
@@ -26964,7 +27391,7 @@ async function recallMessages({ memory, threadId, resourceId, cursor, page = 1,
26964
27391
  const resolved = await resolveCursorMessage(memory, cursor, {
26965
27392
  resourceId,
26966
27393
  threadScope,
26967
- enforceThreadScope: false
27394
+ enforceThreadScope: retrievalScope === "thread"
26968
27395
  });
26969
27396
  if ("hint" in resolved) return {
26970
27397
  messages: resolved.hint,
@@ -26981,7 +27408,7 @@ async function recallMessages({ memory, threadId, resourceId, cursor, page = 1,
26981
27408
  const anchor = resolved;
26982
27409
  const crossThreadId = anchor.threadId && anchor.threadId !== threadId ? anchor.threadId : void 0;
26983
27410
  if (crossThreadId && threadScope) return {
26984
- 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.`,
27411
+ 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.`,
26985
27412
  count: 0,
26986
27413
  cursor,
26987
27414
  page: normalizedPage,
@@ -27140,7 +27567,8 @@ async function recallThreadFromStart({ memory, threadId, resourceId, page = 1, l
27140
27567
  };
27141
27568
  }
27142
27569
  const recallTool = (_memoryConfig, options) => {
27143
- const isResourceScope = (options?.retrievalScope ?? "thread") === "resource";
27570
+ const retrievalScope = options?.retrievalScope ?? "thread";
27571
+ const isResourceScope = retrievalScope === "resource";
27144
27572
  const searchEnabled = options?.searchEnabled ?? true;
27145
27573
  const description = isResourceScope ? `Browse conversation history. Use mode="threads" to list all threads for the current user. Use mode="messages" (default) to browse messages in the current thread or pass threadId to browse another thread in the active resource. When mode="messages" has no cursor or threadId, it defaults to the current thread and says so at the top of the result. If you pass only a cursor, it must belong to the current thread.${searchEnabled ? " Use mode=\"search\" to find messages by content across all threads." : ""}` : `Browse conversation history in the current thread. Use mode="messages" (default) to page through messages near a cursor.${searchEnabled ? " Use mode=\"search\" to find messages by content in this thread." : ""} Use mode="threads" to get the current thread's ID and title.`;
27146
27574
  const modeEnum = searchEnabled ? [
@@ -27351,23 +27779,25 @@ const recallTool = (_memoryConfig, options) => {
27351
27779
  if (partIndex !== void 0 && partIndex !== null) return recallPart({
27352
27780
  memory,
27353
27781
  threadId: targetThreadId,
27354
- resourceId: isResourceScope ? resourceId : void 0,
27782
+ resourceId,
27355
27783
  cursor,
27356
27784
  partIndex,
27357
27785
  charOffset,
27358
- threadScope
27786
+ threadScope,
27787
+ retrievalScope
27359
27788
  });
27360
27789
  return recallMessages({
27361
27790
  memory,
27362
27791
  threadId: targetThreadId,
27363
- resourceId: isResourceScope ? resourceId : void 0,
27792
+ resourceId,
27364
27793
  cursor,
27365
27794
  page,
27366
27795
  limit,
27367
27796
  detail: detail ?? "low",
27368
27797
  partType,
27369
27798
  toolName,
27370
- threadScope
27799
+ threadScope,
27800
+ retrievalScope
27371
27801
  });
27372
27802
  }
27373
27803
  });
@@ -27427,7 +27857,7 @@ const updateWorkingMemoryTool = (memoryConfig) => {
27427
27857
  };
27428
27858
  if (schema) {
27429
27859
  const standardSchema = (0, _mastra_core_schema.isStandardSchemaWithJSON)(schema) ? schema : (0, _mastra_core_schema.toStandardSchema)(schema);
27430
- const jsonSchema = require_schema_D_ikovK6.standardSchemaToJSONSchema(standardSchema, { io: "input" });
27860
+ const jsonSchema = require_schema_BwlBcZRB.standardSchemaToJSONSchema(standardSchema, { io: "input" });
27431
27861
  delete jsonSchema.$schema;
27432
27862
  const wrappedJsonSchema = {
27433
27863
  $schema: "http://json-schema.org/draft-07/schema#",
@@ -28453,7 +28883,8 @@ function sortThreadsByOldestMessage(messagesByThread) {
28453
28883
  function stripThreadTags(observations) {
28454
28884
  return observations.replace(/<\/?thread\b[^>]{0,1024}>/gi, "").trim();
28455
28885
  }
28456
- const OBSERVATION_GROUP_PATTERN = /<observation-group\s([^>]*)>([\s\S]*?)<\/observation-group>/g;
28886
+ const OBSERVATION_GROUP_OPEN = "<observation-group";
28887
+ const OBSERVATION_GROUP_CLOSE = "</observation-group>";
28457
28888
  const ATTRIBUTE_PATTERN = /([\w][\w-]*)="([^"]*)"/g;
28458
28889
  const REFLECTION_GROUP_SPLIT_PATTERN = /^##\s+Group\s+/m;
28459
28890
  function parseObservationGroupAttributes(attributeString) {
@@ -28464,6 +28895,81 @@ function parseObservationGroupAttributes(attributeString) {
28464
28895
  }
28465
28896
  return attributes;
28466
28897
  }
28898
+ function isLineStart(observations, index) {
28899
+ return index === 0 || observations[index - 1] === "\n";
28900
+ }
28901
+ function scanObservationGroupTags(observations) {
28902
+ const tags = [];
28903
+ const incompleteOpenings = [];
28904
+ let cursor = 0;
28905
+ let closeFloor = 0;
28906
+ while (cursor < observations.length) {
28907
+ const start = observations.indexOf(OBSERVATION_GROUP_OPEN, cursor);
28908
+ if (start === -1) break;
28909
+ const attributesStart = start + 18;
28910
+ if (!/\s/.test(observations[attributesStart] ?? "")) {
28911
+ cursor = attributesStart;
28912
+ continue;
28913
+ }
28914
+ const openEnd = observations.indexOf(">", attributesStart);
28915
+ if (openEnd === -1) break;
28916
+ const closeStart = observations.indexOf(OBSERVATION_GROUP_CLOSE, Math.max(openEnd + 1, closeFloor));
28917
+ if (closeStart === -1) {
28918
+ if (isLineStart(observations, start)) incompleteOpenings.push({
28919
+ start,
28920
+ end: openEnd + 1
28921
+ });
28922
+ closeFloor = observations.length;
28923
+ cursor = openEnd + 1;
28924
+ continue;
28925
+ }
28926
+ const nestedStart = observations.indexOf(OBSERVATION_GROUP_OPEN, openEnd + 1);
28927
+ if (nestedStart !== -1 && nestedStart < closeStart && isLineStart(observations, nestedStart)) {
28928
+ incompleteOpenings.push({
28929
+ start,
28930
+ end: openEnd + 1
28931
+ });
28932
+ closeFloor = closeStart;
28933
+ cursor = nestedStart;
28934
+ continue;
28935
+ }
28936
+ tags.push({
28937
+ start,
28938
+ end: closeStart + 20,
28939
+ attributeString: observations.slice(attributesStart, openEnd),
28940
+ content: observations.slice(openEnd + 1, closeStart)
28941
+ });
28942
+ closeFloor = closeStart;
28943
+ cursor = closeStart + 20;
28944
+ }
28945
+ return {
28946
+ tags,
28947
+ incompleteOpenings
28948
+ };
28949
+ }
28950
+ function replaceObservationGroupTags(observations, replace) {
28951
+ const { tags, incompleteOpenings } = scanObservationGroupTags(observations);
28952
+ const parts = [];
28953
+ let cursor = 0;
28954
+ let openingIndex = 0;
28955
+ const skipIncompleteOpeningsBefore = (limit) => {
28956
+ while (openingIndex < incompleteOpenings.length && incompleteOpenings[openingIndex].start < limit) {
28957
+ const opening = incompleteOpenings[openingIndex];
28958
+ openingIndex++;
28959
+ if (opening.start < cursor) continue;
28960
+ parts.push(observations.slice(cursor, opening.start));
28961
+ cursor = opening.end;
28962
+ }
28963
+ };
28964
+ for (const tag of tags) {
28965
+ skipIncompleteOpeningsBefore(tag.start);
28966
+ parts.push(observations.slice(cursor, tag.start), replace(tag));
28967
+ cursor = tag.end;
28968
+ }
28969
+ skipIncompleteOpeningsBefore(Number.POSITIVE_INFINITY);
28970
+ parts.push(observations.slice(cursor));
28971
+ return parts.join("");
28972
+ }
28467
28973
  function parseReflectionObservationGroupSections(content) {
28468
28974
  const normalizedContent = content.trim();
28469
28975
  if (!normalizedContent || !REFLECTION_GROUP_SPLIT_PATTERN.test(normalizedContent)) return [];
@@ -28488,9 +28994,8 @@ function wrapInObservationGroup(observations, range, id = generateAnchorId(), _s
28488
28994
  function parseObservationGroups(observations) {
28489
28995
  if (!observations) return [];
28490
28996
  const groups = [];
28491
- let match;
28492
- while ((match = OBSERVATION_GROUP_PATTERN.exec(observations)) !== null) {
28493
- const attributes = parseObservationGroupAttributes(match[1] ?? "");
28997
+ for (const tag of scanObservationGroupTags(observations).tags) {
28998
+ const attributes = parseObservationGroupAttributes(tag.attributeString);
28494
28999
  const id = attributes.id;
28495
29000
  const range = attributes.range;
28496
29001
  if (!id || !range) continue;
@@ -28498,54 +29003,96 @@ function parseObservationGroups(observations) {
28498
29003
  id,
28499
29004
  range,
28500
29005
  kind: attributes.kind,
28501
- content: match[2].trim()
29006
+ content: tag.content.trim()
28502
29007
  });
28503
29008
  }
28504
29009
  return groups;
28505
29010
  }
28506
29011
  function stripObservationGroups(observations) {
28507
29012
  if (!observations) return observations;
28508
- return observations.replace(OBSERVATION_GROUP_PATTERN, (_match, _attributes, content) => content.trim()).replace(/\n{3,}/g, "\n\n").trim();
29013
+ return replaceObservationGroupTags(observations, (tag) => tag.content.trim()).replace(/\n{3,}/g, "\n\n").trim();
28509
29014
  }
28510
29015
  function getRangeSegments(range) {
28511
29016
  return range.split(",").map((segment) => segment.trim()).filter(Boolean);
28512
29017
  }
29018
+ function getRangeEndpoints(segment) {
29019
+ const parts = segment.split(":").map((part) => part.trim());
29020
+ if (parts.length !== 2 || !parts[0] || !parts[1]) return null;
29021
+ return {
29022
+ start: parts[0],
29023
+ end: parts[1]
29024
+ };
29025
+ }
29026
+ /**
29027
+ * `buildMessageRange` produces opaque UUID endpoints, so those segments cannot be ordered by value.
29028
+ * Spanning from the first start to the last end keeps reflected metadata bounded — the full segment
29029
+ * list is deliberately not preserved (#14791). Segments that are not `start:end` pairs are left as
29030
+ * they are rather than being joined into a fabricated span.
29031
+ */
29032
+ function spanRangeSegments(segments) {
29033
+ const endpoints = segments.map(getRangeEndpoints);
29034
+ if (endpoints.some((endpoint) => endpoint === null)) return segments.join(",");
29035
+ const first = endpoints[0];
29036
+ const last = endpoints.at(-1);
29037
+ return `${first.start}:${last.end}`;
29038
+ }
28513
29039
  function combineObservationGroupRanges(groups) {
28514
- const segments = groups.flatMap((group) => getRangeSegments(group.range));
29040
+ const segments = Array.from(new Set(groups.flatMap((group) => getRangeSegments(group.range))));
28515
29041
  if (segments.length === 0) return "";
28516
- const firstSegment = segments[0];
28517
- const lastSegment = segments[segments.length - 1];
28518
- const firstStart = firstSegment?.split(":")[0]?.trim();
28519
- const lastEnd = lastSegment?.split(":").at(-1)?.trim();
28520
- if (firstStart && lastEnd) return `${firstStart}:${lastEnd}`;
28521
- return Array.from(new Set(segments)).join(",");
29042
+ const numericEndpoints = [];
29043
+ if (!segments.every((segment) => {
29044
+ const endpoints = getRangeEndpoints(segment);
29045
+ if (!endpoints || !/^\d+$/.test(endpoints.start) || !/^\d+$/.test(endpoints.end)) return false;
29046
+ const start = {
29047
+ label: endpoints.start,
29048
+ value: Number(endpoints.start)
29049
+ };
29050
+ const end = {
29051
+ label: endpoints.end,
29052
+ value: Number(endpoints.end)
29053
+ };
29054
+ if (!Number.isSafeInteger(start.value) || !Number.isSafeInteger(end.value)) return false;
29055
+ numericEndpoints.push(start.value <= end.value ? {
29056
+ start,
29057
+ end
29058
+ } : {
29059
+ start: end,
29060
+ end: start
29061
+ });
29062
+ return true;
29063
+ })) return spanRangeSegments(segments);
29064
+ const first = numericEndpoints.reduce((lowest, pair) => pair.start.value < lowest.start.value ? pair : lowest);
29065
+ const last = numericEndpoints.reduce((highest, pair) => pair.end.value > highest.end.value ? pair : highest);
29066
+ return `${first.start.label}:${last.end.label}`;
28522
29067
  }
28523
29068
  function renderObservationGroupsForReflection(observations) {
28524
- const groups = parseObservationGroups(observations);
28525
- if (groups.length === 0) return null;
28526
- const groupsByContent = new Map(groups.map((g) => [g.content.trim(), g]));
28527
- return observations.replace(OBSERVATION_GROUP_PATTERN, (_match, _attrs, content) => {
28528
- const group = groupsByContent.get(content.trim());
28529
- if (!group) return content.trim();
28530
- return `## Group \`${group.id}\`\n_range: \`${group.range}\`_\n\n${group.content}`;
29069
+ if (parseObservationGroups(observations).length === 0) return null;
29070
+ return replaceObservationGroupTags(observations, (tag) => {
29071
+ const attributes = parseObservationGroupAttributes(tag.attributeString);
29072
+ if (!attributes.id || !attributes.range) return tag.content.trim();
29073
+ return `## Group \`${attributes.id}\`\n_range: \`${attributes.range}\`_\n\n${tag.content.trim()}`;
28531
29074
  }).replace(/\n{3,}/g, "\n\n").trim();
28532
29075
  }
28533
29076
  function getCanonicalGroupId(sectionHeading, fallbackIndex) {
28534
29077
  return sectionHeading.match(/`([^`]+)`/)?.[1]?.trim() || `derived-group-${fallbackIndex + 1}`;
28535
29078
  }
29079
+ function getContentLines(content) {
29080
+ return content.split("\n").map((line) => line.trim()).filter(Boolean);
29081
+ }
28536
29082
  function deriveObservationGroupProvenance(content, groups) {
28537
29083
  const sections = parseReflectionObservationGroupSections(content);
28538
29084
  if (sections.length === 0 || groups.length === 0) return [];
28539
29085
  return sections.map((section, index) => {
28540
- const bodyLines = new Set(section.body.split("\n").map((line) => line.trim()).filter(Boolean));
28541
- const matchingGroups = groups.filter((group) => {
28542
- return group.content.split("\n").map((line) => line.trim()).filter(Boolean).some((line) => bodyLines.has(line));
28543
- });
29086
+ const canonicalGroupId = getCanonicalGroupId(section.heading, index);
29087
+ const identifiedGroup = groups.find((group) => group.id === canonicalGroupId);
29088
+ const bodyLines = new Set(getContentLines(section.body));
29089
+ const matchingGroups = groups.filter((group) => getContentLines(group.content).some((line) => bodyLines.has(line)));
28544
29090
  const fallbackGroup = groups[Math.min(index, groups.length - 1)];
28545
- const resolvedGroups = matchingGroups.length > 0 ? matchingGroups : fallbackGroup ? [fallbackGroup] : [];
29091
+ const identifiedLines = new Set(getContentLines(identifiedGroup?.content ?? ""));
29092
+ const contributingGroups = identifiedGroup ? matchingGroups.filter((group) => group.id !== identifiedGroup.id && getContentLines(group.content).some((line) => bodyLines.has(line) && !identifiedLines.has(line))) : [];
28546
29093
  return {
28547
- id: getCanonicalGroupId(section.heading, index),
28548
- range: combineObservationGroupRanges(resolvedGroups),
29094
+ id: canonicalGroupId,
29095
+ range: combineObservationGroupRanges(identifiedGroup ? groups.filter((group) => group === identifiedGroup || contributingGroups.includes(group)) : matchingGroups.length > 0 ? matchingGroups : fallbackGroup ? [fallbackGroup] : []),
28549
29096
  kind: "reflection",
28550
29097
  content: section.body
28551
29098
  };
@@ -28968,6 +29515,21 @@ var ObservationStrategy = class ObservationStrategy {
28968
29515
  return false;
28969
29516
  }
28970
29517
  };
29518
+ /**
29519
+ * Resolve the thread title an Observational Memory cycle should persist.
29520
+ *
29521
+ * Returns the trimmed candidate when it is a new, long-enough title, or
29522
+ * `undefined` when the current title must stay — including when the user
29523
+ * pinned it via `session.thread.rename()`, which sets the
29524
+ * `titlePinned` thread metadata flag.
29525
+ */
29526
+ function resolveThreadTitleUpdate(thread, generatedTitle) {
29527
+ const candidate = generatedTitle?.trim();
29528
+ if (!candidate || candidate.length < 3) return void 0;
29529
+ if ((0, _mastra_core_memory.isThreadTitlePinned)(thread?.metadata)) return void 0;
29530
+ if (candidate === thread?.title?.trim()) return void 0;
29531
+ return candidate;
29532
+ }
28971
29533
  var SyncObservationStrategy = class extends ObservationStrategy {
28972
29534
  startedAt = (/* @__PURE__ */ new Date()).toISOString();
28973
29535
  lastMessage;
@@ -29116,11 +29678,15 @@ var SyncObservationStrategy = class extends ObservationStrategy {
29116
29678
  async persist(processed) {
29117
29679
  const { record, threadId, resourceId, messages } = this.opts;
29118
29680
  const thread = await this.storage.getThreadById({ threadId });
29681
+ if (!await this.storage.getObservationalMemory(record.threadId, record.resourceId)) {
29682
+ omDebug(`[OM:sync-obs] skipping persist for thread ${threadId}: observational memory record is gone`);
29683
+ return;
29684
+ }
29119
29685
  let threadUpdateMarker;
29120
29686
  if (thread) {
29121
29687
  const oldTitle = thread.title?.trim();
29122
- const newTitle = processed.threadTitle?.trim();
29123
- const shouldUpdateThreadTitle = !!newTitle && newTitle.length >= 3 && newTitle !== oldTitle;
29688
+ const newTitle = resolveThreadTitleUpdate(thread, processed.threadTitle);
29689
+ const shouldUpdateThreadTitle = newTitle !== void 0;
29124
29690
  const previousOmMetadata = (0, _mastra_core_memory.getThreadOMMetadata)(thread.metadata);
29125
29691
  const metadataUpdate = buildThreadMetadataFromExtractedValues(processed.extractors ?? this.observationConfig.extractors, processed.extractedValues);
29126
29692
  const newMetadata = (0, _mastra_core_memory.setThreadOMMetadata)(thread.metadata, {
@@ -29295,6 +29861,10 @@ var AsyncBufferObservationStrategy = class extends ObservationStrategy {
29295
29861
  async persist(processed) {
29296
29862
  if (!processed.observations) return;
29297
29863
  const { record, threadId, resourceId, messages } = this.opts;
29864
+ if (!await this.storage.getObservationalMemory(record.threadId, record.resourceId)) {
29865
+ omDebug(`[OM:asyncBuffer] skipping persist for thread ${threadId}: observational memory record is gone`);
29866
+ return;
29867
+ }
29298
29868
  const messageTokens = await this.tokenCounter.countMessagesAsync(messages);
29299
29869
  await withRetry(() => this.storage.updateBufferedObservations({
29300
29870
  id: record.id,
@@ -29317,13 +29887,14 @@ var AsyncBufferObservationStrategy = class extends ObservationStrategy {
29317
29887
  abortSignal: this.opts.abortSignal
29318
29888
  });
29319
29889
  await this.indexObservationGroups(processed.observations, threadId, resourceId, processed.lastObservedAt);
29320
- const newTitle = processed.threadTitle?.trim();
29321
- const hasValidThreadTitle = !!newTitle && newTitle.length >= 3;
29890
+ const candidateTitle = processed.threadTitle?.trim();
29891
+ const hasValidThreadTitle = !!candidateTitle && candidateTitle.length >= 3;
29322
29892
  if (hasValidThreadTitle || processed.extractedValues) {
29323
29893
  const thread = await this.storage.getThreadById({ threadId });
29324
29894
  if (thread) {
29325
29895
  const oldTitle = thread.title?.trim();
29326
- const shouldUpdateThreadTitle = hasValidThreadTitle && newTitle !== oldTitle;
29896
+ const newTitle = resolveThreadTitleUpdate(thread, candidateTitle);
29897
+ const shouldUpdateThreadTitle = newTitle !== void 0;
29327
29898
  const previousOmMetadata = (0, _mastra_core_memory.getThreadOMMetadata)(thread.metadata);
29328
29899
  const metadataUpdate = buildThreadMetadataFromExtractedValues(processed.extractors ?? this.observationConfig.extractors, processed.extractedValues);
29329
29900
  const newMetadata = (0, _mastra_core_memory.setThreadOMMetadata)(thread.metadata, {
@@ -29678,8 +30249,8 @@ var ResourceScopedObservationStrategy = class extends ObservationStrategy {
29678
30249
  const thread = await this.storage.getThreadById({ threadId: update.threadId });
29679
30250
  if (thread) {
29680
30251
  const oldTitle = thread.title?.trim();
29681
- const newTitle = update.threadTitle?.trim();
29682
- const shouldUpdateThreadTitle = !!newTitle && newTitle.length >= 3 && newTitle !== oldTitle;
30252
+ const newTitle = resolveThreadTitleUpdate(thread, update.threadTitle);
30253
+ const shouldUpdateThreadTitle = newTitle !== void 0;
29683
30254
  const previousOmMetadata = (0, _mastra_core_memory.getThreadOMMetadata)(thread.metadata);
29684
30255
  const metadataUpdate = buildThreadMetadataFromExtractedValues(update.extractors ?? this.observationConfig.extractors, update.extracted);
29685
30256
  const newMetadata = (0, _mastra_core_memory.setThreadOMMetadata)(thread.metadata, {
@@ -30275,6 +30846,10 @@ var ObservationTurn = class {
30275
30846
  if (!this._context) throw new Error("Turn not started — call start() first");
30276
30847
  return this._context;
30277
30848
  }
30849
+ /** Whether the turn has been ended and can no longer accept steps. */
30850
+ get ended() {
30851
+ return this._ended;
30852
+ }
30278
30853
  /** The current step, if one exists. */
30279
30854
  get currentStep() {
30280
30855
  return this._currentStep;
@@ -30815,15 +31390,14 @@ var ReflectorRunner = class {
30815
31390
  this.mastra = mastra;
30816
31391
  }
30817
31392
  createAgent(model, memory, extractors = this.reflectionConfig.extractors) {
30818
- const agent = new _mastra_core_agent.Agent({
31393
+ return new _mastra_core_agent.Agent({
30819
31394
  id: "observational-memory-reflector",
30820
31395
  name: "Reflector",
30821
31396
  instructions: buildReflectorSystemPrompt(this.reflectionConfig.instruction, extractors),
30822
31397
  model,
30823
- ...memory ? { memory } : {}
31398
+ ...memory ? { memory } : {},
31399
+ ...this.mastra ? { mastra: this.mastra } : {}
30824
31400
  });
30825
- if (this.mastra) agent.__registerMastra(this.mastra);
30826
- return agent;
30827
31401
  }
30828
31402
  getObservationMarkerConfig(record) {
30829
31403
  return {
@@ -32095,11 +32669,19 @@ var ObservationalMemory = class ObservationalMemory {
32095
32669
  const messageTokens = config.observation?.messageTokens ?? OBSERVATIONAL_MEMORY_DEFAULTS.observation.messageTokens;
32096
32670
  const observationTokens = config.reflection?.observationTokens ?? OBSERVATIONAL_MEMORY_DEFAULTS.reflection.observationTokens;
32097
32671
  const isSharedBudget = config.shareTokenBudget ?? false;
32098
- const isDefaultModelSelection = (model) => model === void 0 || model === "default" || model instanceof ModelByInputTokens;
32672
+ const supportsDefaultTemperature = (model) => {
32673
+ if (model instanceof ModelByInputTokens || typeof model === "function") return false;
32674
+ if (typeof model === "string") return (0, _mastra_core_llm.modelSupportsTemperature)(model) === true;
32675
+ if (model && typeof model === "object" && "provider" in model && "modelId" in model && typeof model.provider === "string" && typeof model.modelId === "string") return (0, _mastra_core_llm.modelSupportsTemperature)(`${model.provider.split(".")[0]}/${model.modelId}`) === true;
32676
+ return false;
32677
+ };
32678
+ const usesDefaultOutputTokenBudget = (model) => model === void 0 || model === "default" || model instanceof ModelByInputTokens;
32099
32679
  const observationSelectedModel = topLevelModel ?? observationConfigModel ?? reflectionConfigModel;
32100
32680
  const reflectionSelectedModel = topLevelModel ?? reflectionConfigModel ?? observationConfigModel;
32101
- const observationDefaultMaxOutputTokens = config.observation?.modelSettings?.maxOutputTokens ?? (isDefaultModelSelection(observationSelectedModel) ? OBSERVATIONAL_MEMORY_DEFAULTS.observation.modelSettings.maxOutputTokens : void 0);
32102
- const reflectionDefaultMaxOutputTokens = config.reflection?.modelSettings?.maxOutputTokens ?? (isDefaultModelSelection(reflectionSelectedModel) ? OBSERVATIONAL_MEMORY_DEFAULTS.reflection.modelSettings.maxOutputTokens : void 0);
32681
+ const observationTemperature = config.observation?.modelSettings?.temperature ?? (supportsDefaultTemperature(observationModel) ? OBSERVATIONAL_MEMORY_DEFAULTS.observation.modelSettings.temperature : void 0);
32682
+ const observationDefaultMaxOutputTokens = config.observation?.modelSettings?.maxOutputTokens ?? (usesDefaultOutputTokenBudget(observationSelectedModel) ? OBSERVATIONAL_MEMORY_DEFAULTS.observation.modelSettings.maxOutputTokens : void 0);
32683
+ const reflectionTemperature = config.reflection?.modelSettings?.temperature ?? (supportsDefaultTemperature(reflectionModel) ? OBSERVATIONAL_MEMORY_DEFAULTS.reflection.modelSettings.temperature : void 0);
32684
+ const reflectionDefaultMaxOutputTokens = config.reflection?.modelSettings?.maxOutputTokens ?? (usesDefaultOutputTokenBudget(reflectionSelectedModel) ? OBSERVATIONAL_MEMORY_DEFAULTS.reflection.modelSettings.maxOutputTokens : void 0);
32103
32685
  const totalBudget = messageTokens + observationTokens;
32104
32686
  const userExplicitlyConfiguredAsync = config.observation?.bufferTokens !== void 0 || config.observation?.bufferActivation !== void 0 || config.reflection?.bufferActivation !== void 0;
32105
32687
  const asyncBufferingDisabled = config.observation?.bufferTokens === false || config.scope === "resource" && !userExplicitlyConfiguredAsync;
@@ -32115,7 +32697,7 @@ var ObservationalMemory = class ObservationalMemory {
32115
32697
  } : messageTokens,
32116
32698
  shareTokenBudget: isSharedBudget,
32117
32699
  modelSettings: {
32118
- temperature: config.observation?.modelSettings?.temperature ?? OBSERVATIONAL_MEMORY_DEFAULTS.observation.modelSettings.temperature,
32700
+ ...observationTemperature !== void 0 ? { temperature: observationTemperature } : {},
32119
32701
  ...observationDefaultMaxOutputTokens !== void 0 ? { maxOutputTokens: observationDefaultMaxOutputTokens } : {}
32120
32702
  },
32121
32703
  providerOptions: config.observation?.providerOptions ?? OBSERVATIONAL_MEMORY_DEFAULTS.observation.providerOptions,
@@ -32141,7 +32723,7 @@ var ObservationalMemory = class ObservationalMemory {
32141
32723
  observationTokens,
32142
32724
  shareTokenBudget: isSharedBudget,
32143
32725
  modelSettings: {
32144
- temperature: config.reflection?.modelSettings?.temperature ?? OBSERVATIONAL_MEMORY_DEFAULTS.reflection.modelSettings.temperature,
32726
+ ...reflectionTemperature !== void 0 ? { temperature: reflectionTemperature } : {},
32145
32727
  ...reflectionDefaultMaxOutputTokens !== void 0 ? { maxOutputTokens: reflectionDefaultMaxOutputTokens } : {}
32146
32728
  },
32147
32729
  providerOptions: config.reflection?.providerOptions ?? OBSERVATIONAL_MEMORY_DEFAULTS.reflection.providerOptions,
@@ -33865,9 +34447,8 @@ ${formattedMessages}
33865
34447
  currentTask: lastActivated.currentTask,
33866
34448
  threadTitle: chunkThreadTitle
33867
34449
  });
33868
- const oldTitle = thread.title?.trim();
33869
- const newTitle = chunkThreadTitle?.trim();
33870
- const shouldUpdateThreadTitle = !!newTitle && newTitle.length >= 3 && newTitle !== oldTitle;
34450
+ const newTitle = resolveThreadTitleUpdate(thread, chunkThreadTitle);
34451
+ const shouldUpdateThreadTitle = newTitle !== void 0;
33871
34452
  await this.storage.patchThread({
33872
34453
  id: threadId,
33873
34454
  ...shouldUpdateThreadTitle ? { title: newTitle } : {},
@@ -33997,9 +34578,11 @@ ${formattedMessages}
33997
34578
  let lifecycleError;
33998
34579
  let observationStarted = false;
33999
34580
  let generationBefore = -1;
34581
+ let recordInsideLock;
34000
34582
  try {
34001
34583
  await this.withLock(lockKey, async () => {
34002
34584
  const freshRecord = await this.getOrCreateRecord(threadId, resourceId);
34585
+ recordInsideLock = freshRecord;
34003
34586
  generationBefore = freshRecord.generationCount;
34004
34587
  const unobservedMessages = messages ? this.getUnobservedMessages(messages, freshRecord) : await this.loadMessagesFromStorage(threadId, resourceId, freshRecord.lastObservedAt ? new Date(freshRecord.lastObservedAt) : void 0);
34005
34588
  if (!this.meetsObservationThreshold({
@@ -34042,7 +34625,7 @@ ${formattedMessages}
34042
34625
  omDebug(`[OM:hooks] onObservationEnd hook failed after cycle failure: ${endHookError instanceof Error ? endHookError.message : String(endHookError)}`);
34043
34626
  }
34044
34627
  if (lifecycleError !== void 0) throw lifecycleError;
34045
- const record = await this.getOrCreateRecord(threadId, resourceId);
34628
+ const record = await this.getRecord(threadId, resourceId) ?? recordInsideLock;
34046
34629
  const reflected = record.generationCount > generationBefore && generationBefore >= 0;
34047
34630
  return {
34048
34631
  observed,
@@ -34519,6 +35102,10 @@ var ObservationalMemoryProcessor = class {
34519
35102
  if (this.turn === activeTurn) this.turn = void 0;
34520
35103
  state.__omTurn = void 0;
34521
35104
  }
35105
+ if (activeTurn?.ended || this.turn?.ended) {
35106
+ if (this.turn?.ended) this.turn = void 0;
35107
+ state.__omTurn = void 0;
35108
+ }
34522
35109
  if (!this.turn || !state.__omTurn) {
34523
35110
  if (this.turn && !state.__omTurn) await this.turn.end().catch(() => {});
34524
35111
  this.turn = this.engine.beginTurn({
@@ -34619,11 +35206,11 @@ var ObservationalMemoryProcessor = class {
34619
35206
  return this.engine.getTokenCounter().runWithModelContext(state.__omActorModelContext, async () => {
34620
35207
  if ((0, _mastra_core_memory.parseMemoryRequestContext)(requestContext)?.memoryConfig?.readOnly) return messageList;
34621
35208
  const turn = asLiveTurn(state.__omTurn) ?? this.turn;
34622
- if (turn) {
34623
- await turn.end();
34624
- this.turn = void 0;
34625
- state.__omTurn = void 0;
34626
- } else {
35209
+ const liveTurn = turn && !turn.ended ? turn : void 0;
35210
+ if (liveTurn) await liveTurn.end();
35211
+ this.turn = void 0;
35212
+ state.__omTurn = void 0;
35213
+ if (!liveTurn) {
34627
35214
  const newOutput = messageList.get.response.db();
34628
35215
  const messagesToSave = [...messageList.get.input.db(), ...newOutput];
34629
35216
  if (messagesToSave.length > 0 && context.threadId) await this.engine.persistMessages(messagesToSave, context.threadId, context.resourceId);
@@ -34812,6 +35399,7 @@ const DEFAULT_MESSAGE_RANGE = {
34812
35399
  };
34813
35400
  const DEFAULT_TOP_K = 4;
34814
35401
  const VECTOR_DELETE_BATCH_SIZE = 100;
35402
+ const OM_DELETE_DRAIN_TIMEOUT_MS = 1e4;
34815
35403
  const DEFAULT_EMBEDDING_CACHE_MAX_SIZE = 1e3;
34816
35404
  /**
34817
35405
  * Gives Mastra agents conversation history, with optional working memory,
@@ -34845,6 +35433,9 @@ const DEFAULT_EMBEDDING_CACHE_MAX_SIZE = 1e3;
34845
35433
  * if packaged docs are unavailable.
34846
35434
  */
34847
35435
  var Memory = class Memory extends _mastra_core_memory.MastraMemory {
35436
+ createMemoryTokenCounter() {
35437
+ return new TokenCounter();
35438
+ }
34848
35439
  _omEngine;
34849
35440
  _omEngineInstance;
34850
35441
  _mastraInstance;
@@ -35015,6 +35606,7 @@ var Memory = class Memory extends _mastra_core_memory.MastraMemory {
35015
35606
  const thread = await this.getThreadById({ threadId });
35016
35607
  if (!thread && !resourceScope) throw new Error(`No thread found with id ${threadId}`);
35017
35608
  if (thread && thread.resourceId !== resourceId) throw new Error(`Thread with id ${threadId} is for resource with id ${thread.resourceId} but resource ${resourceId} was queried.`);
35609
+ return thread;
35018
35610
  }
35019
35611
  createMemorySpan(operationType, observabilityContext, input, attributes) {
35020
35612
  const currentSpan = observabilityContext?.tracingContext?.currentSpan;
@@ -35035,6 +35627,9 @@ var Memory = class Memory extends _mastra_core_memory.MastraMemory {
35035
35627
  const { threadId, resourceId, perPage: perPageArg, page, orderBy, threadConfig, vectorSearchString, includeSystemReminders, hideSignals, filter, includeTotal } = args;
35036
35628
  const config = this.getMergedThreadConfig(threadConfig || {});
35037
35629
  const semanticRecallEnabled = Boolean(config.semanticRecall);
35630
+ const history = (0, _mastra_core_memory.normalizeMessageHistoryConfig)(config.lastMessages, config.messageHistory);
35631
+ const historyDisabledByConfig = !history.enabled && perPageArg === void 0;
35632
+ const shouldUseTokenLoader = perPageArg === void 0 && history.enabled && history.maxTokens !== void 0;
35038
35633
  const span = this.createMemorySpan("recall", args.observabilityContext, {
35039
35634
  threadId,
35040
35635
  resourceId,
@@ -35044,9 +35639,23 @@ var Memory = class Memory extends _mastra_core_memory.MastraMemory {
35044
35639
  lastMessages: config.lastMessages
35045
35640
  });
35046
35641
  try {
35047
- if (resourceId) await this.validateThreadIsOwnedByResource(threadId, resourceId, config);
35048
- const perPage = perPageArg !== void 0 ? perPageArg : config.lastMessages;
35049
- const historyDisabledByConfig = config.lastMessages === false && perPageArg === void 0;
35642
+ if (historyDisabledByConfig && (!config.semanticRecall || !vectorSearchString || !this.vector)) {
35643
+ const result = {
35644
+ messages: [],
35645
+ usage: void 0,
35646
+ total: 0,
35647
+ page: page ?? 0,
35648
+ perPage: 0,
35649
+ hasMore: false
35650
+ };
35651
+ span?.end({
35652
+ output: { success: true },
35653
+ attributes: { messageCount: 0 }
35654
+ });
35655
+ return result;
35656
+ }
35657
+ const validatedThread = resourceId ? await this.validateThreadIsOwnedByResource(threadId, resourceId, config) : void 0;
35658
+ const perPage = perPageArg !== void 0 ? perPageArg : history.maxMessages ?? 0;
35050
35659
  const shouldGetNewestAndReverse = !orderBy && perPage !== false;
35051
35660
  const effectiveOrderBy = shouldGetNewestAndReverse ? {
35052
35661
  field: "createdAt",
@@ -35075,21 +35684,6 @@ var Memory = class Memory extends _mastra_core_memory.MastraMemory {
35075
35684
  const resourceScope = typeof config?.semanticRecall === "object" && config?.semanticRecall?.scope !== `thread` || config.semanticRecall === true;
35076
35685
  if (resourceScope && !resourceId && config?.semanticRecall && vectorSearchString) throw new Error("Memory error: Resource-scoped semantic recall is enabled but no resourceId was provided. Either provide a resourceId or explicitly set semanticRecall.scope to 'thread'.");
35077
35686
  let usage;
35078
- if (historyDisabledByConfig && (!config.semanticRecall || !vectorSearchString || !this.vector)) {
35079
- const result = {
35080
- messages: [],
35081
- usage: void 0,
35082
- total: 0,
35083
- page: page ?? 0,
35084
- perPage: 0,
35085
- hasMore: false
35086
- };
35087
- span?.end({
35088
- output: { success: true },
35089
- attributes: { messageCount: 0 }
35090
- });
35091
- return result;
35092
- }
35093
35687
  if (config?.semanticRecall && vectorSearchString && this.vector) {
35094
35688
  const result = await this.embedMessageContent(vectorSearchString);
35095
35689
  usage = result.usage;
@@ -35111,28 +35705,71 @@ var Memory = class Memory extends _mastra_core_memory.MastraMemory {
35111
35705
  const threshold = (typeof config.semanticRecall === "object" ? config.semanticRecall : void 0)?.threshold;
35112
35706
  const filteredVectorResults = threshold !== void 0 ? vectorResults.filter((r) => r.score >= threshold) : vectorResults;
35113
35707
  const memoryStore = await this.getMemoryStore();
35114
- const effectivePerPage = historyDisabledByConfig ? 0 : perPage;
35115
- const paginatedResult = await memoryStore.listMessages({
35116
- threadId,
35117
- resourceId,
35118
- perPage: effectivePerPage,
35119
- page,
35120
- orderBy: effectiveOrderBy,
35121
- filter,
35122
- ...includeTotal !== void 0 ? { includeTotal } : {},
35123
- ...filteredVectorResults?.length ? { include: filteredVectorResults.map((r) => ({
35124
- id: r.metadata?.message_id,
35125
- threadId: r.metadata?.thread_id,
35126
- withNextMessages: typeof vectorConfig.messageRange === "number" ? vectorConfig.messageRange : vectorConfig.messageRange.after,
35127
- withPreviousMessages: typeof vectorConfig.messageRange === "number" ? vectorConfig.messageRange : vectorConfig.messageRange.before
35128
- })) } : {}
35129
- });
35130
- const rawMessages = shouldGetNewestAndReverse ? paginatedResult.messages.reverse() : paginatedResult.messages;
35708
+ const include = filteredVectorResults.map((r) => ({
35709
+ id: r.metadata?.message_id,
35710
+ threadId: r.metadata?.thread_id,
35711
+ withNextMessages: typeof vectorConfig.messageRange === "number" ? vectorConfig.messageRange : vectorConfig.messageRange.after,
35712
+ withPreviousMessages: typeof vectorConfig.messageRange === "number" ? vectorConfig.messageRange : vectorConfig.messageRange.before
35713
+ }));
35714
+ let rawMessages;
35715
+ let resultPage;
35716
+ let resultPerPage;
35717
+ let total;
35718
+ let hasMore;
35719
+ if (shouldUseTokenLoader) {
35720
+ const storedBoundary = (0, _mastra_core_memory.getMemoryTokenBoundary)(validatedThread ?? await memoryStore.getThreadById({
35721
+ threadId,
35722
+ resourceId
35723
+ }));
35724
+ const boundary = storedBoundary !== void 0 && storedBoundary.maxTokens === history.maxTokens && storedBoundary.atMaxRemoveTokens === history.atMaxRemoveTokens ? storedBoundary : void 0;
35725
+ rawMessages = (await (0, _mastra_core_memory.loadMessageHistory)({
35726
+ storage: memoryStore,
35727
+ threadId,
35728
+ resourceId,
35729
+ boundary,
35730
+ filter,
35731
+ maxMessages: history.maxMessages,
35732
+ maxTokens: history.maxTokens,
35733
+ atMaxRemoveTokens: history.atMaxRemoveTokens,
35734
+ tokenCounter: new TokenCounter(),
35735
+ initialTokens: 24
35736
+ })).messages;
35737
+ if (include.length) {
35738
+ const semanticMessages = await memoryStore.listMessages({
35739
+ threadId,
35740
+ resourceId,
35741
+ perPage: 0,
35742
+ include,
35743
+ includeTotal: false
35744
+ });
35745
+ rawMessages = new _mastra_core_agent.MessageList({
35746
+ threadId,
35747
+ resourceId
35748
+ }).add(rawMessages, "memory").add(semanticMessages.messages.filter((message) => !boundary || (0, _mastra_core_memory.isAfterMemoryTokenBoundary)(message, boundary)), "memory").get.all.db();
35749
+ }
35750
+ resultPage = 0;
35751
+ resultPerPage = history.maxMessages ?? false;
35752
+ total = rawMessages.length;
35753
+ hasMore = false;
35754
+ } else {
35755
+ const effectivePerPage = historyDisabledByConfig ? 0 : perPage;
35756
+ const paginatedResult = await memoryStore.listMessages({
35757
+ threadId,
35758
+ resourceId,
35759
+ perPage: effectivePerPage,
35760
+ page,
35761
+ orderBy: effectiveOrderBy,
35762
+ filter,
35763
+ ...includeTotal !== void 0 ? { includeTotal } : {},
35764
+ ...include.length ? { include } : {}
35765
+ });
35766
+ rawMessages = shouldGetNewestAndReverse ? paginatedResult.messages.reverse() : paginatedResult.messages;
35767
+ ({total, page: resultPage, perPage: resultPerPage, hasMore} = paginatedResult);
35768
+ }
35131
35769
  const messages = filterSystemReminderMessages(new _mastra_core_agent.MessageList({
35132
35770
  threadId,
35133
35771
  resourceId
35134
35772
  }).add(rawMessages, "memory").get.all.db(), includeSystemReminders, hideSignals);
35135
- const { total, page: resultPage, perPage: resultPerPage, hasMore } = paginatedResult;
35136
35773
  const recallResult = {
35137
35774
  messages,
35138
35775
  usage,
@@ -35185,6 +35822,13 @@ var Memory = class Memory extends _mastra_core_memory.MastraMemory {
35185
35822
  });
35186
35823
  return savedThread;
35187
35824
  }
35825
+ /**
35826
+ * Update a thread's title or metadata.
35827
+ *
35828
+ * Unlike `session.thread.rename()`, this does not pin the title, so
35829
+ * Observational Memory may still replace it with an extracted title. To
35830
+ * protect a manual rename, set `metadata.titlePinned` to `true`.
35831
+ */
35188
35832
  async updateThread({ id, title, metadata, memoryConfig }) {
35189
35833
  const updatedThread = await (await this.getMemoryStore()).patchThread({
35190
35834
  id,
@@ -35207,6 +35851,8 @@ var Memory = class Memory extends _mastra_core_memory.MastraMemory {
35207
35851
  await this.deleteStoredThread(memoryStore, threadId, thread?.resourceId);
35208
35852
  }
35209
35853
  async deleteStoredThread(memoryStore, threadId, resourceId) {
35854
+ const engine = this._omEngine ? await this._omEngine : this._omEngineInstance;
35855
+ if (engine && resourceId) await engine.waitForBuffering(threadId, resourceId, OM_DELETE_DRAIN_TIMEOUT_MS);
35210
35856
  await memoryStore.deleteThread({ threadId });
35211
35857
  if (resourceId && memoryStore.supportsObservationalMemory) await memoryStore.clearObservationalMemory(threadId, resourceId);
35212
35858
  if (this.vector) this.trackVectorCleanup(this.deleteThreadVectors(threadId));
@@ -35611,8 +36257,8 @@ ${workingMemory}`;
35611
36257
  if (config.workingMemory?.schema) try {
35612
36258
  const schema = config.workingMemory.schema;
35613
36259
  let convertedSchema;
35614
- if (require_schema_D_ikovK6.isStandardSchemaWithJSON(schema)) convertedSchema = schema["~standard"].jsonSchema.output({ target: "draft-07" });
35615
- else convertedSchema = require_schema_D_ikovK6.toStandardSchema(schema)["~standard"].jsonSchema.output({ target: "draft-07" });
36260
+ if (require_schema_BwlBcZRB.isStandardSchemaWithJSON(schema)) convertedSchema = schema["~standard"].jsonSchema.output({ target: "draft-07" });
36261
+ else convertedSchema = require_schema_BwlBcZRB.toStandardSchema(schema)["~standard"].jsonSchema.output({ target: "draft-07" });
35616
36262
  return {
35617
36263
  format: "json",
35618
36264
  content: JSON.stringify(convertedSchema)
@@ -35753,16 +36399,52 @@ ${workingMemory}`;
35753
36399
  messages = runState ? await runState.load(`observational-memory:messages:thread:${threadId}:${boundary}`, loadMessages) : await loadMessages();
35754
36400
  }
35755
36401
  } else {
35756
- const lastMessages = config.lastMessages;
35757
- if (lastMessages === false) messages = [];
35758
- else messages = (await memoryStore.listMessages({
36402
+ const lastMessages = (0, _mastra_core_memory.normalizeMessageHistoryConfig)(config.lastMessages, config.messageHistory);
36403
+ if (!lastMessages.enabled) messages = [];
36404
+ else if (lastMessages.maxTokens !== void 0) {
36405
+ const storedBoundary = (0, _mastra_core_memory.getMemoryTokenBoundary)(await memoryStore.getThreadById({
36406
+ threadId,
36407
+ resourceId
36408
+ }));
36409
+ const boundary = storedBoundary?.maxTokens === lastMessages.maxTokens && storedBoundary.atMaxRemoveTokens === lastMessages.atMaxRemoveTokens ? storedBoundary : void 0;
36410
+ const tokenCounter = this.createMemoryTokenCounter();
36411
+ const loaded = await (0, _mastra_core_memory.loadMessageHistory)({
36412
+ storage: memoryStore,
36413
+ threadId,
36414
+ resourceId,
36415
+ boundary,
36416
+ maxMessages: lastMessages.maxMessages,
36417
+ maxTokens: lastMessages.maxTokens,
36418
+ tokenCounter,
36419
+ initialTokens: 24
36420
+ });
36421
+ const messageList = new _mastra_core_agent.MessageList();
36422
+ messageList.add(loaded.messages, "memory");
36423
+ if (systemParts.length) messageList.addSystem(systemParts.join("\n\n"));
36424
+ await new _mastra_core_processors.TokenLimiterProcessor({
36425
+ limit: lastMessages.maxTokens,
36426
+ atMaxRemoveTokens: lastMessages.atMaxRemoveTokens,
36427
+ trimMode: "memory-only",
36428
+ tokenCounter
36429
+ }).processInput({
36430
+ messageList,
36431
+ messages: messageList.get.all.db(),
36432
+ systemMessages: messageList.getAllSystemMessages(),
36433
+ state: {},
36434
+ retryCount: 0,
36435
+ abort: (reason) => {
36436
+ throw new Error(reason);
36437
+ }
36438
+ });
36439
+ messages = messageList.get.all.db();
36440
+ } else messages = (await memoryStore.listMessages({
35759
36441
  threadId,
35760
36442
  resourceId,
35761
36443
  orderBy: {
35762
36444
  field: "createdAt",
35763
36445
  direction: "DESC"
35764
36446
  },
35765
- perPage: typeof lastMessages === "number" ? lastMessages : void 0,
36447
+ perPage: lastMessages.maxMessages,
35766
36448
  includeTotal: false
35767
36449
  })).messages.reverse();
35768
36450
  }
@@ -37692,23 +38374,23 @@ const createModelInstance = async (provider, modelId, version = "v2") => {
37692
38374
  try {
37693
38375
  const providerFn = version === `v1` ? { v1: {
37694
38376
  openai: async () => {
37695
- const { openai } = await Promise.resolve().then(() => require("./dist-CLQt62Pi.cjs"));
38377
+ const { openai } = await Promise.resolve().then(() => require("./dist-DO5NHh-t.cjs"));
37696
38378
  return openai(modelId);
37697
38379
  },
37698
38380
  anthropic: async () => {
37699
- const { anthropic } = await Promise.resolve().then(() => require("./dist-DpM-6UBk.cjs"));
38381
+ const { anthropic } = await Promise.resolve().then(() => require("./dist-vM0zJcP5.cjs"));
37700
38382
  return anthropic(modelId);
37701
38383
  },
37702
38384
  groq: async () => {
37703
- const { groq } = await Promise.resolve().then(() => require("./dist-C76EmJsT.cjs"));
38385
+ const { groq } = await Promise.resolve().then(() => require("./dist-CkFmsB2E.cjs"));
37704
38386
  return groq(modelId);
37705
38387
  },
37706
38388
  xai: async () => {
37707
- const { xai } = await Promise.resolve().then(() => require("./dist-D6F_HzDS.cjs"));
38389
+ const { xai } = await Promise.resolve().then(() => require("./dist-B0uCWZUF.cjs"));
37708
38390
  return xai(modelId);
37709
38391
  },
37710
38392
  google: async () => {
37711
- const { google } = await Promise.resolve().then(() => require("./dist-C9yKk16g.cjs"));
38393
+ const { google } = await Promise.resolve().then(() => require("./dist-BQ0VOLA9.cjs"));
37712
38394
  return google(modelId);
37713
38395
  }
37714
38396
  } }[version][provider] : () => new _mastra_core_llm.ModelRouterLanguageModel(`${provider}/${modelId}`);
@@ -40379,7 +41061,7 @@ Return the actual exported names of the units, as well as the file names.`,
40379
41061
  maxSteps: 100
40380
41062
  });
40381
41063
  else {
40382
- const jsonSchema = require_schema_D_ikovK6.standardSchemaToJSONSchema((0, _mastra_core_schema.toStandardSchema)(output));
41064
+ const jsonSchema = require_schema_BwlBcZRB.standardSchemaToJSONSchema((0, _mastra_core_schema.toStandardSchema)(output));
40383
41065
  result = await agent.generateLegacy(prompt, {
40384
41066
  experimental_output: jsonSchema,
40385
41067
  maxSteps: 100
@@ -47287,4 +47969,4 @@ const agentBuilderWorkflows = {
47287
47969
  //#endregion
47288
47970
  exports.agentBuilderWorkflows = agentBuilderWorkflows;
47289
47971
 
47290
- //# sourceMappingURL=dist-BKxbtiJd.cjs.map
47972
+ //# sourceMappingURL=dist-CF1rK7oZ.cjs.map