import type { AgentMessage } from "@mariozechner/pi-agent-core"; import type { AssistantMessage, TextContent } from "@mariozechner/pi-ai"; export type MpcPhase = "idle" | "explore" | "dryrun" | "issues" | "backtrack" | "verified" | "execute"; export function isAssistantMessage(m: AgentMessage): m is AssistantMessage { return (m as AssistantMessage).role === "assistant" && Array.isArray((m as AssistantMessage).content); } export function getAssistantText(message: AgentMessage): string { if (!isAssistantMessage(message)) return ""; return message.content .filter((b): b is TextContent => b.type === "text") .map((b) => b.text) .join("\n"); } export function detectPhaseMarker(text: string, phase: MpcPhase): boolean { const markers: Partial> = { explore: "EXPLORATION COMPLETE", dryrun: "DRY RUN COMPLETE", issues: "NO ISSUES FOUND", backtrack: "REVISED PLAN", }; const marker = markers[phase]; return marker ? text.toUpperCase().includes(marker) : false; } export function hasIssues(text: string): boolean { return /ISSUE\s+\d+:/i.test(text); }