Security
- HTTP ledger transport now redacts.
KorgLedgerClient.record_tool_callpreviously enqueued the event body withoutredact()— a tool call's args/result with a secret could reach the blob store + remote ledger unredacted. Centralized in a shared_build_body(); gap closed. (Local-journal + bridge already redacted.) - CodeAct python actions enforce egress redaction (was recorded but the unredacted args were dispatched).
Added
InMemoryLedgerClient— chain-faithful, file-free ledger client: record →verify_chain/verify_dagwith no I/O. Byte-identical toLocalJournalClient(conformance-tested).
Changed
- One
tool_gatepipeline. The gate sequence (workspace → guardrail → command-guard → egress → plan-mode → edit-policy → PreToolUse hook) — copy-pasted across three call sites — is now a single pipeline behind oneevaluate(call, ctx) -> GateOutcomeinterface; ~430 lines and six methods out ofagent.py. - Centralized event-body construction in
_build_body()across HTTP/local/in-memory clients.
Verifiable core proven byte-identical against the frozen korg-ledger@v1 conformance vectors.