Task 27 — Сборка и сжатие контекста
Phase: 2
Status: done
Owner: —
Slug: context-assembly
Goal
ContextBuilder выбирает релевантную память, схемы инструментов, примеры и prior task state в рамках token-бюджета; завершённые tool traces сжимаются в episodic memory.
Acceptance criteria
Sub-tasks
Context/ContextBuilderConfig.cs— config:MaxContextTokens(default 6000),MaxFactsInContext(default 20),MaxEpisodesInContext(default 5),MaxToolSchemasInContext(default 10),Enabled(default true),CompressionThreshold(default 3 tool calls)Context/Models.cs—ContextItemrecord (Type, Content, TokenEstimate, Importance, Source, Tags),ContextBudgetrecord (MaxTokens, UsedTokens, RemainingTokens),ToolTraceEntryrecord (ToolName, Input, Output, DurationMs, Timestamp),ContextAssemblyrecordContext/IContextBuilder.cs— interface:BuildContextAsync,CompressTraceAsync,EstimateTokens,GetCurrentBudgetContext/ContextBuilder.cs— реализация: использует LayeredMemoryManager + EpisodicStore;BuildContextAsyncприоритизирует high-confidence facts → medium → working memory → episodes; укладывается в token budget; фильтрует sensitive данные; возвращаетContextAssembly;CompressTraceAsyncзаписывает compressed trace в episodic storeContext/Summarizer/ITraceSummarizer.cs+TraceSummarizer.cs—Summarize(): группирует tool calls по имени, агрегирует avg duration, success/fail count; Truncate helper для output snippetsContextController.cs— WebAPI:GET /api/context/budget,GET /api/context/summary,POST /api/context/trace/compressAgentCore.cs— интеграция:BuildSystemPromptпринимаетcontextBlockпараметр;HandleAsyncCoreвызываетIContextBuilder.BuildContextAsync;_currentToolTraceзаписывает каждую tool call entry;CompressTraceAsyncвызывается после каждого запроса (fire-and-forget);LayeredMemoryManagerопционален (nullable, backward-совместим)AppConfig.cs— добавленаContextConfigвAppConfigrootLayeredMemoryManager.cs— добавленEpisodicStoreaccessor дляContextBuilderProgram.cs(CLI + WebAPI) — зарегистрированContextBuilderConfig,ITraceSummarizer,IContextBuilder;ContextControllerподключён- Unit-тесты:
ContextBuilderTests.cs— 13 тестов: disabled mode, empty memory, facts, max facts limit, token estimation, budget, trace compression threshold - Unit-тесты:
TraceSummarizerTests.cs— 6 тестов: empty trace, single call, multiple calls same tool, mixed tools, failed calls, long output truncation dotnet buildпроходит без warnings (NU1902 на OTel.Api — pre-existing)dotnet testпроходит (802 total: 794 pass, 8 pre-existing failures: OtelService × 5, BudgetGuard × 1, WasmTool × 1, AgentCoreBoundedExecution × 1 — unrelated to task_027)</parameter>
Scope / Likely files
src/agent/Context/ContextBuilder.cs, src/agent/Context/Summarizer/
Dependencies
- блокирует / опирается на: task_011 — layered-memory
- блокирует / опирается на: task_012 — budget-guardrails
Risks / Rollback
Потеря важного контекста при сжатии; importance-score.
Links
- Backlog: ../backlog.md
- Roadmap (EN): ../../ROADMAP-EN.md
- Roadmap (RU): ../../ROADMAP-RU.md