37 lines
998 B
TypeScript
37 lines
998 B
TypeScript
|
|
import type { ResponseItem } from "openai/resources/responses/responses.mjs";
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* Extracts the patch texts of all `apply_patch` tool calls from the given
|
|||
|
|
* message history. Returns an empty string when none are found.
|
|||
|
|
*/
|
|||
|
|
export function extractAppliedPatches(items: Array<ResponseItem>): string {
|
|||
|
|
const patches: Array<string> = [];
|
|||
|
|
|
|||
|
|
for (const item of items) {
|
|||
|
|
if (item.type !== "function_call") {
|
|||
|
|
continue;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
const { name: toolName, arguments: argsString } = item as unknown as {
|
|||
|
|
name: unknown;
|
|||
|
|
arguments: unknown;
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
if (toolName !== "apply_patch" || typeof argsString !== "string") {
|
|||
|
|
continue;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
try {
|
|||
|
|
const args = JSON.parse(argsString) as { patch?: string };
|
|||
|
|
if (typeof args.patch === "string" && args.patch.length > 0) {
|
|||
|
|
patches.push(args.patch.trim());
|
|||
|
|
}
|
|||
|
|
} catch {
|
|||
|
|
// Ignore malformed JSON – we never want to crash the overlay.
|
|||
|
|
continue;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return patches.join("\n\n");
|
|||
|
|
}
|