Menu
popagent
publicLatest change 6edc7e928c57dab23c0973ed3f7ee70b3ebb72d5 - Initial popagent baseline by AkurAI Build
import type { ChatMessage } from "./api-types";
type TextPart = { type: "text"; text: string } & Record<string, unknown>;
function isTextPart(part: unknown): part is TextPart {
return typeof part === "object" && part !== null
&& "type" in part && "text" in part
&& part.type === "text" && typeof part.text === "string";
}
export function latestUserText(messages: ChatMessage[]): string | undefined {
for (let index = messages.length - 1; index >= 0; index--) {
const message = messages[index];
if (!message || message.role !== "user") continue;
const text = message.parts.filter(isTextPart).map((part) => part.text).join("\n").trim();
if (text) return text;
}
}
export function replaceLatestUserText(messages: ChatMessage[], replacement: string): void {
for (let index = messages.length - 1; index >= 0; index--) {
const message = messages[index];
if (!message || message.role !== "user") continue;
let replaced = false;
message.parts = message.parts.filter((part) => {
if (!isTextPart(part)) return true;
if (replaced) return false;
part.text = replacement;
replaced = true;
return true;
});
return;
}
}