refactor: make context engines use transcript scope

This commit is contained in:
Peter Steinberger
2026-05-09 15:42:38 +01:00
parent 23170f9f7a
commit 04e7500c54
8 changed files with 20 additions and 25 deletions

View File

@@ -47,7 +47,6 @@ export async function maybeCompactCodexAppServerSession(
sessionId: params.sessionId,
sessionKey: params.sessionKey,
transcriptScope: { agentId: params.agentId ?? "main", sessionId: params.sessionId },
transcriptLocator: params.sessionId,
tokenBudget: params.contextTokenBudget,
currentTokenCount: params.currentTokenCount,
compactionTarget: params.trigger === "manual" ? "threshold" : "budget",
@@ -73,7 +72,6 @@ export async function maybeCompactCodexAppServerSession(
sessionId: params.sessionId,
sessionKey: params.sessionKey,
transcriptScope: { agentId: params.agentId ?? "main", sessionId: params.sessionId },
transcriptLocator: params.sessionId,
reason: "compaction",
runtimeContext: params.contextEngineRuntimeContext,
config: params.config,

View File

@@ -544,7 +544,7 @@ export async function runCodexAppServerAttempt(
runId: params.runId,
},
});
const hadSessionFile = hasSqliteSessionTranscriptEvents({
const hadTranscript = hasSqliteSessionTranscriptEvents({
agentId: sessionAgentId,
sessionId: params.sessionId,
});
@@ -565,12 +565,11 @@ export async function runCodexAppServerAttempt(
};
if (activeContextEngine) {
await bootstrapHarnessContextEngine({
hadTranscriptLocator: hadSessionFile,
hadTranscript,
contextEngine: activeContextEngine,
sessionId: params.sessionId,
sessionKey: sandboxSessionKey,
transcriptScope: { agentId: sessionAgentId, sessionId: params.sessionId },
transcriptLocator: params.sessionId,
runtimeContext: buildHarnessContextEngineRuntimeContext({
attempt: runtimeParams,
workspaceDir: effectiveWorkspace,
@@ -1512,7 +1511,6 @@ export async function runCodexAppServerAttempt(
sessionIdUsed: params.sessionId,
sessionKey: sandboxSessionKey,
transcriptScope: { agentId: sessionAgentId, sessionId: params.sessionId },
transcriptLocator: params.sessionId,
messagesSnapshot: finalMessages,
prePromptMessageCount,
tokenBudget: params.contextTokenBudget,

View File

@@ -19,12 +19,12 @@ export type HarnessContextEngine = ContextEngine;
* Run optional bootstrap + bootstrap maintenance for a harness-owned context engine.
*/
export async function bootstrapHarnessContextEngine(params: {
hadTranscriptLocator: boolean;
hadTranscript: boolean;
contextEngine?: HarnessContextEngine;
sessionId: string;
sessionKey?: string;
transcriptScope?: ContextEngineTranscriptScope;
transcriptLocator: string;
transcriptLocator?: string;
sessionManager?: unknown;
runtimeContext?: ContextEngineRuntimeContext;
runMaintenance?: typeof runHarnessContextEngineMaintenance;
@@ -32,7 +32,7 @@ export async function bootstrapHarnessContextEngine(params: {
warn: (message: string) => void;
}): Promise<void> {
if (
!params.hadTranscriptLocator ||
!params.hadTranscript ||
!(params.contextEngine?.bootstrap || params.contextEngine?.maintain)
) {
return;
@@ -103,7 +103,7 @@ export async function finalizeHarnessContextEngineTurn(params: {
sessionIdUsed: string;
sessionKey?: string;
transcriptScope?: ContextEngineTranscriptScope;
transcriptLocator: string;
transcriptLocator?: string;
messagesSnapshot: AgentMessage[];
prePromptMessageCount: number;
tokenBudget?: number;
@@ -236,7 +236,7 @@ export async function runHarnessContextEngineMaintenance(params: {
sessionId: string;
sessionKey?: string;
transcriptScope?: ContextEngineTranscriptScope;
transcriptLocator: string;
transcriptLocator?: string;
reason: "bootstrap" | "compaction" | "turn";
sessionManager?: unknown;
runtimeContext?: ContextEngineRuntimeContext;

View File

@@ -49,7 +49,7 @@ type DeferredTurnMaintenanceScheduleParams = {
sessionId: string;
sessionKey: string;
transcriptScope?: ContextEngineTranscriptScope;
transcriptLocator: string;
transcriptLocator?: string;
sessionManager?: Parameters<typeof rewriteTranscriptEntriesInSessionManager>[0]["sessionManager"];
runtimeContext?: ContextEngineRuntimeContext;
agentId?: string;
@@ -281,7 +281,7 @@ export function buildContextEngineMaintenanceRuntimeContext(params: {
sessionId: string;
sessionKey?: string;
transcriptScope?: ContextEngineTranscriptScope;
transcriptLocator: string;
transcriptLocator?: string;
sessionManager?: Parameters<typeof rewriteTranscriptEntriesInSessionManager>[0]["sessionManager"];
runtimeContext?: ContextEngineRuntimeContext;
agentId?: string;
@@ -344,7 +344,7 @@ async function executeContextEngineMaintenance(params: {
sessionId: string;
sessionKey?: string;
transcriptScope?: ContextEngineTranscriptScope;
transcriptLocator: string;
transcriptLocator?: string;
reason: "bootstrap" | "compaction" | "turn";
sessionManager?: Parameters<typeof rewriteTranscriptEntriesInSessionManager>[0]["sessionManager"];
runtimeContext?: ContextEngineRuntimeContext;
@@ -392,7 +392,7 @@ async function runDeferredTurnMaintenanceWorker(params: {
sessionId: string;
sessionKey: string;
transcriptScope?: ContextEngineTranscriptScope;
transcriptLocator: string;
transcriptLocator?: string;
sessionManager?: Parameters<typeof rewriteTranscriptEntriesInSessionManager>[0]["sessionManager"];
runtimeContext?: ContextEngineRuntimeContext;
agentId?: string;
@@ -659,7 +659,7 @@ export async function runContextEngineMaintenance(params: {
sessionId: string;
sessionKey?: string;
transcriptScope?: ContextEngineTranscriptScope;
transcriptLocator: string;
transcriptLocator?: string;
reason: "bootstrap" | "compaction" | "turn";
sessionManager?: Parameters<typeof rewriteTranscriptEntriesInSessionManager>[0]["sessionManager"];
runtimeContext?: ContextEngineRuntimeContext;

View File

@@ -81,7 +81,7 @@ async function runBootstrap(
overrides: Partial<Parameters<typeof runAttemptContextEngineBootstrap>[0]> = {},
) {
await runAttemptContextEngineBootstrap({
hadTranscriptLocator: true,
hadTranscript: true,
contextEngine,
sessionId: embeddedSessionId,
sessionKey,

View File

@@ -1647,12 +1647,11 @@ export async function runEmbeddedAttempt(
}
const sessionTranscriptLocator = createSqliteSessionTranscriptLocator(sessionTranscriptScope);
await runAttemptContextEngineBootstrap({
hadTranscriptLocator: hadTranscriptEvents,
hadTranscript: hadTranscriptEvents,
contextEngine: activeContextEngine,
sessionId: params.sessionId,
sessionKey: params.sessionKey,
transcriptScope: sessionTranscriptScope,
transcriptLocator: sessionTranscriptLocator,
sessionManager,
runtimeContext: buildAfterTurnRuntimeContext({
attempt: params,

View File

@@ -56,7 +56,7 @@ export class LegacyContextEngine implements ContextEngine {
async afterTurn(_params: {
sessionId: string;
sessionKey?: string;
transcriptLocator: string;
transcriptLocator?: string;
messages: AgentMessage[];
prePromptMessageCount: number;
autoCompactionSummary?: string;
@@ -70,7 +70,7 @@ export class LegacyContextEngine implements ContextEngine {
async compact(params: {
sessionId: string;
sessionKey?: string;
transcriptLocator: string;
transcriptLocator?: string;
tokenBudget?: number;
force?: boolean;
currentTokenCount?: number;

View File

@@ -205,7 +205,7 @@ export interface ContextEngine {
sessionId: string;
sessionKey?: string;
transcriptScope?: ContextEngineTranscriptScope;
transcriptLocator: string;
transcriptLocator?: string;
}): Promise<BootstrapResult>;
/**
@@ -218,7 +218,7 @@ export interface ContextEngine {
sessionId: string;
sessionKey?: string;
transcriptScope?: ContextEngineTranscriptScope;
transcriptLocator: string;
transcriptLocator?: string;
runtimeContext?: ContextEngineRuntimeContext;
}): Promise<ContextEngineMaintenanceResult>;
@@ -253,7 +253,7 @@ export interface ContextEngine {
sessionId: string;
sessionKey?: string;
transcriptScope?: ContextEngineTranscriptScope;
transcriptLocator: string;
transcriptLocator?: string;
messages: AgentMessage[];
/** Number of messages that existed before the prompt was sent. */
prePromptMessageCount: number;
@@ -295,7 +295,7 @@ export interface ContextEngine {
sessionId: string;
sessionKey?: string;
transcriptScope?: ContextEngineTranscriptScope;
transcriptLocator: string;
transcriptLocator?: string;
tokenBudget?: number;
/** Force compaction even below the default trigger threshold. */
force?: boolean;