Releases: majorcontext/keep
Releases · majorcontext/keep
v0.4.0
Changelog
Features
- 3b1c02d: feat(cli): add judge verdict support to test fixtures (@dpup)
- 49c0cbd: feat(cli): add keep eval command for judge quality measurement (@dpup)
- af42ca9: feat(config): add judge action type and validation (@dpup)
- 5212568: feat(engine): add context.Context to Evaluate and judge action dispatch (@dpup)
- e2c75ac: feat(examples): add judge demo rule file and gateway config (@dpup)
- 15e0f41: feat(examples): add vibe-check judge demo script (@dpup)
- 9bf9443: feat(judge): add Anthropic provider with model shortcuts (@dpup)
- bab2ea0: feat(judge): add Cached field to JudgeAudit and populate from JudgeResult (@dpup)
- b899b52: feat(judge): add Cached field to Verdict type (@dpup)
- 02aa002: feat(judge): add OpenAI provider with model shortcuts (@dpup)
- 90bbcb6: feat(judge): add provider interface and types (@dpup)
- 4bf7b67: feat(judge): implement verdict cache with oldest-first eviction (@dpup)
- f3a7062: feat(judge): propagate Cached field through JudgeResult and adapter (@dpup)
- 51052eb: feat(judge): wire verdict cache in gateway, relay, and demo (@dpup)
Bug Fixes
- fcda727: fix(examples): increase judge timeout to 15s for large context blocks (@dpup)
- 78deb34: fix(examples): use max-turns 3 in judge demo to match gateway demo (@dpup)
- d915853: fix(examples): use self-contained prompt for allowed scenario (@dpup)
- ec42641: fix(judge): bound response body reads and reject unknown decisions (@dpup)
- f7043f6: fix(judge): harden cache and provider implementations (@dpup)
- c5f8f88: fix(judge): use structured outputs instead of free-text JSON parsing (@dpup)
Others
- e66c7a5: docs(examples): add vibe-check judge demo plan (@dpup)
- 5f25f87: docs(judge): add LLM-as-judge implementation plan (@dpup)
- bc36f08: docs(judge): add verdict cache design spec (@dpup)
- 5e0108b: docs(judge): add verdict cache implementation plan (@dpup)
- 9d3d8a7: docs(judge): address plan review findings (@dpup)
- e08aa95: docs(plans): add LLM-as-judge design spec (@dpup)
- 10cb99a: docs(plans): address spec review feedback for LLM-as-judge (@dpup)
- 775e76d: feat(gateway,relay): add judge provider config (@dpup)
- 3757577: test(engine): add comprehensive judge action tests (@dpup)
Full Changelog: v0.3.0...v0.4.0
v0.3.0
Changelog
Features
- 66b0e25: feat(config): add version field to rule file schema (@dpup)
- 521e75c: feat: add SafeEvaluate, NewHTTPCall, NewMCPCall helpers (@dpup)
Bug Fixes
Others
- 867b2dd: docs(llm): add LLM evaluation library guide (@dpup)
- c59af5b: docs(plans): add v1.0.0 design spec (@dpup)
- 8d32239: docs(plans): address spec review feedback (@dpup)
- 664e465: test(engine): add benchmark suite for evaluation (@dpup)
Full Changelog: v0.2.3...v0.3.0
v0.2.3
Changelog
Features
- 4b9a2a7: feat(llm): add Codec interface and pipeline types (@dpup)
- 432c889: feat(llm): implement Anthropic codec for llm.Codec interface (@dpup)
- aa1c872: feat(llm): implement provider-agnostic evaluation pipeline (@dpup)
Refactoring
- 3569261: refactor(gateway): use llm pipeline for policy evaluation (@dpup)
- fd4ef3c: refactor(llm): move Anthropic types to public llm/anthropic package (@dpup)
- 2d424d5: refactor(llm): polish library API surface (@dpup)
- affd9a7: refactor(sse): promote internal/sse to public sse/ package (@dpup)
Others
Full Changelog: v0.2.2...v0.2.3
v0.2.2
v0.2.1
v0.2.0
Changelog
Features
- 55244da: feat(cel): thread originalParams to hasSecrets for case-sensitive secret detection (@dpup)
- b19c46e: feat(config): add uppercase literal linter for case-insensitive mode (@dpup)
- dd448a0: feat(engine): add case normalization helpers, config field, and wiring (@dpup)
- cf4f311: feat(engine): normalize inputs for case-insensitive matching (@dpup)
Bug Fixes
- c62e2da: fix(cel): scope hasSecrets detection to the named field, not all params (@dpup)
- 92336ec: fix(engine): use original-case params in audit ParamsSummary for deny paths (@dpup)
- e320947: fix(gateway): add bounds check for response block map access (@dpup)
- d4ef943: fix(gateway): use consistent read-then-unmarshal pattern in connection-refused test (@dpup)
- 4630ffa: fix(rate): capture clock.Now() before acquiring lock in Increment (@dpup)
- e03750f: fix(rate): protect stopCh with mutex in StartGC/StopGC (@dpup)
- e426556: fix(relay): use atomic.Bool for mcp server initialized flag (@dpup)
- c0cc073: fix: add actionable context to audit logger and pack resolver errors (@dpup)
- dde88bb: fix: address review findings from round 1 (@dpup)
- 778a219: fix: harden engine, relay, gateway, and test infrastructure (@dpup)
Refactoring
Others
- ed91ec3: docs(concepts): add limitations page (@dpup)
- 8c44610: docs(engine): add case-insensitive matching design spec (@dpup)
- d4455ba: docs(engine): add case-insensitive matching implementation plan (@dpup)
Full Changelog: v0.1.0...v0.2.0
v0.1.0
Changelog
Features
- 9115ab4: feat(audit): add JSON Lines audit logger (Dan Pupius dpup@thegp.com)
- 369938e: feat(cel): add CEL environment with standard functions (Dan Pupius dpup@thegp.com)
- b0b1f3f: feat(cel): add containsAny, containsPII, containsPHI, estimateTokens (Dan Pupius dpup@thegp.com)
- be7cb38: feat(cel): add hasSecrets() function powered by gitleaks (Dan Pupius dpup@thegp.com)
- 6d72f29: feat(cel): add inTimeWindow and dayOfWeek functions (Dan Pupius dpup@thegp.com)
- b187885: feat(cel): add lower() and upper() string functions (Dan Pupius dpup@thegp.com)
- 3884336: feat(cel): add matchesDomain() for email domain matching (Dan Pupius dpup@thegp.com)
- 264b2da: feat(cel): add profile alias resolution for CEL expressions (Dan Pupius dpup@thegp.com)
- 742313b: feat(cel): add rateCount function wired to counter store (Dan Pupius dpup@thegp.com)
- 2ba7c66: feat(cli): add fixture file parsing for keep test (Dan Pupius dpup@thegp.com)
- 5486c8a: feat(cli): add keep CLI skeleton with version command (Dan Pupius dpup@thegp.com)
- 4ad72b6: feat(cli): add keep test command with fixture evaluation (Dan Pupius dpup@thegp.com)
- 54e46ed: feat(cli): add keep validate command (Dan Pupius dpup@thegp.com)
- eac0bb7: feat(config): add LoadAll for complete config resolution (Dan Pupius dpup@thegp.com)
- 9eddfe7: feat(config): add core types and YAML unmarshaling (Dan Pupius dpup@thegp.com)
- 2e28fea: feat(config): add defs section to rule files (Dan Pupius dpup@thegp.com)
- 6c077c3: feat(config): add directory-based rule file loading (Dan Pupius dpup@thegp.com)
- d8aa62c: feat(config): add field path validation (Dan Pupius dpup@thegp.com)
- 8e6bd5d: feat(config): add profile loading and validation (Dan Pupius dpup@thegp.com)
- f2670d0: feat(config): add rule file validation (Dan Pupius dpup@thegp.com)
- dc301a6: feat(config): add secrets field to RedactSpec, update validation (Dan Pupius dpup@thegp.com)
- 8df5ccc: feat(config): add starter pack loading and override merging (Dan Pupius dpup@thegp.com)
- 7312d97: feat(config): validate redact patterns and field paths (Dan Pupius dpup@thegp.com)
- c6abb86: feat(demo): add MCP relay demo with sqlite backend (Dan Pupius dpup@thegp.com)
- 3751387: feat(demo): improve demo output and enable text decomposition (Dan Pupius dpup@thegp.com)
- 377362b: feat(demo): three-scenario demo with verbose packet inspection (Dan Pupius dpup@thegp.com)
- 2d73c39: feat(demo): use gitleaks secret detection instead of hand-rolled regex (Dan Pupius dpup@thegp.com)
- 9378991: feat(engine): add error handling with fail-open/closed and audit_only (Dan Pupius dpup@thegp.com)
- 27ef218: feat(engine): add glob matching for operation names (Dan Pupius dpup@thegp.com)
- 4079508: feat(engine): evaluate rules in specificity order (most-specific first) (Dan Pupius dpup@thegp.com)
- 8151640: feat(engine): implement core evaluation loop (Dan Pupius dpup@thegp.com)
- 0cb44be: feat(engine): resolve defs in CEL expressions (Dan Pupius dpup@thegp.com)
- f4797e4: feat(engine): wire secret detector into evaluator for redact rules (Dan Pupius dpup@thegp.com)
- acb4279: feat(gateway): add Anthropic Messages API types (Dan Pupius dpup@thegp.com)
- 3a74296: feat(gateway): add Anthropic request decomposition (Dan Pupius dpup@thegp.com)
- 86c0f75: feat(gateway): add Anthropic response decomposition (Dan Pupius dpup@thegp.com)
- e20788b: feat(gateway): add HTTP proxy with bidirectional policy evaluation (Dan Pupius dpup@thegp.com)
- 9619995: feat(gateway): add ReassembleFromEvents for SSE stream reassembly (Dan Pupius dpup@thegp.com)
- e1581bc: feat(gateway): add SynthesizeEvents for SSE event generation (Dan Pupius dpup@thegp.com)
- 76b8c4b: feat(gateway): add debug logging, forward all headers, fix gzip SSE (Dan Pupius dpup@thegp.com)
- 384bf80: feat(gateway): add gateway config parsing (Dan Pupius dpup@thegp.com)
- d462d41: feat(gateway): add keep-llm-gateway binary entry point (Dan Pupius dpup@thegp.com)
- 57a2130: feat(gateway): add payload reassembly after redaction (Dan Pupius dpup@thegp.com)
- a55a102: feat(gateway): add streaming support with buffer-then-replay (Dan Pupius dpup@thegp.com)
- f154f8b: feat(rate): add in-memory sliding window counter store (Dan Pupius dpup@thegp.com)
- b1c46df: feat(rate): add periodic GC for expired counter entries (Dan Pupius dpup@thegp.com)
- e0c6760: feat(redact): add regex-based field redaction and mutation application (Dan Pupius dpup@thegp.com)
- f3f5dcc: feat(relay): add MCP Streamable HTTP client and types (Dan Pupius dpup@thegp.com)
- 7ec17a5: feat(relay): add MCP Streamable HTTP server (Dan Pupius dpup@thegp.com)
- 826360b: feat(relay): add keep-mcp-relay binary entry point (Dan Pupius dpup@thegp.com)
- dbcc765: feat(relay): add policy evaluation handler for tool calls (Dan Pupius dpup@thegp.com)
- 36ff0d6: feat(relay): add relay config parsing (Dan Pupius dpup@thegp.com)
- c9d6faa: feat(relay): add response-side policy evaluation (Dan Pupius dpup@thegp.com)
- a8898fd: feat(relay): add stdio MCP client for subprocess upstreams (Dan Pupius dpup@thegp.com)
- 0ee3d3c: feat(relay): add tool discovery and routing table (Dan Pupius dpup@thegp.com)
- 914d6bb: feat(secrets): add gitleaks-powered secret detection package (Dan Pupius dpup@thegp.com)
- eddb4b2: feat(sse): add Event type (Dan Pupius dpup@thegp.com)
- 8190dbf: feat(sse): add Reader with SSE wire format parser (Dan Pupius dpup@thegp.com)
- 56132db: feat(sse): add Writer with SSE wire format output (Dan Pupius dpup@thegp.com)
- 092e5ad: feat: add LLM gateway demo with mock Anthropic upstream (Dan Pupius dpup@thegp.com)
- c37adb9: feat: add public API -- Load, Engine, Evaluate, ApplyMutations (Dan Pupius dpup@thegp.com)
- 6087b91: feat: update demo to use real Anthropic API with safe mock for destructive tests (Dan Pupius dpup@thegp.com)
- e834201: feat: wire SIGHUP hot-reload into relay and gateway binaries (Dan Pupius dpup@thegp.com)
- 6e79e15: feat: wire secret detector into engine Load and Reload (Dan Pupius dpup@thegp.com)
Bug Fixes
- 202d03b: fix(build): skip e2e target gracefully when directory is absent (Dan Pupius dpup@thegp.com)
- 783f9f5: fix(cli): support fixture-specified timestamps in keep test (Dan Pupius dpup@thegp.com)
- 0a33a86: fix(config): address P1 and P2 review findings (Dan Pupius dpup@thegp.com)
- e595311: fix(config): validate redact targets and pack override actions (Dan Pupius dpup@thegp.com)
- 00bf0b4: fix(demo): remove non-functional KEEP_DEBUG reference (Dan Pupius dpup@thegp.com)
- 92b5f0f: fix(demo): remove timeout command (unavailable on macOS) (Dan Pupius dpup@thegp.com)
- 4196bb2: fix(demo): use claude -p for auth, no env var requirement (Dan Pupius dpup@thegp.com)
- cf24125: fix(demo): use curl with ANTHROPIC_API_KEY instead of claude -p (Dan Pupius dpup@thegp.com)
- 551c0c5: fix(demo): use official mcp-server-sqlite via uvx (Dan Pupius dpup@thegp.com)
- c0b03b9: fix(engine): accumulate redact mutations across multiple rules (Dan Pupius dpup@thegp.com)
- 6eee449: fix(engine): address P1 and P2 review findings (Dan Pupius dpup@thegp.com)
- 1ba9fa2: fix(engine): populate Rule field on redact results, add CLI integration tests (Dan Pupius dpup@thegp.com)
- 9ad702e: fix(gateway): address P1 and P2 review findings (Dan Pupius <...