Files
my-pi/pi-rtk-optimizer/src/tool-execution-sanitizer.ts
T

47 lines
1.3 KiB
TypeScript

import { mapTextContentBlocks, toRecord } from "./record-utils.js";
import { stripAnsiFast } from "./techniques/ansi.js";
export interface StreamingBashExecutionSanitizationResult {
changed: boolean;
result: unknown;
}
function sanitizeStreamingBashText(text: string, _command: string | undefined | null): string {
return stripAnsiFast(text);
}
/**
* Returns a sanitized shallow copy of streamed bash result blocks before the
* TUI renders them so RTK self-diagnostics never flash in partial or final
* tool output. The input object is not mutated.
*/
export function sanitizeStreamingBashExecutionResult(
result: unknown,
command: string | undefined | null,
): StreamingBashExecutionSanitizationResult {
const resultRecord = toRecord(result);
const sourceContent = Array.isArray(resultRecord.content)
? (resultRecord.content as unknown[])
: null;
if (!sourceContent || sourceContent.length === 0) {
return { changed: false, result };
}
const { changed, mapped: nextContent } = mapTextContentBlocks(sourceContent, (block) => {
const sanitizedText = sanitizeStreamingBashText(block.text, command);
return sanitizedText !== block.text ? sanitizedText : null;
});
if (!changed) {
return { changed: false, result };
}
return {
changed: true,
result: {
...resultRecord,
content: nextContent,
},
};
}