@mastra/server 1.26.1-alpha.0 → 1.27.0-alpha.1
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 +13 -0
- package/dist/{chunk-PIF6BJCN.cjs → chunk-2FRRIWFC.cjs} +9 -9
- package/dist/{chunk-PIF6BJCN.cjs.map → chunk-2FRRIWFC.cjs.map} +1 -1
- package/dist/{chunk-TEE45LZB.js → chunk-2GVTUHUO.js} +4 -4
- package/dist/{chunk-TEE45LZB.js.map → chunk-2GVTUHUO.js.map} +1 -1
- package/dist/{chunk-YRTZGGKQ.cjs → chunk-2THJ6ADC.cjs} +49 -49
- package/dist/{chunk-YRTZGGKQ.cjs.map → chunk-2THJ6ADC.cjs.map} +1 -1
- package/dist/{chunk-VX2KJFOW.js → chunk-3AL5MHJ4.js} +4 -4
- package/dist/{chunk-VX2KJFOW.js.map → chunk-3AL5MHJ4.js.map} +1 -1
- package/dist/{chunk-3ACZ2AKY.js → chunk-3OZRSJHT.js} +6 -6
- package/dist/{chunk-3ACZ2AKY.js.map → chunk-3OZRSJHT.js.map} +1 -1
- package/dist/{chunk-H3SXVQYW.cjs → chunk-44HBA2O4.cjs} +3 -3
- package/dist/{chunk-H3SXVQYW.cjs.map → chunk-44HBA2O4.cjs.map} +1 -1
- package/dist/{chunk-XH2V4AVS.js → chunk-4B22X3FH.js} +5 -5
- package/dist/{chunk-XH2V4AVS.js.map → chunk-4B22X3FH.js.map} +1 -1
- package/dist/{chunk-UM72OD3E.cjs → chunk-4CB2E34E.cjs} +5 -5
- package/dist/{chunk-UM72OD3E.cjs.map → chunk-4CB2E34E.cjs.map} +1 -1
- package/dist/{chunk-KSARJEHH.cjs → chunk-4LVIBP3H.cjs} +4 -4
- package/dist/{chunk-KSARJEHH.cjs.map → chunk-4LVIBP3H.cjs.map} +1 -1
- package/dist/{chunk-D7P775NV.cjs → chunk-6CI3CSK4.cjs} +3 -3
- package/dist/{chunk-D7P775NV.cjs.map → chunk-6CI3CSK4.cjs.map} +1 -1
- package/dist/{chunk-FFSD7OV7.cjs → chunk-6CJWWTVS.cjs} +8 -8
- package/dist/{chunk-FFSD7OV7.cjs.map → chunk-6CJWWTVS.cjs.map} +1 -1
- package/dist/{chunk-WBHTWSW7.js → chunk-6P6HIITF.js} +4 -4
- package/dist/{chunk-WBHTWSW7.js.map → chunk-6P6HIITF.js.map} +1 -1
- package/dist/{chunk-BLYICPLO.cjs → chunk-75W2MUNS.cjs} +38 -38
- package/dist/{chunk-BLYICPLO.cjs.map → chunk-75W2MUNS.cjs.map} +1 -1
- package/dist/{chunk-PDEIYN7Y.cjs → chunk-7KKKNNRH.cjs} +3 -3
- package/dist/{chunk-PDEIYN7Y.cjs.map → chunk-7KKKNNRH.cjs.map} +1 -1
- package/dist/{chunk-TTZI2Z25.js → chunk-7LVLRIR6.js} +5 -5
- package/dist/{chunk-TTZI2Z25.js.map → chunk-7LVLRIR6.js.map} +1 -1
- package/dist/{chunk-V3HMHVKU.js → chunk-7UQ6VG3C.js} +3 -3
- package/dist/{chunk-V3HMHVKU.js.map → chunk-7UQ6VG3C.js.map} +1 -1
- package/dist/{chunk-24SW3KB3.js → chunk-B5VM3A53.js} +3 -3
- package/dist/{chunk-24SW3KB3.js.map → chunk-B5VM3A53.js.map} +1 -1
- package/dist/{chunk-O5XIJDN3.cjs → chunk-B65LZWBE.cjs} +3 -3
- package/dist/{chunk-O5XIJDN3.cjs.map → chunk-B65LZWBE.cjs.map} +1 -1
- package/dist/{chunk-2Q4IAQP6.cjs → chunk-B7SBAXEP.cjs} +7 -7
- package/dist/{chunk-2Q4IAQP6.cjs.map → chunk-B7SBAXEP.cjs.map} +1 -1
- package/dist/{chunk-GELMHP5G.js → chunk-BUDY5TFR.js} +3 -3
- package/dist/{chunk-GELMHP5G.js.map → chunk-BUDY5TFR.js.map} +1 -1
- package/dist/{chunk-2Q5WIJZV.js → chunk-BXJTD5TI.js} +201 -11
- package/dist/chunk-BXJTD5TI.js.map +1 -0
- package/dist/{chunk-KBJI2ZGO.js → chunk-C4NU6EHX.js} +3 -3
- package/dist/{chunk-KBJI2ZGO.js.map → chunk-C4NU6EHX.js.map} +1 -1
- package/dist/{chunk-O4TXCSGQ.cjs → chunk-CDSA5YUY.cjs} +4 -4
- package/dist/{chunk-O4TXCSGQ.cjs.map → chunk-CDSA5YUY.cjs.map} +1 -1
- package/dist/{chunk-2DNSABMG.cjs → chunk-DNY4PR4R.cjs} +3 -3
- package/dist/{chunk-2DNSABMG.cjs.map → chunk-DNY4PR4R.cjs.map} +1 -1
- package/dist/{chunk-LCGUC3UL.cjs → chunk-FTQRGT3E.cjs} +3 -3
- package/dist/{chunk-LCGUC3UL.cjs.map → chunk-FTQRGT3E.cjs.map} +1 -1
- package/dist/{chunk-7I34BNA3.js → chunk-H7HGHJU4.js} +5 -5
- package/dist/{chunk-7I34BNA3.js.map → chunk-H7HGHJU4.js.map} +1 -1
- package/dist/{chunk-ONL7ZWVI.cjs → chunk-HIK5MY74.cjs} +201 -11
- package/dist/chunk-HIK5MY74.cjs.map +1 -0
- package/dist/{chunk-TB5T5EIJ.cjs → chunk-IR7QQFOC.cjs} +7 -7
- package/dist/{chunk-TB5T5EIJ.cjs.map → chunk-IR7QQFOC.cjs.map} +1 -1
- package/dist/{chunk-IBK77L63.js → chunk-IT6MRNKH.js} +3 -3
- package/dist/{chunk-IBK77L63.js.map → chunk-IT6MRNKH.js.map} +1 -1
- package/dist/{chunk-MLJVCFJQ.js → chunk-KSWDXGTC.js} +11 -7
- package/dist/chunk-KSWDXGTC.js.map +1 -0
- package/dist/{chunk-TZF2SAX5.js → chunk-LQUP63RF.js} +6 -6
- package/dist/{chunk-TZF2SAX5.js.map → chunk-LQUP63RF.js.map} +1 -1
- package/dist/{chunk-4WDBN7FE.cjs → chunk-LWK57QIA.cjs} +3 -3
- package/dist/{chunk-4WDBN7FE.cjs.map → chunk-LWK57QIA.cjs.map} +1 -1
- package/dist/{chunk-7SPUHOHW.cjs → chunk-MPMM5D3U.cjs} +4 -4
- package/dist/{chunk-7SPUHOHW.cjs.map → chunk-MPMM5D3U.cjs.map} +1 -1
- package/dist/{chunk-DG6MQPBR.js → chunk-N32V7VSV.js} +4 -4
- package/dist/{chunk-DG6MQPBR.js.map → chunk-N32V7VSV.js.map} +1 -1
- package/dist/{chunk-M6GSAOAD.js → chunk-NVH5GGIR.js} +4 -4
- package/dist/{chunk-M6GSAOAD.js.map → chunk-NVH5GGIR.js.map} +1 -1
- package/dist/{chunk-ZCXN7QWI.js → chunk-OF6LR77W.js} +3 -3
- package/dist/{chunk-ZCXN7QWI.js.map → chunk-OF6LR77W.js.map} +1 -1
- package/dist/{chunk-5Y75OYZM.cjs → chunk-PYPOKT4J.cjs} +3 -3
- package/dist/{chunk-5Y75OYZM.cjs.map → chunk-PYPOKT4J.cjs.map} +1 -1
- package/dist/{chunk-SSJSTNMZ.cjs → chunk-RNDA7UHX.cjs} +18 -18
- package/dist/{chunk-SSJSTNMZ.cjs.map → chunk-RNDA7UHX.cjs.map} +1 -1
- package/dist/{chunk-JDC7A4YV.js → chunk-RQLXTIT5.js} +4 -4
- package/dist/{chunk-JDC7A4YV.js.map → chunk-RQLXTIT5.js.map} +1 -1
- package/dist/{chunk-KDIGKXA3.js → chunk-SIYOW7VK.js} +11 -9
- package/dist/chunk-SIYOW7VK.js.map +1 -0
- package/dist/{chunk-VQPGGT32.cjs → chunk-SYYT53RO.cjs} +41 -39
- package/dist/chunk-SYYT53RO.cjs.map +1 -0
- package/dist/{chunk-MWFVMI3T.js → chunk-TOPWYUTB.js} +6 -6
- package/dist/{chunk-MWFVMI3T.js.map → chunk-TOPWYUTB.js.map} +1 -1
- package/dist/{chunk-CT2AKZPZ.js → chunk-VLNRGJEM.js} +3 -3
- package/dist/{chunk-CT2AKZPZ.js.map → chunk-VLNRGJEM.js.map} +1 -1
- package/dist/{chunk-INGHVKDO.js → chunk-WC4RIS4D.js} +3 -3
- package/dist/{chunk-INGHVKDO.js.map → chunk-WC4RIS4D.js.map} +1 -1
- package/dist/{chunk-WKRZS674.cjs → chunk-WEUZO2Q3.cjs} +9 -9
- package/dist/{chunk-WKRZS674.cjs.map → chunk-WEUZO2Q3.cjs.map} +1 -1
- package/dist/{chunk-VO2PCVXW.cjs → chunk-WF6X4HFH.cjs} +5 -5
- package/dist/{chunk-VO2PCVXW.cjs.map → chunk-WF6X4HFH.cjs.map} +1 -1
- package/dist/{chunk-XQARPKHD.cjs → chunk-XDXODSOG.cjs} +12 -12
- package/dist/{chunk-XQARPKHD.cjs.map → chunk-XDXODSOG.cjs.map} +1 -1
- package/dist/{chunk-JV2ZLLVN.js → chunk-YF6GPVGV.js} +4 -4
- package/dist/{chunk-JV2ZLLVN.js.map → chunk-YF6GPVGV.js.map} +1 -1
- package/dist/{chunk-ZUUD6FN5.js → chunk-YV25CDYJ.js} +3 -3
- package/dist/{chunk-ZUUD6FN5.js.map → chunk-YV25CDYJ.js.map} +1 -1
- package/dist/{chunk-5BD65C6R.cjs → chunk-Z4UBBY2E.cjs} +39 -35
- package/dist/chunk-Z4UBBY2E.cjs.map +1 -0
- package/dist/docs/SKILL.md +1 -1
- package/dist/docs/assets/SOURCE_MAP.json +1 -1
- package/dist/{observational-memory-CIGODMXV-RX4J6TAC.js → observational-memory-7YYZIIX4-CK67BQOD.js} +3 -3
- package/dist/{observational-memory-CIGODMXV-RX4J6TAC.js.map → observational-memory-7YYZIIX4-CK67BQOD.js.map} +1 -1
- package/dist/{observational-memory-CIGODMXV-5QVHS6GP.cjs → observational-memory-7YYZIIX4-IPHEIYJP.cjs} +26 -26
- package/dist/{observational-memory-CIGODMXV-5QVHS6GP.cjs.map → observational-memory-7YYZIIX4-IPHEIYJP.cjs.map} +1 -1
- package/dist/server/browser-stream/index.cjs +5 -0
- package/dist/server/browser-stream/index.cjs.map +1 -1
- package/dist/server/browser-stream/index.js +5 -0
- package/dist/server/browser-stream/index.js.map +1 -1
- package/dist/server/browser-stream/viewer-registry.d.ts.map +1 -1
- package/dist/server/handlers/a2a.cjs +9 -9
- package/dist/server/handlers/a2a.js +1 -1
- package/dist/server/handlers/agent-builder.cjs +16 -16
- package/dist/server/handlers/agent-builder.js +1 -1
- package/dist/server/handlers/agent-versions.cjs +8 -8
- package/dist/server/handlers/agent-versions.js +1 -1
- package/dist/server/handlers/agents.cjs +35 -35
- package/dist/server/handlers/agents.d.ts.map +1 -1
- package/dist/server/handlers/agents.js +1 -1
- package/dist/server/handlers/conversations.cjs +5 -5
- package/dist/server/handlers/conversations.js +1 -1
- package/dist/server/handlers/datasets.cjs +26 -26
- package/dist/server/handlers/datasets.js +1 -1
- package/dist/server/handlers/logs.cjs +4 -4
- package/dist/server/handlers/logs.js +1 -1
- package/dist/server/handlers/mcp-client-versions.cjs +8 -8
- package/dist/server/handlers/mcp-client-versions.js +1 -1
- package/dist/server/handlers/memory.cjs +27 -27
- package/dist/server/handlers/memory.js +1 -1
- package/dist/server/handlers/prompt-block-versions.cjs +8 -8
- package/dist/server/handlers/prompt-block-versions.js +1 -1
- package/dist/server/handlers/responses.cjs +4 -4
- package/dist/server/handlers/responses.js +1 -1
- package/dist/server/handlers/responses.storage.cjs +8 -8
- package/dist/server/handlers/responses.storage.js +1 -1
- package/dist/server/handlers/scorer-versions.cjs +8 -8
- package/dist/server/handlers/scorer-versions.js +1 -1
- package/dist/server/handlers/scores.cjs +7 -7
- package/dist/server/handlers/scores.js +1 -1
- package/dist/server/handlers/stored-agents.cjs +7 -7
- package/dist/server/handlers/stored-agents.js +1 -1
- package/dist/server/handlers/stored-mcp-clients.cjs +6 -6
- package/dist/server/handlers/stored-mcp-clients.js +1 -1
- package/dist/server/handlers/stored-prompt-blocks.cjs +6 -6
- package/dist/server/handlers/stored-prompt-blocks.js +1 -1
- package/dist/server/handlers/stored-scorers.cjs +6 -6
- package/dist/server/handlers/stored-scorers.js +1 -1
- package/dist/server/handlers/stored-workspaces.cjs +6 -6
- package/dist/server/handlers/stored-workspaces.js +1 -1
- package/dist/server/handlers/tools.cjs +6 -6
- package/dist/server/handlers/tools.js +1 -1
- package/dist/server/handlers/utils.cjs +9 -9
- package/dist/server/handlers/utils.js +1 -1
- package/dist/server/handlers/voice.cjs +8 -8
- package/dist/server/handlers/voice.js +1 -1
- package/dist/server/handlers/workflows.cjs +24 -24
- package/dist/server/handlers/workflows.js +1 -1
- package/dist/server/handlers/workspace.cjs +26 -26
- package/dist/server/handlers/workspace.js +1 -1
- package/dist/server/handlers.cjs +35 -35
- package/dist/server/handlers.js +12 -12
- package/dist/server/schemas/index.cjs +227 -227
- package/dist/server/schemas/index.js +9 -9
- package/dist/server/server-adapter/index.cjs +221 -221
- package/dist/server/server-adapter/index.js +24 -24
- package/package.json +4 -4
- package/dist/chunk-2Q5WIJZV.js.map +0 -1
- package/dist/chunk-5BD65C6R.cjs.map +0 -1
- package/dist/chunk-KDIGKXA3.js.map +0 -1
- package/dist/chunk-MLJVCFJQ.js.map +0 -1
- package/dist/chunk-ONL7ZWVI.cjs.map +0 -1
- package/dist/chunk-VQPGGT32.cjs.map +0 -1
|
@@ -1040,7 +1040,7 @@ function imageSize(input) {
|
|
|
1040
1040
|
throw new TypeError(`unsupported file type: ${type}`);
|
|
1041
1041
|
}
|
|
1042
1042
|
|
|
1043
|
-
// ../memory/dist/chunk-
|
|
1043
|
+
// ../memory/dist/chunk-MPBMHIAQ.js
|
|
1044
1044
|
var OM_DEBUG_LOG = process.env.OM_DEBUG ? join(process.cwd(), "om-debug.log") : null;
|
|
1045
1045
|
function omDebug(msg) {
|
|
1046
1046
|
if (!OM_DEBUG_LOG) return;
|
|
@@ -1397,6 +1397,67 @@ ${gap}
|
|
|
1397
1397
|
result += withInlineDates.slice(lastIndex);
|
|
1398
1398
|
return result;
|
|
1399
1399
|
}
|
|
1400
|
+
var MIN_TEMPORAL_GAP_MS = 10 * 60 * 1e3;
|
|
1401
|
+
function formatTemporalGap(diffMs) {
|
|
1402
|
+
if (diffMs < MIN_TEMPORAL_GAP_MS) return null;
|
|
1403
|
+
const minute = 60 * 1e3;
|
|
1404
|
+
const hour = 60 * minute;
|
|
1405
|
+
const day = 24 * hour;
|
|
1406
|
+
const week = 7 * day;
|
|
1407
|
+
const month = 30 * day;
|
|
1408
|
+
const year = 365 * day;
|
|
1409
|
+
const formatUnit = (value, unit) => `${value} ${unit}${value === 1 ? "" : "s"}`;
|
|
1410
|
+
if (diffMs < hour) {
|
|
1411
|
+
const minutes = Math.max(1, Math.round(diffMs / minute));
|
|
1412
|
+
return `${formatUnit(minutes, "minute")} later`;
|
|
1413
|
+
}
|
|
1414
|
+
const formatTwoUnits = (primaryMs, primaryUnit, secondaryMs, secondaryUnit) => {
|
|
1415
|
+
const primary = Math.floor(diffMs / primaryMs);
|
|
1416
|
+
const remainder = diffMs - primary * primaryMs;
|
|
1417
|
+
const secondary = Math.floor(remainder / secondaryMs);
|
|
1418
|
+
const parts = [formatUnit(primary, primaryUnit)];
|
|
1419
|
+
if (secondary > 0) {
|
|
1420
|
+
parts.push(formatUnit(secondary, secondaryUnit));
|
|
1421
|
+
}
|
|
1422
|
+
return `${parts.join(" ")} later`;
|
|
1423
|
+
};
|
|
1424
|
+
if (diffMs < day) {
|
|
1425
|
+
return formatTwoUnits(hour, "hour", minute, "minute");
|
|
1426
|
+
}
|
|
1427
|
+
if (diffMs < week) {
|
|
1428
|
+
return formatTwoUnits(day, "day", hour, "hour");
|
|
1429
|
+
}
|
|
1430
|
+
if (diffMs < month) {
|
|
1431
|
+
return formatTwoUnits(week, "week", day, "day");
|
|
1432
|
+
}
|
|
1433
|
+
if (diffMs < year) {
|
|
1434
|
+
return formatTwoUnits(month, "month", week, "week");
|
|
1435
|
+
}
|
|
1436
|
+
return formatTwoUnits(year, "year", month, "month");
|
|
1437
|
+
}
|
|
1438
|
+
function formatTemporalTimestamp(date) {
|
|
1439
|
+
return date.toLocaleString("en-US", {
|
|
1440
|
+
year: "numeric",
|
|
1441
|
+
month: "2-digit",
|
|
1442
|
+
day: "2-digit",
|
|
1443
|
+
hour: "numeric",
|
|
1444
|
+
minute: "2-digit",
|
|
1445
|
+
hour12: true,
|
|
1446
|
+
timeZoneName: "short"
|
|
1447
|
+
});
|
|
1448
|
+
}
|
|
1449
|
+
function getMessagePartTimestamp(msg, position) {
|
|
1450
|
+
const timestamps = msg.content?.parts?.map((part) => "createdAt" in part ? part.createdAt : void 0).filter((timestamp) => typeof timestamp === "number");
|
|
1451
|
+
if (timestamps && timestamps.length > 0) {
|
|
1452
|
+
const index = position === "first" ? 0 : timestamps.length - 1;
|
|
1453
|
+
const timestamp = timestamps[index];
|
|
1454
|
+
if (timestamp !== void 0) return timestamp;
|
|
1455
|
+
}
|
|
1456
|
+
return new Date(msg.createdAt).getTime();
|
|
1457
|
+
}
|
|
1458
|
+
function isTemporalGapMarker(msg) {
|
|
1459
|
+
return msg.id.startsWith("__temporal_");
|
|
1460
|
+
}
|
|
1400
1461
|
function createObservationStartMarker(params) {
|
|
1401
1462
|
return {
|
|
1402
1463
|
type: "data-om-observation-start",
|
|
@@ -3435,6 +3496,13 @@ function stripEphemeralAnchorIds(observations) {
|
|
|
3435
3496
|
}
|
|
3436
3497
|
return observations.replace(/(^|\n)([^\S\n]*)\[(O\d+(?:-N\d+)?)\][^\S\n]*/g, "$1$2");
|
|
3437
3498
|
}
|
|
3499
|
+
function safeSlice(str, end) {
|
|
3500
|
+
if (end <= 0) return "";
|
|
3501
|
+
if (end >= str.length) return str;
|
|
3502
|
+
const code = str.charCodeAt(end - 1);
|
|
3503
|
+
const safeEnd = code >= 55296 && code <= 56319 ? end - 1 : end;
|
|
3504
|
+
return str.slice(0, safeEnd);
|
|
3505
|
+
}
|
|
3438
3506
|
var ENCRYPTED_CONTENT_KEY = "encryptedContent";
|
|
3439
3507
|
var ENCRYPTED_CONTENT_REDACTION_THRESHOLD = 256;
|
|
3440
3508
|
var DEFAULT_OBSERVER_TOOL_RESULT_MAX_TOKENS = 1e4;
|
|
@@ -3500,7 +3568,7 @@ function truncateStringByTokens(text, maxTokens) {
|
|
|
3500
3568
|
return text;
|
|
3501
3569
|
}
|
|
3502
3570
|
const buildCandidate = (sliceEnd) => {
|
|
3503
|
-
const visible = text
|
|
3571
|
+
const visible = safeSlice(text, sliceEnd);
|
|
3504
3572
|
return `${visible}
|
|
3505
3573
|
... [truncated ~${totalTokens - estimateTokenCount(visible)} tokens]`;
|
|
3506
3574
|
};
|
|
@@ -4052,8 +4120,11 @@ function formatObserverAttachmentPlaceholder(part, counter) {
|
|
|
4052
4120
|
return label ? `[${attachmentType} #${attachmentId}: ${label}]` : `[${attachmentType} #${attachmentId}]`;
|
|
4053
4121
|
}
|
|
4054
4122
|
function formatObserverPartLine(title, body, time, previousTime) {
|
|
4055
|
-
const timeLabel = time && time !== previousTime ? `
|
|
4056
|
-
|
|
4123
|
+
const timeLabel = time && time !== previousTime ? `(${time})` : "";
|
|
4124
|
+
if (!title) {
|
|
4125
|
+
return timeLabel ? `${timeLabel}: ${body}` : body;
|
|
4126
|
+
}
|
|
4127
|
+
return `${title}${timeLabel ? ` ${timeLabel}` : ""}: ${body}`;
|
|
4057
4128
|
}
|
|
4058
4129
|
function normalizeObserverCreatedAt(createdAt) {
|
|
4059
4130
|
if (createdAt instanceof Date) {
|
|
@@ -4089,6 +4160,16 @@ function formatObserverLines(lines, context = {}) {
|
|
|
4089
4160
|
context: { previousDate, previousTime }
|
|
4090
4161
|
};
|
|
4091
4162
|
}
|
|
4163
|
+
function getTemporalGapMarkerText(msg) {
|
|
4164
|
+
const metadata = typeof msg.content === "object" && msg.content && "metadata" in msg.content ? msg.content.metadata : void 0;
|
|
4165
|
+
if (metadata?.reminderType === "temporal-gap" && typeof metadata.gapText === "string") {
|
|
4166
|
+
return metadata.gapText;
|
|
4167
|
+
}
|
|
4168
|
+
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") {
|
|
4169
|
+
return metadata.systemReminder.gapText;
|
|
4170
|
+
}
|
|
4171
|
+
return void 0;
|
|
4172
|
+
}
|
|
4092
4173
|
function formatObserverMessage(msg, counter, options) {
|
|
4093
4174
|
const maxLen = options?.maxPartLength;
|
|
4094
4175
|
const maxToolResultTokens = options?.maxToolResultTokens ?? DEFAULT_OBSERVER_TOOL_RESULT_MAX_TOKENS;
|
|
@@ -4096,6 +4177,7 @@ function formatObserverMessage(msg, counter, options) {
|
|
|
4096
4177
|
const attachments = [];
|
|
4097
4178
|
const messageCreatedAt = normalizeObserverCreatedAt(msg.createdAt);
|
|
4098
4179
|
let lines = [];
|
|
4180
|
+
const temporalGapText = isTemporalGapMarker(msg) ? getTemporalGapMarkerText(msg) : void 0;
|
|
4099
4181
|
const pushLine = (title, body, createdAt) => {
|
|
4100
4182
|
if (!body) {
|
|
4101
4183
|
return;
|
|
@@ -4108,7 +4190,9 @@ function formatObserverMessage(msg, counter, options) {
|
|
|
4108
4190
|
body
|
|
4109
4191
|
});
|
|
4110
4192
|
};
|
|
4111
|
-
if (
|
|
4193
|
+
if (temporalGapText) {
|
|
4194
|
+
pushLine("", temporalGapText, messageCreatedAt);
|
|
4195
|
+
} else if (typeof msg.content === "string") {
|
|
4112
4196
|
pushLine(role, maybeTruncate(msg.content, maxLen), messageCreatedAt);
|
|
4113
4197
|
} else if (msg.content?.parts && Array.isArray(msg.content.parts) && msg.content.parts.length > 0) {
|
|
4114
4198
|
msg.content.parts.forEach((part) => {
|
|
@@ -4209,8 +4293,8 @@ function buildObserverHistoryMessage(messages, options) {
|
|
|
4209
4293
|
}
|
|
4210
4294
|
function maybeTruncate(str, maxLen) {
|
|
4211
4295
|
if (!maxLen || str.length <= maxLen) return str;
|
|
4212
|
-
const truncated = str
|
|
4213
|
-
const remaining = str.length -
|
|
4296
|
+
const truncated = safeSlice(str, maxLen);
|
|
4297
|
+
const remaining = str.length - truncated.length;
|
|
4214
4298
|
return `${truncated}
|
|
4215
4299
|
... [truncated ${remaining} characters]`;
|
|
4216
4300
|
}
|
|
@@ -4514,7 +4598,7 @@ function sanitizeObservationLines(observations) {
|
|
|
4514
4598
|
let changed = false;
|
|
4515
4599
|
for (let i = 0; i < lines.length; i++) {
|
|
4516
4600
|
if (lines[i].length > MAX_OBSERVATION_LINE_CHARS) {
|
|
4517
|
-
lines[i] = lines[i]
|
|
4601
|
+
lines[i] = safeSlice(lines[i], MAX_OBSERVATION_LINE_CHARS) + " \u2026 [truncated]";
|
|
4518
4602
|
changed = true;
|
|
4519
4603
|
}
|
|
4520
4604
|
}
|
|
@@ -9845,6 +9929,106 @@ ${grouped}` : grouped;
|
|
|
9845
9929
|
});
|
|
9846
9930
|
}
|
|
9847
9931
|
};
|
|
9932
|
+
var TEMPORAL_GAP_REMINDER_TYPE = "temporal-gap";
|
|
9933
|
+
function getTemporalGapReminderText(gapText, timestamp) {
|
|
9934
|
+
return `${gapText} \u2014 ${formatTemporalTimestamp(new Date(timestamp))}`;
|
|
9935
|
+
}
|
|
9936
|
+
function getTemporalGapReminderMetadata(message, gapText, gapMs, timestamp) {
|
|
9937
|
+
const formattedTimestamp = formatTemporalTimestamp(new Date(timestamp));
|
|
9938
|
+
return {
|
|
9939
|
+
reminderType: TEMPORAL_GAP_REMINDER_TYPE,
|
|
9940
|
+
gapText,
|
|
9941
|
+
gapMs,
|
|
9942
|
+
timestamp: formattedTimestamp,
|
|
9943
|
+
timestampMs: timestamp,
|
|
9944
|
+
precedesMessageId: message.id,
|
|
9945
|
+
systemReminder: {
|
|
9946
|
+
type: TEMPORAL_GAP_REMINDER_TYPE,
|
|
9947
|
+
message: getTemporalGapReminderText(gapText, timestamp),
|
|
9948
|
+
gapText,
|
|
9949
|
+
gapMs,
|
|
9950
|
+
timestamp: formattedTimestamp,
|
|
9951
|
+
timestampMs: timestamp,
|
|
9952
|
+
precedesMessageId: message.id
|
|
9953
|
+
}
|
|
9954
|
+
};
|
|
9955
|
+
}
|
|
9956
|
+
function isTemporalGapMarkerForMessage(message, targetMessageId) {
|
|
9957
|
+
if (!isTemporalGapMarker(message)) {
|
|
9958
|
+
return false;
|
|
9959
|
+
}
|
|
9960
|
+
const metadata = message.content.metadata;
|
|
9961
|
+
if (metadata?.precedesMessageId === targetMessageId) {
|
|
9962
|
+
return true;
|
|
9963
|
+
}
|
|
9964
|
+
return metadata?.systemReminder?.type === TEMPORAL_GAP_REMINDER_TYPE && metadata.systemReminder.precedesMessageId === targetMessageId;
|
|
9965
|
+
}
|
|
9966
|
+
function createTemporalGapMarker(message, gapText, gapMs, timestamp) {
|
|
9967
|
+
const metadata = getTemporalGapReminderMetadata(message, gapText, gapMs, timestamp);
|
|
9968
|
+
return {
|
|
9969
|
+
id: `__temporal_gap_${crypto.randomUUID()}`,
|
|
9970
|
+
role: "user",
|
|
9971
|
+
createdAt: new Date(timestamp - 1),
|
|
9972
|
+
threadId: message.threadId,
|
|
9973
|
+
resourceId: message.resourceId,
|
|
9974
|
+
content: {
|
|
9975
|
+
format: 2,
|
|
9976
|
+
parts: [
|
|
9977
|
+
{
|
|
9978
|
+
type: "text",
|
|
9979
|
+
text: `<system-reminder type="${TEMPORAL_GAP_REMINDER_TYPE}" precedesMessageId="${message.id}">${getTemporalGapReminderText(gapText, timestamp)}</system-reminder>`
|
|
9980
|
+
}
|
|
9981
|
+
],
|
|
9982
|
+
metadata
|
|
9983
|
+
}
|
|
9984
|
+
};
|
|
9985
|
+
}
|
|
9986
|
+
async function insertTemporalGapMarkers({
|
|
9987
|
+
messageList,
|
|
9988
|
+
writer
|
|
9989
|
+
}) {
|
|
9990
|
+
const inputMessages = messageList.get.input.db().filter((message) => Boolean(message));
|
|
9991
|
+
const latestInputMessage = inputMessages.at(-1);
|
|
9992
|
+
if (!latestInputMessage || isTemporalGapMarker(latestInputMessage)) {
|
|
9993
|
+
return;
|
|
9994
|
+
}
|
|
9995
|
+
const allMessages = messageList.get.all.db().filter((message) => Boolean(message));
|
|
9996
|
+
const latestInputIndex = allMessages.findIndex((message) => message.id === latestInputMessage.id);
|
|
9997
|
+
if (latestInputIndex <= 0) {
|
|
9998
|
+
return;
|
|
9999
|
+
}
|
|
10000
|
+
if (allMessages.some((message) => isTemporalGapMarkerForMessage(message, latestInputMessage.id))) {
|
|
10001
|
+
return;
|
|
10002
|
+
}
|
|
10003
|
+
let previousNonMarker;
|
|
10004
|
+
for (let index = latestInputIndex - 1; index >= 0; index--) {
|
|
10005
|
+
const candidate = allMessages[index];
|
|
10006
|
+
if (candidate && !isTemporalGapMarker(candidate)) {
|
|
10007
|
+
previousNonMarker = candidate;
|
|
10008
|
+
break;
|
|
10009
|
+
}
|
|
10010
|
+
}
|
|
10011
|
+
if (!previousNonMarker) {
|
|
10012
|
+
return;
|
|
10013
|
+
}
|
|
10014
|
+
const timestamp = getMessagePartTimestamp(latestInputMessage, "first");
|
|
10015
|
+
const gapMs = timestamp - getMessagePartTimestamp(previousNonMarker, "last");
|
|
10016
|
+
const gapText = formatTemporalGap(gapMs);
|
|
10017
|
+
if (!gapText) {
|
|
10018
|
+
return;
|
|
10019
|
+
}
|
|
10020
|
+
const reminderMetadata = getTemporalGapReminderMetadata(latestInputMessage, gapText, gapMs, timestamp);
|
|
10021
|
+
await writer?.custom({
|
|
10022
|
+
type: "data-system-reminder",
|
|
10023
|
+
data: {
|
|
10024
|
+
message: getTemporalGapReminderText(gapText, timestamp),
|
|
10025
|
+
...reminderMetadata
|
|
10026
|
+
},
|
|
10027
|
+
transient: true
|
|
10028
|
+
});
|
|
10029
|
+
const marker = createTemporalGapMarker(latestInputMessage, gapText, gapMs, timestamp);
|
|
10030
|
+
messageList.add(marker, "input");
|
|
10031
|
+
}
|
|
9848
10032
|
function getOmObservabilityContext(args) {
|
|
9849
10033
|
if (!args.tracing || !args.tracingContext || !args.loggerVNext || !args.metrics) {
|
|
9850
10034
|
return void 0;
|
|
@@ -9867,11 +10051,14 @@ var ObservationalMemoryProcessor = class {
|
|
|
9867
10051
|
engine;
|
|
9868
10052
|
/** Memory instance for loading context. */
|
|
9869
10053
|
memory;
|
|
10054
|
+
/** Whether temporal-gap reminder markers should be inserted. */
|
|
10055
|
+
temporalMarkers;
|
|
9870
10056
|
/** Active turn — created on first processInputStep, ended on processOutputResult. */
|
|
9871
10057
|
turn;
|
|
9872
|
-
constructor(engine, memory) {
|
|
10058
|
+
constructor(engine, memory, options) {
|
|
9873
10059
|
this.engine = engine;
|
|
9874
10060
|
this.memory = memory;
|
|
10061
|
+
this.temporalMarkers = options?.temporalMarkers ?? false;
|
|
9875
10062
|
}
|
|
9876
10063
|
// ─── Processor lifecycle hooks ──────────────────────────────────────────
|
|
9877
10064
|
async processInputStep(args) {
|
|
@@ -9930,6 +10117,9 @@ var ObservationalMemoryProcessor = class {
|
|
|
9930
10117
|
this.turn.writer = writer;
|
|
9931
10118
|
this.turn.requestContext = requestContext;
|
|
9932
10119
|
await this.turn.start(this.memory);
|
|
10120
|
+
if (stepNumber === 0 && this.temporalMarkers) {
|
|
10121
|
+
await insertTemporalGapMarkers({ messageList, writer });
|
|
10122
|
+
}
|
|
9933
10123
|
state.__omTurn = this.turn;
|
|
9934
10124
|
}
|
|
9935
10125
|
const observabilityContext = getOmObservabilityContext(args);
|
|
@@ -10067,5 +10257,5 @@ function getObservationsAsOf(activeObservations, asOf) {
|
|
|
10067
10257
|
}
|
|
10068
10258
|
|
|
10069
10259
|
export { ModelByInputTokens, OBSERVER_SYSTEM_PROMPT, ObservationalMemory, ObservationalMemoryProcessor, TokenCounter, buildObserverPrompt, buildObserverSystemPrompt, combineObservationGroupRanges, deriveObservationGroupProvenance, e, estimateTokenCount, extractCurrentTask, formatMessagesForObserver, formatToolResultForObserver, getObservationsAsOf, hasCurrentTaskSection, injectAnchorIds, optimizeObservationsForContext, parseAnchorId, parseObservationGroups, parseObserverOutput, reconcileObservationGroupsFromReflection, renderObservationGroupsForReflection, resolveToolResultValue, stripEphemeralAnchorIds, stripObservationGroups, truncateStringByTokens, wrapInObservationGroup };
|
|
10070
|
-
//# sourceMappingURL=chunk-
|
|
10071
|
-
//# sourceMappingURL=chunk-
|
|
10260
|
+
//# sourceMappingURL=chunk-BXJTD5TI.js.map
|
|
10261
|
+
//# sourceMappingURL=chunk-BXJTD5TI.js.map
|