Class RedactingAgentEventPublisher
- All Implemented Interfaces:
com.tnsai.observability.events.AgentEventPublisher
AgentEventPublisher decorator that scrubs PII / secrets out of
every event before delegating (issue #80, sink integration #2 of 6).
Why a decorator: keeps the AgentEventPublisher SPI
in tnsai-core unchanged. Redaction is opt-in by wrapping:
AgentEventPublisher slf4j = new Slf4jAgentEventPublisher();
AgentEventPublisher redacted = new RedactingAgentEventPublisher(
slf4j, PatternRedactor.withDefaults());
What gets scrubbed: every event variant carries at least
one field that can leak user input — the decorator rebuilds each
record with redacted values. Map / List / arbitrary-Object fields
route through Redactor.scrubValue(java.lang.Object, com.tnsai.quality.redaction.RedactionContext) which walks recursively.
Pure-metadata events (event-id, timestamps, run-ids, agent-names)
pass straight through.
Per-variant rebuild is verbose but mechanical, and Java 21's
exhaustive pattern switch keeps it future-proof: a new variant
added to the TnsAIEvent sealed hierarchy fails to compile
here until handled, so we can't accidentally leak through a forgotten
branch.
Thread-safety: delegates to the underlying publisher; the
decorator itself is stateless beyond holding the immutable
delegate + redactor + context supplier.
- Since:
- 0.9.0 (issue #80, sink integration #2 of 6)
-
Constructor Summary
ConstructorsConstructorDescriptionRedactingAgentEventPublisher(com.tnsai.observability.events.AgentEventPublisher delegate, Redactor redactor) Wrapdelegatewith redaction usingredactor, passingEventContext.empty()on every scrub call.RedactingAgentEventPublisher(com.tnsai.observability.events.AgentEventPublisher delegate, Redactor redactor, Supplier<com.tnsai.observability.events.EventContext> contextSupplier) Wrapdelegatewith redaction usingredactorand acontextSupplierthat returns theEventContextto attach to each scrub call. -
Method Summary
Modifier and TypeMethodDescriptionbooleanisEnabled(com.tnsai.observability.events.EventLevel level) voidpublish(com.tnsai.events.TnsAIEvent event) voidpublish(com.tnsai.events.TnsAIEvent event, com.tnsai.observability.events.EventLevel level, com.tnsai.observability.events.EventContext context)
-
Constructor Details
-
RedactingAgentEventPublisher
public RedactingAgentEventPublisher(com.tnsai.observability.events.AgentEventPublisher delegate, Redactor redactor) Wrapdelegatewith redaction usingredactor, passingEventContext.empty()on every scrub call. -
RedactingAgentEventPublisher
public RedactingAgentEventPublisher(com.tnsai.observability.events.AgentEventPublisher delegate, Redactor redactor, Supplier<com.tnsai.observability.events.EventContext> contextSupplier) Wrapdelegatewith redaction usingredactorand acontextSupplierthat returns theEventContextto attach to each scrub call.- Throws:
NullPointerException- if any arg isnull
-
-
Method Details
-
publish
public void publish(com.tnsai.events.TnsAIEvent event) - Specified by:
publishin interfacecom.tnsai.observability.events.AgentEventPublisher
-
publish
public void publish(com.tnsai.events.TnsAIEvent event, com.tnsai.observability.events.EventLevel level, com.tnsai.observability.events.EventContext context) - Specified by:
publishin interfacecom.tnsai.observability.events.AgentEventPublisher
-
isEnabled
public boolean isEnabled(com.tnsai.observability.events.EventLevel level) - Specified by:
isEnabledin interfacecom.tnsai.observability.events.AgentEventPublisher
-