/** * thinkingRedaction — content scrubbing for ThinkingBlock[] before * persistence + audit-log adapters fire. * * Pattern: Pure function. Same shape as the v2.4 RedactionPolicy.scope- * patterns / emit-patterns helpers — regex match + replace. * * Mental model — TWO-LAYER persistence: * - LLMMessage.thinkingBlocks IS persisted to scope.history (required * for Anthropic signature round-trip). * - Audit-log adapters (CloudWatch, Datadog OTel, etc.) read from * scope.history. Sensitive reasoning (PII in chain-of-thought, * internal IDs the model worked through) lands there too. * - This helper scrubs content patterns BEFORE the assistant message * pushes to scope.history, so the audit-log surface only sees * redacted content while the LLM still sees the unredacted reasoning * for round-trip integrity. * * The signature field is NEVER touched by redaction — Anthropic's * server-side signature is bound to the original content; modifying * content here would invalidate the signature. Resolution: signature * survives byte-exact, content gets scrubbed. This means the Anthropic * API will reject the next turn IF the consumer wired thinkingPatterns * AND uses Anthropic with extended-thinking-plus-tools. Document. * * Recommended use: * - DON'T wire thinkingPatterns when using Anthropic extended thinking * + tool calls (signature breaks). * - DO wire thinkingPatterns when using OpenAI o1/o3 (no signature, * no round-trip requirement) or for offline log scrubbing. * - For Anthropic + sensitive reasoning, prefer audit-log-side * redaction (filter in your CloudWatch / Datadog adapter rather * than the framework's persistence point). */ import type { ThinkingBlock } from '../thinking/types.js'; /** Sentinel string used in place of redacted content. */ export declare const REDACTED_PLACEHOLDER = "[REDACTED]"; /** * Return a copy of `blocks` with each block's `content` field scrubbed * by every pattern in `patterns`. Returns the input array unchanged * when `patterns` is undefined, empty, or no block content matches. * * Signature + summary + providerMeta fields are preserved BYTE-EXACT * — only `content` is touched. * * Anthropic signature warning: scrubbing content invalidates the * Anthropic server-side signature. Round-trip will fail with HTTP 400 * on the next turn. Document this in the consumer recipe. */ export declare function redactThinkingBlocks(blocks: readonly ThinkingBlock[], patterns: readonly RegExp[] | undefined): readonly ThinkingBlock[]; //# sourceMappingURL=thinkingRedaction.d.ts.map