import type { JsonValue, SecretObfuscator } from "./obfuscator.js"; import { type RegexScanSegment, type ReplaceRegexScan, SecretValueSet } from "./placeholder.js"; export declare function transformOutsidePlaceholdersTracked(text: string, origin: string, shouldSkipPlaceholder: (placeholder: string) => boolean, transform: (chunk: string) => string, preservePlaceholder?: (placeholder: string) => string): { text: string; origin: string; }; export declare function trailingOutsidePreservedPlaceholderChunk(text: string, shouldPreservePlaceholder: (placeholder: string) => boolean): string; export declare function buildReplaceRegexScan(text: string, ranges: ReadonlyArray<{ start: number; end: number; }>, deobfuscateMap: ReadonlyMap): ReplaceRegexScan; export declare function mapReplaceRegexMatch(segments: ReadonlyArray, scanStart: number, scanEnd: number): { start: number; end: number; recursive: boolean; preserveGeneratedPlaceholders: boolean; partialPlaceholderCut: boolean; cutResumeIndex: number; firstPlaceholderScanStart: number; }; /** * Extend a scan-space resume position past a consecutive run of generated * placeholder segments starting exactly at it, with no raw gap in between. A * cut-resolution resume point that happens to land precisely on the START of * ANOTHER placeholder must not stop there and hand it to a fresh `regex.exec` * attempt — the same content, scanned as an opaque adjacent placeholder run, * must resolve identically whether the run's LEADING member is still raw text * (this call is about to placeholder it) or is ALREADY a placeholder from a * prior call or an earlier pass of this same call. Without this, a bounded * regex whose reach spans two adjacent secrets plus trailing spillover bytes * (e.g. `[A-Z]{9}` over `ABCDEFGH` + `SECRETUV` + `A`) resolves the leading * secret as its own independent redaction on the FIRST obfuscate() call (a * genuinely raw prefix gets its own match, then the discard for the rest * resumes right after it), but on a LATER call — once that prefix is itself a * placeholder — the very first match attempt starts already inside the * placeholder run, cannot be prefix-narrowed at all, and its discard resume * point lands mid-run instead of past it, exposing a shorter tail (`SECRETUV` * + `A`) to a clean, un-cut match the first call never attempted. Chaining the * resume point through every immediately-adjacent placeholder makes both * calls land on the exact same next scan position. */ export declare function extendPastAdjacentPlaceholders(segments: ReadonlyArray, index: number): number; export declare function redactWithFixedReplacementOutsidePlaceholders(text: string, origin: string, replacement: string, shouldPreservePlaceholder: (placeholder: string) => boolean): { text: string; origin: string; }; export declare function deobfuscateGeneratedPlaceholderRanges(text: string, start: number, end: number, ranges: ReadonlyArray<{ start: number; end: number; }>, deobfuscateMap: ReadonlyMap): { text: string; recursive: boolean; }; export declare function placeholderInnerText(text: string, start: number, end: number, ranges: ReadonlyArray<{ start: number; end: number; }>, deobfuscateMap: ReadonlyMap): string; export declare function textOutsidePlaceholderRanges(text: string, start: number, end: number, ranges: ReadonlyArray<{ start: number; end: number; }>): string; export declare function outsidePlaceholderRangesAnyIndependentlyMatch(text: string, scanText: string, segments: ReadonlyArray, start: number, end: number, ranges: ReadonlyArray<{ start: number; end: number; }>, regex: RegExp): boolean; export declare function firstOutsidePlaceholderRange(start: number, end: number, ranges: ReadonlyArray<{ start: number; end: number; }>): { start: number; end: number; } | undefined; export declare function countOutsidePlaceholderRanges(start: number, end: number, ranges: ReadonlyArray<{ start: number; end: number; }>): number; export declare function replaceRange(text: string, start: number, end: number, replacement: string): string; /** Deep-walk an object, transforming all string values. */ export declare function deepWalkStrings(obj: T, transform: (s: string) => string): T; export declare function collectJsonRegexSecretValues(obfuscator: SecretObfuscator, value: JsonValue): SecretValueSet; /** * Map string values in schema-designated JSON data: tool arguments, discovery * annotations, and schema examples. Keys remain identifiers. Protocol * objects and JSON Schema structure require their own typed traversal. */ export declare function mapJsonStrings(value: JsonValue, fn: (s: string) => string): JsonValue;