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 dpup@thegp.com)
- a7d0991: fix(gateway): break SSE read loop on message_stop event (Dan Pupius dpup@thegp.com)
- 4c45ba3: fix(gateway): remove unnecessary blank identifiers in stream tests (Dan Pupius dpup@thegp.com)
- 4b6394b: fix(relay): address P1 and P2 review findings (Dan Pupius dpup@thegp.com)
- e4dc549: fix(relay): handle async notifications and subprocess startup in MCP stdio client (Dan Pupius dpup@thegp.com)
- 3be1f07: fix: address correctness and quality review findings (Dan Pupius dpup@thegp.com)
- f235443: fix: address security review findings (Dan Pupius dpup@thegp.com)
- b8dc5ee: fix: correctness bugs in gateway, relay, rate limiter, and SSE reader (Dan Pupius dpup@thegp.com)
Refactoring
- 2d349e8: refactor(cel): remove containsPII and containsPHI functions (Dan Pupius dpup@thegp.com)
- ba857ee: refactor(cel): replace temporal rewriting with explicit now variable (Dan Pupius dpup@thegp.com)
- f5b7ec3: refactor(config): address P3 review findings (Dan Pupius dpup@thegp.com)
- 6269a88: refactor(demo): extract configs to files, remove mock upstream (Dan Pupius dpup@thegp.com)
- 54ddb0b: refactor(demo): simplify demo to use claude -p for real API calls (Dan Pupius dpup@thegp.com)
- 240146f: refactor(demo): single claude -p call for streaming + redaction (Dan Pupius dpup@thegp.com)
- edc72e4: refactor(engine): address P3 review findings (Dan Pupius dpup@thegp.com)
- 815cf80: refactor(gateway): address P3 review findings (Dan Pupius dpup@thegp.com)
- 7f95ff5: refactor(relay): address P3 review findings (Dan Pupius dpup@thegp.com)
- ab90591: refactor(relay): extract ToolCaller interface, support stdio upstreams in config (Dan Pupius dpup@thegp.com)
- 4cd32e8: refactor(sse): address code review findings (Dan Pupius dpup@thegp.com)
Others
- 74f5306: chore(build): remove nonexistent e2e test target (Dan Pupius dpup@thegp.com)
- d049732: docs(demo): update demo for streaming support (Dan Pupius dpup@thegp.com)
- 82b9efe: docs(lang-spec): document defs, secrets, on_error, and missing features (Dan Pupius dpup@thegp.com)
- fac4c75: fix(engine,redact): prevent secret leakage through public API (Dan Pupius dpup@thegp.com)
- 8285a59: init: project scaffolding and design docs (Dan Pupius dpup@thegp.com)
- 7e5ea5b: test(cli): add binary-level integration tests (Dan Pupius dpup@thegp.com)
- 131103d: test(engine): add MCP tool call policy tests (Dan Pupius dpup@thegp.com)
- 1006151: test(engine): add engine-level policy tests for LLM and MCP scenarios (Dan Pupius dpup@thegp.com)
- cc71e48: test(gateway): add end-to-end integration test (Dan Pupius dpup@thegp.com)
- cefdf6d: test(relay): add config validation tests for command routes (Dan Pupius dpup@thegp.com)
- 9d0dbee: test(relay): add end-to-end integration test (Dan Pupius dpup@thegp.com)
- 81f23a8: test(sse): add round-trip test with Anthropic-shaped events (Dan Pupius dpup@thegp.com)
Full Changelog: ...v0.1.0