mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-09-17 04:12:17 +03:00
Task P1a of #12150 (Video Bridge transcript retention). A prior regex-based approach leaked adversary-controlled cue text at the first literal "]" (real transcripts routinely contain "[inaudible]", "[music]") and is abandoned. This does structured redaction instead: describeVideoPart() now renders the description twice from the same VideoTranscriptCue[] objects — once normally (for the model) and once with every cue.text replaced by the placeholder "[redacted-video-transcript]" (for logs), covering both the trailing-blob assembly and the fusion transcriptTimeline interleave path. Because the substitution happens on a structured field before concatenation, no cue content can bypass it. - videoBridgeHelpers.ts: adds DescribedVideo.descriptionRedacted, exports VIDEO_TRANSCRIPT_REDACTION_PLACEHOLDER, threads an optional redact flag through formatTranscriptCue. - videoBridgePipeline.ts: carries descriptionRedacted through ProcessVideoPartResult and the whole-result cache (VideoResultCacheMetadata + its validator), so a cache hit for a transcript-bearing video still surfaces the shadow instead of silently losing it. - videoBridge.ts: preCall collects a per-part redaction map and sets meta.videoBridgeObserved (true iff >=1 transcript cue was rendered) plus meta.videoBridgeLogRedaction. videoBridgeObserved is explicitly false (not omitted) for frames-only video, so ordinary video logging/Memory is unaffected. Consumer plumbing (log sink, Memory suppression) is a separate follow-up task; this is guardrail-side only. Refs #12150