Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 5 additions & 8 deletions packages/core/src/backend-types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -81,16 +81,13 @@ export interface BackendSendInput {
/** Inline quoted excerpts folded into the model-facing user content. */
quotes?: QuoteRef[];
/**
* Prior conversation projected from the RuntimeEvent ledger into the
* existing StoredMessage public shape. Adapters materialize this into the
* SDK's expected conversation shape when native RuntimeEvent replay is not
* available.
* Legacy caller projection retained for source compatibility. Runtime
* backends must not use it as provider history; RuntimeEvents are the only
* model-history authority.
*/
context: StoredMessage[];
context?: StoredMessage[];
/**
* Optional prior RuntimeEvent ledger for model-history projection. Backends
* prefer this when supplied and usable; `context` is the RuntimeEvent-derived
* compatibility projection.
* Optional prior RuntimeEvent ledger for model-history projection.
*/
runtimeContext?: RuntimeEvent[];
/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,10 @@ import { type MemoryExtractionSourceSnapshot } from '@maka/runtime/memory-extrac
import { HostMemoryExtractionCoordinator } from '../server/memory-extraction-coordinator.js';
import { MemoryExtractionSessionLane } from '../server/memory-extraction-session-lane.js';

function sectionedSummary(goal: string): string {
return `## Goal\n${goal}\n\n## Progress\n- done\n\n## Next Steps\n1. continue\n\n## Critical Context\n- (none)`;
}

describe('HostMemoryExtractionCoordinator', () => {
test('extracts incidental memory through the post-terminal memory_extract path', async () => {
await withMemoryWriter(async (writer) => {
Expand Down Expand Up @@ -685,8 +689,7 @@ describe('HostMemoryExtractionCoordinator', () => {
checkpoint: buildHistoryCompactCheckpoint({
sessionId: 'session-1',
coveredRuntimeEvents: [old],
summary: 'The older context was compacted.',
summaryFormat: 'legacy_freeform',
summary: sectionedSummary('The older context was compacted.'),
now: 1_500,
}),
});
Expand Down Expand Up @@ -731,15 +734,13 @@ describe('HostMemoryExtractionCoordinator', () => {
const firstCheckpoint = buildHistoryCompactCheckpoint({
sessionId: 'session-1',
coveredRuntimeEvents: [first, firstBoundary],
summary: 'FIRST SUMMARY MUST BE REPLACED',
summaryFormat: 'legacy_freeform',
summary: sectionedSummary('FIRST SUMMARY MUST BE REPLACED'),
});
const secondCheckpoint = buildHistoryCompactCheckpoint({
sessionId: 'session-1',
coveredRuntimeEvents: [first, firstBoundary, second, secondBoundary],
previousCheckpointId: firstCheckpoint.checkpointId,
summary: 'LATEST SECOND SUMMARY',
summaryFormat: 'legacy_freeform',
summary: sectionedSummary('LATEST SECOND SUMMARY'),
});
await writer.initializeExtractionCursor('session-1', 4);
const observed: Array<{ snapshot: MemoryExtractionSourceSnapshot; prompt: string }> = [];
Expand Down Expand Up @@ -811,8 +812,7 @@ describe('HostMemoryExtractionCoordinator', () => {
checkpoint: buildHistoryCompactCheckpoint({
sessionId: 'session-1',
coveredRuntimeEvents: [old, anchor],
summary: 'The older context and current-turn prefix were compacted.',
summaryFormat: 'legacy_freeform',
summary: sectionedSummary('The older context and current-turn prefix were compacted.'),
phase: 'mid_turn',
headAnchor: { runtimeEventId: anchor.id, turnId: anchor.turnId },
now: 1_500,
Expand Down Expand Up @@ -849,8 +849,7 @@ describe('HostMemoryExtractionCoordinator', () => {
const checkpoint = buildHistoryCompactCheckpoint({
sessionId: 'session-1',
coveredRuntimeEvents: [old],
summary: 'Purported compacted context.',
summaryFormat: 'legacy_freeform',
summary: sectionedSummary('Purported compacted context.'),
now: 1_500,
});
const observed: Array<{ snapshot: MemoryExtractionSourceSnapshot; prompt: string }> = [];
Expand Down Expand Up @@ -1239,8 +1238,7 @@ describe('HostMemoryExtractionCoordinator', () => {
const checkpoint = buildHistoryCompactCheckpoint({
sessionId: 'session-1',
coveredRuntimeEvents: [firstUser, secondUser],
summary: 'The conversation contains two durable preferences.',
summaryFormat: 'legacy_freeform',
summary: sectionedSummary('The conversation contains two durable preferences.'),
memoryExtractionBoundary: {
runId: compactionBoundary.runId,
turnId: compactionBoundary.turnId,
Expand Down Expand Up @@ -1551,8 +1549,7 @@ describe('HostMemoryExtractionCoordinator', () => {
const firstCheckpoint = buildHistoryCompactCheckpoint({
sessionId: 'session-1',
coveredRuntimeEvents: [oldUser],
summary: 'Old context.',
summaryFormat: 'legacy_freeform',
summary: sectionedSummary('Old context.'),
memoryExtractionBoundary: {
runId: oldBoundary.runId,
turnId: oldBoundary.turnId,
Expand Down Expand Up @@ -1616,8 +1613,7 @@ describe('HostMemoryExtractionCoordinator', () => {
const secondCheckpoint = buildHistoryCompactCheckpoint({
sessionId: 'session-1',
coveredRuntimeEvents: [oldUser, oldBoundary, newUser],
summary: 'Old and new context.',
summaryFormat: 'legacy_freeform',
summary: sectionedSummary('Old and new context.'),
previousCheckpointId: firstCheckpoint.checkpointId,
memoryExtractionBoundary: {
runId: newBoundary.runId,
Expand Down Expand Up @@ -1671,8 +1667,7 @@ describe('HostMemoryExtractionCoordinator', () => {
const firstCheckpoint = buildHistoryCompactCheckpoint({
sessionId: 'session-1',
coveredRuntimeEvents: [oldUser],
summary: 'Old context.',
summaryFormat: 'legacy_freeform',
summary: sectionedSummary('Old context.'),
memoryExtractionBoundary: {
runId: oldBoundary.runId,
turnId: oldBoundary.turnId,
Expand All @@ -1682,8 +1677,7 @@ describe('HostMemoryExtractionCoordinator', () => {
const secondCheckpoint = buildHistoryCompactCheckpoint({
sessionId: 'session-1',
coveredRuntimeEvents: [oldUser, oldBoundary, newUser],
summary: 'Old and new context.',
summaryFormat: 'legacy_freeform',
summary: sectionedSummary('Old and new context.'),
previousCheckpointId: firstCheckpoint.checkpointId,
memoryExtractionBoundary: {
runId: newBoundary.runId,
Expand Down Expand Up @@ -1771,8 +1765,7 @@ describe('HostMemoryExtractionCoordinator', () => {
const deniedCheckpoint = buildHistoryCompactCheckpoint({
sessionId: 'session-1',
coveredRuntimeEvents: [pendingUser, pendingBoundary, deniedUser],
summary: 'Denied period.',
summaryFormat: 'legacy_freeform',
summary: sectionedSummary('Denied period.'),
memoryExtractionBoundary: {
runId: deniedBoundary.runId,
turnId: deniedBoundary.turnId,
Expand All @@ -1789,8 +1782,7 @@ describe('HostMemoryExtractionCoordinator', () => {
deniedBoundary,
eligibleUser,
],
summary: 'Eligible tail.',
summaryFormat: 'legacy_freeform',
summary: sectionedSummary('Eligible tail.'),
previousCheckpointId: deniedCheckpoint.checkpointId,
memoryExtractionBoundary: {
runId: eligibleBoundary.runId,
Expand Down Expand Up @@ -1904,8 +1896,7 @@ describe('HostMemoryExtractionCoordinator', () => {
const deniedCheckpoint = buildHistoryCompactCheckpoint({
sessionId: 'session-1',
coveredRuntimeEvents: [requestedUser, requestedCall, deniedUser],
summary: 'DENIED_SUMMARY_SECRET',
summaryFormat: 'legacy_freeform',
summary: sectionedSummary('DENIED_SUMMARY_SECRET'),
memoryExtractionBoundary: {
runId: deniedBoundary.runId,
turnId: deniedBoundary.turnId,
Expand All @@ -1916,8 +1907,7 @@ describe('HostMemoryExtractionCoordinator', () => {
const laterCheckpoint = buildHistoryCompactCheckpoint({
sessionId: 'session-1',
coveredRuntimeEvents: [requestedUser, requestedCall, deniedUser, deniedBoundary, laterUser],
summary: 'Cumulative summary after denial.',
summaryFormat: 'legacy_freeform',
summary: sectionedSummary('Cumulative summary after denial.'),
previousCheckpointId: deniedCheckpoint.checkpointId,
memoryExtractionBoundary: {
runId: laterBoundary.runId,
Expand Down Expand Up @@ -2046,8 +2036,7 @@ describe('HostMemoryExtractionCoordinator', () => {
const deniedCheckpoint = buildHistoryCompactCheckpoint({
sessionId: 'session-1',
coveredRuntimeEvents: [deniedUser],
summary: 'Denied period.',
summaryFormat: 'legacy_freeform',
summary: sectionedSummary('Denied period.'),
memoryExtractionBoundary: {
runId: deniedBoundary.runId,
turnId: deniedBoundary.turnId,
Expand All @@ -2058,8 +2047,7 @@ describe('HostMemoryExtractionCoordinator', () => {
const eligibleCheckpoint = buildHistoryCompactCheckpoint({
sessionId: 'session-1',
coveredRuntimeEvents: [deniedUser, deniedBoundary, eligibleUser],
summary: 'Eligible tail.',
summaryFormat: 'legacy_freeform',
summary: sectionedSummary('Eligible tail.'),
previousCheckpointId: deniedCheckpoint.checkpointId,
memoryExtractionBoundary: {
runId: eligibleBoundary.runId,
Expand Down Expand Up @@ -2117,8 +2105,7 @@ describe('HostMemoryExtractionCoordinator', () => {
const checkpoint = buildHistoryCompactCheckpoint({
sessionId: 'session-1',
coveredRuntimeEvents: [user],
summary: 'Context.',
summaryFormat: 'legacy_freeform',
summary: sectionedSummary('Context.'),
memoryExtractionBoundary: {
runId: 'wrong-run',
turnId: boundary.turnId,
Expand Down Expand Up @@ -2161,8 +2148,7 @@ describe('HostMemoryExtractionCoordinator', () => {
const checkpoint = buildHistoryCompactCheckpoint({
sessionId: 'session-1',
coveredRuntimeEvents: [user],
summary: 'Context.',
summaryFormat: 'legacy_freeform',
summary: sectionedSummary('Context.'),
memoryExtractionBoundary: {
runId: boundary.runId,
turnId: boundary.turnId,
Expand Down Expand Up @@ -2217,8 +2203,7 @@ describe('HostMemoryExtractionCoordinator', () => {
const checkpoint = buildHistoryCompactCheckpoint({
sessionId: 'session-1',
coveredRuntimeEvents: [user],
summary: 'Context.',
summaryFormat: 'legacy_freeform',
summary: sectionedSummary('Context.'),
memoryExtractionBoundary: {
runId: boundary.runId,
turnId: boundary.turnId,
Expand Down Expand Up @@ -2259,8 +2244,7 @@ describe('HostMemoryExtractionCoordinator', () => {
const checkpoint = buildHistoryCompactCheckpoint({
sessionId: 'session-1',
coveredRuntimeEvents: [user],
summary: 'Context.',
summaryFormat: 'legacy_freeform',
summary: sectionedSummary('Context.'),
memoryExtractionBoundary: {
runId: boundary.runId,
turnId: boundary.turnId,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,10 @@ const GRAPH_SIDE_CONVERSATION_REMOVAL_TARGET_ID = 'graph-side-conversation-remov
const ARCHIVED_SIDE_CONVERSATION_TARGET_ID = 'archived-side-conversation-target';
const ACTIVE_SOURCE_SIDE_CONVERSATION_TARGET_ID = 'active-source-side-conversation-target';

function sectionedSummary(goal: string): string {
return `## Goal\n${goal}\n\n## Progress\n- done\n\n## Next Steps\n1. continue\n\n## Critical Context\n- (none)`;
}

test('two Clients share exact retryable Session branch and revision authority', {
skip: process.platform === 'win32' ? 'Windows SQLite shutdown lifecycle' : false,
timeout: 120_000,
Expand Down Expand Up @@ -1642,8 +1646,7 @@ async function seedDurableOrderCheckpoint(
const checkpoint = buildHistoryCompactCheckpoint({
sessionId: sourceSessionId,
coveredRuntimeEvents,
summary: 'The first turn completed.',
summaryFormat: 'legacy_freeform',
summary: sectionedSummary('The first turn completed.'),
highWaterSeq: 2,
});
await execution.agentRunStore.appendEvent(sourceSessionId, 'run-turn-1', {
Expand Down
Loading