@mastra/memory 1.17.0-alpha.0 → 1.17.1-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/dist/{chunk-MPBMHIAQ.js → chunk-7742VTN5.js} +100 -44
  3. package/dist/chunk-7742VTN5.js.map +1 -0
  4. package/dist/{chunk-5MTY2UYL.cjs → chunk-J2XQSPAB.cjs} +100 -44
  5. package/dist/chunk-J2XQSPAB.cjs.map +1 -0
  6. package/dist/{constants-HXOCZPB7.cjs → constants-PJXB7ZIS.cjs} +2 -2
  7. package/dist/{constants-HXOCZPB7.cjs.map → constants-PJXB7ZIS.cjs.map} +1 -1
  8. package/dist/{constants-BDOITAO3.js → constants-XEHPYRDJ.js} +2 -2
  9. package/dist/{constants-BDOITAO3.js.map → constants-XEHPYRDJ.js.map} +1 -1
  10. package/dist/docs/SKILL.md +1 -1
  11. package/dist/docs/assets/SOURCE_MAP.json +39 -39
  12. package/dist/index.cjs +785 -384
  13. package/dist/index.cjs.map +1 -1
  14. package/dist/index.js +776 -375
  15. package/dist/index.js.map +1 -1
  16. package/dist/{observational-memory-UCFGVLVW.cjs → observational-memory-ISRI7QGE.cjs} +26 -26
  17. package/dist/{observational-memory-UCFGVLVW.cjs.map → observational-memory-ISRI7QGE.cjs.map} +1 -1
  18. package/dist/{observational-memory-7YYZIIX4.js → observational-memory-YYO73QMY.js} +3 -3
  19. package/dist/{observational-memory-7YYZIIX4.js.map → observational-memory-YYO73QMY.js.map} +1 -1
  20. package/dist/processors/index.cjs +24 -24
  21. package/dist/processors/index.js +1 -1
  22. package/dist/processors/observational-memory/observation-strategies/async-buffer.d.ts.map +1 -1
  23. package/dist/processors/observational-memory/observation-strategies/base.d.ts.map +1 -1
  24. package/dist/processors/observational-memory/observation-turn/step.d.ts.map +1 -1
  25. package/dist/processors/observational-memory/observation-turn/turn.d.ts +3 -2
  26. package/dist/processors/observational-memory/observation-turn/turn.d.ts.map +1 -1
  27. package/dist/processors/observational-memory/observation-turn/types.d.ts +1 -0
  28. package/dist/processors/observational-memory/observation-turn/types.d.ts.map +1 -1
  29. package/dist/processors/observational-memory/observational-memory.d.ts.map +1 -1
  30. package/dist/processors/observational-memory/processor.d.ts.map +1 -1
  31. package/dist/processors/observational-memory/reflector-runner.d.ts +1 -0
  32. package/dist/processors/observational-memory/reflector-runner.d.ts.map +1 -1
  33. package/package.json +10 -10
  34. package/dist/chunk-3PUO6DLX.js +0 -439
  35. package/dist/chunk-3PUO6DLX.js.map +0 -1
  36. package/dist/chunk-5MTY2UYL.cjs.map +0 -1
  37. package/dist/chunk-CK4U3AYR.cjs +0 -84
  38. package/dist/chunk-CK4U3AYR.cjs.map +0 -1
  39. package/dist/chunk-DAJJSFVA.cjs +0 -441
  40. package/dist/chunk-DAJJSFVA.cjs.map +0 -1
  41. package/dist/chunk-DGUM43GV.js +0 -10
  42. package/dist/chunk-DGUM43GV.js.map +0 -1
  43. package/dist/chunk-EQ4M72KU.js +0 -439
  44. package/dist/chunk-EQ4M72KU.js.map +0 -1
  45. package/dist/chunk-IDRQZVB4.cjs +0 -84
  46. package/dist/chunk-IDRQZVB4.cjs.map +0 -1
  47. package/dist/chunk-JEQ2X3Z6.cjs +0 -12
  48. package/dist/chunk-JEQ2X3Z6.cjs.map +0 -1
  49. package/dist/chunk-MPBMHIAQ.js.map +0 -1
  50. package/dist/chunk-RC6RZVYE.js +0 -79
  51. package/dist/chunk-RC6RZVYE.js.map +0 -1
  52. package/dist/chunk-SVPZMV27.js +0 -79
  53. package/dist/chunk-SVPZMV27.js.map +0 -1
  54. package/dist/chunk-ZD3BKU5O.cjs +0 -441
  55. package/dist/chunk-ZD3BKU5O.cjs.map +0 -1
  56. package/dist/token-APYSY3BW-2DN6RAUY.js +0 -61
  57. package/dist/token-APYSY3BW-2DN6RAUY.js.map +0 -1
  58. package/dist/token-APYSY3BW-POD4OUWN.cjs +0 -63
  59. package/dist/token-APYSY3BW-POD4OUWN.cjs.map +0 -1
  60. package/dist/token-APYSY3BW-YTVQELJT.js +0 -61
  61. package/dist/token-APYSY3BW-YTVQELJT.js.map +0 -1
  62. package/dist/token-APYSY3BW-ZQ7TMBY7.cjs +0 -63
  63. package/dist/token-APYSY3BW-ZQ7TMBY7.cjs.map +0 -1
  64. package/dist/token-util-RMHT2CPJ-6TGPE335.cjs +0 -10
  65. package/dist/token-util-RMHT2CPJ-6TGPE335.cjs.map +0 -1
  66. package/dist/token-util-RMHT2CPJ-77HHGIQN.cjs +0 -10
  67. package/dist/token-util-RMHT2CPJ-77HHGIQN.cjs.map +0 -1
  68. package/dist/token-util-RMHT2CPJ-RJEA3FAN.js +0 -8
  69. package/dist/token-util-RMHT2CPJ-RJEA3FAN.js.map +0 -1
  70. package/dist/token-util-RMHT2CPJ-WJZ2SYAR.js +0 -8
  71. package/dist/token-util-RMHT2CPJ-WJZ2SYAR.js.map +0 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,27 @@
1
1
  # @mastra/memory
2
2
 
3
+ ## 1.17.1-alpha.0
4
+
5
+ ### Patch Changes
6
+
7
+ - Fixed observational memory message boundaries so streamed tool results continue in a fresh assistant message instead of being filtered out mid-run, and OM lifecycle markers persist through memory without creating data-only database messages. ([#15701](https://github.com/mastra-ai/mastra/pull/15701))
8
+
9
+ - Updated dependencies [[`750b4d3`](https://github.com/mastra-ai/mastra/commit/750b4d3d8231f92e769b2c485921ac5a8ca639b9)]:
10
+ - @mastra/core@1.28.0-alpha.1
11
+
12
+ ## 1.17.0
13
+
14
+ ### Minor Changes
15
+
16
+ - Added opt-in temporal-gap markers for observational memory. When enabled via `observationalMemory.temporalMarkers: true`, the agent receives a `<system-reminder type="temporal-gap">` before any user message that arrives more than 10 minutes after the previous one, so it can anchor responses in real elapsed time. Markers are persisted, surfaced to the observer, and rendered by the MastraCode TUI on reload. ([#15605](https://github.com/mastra-ai/mastra/pull/15605))
17
+
18
+ ### Patch Changes
19
+
20
+ - Fixed observer agent truncation that could cut UTF-16 surrogate pairs in half when formatting messages, tool results, or observation lines with emoji or other astral-plane characters. This produced lone surrogates that strict JSON parsers (including Anthropic's) reject with errors like `no low surrogate in string`, causing observer runs to fail. ([#15634](https://github.com/mastra-ai/mastra/pull/15634))
21
+
22
+ - Updated dependencies [[`f112db1`](https://github.com/mastra-ai/mastra/commit/f112db179557ae9b5a0f1d25dc47f928d7d61cd9), [`21d9706`](https://github.com/mastra-ai/mastra/commit/21d970604d89eee970cbf8013d26d7551aff6ea5), [`0a0aa94`](https://github.com/mastra-ai/mastra/commit/0a0aa94729592e99885af2efb90c56aaada62247), [`ed07df3`](https://github.com/mastra-ai/mastra/commit/ed07df32a9d539c8261e892fc1bade783f5b41a6), [`01a7d51`](https://github.com/mastra-ai/mastra/commit/01a7d513493d21562f677f98550f7ceb165ba78c)]:
23
+ - @mastra/core@1.27.0
24
+
3
25
  ## 1.17.0-alpha.0
4
26
 
5
27
  ### Minor Changes
@@ -1088,9 +1088,11 @@ var ObservationStrategy = class _ObservationStrategy {
1088
1088
  }
1089
1089
  async streamMarker(marker) {
1090
1090
  if (this.opts.writer) {
1091
- await this.opts.writer.custom(marker).catch(() => {
1091
+ await this.opts.writer.custom({ ...marker, transient: true }).catch(() => {
1092
1092
  });
1093
1093
  }
1094
+ const markerThreadId = marker.data?.threadId ?? this.opts.threadId;
1095
+ await this.persistMarkerToStorage(marker, markerThreadId, this.opts.resourceId);
1094
1096
  }
1095
1097
  getObservationMarkerConfig() {
1096
1098
  return {
@@ -1596,7 +1598,7 @@ var AsyncBufferObservationStrategy = class extends ObservationStrategy {
1596
1598
  }
1597
1599
  }
1598
1600
  async emitEndMarkers(_cycleId, processed) {
1599
- if (!processed.observations || !this.opts.writer) return;
1601
+ if (!processed.observations) return;
1600
1602
  const { record, threadId, messages } = this.opts;
1601
1603
  const tokensBuffered = await this.tokenCounter.countMessagesAsync(messages);
1602
1604
  const updatedRecord = await this.storage.getObservationalMemory(record.threadId, record.resourceId);
@@ -1612,12 +1614,13 @@ var AsyncBufferObservationStrategy = class extends ObservationStrategy {
1612
1614
  threadId,
1613
1615
  observations: processed.observations
1614
1616
  });
1615
- void this.opts.writer.custom(endMarker).catch(() => {
1616
- });
1617
+ if (this.opts.writer) {
1618
+ void this.opts.writer.custom({ ...endMarker, transient: true }).catch(() => {
1619
+ });
1620
+ }
1617
1621
  await this.persistMarkerToStorage(endMarker, threadId, record.resourceId ?? void 0);
1618
1622
  }
1619
1623
  async emitFailedMarkers(_cycleId, error) {
1620
- if (!this.opts.writer) return;
1621
1624
  const { record, threadId, messages } = this.opts;
1622
1625
  const tokensAttempted = await this.tokenCounter.countMessagesAsync(messages);
1623
1626
  const failedMarker = createBufferingFailedMarker({
@@ -1629,8 +1632,10 @@ var AsyncBufferObservationStrategy = class extends ObservationStrategy {
1629
1632
  recordId: record.id,
1630
1633
  threadId
1631
1634
  });
1632
- void this.opts.writer.custom(failedMarker).catch(() => {
1633
- });
1635
+ if (this.opts.writer) {
1636
+ void this.opts.writer.custom({ ...failedMarker, transient: true }).catch(() => {
1637
+ });
1638
+ }
1634
1639
  await this.persistMarkerToStorage(failedMarker, threadId, record.resourceId ?? void 0);
1635
1640
  }
1636
1641
  };
@@ -2095,7 +2100,11 @@ var ObservationStep = class {
2095
2100
  }
2096
2101
  const allMsgsForToolCheck = messageList.get.all.db();
2097
2102
  const lastMessage = allMsgsForToolCheck[allMsgsForToolCheck.length - 1];
2098
- const latestStepParts = getLatestStepParts(lastMessage?.content?.parts ?? []);
2103
+ const pendingStepMessages = [...messageList.get.input.db(), ...messageList.get.response.db()];
2104
+ const latestStepParts = [
2105
+ ...getLatestStepParts(lastMessage?.content?.parts ?? []),
2106
+ ...pendingStepMessages.flatMap((msg) => getLatestStepParts(msg.content?.parts ?? []))
2107
+ ];
2099
2108
  const hasIncompleteToolCalls = latestStepParts.some(
2100
2109
  (part) => part?.type === "tool-invocation" && part.toolInvocation?.state === "call"
2101
2110
  );
@@ -2282,6 +2291,31 @@ var ObservationStep = class {
2282
2291
  writer: this.turn.writer,
2283
2292
  observabilityContext: this.turn.observabilityContext
2284
2293
  });
2294
+ if (obsResult.observed) {
2295
+ const observedMessageIds = new Set(obsResult.record.observedMessageIds ?? []);
2296
+ const liveMessages = messageList.get.all.db();
2297
+ let latestObservedIndex = -1;
2298
+ for (let i = liveMessages.length - 1; i >= 0; i--) {
2299
+ const message = liveMessages[i];
2300
+ if (message && observedMessageIds.has(message.id)) {
2301
+ latestObservedIndex = i;
2302
+ break;
2303
+ }
2304
+ }
2305
+ const messageToSeal = latestObservedIndex >= 0 ? liveMessages[latestObservedIndex] : void 0;
2306
+ const messagesToSeal = messageToSeal ? [messageToSeal] : [];
2307
+ om.sealMessagesForBuffering(messagesToSeal);
2308
+ try {
2309
+ await this.turn.hooks?.onSyncObservationComplete?.();
2310
+ } catch (error) {
2311
+ omDebug(
2312
+ `[OM:observe] onSyncObservationComplete hook failed: ${error instanceof Error ? error.message : String(error)}`
2313
+ );
2314
+ }
2315
+ if (messagesToSeal.length > 0) {
2316
+ await om.persistMessages(messagesToSeal, threadId, resourceId);
2317
+ }
2318
+ }
2285
2319
  return {
2286
2320
  succeeded: obsResult.observed,
2287
2321
  record: obsResult.record,
@@ -2309,7 +2343,7 @@ var ObservationTurn = class {
2309
2343
  observabilityContext;
2310
2344
  /** Current actor model for this step. Updated by the processor before prepare(). */
2311
2345
  actorModelContext;
2312
- /** Optional processor-provided hooks for turn/step lifecycle integration. */
2346
+ /** Processor-provided hooks for turn/step lifecycle integration. */
2313
2347
  hooks;
2314
2348
  constructor(opts) {
2315
2349
  this.om = opts.om;
@@ -2317,7 +2351,7 @@ var ObservationTurn = class {
2317
2351
  this.resourceId = opts.resourceId;
2318
2352
  this.messageList = opts.messageList;
2319
2353
  this.observabilityContext = opts.observabilityContext;
2320
- this.hooks = opts.hooks;
2354
+ this.hooks = opts.hooks ?? {};
2321
2355
  }
2322
2356
  om;
2323
2357
  threadId;
@@ -2337,6 +2371,10 @@ var ObservationTurn = class {
2337
2371
  get currentStep() {
2338
2372
  return this._currentStep;
2339
2373
  }
2374
+ addHooks(hooks) {
2375
+ if (!hooks) return;
2376
+ Object.assign(this.hooks, hooks);
2377
+ }
2340
2378
  /**
2341
2379
  * Load context and cache the record. Call once at the start of the turn.
2342
2380
  *
@@ -4406,8 +4444,9 @@ var ReflectorRunner = class {
4406
4444
  recordId: streamContext.recordId,
4407
4445
  threadId: streamContext.threadId
4408
4446
  });
4409
- await streamContext.writer.custom(failedMarker).catch(() => {
4447
+ await streamContext.writer.custom({ ...failedMarker, transient: true }).catch(() => {
4410
4448
  });
4449
+ await this.persistMarkerToStorage(failedMarker, streamContext.threadId, streamContext.resourceId);
4411
4450
  const retryCycleId = crypto.randomUUID();
4412
4451
  streamContext.cycleId = retryCycleId;
4413
4452
  const startMarker = createObservationStartMarker({
@@ -4420,8 +4459,9 @@ var ReflectorRunner = class {
4420
4459
  config: this.getObservationMarkerConfig()
4421
4460
  });
4422
4461
  streamContext.startedAt = startMarker.data.startedAt;
4423
- await streamContext.writer.custom(startMarker).catch(() => {
4462
+ await streamContext.writer.custom({ ...startMarker, transient: true }).catch(() => {
4424
4463
  });
4464
+ await this.persistMarkerToStorage(startMarker, streamContext.threadId, streamContext.resourceId);
4425
4465
  }
4426
4466
  currentLevel = Math.min(currentLevel + 1, maxLevel);
4427
4467
  }
@@ -4458,7 +4498,7 @@ var ReflectorRunner = class {
4458
4498
  recordId: record.id,
4459
4499
  threadId: record.threadId ?? ""
4460
4500
  });
4461
- void writer.custom(failedMarker).catch(() => {
4501
+ void writer.custom({ ...failedMarker, transient: true }).catch(() => {
4462
4502
  });
4463
4503
  await this.persistMarkerToStorage(failedMarker, record.threadId ?? "", record.resourceId ?? void 0);
4464
4504
  }
@@ -4516,8 +4556,13 @@ var ReflectorRunner = class {
4516
4556
  threadIds: record.threadId ? [record.threadId] : [],
4517
4557
  config: this.getObservationMarkerConfig(currentRecord)
4518
4558
  });
4519
- void writer.custom(startMarker).catch(() => {
4559
+ void writer.custom({ ...startMarker, transient: true }).catch(() => {
4520
4560
  });
4561
+ await this.persistMarkerToStorage(
4562
+ startMarker,
4563
+ currentRecord.threadId ?? "",
4564
+ currentRecord.resourceId ?? void 0
4565
+ );
4521
4566
  }
4522
4567
  const compressionStartLevel = await this.getCompressionStartLevel(requestContext);
4523
4568
  const reflectResult = await this.call(
@@ -4556,7 +4601,7 @@ var ReflectorRunner = class {
4556
4601
  threadId: currentRecord.threadId ?? "",
4557
4602
  observations: reflectResult.observations
4558
4603
  });
4559
- void writer.custom(endMarker).catch(() => {
4604
+ void writer.custom({ ...endMarker, transient: true }).catch(() => {
4560
4605
  });
4561
4606
  await this.persistMarkerToStorage(endMarker, currentRecord.threadId ?? "", currentRecord.resourceId ?? void 0);
4562
4607
  }
@@ -4655,7 +4700,7 @@ ${unreflectedContent}` : freshRecord.bufferedReflection;
4655
4700
  currentModel: activationMetadata?.currentModel,
4656
4701
  config: this.getObservationMarkerConfig(freshRecord)
4657
4702
  });
4658
- void writer.custom(activationMarker).catch(() => {
4703
+ void writer.custom({ ...activationMarker, transient: true }).catch(() => {
4659
4704
  });
4660
4705
  await this.persistMarkerToMessage(
4661
4706
  activationMarker,
@@ -4794,8 +4839,9 @@ ${unreflectedContent}` : freshRecord.bufferedReflection;
4794
4839
  threadIds: [threadId],
4795
4840
  config: this.getObservationMarkerConfig(record)
4796
4841
  });
4797
- await writer.custom(startMarker).catch(() => {
4842
+ await writer.custom({ ...startMarker, transient: true }).catch(() => {
4798
4843
  });
4844
+ await this.persistMarkerToStorage(startMarker, threadId, record.resourceId ?? void 0);
4799
4845
  }
4800
4846
  this.emitDebugEvent({
4801
4847
  type: "reflection_triggered",
@@ -4810,7 +4856,8 @@ ${unreflectedContent}` : freshRecord.bufferedReflection;
4810
4856
  cycleId,
4811
4857
  startedAt,
4812
4858
  recordId: record.id,
4813
- threadId
4859
+ threadId,
4860
+ resourceId: record.resourceId ?? void 0
4814
4861
  } : void 0;
4815
4862
  let reflectionUsage;
4816
4863
  let reflectionError;
@@ -4845,8 +4892,9 @@ ${unreflectedContent}` : freshRecord.bufferedReflection;
4845
4892
  recordId: record.id,
4846
4893
  threadId
4847
4894
  });
4848
- await writer.custom(endMarker).catch(() => {
4895
+ await writer.custom({ ...endMarker, transient: true }).catch(() => {
4849
4896
  });
4897
+ await this.persistMarkerToStorage(endMarker, threadId, record.resourceId ?? void 0);
4850
4898
  }
4851
4899
  this.emitDebugEvent({
4852
4900
  type: "reflection_complete",
@@ -4869,8 +4917,9 @@ ${unreflectedContent}` : freshRecord.bufferedReflection;
4869
4917
  recordId: record.id,
4870
4918
  threadId
4871
4919
  });
4872
- await writer.custom(failedMarker).catch(() => {
4920
+ await writer.custom({ ...failedMarker, transient: true }).catch(() => {
4873
4921
  });
4922
+ await this.persistMarkerToStorage(failedMarker, threadId, record.resourceId ?? void 0);
4874
4923
  }
4875
4924
  reflectionError = error instanceof Error ? error : new Error(String(error));
4876
4925
  if (abortSignal?.aborted) {
@@ -7799,17 +7848,18 @@ ${grouped}` : grouped;
7799
7848
  const cycleId = `buffer-obs-${Date.now()}-${Math.random().toString(36).slice(2, 11)}`;
7800
7849
  const startedAt = (/* @__PURE__ */ new Date()).toISOString();
7801
7850
  const tokensToBuffer = await this.tokenCounter.countMessagesAsync(messagesToBuffer);
7851
+ const startMarker = createBufferingStartMarker({
7852
+ cycleId,
7853
+ operationType: "observation",
7854
+ tokensToBuffer,
7855
+ recordId: freshRecord.id,
7856
+ threadId,
7857
+ threadIds: [threadId],
7858
+ config: this.getObservationMarkerConfig()
7859
+ });
7860
+ await this.persistMarkerToStorage(startMarker, threadId, freshRecord.resourceId ?? void 0);
7802
7861
  if (writer) {
7803
- const startMarker = createBufferingStartMarker({
7804
- cycleId,
7805
- operationType: "observation",
7806
- tokensToBuffer,
7807
- recordId: freshRecord.id,
7808
- threadId,
7809
- threadIds: [threadId],
7810
- config: this.getObservationMarkerConfig()
7811
- });
7812
- void writer.custom(startMarker).catch(() => {
7862
+ void writer.custom({ ...startMarker, transient: true }).catch(() => {
7813
7863
  });
7814
7864
  }
7815
7865
  omDebug(
@@ -8469,18 +8519,19 @@ ${grouped}` : grouped;
8469
8519
  }
8470
8520
  const cycleId = `buffer-obs-${Date.now()}-${Math.random().toString(36).slice(2, 11)}`;
8471
8521
  const startedAt = (/* @__PURE__ */ new Date()).toISOString();
8522
+ const startMarker = createBufferingStartMarker({
8523
+ cycleId,
8524
+ operationType: "observation",
8525
+ tokensToBuffer: newTokens,
8526
+ recordId: record.id,
8527
+ threadId,
8528
+ threadIds: [threadId],
8529
+ config: this.getObservationMarkerConfig()
8530
+ });
8531
+ await this.persistMarkerToStorage(startMarker, threadId, record.resourceId ?? void 0);
8472
8532
  const writer = opts.writer;
8473
8533
  if (writer) {
8474
- const startMarker = createBufferingStartMarker({
8475
- cycleId,
8476
- operationType: "observation",
8477
- tokensToBuffer: newTokens,
8478
- recordId: record.id,
8479
- threadId,
8480
- threadIds: [threadId],
8481
- config: this.getObservationMarkerConfig()
8482
- });
8483
- void writer.custom(startMarker).catch(() => {
8534
+ void writer.custom({ ...startMarker, transient: true }).catch(() => {
8484
8535
  });
8485
8536
  }
8486
8537
  await ObservationStrategy.create(this, {
@@ -8673,7 +8724,7 @@ ${grouped}` : grouped;
8673
8724
  currentModel,
8674
8725
  config: this.getObservationMarkerConfig()
8675
8726
  });
8676
- void opts.writer.custom(activationMarker).catch(() => {
8727
+ void opts.writer.custom({ ...activationMarker, transient: true }).catch(() => {
8677
8728
  });
8678
8729
  await this.persistMarkerToMessage(
8679
8730
  activationMarker,
@@ -9124,7 +9175,8 @@ var ObservationalMemoryProcessor = class {
9124
9175
  messageList,
9125
9176
  observabilityContext: getOmObservabilityContext(args),
9126
9177
  hooks: {
9127
- onBufferChunkSealed: rotateResponseMessageId
9178
+ onBufferChunkSealed: rotateResponseMessageId,
9179
+ onSyncObservationComplete: rotateResponseMessageId
9128
9180
  }
9129
9181
  });
9130
9182
  this.turn.writer = writer;
@@ -9135,6 +9187,10 @@ var ObservationalMemoryProcessor = class {
9135
9187
  }
9136
9188
  state.__omTurn = this.turn;
9137
9189
  }
9190
+ this.turn.addHooks({
9191
+ onBufferChunkSealed: rotateResponseMessageId,
9192
+ onSyncObservationComplete: rotateResponseMessageId
9193
+ });
9138
9194
  const observabilityContext = getOmObservabilityContext(args);
9139
9195
  state.__omObservabilityContext = observabilityContext;
9140
9196
  this.turn.observabilityContext = observabilityContext;
@@ -9272,5 +9328,5 @@ function getObservationsAsOf(activeObservations, asOf) {
9272
9328
  }
9273
9329
 
9274
9330
  export { ModelByInputTokens, OBSERVER_SYSTEM_PROMPT, ObservationalMemory, ObservationalMemoryProcessor, TokenCounter, buildObserverPrompt, buildObserverSystemPrompt, combineObservationGroupRanges, deriveObservationGroupProvenance, extractCurrentTask, formatMessagesForObserver, formatToolResultForObserver, getObservationsAsOf, hasCurrentTaskSection, injectAnchorIds, optimizeObservationsForContext, parseAnchorId, parseObservationGroups, parseObserverOutput, reconcileObservationGroupsFromReflection, renderObservationGroupsForReflection, resolveToolResultValue, stripEphemeralAnchorIds, stripObservationGroups, truncateStringByTokens, wrapInObservationGroup };
9275
- //# sourceMappingURL=chunk-MPBMHIAQ.js.map
9276
- //# sourceMappingURL=chunk-MPBMHIAQ.js.map
9331
+ //# sourceMappingURL=chunk-7742VTN5.js.map
9332
+ //# sourceMappingURL=chunk-7742VTN5.js.map