@ai-sdk-tool/parser 3.3.1 → 3.3.2

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.
@@ -1,7 +1,8 @@
1
1
  import {
2
+ escapeRegExp,
2
3
  parse as parse2,
3
4
  stringify
4
- } from "./chunk-EW3A6Y7O.js";
5
+ } from "./chunk-ZDBNJWLY.js";
5
6
  import {
6
7
  parse
7
8
  } from "./chunk-IX4FJELL.js";
@@ -187,9 +188,11 @@ function generateId() {
187
188
  return Math.random().toString(36).substring(2, 15);
188
189
  }
189
190
 
190
- // src/core/utils/regex.ts
191
- function escapeRegExp(literal) {
192
- return literal.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
191
+ // src/core/utils/protocol-utils.ts
192
+ function addTextSegment(text, processedElements) {
193
+ if (text.trim()) {
194
+ processedElements.push({ type: "text", text });
195
+ }
193
196
  }
194
197
 
195
198
  // src/core/protocols/json-protocol.ts
@@ -218,11 +221,6 @@ function processToolCallJson(toolCallJson, fullMatch, processedElements, options
218
221
  processedElements.push({ type: "text", text: fullMatch });
219
222
  }
220
223
  }
221
- function addTextSegment(text, processedElements) {
222
- if (text.trim()) {
223
- processedElements.push({ type: "text", text });
224
- }
225
- }
226
224
  function processMatchedToolCall(context) {
227
225
  const { match, text, currentIndex, processedElements, options } = context;
228
226
  const startIndex = match.index;
@@ -516,9 +514,11 @@ function isTCMProtocolFactory(protocol) {
516
514
  return typeof protocol === "function";
517
515
  }
518
516
 
519
- // src/core/protocols/xml-protocol.ts
517
+ // src/core/utils/regex-constants.ts
520
518
  var NAME_CHAR_RE = /[A-Za-z0-9_:-]/;
521
519
  var WHITESPACE_REGEX = /\s/;
520
+
521
+ // src/core/protocols/xml-protocol.ts
522
522
  function getToolSchema(tools, toolName) {
523
523
  var _a;
524
524
  return (_a = tools.find((t) => t.name === toolName)) == null ? void 0 : _a.inputSchema;
@@ -1226,8 +1226,6 @@ var xmlProtocol = (protocolOptions) => {
1226
1226
 
1227
1227
  // src/core/protocols/yaml-protocol.ts
1228
1228
  import YAML from "yaml";
1229
- var NAME_CHAR_RE2 = /[A-Za-z0-9_:-]/;
1230
- var WHITESPACE_REGEX2 = /\s/;
1231
1229
  var LEADING_WHITESPACE_RE = /^(\s*)/;
1232
1230
  function findClosingTagEnd(text, contentStart, toolName) {
1233
1231
  let pos = contentStart;
@@ -1244,11 +1242,11 @@ function findClosingTagEnd(text, contentStart, toolName) {
1244
1242
  break;
1245
1243
  }
1246
1244
  let p = ltIdx + 2;
1247
- while (p < gtIdx && WHITESPACE_REGEX2.test(text[p])) {
1245
+ while (p < gtIdx && WHITESPACE_REGEX.test(text[p])) {
1248
1246
  p++;
1249
1247
  }
1250
1248
  const nameStart = p;
1251
- while (p < gtIdx && NAME_CHAR_RE2.test(text.charAt(p))) {
1249
+ while (p < gtIdx && NAME_CHAR_RE.test(text.charAt(p))) {
1252
1250
  p++;
1253
1251
  }
1254
1252
  const name = text.slice(nameStart, p);
@@ -1264,11 +1262,11 @@ function findClosingTagEnd(text, contentStart, toolName) {
1264
1262
  pos = gtIdx === -1 ? text.length : gtIdx + 1;
1265
1263
  } else {
1266
1264
  let p = ltIdx + 1;
1267
- while (p < text.length && WHITESPACE_REGEX2.test(text[p])) {
1265
+ while (p < text.length && WHITESPACE_REGEX.test(text[p])) {
1268
1266
  p++;
1269
1267
  }
1270
1268
  const nameStart = p;
1271
- while (p < text.length && NAME_CHAR_RE2.test(text.charAt(p))) {
1269
+ while (p < text.length && NAME_CHAR_RE.test(text.charAt(p))) {
1272
1270
  p++;
1273
1271
  }
1274
1272
  const name = text.slice(nameStart, p);
@@ -1277,7 +1275,7 @@ function findClosingTagEnd(text, contentStart, toolName) {
1277
1275
  break;
1278
1276
  }
1279
1277
  let r = gtIdx - 1;
1280
- while (r >= nameStart && WHITESPACE_REGEX2.test(text[r])) {
1278
+ while (r >= nameStart && WHITESPACE_REGEX.test(text[r])) {
1281
1279
  r--;
1282
1280
  }
1283
1281
  const selfClosing = text[r] === "/";
@@ -1395,22 +1393,14 @@ function parseYamlContent(yamlContent, options) {
1395
1393
  return null;
1396
1394
  }
1397
1395
  }
1398
- function appendTextPart(processedElements, textPart) {
1399
- if (textPart.trim()) {
1400
- processedElements.push({
1401
- type: "text",
1402
- text: textPart
1403
- });
1404
- }
1405
- }
1406
1396
  function processToolCallMatch(text, tc, currentIndex, processedElements, options) {
1407
1397
  var _a;
1408
1398
  if (tc.startIndex < currentIndex) {
1409
1399
  return currentIndex;
1410
1400
  }
1411
- appendTextPart(
1412
- processedElements,
1413
- text.substring(currentIndex, tc.startIndex)
1401
+ addTextSegment(
1402
+ text.substring(currentIndex, tc.startIndex),
1403
+ processedElements
1414
1404
  );
1415
1405
  const parsedArgs = parseYamlContent(tc.content, options);
1416
1406
  if (parsedArgs !== null) {
@@ -1528,7 +1518,7 @@ ${yamlContent}</${toolCall.toolName}>`;
1528
1518
  );
1529
1519
  }
1530
1520
  if (currentIndex < text.length) {
1531
- appendTextPart(processedElements, text.substring(currentIndex));
1521
+ addTextSegment(text.substring(currentIndex), processedElements);
1532
1522
  }
1533
1523
  return processedElements;
1534
1524
  },
@@ -2853,7 +2843,6 @@ export {
2853
2843
  logParsedChunk,
2854
2844
  logParsedSummary,
2855
2845
  getPotentialStartIndex,
2856
- escapeRegExp,
2857
2846
  jsonProtocol,
2858
2847
  isProtocolFactory,
2859
2848
  isTCMProtocolFactory,
@@ -2877,4 +2866,4 @@ export {
2877
2866
  xmlToolMiddleware,
2878
2867
  yamlToolMiddleware
2879
2868
  };
2880
- //# sourceMappingURL=chunk-7E6UFDFQ.js.map
2869
+ //# sourceMappingURL=chunk-5WKXBBCU.js.map
@@ -0,0 +1 @@
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/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/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 Math.random().toString(36).substring(2, 15);\n}\n","/**\n * Shared utilities for processing content in protocol implementations\n */\n\nimport type { LanguageModelV3Content } from \"@ai-sdk/provider\";\n\n/**\n * Adds a text segment to the processed elements array if it's not empty after trimming.\n * This prevents adding whitespace-only text elements.\n *\n * @param text - The text to add\n * @param processedElements - The array to add the text element to\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","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 } from \"../utils/id\";\nimport { addTextSegment } from \"../utils/protocol-utils\";\nimport { escapeRegExp } from \"../utils/regex\";\nimport type { TCMProtocol } from \"./protocol-interface\";\n\ninterface JsonProtocolOptions {\n toolCallStart?: string;\n toolCallEnd?: string;\n}\n\nfunction processToolCallJson(\n toolCallJson: string,\n fullMatch: string,\n processedElements: LanguageModelV3Content[],\n options?: {\n onError?: (message: string, metadata?: Record<string, unknown>) => void;\n }\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: generateId(),\n toolName: parsedToolCall.name,\n input: JSON.stringify(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?: {\n onError?: (message: string, metadata?: Record<string, unknown>) => void;\n };\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}\n\ntype StreamController =\n TransformStreamDefaultController<LanguageModelV3StreamPart>;\n\ninterface TagProcessingContext {\n state: StreamState;\n controller: StreamController;\n toolCallStart: string;\n toolCallEnd: string;\n options?: {\n onError?: (message: string, metadata?: Record<string, unknown>) => void;\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) {\n if (!state.currentToolCallJson) {\n return;\n }\n\n logParseFailure({\n phase: \"stream\",\n reason: \"Incomplete streaming tool call segment emitted as text\",\n snippet: `${toolCallStart}${state.currentToolCallJson}`,\n });\n\n const errorId = generateId();\n const errorContent = `${toolCallStart}${state.currentToolCallJson}`;\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 state.currentToolCallJson = \"\";\n}\n\nfunction handleFinishChunk(\n state: StreamState,\n controller: StreamController,\n toolCallStart: string,\n chunk: LanguageModelV3StreamPart\n) {\n if (state.buffer.length > 0) {\n flushBuffer(state, controller, toolCallStart);\n }\n closeTextBlock(state, controller);\n emitIncompleteToolCall(state, controller, toolCallStart);\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 } 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 closeTextBlock(state, controller);\n controller.enqueue({\n type: \"tool-call\",\n toolCallId: generateId(),\n toolName: parsedToolCall.name,\n input: JSON.stringify(parsedToolCall.arguments ?? {}),\n } as LanguageModelV3StreamPart);\n } catch (error) {\n logParseFailure({\n phase: \"stream\",\n reason: \"Failed to parse streaming tool call JSON segment\",\n snippet: `${toolCallStart}${state.currentToolCallJson}${toolCallEnd}`,\n error,\n });\n const errorId = generateId();\n const errorContent = `${toolCallStart}${state.currentToolCallJson}${toolCallEnd}`;\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 options?.onError?.(\n \"Could not process streaming JSON tool call; emitting original text.\",\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 }\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) {\n if (state.isInsideToolCall) {\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?: {\n onError?: (message: string, metadata?: Record<string, unknown>) => void;\n };\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?: {\n onError?: (message: string, metadata?: Record<string, unknown>) => void;\n };\n }) {\n const state: StreamState = {\n isInsideToolCall: false,\n buffer: \"\",\n currentToolCallJson: \"\",\n currentTextId: null,\n hasEmittedTextStart: false,\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, 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);\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\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?: {\n onError?: (message: string, metadata?: Record<string, unknown>) => void;\n };\n }): LanguageModelV3Content[];\n\n createStreamParser({\n tools,\n options,\n }: {\n tools: LanguageModelV3FunctionTool[];\n options?: {\n onError?: (message: string, metadata?: Record<string, unknown>) => void;\n };\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 {\n LanguageModelV3Content,\n LanguageModelV3FunctionTool,\n LanguageModelV3StreamPart,\n LanguageModelV3ToolCall,\n} from \"@ai-sdk/provider\";\nimport { parse, stringify } from \"../../rxml\";\nimport { generateId } from \"../utils/id\";\nimport { escapeRegExp } from \"../utils/regex\";\nimport { NAME_CHAR_RE, WHITESPACE_REGEX } from \"../utils/regex-constants\";\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\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: generateId(),\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: { name: string; content?: string };\n tools: LanguageModelV3FunctionTool[];\n options?: ParserOptions;\n ctrl: TransformStreamDefaultController<LanguageModelV3StreamPart>;\n flushText: FlushTextFn;\n parseOptions?: Record<string, unknown>;\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 ctrl.enqueue({\n type: \"tool-call\",\n toolCallId: generateId(),\n toolName: currentToolCall.name,\n input: JSON.stringify(parsedResult),\n });\n } catch (error) {\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 flushText(ctrl, original);\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\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\nfunction 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\ninterface ProcessToolCallInBufferParams {\n buffer: string;\n currentToolCall: { name: string; content: string };\n tools: LanguageModelV3FunctionTool[];\n options?: ParserOptions;\n controller: TransformStreamDefaultController<LanguageModelV3StreamPart>;\n flushText: FlushTextFn;\n setBuffer: (buffer: string) => void;\n parseOptions?: Record<string, unknown>;\n}\n\nfunction processToolCallInBuffer(params: ProcessToolCallInBufferParams): {\n buffer: string;\n currentToolCall: { name: string; content: string } | null;\n shouldBreak: boolean;\n} {\n const {\n buffer,\n currentToolCall,\n tools,\n options,\n controller,\n flushText,\n setBuffer,\n parseOptions,\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 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 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}\n\nfunction processNoToolCallInBuffer(params: ProcessNoToolCallInBufferParams): {\n buffer: string;\n currentToolCall: { name: string; content: string } | 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 } = 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 handleStreamingToolCallEnd({\n toolContent: \"\",\n currentToolCall: { name: earliestToolName, content: \"\" },\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: { name: earliestToolName, content: \"\" },\n shouldBreak: false,\n shouldContinue: true,\n };\n}\n\nfunction createProcessBufferHandler(\n getBuffer: () => string,\n setBuffer: (buffer: string) => void,\n getCurrentToolCall: () => { name: string; content: string } | null,\n setCurrentToolCall: (\n toolCall: { name: string; content: string } | null\n ) => void,\n tools: LanguageModelV3FunctionTool[],\n options: ParserOptions | undefined,\n toolNames: string[],\n flushText: FlushTextFn,\n parseOptions?: Record<string, unknown>\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 });\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 });\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\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 toolCalls = findToolCalls(text, toolNames);\n\n for (const tc of toolCalls) {\n if (tc.startIndex > currentIndex) {\n processedElements.push({\n type: \"text\",\n text: text.substring(currentIndex, tc.startIndex),\n });\n }\n processToolCall({\n toolCall: tc,\n tools,\n options,\n text,\n processedElements,\n parseOptions,\n });\n currentIndex = tc.endIndex;\n }\n\n if (currentIndex < text.length) {\n processedElements.push({\n type: \"text\",\n text: text.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 // biome-ignore lint/suspicious/noExplicitAny: internal state\n let currentToolCall: any = 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 processBuffer = createProcessBufferHandler(\n () => buffer,\n (newBuffer: string) => {\n buffer = newBuffer;\n },\n () => currentToolCall,\n (newToolCall: { name: string; content: string } | null) => {\n currentToolCall = newToolCall;\n },\n tools,\n options,\n toolNames,\n flushText,\n parseOptions\n );\n\n return new TransformStream({\n transform(chunk, controller) {\n if (chunk.type !== \"text-delta\") {\n 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 const unfinishedContent = `<${currentToolCall.name}>${currentToolCall.content || \"\"}${buffer}`;\n flushText(controller, unfinishedContent);\n buffer = \"\";\n currentToolCall = null;\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 { generateId } from \"../utils/id\";\nimport { addTextSegment } from \"../utils/protocol-utils\";\nimport { NAME_CHAR_RE, WHITESPACE_REGEX } from \"../utils/regex-constants\";\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\nconst LEADING_WHITESPACE_RE = /^(\\s*)/;\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 = new RegExp(`<${toolName}\\\\s*/>`, \"g\");\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 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\n if (nonEmptyLines.length === 0) {\n return {};\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 try {\n const doc = YAML.parseDocument(normalized);\n\n if (doc.errors && doc.errors.length > 0) {\n options?.onError?.(\"YAML parse error\", {\n errors: doc.errors.map((e: { message: string }) => e.message),\n });\n return null;\n }\n\n const result = doc.toJSON();\n\n if (result === null) {\n return {};\n }\n\n if (typeof result !== \"object\" || Array.isArray(result)) {\n options?.onError?.(\"YAML content must be a key-value mapping\", {\n got: typeof result,\n });\n return null;\n }\n\n return result as Record<string, unknown>;\n } catch (error) {\n options?.onError?.(\"Failed to parse YAML content\", { error });\n return null;\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: generateId(),\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 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\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 = new RegExp(`<${name}\\\\s*/>`);\n const idxOpen = buffer.indexOf(openTag);\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\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\n const toolCalls = findToolCalls(text, toolNames);\n\n for (const tc of toolCalls) {\n currentIndex = processToolCallMatch(\n text,\n tc,\n currentIndex,\n processedElements,\n options\n );\n }\n\n if (currentIndex < text.length) {\n addTextSegment(text.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: { name: string; content: string } | 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 processToolCallEnd = (\n controller: TransformStreamDefaultController<LanguageModelV3StreamPart>,\n toolContent: string,\n toolName: string\n ) => {\n const parsedArgs = parseYamlContent(toolContent, options);\n flushText(controller);\n\n if (parsedArgs !== null) {\n controller.enqueue({\n type: \"tool-call\",\n toolCallId: generateId(),\n toolName,\n input: JSON.stringify(parsedArgs),\n });\n } else {\n const original = `<${toolName}>${toolContent}</${toolName}>`;\n options?.onError?.(\"Could not parse streaming YAML tool call\", {\n toolCall: original,\n });\n flushText(controller, original);\n }\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 return false;\n }\n\n const content = buffer.substring(0, endIdx);\n buffer = buffer.substring(endIdx + endTag.length);\n processToolCallEnd(controller, content, toolName);\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 if (selfClosing) {\n buffer = buffer.substring(tagIndex + tagLength);\n processToolCallEnd(controller, \"\", tagName);\n } else {\n const startTag = `<${tagName}>`;\n buffer = buffer.substring(tagIndex + startTag.length);\n currentToolCall = { name: tagName, content: \"\" };\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 !== \"text-delta\") {\n 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 const unfinishedContent = `<${currentToolCall.name}>${buffer}`;\n flushText(controller, unfinishedContent);\n buffer = \"\";\n currentToolCall = null;\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\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\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:\n | Array<{\n name: string;\n inputSchema: string; // stringified JSONSchema7\n }>\n | undefined\n): LanguageModelV3FunctionTool[] {\n if (!originalTools) {\n return [];\n }\n\n return originalTools.map(\n (t): LanguageModelV3FunctionTool => ({\n type: \"function\",\n name: t.name,\n inputSchema: JSON.parse(t.inputSchema) as JSONSchema7,\n })\n );\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 LanguageModelV3,\n LanguageModelV3Content,\n LanguageModelV3FunctionTool,\n LanguageModelV3ToolCall,\n} from \"@ai-sdk/provider\";\nimport { generateId } from \"@ai-sdk/provider-utils\";\nimport type { TCMCoreProtocol } from \"./core/protocols/protocol-interface\";\nimport {\n getDebugLevel,\n logParsedChunk,\n logParsedSummary,\n logRawChunk,\n} from \"./core/utils/debug\";\nimport { extractOnErrorOption } from \"./core/utils/on-error\";\nimport {\n isToolChoiceActive,\n originalToolsSchema,\n type ToolCallMiddlewareProviderOptions,\n} from \"./core/utils/provider-options\";\nimport { coerceBySchema } from \"./schema-coerce\";\n\nfunction parseToolChoiceJson(\n text: string,\n providerOptions?: ToolCallMiddlewareProviderOptions\n): { name?: string; arguments?: Record<string, unknown> } {\n try {\n return JSON.parse(text);\n } catch (error) {\n const options = extractOnErrorOption(providerOptions);\n options?.onError?.(\n \"Failed to parse toolChoice JSON from generated model output\",\n {\n text,\n error: error instanceof Error ? error.message : String(error),\n }\n );\n return {};\n }\n}\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) {\n const result = await doGenerate();\n const first = result.content?.[0];\n\n let parsed: { name?: string; arguments?: Record<string, unknown> } = {};\n if (first && first.type === \"text\") {\n if (getDebugLevel() === \"parse\") {\n logRawChunk(first.text);\n }\n parsed = parseToolChoiceJson(first.text, params.providerOptions);\n }\n\n const toolCall: LanguageModelV3ToolCall = {\n type: \"tool-call\",\n toolCallId: generateId(),\n toolName: parsed.name || \"unknown\",\n input: JSON.stringify(parsed.arguments || {}),\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 return 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\n return parsed.map((part) =>\n fixToolCallWithSchema(part as LanguageModelV3Content, tools)\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 if (isToolChoiceActive(params)) {\n return handleToolChoice(doGenerate, params);\n }\n\n const tools = originalToolsSchema.decode(\n params.providerOptions?.toolCallMiddleware?.originalTools\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\nfunction fixToolCallWithSchema(\n part: LanguageModelV3Content,\n tools: LanguageModelV3FunctionTool[]\n): LanguageModelV3Content {\n if (part.type !== \"tool-call\") {\n return part;\n }\n let args: unknown = {};\n if (typeof part.input === \"string\") {\n try {\n args = JSON.parse(part.input);\n } catch {\n return part;\n }\n } else if (part.input && typeof part.input === \"object\") {\n args = part.input;\n }\n const schema = tools.find((t) => t.name === part.toolName)?.inputSchema;\n const coerced = coerceBySchema(args, schema);\n return {\n ...part,\n input: JSON.stringify(coerced ?? {}),\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 LanguageModelV3StreamPart,\n} from \"@ai-sdk/provider\";\nimport { generateId } from \"@ai-sdk/provider-utils\";\nimport type { TCMCoreProtocol } from \"./core/protocols/protocol-interface\";\nimport { getDebugLevel, logParsedChunk, logRawChunk } from \"./core/utils/debug\";\nimport { extractOnErrorOption } from \"./core/utils/on-error\";\nimport {\n isToolChoiceActive,\n originalToolsSchema,\n type ToolCallMiddlewareProviderOptions,\n} from \"./core/utils/provider-options\";\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 if (isToolChoiceActive(params)) {\n return toolChoiceStream({\n doGenerate,\n options: extractOnErrorOption(params.providerOptions),\n });\n }\n\n const { stream, ...rest } = await doStream();\n const debugLevel = getDebugLevel();\n const tools = originalToolsSchema.decode(\n params.providerOptions?.toolCallMiddleware?.originalTools\n );\n const options = {\n ...extractOnErrorOption(params.providerOptions),\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 const v3Stream = coreStream.pipeThrough(\n new TransformStream<LanguageModelV3StreamPart, LanguageModelV3StreamPart>({\n transform(part, controller) {\n if (debugLevel === \"stream\") {\n logParsedChunk(part);\n }\n controller.enqueue(part);\n },\n })\n );\n\n return {\n ...rest,\n stream: v3Stream,\n };\n}\n\nexport async function toolChoiceStream({\n doGenerate,\n options,\n}: {\n doGenerate: () => ReturnType<LanguageModelV3[\"doGenerate\"]>;\n options?: {\n onError?: (message: string, metadata?: Record<string, unknown>) => void;\n };\n}) {\n const result = await doGenerate();\n let toolJson: { name?: string; arguments?: Record<string, unknown> } = {};\n if (\n result?.content &&\n result.content.length > 0 &&\n result.content[0]?.type === \"text\"\n ) {\n try {\n toolJson = JSON.parse(result.content[0].text);\n } catch (error) {\n options?.onError?.(\n \"Failed to parse toolChoice JSON from streamed model output\",\n {\n text: result.content[0].text,\n error: error instanceof Error ? error.message : String(error),\n }\n );\n toolJson = {};\n }\n }\n\n const stream = new ReadableStream<LanguageModelV3StreamPart>({\n start(controller) {\n controller.enqueue({\n type: \"tool-call\",\n toolCallId: generateId(),\n toolName: toolJson.name || \"unknown\",\n input: JSON.stringify(toolJson.arguments || {}),\n });\n controller.enqueue({\n type: \"finish\",\n usage: result?.usage || {\n inputTokens: 0,\n outputTokens: 0,\n },\n finishReason: \"tool-calls\",\n } as unknown as LanguageModelV3StreamPart);\n controller.close();\n },\n });\n\n return {\n request: result?.request || {},\n response: result?.response || {},\n stream,\n };\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\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":["parse","newBuffer","_a","findToolCalls","createFlushTextHandler","findEarliestToolTag","generateId","generateId","_a","lines","generateId","generateId"]}
@@ -1846,6 +1846,11 @@ function createIntermediateCall(toolName, rawSegment, schema) {
1846
1846
  };
1847
1847
  }
1848
1848
 
1849
+ // src/core/utils/regex.ts
1850
+ function escapeRegExp(literal) {
1851
+ return literal.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
1852
+ }
1853
+
1849
1854
  // src/rxml/heuristics/xml-defaults.ts
1850
1855
  var MALFORMED_CLOSE_RE_G = /<\/\s+([A-Za-z0-9_:-]+)\s*>/g;
1851
1856
  var MALFORMED_CLOSE_RE = /<\/\s+([A-Za-z0-9_:-]+)\s*>/;
@@ -2087,9 +2092,6 @@ function getStringPropertyNames(schema) {
2087
2092
  }
2088
2093
  return names;
2089
2094
  }
2090
- function escapeRegExp(s) {
2091
- return s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
2092
- }
2093
2095
  function dedupeSingleTag(xml, key) {
2094
2096
  var _a, _b;
2095
2097
  const escaped = escapeRegExp(key);
@@ -2210,7 +2212,8 @@ function parse2(xml, schema, options = {}) {
2210
2212
  }
2211
2213
 
2212
2214
  export {
2215
+ escapeRegExp,
2213
2216
  stringify,
2214
2217
  parse2 as parse
2215
2218
  };
2216
- //# sourceMappingURL=chunk-EW3A6Y7O.js.map
2219
+ //# sourceMappingURL=chunk-ZDBNJWLY.js.map