Skip to content

feat(memory): structured anchored summarization for context compression (#1607)#2039

Merged
bug-ops merged 3 commits intomainfrom
feat/issue-1607/structured-summarization
Mar 20, 2026
Merged

feat(memory): structured anchored summarization for context compression (#1607)#2039
bug-ops merged 3 commits intomainfrom
feat/issue-1607/structured-summarization

Conversation

@bug-ops
Copy link
Owner

@bug-ops bug-ops commented Mar 20, 2026

Summary

  • Add AnchoredSummary typed struct (5 fields: session_intent, files_modified, decisions_made, open_questions, next_steps) replacing free-form prose compaction summaries
  • Wire structured path into both compaction entry points: compact_context()summarize_messages() and compact_context_with_budget()summarize_messages_with_budget()
  • Chunked path: per-chunk summaries stay prose, only final consolidation uses structured output (IMP-01)
  • is_complete() requires only session_intent + next_steps; files_modified and decisions_made are soft expectations (IMP-03)
  • validate() enforces per-field length limits to guard against bloated LLM output
  • cap_summary() applied at all structured return sites to match prose path behavior
  • Debug dump writes {N}_anchored-summary.json with section completeness and fallback flag
  • Feature is off by default — enabled via [memory] structured_summaries = true
  • Falls back silently to prose on any LLM failure, incomplete response, or validation error

Files changed

  • crates/zeph-memory/src/anchored_summary.rs (new) — AnchoredSummary struct, is_complete(), validate(), to_markdown(), to_json(), 12 unit tests
  • crates/zeph-memory/src/lib.rs — pub re-export
  • crates/zeph-config/src/memory.rsstructured_summaries: bool field
  • crates/zeph-core/src/agent/state/mod.rsMemoryState.structured_summaries
  • crates/zeph-core/src/agent/mod.rs — initializer
  • crates/zeph-core/src/agent/builder.rswith_structured_summaries() builder method
  • crates/zeph-core/src/agent/context/summarization.rstry_summarize_structured(), structured paths in all 3 summarization methods
  • crates/zeph-core/src/debug_dump/mod.rsdump_anchored_summary()
  • src/runner.rs — wire config into agent builder

Test plan

  • cargo +nightly fmt --check passes
  • cargo clippy --workspace --features full -- -D warnings passes (0 warnings)
  • cargo nextest run --config-file .github/nextest.toml --workspace --features full --lib --bins — 5961 passed

bug-ops added 2 commits March 20, 2026 13:29
…on (#1607)

Add `AnchoredSummary` typed schema replacing free-form prose compaction
summaries when `[memory] structured_summaries = true` (off by default).

- New `AnchoredSummary` struct (5 fields: session_intent, files_modified,
  decisions_made, open_questions, next_steps) with JSON serialization,
  Markdown rendering, and per-field length validation
- `try_summarize_structured()` on `Agent` calls `chat_typed_erased` for
  structured output; falls back to prose on any failure or invalid fields
- Chunked path: per-chunk summaries stay prose, final consolidation uses
  structured output (IMP-01)
- `summarize_messages_with_budget()` also uses structured path (IMP-02)
- `is_complete()` requires only `session_intent` + `next_steps` (IMP-03)
- `validate()` enforces per-field length limits: session_intent <= 2000
  chars, Vec entries <= 500 chars, Vec length <= 50 entries
- `cap_summary()` applied to all structured return sites (matches prose path)
- Debug dump writes `{N}_anchored-summary.json` with section completeness
- `AnchoredSummary` parse attempt on summary load for legacy detection
@github-actions github-actions bot added documentation Improvements or additions to documentation memory zeph-memory crate (SQLite) rust Rust code changes core zeph-core crate enhancement New feature or request size/XL Extra large PR (500+ lines) labels Mar 20, 2026
@bug-ops bug-ops enabled auto-merge (squash) March 20, 2026 12:57
@github-actions github-actions bot added size/XS Extra small PR (1-10 lines) and removed size/XL Extra large PR (500+ lines) labels Mar 20, 2026
@bug-ops bug-ops merged commit 68643cf into main Mar 20, 2026
17 checks passed
@bug-ops bug-ops deleted the feat/issue-1607/structured-summarization branch March 20, 2026 12:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

core zeph-core crate documentation Improvements or additions to documentation enhancement New feature or request memory zeph-memory crate (SQLite) rust Rust code changes size/XS Extra small PR (1-10 lines)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant