From a1f2af0e9ddd78737072aeddc0dfd48e1787d59e Mon Sep 17 00:00:00 2001 From: Your Name Date: Sun, 5 Apr 2026 21:31:43 +0000 Subject: [PATCH] chore(context): Apply cruft removal and strict hyperparameter types --- packages/cli/src/config/settingsSchema.ts | 29 +++++++++++++++++++ packages/core/src/config/config.ts | 10 ++----- .../semanticCompressionProcessor.ts | 2 +- packages/core/src/context/profiles.ts | 15 ++++------ packages/core/src/context/types.ts | 4 ++- 5 files changed, 42 insertions(+), 18 deletions(-) diff --git a/packages/cli/src/config/settingsSchema.ts b/packages/cli/src/config/settingsSchema.ts index e6055e1b0d..cfb2f0e2f1 100644 --- a/packages/cli/src/config/settingsSchema.ts +++ b/packages/cli/src/config/settingsSchema.ts @@ -2482,6 +2482,35 @@ const SETTINGS_SCHEMA = { default: {}, showInDialog: false, properties: { + maxPressureStrategy: { + type: 'string', + label: 'Max Pressure Strategy', + category: 'Context Management', + requiresRestart: true, + default: 'truncate', + description: 'Action to take when hitting the synchronous token ceiling.', + showInDialog: false, + enum: ['truncate', 'compress', 'rollingSummarizer'], + }, + gcTarget: { + type: 'string', + label: 'GC Target', + category: 'Context Management', + requiresRestart: true, + default: 'incremental', + description: 'The target floor for synchronous context shedding.', + showInDialog: false, + enum: ['incremental', 'freeNTokens', 'max'], + }, + freeTokensTarget: { + type: 'number', + label: 'Free Tokens Target', + category: 'Context Management', + requiresRestart: true, + default: undefined, + description: 'Amount of tokens to free when gcTarget is freeNTokens.', + showInDialog: false, + }, maxTokens: { type: 'number', label: 'Max Tokens', diff --git a/packages/core/src/config/config.ts b/packages/core/src/config/config.ts index 5166bed9f5..9a2eadcbab 100644 --- a/packages/core/src/config/config.ts +++ b/packages/core/src/config/config.ts @@ -1133,10 +1133,8 @@ export class Config implements McpContext, AgentLoopContext { maxTokens: params.contextManagement?.budget?.maxTokens ?? 150000, retainedTokens: params.contextManagement?.budget?.retainedTokens ?? 40000, - protectedEpisodes: - params.contextManagement?.budget?.protectedEpisodes ?? 1, - protectSystemEpisode: - params.contextManagement?.budget?.protectSystemEpisode ?? true, + gcTarget: params.contextManagement?.budget?.gcTarget ?? 'incremental', + freeTokensTarget: params.contextManagement?.budget?.freeTokensTarget ?? undefined, maxPressureStrategy: params.contextManagement?.budget?.maxPressureStrategy ?? 'truncate', }, strategies: { @@ -1154,9 +1152,7 @@ export class Config implements McpContext, AgentLoopContext { nodeThresholdTokens: params.contextManagement?.strategies?.semanticCompression ?.nodeThresholdTokens ?? 5000, - compressionModel: - params.contextManagement?.strategies?.semanticCompression - ?.compressionModel ?? 'chat-compression-2.5-flash-lite', + }, }, }; diff --git a/packages/core/src/context/processors/semanticCompressionProcessor.ts b/packages/core/src/context/processors/semanticCompressionProcessor.ts index a71f5386e9..5762227c31 100644 --- a/packages/core/src/context/processors/semanticCompressionProcessor.ts +++ b/packages/core/src/context/processors/semanticCompressionProcessor.ts @@ -34,7 +34,7 @@ export class SemanticCompressionProcessor implements ContextProcessor { this.config.getContextManagementConfig().strategies.semanticCompression; // We estimate 4 chars per token for truncation logic const thresholdChars = semanticConfig.nodeThresholdTokens * 4; - this.modelToUse = semanticConfig.compressionModel; + this.modelToUse = 'gemini-2.5-flash'; let currentDeficit = state.deficitTokens; const newEpisodes = [...episodes]; diff --git a/packages/core/src/context/profiles.ts b/packages/core/src/context/profiles.ts index 340cc168ac..33a158709f 100644 --- a/packages/core/src/context/profiles.ts +++ b/packages/core/src/context/profiles.ts @@ -11,8 +11,7 @@ export const GENERALIST_PROFILE: ContextManagementConfig = { maxPressureStrategy: 'truncate', maxTokens: 150_000, retainedTokens: 65_000, - protectedEpisodes: 1, - protectSystemEpisode: true, + gcTarget: 'incremental', }, strategies: { // Brutal fallback truncation threshold @@ -22,7 +21,7 @@ export const GENERALIST_PROFILE: ContextManagementConfig = { // Intelligently summarize large text blocks before they hit the truncation guillotine semanticCompression: { nodeThresholdTokens: 3000, - compressionModel: 'chat-compression-2.5-flash-lite', + }, }, }; @@ -33,15 +32,14 @@ export const POWER_USER_PROFILE: ContextManagementConfig = { maxPressureStrategy: 'truncate', maxTokens: 150_000, // The absolute ceiling retainedTokens: 65_000, // The "bloom filter" backbuffer floor - protectedEpisodes: 1, - protectSystemEpisode: true, + gcTarget: 'incremental', }, strategies: { historySquashing: { maxTokensPerNode: 4000 }, toolMasking: { stringLengthThresholdTokens: 8000 }, semanticCompression: { nodeThresholdTokens: 3000, - compressionModel: 'chat-compression-2.5-flash-lite', + }, }, }; @@ -53,15 +51,14 @@ export const STRESS_TEST_PROFILE: ContextManagementConfig = { maxPressureStrategy: 'truncate', maxTokens: 12_000, retainedTokens: 6_000, - protectedEpisodes: 1, - protectSystemEpisode: true, + gcTarget: 'incremental', }, strategies: { historySquashing: { maxTokensPerNode: 2000 }, toolMasking: { stringLengthThresholdTokens: 2000 }, semanticCompression: { nodeThresholdTokens: 1000, - compressionModel: 'gemini-2.5-flash', + }, }, }; diff --git a/packages/core/src/context/types.ts b/packages/core/src/context/types.ts index 3f37969d7f..33206cff12 100644 --- a/packages/core/src/context/types.ts +++ b/packages/core/src/context/types.ts @@ -23,7 +23,9 @@ export interface ContextManagementConfig { * - 'truncate': Drop oldest episodes until under limit (Instant, data loss) * - 'compress': Block request, perform N-to-1 Snapshot generation, then proceed (Slow, no data loss) */ - maxPressureStrategy: 'truncate' | 'compress'; + maxPressureStrategy: 'truncate' | 'compress' | 'rollingSummarizer'; + gcTarget: 'incremental' | 'freeNTokens' | 'max'; + freeTokensTarget?: number; }; /** Specific hyperparameters for degrading the context when over budget */