@mastra/memory 1.13.0 → 1.13.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.
- package/CHANGELOG.md +9 -0
- package/dist/{chunk-O3KNDDJV.cjs → chunk-HNVSYZRA.cjs} +103 -8
- package/dist/chunk-HNVSYZRA.cjs.map +1 -0
- package/dist/{chunk-ZVRY34YB.js → chunk-SWCWXIDJ.js} +103 -8
- package/dist/chunk-SWCWXIDJ.js.map +1 -0
- package/dist/docs/SKILL.md +1 -1
- package/dist/docs/assets/SOURCE_MAP.json +39 -39
- package/dist/index.cjs +12 -12
- package/dist/index.js +4 -4
- package/dist/{observational-memory-HBQCXPBU.cjs → observational-memory-4VT6QEB7.cjs} +26 -26
- package/dist/{observational-memory-HBQCXPBU.cjs.map → observational-memory-4VT6QEB7.cjs.map} +1 -1
- package/dist/{observational-memory-WOEVNCG4.js → observational-memory-74TRS2R6.js} +3 -3
- package/dist/{observational-memory-WOEVNCG4.js.map → observational-memory-74TRS2R6.js.map} +1 -1
- package/dist/processors/index.cjs +24 -24
- package/dist/processors/index.js +1 -1
- package/dist/processors/observational-memory/observation-strategies/async-buffer.d.ts.map +1 -1
- package/dist/processors/observational-memory/observation-strategies/sync.d.ts.map +1 -1
- package/dist/processors/observational-memory/observation-turn/step.d.ts.map +1 -1
- package/dist/processors/observational-memory/observation-turn/types.d.ts +3 -0
- package/dist/processors/observational-memory/observation-turn/types.d.ts.map +1 -1
- package/dist/processors/observational-memory/observational-memory.d.ts.map +1 -1
- package/dist/processors/observational-memory/observer-runner.d.ts +21 -0
- package/dist/processors/observational-memory/observer-runner.d.ts.map +1 -1
- package/dist/processors/observational-memory/processor.d.ts.map +1 -1
- package/dist/processors/observational-memory/repro-capture.d.ts +2 -0
- package/dist/processors/observational-memory/repro-capture.d.ts.map +1 -1
- package/package.json +5 -5
- package/dist/chunk-O3KNDDJV.cjs.map +0 -1
- package/dist/chunk-ZVRY34YB.js.map +0 -1
|
@@ -1399,8 +1399,6 @@ var SyncObservationStrategy = class extends ObservationStrategy {
|
|
|
1399
1399
|
}
|
|
1400
1400
|
}
|
|
1401
1401
|
};
|
|
1402
|
-
|
|
1403
|
-
// src/processors/observational-memory/observation-strategies/async-buffer.ts
|
|
1404
1402
|
var AsyncBufferObservationStrategy = class extends ObservationStrategy {
|
|
1405
1403
|
startedAt;
|
|
1406
1404
|
cycleId;
|
|
@@ -1491,6 +1489,30 @@ var AsyncBufferObservationStrategy = class extends ObservationStrategy {
|
|
|
1491
1489
|
lastBufferedAtTime: processed.lastObservedAt
|
|
1492
1490
|
});
|
|
1493
1491
|
await this.indexObservationGroups(processed.observations, threadId, resourceId, processed.lastObservedAt);
|
|
1492
|
+
const newTitle = processed.threadTitle?.trim();
|
|
1493
|
+
if (newTitle && newTitle.length >= 3) {
|
|
1494
|
+
const thread = await this.storage.getThreadById({ threadId });
|
|
1495
|
+
if (thread) {
|
|
1496
|
+
const oldTitle = thread.title?.trim();
|
|
1497
|
+
if (newTitle !== oldTitle) {
|
|
1498
|
+
const newMetadata = setThreadOMMetadata(thread.metadata, {
|
|
1499
|
+
threadTitle: processed.threadTitle
|
|
1500
|
+
});
|
|
1501
|
+
await this.storage.updateThread({
|
|
1502
|
+
id: threadId,
|
|
1503
|
+
title: newTitle,
|
|
1504
|
+
metadata: newMetadata
|
|
1505
|
+
});
|
|
1506
|
+
const marker = createThreadUpdateMarker({
|
|
1507
|
+
cycleId: this.cycleId,
|
|
1508
|
+
threadId,
|
|
1509
|
+
oldTitle,
|
|
1510
|
+
newTitle
|
|
1511
|
+
});
|
|
1512
|
+
await this.streamMarker(marker);
|
|
1513
|
+
}
|
|
1514
|
+
}
|
|
1515
|
+
}
|
|
1494
1516
|
}
|
|
1495
1517
|
async emitEndMarkers(_cycleId, processed) {
|
|
1496
1518
|
if (!processed.observations || !this.opts.writer) return;
|
|
@@ -1945,6 +1967,7 @@ var ObservationStep = class {
|
|
|
1945
1967
|
let buffered = false;
|
|
1946
1968
|
let reflected = false;
|
|
1947
1969
|
let didThresholdCleanup = false;
|
|
1970
|
+
let observerExchange;
|
|
1948
1971
|
if (this.stepNumber === 0) {
|
|
1949
1972
|
const step0Messages = messageList.get.all.db();
|
|
1950
1973
|
const activation = await om.activate({
|
|
@@ -2043,6 +2066,7 @@ var ObservationStep = class {
|
|
|
2043
2066
|
if (statusSnapshot.shouldObserve && !hasIncompleteToolCalls) {
|
|
2044
2067
|
const preObsGeneration = this.turn.record.generationCount;
|
|
2045
2068
|
const obsResult = await this.runThresholdObservation();
|
|
2069
|
+
observerExchange = obsResult.observerExchange;
|
|
2046
2070
|
if (obsResult.succeeded) {
|
|
2047
2071
|
observed = true;
|
|
2048
2072
|
didThresholdCleanup = true;
|
|
@@ -2096,6 +2120,7 @@ var ObservationStep = class {
|
|
|
2096
2120
|
}
|
|
2097
2121
|
this._context = {
|
|
2098
2122
|
systemMessage,
|
|
2123
|
+
observerExchange,
|
|
2099
2124
|
activated,
|
|
2100
2125
|
observed,
|
|
2101
2126
|
buffered,
|
|
@@ -2163,7 +2188,11 @@ var ObservationStep = class {
|
|
|
2163
2188
|
writer: this.turn.writer,
|
|
2164
2189
|
observabilityContext: this.turn.observabilityContext
|
|
2165
2190
|
});
|
|
2166
|
-
return {
|
|
2191
|
+
return {
|
|
2192
|
+
succeeded: obsResult.observed,
|
|
2193
|
+
record: obsResult.record,
|
|
2194
|
+
observerExchange: om.observer.lastExchange
|
|
2195
|
+
};
|
|
2167
2196
|
}
|
|
2168
2197
|
};
|
|
2169
2198
|
|
|
@@ -3489,6 +3518,8 @@ var ObserverRunner = class {
|
|
|
3489
3518
|
observedMessageIds;
|
|
3490
3519
|
resolveModel;
|
|
3491
3520
|
tokenCounter;
|
|
3521
|
+
/** Captured prompt/response from the last observer call (for repro capture). */
|
|
3522
|
+
lastExchange;
|
|
3492
3523
|
constructor(opts) {
|
|
3493
3524
|
this.observationConfig = opts.observationConfig;
|
|
3494
3525
|
this.observedMessageIds = opts.observedMessageIds;
|
|
@@ -3564,15 +3595,38 @@ var ObserverRunner = class {
|
|
|
3564
3595
|
};
|
|
3565
3596
|
let result = await doGenerate();
|
|
3566
3597
|
let parsed = parseObserverOutput(result.text);
|
|
3598
|
+
let retriedDueToDegenerate = false;
|
|
3567
3599
|
if (parsed.degenerate) {
|
|
3568
3600
|
omDebug(`[OM:callObserver] degenerate repetition detected, retrying once`);
|
|
3569
3601
|
result = await doGenerate();
|
|
3570
3602
|
parsed = parseObserverOutput(result.text);
|
|
3603
|
+
retriedDueToDegenerate = true;
|
|
3571
3604
|
if (parsed.degenerate) {
|
|
3572
3605
|
omDebug(`[OM:callObserver] degenerate repetition on retry, failing`);
|
|
3573
3606
|
throw new Error("Observer produced degenerate output after retry");
|
|
3574
3607
|
}
|
|
3575
3608
|
}
|
|
3609
|
+
const systemPrompt = buildObserverSystemPrompt(
|
|
3610
|
+
false,
|
|
3611
|
+
this.observationConfig.instruction,
|
|
3612
|
+
this.observationConfig.threadTitle
|
|
3613
|
+
);
|
|
3614
|
+
this.lastExchange = {
|
|
3615
|
+
systemPrompt,
|
|
3616
|
+
observerMessages,
|
|
3617
|
+
rawOutput: result.text,
|
|
3618
|
+
parsedResult: {
|
|
3619
|
+
observations: parsed.observations,
|
|
3620
|
+
currentTask: parsed.currentTask,
|
|
3621
|
+
suggestedContinuation: parsed.suggestedContinuation,
|
|
3622
|
+
threadTitle: parsed.threadTitle,
|
|
3623
|
+
degenerate: parsed.degenerate
|
|
3624
|
+
},
|
|
3625
|
+
model: String(resolvedModel.model),
|
|
3626
|
+
inputTokens,
|
|
3627
|
+
isMultiThread: false,
|
|
3628
|
+
retriedDueToDegenerate
|
|
3629
|
+
};
|
|
3576
3630
|
const usage = result.totalUsage ?? result.usage;
|
|
3577
3631
|
return {
|
|
3578
3632
|
observations: parsed.observations,
|
|
@@ -3639,15 +3693,36 @@ var ObserverRunner = class {
|
|
|
3639
3693
|
};
|
|
3640
3694
|
let result = await doGenerate();
|
|
3641
3695
|
let parsed = parseMultiThreadObserverOutput(result.text);
|
|
3696
|
+
let retriedDueToDegenerate = false;
|
|
3642
3697
|
if (parsed.degenerate) {
|
|
3643
3698
|
omDebug(`[OM:callMultiThreadObserver] degenerate repetition detected, retrying once`);
|
|
3644
3699
|
result = await doGenerate();
|
|
3645
3700
|
parsed = parseMultiThreadObserverOutput(result.text);
|
|
3701
|
+
retriedDueToDegenerate = true;
|
|
3646
3702
|
if (parsed.degenerate) {
|
|
3647
3703
|
omDebug(`[OM:callMultiThreadObserver] degenerate repetition on retry, failing`);
|
|
3648
3704
|
throw new Error("Multi-thread observer produced degenerate output after retry");
|
|
3649
3705
|
}
|
|
3650
3706
|
}
|
|
3707
|
+
const systemPrompt = buildObserverSystemPrompt(
|
|
3708
|
+
true,
|
|
3709
|
+
this.observationConfig.instruction,
|
|
3710
|
+
this.observationConfig.threadTitle
|
|
3711
|
+
);
|
|
3712
|
+
this.lastExchange = {
|
|
3713
|
+
systemPrompt,
|
|
3714
|
+
observerMessages,
|
|
3715
|
+
rawOutput: result.text,
|
|
3716
|
+
parsedResult: {
|
|
3717
|
+
observations: Array.from(parsed.threads.values()).map((t) => t.observations).join("\n"),
|
|
3718
|
+
threadTitle: Array.from(parsed.threads.values()).map((t) => t.threadTitle).filter(Boolean).join(", "),
|
|
3719
|
+
degenerate: parsed.degenerate
|
|
3720
|
+
},
|
|
3721
|
+
model: String(resolvedModel.model),
|
|
3722
|
+
inputTokens,
|
|
3723
|
+
isMultiThread: true,
|
|
3724
|
+
retriedDueToDegenerate
|
|
3725
|
+
};
|
|
3651
3726
|
const results = /* @__PURE__ */ new Map();
|
|
3652
3727
|
for (const [threadId, threadResult] of parsed.threads) {
|
|
3653
3728
|
results.set(threadId, {
|
|
@@ -7796,13 +7871,18 @@ ${grouped}` : grouped;
|
|
|
7796
7871
|
const activatedChunks = freshChunks.filter((c) => activationResult.activatedCycleIds.includes(c.cycleId));
|
|
7797
7872
|
const lastActivated = activatedChunks[activatedChunks.length - 1];
|
|
7798
7873
|
if (lastActivated) {
|
|
7874
|
+
const chunkThreadTitle = lastActivated.threadTitle;
|
|
7799
7875
|
const newMetadata = setThreadOMMetadata(thread.metadata, {
|
|
7800
7876
|
suggestedResponse: lastActivated.suggestedContinuation,
|
|
7801
|
-
currentTask: lastActivated.currentTask
|
|
7877
|
+
currentTask: lastActivated.currentTask,
|
|
7878
|
+
threadTitle: chunkThreadTitle
|
|
7802
7879
|
});
|
|
7880
|
+
const oldTitle = thread.title?.trim();
|
|
7881
|
+
const newTitle = chunkThreadTitle?.trim();
|
|
7882
|
+
const shouldUpdateThreadTitle = !!newTitle && newTitle.length >= 3 && newTitle !== oldTitle;
|
|
7803
7883
|
await this.storage.updateThread({
|
|
7804
7884
|
id: threadId,
|
|
7805
|
-
title: thread.title ?? "",
|
|
7885
|
+
title: shouldUpdateThreadTitle ? newTitle : thread.title ?? "",
|
|
7806
7886
|
metadata: newMetadata
|
|
7807
7887
|
});
|
|
7808
7888
|
}
|
|
@@ -8237,6 +8317,20 @@ function writeProcessInputStepReproCapture(params) {
|
|
|
8237
8317
|
`
|
|
8238
8318
|
);
|
|
8239
8319
|
}
|
|
8320
|
+
if (params.observerExchange) {
|
|
8321
|
+
const serialized = safeCaptureJsonOrError(params.observerExchange);
|
|
8322
|
+
if (serialized.ok) {
|
|
8323
|
+
writeFileSync(join(captureDir, "observer-exchange.json"), `${JSON.stringify(serialized.value, null, 2)}
|
|
8324
|
+
`);
|
|
8325
|
+
} else {
|
|
8326
|
+
captureErrors.push({ fileName: "observer-exchange.json", error: serialized.error });
|
|
8327
|
+
writeFileSync(
|
|
8328
|
+
join(captureDir, "observer-exchange.json"),
|
|
8329
|
+
`${JSON.stringify({ __captureError: serialized.error }, null, 2)}
|
|
8330
|
+
`
|
|
8331
|
+
);
|
|
8332
|
+
}
|
|
8333
|
+
}
|
|
8240
8334
|
if (captureErrors.length > 0) {
|
|
8241
8335
|
writeFileSync(join(captureDir, "capture-error.json"), `${JSON.stringify(captureErrors, null, 2)}
|
|
8242
8336
|
`);
|
|
@@ -8401,7 +8495,8 @@ var ObservationalMemoryProcessor = class {
|
|
|
8401
8495
|
postBufferedChunks: [],
|
|
8402
8496
|
postContextTokenCount: finalTotalPending,
|
|
8403
8497
|
messageList,
|
|
8404
|
-
details: {}
|
|
8498
|
+
details: {},
|
|
8499
|
+
observerExchange: ctx.observerExchange
|
|
8405
8500
|
});
|
|
8406
8501
|
}
|
|
8407
8502
|
}
|
|
@@ -8464,5 +8559,5 @@ function getObservationsAsOf(activeObservations, asOf) {
|
|
|
8464
8559
|
}
|
|
8465
8560
|
|
|
8466
8561
|
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 };
|
|
8467
|
-
//# sourceMappingURL=chunk-
|
|
8468
|
-
//# sourceMappingURL=chunk-
|
|
8562
|
+
//# sourceMappingURL=chunk-SWCWXIDJ.js.map
|
|
8563
|
+
//# sourceMappingURL=chunk-SWCWXIDJ.js.map
|