import { subagentMarkerPrefix, type SubagentMarker } from "~/lib/subagent" import type { AnthropicMessagesPayload } from "./anthropic-types" export const parseSubagentMarkerFromFirstUser = ( payload: AnthropicMessagesPayload, ): SubagentMarker | null => { const firstUserMessage = payload.messages.find( (msg) => msg.role === "user" && Array.isArray(msg.content), ) if (!firstUserMessage || !Array.isArray(firstUserMessage.content)) { return null } for (const block of firstUserMessage.content) { if (block.type !== "text") { continue } const marker = parseSubagentMarkerFromSystemReminder(block.text) if (marker) { return marker } } return null } const parseSubagentMarkerFromSystemReminder = ( text: string, ): SubagentMarker | null => { const startTag = "" const endTag = "" let searchFrom = 0 while (true) { const reminderStart = text.indexOf(startTag, searchFrom) if (reminderStart === -1) { break } const contentStart = reminderStart + startTag.length const reminderEnd = text.indexOf(endTag, contentStart) if (reminderEnd === -1) { break } const reminderContent = text.slice(contentStart, reminderEnd) const markerIndex = reminderContent.indexOf(subagentMarkerPrefix) if (markerIndex === -1) { searchFrom = reminderEnd + endTag.length continue } const markerJson = reminderContent .slice(markerIndex + subagentMarkerPrefix.length) .trim() try { const parsed = JSON.parse(markerJson) as SubagentMarker if (!parsed.session_id || !parsed.agent_id || !parsed.agent_type) { searchFrom = reminderEnd + endTag.length continue } return parsed } catch { searchFrom = reminderEnd + endTag.length continue } } return null }