@ai-sdk-tool/parser 4.0.0 → 4.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-CXWS24JX.js → chunk-76E6H46R.js} +2 -2
- package/dist/{chunk-2KK5BDZF.js → chunk-DJB4DAZO.js} +23 -6
- package/dist/chunk-DJB4DAZO.js.map +1 -0
- package/dist/{chunk-ERJKQKCR.js → chunk-DPGORNPB.js} +17 -7
- package/dist/chunk-DPGORNPB.js.map +1 -0
- package/dist/community.cjs +36 -9
- package/dist/community.cjs.map +1 -1
- package/dist/community.js +3 -3
- package/dist/index.cjs +36 -9
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +3 -3
- package/dist/rxml.cjs +22 -5
- package/dist/rxml.cjs.map +1 -1
- package/dist/rxml.js +2 -2
- package/dist/schema-coerce.cjs +22 -5
- package/dist/schema-coerce.cjs.map +1 -1
- package/dist/schema-coerce.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-2KK5BDZF.js.map +0 -1
- package/dist/chunk-ERJKQKCR.js.map +0 -1
- /package/dist/{chunk-CXWS24JX.js.map → chunk-76E6H46R.js.map} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/utils/debug.ts","../src/core/utils/get-potential-start-index.ts","../src/core/utils/id.ts","../src/core/utils/protocol-utils.ts","../src/core/protocols/json-protocol.ts","../src/core/protocols/protocol-interface.ts","../src/core/utils/regex-constants.ts","../src/core/utils/streamed-tool-input-delta.ts","../src/core/utils/xml-root-repair.ts","../src/core/protocols/xml-protocol.ts","../src/core/protocols/yaml-protocol.ts","../src/core/utils/dynamic-tool-schema.ts","../src/core/utils/on-error.ts","../src/core/utils/provider-options.ts","../src/core/utils/type-guards.ts","../src/core/utils/generated-text-json-recovery.ts","../src/core/utils/tool-call-coercion.ts","../src/core/utils/tool-choice.ts","../src/generate-handler.ts","../src/core/prompts/hermes-system-prompt.ts","../src/core/prompts/tool-response.ts","../src/core/prompts/xml-system-prompt.ts","../src/core/prompts/yaml-system-prompt.ts","../src/stream-handler.ts","../src/transform-handler.ts","../src/tool-call-middleware.ts","../src/preconfigured-middleware.ts"],"sourcesContent":["export type DebugLevel = \"off\" | \"stream\" | \"parse\";\n\nconst LINE_SPLIT_REGEX = /\\r?\\n/;\n\nfunction normalizeBooleanString(value: string): boolean | undefined {\n const normalized = value.trim().toLowerCase();\n if (normalized === \"1\" || normalized === \"true\" || normalized === \"yes\") {\n return true;\n }\n if (normalized === \"0\" || normalized === \"false\" || normalized === \"no\") {\n return false;\n }\n return;\n}\n\nexport function getDebugLevel(): DebugLevel {\n const envVal =\n (typeof process !== \"undefined\" &&\n process.env &&\n process.env.DEBUG_PARSER_MW) ||\n \"off\";\n const envLower = String(envVal).toLowerCase();\n if (envLower === \"stream\" || envLower === \"parse\" || envLower === \"off\") {\n return envLower as DebugLevel;\n }\n const boolEnv = normalizeBooleanString(envLower);\n if (boolEnv === true) {\n return \"stream\";\n }\n if (envLower === \"2\") {\n return \"parse\";\n }\n return \"off\";\n}\n\nfunction color(code: number) {\n return (text: string) => `\\u001b[${code}m${text}\\u001b[0m`;\n}\n\n// ANSI color codes\nconst ANSI_GRAY = 90;\nconst ANSI_YELLOW = 33;\nconst ANSI_CYAN = 36;\nconst ANSI_BG_BLUE = 44;\nconst ANSI_BG_GREEN = 42;\nconst ANSI_INVERSE = 7;\nconst ANSI_UNDERLINE = 4;\nconst ANSI_BOLD = 1;\n\nconst cGray = color(ANSI_GRAY);\nconst cYellow = color(ANSI_YELLOW);\nconst cCyan = color(ANSI_CYAN);\nconst cBgBlue = color(ANSI_BG_BLUE);\nconst cBgGreen = color(ANSI_BG_GREEN);\nconst cInverse = color(ANSI_INVERSE);\nconst cUnderline = color(ANSI_UNDERLINE);\nconst cBold = color(ANSI_BOLD);\n\nconst MAX_SNIPPET_LENGTH = 800;\n\nfunction safeStringify(value: unknown): string {\n try {\n return `\\n${typeof value === \"string\" ? value : JSON.stringify(value, null, 2)}`;\n } catch {\n return String(value);\n }\n}\n\nfunction formatError(error: unknown): string {\n if (error instanceof Error) {\n const stack = error.stack ? `\\n${error.stack}` : \"\";\n return `\\n${error.name}: ${error.message}${stack}`;\n }\n return safeStringify(error);\n}\n\nfunction truncateSnippet(snippet: string): string {\n if (snippet.length <= MAX_SNIPPET_LENGTH) {\n return snippet;\n }\n return `${snippet.slice(0, MAX_SNIPPET_LENGTH)}\\n…[truncated ${snippet.length - MAX_SNIPPET_LENGTH} chars]`;\n}\n\nexport function logParseFailure({\n phase,\n reason,\n snippet,\n error,\n}: {\n phase: \"generated-text\" | \"stream\" | string;\n reason: string;\n snippet?: string;\n error?: unknown;\n}) {\n if (getDebugLevel() !== \"parse\") {\n return;\n }\n\n const label = cBgBlue(`[${phase}]`);\n console.log(cGray(\"[debug:mw:fail]\"), label, cYellow(reason));\n\n if (snippet) {\n const formatted = truncateSnippet(snippet);\n console.log(cGray(\"[debug:mw:fail:snippet]\"), formatted);\n }\n\n if (error) {\n console.log(cGray(\"[debug:mw:fail:error]\"), cCyan(formatError(error)));\n }\n}\n\nexport function logRawChunk(part: unknown) {\n // Raw provider stream/generate output\n console.log(cGray(\"[debug:mw:raw]\"), cYellow(safeStringify(part)));\n}\n\nexport function logParsedChunk(part: unknown) {\n // Normalized middleware output\n console.log(cGray(\"[debug:mw:out]\"), cCyan(safeStringify(part)));\n}\n\nfunction getHighlightStyle(): \"inverse\" | \"underline\" | \"bold\" | \"bg\" {\n const envVal =\n (typeof process !== \"undefined\" &&\n process.env &&\n process.env.DEBUG_PARSER_MW_STYLE) ||\n \"bg\";\n\n const normalized = String(envVal).trim().toLowerCase();\n if (normalized === \"inverse\" || normalized === \"invert\") {\n return \"inverse\" as const;\n }\n if (normalized === \"underline\" || normalized === \"ul\") {\n return \"underline\" as const;\n }\n if (normalized === \"bold\") {\n return \"bold\" as const;\n }\n if (normalized === \"bg\" || normalized === \"background\") {\n return \"bg\" as const;\n }\n const asBool = normalizeBooleanString(normalized);\n if (asBool === true) {\n return \"bg\" as const;\n }\n return \"bg\" as const; // default: background highlight\n}\n\nfunction getHighlightFunction(style: \"inverse\" | \"underline\" | \"bold\" | \"bg\") {\n if (style === \"inverse\") {\n return cInverse;\n }\n if (style === \"underline\") {\n return cUnderline;\n }\n if (style === \"bold\") {\n return cBold;\n }\n if (style === \"bg\") {\n return cBgGreen;\n }\n return cYellow;\n}\n\nfunction renderHighlightedText(\n originalText: string,\n style: \"inverse\" | \"underline\" | \"bold\" | \"bg\",\n highlight: (text: string) => string\n) {\n if (\n style === \"bg\" ||\n style === \"inverse\" ||\n style === \"underline\" ||\n style === \"bold\"\n ) {\n return originalText\n .split(LINE_SPLIT_REGEX)\n .map((line) => (line.length ? highlight(line) : line))\n .join(\"\\n\");\n }\n return highlight(originalText);\n}\n\nexport function logParsedSummary({\n toolCalls,\n originalText,\n}: {\n toolCalls: unknown[];\n originalText: string;\n}) {\n if (originalText) {\n const style = getHighlightStyle();\n const highlight = getHighlightFunction(style);\n const rendered = renderHighlightedText(originalText, style, highlight);\n\n console.log(cGray(\"[debug:mw:origin]\"), `\\n${rendered}`);\n }\n\n if (toolCalls.length > 0) {\n const styledSummary = safeStringify(toolCalls)\n .split(LINE_SPLIT_REGEX)\n .map((line) => (line.length ? cBgBlue(line) : line))\n .join(\"\\n\");\n console.log(cGray(\"[debug:mw:summary]\"), styledSummary);\n }\n}\n","/**\n * Returns the index of the start of the searchedText in the text, or null if it\n * is not found.\n * ref: https://github.com/vercel/ai/blob/452bf12f0be9cb398d4af85a006bca13c8ce36d8/packages/ai/core/util/get-potential-start-index.ts\n */\nexport function getPotentialStartIndex(\n text: string,\n searchedText: string\n): number | null {\n // Return null immediately if searchedText is empty.\n if (searchedText.length === 0) {\n return null;\n }\n\n // Check if the searchedText exists as a direct substring of text.\n const directIndex = text.indexOf(searchedText);\n if (directIndex !== -1) {\n return directIndex;\n }\n\n // Otherwise, look for the largest suffix of \"text\" that matches\n // a prefix of \"searchedText\". We go from the end of text inward.\n for (let i = text.length - 1; i >= 0; i -= 1) {\n const suffix = text.substring(i);\n if (searchedText.startsWith(suffix)) {\n return i;\n }\n }\n\n return null;\n}\n","export function generateId(): string {\n return crypto.randomUUID().replace(/-/g, \"\").slice(0, 13);\n}\n\nconst TOOL_CALL_ID_PREFIX = \"call_\";\nconst TOOL_CALL_ID_BODY_LENGTH = 24;\nconst TOOL_CALL_ID_ALPHANUM =\n \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\";\n\nfunction randomAlphaNumeric(length: number): string {\n const bytes = new Uint8Array(length);\n crypto.getRandomValues(bytes);\n let out = \"\";\n for (let i = 0; i < length; i += 1) {\n const byte = bytes[i];\n const index = (byte ?? 0) % TOOL_CALL_ID_ALPHANUM.length;\n out += TOOL_CALL_ID_ALPHANUM[index] ?? \"0\";\n }\n return out;\n}\n\nexport function generateToolCallId(): string {\n return `${TOOL_CALL_ID_PREFIX}${randomAlphaNumeric(TOOL_CALL_ID_BODY_LENGTH)}`;\n}\n","import type {\n LanguageModelV3Content,\n LanguageModelV3StreamPart,\n} from \"@ai-sdk/provider\";\nimport { generateId } from \"./id\";\n\nexport function addTextSegment(\n text: string,\n processedElements: LanguageModelV3Content[]\n): void {\n if (text.trim()) {\n processedElements.push({ type: \"text\", text });\n }\n}\n\nexport function createFlushTextHandler(\n getCurrentTextId: () => string | null,\n setCurrentTextId: (id: string | null) => void,\n getHasEmittedTextStart: () => boolean,\n setHasEmittedTextStart: (value: boolean) => void\n) {\n return (\n controller: TransformStreamDefaultController<LanguageModelV3StreamPart>,\n text?: string\n ) => {\n const content = text;\n if (content) {\n if (!getCurrentTextId()) {\n const newId = generateId();\n setCurrentTextId(newId);\n controller.enqueue({\n type: \"text-start\",\n id: newId,\n });\n setHasEmittedTextStart(true);\n }\n controller.enqueue({\n type: \"text-delta\",\n id: getCurrentTextId() as string,\n delta: content,\n });\n }\n\n const currentTextId = getCurrentTextId();\n if (currentTextId && !text) {\n if (getHasEmittedTextStart()) {\n controller.enqueue({\n type: \"text-end\",\n id: currentTextId,\n });\n setHasEmittedTextStart(false);\n }\n setCurrentTextId(null);\n }\n };\n}\n","import type {\n LanguageModelV3Content,\n LanguageModelV3FunctionTool,\n LanguageModelV3StreamPart,\n LanguageModelV3ToolCall,\n} from \"@ai-sdk/provider\";\nimport { parse as parseRJSON } from \"../../rjson\";\nimport { logParseFailure } from \"../utils/debug\";\nimport { getPotentialStartIndex } from \"../utils/get-potential-start-index\";\nimport { generateId, generateToolCallId } from \"../utils/id\";\nimport { addTextSegment } from \"../utils/protocol-utils\";\nimport { escapeRegExp } from \"../utils/regex\";\nimport type { ParserOptions, TCMProtocol } from \"./protocol-interface\";\n\ninterface JsonProtocolOptions {\n toolCallStart?: string;\n toolCallEnd?: string;\n}\n\nfunction shouldEmitRawToolCallTextOnError(options?: ParserOptions): boolean {\n return options?.emitRawToolCallTextOnError === true;\n}\n\nfunction canonicalizeToolInput(argumentsValue: unknown): string {\n return JSON.stringify(argumentsValue ?? {});\n}\n\nfunction processToolCallJson(\n toolCallJson: string,\n fullMatch: string,\n processedElements: LanguageModelV3Content[],\n options?: ParserOptions\n) {\n try {\n const parsedToolCall = parseRJSON(toolCallJson) as {\n name: string;\n arguments: unknown;\n };\n processedElements.push({\n type: \"tool-call\",\n toolCallId: generateToolCallId(),\n toolName: parsedToolCall.name,\n input: canonicalizeToolInput(parsedToolCall.arguments),\n });\n } catch (error) {\n logParseFailure({\n phase: \"generated-text\",\n reason: \"Failed to parse tool call JSON segment\",\n snippet: fullMatch,\n error,\n });\n options?.onError?.(\n \"Could not process JSON tool call, keeping original text.\",\n { toolCall: fullMatch, error }\n );\n processedElements.push({ type: \"text\", text: fullMatch });\n }\n}\n\ninterface ParseContext {\n match: RegExpExecArray;\n text: string;\n currentIndex: number;\n processedElements: LanguageModelV3Content[];\n options?: ParserOptions;\n}\n\nfunction processMatchedToolCall(context: ParseContext): number {\n const { match, text, currentIndex, processedElements, options } = context;\n const startIndex = match.index;\n const toolCallJson = match[1];\n\n if (startIndex > currentIndex) {\n const textSegment = text.substring(currentIndex, startIndex);\n addTextSegment(textSegment, processedElements);\n }\n\n if (toolCallJson) {\n processToolCallJson(toolCallJson, match[0], processedElements, options);\n }\n\n return startIndex + match[0].length;\n}\n\ninterface StreamState {\n isInsideToolCall: boolean;\n buffer: string;\n currentToolCallJson: string;\n currentTextId: string | null;\n hasEmittedTextStart: boolean;\n activeToolInput: {\n id: string;\n toolName: string;\n emittedInput: string;\n } | null;\n}\n\ntype StreamController =\n TransformStreamDefaultController<LanguageModelV3StreamPart>;\n\ninterface TagProcessingContext {\n state: StreamState;\n controller: StreamController;\n toolCallStart: string;\n toolCallEnd: string;\n options?: ParserOptions;\n}\n\nconst WHITESPACE_JSON_REGEX = /\\s/;\n\nfunction skipJsonWhitespace(text: string, fromIndex: number): number {\n let index = fromIndex;\n while (index < text.length && WHITESPACE_JSON_REGEX.test(text[index])) {\n index += 1;\n }\n return index;\n}\n\n// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: Streaming JSON key/value scanning requires explicit string-depth state tracking.\nfunction findTopLevelPropertyValueStart(\n text: string,\n property: string\n): number | null {\n const objectStart = skipJsonWhitespace(text, 0);\n if (objectStart >= text.length || text.charAt(objectStart) !== \"{\") {\n return null;\n }\n\n let depth = 0;\n let inString = false;\n let escaping = false;\n\n for (let index = objectStart; index < text.length; index += 1) {\n const char = text.charAt(index);\n\n if (inString) {\n if (escaping) {\n escaping = false;\n continue;\n }\n if (char === \"\\\\\") {\n escaping = true;\n continue;\n }\n if (char === '\"') {\n inString = false;\n }\n continue;\n }\n\n if (char === \"{\") {\n depth += 1;\n continue;\n }\n if (char === \"}\") {\n depth = Math.max(0, depth - 1);\n continue;\n }\n\n if (char !== '\"') {\n continue;\n }\n\n if (depth !== 1) {\n inString = true;\n continue;\n }\n\n const keyStart = index + 1;\n let keyEnd = keyStart;\n let keyEscaped = false;\n while (keyEnd < text.length) {\n const keyChar = text.charAt(keyEnd);\n if (keyEscaped) {\n keyEscaped = false;\n } else if (keyChar === \"\\\\\") {\n keyEscaped = true;\n } else if (keyChar === '\"') {\n break;\n }\n keyEnd += 1;\n }\n\n if (keyEnd >= text.length || text.charAt(keyEnd) !== '\"') {\n return null;\n }\n\n const key = text.slice(keyStart, keyEnd);\n let valueCursor = skipJsonWhitespace(text, keyEnd + 1);\n if (valueCursor >= text.length || text.charAt(valueCursor) !== \":\") {\n index = keyEnd;\n continue;\n }\n\n valueCursor = skipJsonWhitespace(text, valueCursor + 1);\n if (key === property) {\n return valueCursor < text.length ? valueCursor : null;\n }\n\n index = valueCursor - 1;\n }\n\n return null;\n}\n\nfunction extractTopLevelStringProperty(\n text: string,\n property: string\n): string | undefined {\n const valueStart = findTopLevelPropertyValueStart(text, property);\n if (valueStart == null || valueStart >= text.length) {\n return undefined;\n }\n if (text.charAt(valueStart) !== '\"') {\n return undefined;\n }\n\n let valueEnd = valueStart + 1;\n let escaped = false;\n while (valueEnd < text.length) {\n const char = text.charAt(valueEnd);\n if (escaped) {\n escaped = false;\n } else if (char === \"\\\\\") {\n escaped = true;\n } else if (char === '\"') {\n return text.slice(valueStart + 1, valueEnd);\n }\n valueEnd += 1;\n }\n\n return undefined;\n}\n\n// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: Streaming JSON value slicing must handle nested arrays/objects and escaped strings.\nfunction extractJsonValueSlice(\n text: string,\n valueStart: number\n): {\n text: string;\n complete: boolean;\n} | null {\n if (valueStart >= text.length) {\n return null;\n }\n\n const first = text.charAt(valueStart);\n if (first === \"{\" || first === \"[\") {\n const stack: string[] = [first];\n let inString = false;\n let escaped = false;\n\n for (let index = valueStart + 1; index < text.length; index += 1) {\n const char = text.charAt(index);\n if (inString) {\n if (escaped) {\n escaped = false;\n } else if (char === \"\\\\\") {\n escaped = true;\n } else if (char === '\"') {\n inString = false;\n }\n continue;\n }\n\n if (char === '\"') {\n inString = true;\n continue;\n }\n\n if (char === \"{\" || char === \"[\") {\n stack.push(char);\n continue;\n }\n\n if (char === \"}\" || char === \"]\") {\n const open = stack.at(-1);\n if ((open === \"{\" && char === \"}\") || (open === \"[\" && char === \"]\")) {\n stack.pop();\n if (stack.length === 0) {\n return {\n text: text.slice(valueStart, index + 1),\n complete: true,\n };\n }\n }\n }\n }\n\n return {\n text: text.slice(valueStart),\n complete: false,\n };\n }\n\n if (first === '\"') {\n let escaped = false;\n for (let index = valueStart + 1; index < text.length; index += 1) {\n const char = text.charAt(index);\n if (escaped) {\n escaped = false;\n } else if (char === \"\\\\\") {\n escaped = true;\n } else if (char === '\"') {\n return {\n text: text.slice(valueStart, index + 1),\n complete: true,\n };\n }\n }\n return {\n text: text.slice(valueStart),\n complete: false,\n };\n }\n\n let index = valueStart;\n while (index < text.length) {\n const char = text.charAt(index);\n if (char === \",\" || char === \"}\" || WHITESPACE_JSON_REGEX.test(char)) {\n break;\n }\n index += 1;\n }\n\n return {\n text: text.slice(valueStart, index),\n complete: index < text.length,\n };\n}\n\nfunction extractStreamingToolCallProgress(toolCallJson: string): {\n toolName: string | undefined;\n argumentsText: string | undefined;\n argumentsComplete: boolean;\n} {\n const toolName = extractTopLevelStringProperty(toolCallJson, \"name\");\n const argsValueStart = findTopLevelPropertyValueStart(\n toolCallJson,\n \"arguments\"\n );\n if (argsValueStart == null) {\n return {\n toolName,\n argumentsText: undefined,\n argumentsComplete: false,\n };\n }\n\n const argsSlice = extractJsonValueSlice(toolCallJson, argsValueStart);\n return {\n toolName,\n argumentsText: argsSlice?.text,\n argumentsComplete: argsSlice?.complete ?? false,\n };\n}\n\nfunction ensureToolInputStart(\n state: StreamState,\n controller: StreamController,\n toolName: string\n) {\n if (!state.activeToolInput) {\n const id = generateToolCallId();\n state.activeToolInput = {\n id,\n toolName,\n emittedInput: \"\",\n };\n controller.enqueue({\n type: \"tool-input-start\",\n id,\n toolName,\n } as LanguageModelV3StreamPart);\n }\n}\n\nfunction emitToolInputDelta(\n state: StreamState,\n controller: StreamController,\n fullInput: string\n) {\n const active = state.activeToolInput;\n if (!active) {\n return;\n }\n\n if (!fullInput.startsWith(active.emittedInput)) {\n return;\n }\n\n const delta = fullInput.slice(active.emittedInput.length);\n if (delta.length === 0) {\n return;\n }\n\n controller.enqueue({\n type: \"tool-input-delta\",\n id: active.id,\n delta,\n } as LanguageModelV3StreamPart);\n active.emittedInput = fullInput;\n}\n\nfunction closeToolInput(state: StreamState, controller: StreamController) {\n if (!state.activeToolInput) {\n return;\n }\n controller.enqueue({\n type: \"tool-input-end\",\n id: state.activeToolInput.id,\n } as LanguageModelV3StreamPart);\n state.activeToolInput = null;\n}\n\nfunction emitToolCallFromParsed(\n state: StreamState,\n controller: StreamController,\n parsedToolCall: { name: string; arguments: unknown }\n) {\n closeTextBlock(state, controller);\n const toolName =\n typeof parsedToolCall.name === \"string\"\n ? parsedToolCall.name\n : (state.activeToolInput?.toolName ?? \"unknown\");\n const input = canonicalizeToolInput(parsedToolCall.arguments);\n ensureToolInputStart(state, controller, toolName);\n emitToolInputDelta(state, controller, input);\n const toolCallId = state.activeToolInput?.id ?? generateToolCallId();\n closeToolInput(state, controller);\n controller.enqueue({\n type: \"tool-call\",\n toolCallId,\n toolName,\n input,\n } as LanguageModelV3StreamPart);\n}\n\nfunction canonicalizeArgumentsProgressInput(progress: {\n argumentsText: string | undefined;\n argumentsComplete: boolean;\n}): string | undefined {\n if (progress.argumentsText === undefined || !progress.argumentsComplete) {\n return undefined;\n }\n\n try {\n const parsedArguments = parseRJSON(progress.argumentsText);\n return canonicalizeToolInput(parsedArguments);\n } catch {\n return undefined;\n }\n}\n\nfunction emitToolInputProgress(\n state: StreamState,\n controller: StreamController\n) {\n if (!(state.isInsideToolCall && state.currentToolCallJson)) {\n return;\n }\n\n const progress = extractStreamingToolCallProgress(state.currentToolCallJson);\n if (!progress.toolName) {\n return;\n }\n\n ensureToolInputStart(state, controller, progress.toolName);\n const canonicalProgressInput = canonicalizeArgumentsProgressInput(progress);\n if (canonicalProgressInput !== undefined) {\n emitToolInputDelta(state, controller, canonicalProgressInput);\n }\n}\n\nfunction flushBuffer(\n state: StreamState,\n controller: StreamController,\n toolCallStart: string\n) {\n if (state.buffer.length === 0) {\n return;\n }\n\n if (!state.currentTextId) {\n state.currentTextId = generateId();\n controller.enqueue({\n type: \"text-start\",\n id: state.currentTextId,\n } as LanguageModelV3StreamPart);\n state.hasEmittedTextStart = true;\n }\n\n const deltaContent = state.isInsideToolCall\n ? `${toolCallStart}${state.buffer}`\n : state.buffer;\n\n controller.enqueue({\n type: \"text-delta\",\n id: state.currentTextId,\n delta: deltaContent,\n } as LanguageModelV3StreamPart);\n state.buffer = \"\";\n}\n\nfunction closeTextBlock(state: StreamState, controller: StreamController) {\n if (state.currentTextId && state.hasEmittedTextStart) {\n controller.enqueue({\n type: \"text-end\",\n id: state.currentTextId,\n } as LanguageModelV3StreamPart);\n state.currentTextId = null;\n state.hasEmittedTextStart = false;\n }\n}\n\nfunction emitIncompleteToolCall(\n state: StreamState,\n controller: StreamController,\n toolCallStart: string,\n trailingBuffer: string,\n options?: ParserOptions\n) {\n if (!state.currentToolCallJson && trailingBuffer.length === 0) {\n state.isInsideToolCall = false;\n return;\n }\n\n if (state.currentToolCallJson) {\n try {\n const parsedToolCall = parseRJSON(state.currentToolCallJson) as {\n name: string;\n arguments: unknown;\n };\n emitToolCallFromParsed(state, controller, parsedToolCall);\n state.currentToolCallJson = \"\";\n state.isInsideToolCall = false;\n return;\n } catch {\n // fall through to text fallback\n }\n }\n\n const rawToolCallContent = `${state.currentToolCallJson}${trailingBuffer}`;\n const errorContent = `${toolCallStart}${rawToolCallContent}`;\n const shouldEmitRawFallback = shouldEmitRawToolCallTextOnError(options);\n\n logParseFailure({\n phase: \"stream\",\n reason: shouldEmitRawFallback\n ? \"Incomplete streaming tool call segment emitted as text\"\n : \"Incomplete streaming tool call segment suppressed without raw text fallback\",\n snippet: errorContent,\n });\n\n if (shouldEmitRawFallback) {\n const errorId = generateId();\n controller.enqueue({\n type: \"text-start\",\n id: errorId,\n } as LanguageModelV3StreamPart);\n controller.enqueue({\n type: \"text-delta\",\n id: errorId,\n delta: errorContent,\n } as LanguageModelV3StreamPart);\n controller.enqueue({\n type: \"text-end\",\n id: errorId,\n } as LanguageModelV3StreamPart);\n }\n closeToolInput(state, controller);\n options?.onError?.(\n shouldEmitRawFallback\n ? \"Could not complete streaming JSON tool call at finish; emitting original text.\"\n : \"Could not complete streaming JSON tool call at finish.\",\n { toolCall: errorContent }\n );\n state.currentToolCallJson = \"\";\n state.isInsideToolCall = false;\n}\n\nfunction handleFinishChunk(\n state: StreamState,\n controller: StreamController,\n toolCallStart: string,\n options: ParserOptions | undefined,\n chunk: LanguageModelV3StreamPart\n) {\n if (state.isInsideToolCall) {\n const trailingBuffer = state.buffer;\n state.buffer = \"\";\n emitIncompleteToolCall(\n state,\n controller,\n toolCallStart,\n trailingBuffer,\n options\n );\n } else if (state.buffer.length > 0) {\n flushBuffer(state, controller, toolCallStart);\n }\n closeTextBlock(state, controller);\n controller.enqueue(chunk);\n}\n\nfunction publishText(\n text: string,\n state: StreamState,\n controller: StreamController\n) {\n if (state.isInsideToolCall) {\n closeTextBlock(state, controller);\n state.currentToolCallJson += text;\n emitToolInputProgress(state, controller);\n } else if (text.length > 0) {\n if (!state.currentTextId) {\n state.currentTextId = generateId();\n controller.enqueue({\n type: \"text-start\",\n id: state.currentTextId,\n } as LanguageModelV3StreamPart);\n state.hasEmittedTextStart = true;\n }\n controller.enqueue({\n type: \"text-delta\",\n id: state.currentTextId,\n delta: text,\n } as LanguageModelV3StreamPart);\n }\n}\n\nfunction emitToolCall(context: TagProcessingContext) {\n const { state, controller, toolCallStart, toolCallEnd, options } = context;\n try {\n const parsedToolCall = parseRJSON(state.currentToolCallJson) as {\n name: string;\n arguments: unknown;\n };\n emitToolCallFromParsed(state, controller, parsedToolCall);\n } catch (error) {\n const errorContent = `${toolCallStart}${state.currentToolCallJson}${toolCallEnd}`;\n const shouldEmitRawFallback = shouldEmitRawToolCallTextOnError(options);\n\n logParseFailure({\n phase: \"stream\",\n reason: \"Failed to parse streaming tool call JSON segment\",\n snippet: errorContent,\n error,\n });\n if (shouldEmitRawFallback) {\n const errorId = generateId();\n controller.enqueue({\n type: \"text-start\",\n id: errorId,\n } as LanguageModelV3StreamPart);\n controller.enqueue({\n type: \"text-delta\",\n id: errorId,\n delta: errorContent,\n } as LanguageModelV3StreamPart);\n controller.enqueue({\n type: \"text-end\",\n id: errorId,\n } as LanguageModelV3StreamPart);\n }\n closeToolInput(state, controller);\n options?.onError?.(\n shouldEmitRawFallback\n ? \"Could not process streaming JSON tool call; emitting original text.\"\n : \"Could not process streaming JSON tool call.\",\n {\n toolCall: errorContent,\n }\n );\n }\n}\n\nfunction processTagMatch(context: TagProcessingContext) {\n const { state } = context;\n if (state.isInsideToolCall) {\n emitToolCall(context);\n state.currentToolCallJson = \"\";\n state.isInsideToolCall = false;\n } else {\n state.currentToolCallJson = \"\";\n state.isInsideToolCall = true;\n state.activeToolInput = null;\n }\n}\n\nfunction processBufferTags(context: TagProcessingContext) {\n const { state, controller, toolCallStart, toolCallEnd } = context;\n let startIndex = getPotentialStartIndex(\n state.buffer,\n state.isInsideToolCall ? toolCallEnd : toolCallStart\n );\n\n while (startIndex != null) {\n const tag = state.isInsideToolCall ? toolCallEnd : toolCallStart;\n if (startIndex + tag.length > state.buffer.length) {\n break;\n }\n\n publishText(state.buffer.slice(0, startIndex), state, controller);\n state.buffer = state.buffer.slice(startIndex + tag.length);\n processTagMatch(context);\n\n startIndex = getPotentialStartIndex(\n state.buffer,\n state.isInsideToolCall ? toolCallEnd : toolCallStart\n );\n }\n}\n\nfunction handlePartialTag(\n state: StreamState,\n controller: StreamController,\n toolCallStart: string,\n toolCallEnd: string\n) {\n if (state.isInsideToolCall) {\n const potentialEndIndex = getPotentialStartIndex(state.buffer, toolCallEnd);\n if (\n potentialEndIndex != null &&\n potentialEndIndex + toolCallEnd.length > state.buffer.length\n ) {\n publishText(state.buffer.slice(0, potentialEndIndex), state, controller);\n state.buffer = state.buffer.slice(potentialEndIndex);\n } else {\n publishText(state.buffer, state, controller);\n state.buffer = \"\";\n }\n return;\n }\n\n const potentialIndex = getPotentialStartIndex(state.buffer, toolCallStart);\n if (\n potentialIndex != null &&\n potentialIndex + toolCallStart.length > state.buffer.length\n ) {\n publishText(state.buffer.slice(0, potentialIndex), state, controller);\n state.buffer = state.buffer.slice(potentialIndex);\n } else {\n publishText(state.buffer, state, controller);\n state.buffer = \"\";\n }\n}\n\nexport const jsonProtocol = ({\n toolCallStart = \"<tool_call>\",\n toolCallEnd = \"</tool_call>\",\n}: JsonProtocolOptions = {}): TCMProtocol => ({\n formatTools({\n tools,\n toolSystemPromptTemplate,\n }: {\n tools: LanguageModelV3FunctionTool[];\n toolSystemPromptTemplate: (tools: LanguageModelV3FunctionTool[]) => string;\n }) {\n return toolSystemPromptTemplate(tools || []);\n },\n\n formatToolCall(toolCall: LanguageModelV3ToolCall) {\n let args: unknown = {};\n if (toolCall.input != null) {\n try {\n args = JSON.parse(toolCall.input);\n } catch {\n args = toolCall.input;\n }\n }\n return `${toolCallStart}${JSON.stringify({\n name: toolCall.toolName,\n arguments: args,\n })}${toolCallEnd}`;\n },\n\n parseGeneratedText({\n text,\n options,\n }: {\n text: string;\n tools: LanguageModelV3FunctionTool[];\n options?: ParserOptions;\n }) {\n const startEsc = escapeRegExp(toolCallStart);\n const endEsc = escapeRegExp(toolCallEnd);\n const toolCallRegex = new RegExp(\n `${startEsc}([\\u0000-\\uFFFF]*?)${endEsc}`,\n \"gs\"\n );\n\n const processedElements: LanguageModelV3Content[] = [];\n let currentIndex = 0;\n let match = toolCallRegex.exec(text);\n\n while (match !== null) {\n currentIndex = processMatchedToolCall({\n match,\n text,\n currentIndex,\n processedElements,\n options,\n });\n match = toolCallRegex.exec(text);\n }\n\n if (currentIndex < text.length) {\n const remainingText = text.substring(currentIndex);\n addTextSegment(remainingText, processedElements);\n }\n\n return processedElements;\n },\n\n createStreamParser({\n options,\n }: {\n tools: LanguageModelV3FunctionTool[];\n options?: ParserOptions;\n }) {\n const state: StreamState = {\n isInsideToolCall: false,\n buffer: \"\",\n currentToolCallJson: \"\",\n currentTextId: null,\n hasEmittedTextStart: false,\n activeToolInput: null,\n };\n\n return new TransformStream<\n LanguageModelV3StreamPart,\n LanguageModelV3StreamPart\n >({\n transform(chunk, controller) {\n if (chunk.type === \"finish\") {\n handleFinishChunk(state, controller, toolCallStart, options, chunk);\n return;\n }\n\n if (chunk.type !== \"text-delta\") {\n controller.enqueue(chunk);\n return;\n }\n\n const textContent = (chunk as { delta?: string }).delta ?? \"\";\n state.buffer += textContent;\n processBufferTags({\n state,\n controller,\n toolCallStart,\n toolCallEnd,\n options,\n });\n handlePartialTag(state, controller, toolCallStart, toolCallEnd);\n },\n });\n },\n\n extractToolCallSegments({ text }: { text: string }) {\n const startEsc = escapeRegExp(toolCallStart);\n const endEsc = escapeRegExp(toolCallEnd);\n const regex = new RegExp(`${startEsc}([\\u0000-\\uFFFF]*?)${endEsc}`, \"gs\");\n const segments: string[] = [];\n let m = regex.exec(text);\n while (m != null) {\n segments.push(m[0]);\n m = regex.exec(text);\n }\n return segments;\n },\n});\n","import type {\n LanguageModelV3Content,\n LanguageModelV3FunctionTool,\n LanguageModelV3StreamPart,\n LanguageModelV3ToolCall,\n} from \"@ai-sdk/provider\";\n\n/**\n * Options for parsing tool calls and handling errors\n */\nexport interface ParserOptions {\n onError?: (message: string, metadata?: Record<string, unknown>) => void;\n /**\n * When true, stream parsers may emit malformed raw tool-call text as\n * `text-delta` fallback on parse failure. Defaults to false to avoid leaking\n * protocol/internal markup to end users.\n */\n emitRawToolCallTextOnError?: boolean;\n}\n\nexport interface TCMProtocol {\n formatTools({\n tools,\n toolSystemPromptTemplate,\n }: {\n tools: LanguageModelV3FunctionTool[];\n toolSystemPromptTemplate: (tools: LanguageModelV3FunctionTool[]) => string;\n }): string;\n\n formatToolCall(toolCall: LanguageModelV3ToolCall): string;\n\n parseGeneratedText({\n text,\n tools,\n options,\n }: {\n text: string;\n tools: LanguageModelV3FunctionTool[];\n options?: ParserOptions;\n }): LanguageModelV3Content[];\n\n createStreamParser({\n tools,\n options,\n }: {\n tools: LanguageModelV3FunctionTool[];\n options?: ParserOptions;\n }): TransformStream<LanguageModelV3StreamPart, LanguageModelV3StreamPart>;\n\n extractToolCallSegments?: ({\n text,\n tools,\n }: {\n text: string;\n tools: LanguageModelV3FunctionTool[];\n }) => string[];\n}\n\nexport type TCMCoreProtocol = TCMProtocol;\n\nexport function isProtocolFactory(\n protocol: TCMProtocol | (() => TCMProtocol)\n): protocol is () => TCMProtocol {\n return typeof protocol === \"function\";\n}\n\nexport function isTCMProtocolFactory(\n protocol: TCMProtocol | (() => TCMProtocol)\n): protocol is () => TCMProtocol {\n return typeof protocol === \"function\";\n}\n","/**\n * Shared regex constants used across protocol implementations\n */\n\n/**\n * Matches valid XML name characters (letters, digits, underscore, colon, hyphen)\n */\nexport const NAME_CHAR_RE = /[A-Za-z0-9_:-]/;\n\n/**\n * Matches any whitespace character\n */\nexport const WHITESPACE_REGEX = /\\s/;\n","import type { LanguageModelV3StreamPart } from \"@ai-sdk/provider\";\n\ninterface EmittedToolInputState {\n emittedInput: string;\n}\n\ninterface EmitToolInputDeltaBaseParams {\n controller: TransformStreamDefaultController<LanguageModelV3StreamPart>;\n id: string;\n state: EmittedToolInputState;\n}\n\ninterface EmitPrefixDeltaParams extends EmitToolInputDeltaBaseParams {\n candidate: string;\n}\n\ninterface EmitFinalRemainderParams extends EmitToolInputDeltaBaseParams {\n finalFullJson: string;\n onMismatch?: (message: string, metadata?: Record<string, unknown>) => void;\n}\n\nfunction emitDelta({\n controller,\n id,\n state,\n nextInput,\n}: EmitToolInputDeltaBaseParams & {\n nextInput: string;\n}): boolean {\n if (!nextInput.startsWith(state.emittedInput)) {\n return false;\n }\n\n const delta = nextInput.slice(state.emittedInput.length);\n if (delta.length === 0) {\n return false;\n }\n\n controller.enqueue({\n type: \"tool-input-delta\",\n id,\n delta,\n });\n state.emittedInput = nextInput;\n return true;\n}\n\n/**\n * Converts a complete JSON string to an incomplete prefix suitable for streaming.\n * Handles object, array, and string root types correctly.\n */\nexport function toIncompleteJsonPrefix(fullJson: string): string {\n const trimmed = fullJson.trim();\n let prefix = trimmed;\n\n while (prefix.endsWith(\"}\") || prefix.endsWith(\"]\")) {\n prefix = prefix.slice(0, -1);\n }\n\n prefix = prefix.trimEnd();\n\n if (prefix.endsWith('\"')) {\n prefix = prefix.slice(0, -1);\n }\n\n if (prefix.length === 0) {\n if (trimmed.startsWith(\"[\") || trimmed.startsWith(\"{\")) {\n return trimmed.startsWith(\"{\") ? \"{\" : \"[\";\n }\n if (trimmed.startsWith(\"]\")) {\n return \"[\";\n }\n if (trimmed.startsWith(\"}\")) {\n return \"{\";\n }\n if (trimmed.startsWith('\"')) {\n return '\"';\n }\n return \"{\";\n }\n\n return prefix;\n}\n\nexport function emitPrefixDelta(params: EmitPrefixDeltaParams): boolean {\n return emitDelta({\n ...params,\n nextInput: params.candidate,\n });\n}\n\nexport function emitFinalRemainder(params: EmitFinalRemainderParams): boolean {\n const result = emitDelta({\n ...params,\n nextInput: params.finalFullJson,\n });\n\n if (!result && params.state.emittedInput.length > 0) {\n params.onMismatch?.(\n \"Final JSON does not extend emitted tool-input prefix\",\n {\n emittedLength: params.state.emittedInput.length,\n finalLength: params.finalFullJson.length,\n }\n );\n }\n\n return result;\n}\n","const XML_SELF_CLOSING_ROOT_WITH_BODY_REGEX =\n /^<([A-Za-z_][A-Za-z0-9_-]*)\\s*\\r?\\n([\\s\\S]+?)\\r?\\n\\s*\\/>\\s*$/;\n\nexport function tryRepairXmlSelfClosingRootWithBody(\n rawText: string,\n toolNames: string[]\n): string | null {\n const trimmed = rawText.trim();\n if (trimmed.length === 0) {\n return null;\n }\n\n const match = trimmed.match(XML_SELF_CLOSING_ROOT_WITH_BODY_REGEX);\n if (!match) {\n return null;\n }\n\n const rootTag = match[1];\n if (!toolNames.includes(rootTag)) {\n return null;\n }\n\n // Keep leading indentation intact for YAML payloads.\n const body = match[2].trimEnd();\n if (body.trim().length === 0 || body.includes(`</${rootTag}>`)) {\n return null;\n }\n\n return `<${rootTag}>\\n${body}\\n</${rootTag}>`;\n}\n","import type {\n LanguageModelV3Content,\n LanguageModelV3FunctionTool,\n LanguageModelV3StreamPart,\n LanguageModelV3ToolCall,\n} from \"@ai-sdk/provider\";\nimport { parse, stringify } from \"../../rxml\";\nimport { generateToolCallId } from \"../utils/id\";\nimport { createFlushTextHandler } from \"../utils/protocol-utils\";\nimport { escapeRegExp } from \"../utils/regex\";\nimport { NAME_CHAR_RE, WHITESPACE_REGEX } from \"../utils/regex-constants\";\nimport {\n emitFinalRemainder,\n emitPrefixDelta,\n toIncompleteJsonPrefix,\n} from \"../utils/streamed-tool-input-delta\";\nimport { tryRepairXmlSelfClosingRootWithBody } from \"../utils/xml-root-repair\";\nimport type { ParserOptions, TCMCoreProtocol } from \"./protocol-interface\";\n\nexport interface XmlProtocolOptions {\n parseOptions?: {\n repair?: boolean;\n maxReparses?: number;\n onError?: (message: string, metadata?: Record<string, unknown>) => void;\n noChildNodes?: string[];\n [key: string]: unknown;\n };\n}\n\ntype FlushTextFn = (\n controller: TransformStreamDefaultController<LanguageModelV3StreamPart>,\n text?: string\n) => void;\n\nfunction getToolSchema(tools: LanguageModelV3FunctionTool[], toolName: string) {\n return tools.find((t) => t.name === toolName)?.inputSchema;\n}\n\nfunction shouldEmitRawToolCallTextOnError(options?: ParserOptions): boolean {\n return options?.emitRawToolCallTextOnError === true;\n}\n\ninterface ProcessToolCallParams {\n toolCall: {\n toolName: string;\n content: string;\n startIndex: number;\n endIndex: number;\n };\n tools: LanguageModelV3FunctionTool[];\n options?: ParserOptions;\n text: string;\n processedElements: LanguageModelV3Content[];\n parseOptions?: Record<string, unknown>;\n}\n\nfunction processToolCall(params: ProcessToolCallParams): void {\n const { toolCall, tools, options, text, processedElements, parseOptions } =\n params;\n const toolSchema = getToolSchema(tools, toolCall.toolName);\n\n const parseConfig = {\n ...(parseOptions ?? {}),\n onError:\n options?.onError ??\n (parseOptions as { onError?: ParserOptions[\"onError\"] } | undefined)\n ?.onError,\n };\n\n try {\n const parsed = parse(toolCall.content, toolSchema, parseConfig);\n processedElements.push({\n type: \"tool-call\",\n toolCallId: generateToolCallId(),\n toolName: toolCall.toolName,\n input: JSON.stringify(parsed),\n });\n } catch (error) {\n const originalCallText = text.substring(\n toolCall.startIndex,\n toolCall.endIndex\n );\n options?.onError?.(\n `Could not process XML tool call: ${toolCall.toolName}`,\n { toolCall: originalCallText, error }\n );\n processedElements.push({ type: \"text\", text: originalCallText });\n }\n}\n\ninterface HandleStreamingToolCallEndParams {\n toolContent: string;\n currentToolCall: {\n name: string;\n toolCallId: string;\n emittedInput: string;\n };\n tools: LanguageModelV3FunctionTool[];\n options?: ParserOptions;\n ctrl: TransformStreamDefaultController<LanguageModelV3StreamPart>;\n flushText: FlushTextFn;\n parseOptions?: Record<string, unknown>;\n}\n\nfunction parseXmlTagName(rawTagBody: string): string {\n let index = 0;\n while (\n index < rawTagBody.length &&\n WHITESPACE_REGEX.test(rawTagBody[index])\n ) {\n index += 1;\n }\n const nameStart = index;\n while (\n index < rawTagBody.length &&\n NAME_CHAR_RE.test(rawTagBody.charAt(index))\n ) {\n index += 1;\n }\n return rawTagBody.slice(nameStart, index);\n}\n\ntype XmlSpecialConsumeResult =\n | { kind: \"none\" }\n | { kind: \"incomplete\" }\n | { kind: \"consumed\"; nextPos: number };\n\nfunction consumeXmlSpecialSection(\n fragment: string,\n ltIndex: number\n): XmlSpecialConsumeResult {\n if (fragment.startsWith(\"<!--\", ltIndex)) {\n const commentEnd = fragment.indexOf(\"-->\", ltIndex + 4);\n return commentEnd === -1\n ? { kind: \"incomplete\" }\n : { kind: \"consumed\", nextPos: commentEnd + 3 };\n }\n if (fragment.startsWith(\"<![CDATA[\", ltIndex)) {\n const cdataEnd = fragment.indexOf(\"]]>\", ltIndex + 9);\n return cdataEnd === -1\n ? { kind: \"incomplete\" }\n : { kind: \"consumed\", nextPos: cdataEnd + 3 };\n }\n if (fragment.startsWith(\"<?\", ltIndex)) {\n const processingEnd = fragment.indexOf(\"?>\", ltIndex + 2);\n return processingEnd === -1\n ? { kind: \"incomplete\" }\n : { kind: \"consumed\", nextPos: processingEnd + 2 };\n }\n if (fragment.startsWith(\"<!\", ltIndex)) {\n const declarationEnd = fragment.indexOf(\">\", ltIndex + 2);\n return declarationEnd === -1\n ? { kind: \"incomplete\" }\n : { kind: \"consumed\", nextPos: declarationEnd + 1 };\n }\n return { kind: \"none\" };\n}\n\ntype XmlTagToken =\n | { kind: \"close\"; name: string; nextPos: number }\n | { kind: \"open\"; name: string; selfClosing: boolean; nextPos: number };\n\nfunction parseXmlTagToken(\n fragment: string,\n ltIndex: number\n): XmlTagToken | null {\n const gtIndex = fragment.indexOf(\">\", ltIndex + 1);\n if (gtIndex === -1) {\n return null;\n }\n\n const tagBody = fragment.slice(ltIndex + 1, gtIndex).trim();\n if (tagBody.length === 0) {\n return null;\n }\n\n if (tagBody.startsWith(\"/\")) {\n const closeName = parseXmlTagName(tagBody.slice(1));\n if (closeName.length === 0) {\n return null;\n }\n return { kind: \"close\", name: closeName, nextPos: gtIndex + 1 };\n }\n\n const selfClosing = tagBody.endsWith(\"/\");\n const openBody = selfClosing ? tagBody.slice(0, -1).trimEnd() : tagBody;\n const openName = parseXmlTagName(openBody);\n if (openName.length === 0) {\n return null;\n }\n return {\n kind: \"open\",\n name: openName,\n selfClosing,\n nextPos: gtIndex + 1,\n };\n}\n\nfunction analyzeXmlFragmentForProgress(\n fragment: string\n): { topLevelTagNames: string[] } | null {\n const stack: string[] = [];\n const topLevelTagNames: string[] = [];\n let position = 0;\n\n while (position < fragment.length) {\n const ltIndex = fragment.indexOf(\"<\", position);\n if (ltIndex === -1) {\n break;\n }\n\n const special = consumeXmlSpecialSection(fragment, ltIndex);\n if (special.kind === \"incomplete\") {\n return null;\n }\n if (special.kind === \"consumed\") {\n position = special.nextPos;\n continue;\n }\n\n const token = parseXmlTagToken(fragment, ltIndex);\n if (token === null) {\n return null;\n }\n\n if (token.kind === \"close\") {\n const openName = stack.pop();\n if (!openName || openName !== token.name) {\n return null;\n }\n position = token.nextPos;\n continue;\n }\n\n if (stack.length === 0) {\n topLevelTagNames.push(token.name);\n }\n if (!token.selfClosing) {\n stack.push(token.name);\n }\n position = token.nextPos;\n }\n\n if (stack.length > 0) {\n return null;\n }\n\n return { topLevelTagNames };\n}\n\ntype XmlTopLevelTextScanResult =\n | { kind: \"found\" }\n | { kind: \"invalid\" }\n | { kind: \"next\"; nextPos: number }\n | { kind: \"done\"; value: boolean };\n\nfunction scanXmlFragmentTopLevelTextStep(options: {\n fragment: string;\n position: number;\n stack: string[];\n}): XmlTopLevelTextScanResult {\n const { fragment, position, stack } = options;\n\n const ltIndex = fragment.indexOf(\"<\", position);\n if (ltIndex === -1) {\n const trailingText = fragment.slice(position);\n return {\n kind: \"done\",\n value: stack.length === 0 && trailingText.trim().length > 0,\n };\n }\n\n const textBetweenTags = fragment.slice(position, ltIndex);\n if (stack.length === 0 && textBetweenTags.trim().length > 0) {\n return { kind: \"found\" };\n }\n\n const special = consumeXmlSpecialSection(fragment, ltIndex);\n if (special.kind === \"incomplete\") {\n return { kind: \"invalid\" };\n }\n if (special.kind === \"consumed\") {\n return { kind: \"next\", nextPos: special.nextPos };\n }\n\n const token = parseXmlTagToken(fragment, ltIndex);\n if (token === null) {\n return { kind: \"invalid\" };\n }\n\n if (token.kind === \"close\") {\n const openName = stack.pop();\n if (!openName || openName !== token.name) {\n return { kind: \"invalid\" };\n }\n } else if (!token.selfClosing) {\n stack.push(token.name);\n }\n\n return { kind: \"next\", nextPos: token.nextPos };\n}\n\nfunction hasNonWhitespaceTopLevelText(fragment: string): boolean {\n if (!fragment.includes(\"<\")) {\n return fragment.trim().length > 0;\n }\n\n const stack: string[] = [];\n let position = 0;\n\n while (position < fragment.length) {\n const step = scanXmlFragmentTopLevelTextStep({ fragment, position, stack });\n if (step.kind === \"found\") {\n return true;\n }\n if (step.kind === \"invalid\") {\n return false;\n }\n if (step.kind === \"done\") {\n return step.value;\n }\n\n position = step.nextPos;\n }\n\n return false;\n}\n\nfunction getObjectSchemaPropertyNames(schema: unknown): Set<string> | null {\n if (!schema || typeof schema !== \"object\") {\n return null;\n }\n\n const schemaObject = schema as {\n type?: unknown;\n properties?: unknown;\n };\n const typeValue = schemaObject.type;\n if (typeValue != null) {\n const isObjectType =\n typeValue === \"object\" ||\n (Array.isArray(typeValue) && typeValue.includes(\"object\"));\n if (!isObjectType) {\n return null;\n }\n }\n if (!schemaObject.properties || typeof schemaObject.properties !== \"object\") {\n return new Set<string>();\n }\n\n return new Set(\n Object.keys(schemaObject.properties as Record<string, unknown>)\n );\n}\n\nfunction schemaAllowsArrayType(schema: unknown): boolean {\n if (!schema || typeof schema !== \"object\") {\n return false;\n }\n\n const schemaRecord = schema as Record<string, unknown>;\n const typeValue = schemaRecord.type;\n if (typeValue === \"array\") {\n return true;\n }\n if (Array.isArray(typeValue) && typeValue.includes(\"array\")) {\n return true;\n }\n\n const unions = [schemaRecord.anyOf, schemaRecord.oneOf, schemaRecord.allOf];\n for (const union of unions) {\n if (!Array.isArray(union)) {\n continue;\n }\n if (union.some((entry) => schemaAllowsArrayType(entry))) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction getSchemaObjectProperty(\n schema: unknown,\n propertyName: string\n): unknown | null {\n if (!schema || typeof schema !== \"object\") {\n return null;\n }\n\n const schemaObject = schema as Record<string, unknown>;\n const properties = schemaObject.properties;\n if (!properties || typeof properties !== \"object\") {\n return null;\n }\n\n const property = (properties as Record<string, unknown>)[propertyName];\n if (!property) {\n return null;\n }\n\n return property;\n}\n\nfunction isStableXmlProgressCandidate(options: {\n candidate: string;\n parsed: unknown;\n toolSchema: unknown;\n}): boolean {\n const { candidate, parsed, toolSchema } = options;\n if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n return false;\n }\n\n const structure = analyzeXmlFragmentForProgress(candidate);\n if (!structure) {\n return false;\n }\n\n const schemaProperties = getObjectSchemaPropertyNames(toolSchema);\n if (!schemaProperties || schemaProperties.size === 0) {\n return false;\n }\n\n const parsedObject = parsed as Record<string, unknown>;\n const uniqueTopLevelTags = new Set(structure.topLevelTagNames);\n for (const tagName of uniqueTopLevelTags) {\n if (!schemaProperties.has(tagName)) {\n continue;\n }\n const schemaProperty = getSchemaObjectProperty(toolSchema, tagName);\n if (\n schemaProperty &&\n schemaAllowsArrayType(schemaProperty) &&\n !Array.isArray(parsedObject[tagName])\n ) {\n return false;\n }\n }\n\n if (structure.topLevelTagNames.length === 1) {\n const onlyTopLevelTag = structure.topLevelTagNames[0];\n if (\n !schemaProperties ||\n schemaProperties.size === 0 ||\n !schemaProperties.has(onlyTopLevelTag)\n ) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction parseXmlContentForStreamProgress({\n toolContent,\n toolSchema,\n parseOptions,\n}: {\n toolContent: string;\n toolSchema: unknown;\n parseOptions?: Record<string, unknown>;\n}): string | null {\n const tryParse = (content: string): unknown | null => {\n try {\n return parse(content, toolSchema, {\n ...(parseOptions ?? {}),\n repair: false,\n onError: undefined,\n });\n } catch {\n return null;\n }\n };\n\n const strictFull = tryParse(toolContent);\n if (\n strictFull !== null &&\n isStableXmlProgressCandidate({\n candidate: toolContent,\n parsed: strictFull,\n toolSchema,\n })\n ) {\n return JSON.stringify(strictFull);\n }\n\n let searchEnd = toolContent.length;\n while (searchEnd > 0) {\n const gtIndex = toolContent.lastIndexOf(\">\", searchEnd - 1);\n if (gtIndex === -1) {\n break;\n }\n const candidate = toolContent.slice(0, gtIndex + 1);\n if (!analyzeXmlFragmentForProgress(candidate)) {\n searchEnd = gtIndex;\n continue;\n }\n const parsedCandidate = tryParse(candidate);\n if (\n parsedCandidate !== null &&\n isStableXmlProgressCandidate({\n candidate,\n parsed: parsedCandidate,\n toolSchema,\n })\n ) {\n return JSON.stringify(parsedCandidate);\n }\n searchEnd = gtIndex;\n }\n\n return null;\n}\n\nfunction handleStreamingToolCallEnd(\n params: HandleStreamingToolCallEndParams\n): void {\n const {\n toolContent,\n currentToolCall,\n tools,\n options,\n ctrl,\n flushText,\n parseOptions,\n } = params;\n const toolSchema = getToolSchema(tools, currentToolCall.name);\n const parseConfig = {\n ...(parseOptions ?? {}),\n onError:\n options?.onError ??\n (parseOptions as { onError?: ParserOptions[\"onError\"] } | undefined)\n ?.onError,\n };\n\n flushText(ctrl);\n try {\n const parsedResult = parse(toolContent, toolSchema, parseConfig);\n const finalInput = JSON.stringify(parsedResult);\n emitFinalRemainder({\n controller: ctrl,\n id: currentToolCall.toolCallId,\n state: currentToolCall,\n finalFullJson: finalInput,\n onMismatch: options?.onError,\n });\n ctrl.enqueue({\n type: \"tool-input-end\",\n id: currentToolCall.toolCallId,\n });\n ctrl.enqueue({\n type: \"tool-call\",\n toolCallId: currentToolCall.toolCallId,\n toolName: currentToolCall.name,\n input: finalInput,\n });\n } catch (error) {\n ctrl.enqueue({\n type: \"tool-input-end\",\n id: currentToolCall.toolCallId,\n });\n const original = `<${currentToolCall.name}>${toolContent}</${currentToolCall.name}>`;\n options?.onError?.(\"Could not process streaming XML tool call\", {\n toolCall: original,\n error,\n });\n if (shouldEmitRawToolCallTextOnError(options)) {\n flushText(ctrl, original);\n }\n }\n}\n\nfunction findClosingTagEndFlexible(\n text: string,\n contentStart: number,\n toolName: string\n): number {\n let pos = contentStart;\n let depth = 1;\n\n while (pos < text.length) {\n const tok = nextTagToken(text, pos);\n if (tok.kind === \"eof\") {\n break;\n }\n const result = updateDepthWithToken(tok, toolName, depth);\n depth = result.depth;\n if (result.closedAt !== undefined) {\n return result.closedAt;\n }\n pos = tok.nextPos;\n }\n return -1;\n}\n\nfunction skipSpecialSegment(text: string, lt: number): number | null {\n const next = text[lt + 1];\n if (next === \"!\" || next === \"?\") {\n const gt = text.indexOf(\">\", lt + 1);\n if (gt !== -1) {\n return gt + 1;\n }\n }\n return null;\n}\n\nfunction consumeClosingTag(\n text: string,\n lt: number\n): { matched: boolean; endPos: number } {\n const gt = text.indexOf(\">\", lt + 1);\n const endPos = gt === -1 ? text.length : gt + 1;\n return { matched: false, endPos };\n}\n\nfunction consumeOpenTag(\n text: string,\n lt: number\n): { name: string; selfClosing: boolean; nextPos: number } | null {\n let p = lt + 1;\n while (p < text.length && WHITESPACE_REGEX.test(text[p])) {\n p += 1;\n }\n const nameStart = p;\n while (p < text.length && NAME_CHAR_RE.test(text.charAt(p))) {\n p += 1;\n }\n const name = text.slice(nameStart, p);\n const q = text.indexOf(\">\", p);\n if (q === -1) {\n return null;\n }\n let r = q - 1;\n while (r >= nameStart && WHITESPACE_REGEX.test(text[r])) {\n r -= 1;\n }\n const selfClosing = text[r] === \"/\";\n return { name, selfClosing, nextPos: q + 1 };\n}\n\nfunction updateDepthWithToken(\n tok:\n | { kind: \"special\"; nextPos: number }\n | { kind: \"close\"; name: string; nextPos: number }\n | { kind: \"open\"; name: string; selfClosing: boolean; nextPos: number },\n toolName: string,\n depth: number\n): { depth: number; closedAt?: number } {\n if (tok.kind === \"close\" && tok.name === toolName) {\n const newDepth = depth - 1;\n return newDepth === 0\n ? { depth: newDepth, closedAt: tok.nextPos }\n : { depth: newDepth };\n }\n if (tok.kind === \"open\" && tok.name === toolName && !tok.selfClosing) {\n return { depth: depth + 1 };\n }\n return { depth };\n}\n\nfunction nextTagToken(\n text: string,\n fromPos: number\n):\n | { kind: \"eof\"; nextPos: number }\n | { kind: \"special\"; nextPos: number }\n | { kind: \"close\"; name: string; nextPos: number }\n | { kind: \"open\"; name: string; selfClosing: boolean; nextPos: number } {\n const lt = text.indexOf(\"<\", fromPos);\n if (lt === -1 || lt + 1 >= text.length) {\n return { kind: \"eof\", nextPos: text.length };\n }\n const next = text[lt + 1];\n const specialEnd = skipSpecialSegment(text, lt);\n if (specialEnd !== null) {\n return { kind: \"special\", nextPos: specialEnd };\n }\n if (next === \"/\") {\n const closing = consumeClosingTag(text, lt);\n let p = lt + 2;\n while (p < text.length && WHITESPACE_REGEX.test(text[p])) {\n p += 1;\n }\n const nameStart = p;\n while (p < text.length && NAME_CHAR_RE.test(text.charAt(p))) {\n p += 1;\n }\n const name = text.slice(nameStart, p);\n return { kind: \"close\", name, nextPos: closing.endPos };\n }\n const open = consumeOpenTag(text, lt);\n if (open === null) {\n return { kind: \"eof\", nextPos: text.length };\n }\n return {\n kind: \"open\",\n name: open.name,\n selfClosing: open.selfClosing,\n nextPos: open.nextPos,\n };\n}\n\ninterface ToolTagMatch {\n tagStart: number;\n isSelfClosing: boolean;\n tagLength: number;\n}\n\nfunction findNextToolTag(\n text: string,\n searchIndex: number,\n toolName: string\n): ToolTagMatch | null {\n const startTag = `<${toolName}>`;\n const openIdx = text.indexOf(startTag, searchIndex);\n const selfMatch = findSelfClosingTag(text, toolName, searchIndex);\n const selfIdx = selfMatch?.index ?? -1;\n if (openIdx === -1 && selfIdx === -1) {\n return null;\n }\n const isSelfClosing = selfIdx !== -1 && (openIdx === -1 || selfIdx < openIdx);\n return {\n tagStart: isSelfClosing ? selfIdx : openIdx,\n isSelfClosing,\n tagLength: isSelfClosing ? (selfMatch?.length ?? 0) : startTag.length,\n };\n}\n\nfunction findLastCloseTagStart(segment: string, toolName: string): number {\n const closeTagPattern = new RegExp(\n `</\\\\s*${escapeRegExp(toolName)}\\\\s*>`,\n \"g\"\n );\n let closeTagStart = -1;\n let match = closeTagPattern.exec(segment);\n while (match !== null) {\n closeTagStart = match.index;\n match = closeTagPattern.exec(segment);\n }\n if (closeTagStart === -1) {\n return segment.lastIndexOf(\"<\");\n }\n return closeTagStart;\n}\n\nfunction pushSelfClosingToolCall(\n toolCalls: Array<{\n toolName: string;\n startIndex: number;\n endIndex: number;\n content: string;\n segment: string;\n }>,\n toolName: string,\n text: string,\n tagStart: number,\n tagLength: number\n): number {\n const endIndex = tagStart + tagLength;\n toolCalls.push({\n toolName,\n startIndex: tagStart,\n endIndex,\n content: \"\",\n segment: text.substring(tagStart, endIndex),\n });\n return endIndex;\n}\n\n/**\n * Cache for self-closing tag regex patterns.\n * This cache grows with the number of unique tool names but is bounded\n * in practice since tools are defined at configuration time, not dynamically.\n */\nconst selfClosingTagCache = new Map<string, RegExp>();\n\nfunction getSelfClosingTagPattern(toolName: string): RegExp {\n let pattern = selfClosingTagCache.get(toolName);\n if (!pattern) {\n pattern = new RegExp(`<\\\\s*${escapeRegExp(toolName)}\\\\s*/>`, \"g\");\n selfClosingTagCache.set(toolName, pattern);\n }\n return pattern;\n}\n\nfunction findSelfClosingTag(\n text: string,\n toolName: string,\n fromIndex: number\n): { index: number; length: number } | null {\n const pattern = getSelfClosingTagPattern(toolName);\n pattern.lastIndex = fromIndex;\n const match = pattern.exec(text);\n if (!match || match.index === undefined) {\n return null;\n }\n return { index: match.index, length: match[0].length };\n}\n\nfunction appendOpenToolCallIfComplete(\n toolCalls: Array<{\n toolName: string;\n startIndex: number;\n endIndex: number;\n content: string;\n segment: string;\n }>,\n text: string,\n toolName: string,\n tagStart: number,\n startTag: string\n): number {\n const contentStart = tagStart + startTag.length;\n const fullTagEnd = findClosingTagEndFlexible(text, contentStart, toolName);\n if (fullTagEnd === -1 || fullTagEnd <= contentStart) {\n return contentStart;\n }\n const segment = text.substring(tagStart, fullTagEnd);\n const closeTagStart = findLastCloseTagStart(segment, toolName);\n const inner =\n closeTagStart === -1\n ? segment.slice(startTag.length)\n : segment.slice(startTag.length, closeTagStart);\n toolCalls.push({\n toolName,\n startIndex: tagStart,\n endIndex: fullTagEnd,\n content: inner,\n segment,\n });\n return fullTagEnd;\n}\n\nfunction findToolCallsForName(\n text: string,\n toolName: string\n): Array<{\n toolName: string;\n startIndex: number;\n endIndex: number;\n content: string;\n segment: string;\n}> {\n const toolCalls: Array<{\n toolName: string;\n startIndex: number;\n endIndex: number;\n content: string;\n segment: string;\n }> = [];\n const startTag = `<${toolName}>`;\n let searchIndex = 0;\n\n while (searchIndex < text.length) {\n const match = findNextToolTag(text, searchIndex, toolName);\n if (match === null) {\n break;\n }\n if (match.isSelfClosing) {\n searchIndex = pushSelfClosingToolCall(\n toolCalls,\n toolName,\n text,\n match.tagStart,\n match.tagLength\n );\n continue;\n }\n searchIndex = appendOpenToolCallIfComplete(\n toolCalls,\n text,\n toolName,\n match.tagStart,\n startTag\n );\n }\n\n return toolCalls;\n}\n\nfunction findToolCalls(\n text: string,\n toolNames: string[]\n): Array<{\n toolName: string;\n startIndex: number;\n endIndex: number;\n content: string;\n segment: string;\n}> {\n const toolCalls: Array<{\n toolName: string;\n startIndex: number;\n endIndex: number;\n content: string;\n segment: string;\n }> = [];\n\n for (const toolName of toolNames) {\n const calls = findToolCallsForName(text, toolName);\n toolCalls.push(...calls);\n }\n\n return toolCalls.sort((a, b) => a.startIndex - b.startIndex);\n}\n\ninterface TokenHandlerResult {\n depth: number;\n lastCompleteEnd: number;\n shouldBreak: boolean;\n}\n\nfunction handleSpecialToken(depth: number): TokenHandlerResult {\n return { depth, lastCompleteEnd: -1, shouldBreak: false };\n}\n\nfunction handleOpenToken(\n token: { selfClosing: boolean; nextPos: number },\n depth: number,\n lastCompleteEnd: number\n): TokenHandlerResult {\n if (token.selfClosing) {\n return {\n depth,\n lastCompleteEnd: depth === 0 ? token.nextPos : lastCompleteEnd,\n shouldBreak: false,\n };\n }\n return { depth: depth + 1, lastCompleteEnd, shouldBreak: false };\n}\n\nfunction handleCloseToken(\n token: { nextPos: number },\n depth: number\n): TokenHandlerResult {\n if (depth <= 0) {\n return { depth, lastCompleteEnd: -1, shouldBreak: true };\n }\n const newDepth = depth - 1;\n return {\n depth: newDepth,\n lastCompleteEnd: newDepth === 0 ? token.nextPos : -1,\n shouldBreak: false,\n };\n}\n\nfunction findLinePrefixedXmlBodyEnd(\n text: string,\n bodyStartIndex: number\n): number {\n let cursor = bodyStartIndex;\n let depth = 0;\n let lastCompleteEnd = -1;\n\n while (cursor < text.length) {\n if (depth === 0) {\n cursor = consumeWhitespace(text, cursor);\n if (cursor >= text.length || text.charAt(cursor) !== \"<\") {\n break;\n }\n }\n\n const token = nextTagToken(text, cursor);\n if (token.kind === \"eof\") {\n break;\n }\n\n let result: TokenHandlerResult;\n if (token.kind === \"special\") {\n result = handleSpecialToken(depth);\n } else if (token.kind === \"open\") {\n result = handleOpenToken(token, depth, lastCompleteEnd);\n } else {\n result = handleCloseToken(token, depth);\n }\n\n depth = result.depth;\n if (result.lastCompleteEnd !== -1) {\n lastCompleteEnd = result.lastCompleteEnd;\n }\n if (result.shouldBreak) {\n break;\n }\n cursor = token.nextPos;\n }\n\n return lastCompleteEnd;\n}\n\nfunction findLinePrefixedToolCall(\n text: string,\n toolNames: string[]\n): {\n toolName: string;\n startIndex: number;\n endIndex: number;\n content: string;\n segment: string;\n} | null {\n let best: {\n toolName: string;\n startIndex: number;\n endIndex: number;\n content: string;\n segment: string;\n } | null = null;\n\n for (const toolName of toolNames) {\n const linePattern = new RegExp(\n `(^|\\\\n)[\\\\t ]*${escapeRegExp(toolName)}[\\\\t ]*:?[\\\\t ]*(?:\\\\r?\\\\n|$)`,\n \"g\"\n );\n\n let match = linePattern.exec(text);\n while (match !== null) {\n const prefix = match[1] ?? \"\";\n const startIndex = match.index + prefix.length;\n const contentStart = consumeWhitespace(text, linePattern.lastIndex);\n if (contentStart >= text.length || text.charAt(contentStart) !== \"<\") {\n match = linePattern.exec(text);\n continue;\n }\n const contentEnd = findLinePrefixedXmlBodyEnd(text, contentStart);\n if (contentEnd === -1 || contentEnd <= contentStart) {\n match = linePattern.exec(text);\n continue;\n }\n const content = text.slice(contentStart, contentEnd);\n\n const candidate = {\n toolName,\n startIndex,\n endIndex: contentEnd,\n content,\n segment: text.slice(startIndex, contentEnd),\n };\n if (best === null || candidate.startIndex < best.startIndex) {\n best = candidate;\n }\n break;\n }\n }\n\n return best;\n}\n\nfunction findEarliestToolTag(\n buffer: string,\n toolNames: string[]\n): { index: number; name: string; selfClosing: boolean; tagLength: number } {\n let bestIndex = -1;\n let bestName = \"\";\n let bestSelfClosing = false;\n let bestTagLength = 0;\n\n if (toolNames.length > 0) {\n for (const name of toolNames) {\n const openTag = `<${name}>`;\n const idxOpen = buffer.indexOf(openTag);\n const selfMatch = findSelfClosingTag(buffer, name, 0);\n const idxSelf = selfMatch?.index ?? -1;\n\n if (idxOpen !== -1 && (bestIndex === -1 || idxOpen < bestIndex)) {\n bestIndex = idxOpen;\n bestName = name;\n bestSelfClosing = false;\n bestTagLength = openTag.length;\n }\n if (idxSelf !== -1 && (bestIndex === -1 || idxSelf < bestIndex)) {\n bestIndex = idxSelf;\n bestName = name;\n bestSelfClosing = true;\n bestTagLength = selfMatch?.length ?? 0;\n }\n }\n }\n\n return {\n index: bestIndex,\n name: bestName,\n selfClosing: bestSelfClosing,\n tagLength: bestTagLength,\n };\n}\n\nfunction isOpenTagPrefix(suffix: string, toolName: string): boolean {\n return `${toolName}>`.startsWith(suffix);\n}\n\nfunction consumeWhitespace(text: string, index: number): number {\n let i = index;\n while (i < text.length && WHITESPACE_REGEX.test(text.charAt(i))) {\n i += 1;\n }\n return i;\n}\n\nfunction consumeToolNamePrefix(\n text: string,\n index: number,\n toolName: string\n): { index: number; done: boolean; valid: boolean } {\n let i = index;\n let nameIndex = 0;\n\n while (i < text.length && nameIndex < toolName.length) {\n if (text.charAt(i) !== toolName.charAt(nameIndex)) {\n return { index: i, done: false, valid: false };\n }\n i += 1;\n nameIndex += 1;\n }\n\n return { index: i, done: nameIndex === toolName.length, valid: true };\n}\n\n/**\n * Checks if the remainder of text at index is a valid self-closing tag suffix.\n * Returns true if:\n * - text[index] is \"/\" and we're at the end (incomplete \"/\")\n * - text[index..] is \"/>\" at the end of the string\n */\nfunction isSelfClosingSuffixRemainder(text: string, index: number): boolean {\n if (text.charAt(index) !== \"/\") {\n return false;\n }\n if (index + 1 >= text.length) {\n return true;\n }\n return index + 1 === text.length - 1 && text.charAt(index + 1) === \">\";\n}\n\nfunction isSelfClosingTagPrefix(suffix: string, toolName: string): boolean {\n let i = consumeWhitespace(suffix, 0);\n if (i >= suffix.length) {\n return true;\n }\n\n const nameRemainder = suffix.slice(i);\n if (toolName.startsWith(nameRemainder)) {\n return true;\n }\n\n const nameResult = consumeToolNamePrefix(suffix, i, toolName);\n if (!nameResult.valid) {\n return false;\n }\n\n i = nameResult.index;\n if (i >= suffix.length) {\n return true;\n }\n if (!nameResult.done) {\n return false;\n }\n\n i = consumeWhitespace(suffix, i);\n if (i >= suffix.length) {\n return true;\n }\n\n return isSelfClosingSuffixRemainder(suffix, i);\n}\n\nfunction findPotentialToolTagStart(\n buffer: string,\n toolNames: string[]\n): number {\n if (toolNames.length === 0 || buffer.length === 0) {\n return -1;\n }\n\n const lastGt = buffer.lastIndexOf(\">\");\n const offset = lastGt === -1 ? 0 : lastGt + 1;\n const trailing = buffer.slice(offset);\n\n for (let i = trailing.length - 1; i >= 0; i -= 1) {\n if (trailing.charAt(i) !== \"<\") {\n continue;\n }\n const suffix = trailing.slice(i + 1);\n for (const name of toolNames) {\n if (\n isOpenTagPrefix(suffix, name) ||\n isSelfClosingTagPrefix(suffix, name)\n ) {\n return offset + i;\n }\n }\n }\n\n return -1;\n}\n\ninterface StreamingToolCallState {\n name: string;\n toolCallId: string;\n emittedInput: string;\n lastProgressGtIndex: number | null;\n lastProgressFullInput: string | null;\n}\n\ninterface ProcessToolCallInBufferParams {\n buffer: string;\n currentToolCall: StreamingToolCallState;\n tools: LanguageModelV3FunctionTool[];\n options?: ParserOptions;\n controller: TransformStreamDefaultController<LanguageModelV3StreamPart>;\n flushText: FlushTextFn;\n setBuffer: (buffer: string) => void;\n parseOptions?: Record<string, unknown>;\n emitToolInputProgress: (\n controller: TransformStreamDefaultController<LanguageModelV3StreamPart>,\n currentToolCall: StreamingToolCallState,\n toolContent: string\n ) => void;\n}\n\nfunction processToolCallInBuffer(params: ProcessToolCallInBufferParams): {\n buffer: string;\n currentToolCall: StreamingToolCallState | null;\n shouldBreak: boolean;\n} {\n const {\n buffer,\n currentToolCall,\n tools,\n options,\n controller,\n flushText,\n setBuffer,\n parseOptions,\n emitToolInputProgress,\n } = params;\n const endTagPattern = new RegExp(\n `</\\\\s*${escapeRegExp(currentToolCall.name)}\\\\s*>`\n );\n const endMatch = endTagPattern.exec(buffer);\n if (!endMatch || endMatch.index === undefined) {\n emitToolInputProgress(controller, currentToolCall, buffer);\n return { buffer, currentToolCall, shouldBreak: true };\n }\n\n const endIdx = endMatch.index;\n const endPos = endIdx + endMatch[0].length;\n const content = buffer.substring(0, endIdx);\n emitToolInputProgress(controller, currentToolCall, content);\n const remainder = buffer.substring(endPos);\n setBuffer(remainder);\n\n handleStreamingToolCallEnd({\n toolContent: content,\n currentToolCall,\n tools,\n options,\n ctrl: controller,\n flushText,\n parseOptions,\n });\n\n return {\n buffer: remainder,\n currentToolCall: null,\n shouldBreak: false,\n };\n}\n\ninterface ProcessNoToolCallInBufferParams {\n buffer: string;\n toolNames: string[];\n controller: TransformStreamDefaultController<LanguageModelV3StreamPart>;\n flushText: FlushTextFn;\n tools: LanguageModelV3FunctionTool[];\n options?: ParserOptions;\n parseOptions?: Record<string, unknown>;\n setBuffer: (buffer: string) => void;\n emitToolInputStart: (\n controller: TransformStreamDefaultController<LanguageModelV3StreamPart>,\n toolName: string\n ) => StreamingToolCallState;\n}\n\nfunction processNoToolCallInBuffer(params: ProcessNoToolCallInBufferParams): {\n buffer: string;\n currentToolCall: StreamingToolCallState | null;\n shouldBreak: boolean;\n shouldContinue: boolean;\n} {\n const {\n buffer,\n toolNames,\n controller,\n flushText,\n tools,\n options,\n parseOptions,\n setBuffer,\n emitToolInputStart,\n } = params;\n const {\n index: earliestStartTagIndex,\n name: earliestToolName,\n selfClosing,\n tagLength,\n } = findEarliestToolTag(buffer, toolNames);\n\n if (earliestStartTagIndex === -1) {\n const potentialStart = findPotentialToolTagStart(buffer, toolNames);\n const safeLen = Math.max(\n 0,\n potentialStart === -1 ? buffer.length : potentialStart\n );\n const remaining = buffer.slice(safeLen);\n if (safeLen > 0) {\n flushText(controller, buffer.slice(0, safeLen));\n setBuffer(remaining);\n }\n return {\n buffer: remaining,\n currentToolCall: null,\n shouldBreak: true,\n shouldContinue: false,\n };\n }\n\n flushText(controller, buffer.substring(0, earliestStartTagIndex));\n\n if (selfClosing) {\n const newBuffer = buffer.substring(earliestStartTagIndex + tagLength);\n setBuffer(newBuffer);\n const currentToolCall = emitToolInputStart(controller, earliestToolName);\n handleStreamingToolCallEnd({\n toolContent: \"\",\n currentToolCall,\n tools,\n options,\n ctrl: controller,\n flushText,\n parseOptions,\n });\n return {\n buffer: newBuffer,\n currentToolCall: null,\n shouldBreak: false,\n shouldContinue: false,\n };\n }\n\n const startTag = `<${earliestToolName}>`;\n const newBuffer = buffer.substring(earliestStartTagIndex + startTag.length);\n setBuffer(newBuffer);\n return {\n buffer: newBuffer,\n currentToolCall: emitToolInputStart(controller, earliestToolName),\n shouldBreak: false,\n shouldContinue: true,\n };\n}\n\nfunction createProcessBufferHandler(\n getBuffer: () => string,\n setBuffer: (buffer: string) => void,\n getCurrentToolCall: () => StreamingToolCallState | null,\n setCurrentToolCall: (toolCall: StreamingToolCallState | null) => void,\n tools: LanguageModelV3FunctionTool[],\n options: ParserOptions | undefined,\n toolNames: string[],\n flushText: FlushTextFn,\n parseOptions: Record<string, unknown> | undefined,\n emitToolInputProgress: (\n controller: TransformStreamDefaultController<LanguageModelV3StreamPart>,\n currentToolCall: StreamingToolCallState,\n toolContent: string\n ) => void,\n emitToolInputStart: (\n controller: TransformStreamDefaultController<LanguageModelV3StreamPart>,\n toolName: string\n ) => StreamingToolCallState\n) {\n return (\n controller: TransformStreamDefaultController<LanguageModelV3StreamPart>\n ) => {\n while (true) {\n const currentToolCall = getCurrentToolCall();\n if (currentToolCall) {\n const result = processToolCallInBuffer({\n buffer: getBuffer(),\n currentToolCall,\n tools,\n options,\n controller,\n flushText,\n setBuffer,\n parseOptions,\n emitToolInputProgress,\n });\n setBuffer(result.buffer);\n setCurrentToolCall(result.currentToolCall);\n if (result.shouldBreak) {\n break;\n }\n } else {\n const result = processNoToolCallInBuffer({\n buffer: getBuffer(),\n toolNames,\n controller,\n flushText,\n tools,\n options,\n parseOptions,\n setBuffer,\n emitToolInputStart,\n });\n setBuffer(result.buffer);\n setCurrentToolCall(result.currentToolCall);\n if (result.shouldBreak) {\n break;\n }\n if (result.shouldContinue) {\n continue;\n }\n break;\n }\n }\n };\n}\n\nfunction findToolCallsWithFallbacks(\n text: string,\n toolNames: string[]\n): { parseText: string; toolCalls: ReturnType<typeof findToolCalls> } {\n let parseText = text;\n let toolCalls = findToolCalls(parseText, toolNames);\n\n if (toolCalls.length === 0) {\n const fallbackToolCall = findLinePrefixedToolCall(parseText, toolNames);\n if (fallbackToolCall !== null) {\n toolCalls.push(fallbackToolCall);\n }\n }\n\n if (toolCalls.length === 0) {\n const repaired = tryRepairXmlSelfClosingRootWithBody(parseText, toolNames);\n if (repaired) {\n const repairedCalls = findToolCalls(repaired, toolNames);\n if (repairedCalls.length > 0) {\n parseText = repaired;\n toolCalls = repairedCalls;\n }\n }\n }\n\n return { parseText, toolCalls };\n}\n\nexport const xmlProtocol = (\n protocolOptions?: XmlProtocolOptions\n): TCMCoreProtocol => {\n const parseOptions = {\n repair: true,\n noChildNodes: [],\n ...(protocolOptions?.parseOptions ?? {}),\n };\n\n return {\n formatTools({ tools, toolSystemPromptTemplate }) {\n return toolSystemPromptTemplate(tools || []);\n },\n\n formatToolCall(toolCall: LanguageModelV3ToolCall): string {\n let args: unknown = {};\n if (toolCall.input != null) {\n try {\n args = JSON.parse(toolCall.input);\n } catch {\n args = toolCall.input;\n }\n }\n return stringify(toolCall.toolName, args, {\n suppressEmptyNode: false,\n format: true,\n minimalEscaping: true,\n });\n },\n\n parseGeneratedText({ text, tools, options }) {\n const toolNames = tools.map((t) => t.name).filter(Boolean) as string[];\n if (toolNames.length === 0) {\n return [{ type: \"text\", text }];\n }\n\n const processedElements: LanguageModelV3Content[] = [];\n let currentIndex = 0;\n\n const { parseText, toolCalls } = findToolCallsWithFallbacks(\n text,\n toolNames\n );\n\n for (const tc of toolCalls) {\n if (tc.startIndex > currentIndex) {\n processedElements.push({\n type: \"text\",\n text: parseText.substring(currentIndex, tc.startIndex),\n });\n }\n processToolCall({\n toolCall: tc,\n tools,\n options,\n text: parseText,\n processedElements,\n parseOptions,\n });\n currentIndex = tc.endIndex;\n }\n\n if (currentIndex < parseText.length) {\n processedElements.push({\n type: \"text\",\n text: parseText.substring(currentIndex),\n });\n }\n\n return processedElements;\n },\n\n createStreamParser({ tools, options }) {\n const toolNames = tools.map((t) => t.name).filter(Boolean) as string[];\n let buffer = \"\";\n let currentToolCall: StreamingToolCallState | null = null;\n let currentTextId: string | null = null;\n let hasEmittedTextStart = false;\n\n const flushText = createFlushTextHandler(\n () => currentTextId,\n (newId: string | null) => {\n currentTextId = newId;\n },\n () => hasEmittedTextStart,\n (value: boolean) => {\n hasEmittedTextStart = value;\n }\n );\n\n const emitToolInputStart = (\n controller: TransformStreamDefaultController<LanguageModelV3StreamPart>,\n toolName: string\n ): StreamingToolCallState => {\n flushText(controller);\n const next: StreamingToolCallState = {\n name: toolName,\n toolCallId: generateToolCallId(),\n emittedInput: \"\",\n lastProgressGtIndex: null,\n lastProgressFullInput: null,\n };\n controller.enqueue({\n type: \"tool-input-start\",\n id: next.toolCallId,\n toolName,\n });\n return next;\n };\n\n const emitToolInputProgress = (\n controller: TransformStreamDefaultController<LanguageModelV3StreamPart>,\n toolCall: StreamingToolCallState,\n toolContent: string\n ) => {\n const progressGtIndex = toolContent.lastIndexOf(\">\");\n if (toolCall.lastProgressGtIndex === progressGtIndex) {\n const cached = toolCall.lastProgressFullInput;\n if (cached == null) {\n return;\n }\n if (cached === \"{}\" && toolContent.trim().length === 0) {\n return;\n }\n const prefixCandidate = toIncompleteJsonPrefix(cached);\n emitPrefixDelta({\n controller,\n id: toolCall.toolCallId,\n state: toolCall,\n candidate: prefixCandidate,\n });\n return;\n }\n\n const toolSchema = getToolSchema(tools, toolCall.name);\n const fullInput = parseXmlContentForStreamProgress({\n toolContent,\n toolSchema,\n parseOptions,\n });\n toolCall.lastProgressGtIndex = progressGtIndex;\n toolCall.lastProgressFullInput = fullInput;\n if (fullInput == null) {\n return;\n }\n if (fullInput === \"{}\" && toolContent.trim().length === 0) {\n return;\n }\n const prefixCandidate = toIncompleteJsonPrefix(fullInput);\n emitPrefixDelta({\n controller,\n id: toolCall.toolCallId,\n state: toolCall,\n candidate: prefixCandidate,\n });\n };\n\n const finalizeUnclosedToolCall = (\n controller: TransformStreamDefaultController<LanguageModelV3StreamPart>\n ) => {\n if (!currentToolCall) {\n return;\n }\n\n emitToolInputProgress(controller, currentToolCall, buffer);\n const parseConfig = {\n ...parseOptions,\n onError:\n options?.onError ??\n (parseOptions as { onError?: ParserOptions[\"onError\"] } | undefined)\n ?.onError,\n };\n\n const toolSchema = getToolSchema(tools, currentToolCall.name);\n flushText(controller);\n try {\n if (hasNonWhitespaceTopLevelText(buffer)) {\n throw new Error(\n \"Cannot reconcile unclosed XML tool call with top-level plain text.\"\n );\n }\n const parsedResult = parse(buffer, toolSchema, parseConfig);\n const finalInput = JSON.stringify(parsedResult);\n emitFinalRemainder({\n controller,\n id: currentToolCall.toolCallId,\n state: currentToolCall,\n finalFullJson: finalInput,\n onMismatch: options?.onError,\n });\n controller.enqueue({\n type: \"tool-input-end\",\n id: currentToolCall.toolCallId,\n });\n controller.enqueue({\n type: \"tool-call\",\n toolCallId: currentToolCall.toolCallId,\n toolName: currentToolCall.name,\n input: finalInput,\n });\n } catch (error) {\n controller.enqueue({\n type: \"tool-input-end\",\n id: currentToolCall.toolCallId,\n });\n const unfinishedContent = `<${currentToolCall.name}>${buffer}`;\n options?.onError?.(\n \"Could not complete streaming XML tool call at finish.\",\n { toolCall: unfinishedContent, error }\n );\n if (shouldEmitRawToolCallTextOnError(options)) {\n flushText(controller, unfinishedContent);\n }\n }\n\n buffer = \"\";\n currentToolCall = null;\n };\n\n const processBuffer = createProcessBufferHandler(\n () => buffer,\n (newBuffer: string) => {\n buffer = newBuffer;\n },\n () => currentToolCall,\n (newToolCall: StreamingToolCallState | null) => {\n currentToolCall = newToolCall;\n },\n tools,\n options,\n toolNames,\n flushText,\n parseOptions,\n emitToolInputProgress,\n emitToolInputStart\n );\n\n return new TransformStream({\n // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: Stateful stream parsing requires branching over chunk lifecycle and parser states.\n transform(chunk, controller) {\n if (chunk.type === \"finish\") {\n if (currentToolCall) {\n finalizeUnclosedToolCall(controller);\n } else if (buffer) {\n flushText(controller, buffer);\n buffer = \"\";\n }\n flushText(controller);\n controller.enqueue(chunk);\n return;\n }\n\n if (chunk.type !== \"text-delta\") {\n if (currentToolCall) {\n // Keep an open XML tool call alive across non-text stream chunks\n // so mixed-mode streams (e.g. reasoning) can continue to complete it.\n } else if (buffer) {\n flushText(controller, buffer);\n buffer = \"\";\n }\n controller.enqueue(chunk);\n return;\n }\n\n const textContent =\n (chunk as unknown as { delta?: string }).delta ?? \"\";\n buffer += textContent;\n processBuffer(controller);\n },\n flush(controller) {\n if (currentToolCall) {\n finalizeUnclosedToolCall(controller);\n } else if (buffer) {\n flushText(controller, buffer);\n buffer = \"\";\n }\n if (currentTextId && hasEmittedTextStart) {\n controller.enqueue({\n type: \"text-end\",\n id: currentTextId,\n });\n hasEmittedTextStart = false;\n currentTextId = null;\n }\n },\n });\n },\n\n extractToolCallSegments({ text, tools }) {\n const toolNames = tools.map((t) => t.name).filter(Boolean) as string[];\n if (toolNames.length === 0) {\n return [];\n }\n\n return findToolCalls(text, toolNames).map((tc) => tc.segment);\n },\n };\n};\n","import type {\n LanguageModelV3Content,\n LanguageModelV3StreamPart,\n LanguageModelV3ToolCall,\n} from \"@ai-sdk/provider\";\nimport YAML from \"yaml\";\nimport { generateToolCallId } from \"../utils/id\";\nimport {\n addTextSegment,\n createFlushTextHandler,\n} from \"../utils/protocol-utils\";\nimport { escapeRegExp } from \"../utils/regex\";\nimport { NAME_CHAR_RE, WHITESPACE_REGEX } from \"../utils/regex-constants\";\nimport {\n emitFinalRemainder,\n emitPrefixDelta,\n toIncompleteJsonPrefix,\n} from \"../utils/streamed-tool-input-delta\";\nimport { tryRepairXmlSelfClosingRootWithBody } from \"../utils/xml-root-repair\";\nimport type { ParserOptions, TCMCoreProtocol } from \"./protocol-interface\";\n\nexport interface YamlProtocolOptions {\n /**\n * Whether to include a system prompt example showing YAML multiline syntax.\n * @default true\n */\n includeMultilineExample?: boolean;\n}\n\nfunction shouldEmitRawToolCallTextOnError(options?: ParserOptions): boolean {\n return options?.emitRawToolCallTextOnError === true;\n}\n\nconst selfClosingTagCache = new Map<string, RegExp>();\n\nfunction getSelfClosingTagPattern(toolName: string): RegExp {\n let pattern = selfClosingTagCache.get(toolName);\n if (!pattern) {\n pattern = new RegExp(`<\\\\s*${escapeRegExp(toolName)}\\\\s*/>`, \"g\");\n selfClosingTagCache.set(toolName, pattern);\n }\n return pattern;\n}\n\nconst LEADING_WHITESPACE_RE = /^(\\s*)/;\nconst INCOMPLETE_MAPPING_TAIL_RE = /^[^:[\\]{}-][^:]*:\\s*$/;\nconst INCOMPLETE_SEQUENCE_TAIL_RE = /^-\\s*$/;\nconst BLOCK_SCALAR_KEY_RE = /:\\s*[|>][-+0-9]*\\s*$/;\nconst PLAIN_MAPPING_VALUE_RE = /^[^:[\\]{}-][^:]*:\\s*(.+)$/;\nconst PLAIN_SEQUENCE_VALUE_RE = /^-\\s+(.+)$/;\n\ninterface LastMeaningfulLineInfo {\n index: number;\n raw: string;\n trimmed: string;\n indent: number;\n}\n\nfunction normalizeYamlContent(yamlContent: string): {\n normalized: string;\n nonEmptyLines: string[];\n} {\n let normalized = yamlContent;\n if (normalized.startsWith(\"\\n\")) {\n normalized = normalized.slice(1);\n }\n\n const lines = normalized.split(\"\\n\");\n const nonEmptyLines = lines.filter((line) => line.trim().length > 0);\n if (nonEmptyLines.length === 0) {\n return { normalized: \"\", nonEmptyLines };\n }\n\n const minIndent = Math.min(\n ...nonEmptyLines.map((line) => {\n const match = line.match(LEADING_WHITESPACE_RE);\n return match ? match[1].length : 0;\n })\n );\n if (minIndent > 0) {\n normalized = lines.map((line) => line.slice(minIndent)).join(\"\\n\");\n }\n\n return { normalized, nonEmptyLines };\n}\n\nfunction parseYamlDocumentAsMapping(normalized: string): {\n value: Record<string, unknown> | null;\n errors: string[];\n} {\n try {\n const doc = YAML.parseDocument(normalized);\n const errors = doc.errors.map((e: { message: string }) => e.message);\n const result = doc.toJSON();\n\n if (result === null) {\n return { value: {}, errors };\n }\n if (typeof result !== \"object\" || Array.isArray(result)) {\n return { value: null, errors };\n }\n return { value: result as Record<string, unknown>, errors };\n } catch (error) {\n return {\n value: null,\n errors: [\n error instanceof Error ? error.message : \"Unknown YAML parsing error\",\n ],\n };\n }\n}\n\nfunction getLastMeaningfulLineInfo(\n input: string\n): LastMeaningfulLineInfo | null {\n const lines = input.split(\"\\n\");\n let index = lines.length - 1;\n while (index >= 0) {\n const raw = lines[index] ?? \"\";\n const trimmed = raw.trim();\n if (trimmed.length > 0 && !trimmed.startsWith(\"#\")) {\n return {\n index,\n raw,\n trimmed,\n indent: raw.length - raw.trimStart().length,\n };\n }\n index -= 1;\n }\n return null;\n}\n\nfunction dropLastMeaningfulLine(input: string): string | null {\n const lineInfo = getLastMeaningfulLineInfo(input);\n if (!lineInfo) {\n return null;\n }\n\n return input.split(\"\\n\").slice(0, lineInfo.index).join(\"\\n\").trimEnd();\n}\n\nfunction hasIncompleteMappingTail(normalized: string): boolean {\n const lineInfo = getLastMeaningfulLineInfo(normalized);\n if (!lineInfo) {\n return false;\n }\n return INCOMPLETE_MAPPING_TAIL_RE.test(lineInfo.trimmed);\n}\n\nfunction hasIncompleteSequenceTail(normalized: string): boolean {\n const lineInfo = getLastMeaningfulLineInfo(normalized);\n if (!lineInfo) {\n return false;\n }\n return INCOMPLETE_SEQUENCE_TAIL_RE.test(lineInfo.trimmed);\n}\n\nfunction hasSplitNestedKeyTail(normalized: string): boolean {\n const lineInfo = getLastMeaningfulLineInfo(normalized);\n if (!lineInfo) {\n return false;\n }\n\n const { trimmed, indent, index } = lineInfo;\n if (indent === 0) {\n return false;\n }\n if (\n trimmed.startsWith(\"#\") ||\n trimmed.startsWith(\"-\") ||\n trimmed.includes(\":\")\n ) {\n return false;\n }\n\n const lines = normalized.split(\"\\n\");\n let parentIndex = index - 1;\n while (parentIndex >= 0) {\n const parentRaw = lines[parentIndex] ?? \"\";\n const parentTrimmed = parentRaw.trim();\n if (parentTrimmed.length === 0 || parentTrimmed.startsWith(\"#\")) {\n parentIndex -= 1;\n continue;\n }\n\n const parentIndent = parentRaw.length - parentRaw.trimStart().length;\n if (parentIndent >= indent) {\n parentIndex -= 1;\n continue;\n }\n\n if (!parentTrimmed.endsWith(\":\")) {\n return false;\n }\n if (BLOCK_SCALAR_KEY_RE.test(parentTrimmed)) {\n return false;\n }\n return true;\n }\n\n return false;\n}\n\nfunction extractTrailingPlainScalarValue(line: string): string | null {\n if (BLOCK_SCALAR_KEY_RE.test(line)) {\n return null;\n }\n\n const mappingMatch = line.match(PLAIN_MAPPING_VALUE_RE);\n const sequenceMatch = line.match(PLAIN_SEQUENCE_VALUE_RE);\n const value = mappingMatch?.[1] ?? sequenceMatch?.[1];\n if (!value) {\n return null;\n }\n\n const trimmedValue = value.trim();\n if (trimmedValue.length === 0) {\n return null;\n }\n if (trimmedValue.startsWith('\"') || trimmedValue.startsWith(\"'\")) {\n return null;\n }\n if (\n trimmedValue.startsWith(\"{\") ||\n trimmedValue.startsWith(\"[\") ||\n trimmedValue.startsWith(\"|\") ||\n trimmedValue.startsWith(\">\")\n ) {\n return null;\n }\n\n return trimmedValue;\n}\n\nfunction hasUnterminatedPlainScalarTail(normalized: string): boolean {\n if (normalized.endsWith(\"\\n\")) {\n return false;\n }\n\n const lineInfo = getLastMeaningfulLineInfo(normalized);\n if (!lineInfo) {\n return false;\n }\n\n return extractTrailingPlainScalarValue(lineInfo.trimmed) != null;\n}\n\nfunction hasUnstableProgressTail(normalized: string): boolean {\n return (\n hasIncompleteMappingTail(normalized) ||\n hasIncompleteSequenceTail(normalized) ||\n hasSplitNestedKeyTail(normalized) ||\n hasUnterminatedPlainScalarTail(normalized)\n );\n}\n\nfunction trimTrailingNewlineInUnknown(value: unknown): unknown {\n if (typeof value === \"string\") {\n if (value.endsWith(\"\\n\")) {\n return value.slice(0, -1);\n }\n return value;\n }\n\n if (Array.isArray(value)) {\n return value.map((item) => trimTrailingNewlineInUnknown(item));\n }\n\n if (value && typeof value === \"object\") {\n return Object.fromEntries(\n Object.entries(value as Record<string, unknown>).map(([key, item]) => [\n key,\n trimTrailingNewlineInUnknown(item),\n ])\n );\n }\n\n return value;\n}\n\nfunction stabilizeParsedValueForStreamProgress<T>(value: T, source: string): T {\n if (source.endsWith(\"\\n\")) {\n return value;\n }\n\n return trimTrailingNewlineInUnknown(value) as T;\n}\n\n// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: XML tag parsing with nested tag tracking inherently requires complex state management\nfunction findClosingTagEnd(\n text: string,\n contentStart: number,\n toolName: string\n): number {\n let pos = contentStart;\n let depth = 1;\n\n while (pos < text.length) {\n const ltIdx = text.indexOf(\"<\", pos);\n if (ltIdx === -1) {\n break;\n }\n\n const next = text[ltIdx + 1];\n if (next === \"/\") {\n const gtIdx = text.indexOf(\">\", ltIdx);\n if (gtIdx === -1) {\n break;\n }\n\n let p = ltIdx + 2;\n while (p < gtIdx && WHITESPACE_REGEX.test(text[p])) {\n p++;\n }\n const nameStart = p;\n while (p < gtIdx && NAME_CHAR_RE.test(text.charAt(p))) {\n p++;\n }\n const name = text.slice(nameStart, p);\n\n if (name === toolName) {\n depth--;\n if (depth === 0) {\n return gtIdx + 1;\n }\n }\n pos = gtIdx + 1;\n } else if (next === \"!\" || next === \"?\") {\n const gtIdx = text.indexOf(\">\", ltIdx);\n pos = gtIdx === -1 ? text.length : gtIdx + 1;\n } else {\n let p = ltIdx + 1;\n while (p < text.length && WHITESPACE_REGEX.test(text[p])) {\n p++;\n }\n const nameStart = p;\n while (p < text.length && NAME_CHAR_RE.test(text.charAt(p))) {\n p++;\n }\n const name = text.slice(nameStart, p);\n\n const gtIdx = text.indexOf(\">\", p);\n if (gtIdx === -1) {\n break;\n }\n\n let r = gtIdx - 1;\n while (r >= nameStart && WHITESPACE_REGEX.test(text[r])) {\n r--;\n }\n const selfClosing = text[r] === \"/\";\n\n if (name === toolName && !selfClosing) {\n depth++;\n }\n pos = gtIdx + 1;\n }\n }\n\n return -1;\n}\n\nfunction findEarliestTagPosition(\n openIdx: number,\n selfIdx: number\n): { tagStart: number; isSelfClosing: boolean } {\n const hasSelf = selfIdx !== -1;\n const hasOpen = openIdx !== -1;\n\n if (hasSelf && (!hasOpen || selfIdx < openIdx)) {\n return { tagStart: selfIdx, isSelfClosing: true };\n }\n return { tagStart: openIdx, isSelfClosing: false };\n}\n\n/**\n * Find all tool calls in the text for the given tool names.\n */\ninterface ToolCallMatch {\n toolName: string;\n startIndex: number;\n endIndex: number;\n content: string;\n}\n\nfunction collectToolCallsForName(\n text: string,\n toolName: string\n): ToolCallMatch[] {\n const toolCalls: ToolCallMatch[] = [];\n let searchIndex = 0;\n const selfTagRegex = getSelfClosingTagPattern(toolName);\n\n while (searchIndex < text.length) {\n const startTag = `<${toolName}>`;\n const openIdx = text.indexOf(startTag, searchIndex);\n\n selfTagRegex.lastIndex = searchIndex;\n const selfMatch = selfTagRegex.exec(text);\n const selfIdx = selfMatch ? selfMatch.index : -1;\n const selfTagLength = selfMatch ? selfMatch[0].length : 0;\n\n if (openIdx === -1 && selfIdx === -1) {\n break;\n }\n\n const { tagStart, isSelfClosing } = findEarliestTagPosition(\n openIdx,\n selfIdx\n );\n\n if (isSelfClosing) {\n const endIndex = tagStart + selfTagLength;\n toolCalls.push({\n toolName,\n startIndex: tagStart,\n endIndex,\n content: \"\",\n });\n searchIndex = endIndex;\n continue;\n }\n\n const contentStart = tagStart + startTag.length;\n const fullTagEnd = findClosingTagEnd(text, contentStart, toolName);\n if (fullTagEnd !== -1 && fullTagEnd > contentStart) {\n const endTag = `</${toolName}>`;\n const endTagStart = fullTagEnd - endTag.length;\n const content = text.substring(contentStart, endTagStart);\n toolCalls.push({\n toolName,\n startIndex: tagStart,\n endIndex: fullTagEnd,\n content,\n });\n searchIndex = fullTagEnd;\n } else {\n searchIndex = contentStart;\n }\n }\n\n return toolCalls;\n}\n\nfunction findToolCalls(text: string, toolNames: string[]): ToolCallMatch[] {\n const toolCalls = toolNames.flatMap((toolName) =>\n collectToolCallsForName(text, toolName)\n );\n return toolCalls.sort((a, b) => a.startIndex - b.startIndex);\n}\n\n/**\n * Parse YAML content from inside an XML tag.\n * Handles common LLM output issues like inconsistent indentation.\n */\nfunction parseYamlContent(\n yamlContent: string,\n options?: ParserOptions\n): Record<string, unknown> | null {\n const { normalized, nonEmptyLines } = normalizeYamlContent(yamlContent);\n if (nonEmptyLines.length === 0) {\n return {};\n }\n\n const parsed = parseYamlDocumentAsMapping(normalized);\n if (parsed.errors.length > 0) {\n options?.onError?.(\"YAML parse error\", {\n errors: parsed.errors,\n });\n return null;\n }\n\n if (parsed.value === null) {\n options?.onError?.(\"YAML content must be a key-value mapping\", {\n got: \"non-mapping\",\n });\n return null;\n }\n\n return parsed.value;\n}\n\nfunction parseYamlContentForStreamProgress(\n yamlContent: string\n): Record<string, unknown> | null {\n const { normalized, nonEmptyLines } = normalizeYamlContent(yamlContent);\n if (nonEmptyLines.length === 0) {\n return {};\n }\n\n let candidate = normalized;\n while (true) {\n const parsed = parseYamlDocumentAsMapping(candidate);\n if (parsed.errors.length === 0 && !hasUnstableProgressTail(candidate)) {\n if (candidate.trim().length === 0 && normalized.trim().length > 0) {\n return null;\n }\n return stabilizeParsedValueForStreamProgress(parsed.value, candidate);\n }\n\n const truncated = dropLastMeaningfulLine(candidate);\n if (truncated == null) {\n return null;\n }\n if (truncated === candidate) {\n return null;\n }\n candidate = truncated;\n }\n}\n\nfunction processToolCallMatch(\n text: string,\n tc: ToolCallMatch,\n currentIndex: number,\n processedElements: LanguageModelV3Content[],\n options?: ParserOptions\n): number {\n if (tc.startIndex < currentIndex) {\n return currentIndex;\n }\n\n addTextSegment(\n text.substring(currentIndex, tc.startIndex),\n processedElements\n );\n\n const parsedArgs = parseYamlContent(tc.content, options);\n if (parsedArgs !== null) {\n processedElements.push({\n type: \"tool-call\",\n toolCallId: generateToolCallId(),\n toolName: tc.toolName,\n input: JSON.stringify(parsedArgs),\n });\n } else {\n const originalText = text.substring(tc.startIndex, tc.endIndex);\n options?.onError?.(\"Could not parse YAML tool call\", {\n toolCall: originalText,\n });\n processedElements.push({ type: \"text\", text: originalText });\n }\n\n return tc.endIndex;\n}\n\nfunction findEarliestToolTag(\n buffer: string,\n toolNames: string[]\n): { index: number; name: string; selfClosing: boolean; tagLength: number } {\n let bestIndex = -1;\n let bestName = \"\";\n let bestSelfClosing = false;\n let bestTagLength = 0;\n\n for (const name of toolNames) {\n const openTag = `<${name}>`;\n const selfTagRegex = getSelfClosingTagPattern(name);\n const idxOpen = buffer.indexOf(openTag);\n selfTagRegex.lastIndex = 0;\n const selfMatch = selfTagRegex.exec(buffer);\n const idxSelf = selfMatch ? selfMatch.index : -1;\n\n if (idxOpen !== -1 && (bestIndex === -1 || idxOpen < bestIndex)) {\n bestIndex = idxOpen;\n bestName = name;\n bestSelfClosing = false;\n bestTagLength = openTag.length;\n }\n if (idxSelf !== -1 && (bestIndex === -1 || idxSelf < bestIndex)) {\n bestIndex = idxSelf;\n bestName = name;\n bestSelfClosing = true;\n bestTagLength = selfMatch ? selfMatch[0].length : 0;\n }\n }\n\n return {\n index: bestIndex,\n name: bestName,\n selfClosing: bestSelfClosing,\n tagLength: bestTagLength,\n };\n}\n\nfunction stripTrailingPartialCloseTag(\n content: string,\n toolName: string\n): string {\n const closeTag = `</${toolName}>`;\n const lastLineBreakIndex = Math.max(\n content.lastIndexOf(\"\\n\"),\n content.lastIndexOf(\"\\r\")\n );\n const lineStartIndex = lastLineBreakIndex === -1 ? 0 : lastLineBreakIndex + 1;\n const trailingLine = content.slice(lineStartIndex);\n const trimmedTrailingLine = trailingLine.trim();\n\n if (\n trimmedTrailingLine.length === 0 ||\n !trimmedTrailingLine.startsWith(\"</\") ||\n trimmedTrailingLine === closeTag ||\n !closeTag.startsWith(trimmedTrailingLine)\n ) {\n return content;\n }\n\n const leadingWhitespaceLength =\n trailingLine.length - trailingLine.trimStart().length;\n const preservedLeadingWhitespace = trailingLine.slice(\n 0,\n leadingWhitespaceLength\n );\n const contentWithoutPartial = `${content.slice(\n 0,\n lineStartIndex\n )}${preservedLeadingWhitespace}`;\n\n return contentWithoutPartial.trimEnd();\n}\n\nexport const yamlProtocol = (\n // eslint-disable-next-line @typescript-eslint/no-unused-vars -- reserved for future extensibility\n _protocolOptions?: YamlProtocolOptions\n): TCMCoreProtocol => {\n return {\n formatTools({ tools, toolSystemPromptTemplate }) {\n return toolSystemPromptTemplate(tools || []);\n },\n\n formatToolCall(toolCall: LanguageModelV3ToolCall): string {\n let args: Record<string, unknown> = {};\n if (toolCall.input != null) {\n try {\n args = JSON.parse(toolCall.input) as Record<string, unknown>;\n } catch {\n args = { value: toolCall.input };\n }\n }\n const yamlContent = YAML.stringify(args);\n return `<${toolCall.toolName}>\\n${yamlContent}</${toolCall.toolName}>`;\n },\n\n parseGeneratedText({ text, tools, options }) {\n const toolNames = tools.map((t) => t.name).filter(Boolean) as string[];\n if (toolNames.length === 0) {\n return [{ type: \"text\", text }];\n }\n\n const processedElements: LanguageModelV3Content[] = [];\n let currentIndex = 0;\n let parseText = text;\n\n let toolCalls = findToolCalls(parseText, toolNames);\n if (toolCalls.length === 0) {\n const repaired = tryRepairXmlSelfClosingRootWithBody(\n parseText,\n toolNames\n );\n if (repaired) {\n const repairedCalls = findToolCalls(repaired, toolNames);\n if (repairedCalls.length > 0) {\n parseText = repaired;\n toolCalls = repairedCalls;\n }\n }\n }\n\n for (const tc of toolCalls) {\n currentIndex = processToolCallMatch(\n parseText,\n tc,\n currentIndex,\n processedElements,\n options\n );\n }\n\n if (currentIndex < parseText.length) {\n addTextSegment(parseText.substring(currentIndex), processedElements);\n }\n\n return processedElements;\n },\n\n createStreamParser({ tools, options }) {\n const toolNames = tools.map((t) => t.name).filter(Boolean) as string[];\n let buffer = \"\";\n let currentToolCall: {\n name: string;\n toolCallId: string;\n emittedInput: string;\n } | null = null;\n let currentTextId: string | null = null;\n let hasEmittedTextStart = false;\n\n const flushText = createFlushTextHandler(\n () => currentTextId,\n (newId: string | null) => {\n currentTextId = newId;\n },\n () => hasEmittedTextStart,\n (value: boolean) => {\n hasEmittedTextStart = value;\n }\n );\n\n const emitToolInputProgress = (\n controller: TransformStreamDefaultController<LanguageModelV3StreamPart>,\n toolContent: string\n ) => {\n if (!currentToolCall) {\n return;\n }\n const parsedArgs = parseYamlContentForStreamProgress(toolContent);\n if (parsedArgs === null) {\n return;\n }\n const fullInput = JSON.stringify(parsedArgs);\n if (fullInput === \"{}\" && toolContent.trim().length === 0) {\n return;\n }\n const prefixCandidate = toIncompleteJsonPrefix(fullInput);\n emitPrefixDelta({\n controller,\n id: currentToolCall.toolCallId,\n state: currentToolCall,\n candidate: prefixCandidate,\n });\n };\n\n const processToolCallEnd = (\n controller: TransformStreamDefaultController<LanguageModelV3StreamPart>,\n toolContent: string,\n toolName: string,\n toolCallId: string\n ) => {\n const parsedArgs = parseYamlContent(toolContent, options);\n flushText(controller);\n if (parsedArgs !== null) {\n const finalInput = JSON.stringify(parsedArgs);\n if (currentToolCall && currentToolCall.toolCallId === toolCallId) {\n emitFinalRemainder({\n controller,\n id: toolCallId,\n state: currentToolCall,\n finalFullJson: finalInput,\n onMismatch: options?.onError,\n });\n }\n controller.enqueue({\n type: \"tool-input-end\",\n id: toolCallId,\n });\n controller.enqueue({\n type: \"tool-call\",\n toolCallId,\n toolName,\n input: finalInput,\n });\n } else {\n controller.enqueue({\n type: \"tool-input-end\",\n id: toolCallId,\n });\n const original = `<${toolName}>${toolContent}</${toolName}>`;\n options?.onError?.(\"Could not parse streaming YAML tool call\", {\n toolCall: original,\n });\n if (shouldEmitRawToolCallTextOnError(options)) {\n flushText(controller, original);\n }\n }\n };\n\n const finalizeUnclosedToolCall = (\n controller: TransformStreamDefaultController<LanguageModelV3StreamPart>\n ) => {\n if (!currentToolCall) {\n return;\n }\n\n emitToolInputProgress(controller, buffer);\n const { name: toolName, toolCallId } = currentToolCall;\n const reconciledBuffer = stripTrailingPartialCloseTag(buffer, toolName);\n const parsedArgs = parseYamlContent(reconciledBuffer, options);\n flushText(controller);\n if (parsedArgs !== null) {\n const finalInput = JSON.stringify(parsedArgs);\n emitFinalRemainder({\n controller,\n id: toolCallId,\n state: currentToolCall,\n finalFullJson: finalInput,\n onMismatch: options?.onError,\n });\n controller.enqueue({\n type: \"tool-input-end\",\n id: toolCallId,\n });\n controller.enqueue({\n type: \"tool-call\",\n toolCallId,\n toolName,\n input: finalInput,\n });\n } else {\n controller.enqueue({\n type: \"tool-input-end\",\n id: toolCallId,\n });\n const unfinishedContent = `<${toolName}>${buffer}`;\n options?.onError?.(\n \"Could not complete streaming YAML tool call at finish.\",\n { toolCall: unfinishedContent }\n );\n if (shouldEmitRawToolCallTextOnError(options)) {\n flushText(controller, unfinishedContent);\n }\n }\n\n buffer = \"\";\n currentToolCall = null;\n };\n\n const handlePendingToolCall = (\n controller: TransformStreamDefaultController<LanguageModelV3StreamPart>,\n endTag: string,\n toolName: string\n ): boolean => {\n const endIdx = buffer.indexOf(endTag);\n if (endIdx === -1) {\n emitToolInputProgress(controller, buffer);\n return false;\n }\n\n const content = buffer.substring(0, endIdx);\n emitToolInputProgress(controller, content);\n buffer = buffer.substring(endIdx + endTag.length);\n processToolCallEnd(\n controller,\n content,\n toolName,\n currentToolCall?.toolCallId ?? generateToolCallId()\n );\n currentToolCall = null;\n return true;\n };\n\n const flushSafeText = (\n controller: TransformStreamDefaultController<LanguageModelV3StreamPart>\n ): void => {\n const maxTagLen = toolNames.length\n ? Math.max(...toolNames.map((n) => `<${n} />`.length))\n : 0;\n const tail = Math.max(0, maxTagLen - 1);\n const safeLen = Math.max(0, buffer.length - tail);\n if (safeLen > 0) {\n flushText(controller, buffer.slice(0, safeLen));\n buffer = buffer.slice(safeLen);\n }\n };\n\n const handleNewToolTag = (\n controller: TransformStreamDefaultController<LanguageModelV3StreamPart>,\n tagIndex: number,\n tagName: string,\n selfClosing: boolean,\n tagLength: number\n ): void => {\n if (tagIndex > 0) {\n flushText(controller, buffer.substring(0, tagIndex));\n }\n\n flushText(controller);\n\n if (selfClosing) {\n buffer = buffer.substring(tagIndex + tagLength);\n const toolCallId = generateToolCallId();\n currentToolCall = {\n name: tagName,\n toolCallId,\n emittedInput: \"\",\n };\n controller.enqueue({\n type: \"tool-input-start\",\n id: toolCallId,\n toolName: tagName,\n });\n processToolCallEnd(controller, \"\", tagName, toolCallId);\n currentToolCall = null;\n } else {\n const startTag = `<${tagName}>`;\n buffer = buffer.substring(tagIndex + startTag.length);\n currentToolCall = {\n name: tagName,\n toolCallId: generateToolCallId(),\n emittedInput: \"\",\n };\n controller.enqueue({\n type: \"tool-input-start\",\n id: currentToolCall.toolCallId,\n toolName: tagName,\n });\n }\n };\n\n const processBuffer = (\n controller: TransformStreamDefaultController<LanguageModelV3StreamPart>\n ) => {\n while (true) {\n if (currentToolCall) {\n const toolName = currentToolCall.name;\n const endTag = `</${toolName}>`;\n if (!handlePendingToolCall(controller, endTag, toolName)) {\n break;\n }\n } else {\n const { index, name, selfClosing, tagLength } = findEarliestToolTag(\n buffer,\n toolNames\n );\n\n if (index === -1) {\n flushSafeText(controller);\n break;\n }\n\n handleNewToolTag(controller, index, name, selfClosing, tagLength);\n }\n }\n };\n\n return new TransformStream({\n transform(chunk, controller) {\n if (chunk.type === \"finish\") {\n if (currentToolCall) {\n finalizeUnclosedToolCall(controller);\n } else if (buffer) {\n flushText(controller, buffer);\n buffer = \"\";\n }\n flushText(controller);\n controller.enqueue(chunk);\n return;\n }\n\n if (chunk.type !== \"text-delta\") {\n if (!currentToolCall && buffer) {\n flushText(controller, buffer);\n buffer = \"\";\n }\n controller.enqueue(chunk);\n return;\n }\n\n const textContent =\n (chunk as unknown as { delta?: string }).delta ?? \"\";\n buffer += textContent;\n processBuffer(controller);\n },\n flush(controller) {\n if (currentToolCall) {\n finalizeUnclosedToolCall(controller);\n } else if (buffer) {\n flushText(controller, buffer);\n buffer = \"\";\n }\n if (currentTextId && hasEmittedTextStart) {\n controller.enqueue({\n type: \"text-end\",\n id: currentTextId,\n });\n hasEmittedTextStart = false;\n currentTextId = null;\n }\n },\n });\n },\n\n extractToolCallSegments({ text, tools }) {\n const toolNames = tools.map((t) => t.name).filter(Boolean) as string[];\n if (toolNames.length === 0) {\n return [];\n }\n\n return findToolCalls(text, toolNames).map(\n (tc) => `<${tc.toolName}>${tc.content}</${tc.toolName}>`\n );\n },\n };\n};\n","import type {\n JSONSchema7,\n LanguageModelV3FunctionTool,\n LanguageModelV3ProviderTool,\n} from \"@ai-sdk/provider\";\n\n/**\n * Dynamically generates a JSON Schema using 'if/then/else' to simulate 'oneOf' behavior\n * for tool call validation. This is useful when the environment does not support 'oneOf' directly.\n *\n * The generated schema validates that the incoming data (a tool call)\n * matches exactly one of the provided tools based on its 'name' property,\n * and then applies the corresponding tool's 'parameters' schema to its 'arguments' property.\n *\n * @param tools An array of tool definitions (LanguageModelV3FunctionTool or LanguageModelV3ProviderTool).\n * Each tool must have a unique 'name' and its 'parameters' must be a valid JSON Schema.\n * @returns A JSONSchema7 object representing the dynamic validation logic.\n * @throws Error if a 'provider' tool is encountered, as they are not supported by this middleware.\n */\nexport function createDynamicIfThenElseSchema(\n tools: (LanguageModelV3FunctionTool | LanguageModelV3ProviderTool)[]\n): JSONSchema7 {\n // Explicitly specify the return type as JSONSchema7\n let currentSchema: JSONSchema7 = {};\n const toolNames: string[] = [];\n\n for (let i = tools.length - 1; i >= 0; i -= 1) {\n const tool = tools[i];\n\n if (tool.type === \"provider\") {\n throw new Error(\n \"Provider tools are not supported by this middleware. Please use function tools.\"\n );\n }\n\n toolNames.unshift(tool.name);\n\n const toolCondition: JSONSchema7 = {\n if: {\n properties: {\n name: {\n const: tool.name,\n },\n },\n required: [\"name\"],\n },\n // biome-ignore lint/suspicious/noThenProperty: JSON Schema uses 'then' as a keyword\n then: {\n properties: {\n name: {\n const: tool.name,\n },\n arguments: tool.inputSchema,\n },\n required: [\"name\", \"arguments\"],\n },\n };\n\n if (Object.keys(currentSchema).length > 0) {\n toolCondition.else = currentSchema;\n }\n\n currentSchema = toolCondition;\n }\n\n return {\n type: \"object\", // Explicitly specify type as \"object\"\n properties: {\n name: {\n type: \"string\",\n description: \"Name of the tool to call\",\n enum: toolNames,\n },\n arguments: {\n type: \"object\", // By default, arguments is also specified as object type\n description: \"Argument object to be passed to the tool\",\n },\n },\n required: [\"name\", \"arguments\"],\n ...currentSchema,\n };\n}\n","export type OnErrorFn = (\n message: string,\n metadata?: Record<string, unknown>\n) => void;\n\ninterface ProviderOptionsWithOnError {\n toolCallMiddleware?: {\n onError?: OnErrorFn;\n };\n}\n\nexport function extractOnErrorOption(\n providerOptions?: unknown\n): { onError?: OnErrorFn } | undefined {\n if (providerOptions && typeof providerOptions === \"object\") {\n const onError = (providerOptions as ProviderOptionsWithOnError)\n .toolCallMiddleware?.onError;\n return onError ? { onError } : undefined;\n }\n return;\n}\n","import type {\n JSONSchema7,\n LanguageModelV3FunctionTool,\n} from \"@ai-sdk/provider\";\n\ntype OnErrorFn = (message: string, metadata?: Record<string, unknown>) => void;\n\nexport interface ToolCallMiddlewareProviderOptions {\n toolCallMiddleware?: {\n // onError?: (message: string, metadata?: Record<string, unknown>) => void;\n // Optional debug summary container that middleware can populate.\n // Values must be JSON-safe.\n debugSummary?: {\n originalText?: string;\n toolCalls?: string; // JSON string of array of { toolName, input }\n };\n\n // INTERNAL: Set by transform-handler. Used for internal propagation of tool-choice.\n toolChoice?: { type: string; toolName?: string };\n // INTERNAL: Set by transform-handler. Used for internal propagation of params.tools.\n originalTools?: Array<{\n name: string;\n inputSchema: string; // Stringified JSONSchema7\n }>;\n };\n}\n\nexport const originalToolsSchema = {\n encode: encodeOriginalTools,\n decode: decodeOriginalTools,\n};\n\ninterface EncodedOriginalTool {\n name: string;\n inputSchema: string; // stringified JSONSchema7\n}\n\ninterface DecodeOriginalToolsOptions {\n onError?: OnErrorFn;\n}\n\nexport function encodeOriginalTools(\n tools: LanguageModelV3FunctionTool[] | undefined\n): Array<{ name: string; inputSchema: string }> {\n return (\n tools?.map((t) => ({\n name: t.name,\n inputSchema: JSON.stringify(t.inputSchema),\n })) || []\n );\n}\n\nexport function decodeOriginalTools(\n originalTools: EncodedOriginalTool[] | undefined,\n options?: DecodeOriginalToolsOptions\n): LanguageModelV3FunctionTool[] {\n if (!originalTools) {\n return [];\n }\n\n const decodedTools: LanguageModelV3FunctionTool[] = [];\n\n for (const [index, tool] of originalTools.entries()) {\n if (!tool || typeof tool.name !== \"string\") {\n options?.onError?.(\"Invalid originalTools entry: missing tool name\", {\n index,\n tool,\n });\n continue;\n }\n\n if (typeof tool.inputSchema !== \"string\") {\n options?.onError?.(\n \"Invalid originalTools entry: inputSchema must be a string\",\n {\n index,\n toolName: tool.name,\n }\n );\n continue;\n }\n\n try {\n decodedTools.push({\n type: \"function\",\n name: tool.name,\n inputSchema: JSON.parse(tool.inputSchema) as JSONSchema7,\n });\n } catch (error) {\n options?.onError?.(\n \"Failed to decode originalTools input schema, using permissive fallback schema\",\n {\n index,\n toolName: tool.name,\n inputSchema: tool.inputSchema,\n error: error instanceof Error ? error.message : String(error),\n }\n );\n decodedTools.push({\n type: \"function\",\n name: tool.name,\n inputSchema: { type: \"object\" },\n });\n }\n }\n\n return decodedTools;\n}\n\nexport function extractToolNamesFromOriginalTools(\n originalTools:\n | Array<{\n name: string;\n inputSchema: string; // stringified JSONSchema7\n }>\n | undefined\n): string[] {\n return originalTools?.map((t) => t.name) || [];\n}\n\nexport function isToolChoiceActive(params: {\n providerOptions?: {\n toolCallMiddleware?: {\n toolChoice?: { type: string };\n };\n };\n}): boolean {\n const toolChoice = params.providerOptions?.toolCallMiddleware?.toolChoice;\n return !!(\n typeof params.providerOptions === \"object\" &&\n params.providerOptions !== null &&\n typeof params.providerOptions?.toolCallMiddleware === \"object\" &&\n toolChoice &&\n typeof toolChoice === \"object\" &&\n (toolChoice.type === \"tool\" || toolChoice.type === \"required\")\n );\n}\n","import type { ToolResultPart } from \"@ai-sdk/provider-utils\";\n\nexport function isToolResultPart(content: unknown): content is ToolResultPart {\n if (!content || typeof content !== \"object\") {\n return false;\n }\n const c = content as Record<string, unknown>;\n return (\n c.type === \"tool-result\" &&\n typeof c.toolName === \"string\" &&\n typeof c.toolCallId === \"string\" &&\n \"output\" in c\n );\n}\n\nexport function hasInputProperty(obj: unknown): obj is { input?: unknown } {\n return (\n typeof obj === \"object\" &&\n obj !== null &&\n \"input\" in (obj as Record<string, unknown>)\n );\n}\n","import type {\n LanguageModelV3Content,\n LanguageModelV3FunctionTool,\n} from \"@ai-sdk/provider\";\nimport { parse as parseRJSON } from \"../../rjson\";\nimport { getSchemaType, unwrapJsonSchema } from \"../../schema-coerce\";\nimport { generateToolCallId } from \"./id\";\n\ninterface ToolCallCandidate {\n toolName: string;\n input: string;\n}\n\ninterface JsonCandidate {\n text: string;\n startIndex: number;\n endIndex: number;\n}\n\ninterface JsonScanState {\n depth: number;\n inString: boolean;\n escaping: boolean;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction safeStringify(value: unknown): string {\n try {\n return JSON.stringify(value ?? {});\n } catch {\n return \"{}\";\n }\n}\n\nfunction parseJsonCandidate(candidateText: string): unknown {\n try {\n return parseRJSON(candidateText);\n } catch {\n return undefined;\n }\n}\n\nfunction extractCodeBlockCandidates(text: string): JsonCandidate[] {\n const codeBlockRegex = /```(?:json|yaml|xml)?\\s*([\\s\\S]*?)```/gi;\n const candidates: JsonCandidate[] = [];\n let match: RegExpExecArray | null;\n while (true) {\n match = codeBlockRegex.exec(text);\n if (!match) {\n break;\n }\n const body = match[1]?.trim();\n if (body) {\n const startIndex = match.index ?? 0;\n const endIndex = startIndex + match[0].length;\n candidates.push({\n text: body,\n startIndex,\n endIndex,\n });\n }\n }\n return candidates;\n}\n\nfunction scanJsonChar(state: JsonScanState, char: string): JsonScanState {\n if (state.inString) {\n if (state.escaping) {\n return { ...state, escaping: false };\n }\n if (char === \"\\\\\") {\n return { ...state, escaping: true };\n }\n if (char === '\"') {\n return { ...state, inString: false };\n }\n return state;\n }\n\n if (char === '\"') {\n return { ...state, inString: true };\n }\n if (char === \"{\") {\n return { ...state, depth: state.depth + 1 };\n }\n if (char === \"}\") {\n return { ...state, depth: Math.max(0, state.depth - 1) };\n }\n return state;\n}\n\nfunction extractBalancedJsonObjects(text: string): JsonCandidate[] {\n const maxCandidateLength = 10_000;\n const candidates: JsonCandidate[] = [];\n let state: JsonScanState = { depth: 0, inString: false, escaping: false };\n let currentStart: number | null = null;\n let ignoreCurrent = false;\n\n for (let index = 0; index < text.length; index += 1) {\n const char = text[index];\n\n if (!state.inString && char === \"{\" && state.depth === 0) {\n currentStart = index;\n ignoreCurrent = false;\n }\n\n state = scanJsonChar(state, char);\n\n if (\n currentStart !== null &&\n !ignoreCurrent &&\n index - currentStart + 1 > maxCandidateLength\n ) {\n ignoreCurrent = true;\n }\n\n if (!state.inString && char === \"}\" && state.depth === 0) {\n if (currentStart !== null && !ignoreCurrent) {\n const endIndex = index + 1;\n const candidate = text.slice(currentStart, endIndex);\n if (candidate.length > 1) {\n candidates.push({\n text: candidate,\n startIndex: currentStart,\n endIndex,\n });\n }\n }\n currentStart = null;\n ignoreCurrent = false;\n }\n }\n\n return candidates;\n}\n\nfunction extractTaggedToolCallCandidates(rawText: string): JsonCandidate[] {\n const toolCallRegex = /<tool_call>([\\s\\S]*?)<\\/tool_call>/gi;\n const candidates: JsonCandidate[] = [];\n let match: RegExpExecArray | null;\n while (true) {\n match = toolCallRegex.exec(rawText);\n if (!match) {\n break;\n }\n const body = match[1]?.trim();\n if (!body) {\n continue;\n }\n const startIndex = match.index ?? 0;\n const endIndex = startIndex + match[0].length;\n candidates.push({\n text: body,\n startIndex,\n endIndex,\n });\n }\n return candidates;\n}\n\nfunction extractJsonLikeCandidates(rawText: string): JsonCandidate[] {\n return mergeJsonCandidatesByStart(\n extractTaggedToolCallCandidates(rawText),\n extractCodeBlockCandidates(rawText),\n extractBalancedJsonObjects(rawText)\n );\n}\n\nfunction mergeJsonCandidatesByStart(\n tagged: JsonCandidate[],\n codeBlocks: JsonCandidate[],\n balanced: JsonCandidate[]\n): JsonCandidate[] {\n return [...tagged, ...codeBlocks, ...balanced].sort((a, b) =>\n a.startIndex !== b.startIndex\n ? a.startIndex - b.startIndex\n : b.endIndex - a.endIndex\n );\n}\n\nfunction toToolCallPart(candidate: ToolCallCandidate): LanguageModelV3Content {\n return {\n type: \"tool-call\",\n toolCallId: generateToolCallId(),\n toolName: candidate.toolName,\n input: candidate.input,\n };\n}\n\nfunction toRecoveredParts(\n text: string,\n candidate: JsonCandidate,\n toolCallPart: LanguageModelV3Content\n): LanguageModelV3Content[] {\n const out: LanguageModelV3Content[] = [];\n const prefix = text.slice(0, candidate.startIndex);\n if (prefix.length > 0) {\n out.push({ type: \"text\", text: prefix });\n }\n\n out.push(toolCallPart);\n\n const suffix = text.slice(candidate.endIndex);\n if (suffix.length > 0) {\n out.push({ type: \"text\", text: suffix });\n }\n return out;\n}\n\nfunction parseAsToolPayload(\n payload: unknown,\n tools: LanguageModelV3FunctionTool[]\n): ToolCallCandidate | null {\n if (!isRecord(payload)) {\n return null;\n }\n\n const toolName =\n typeof payload.name === \"string\" && payload.name.trim().length > 0\n ? payload.name.trim()\n : null;\n if (!toolName) {\n return null;\n }\n\n if (!tools.some((tool) => tool.name === toolName)) {\n return null;\n }\n\n const rawArgs = Object.hasOwn(payload, \"arguments\") ? payload.arguments : {};\n if (!isRecord(rawArgs)) {\n return null;\n }\n\n return {\n toolName,\n input: safeStringify(rawArgs),\n };\n}\n\nfunction isLikelyArgumentsShapeForTool(\n args: Record<string, unknown>,\n tool: LanguageModelV3FunctionTool\n): boolean {\n const unwrapped = unwrapJsonSchema(tool.inputSchema);\n if (!isRecord(unwrapped)) {\n return false;\n }\n if (getSchemaType(unwrapped) !== \"object\") {\n return false;\n }\n\n const properties = unwrapped.properties;\n if (!isRecord(properties)) {\n return false;\n }\n\n const keys = Object.keys(args);\n if (keys.length === 0) {\n return false;\n }\n\n const knownKeys = keys.filter((key) => Object.hasOwn(properties, key));\n if (knownKeys.length === 0) {\n return false;\n }\n\n if (\n unwrapped.additionalProperties === false &&\n knownKeys.length !== keys.length\n ) {\n return false;\n }\n\n return true;\n}\n\nfunction parseAsArgumentsOnly(\n payload: unknown,\n tools: LanguageModelV3FunctionTool[]\n): ToolCallCandidate | null {\n if (tools.length !== 1) {\n return null;\n }\n if (!isRecord(payload)) {\n return null;\n }\n const hasNameEnvelope =\n Object.hasOwn(payload, \"name\") &&\n typeof payload.name === \"string\" &&\n payload.name.length > 0;\n const hasArgumentsEnvelope =\n Object.hasOwn(payload, \"arguments\") &&\n (typeof payload.arguments === \"string\" || isRecord(payload.arguments));\n if (hasNameEnvelope || hasArgumentsEnvelope) {\n return null;\n }\n\n const tool = tools[0];\n if (!isLikelyArgumentsShapeForTool(payload, tool)) {\n return null;\n }\n\n return {\n toolName: tool.name,\n input: safeStringify(payload),\n };\n}\n\nexport function recoverToolCallFromJsonCandidates(\n text: string,\n tools: LanguageModelV3FunctionTool[]\n): LanguageModelV3Content[] | null {\n if (tools.length === 0) {\n return null;\n }\n\n const jsonCandidates = extractJsonLikeCandidates(text);\n for (const jsonCandidate of jsonCandidates) {\n const parsed = parseJsonCandidate(jsonCandidate.text);\n if (parsed === undefined) {\n continue;\n }\n\n const toolPayload = parseAsToolPayload(parsed, tools);\n if (toolPayload) {\n return toRecoveredParts(text, jsonCandidate, toToolCallPart(toolPayload));\n }\n\n const argsPayload = parseAsArgumentsOnly(parsed, tools);\n if (argsPayload) {\n return toRecoveredParts(text, jsonCandidate, toToolCallPart(argsPayload));\n }\n }\n\n return null;\n}\n","import type {\n LanguageModelV3Content,\n LanguageModelV3FunctionTool,\n LanguageModelV3StreamPart,\n} from \"@ai-sdk/provider\";\nimport { coerceBySchema } from \"../../schema-coerce\";\n\ntype ToolCallLike = Extract<\n LanguageModelV3Content | LanguageModelV3StreamPart,\n { type: \"tool-call\" }\n>;\n\nexport function coerceToolCallInput(\n toolName: string,\n input: unknown,\n tools: LanguageModelV3FunctionTool[]\n): string | undefined {\n let args: unknown = {};\n if (typeof input === \"string\") {\n try {\n args = JSON.parse(input);\n } catch {\n return;\n }\n } else if (input && typeof input === \"object\") {\n args = input;\n } else {\n return;\n }\n\n const schema = tools.find((t) => t.name === toolName)?.inputSchema;\n const coerced = coerceBySchema(args, schema);\n return JSON.stringify(coerced ?? {});\n}\n\nexport function coerceToolCallPart<T extends ToolCallLike>(\n part: T,\n tools: LanguageModelV3FunctionTool[]\n): T {\n const coercedInput = coerceToolCallInput(part.toolName, part.input, tools);\n if (coercedInput === undefined) {\n return part;\n }\n\n return {\n ...part,\n input: coercedInput,\n };\n}\n","import type { LanguageModelV3FunctionTool } from \"@ai-sdk/provider\";\nimport { coerceToolCallInput } from \"./tool-call-coercion\";\n\ntype OnErrorFn = (message: string, metadata?: Record<string, unknown>) => void;\n\ninterface ParseToolChoiceOptions {\n text: string;\n tools: LanguageModelV3FunctionTool[];\n onError?: OnErrorFn;\n errorMessage: string;\n}\n\nfunction ensureNonEmptyToolName(name: unknown): string {\n if (typeof name !== \"string\") {\n return \"unknown\";\n }\n const trimmed = name.trim();\n return trimmed.length > 0 ? trimmed : \"unknown\";\n}\n\nfunction safeStringify(value: unknown): string {\n try {\n return JSON.stringify(value ?? {});\n } catch {\n return \"{}\";\n }\n}\n\nexport function parseToolChoicePayload({\n text,\n tools,\n onError,\n errorMessage,\n}: ParseToolChoiceOptions): { toolName: string; input: string } {\n let parsed: unknown;\n try {\n parsed = JSON.parse(text);\n } catch (error) {\n onError?.(errorMessage, {\n text,\n error: error instanceof Error ? error.message : String(error),\n });\n return { toolName: \"unknown\", input: \"{}\" };\n }\n\n if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n onError?.(\"toolChoice JSON payload must be an object\", {\n parsedType: typeof parsed,\n parsed,\n });\n return { toolName: \"unknown\", input: \"{}\" };\n }\n\n const payload = parsed as Record<string, unknown>;\n const toolName = ensureNonEmptyToolName(payload.name);\n const rawArgs = Object.hasOwn(payload, \"arguments\") ? payload.arguments : {};\n\n if (\n rawArgs == null ||\n typeof rawArgs !== \"object\" ||\n Array.isArray(rawArgs)\n ) {\n onError?.(\"toolChoice arguments must be a JSON object\", {\n toolName,\n arguments: rawArgs,\n });\n return { toolName, input: \"{}\" };\n }\n\n const coercedInput = coerceToolCallInput(toolName, rawArgs, tools);\n\n return {\n toolName,\n input: coercedInput ?? safeStringify(rawArgs),\n };\n}\n","import type {\n LanguageModelV3,\n LanguageModelV3Content,\n LanguageModelV3FunctionTool,\n LanguageModelV3ToolCall,\n} from \"@ai-sdk/provider\";\nimport type { TCMCoreProtocol } from \"./core/protocols/protocol-interface\";\nimport {\n getDebugLevel,\n logParsedChunk,\n logParsedSummary,\n logRawChunk,\n} from \"./core/utils/debug\";\nimport { recoverToolCallFromJsonCandidates } from \"./core/utils/generated-text-json-recovery\";\nimport { generateToolCallId } from \"./core/utils/id\";\nimport { extractOnErrorOption } from \"./core/utils/on-error\";\nimport {\n isToolChoiceActive,\n originalToolsSchema,\n type ToolCallMiddlewareProviderOptions,\n} from \"./core/utils/provider-options\";\nimport { coerceToolCallPart } from \"./core/utils/tool-call-coercion\";\nimport { parseToolChoicePayload } from \"./core/utils/tool-choice\";\n\nfunction logDebugSummary(\n debugSummary: { originalText?: string; toolCalls?: string } | undefined,\n toolCall: LanguageModelV3ToolCall,\n originText: string\n) {\n if (debugSummary) {\n debugSummary.originalText = originText;\n try {\n debugSummary.toolCalls = JSON.stringify([\n { toolName: toolCall.toolName, input: toolCall.input },\n ]);\n } catch {\n // ignore\n }\n } else if (getDebugLevel() === \"parse\") {\n logParsedSummary({ toolCalls: [toolCall], originalText: originText });\n }\n}\n\nasync function handleToolChoice(\n doGenerate: () => ReturnType<LanguageModelV3[\"doGenerate\"]>,\n params: { providerOptions?: ToolCallMiddlewareProviderOptions },\n tools: LanguageModelV3FunctionTool[]\n) {\n const result = await doGenerate();\n const first = result.content?.[0];\n const onError = extractOnErrorOption(params.providerOptions)?.onError;\n\n let toolName = \"unknown\";\n let input = \"{}\";\n if (first && first.type === \"text\") {\n if (getDebugLevel() === \"parse\") {\n logRawChunk(first.text);\n }\n const parsed = parseToolChoicePayload({\n text: first.text,\n tools,\n onError,\n errorMessage:\n \"Failed to parse toolChoice JSON from generated model output\",\n });\n toolName = parsed.toolName;\n input = parsed.input;\n }\n\n const toolCall: LanguageModelV3ToolCall = {\n type: \"tool-call\",\n toolCallId: generateToolCallId(),\n toolName,\n input,\n };\n\n const originText = first && first.type === \"text\" ? first.text : \"\";\n const debugSummary = params.providerOptions?.toolCallMiddleware?.debugSummary;\n logDebugSummary(debugSummary, toolCall, originText);\n\n return {\n ...result,\n content: [toolCall],\n };\n}\n\nfunction parseContent(\n content: LanguageModelV3Content[],\n protocol: TCMCoreProtocol,\n tools: LanguageModelV3FunctionTool[],\n providerOptions?: ToolCallMiddlewareProviderOptions\n): LanguageModelV3Content[] {\n const parsed = content.flatMap((contentItem): LanguageModelV3Content[] => {\n if (contentItem.type !== \"text\") {\n return [contentItem];\n }\n if (getDebugLevel() === \"stream\") {\n logRawChunk(contentItem.text);\n }\n const parsedByProtocol = protocol.parseGeneratedText({\n text: contentItem.text,\n tools,\n options: {\n ...extractOnErrorOption(providerOptions),\n ...((providerOptions as { toolCallMiddleware?: unknown } | undefined)\n ?.toolCallMiddleware as Record<string, unknown>),\n },\n }) as LanguageModelV3Content[];\n\n const hasToolCall = parsedByProtocol.some(\n (part): part is Extract<LanguageModelV3Content, { type: \"tool-call\" }> =>\n part.type === \"tool-call\"\n );\n if (hasToolCall) {\n return parsedByProtocol;\n }\n\n const recoveredFromJson = recoverToolCallFromJsonCandidates(\n contentItem.text,\n tools\n );\n return recoveredFromJson ?? parsedByProtocol;\n });\n\n return parsed.map((part) =>\n part.type === \"tool-call\" ? coerceToolCallPart(part, tools) : part\n );\n}\n\nfunction logParsedContent(content: LanguageModelV3Content[]) {\n if (getDebugLevel() === \"stream\") {\n for (const part of content) {\n logParsedChunk(part);\n }\n }\n}\n\nfunction computeDebugSummary(options: {\n result: { content: LanguageModelV3Content[] };\n newContent: LanguageModelV3Content[];\n protocol: TCMCoreProtocol;\n tools: LanguageModelV3FunctionTool[];\n providerOptions?: ToolCallMiddlewareProviderOptions;\n}) {\n const { result, newContent, protocol, tools, providerOptions } = options;\n const allText = result.content\n .filter(\n (c): c is Extract<LanguageModelV3Content, { type: \"text\" }> =>\n c.type === \"text\"\n )\n .map((c) => c.text)\n .join(\"\\n\\n\");\n\n const segments = protocol.extractToolCallSegments\n ? protocol.extractToolCallSegments({ text: allText, tools })\n : [];\n const originalText = segments.join(\"\\n\\n\");\n\n const toolCalls = newContent.filter(\n (p): p is Extract<LanguageModelV3Content, { type: \"tool-call\" }> =>\n p.type === \"tool-call\"\n );\n\n const dbg = providerOptions?.toolCallMiddleware?.debugSummary;\n if (dbg) {\n dbg.originalText = originalText;\n try {\n dbg.toolCalls = JSON.stringify(\n toolCalls.map((tc) => ({\n toolName: tc.toolName,\n input: tc.input as unknown,\n }))\n );\n } catch {\n // ignore JSON failure\n }\n } else if (getDebugLevel() === \"parse\") {\n logParsedSummary({ toolCalls, originalText });\n }\n}\n\nexport async function wrapGenerate({\n protocol,\n doGenerate,\n params,\n}: {\n protocol: TCMCoreProtocol;\n doGenerate: () => ReturnType<LanguageModelV3[\"doGenerate\"]>;\n params: {\n providerOptions?: ToolCallMiddlewareProviderOptions;\n };\n}) {\n const onError = extractOnErrorOption(params.providerOptions);\n const tools = originalToolsSchema.decode(\n params.providerOptions?.toolCallMiddleware?.originalTools,\n onError\n );\n\n if (isToolChoiceActive(params)) {\n return handleToolChoice(doGenerate, params, tools);\n }\n\n const result = await doGenerate();\n\n if (result.content.length === 0) {\n return result;\n }\n\n const newContent = parseContent(\n result.content,\n protocol,\n tools,\n params.providerOptions\n );\n\n logParsedContent(newContent);\n computeDebugSummary({\n result,\n newContent,\n protocol,\n tools,\n providerOptions: params.providerOptions,\n });\n\n return {\n ...result,\n content: newContent,\n };\n}\n","import type { LanguageModelV3FunctionTool } from \"@ai-sdk/provider\";\n\nexport function hermesSystemPromptTemplate(\n tools: LanguageModelV3FunctionTool[]\n): string {\n const toolsJson = JSON.stringify(tools);\n return `You are a function calling AI model.\nYou are provided with function signatures within <tools></tools> XML tags.\nYou may call one or more functions to assist with the user query.\nDon't make assumptions about what values to plug into functions.\nHere are the available tools: <tools>${toolsJson}</tools>\nUse the following pydantic model json schema for each tool call you will make: {\"title\": \"FunctionCall\", \"type\": \"object\", \"properties\": {\"arguments\": {\"title\": \"Arguments\", \"type\": \"object\"}, \"name\": {\"title\": \"Name\", \"type\": \"string\"}}, \"required\": [\"arguments\", \"name\"]}\nFor each function call return a json object with function name and arguments within <tool_call></tool_call> XML tags as follows:\n<tool_call>\n{\"name\": \"<function-name>\", \"arguments\": <args-dict>}\n</tool_call>`;\n}\n","import type { JSONValue } from \"@ai-sdk/provider\";\nimport type { ToolResultOutput, ToolResultPart } from \"@ai-sdk/provider-utils\";\n\n/**\n * Common tool response to text conversion utilities\n * Used by all protocols to format tool responses consistently\n */\n\n/**\n * Unwraps tool result output into a display/serialization-friendly value.\n *\n * For successful outputs (e.g. \"text\", \"json\") the underlying value is preserved.\n * For error/denial/content outputs (e.g. \"execution-denied\", \"error-text\",\n * \"error-json\", \"content\") this function returns a human-readable string\n * representation suitable for display or embedding in JSON/XML, rather than\n * the original raw tool result.\n */\nexport function unwrapToolResult(result: ToolResultOutput): JSONValue {\n switch (result.type) {\n case \"text\":\n return result.value ?? \"\";\n case \"json\":\n return result.value;\n case \"execution-denied\": {\n const reason = result.reason;\n return reason ? `[Execution Denied: ${reason}]` : \"[Execution Denied]\";\n }\n case \"error-text\":\n return `[Error: ${result.value ?? \"\"}]`;\n case \"error-json\":\n return `[Error: ${JSON.stringify(result.value)}]`;\n case \"content\": {\n return result.value\n .map((part) => {\n const contentPart = part as { type?: string };\n switch (contentPart.type) {\n case \"text\":\n return (contentPart as { text?: string }).text ?? \"\";\n case \"image-data\":\n return `[Image: ${\n (contentPart as { mediaType?: string }).mediaType\n }]`;\n case \"image-url\":\n return `[Image URL: ${(contentPart as { url?: string }).url}]`;\n case \"image-file-id\": {\n const fileId = (contentPart as { fileId?: unknown }).fileId;\n const displayId =\n typeof fileId === \"string\" ? fileId : JSON.stringify(fileId);\n return `[Image ID: ${displayId}]`;\n }\n case \"file-data\": {\n const filePart = contentPart as {\n filename?: string;\n mediaType?: string;\n };\n if (filePart.filename) {\n return `[File: ${filePart.filename} (${filePart.mediaType})]`;\n }\n return `[File: ${filePart.mediaType}]`;\n }\n case \"file-url\":\n return `[File URL: ${(contentPart as { url?: string }).url}]`;\n case \"file-id\": {\n const fileId = (contentPart as { fileId?: unknown }).fileId;\n const displayId =\n typeof fileId === \"string\" ? fileId : JSON.stringify(fileId);\n return `[File ID: ${displayId}]`;\n }\n case \"media\":\n return `[Media: ${\n (contentPart as { mediaType?: string }).mediaType\n }]`;\n case \"custom\":\n return \"[Custom content]\";\n default:\n return \"[Unknown content]\";\n }\n })\n .join(\"\\n\");\n }\n default: {\n const _exhaustive: never = result;\n return _exhaustive;\n }\n }\n}\n\n/**\n * Formats a tool response as JSON inside XML tags\n * Used by JSON protocol for tool response formatting\n */\nexport function formatToolResponseAsJsonInXml(\n toolResult: ToolResultPart\n): string {\n const unwrappedResult = unwrapToolResult(toolResult.output);\n return `<tool_response>${JSON.stringify({\n toolName: toolResult.toolName,\n result: unwrappedResult,\n })}</tool_response>`;\n}\n\n/**\n * Formats a tool response as XML\n * Used by XML and YAML protocols for tool response formatting\n */\nexport function formatToolResponseAsXml(toolResult: ToolResultPart): string {\n const unwrappedResult = unwrapToolResult(toolResult.output);\n\n const toolNameXml = `<tool_name>${toolResult.toolName}</tool_name>`;\n const resultLines = formatXmlNode(\"result\", unwrappedResult, 1);\n\n return [\n \"<tool_response>\",\n ` ${toolNameXml}`,\n ...resultLines,\n \"</tool_response>\",\n ].join(\"\\n\");\n}\n\nfunction formatXmlNode(\n tagName: string,\n value: JSONValue,\n depth: number\n): string[] {\n const indent = \" \".repeat(depth);\n\n if (value === null || value === undefined) {\n return [`${indent}<${tagName}></${tagName}>`];\n }\n\n if (\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"boolean\"\n ) {\n return [`${indent}<${tagName}>${String(value)}</${tagName}>`];\n }\n\n if (Array.isArray(value)) {\n if (value.length === 0) {\n return [`${indent}<${tagName}></${tagName}>`];\n }\n const lines = [`${indent}<${tagName}>`];\n for (const item of value) {\n lines.push(...formatXmlNode(\"item\", item as JSONValue, depth + 1));\n }\n lines.push(`${indent}</${tagName}>`);\n return lines;\n }\n\n const entries = Object.entries(value as Record<string, JSONValue>);\n if (entries.length === 0) {\n return [`${indent}<${tagName}></${tagName}>`];\n }\n\n const lines = [`${indent}<${tagName}>`];\n for (const [key, entryValue] of entries) {\n lines.push(...formatXmlNode(key, entryValue, depth + 1));\n }\n lines.push(`${indent}</${tagName}>`);\n return lines;\n}\n","import type {\n JSONSchema7,\n LanguageModelV3FunctionTool,\n} from \"@ai-sdk/provider\";\nimport dedent from \"dedent\";\n\nexport function xmlSystemPromptTemplate(\n tools: LanguageModelV3FunctionTool[]\n): string {\n const toolsText = renderToolsForXmlPrompt(tools);\n\n const header = dedent`\n # Tools\n You may call one or more functions to assist with the user query.\n `;\n\n const definitions = [\n \"You have access to the following functions:\",\n \"<tools>\",\n toolsText,\n \"</tools>\",\n ].join(\"\\n\");\n\n const rules = dedent`\n <rules>\n - Use exactly one XML element whose tag name is the function name.\n - Put each parameter as a child element.\n - Values must follow the schema exactly (numbers, arrays, objects, enums → copy as-is).\n - Do not add or remove functions or parameters.\n - Each required parameter must appear once.\n - Output nothing before or after the function call.\n - It is also possible to call multiple types of functions in one turn or to call a single function multiple times.\n </rules>\n `;\n\n const examples = dedent`\n For each function call, output the function name and parameter in the following format:\n <example_function_name>\n <example_parameter_1>value_1</example_parameter_1>\n <example_parameter_2>This is the value for the second parameter\n that can span\n multiple lines</example_parameter_2>\n </example_function_name>\n `;\n\n return [header, definitions, rules, examples].join(\"\\n\\n\");\n}\n\nconst INDENT = \" \";\n\nfunction renderToolsForXmlPrompt(tools: LanguageModelV3FunctionTool[]): string {\n if (!tools.length) {\n return \"none\";\n }\n\n return tools.map(renderToolForXmlPrompt).join(\"\\n\\n\");\n}\n\nfunction renderToolForXmlPrompt(tool: LanguageModelV3FunctionTool): string {\n const lines: string[] = [`name: ${tool.name}`];\n\n if (tool.description) {\n lines.push(`description: ${tool.description}`);\n }\n\n lines.push(\"parameters:\");\n const normalizedSchema = normalizeSchema(tool.inputSchema);\n lines.push(...renderParametersSummary(normalizedSchema, 1));\n lines.push(`schema: ${stringifySchema(normalizedSchema)}`);\n\n return lines.join(\"\\n\");\n}\n\nfunction normalizeSchema(\n schema: JSONSchema7 | boolean | string | undefined\n): JSONSchema7 | boolean | undefined {\n if (typeof schema === \"string\") {\n try {\n return JSON.parse(schema) as JSONSchema7;\n } catch {\n return { type: \"string\", const: schema };\n }\n }\n\n return schema;\n}\n\nfunction renderParametersSummary(\n schema: JSONSchema7 | boolean | undefined,\n indentLevel: number\n): string[] {\n const indent = INDENT.repeat(indentLevel);\n\n if (schema === undefined || schema === null) {\n return [`${indent}(none)`];\n }\n\n if (schema === true) {\n return [`${indent}(any)`];\n }\n\n if (schema === false) {\n return [`${indent}(no valid parameters)`];\n }\n\n if (typeof schema !== \"object\") {\n return [`${indent}- value (${String(schema)})`];\n }\n\n const schemaType: NonNullable<JSONSchema7[\"type\"]>[] = [];\n\n if (Array.isArray(schema.type)) {\n schemaType.push(...schema.type);\n } else if (schema.type) {\n schemaType.push(schema.type);\n }\n const isObjectLike = schemaType.includes(\"object\") || !!schema.properties;\n\n if (isObjectLike) {\n const properties = schema.properties ?? {};\n const requiredSet = new Set(schema.required ?? []);\n const propertyNames = Object.keys(properties).sort();\n if (propertyNames.length === 0) {\n return [`${indent}(no named parameters)`];\n }\n\n const lines: string[] = [];\n for (const propName of propertyNames) {\n const propSchema = properties[propName] as\n | JSONSchema7\n | boolean\n | undefined;\n lines.push(\n renderPropertySummaryLine({\n indent,\n propName,\n propSchema,\n required: requiredSet.has(propName),\n })\n );\n }\n\n return lines.length ? lines : [`${indent}(no parameters)`];\n }\n\n return [`${indent}- value (${summarizeType(schema)})`];\n}\n\nfunction renderPropertySummaryLine({\n indent,\n propName,\n propSchema,\n required,\n}: {\n indent: string;\n propName: string;\n propSchema: JSONSchema7 | boolean | undefined;\n required: boolean;\n}): string {\n const typeLabel = summarizeType(propSchema);\n const requiredLabel = required ? \"required\" : \"optional\";\n const extras = collectPropertyExtras(propSchema);\n const extraText = extras.length ? ` - ${extras.join(\"; \")}` : \"\";\n\n return `${indent}- ${propName} (${typeLabel}, ${requiredLabel})${extraText}`;\n}\n\nfunction collectPropertyExtras(\n propSchema: JSONSchema7 | boolean | undefined\n): string[] {\n if (!propSchema || typeof propSchema !== \"object\") {\n return [];\n }\n\n const extras: string[] = [];\n\n if (propSchema.enum) {\n extras.push(`enum: ${formatEnumForSummary(propSchema.enum)}`);\n }\n\n if (propSchema.default !== undefined) {\n extras.push(`default: ${formatValue(propSchema.default)}`);\n }\n\n if (propSchema.description) {\n extras.push(propSchema.description);\n }\n\n return extras;\n}\n\nfunction summarizeType(schema: JSONSchema7 | boolean | undefined): string {\n if (schema === undefined || schema === null) {\n return \"unknown\";\n }\n\n if (schema === true) {\n return \"any\";\n }\n\n if (schema === false) {\n return \"never\";\n }\n\n if (typeof schema !== \"object\") {\n return String(schema);\n }\n\n const schemaType = schema.type;\n let baseType = \"\";\n\n if (Array.isArray(schemaType) && schemaType.length) {\n baseType = schemaType.join(\" | \");\n } else if (typeof schemaType === \"string\") {\n baseType = schemaType;\n } else if (schema.enum) {\n const inferred: string[] = Array.from(\n new Set(schema.enum.map((value: unknown) => typeof value))\n );\n if (inferred.length === 1) {\n baseType = inferred[0] ?? \"\";\n }\n } else if (schema.const !== undefined) {\n baseType = typeof schema.const;\n }\n\n if (!baseType) {\n baseType = \"any\";\n }\n\n if (baseType === \"array\" && schema.items) {\n const itemType = Array.isArray(schema.items)\n ? schema.items\n .map((item: JSONSchema7 | boolean) => summarizeType(item))\n .join(\" | \")\n : summarizeType(schema.items);\n return `array<${itemType}>`;\n }\n\n if (baseType === \"string\" && schema.format) {\n return `string (${schema.format})`;\n }\n\n return baseType;\n}\n\nconst ENUM_MAX_INLINE = 6;\nconst ENUM_PREVIEW_LIMIT = 5;\n\nfunction formatEnumForSummary(values: unknown[]): string {\n if (values.length <= ENUM_MAX_INLINE) {\n return formatValue(values);\n }\n\n const preview = values\n .slice(0, ENUM_PREVIEW_LIMIT)\n .map((value) => formatValue(value));\n return `[${preview.join(\", \")}, ... (${values.length} total)]`;\n}\n\nfunction formatValue(value: unknown): string {\n if (typeof value === \"string\") {\n return JSON.stringify(value);\n }\n\n if (typeof value === \"number\" || typeof value === \"boolean\") {\n return String(value);\n }\n\n if (value === null) {\n return \"null\";\n }\n\n if (Array.isArray(value)) {\n return `[${value.map(formatValue).join(\", \")}]`;\n }\n\n return JSON.stringify(value);\n}\n\nfunction stringifySchema(schema: JSONSchema7 | boolean | undefined): string {\n if (schema === undefined) {\n return \"null\";\n }\n\n return JSON.stringify(stripSchemaKeys(schema));\n}\n\nfunction stripSchemaKeys(value: unknown): unknown {\n if (Array.isArray(value)) {\n return value.map((entry) => stripSchemaKeys(entry));\n }\n\n if (value && typeof value === \"object\") {\n const record = value as Record<string, unknown>;\n const cleaned: Record<string, unknown> = {};\n\n for (const [key, entry] of Object.entries(record)) {\n if (key === \"$schema\") {\n continue;\n }\n cleaned[key] = stripSchemaKeys(entry);\n }\n\n return cleaned;\n }\n\n return value;\n}\n","import type { LanguageModelV3FunctionTool } from \"@ai-sdk/provider\";\n\nexport function yamlSystemPromptTemplate(\n tools: LanguageModelV3FunctionTool[],\n includeMultilineExample = true\n): string {\n const toolsJson = JSON.stringify(tools);\n const multilineExample = includeMultilineExample\n ? `\n\nFor multiline values, use YAML's literal block syntax:\n<write_file>\nfile_path: /tmp/example.txt\ncontents: |\n First line\n Second line\n Third line\n</write_file>`\n : \"\";\n\n return `# Tools\n\nYou may call one or more functions to assist with the user query.\n\nYou are provided with function signatures within <tools></tools> XML tags:\n<tools>${toolsJson}</tools>\n\n# Format\n\nUse exactly one XML element whose tag name is the function name.\nInside the XML element, specify parameters using YAML syntax (key: value pairs).\n\n# Example\n<get_weather>\nlocation: New York\nunit: celsius\n</get_weather>${multilineExample}\n\n# Rules\n- Parameter names and values must follow the schema exactly.\n- Use proper YAML syntax for values (strings, numbers, booleans, arrays, objects).\n- Each required parameter must appear once.\n- Do not add functions or parameters not in the schema.\n- After calling a tool, you will receive a response. Use this result to answer the user.\n- Do NOT ask clarifying questions. Use reasonable defaults for optional parameters.\n- If a task requires multiple function calls, make ALL of them at once.`;\n}\n","import type {\n LanguageModelV3,\n LanguageModelV3FinishReason,\n LanguageModelV3FunctionTool,\n LanguageModelV3StreamPart,\n LanguageModelV3Usage,\n} from \"@ai-sdk/provider\";\nimport type { TCMCoreProtocol } from \"./core/protocols/protocol-interface\";\nimport { getDebugLevel, logParsedChunk, logRawChunk } from \"./core/utils/debug\";\nimport { generateToolCallId } from \"./core/utils/id\";\nimport { extractOnErrorOption } from \"./core/utils/on-error\";\nimport {\n isToolChoiceActive,\n originalToolsSchema,\n type ToolCallMiddlewareProviderOptions,\n} from \"./core/utils/provider-options\";\nimport { coerceToolCallPart } from \"./core/utils/tool-call-coercion\";\nimport { parseToolChoicePayload } from \"./core/utils/tool-choice\";\n\nexport async function wrapStream({\n protocol,\n doStream,\n doGenerate,\n params,\n}: {\n protocol: TCMCoreProtocol;\n doStream: () => ReturnType<LanguageModelV3[\"doStream\"]>;\n doGenerate: () => ReturnType<LanguageModelV3[\"doGenerate\"]>;\n params: {\n providerOptions?: ToolCallMiddlewareProviderOptions;\n };\n}) {\n const onErrorOptions = extractOnErrorOption(params.providerOptions);\n const tools = originalToolsSchema.decode(\n params.providerOptions?.toolCallMiddleware?.originalTools,\n onErrorOptions\n );\n\n if (isToolChoiceActive(params)) {\n return toolChoiceStream({\n doGenerate,\n tools,\n options: onErrorOptions,\n });\n }\n\n const { stream, ...rest } = await doStream();\n const debugLevel = getDebugLevel();\n const options = {\n ...onErrorOptions,\n ...((params.providerOptions as Record<string, unknown>)\n ?.toolCallMiddleware || {}),\n };\n\n const coreStream = stream\n .pipeThrough(\n new TransformStream<LanguageModelV3StreamPart, LanguageModelV3StreamPart>(\n {\n transform(part, controller) {\n if (debugLevel === \"stream\") {\n logRawChunk(part);\n }\n controller.enqueue(part);\n },\n }\n )\n )\n .pipeThrough(protocol.createStreamParser({ tools, options }));\n\n let seenToolCall = false;\n const v3Stream = coreStream.pipeThrough(\n new TransformStream<LanguageModelV3StreamPart, LanguageModelV3StreamPart>({\n transform(part, controller) {\n let normalizedPart =\n part.type === \"tool-call\" ? coerceToolCallPart(part, tools) : part;\n\n if (normalizedPart.type === \"tool-call\") {\n seenToolCall = true;\n }\n\n if (\n normalizedPart.type === \"finish\" &&\n seenToolCall &&\n normalizedPart.finishReason.unified === \"stop\"\n ) {\n normalizedPart = {\n ...normalizedPart,\n finishReason: normalizeToolCallsFinishReason(\n normalizedPart.finishReason\n ),\n };\n }\n\n if (debugLevel === \"stream\") {\n logParsedChunk(normalizedPart);\n }\n controller.enqueue(normalizedPart);\n },\n })\n );\n\n return {\n ...rest,\n stream: v3Stream,\n };\n}\n\nexport async function toolChoiceStream({\n doGenerate,\n tools,\n options,\n}: {\n doGenerate: () => ReturnType<LanguageModelV3[\"doGenerate\"]>;\n tools?: LanguageModelV3FunctionTool[];\n options?: {\n onError?: (message: string, metadata?: Record<string, unknown>) => void;\n };\n}) {\n const normalizedTools = Array.isArray(tools) ? tools : [];\n const result = await doGenerate();\n let toolName = \"unknown\";\n let input = \"{}\";\n if (\n result?.content &&\n result.content.length > 0 &&\n result.content[0]?.type === \"text\"\n ) {\n const parsed = parseToolChoicePayload({\n text: result.content[0].text,\n tools: normalizedTools,\n onError: options?.onError,\n errorMessage:\n \"Failed to parse toolChoice JSON from streamed model output\",\n });\n toolName = parsed.toolName;\n input = parsed.input;\n }\n\n const stream = new ReadableStream<LanguageModelV3StreamPart>({\n start(controller) {\n controller.enqueue({\n type: \"tool-call\",\n toolCallId: generateToolCallId(),\n toolName,\n input,\n });\n controller.enqueue({\n type: \"finish\",\n usage: normalizeUsage(result?.usage),\n finishReason: normalizeToolCallsFinishReason(result?.finishReason),\n });\n controller.close();\n },\n });\n\n return {\n request: result?.request || {},\n response: result?.response || {},\n stream,\n };\n}\n\nconst ZERO_USAGE: LanguageModelV3Usage = {\n inputTokens: {\n total: 0,\n noCache: undefined,\n cacheRead: undefined,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: 0,\n text: undefined,\n reasoning: undefined,\n },\n};\n\nfunction normalizeToolCallsFinishReason(\n finishReason: unknown\n): LanguageModelV3FinishReason {\n let raw = \"tool-calls\";\n if (typeof finishReason === \"string\") {\n raw = finishReason;\n } else if (\n finishReason &&\n typeof finishReason === \"object\" &&\n \"raw\" in finishReason &&\n typeof (finishReason as { raw?: unknown }).raw === \"string\"\n ) {\n raw = (finishReason as { raw: string }).raw;\n } else if (\n finishReason &&\n typeof finishReason === \"object\" &&\n \"unified\" in finishReason &&\n typeof (finishReason as { unified?: unknown }).unified === \"string\"\n ) {\n raw = (finishReason as { unified: string }).unified;\n }\n\n return {\n unified: \"tool-calls\",\n raw,\n };\n}\n\nfunction normalizeUsage(usage: unknown): LanguageModelV3Usage {\n if (!usage || typeof usage !== \"object\") {\n return ZERO_USAGE;\n }\n\n const usageRecord = usage as Record<string, unknown>;\n const input = usageRecord.inputTokens;\n const output = usageRecord.outputTokens;\n if (\n input &&\n typeof input === \"object\" &&\n output &&\n typeof output === \"object\"\n ) {\n return usage as LanguageModelV3Usage;\n }\n\n if (typeof input === \"number\" && typeof output === \"number\") {\n return {\n inputTokens: {\n total: input,\n noCache: undefined,\n cacheRead: undefined,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: output,\n text: undefined,\n reasoning: undefined,\n },\n };\n }\n\n return ZERO_USAGE;\n}\n","import type {\n JSONSchema7,\n LanguageModelV3Content,\n LanguageModelV3FilePart,\n LanguageModelV3FunctionTool,\n LanguageModelV3Message,\n LanguageModelV3Prompt,\n LanguageModelV3ReasoningPart,\n LanguageModelV3TextPart,\n LanguageModelV3ToolCallPart,\n LanguageModelV3ToolResultPart,\n SharedV3ProviderOptions,\n} from \"@ai-sdk/provider\";\nimport type {\n ToolApprovalResponse,\n ToolContent,\n ToolResultPart,\n} from \"@ai-sdk/provider-utils\";\nimport type { TCMCoreProtocol } from \"./core/protocols/protocol-interface\";\nimport { isTCMProtocolFactory } from \"./core/protocols/protocol-interface\";\nimport { createDynamicIfThenElseSchema } from \"./core/utils/dynamic-tool-schema\";\nimport { extractOnErrorOption } from \"./core/utils/on-error\";\nimport { originalToolsSchema } from \"./core/utils/provider-options\";\n\n/**\n * Build final prompt by merging system prompt with existing prompt\n */\nfunction buildFinalPrompt(\n systemPrompt: string,\n processedPrompt: LanguageModelV3Prompt,\n placement: \"first\" | \"last\"\n): LanguageModelV3Prompt {\n const systemIndex = processedPrompt.findIndex((m) => m.role === \"system\");\n if (systemIndex !== -1) {\n const existing = processedPrompt[systemIndex].content as unknown;\n let existingText = \"\";\n if (typeof existing === \"string\") {\n existingText = existing;\n } else if (Array.isArray(existing)) {\n existingText = (existing as { type?: string; text?: string }[])\n .map((p) => (p?.type === \"text\" ? (p.text ?? \"\") : \"\"))\n .filter(Boolean)\n .join(\"\\n\");\n } else {\n existingText = String(existing ?? \"\");\n }\n\n const mergedContent =\n placement === \"first\"\n ? `${systemPrompt}\\n\\n${existingText}`\n : `${existingText}\\n\\n${systemPrompt}`;\n\n return processedPrompt.map((m, idx) =>\n idx === systemIndex\n ? {\n ...m,\n content: mergedContent,\n }\n : m\n ) as LanguageModelV3Prompt;\n }\n if (placement === \"first\") {\n return [\n {\n role: \"system\",\n content: systemPrompt,\n },\n ...processedPrompt,\n ];\n }\n // placement === 'last'\n return [\n ...processedPrompt,\n {\n role: \"system\",\n content: systemPrompt,\n },\n ];\n}\n\n/**\n * Build base return parameters with middleware options\n */\nfunction buildBaseReturnParams(\n params: {\n prompt?: LanguageModelV3Prompt;\n tools?: Array<LanguageModelV3FunctionTool | { type: string }>;\n providerOptions?: unknown;\n toolChoice?: { type: string; toolName?: string };\n },\n finalPrompt: LanguageModelV3Prompt,\n functionTools: LanguageModelV3FunctionTool[]\n) {\n return {\n ...params,\n prompt: finalPrompt,\n tools: [] as never[],\n toolChoice: undefined,\n providerOptions: {\n ...(params.providerOptions || {}),\n toolCallMiddleware: {\n ...((params.providerOptions &&\n typeof params.providerOptions === \"object\" &&\n (params.providerOptions as { toolCallMiddleware?: unknown })\n .toolCallMiddleware) ||\n {}),\n originalTools: originalToolsSchema.encode(functionTools),\n },\n } as unknown as SharedV3ProviderOptions,\n };\n}\n\n/**\n * Find provider-defined tool matching the selected tool name\n */\nfunction findProviderDefinedTool(\n tools: Array<LanguageModelV3FunctionTool | { type: string }>,\n selectedToolName: string\n) {\n return tools.find((t) => {\n if (t.type === \"function\") {\n return false;\n }\n const anyTool = t as unknown as { id?: string; name?: string };\n return anyTool.id === selectedToolName || anyTool.name === selectedToolName;\n });\n}\n\n/**\n * Handle tool choice type 'tool'\n */\nfunction handleToolChoiceTool(\n params: {\n tools?: Array<LanguageModelV3FunctionTool | { type: string }>;\n toolChoice?: { type: string; toolName?: string };\n },\n baseReturnParams: ReturnType<typeof buildBaseReturnParams>\n) {\n const selectedToolName = params.toolChoice?.toolName;\n if (!selectedToolName) {\n throw new Error(\"Tool name is required for 'tool' toolChoice type.\");\n }\n\n const providerDefinedMatch = findProviderDefinedTool(\n params.tools ?? [],\n selectedToolName\n );\n if (providerDefinedMatch) {\n throw new Error(\n \"Provider-defined tools are not supported by this middleware. Please use custom tools.\"\n );\n }\n\n const selectedTool = (params.tools ?? []).find(\n (t): t is LanguageModelV3FunctionTool =>\n t.type === \"function\" &&\n (t as LanguageModelV3FunctionTool).name === selectedToolName\n );\n\n if (!selectedTool) {\n throw new Error(\n `Tool with name '${selectedToolName}' not found in params.tools.`\n );\n }\n\n return {\n ...baseReturnParams,\n responseFormat: {\n type: \"json\" as const,\n schema: {\n type: \"object\",\n properties: {\n name: {\n const: selectedTool.name,\n },\n arguments: selectedTool.inputSchema,\n },\n required: [\"name\", \"arguments\"],\n } as JSONSchema7,\n name: selectedTool.name,\n description:\n typeof selectedTool.description === \"string\"\n ? selectedTool.description\n : undefined,\n },\n providerOptions: {\n ...(baseReturnParams.providerOptions || {}),\n toolCallMiddleware: {\n ...((baseReturnParams.providerOptions &&\n typeof baseReturnParams.providerOptions === \"object\" &&\n (\n baseReturnParams.providerOptions as {\n toolCallMiddleware?: unknown;\n }\n ).toolCallMiddleware) ||\n {}),\n ...(params.toolChoice ? { toolChoice: params.toolChoice } : {}),\n },\n },\n };\n}\n\n/**\n * Handle tool choice type 'required'\n */\nfunction handleToolChoiceRequired(\n params: {\n tools?: Array<LanguageModelV3FunctionTool | { type: string }>;\n toolChoice?: { type: string; toolName?: string };\n },\n baseReturnParams: ReturnType<typeof buildBaseReturnParams>,\n functionTools: LanguageModelV3FunctionTool[]\n) {\n if (!params.tools || params.tools.length === 0) {\n throw new Error(\n \"Tool choice type 'required' is set, but no tools are provided in params.tools.\"\n );\n }\n if (functionTools.length === 0) {\n throw new Error(\n \"Tool choice type 'required' is set, but no function tools are provided. Provider-defined tools are not supported by this middleware.\"\n );\n }\n\n return {\n ...baseReturnParams,\n responseFormat: {\n type: \"json\" as const,\n schema: createDynamicIfThenElseSchema(functionTools),\n },\n providerOptions: {\n ...(baseReturnParams.providerOptions || {}),\n toolCallMiddleware: {\n ...((baseReturnParams.providerOptions &&\n typeof baseReturnParams.providerOptions === \"object\" &&\n (\n baseReturnParams.providerOptions as {\n toolCallMiddleware?: unknown;\n }\n ).toolCallMiddleware) ||\n {}),\n toolChoice: { type: \"required\" as const },\n },\n },\n };\n}\n\nexport function transformParams({\n params,\n protocol,\n toolSystemPromptTemplate,\n toolResponsePromptTemplate,\n placement = \"first\",\n}: {\n params: {\n prompt?: LanguageModelV3Prompt;\n tools?: Array<LanguageModelV3FunctionTool | { type: string }>;\n providerOptions?: {\n toolCallMiddleware?: {\n toolChoice?: { type: string };\n };\n };\n toolChoice?: { type: string; toolName?: string };\n };\n protocol: TCMCoreProtocol | (() => TCMCoreProtocol);\n toolSystemPromptTemplate: (tools: LanguageModelV3FunctionTool[]) => string;\n toolResponsePromptTemplate?: (toolResult: ToolResultPart) => string;\n placement?: \"first\" | \"last\";\n}) {\n const resolvedProtocol = isTCMProtocolFactory(protocol)\n ? protocol()\n : protocol;\n\n const functionTools = (params.tools ?? []).filter(\n (t): t is LanguageModelV3FunctionTool => t.type === \"function\"\n );\n\n const systemPrompt = resolvedProtocol.formatTools({\n tools: functionTools,\n toolSystemPromptTemplate,\n });\n\n let normalizedPrompt: LanguageModelV3Message[];\n if (Array.isArray(params.prompt)) {\n normalizedPrompt = params.prompt;\n } else if (params.prompt) {\n normalizedPrompt = [params.prompt];\n } else {\n normalizedPrompt = [];\n }\n const processedPrompt = convertToolPrompt(\n normalizedPrompt,\n resolvedProtocol,\n toolResponsePromptTemplate,\n extractOnErrorOption(params.providerOptions)\n );\n\n const finalPrompt = buildFinalPrompt(\n systemPrompt,\n processedPrompt,\n placement\n );\n const baseReturnParams = buildBaseReturnParams(\n params,\n finalPrompt,\n functionTools\n );\n\n if (params.toolChoice?.type === \"none\") {\n throw new Error(\n \"The 'none' toolChoice type is not supported by this middleware. Please use 'auto', 'required', or specify a tool name.\"\n );\n }\n\n if (params.toolChoice?.type === \"tool\") {\n return handleToolChoiceTool(params, baseReturnParams);\n }\n\n if (params.toolChoice?.type === \"required\") {\n return handleToolChoiceRequired(params, baseReturnParams, functionTools);\n }\n\n return baseReturnParams;\n}\n\n/**\n * Process assistant message content\n */\nfunction processAssistantContent(\n content: LanguageModelV3Content[],\n resolvedProtocol: TCMCoreProtocol,\n providerOptions?: {\n onError?: (message: string, metadata?: Record<string, unknown>) => void;\n }\n): LanguageModelV3Content[] {\n const newContent: LanguageModelV3Content[] = [];\n for (const item of content) {\n switch (item.type) {\n case \"tool-call\":\n newContent.push({\n type: \"text\",\n text: resolvedProtocol.formatToolCall(item),\n });\n break;\n case \"text\":\n case \"reasoning\":\n newContent.push(item);\n break;\n default: {\n const options = extractOnErrorOption(providerOptions);\n options?.onError?.(\n \"tool-call-middleware: unknown assistant content; stringifying for provider compatibility\",\n { content: item }\n );\n newContent.push({\n type: \"text\",\n text: JSON.stringify(item),\n });\n }\n }\n }\n\n // Condense if all content is text\n const onlyText = newContent.every((c) => c.type === \"text\");\n return onlyText\n ? [\n {\n type: \"text\" as const,\n text: newContent.map((c) => (c as { text: string }).text).join(\"\\n\"),\n },\n ]\n : newContent;\n}\n\n/**\n * Process tool message content\n */\nfunction formatApprovalResponse(part: ToolApprovalResponse): string {\n const status = part.approved ? \"Approved\" : \"Denied\";\n const reason = part.reason ? `: ${part.reason}` : \"\";\n return `[Tool Approval ${status}${reason}]`;\n}\n\nfunction processToolMessage(\n toolResults: ToolResultPart[],\n approvalResponses: ToolApprovalResponse[],\n toolResponsePromptTemplate: (toolResult: ToolResultPart) => string\n): LanguageModelV3Prompt[number] {\n const resultTexts = toolResults.map((toolResult) => {\n return toolResponsePromptTemplate(toolResult);\n });\n\n const approvalTexts = approvalResponses.map(formatApprovalResponse);\n\n const allTexts = [...resultTexts, ...approvalTexts];\n\n return {\n role: \"user\" as const,\n content: [\n {\n type: \"text\" as const,\n text: allTexts.join(\"\\n\"),\n },\n ],\n };\n}\n\n/**\n * Process a single message in the prompt\n */\nfunction processMessage(\n message: LanguageModelV3Prompt[number],\n resolvedProtocol: TCMCoreProtocol,\n providerOptions?: {\n onError?: (message: string, metadata?: Record<string, unknown>) => void;\n },\n toolResponsePromptTemplate?: (toolResult: ToolResultPart) => string\n): LanguageModelV3Prompt[number] {\n if (message.role === \"assistant\") {\n const condensedContent = processAssistantContent(\n message.content as LanguageModelV3Content[],\n resolvedProtocol,\n providerOptions\n );\n return {\n role: \"assistant\" as const,\n content: condensedContent as Array<\n | LanguageModelV3TextPart\n | LanguageModelV3FilePart\n | LanguageModelV3ReasoningPart\n | LanguageModelV3ToolCallPart\n | LanguageModelV3ToolResultPart\n >,\n };\n }\n if (message.role === \"tool\") {\n const toolContent = message.content as ToolContent;\n const toolResultParts = toolContent.filter(\n (part): part is ToolResultPart => part.type === \"tool-result\"\n );\n const approvalResponseParts = toolContent.filter(\n (part): part is ToolApprovalResponse =>\n part.type === \"tool-approval-response\"\n );\n if (!toolResponsePromptTemplate) {\n throw new Error(\n 'toolResponsePromptTemplate is required when processing messages with role \"tool\". ' +\n \"This parameter is optional for other roles but is required here so tool-result content can be \" +\n \"converted into a prompt. Ensure your middleware or transform configuration passes a toolResponsePromptTemplate \" +\n \"when tool message processing is enabled.\"\n );\n }\n return processToolMessage(\n toolResultParts,\n approvalResponseParts,\n toolResponsePromptTemplate\n );\n }\n return message;\n}\n\n/**\n * Check if all content parts are text\n */\nfunction isAllTextContent(content: unknown): boolean {\n if (!Array.isArray(content)) {\n return false;\n }\n return (content as { type: string }[]).every(\n (c: { type: string }) => c?.type === \"text\"\n );\n}\n\n/**\n * Join text content parts into a single string\n */\nfunction joinTextContent(content: { text: string }[]): string {\n return content.map((c) => c.text).join(\"\\n\");\n}\n\n/**\n * Create condensed message based on role\n */\nfunction createCondensedMessage(role: string, joinedText: string) {\n if (role === \"system\") {\n return {\n role: \"system\" as const,\n content: joinedText,\n };\n }\n\n return {\n role: role as \"assistant\" | \"user\",\n content: [\n {\n type: \"text\" as const,\n text: joinedText,\n },\n ],\n };\n}\n\n/**\n * Condense multi-part text content into single text part\n */\nfunction condenseTextContent(\n processedPrompt: LanguageModelV3Prompt\n): LanguageModelV3Prompt {\n for (let i = 0; i < processedPrompt.length; i += 1) {\n const msg = processedPrompt[i] as unknown as {\n role: string;\n content: unknown;\n };\n\n if (!Array.isArray(msg.content)) {\n continue;\n }\n\n const shouldCondense =\n isAllTextContent(msg.content) && msg.content.length > 1;\n if (shouldCondense) {\n const joinedText = joinTextContent(msg.content as { text: string }[]);\n processedPrompt[i] = createCondensedMessage(msg.role, joinedText);\n }\n }\n return processedPrompt;\n}\n\n/**\n * Merge consecutive user messages\n */\nfunction mergeConsecutiveUserMessages(\n processedPrompt: LanguageModelV3Prompt\n): LanguageModelV3Prompt {\n for (let i = processedPrompt.length - 1; i > 0; i -= 1) {\n const current = processedPrompt[i];\n const prev = processedPrompt[i - 1];\n if (current.role === \"user\" && prev.role === \"user\") {\n const prevContent = prev.content\n .map((c) => (c.type === \"text\" ? c.text : \"\"))\n .join(\"\\n\");\n const currentContent = current.content\n .map((c) => (c.type === \"text\" ? c.text : \"\"))\n .join(\"\\n\");\n processedPrompt[i - 1] = {\n role: \"user\",\n content: [{ type: \"text\", text: `${prevContent}\\n${currentContent}` }],\n };\n processedPrompt.splice(i, 1);\n }\n }\n return processedPrompt;\n}\n\nfunction convertToolPrompt(\n prompt: LanguageModelV3Message[],\n resolvedProtocol: TCMCoreProtocol,\n toolResponsePromptTemplate?: (toolResult: ToolResultPart) => string,\n providerOptions?: {\n onError?: (message: string, metadata?: Record<string, unknown>) => void;\n }\n): LanguageModelV3Message[] {\n let processedPrompt = prompt.map((message: LanguageModelV3Message) =>\n processMessage(\n message,\n resolvedProtocol,\n providerOptions,\n toolResponsePromptTemplate\n )\n );\n\n processedPrompt = condenseTextContent(processedPrompt);\n processedPrompt = mergeConsecutiveUserMessages(processedPrompt);\n return processedPrompt as LanguageModelV3Prompt;\n}\n","import type {\n LanguageModelV3CallOptions,\n LanguageModelV3FunctionTool,\n LanguageModelV3Middleware,\n} from \"@ai-sdk/provider\";\nimport type { ToolResultPart } from \"@ai-sdk/provider-utils\";\nimport type { TCMCoreProtocol } from \"./core/protocols/protocol-interface\";\nimport { isTCMProtocolFactory } from \"./core/protocols/protocol-interface\";\nimport { wrapGenerate as wrapGenerateHandler } from \"./generate-handler\";\nimport { wrapStream as wrapStreamHandler } from \"./stream-handler\";\nimport { transformParams } from \"./transform-handler\";\n\nexport function createToolMiddleware({\n protocol,\n toolSystemPromptTemplate,\n toolResponsePromptTemplate,\n placement = \"last\",\n}: {\n protocol: TCMCoreProtocol | (() => TCMCoreProtocol);\n toolSystemPromptTemplate: (tools: LanguageModelV3FunctionTool[]) => string;\n toolResponsePromptTemplate?: (toolResult: ToolResultPart) => string;\n placement?: \"first\" | \"last\";\n}): LanguageModelV3Middleware {\n const resolvedProtocol = isTCMProtocolFactory(protocol)\n ? protocol()\n : protocol;\n\n return {\n specificationVersion: \"v3\",\n wrapStream: ({ doStream, doGenerate, params }) =>\n wrapStreamHandler({\n protocol: resolvedProtocol,\n doStream,\n doGenerate,\n params,\n }),\n wrapGenerate: async ({ doGenerate, params }) =>\n wrapGenerateHandler({\n protocol: resolvedProtocol,\n doGenerate,\n params,\n }),\n transformParams: async ({ params }): Promise<LanguageModelV3CallOptions> =>\n transformParams({\n protocol: resolvedProtocol,\n toolSystemPromptTemplate,\n toolResponsePromptTemplate,\n placement,\n params,\n }),\n };\n}\n","import { hermesSystemPromptTemplate } from \"./core/prompts/hermes-system-prompt\";\nimport {\n formatToolResponseAsJsonInXml,\n formatToolResponseAsXml,\n} from \"./core/prompts/tool-response\";\nimport { xmlSystemPromptTemplate } from \"./core/prompts/xml-system-prompt\";\nimport { yamlSystemPromptTemplate } from \"./core/prompts/yaml-system-prompt\";\nimport { jsonProtocol } from \"./core/protocols/json-protocol\";\nimport { xmlProtocol } from \"./core/protocols/xml-protocol\";\nimport { yamlProtocol } from \"./core/protocols/yaml-protocol\";\nimport { createToolMiddleware } from \"./tool-call-middleware\";\n\nexport const hermesToolMiddleware = createToolMiddleware({\n protocol: jsonProtocol({}),\n toolSystemPromptTemplate: hermesSystemPromptTemplate,\n toolResponsePromptTemplate: formatToolResponseAsJsonInXml,\n});\n\nexport const xmlToolMiddleware = createToolMiddleware({\n protocol: xmlProtocol({}),\n toolSystemPromptTemplate: xmlSystemPromptTemplate,\n toolResponsePromptTemplate: formatToolResponseAsXml,\n});\n\nexport const yamlToolMiddleware = createToolMiddleware({\n protocol: yamlProtocol({}),\n toolSystemPromptTemplate: yamlSystemPromptTemplate,\n toolResponsePromptTemplate: formatToolResponseAsXml,\n});\n"],"mappings":"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","names":["index","shouldEmitRawToolCallTextOnError","parse","emitToolInputProgress","newBuffer","prefixCandidate","_a","shouldEmitRawToolCallTextOnError","selfClosingTagCache","getSelfClosingTagPattern","findToolCalls","findEarliestToolTag","emitToolInputProgress","safeStringify","safeStringify","_a","lines"]}
|