export interface AgentPromptEnvelope { text: string displayText?: string inspectSummary?: string inspectTrace?: string } const ENVELOPE_MARKER = 'sootsim-agent-prompt-v1' function cleanPromptText(value: string | undefined): string { return typeof value === 'string' ? value.trim() : '' } export function encodeAgentPromptEnvelope(input: AgentPromptEnvelope): string { const text = cleanPromptText(input.text) if (!text) return '' const displayText = cleanPromptText(input.displayText) const inspectSummary = cleanPromptText(input.inspectSummary) const inspectTrace = cleanPromptText(input.inspectTrace) const needsEnvelope = !!inspectSummary || !!inspectTrace || /[\r\n]/.test(text) || (!!displayText && displayText !== text) if (!needsEnvelope) return text return JSON.stringify({ __sootsimAgentPrompt: ENVELOPE_MARKER, text, displayText, inspectSummary, inspectTrace, }) } export function decodeAgentPromptEnvelope(line: string): AgentPromptEnvelope | null { const trimmed = cleanPromptText(line) if (!trimmed) return null try { const parsed = JSON.parse(trimmed) as { __sootsimAgentPrompt?: unknown text?: unknown displayText?: unknown inspectSummary?: unknown inspectTrace?: unknown } if (parsed.__sootsimAgentPrompt !== ENVELOPE_MARKER) { return { text: trimmed } } const text = cleanPromptText( typeof parsed.text === 'string' ? parsed.text : undefined, ) if (!text) return null const displayText = cleanPromptText( typeof parsed.displayText === 'string' ? parsed.displayText : undefined, ) const inspectSummary = cleanPromptText( typeof parsed.inspectSummary === 'string' ? parsed.inspectSummary : undefined, ) const inspectTrace = cleanPromptText( typeof parsed.inspectTrace === 'string' ? parsed.inspectTrace : undefined, ) return { text, ...(displayText ? { displayText } : {}), ...(inspectSummary ? { inspectSummary } : {}), ...(inspectTrace ? { inspectTrace } : {}), } } catch { return { text: trimmed } } }