@code-yeongyu/senpi 2026.7.17-3 → 2026.7.17-5

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.
Files changed (119) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/dist/core/extensions/builtin/compaction/repair-tool-pairs.d.ts +1 -0
  3. package/dist/core/extensions/builtin/compaction/repair-tool-pairs.d.ts.map +1 -1
  4. package/dist/core/extensions/builtin/compaction/repair-tool-pairs.js +20 -2
  5. package/dist/core/extensions/builtin/compaction/repair-tool-pairs.js.map +1 -1
  6. package/dist/core/extensions/builtin/mcp/config-schema.d.ts +8 -1
  7. package/dist/core/extensions/builtin/mcp/config-schema.d.ts.map +1 -1
  8. package/dist/core/extensions/builtin/mcp/config-schema.js +23 -0
  9. package/dist/core/extensions/builtin/mcp/config-schema.js.map +1 -1
  10. package/dist/core/extensions/builtin/mcp/config.d.ts +13 -0
  11. package/dist/core/extensions/builtin/mcp/config.d.ts.map +1 -1
  12. package/dist/core/extensions/builtin/mcp/config.js +36 -0
  13. package/dist/core/extensions/builtin/mcp/config.js.map +1 -1
  14. package/dist/core/extensions/builtin/mcp/service-snapshot.d.ts.map +1 -1
  15. package/dist/core/extensions/builtin/mcp/service-snapshot.js +1 -0
  16. package/dist/core/extensions/builtin/mcp/service-snapshot.js.map +1 -1
  17. package/dist/core/extensions/builtin/mcp/service-types.d.ts +12 -0
  18. package/dist/core/extensions/builtin/mcp/service-types.d.ts.map +1 -1
  19. package/dist/core/extensions/builtin/mcp/service-types.js.map +1 -1
  20. package/dist/core/extensions/builtin/mcp/service.d.ts.map +1 -1
  21. package/dist/core/extensions/builtin/mcp/service.js +2 -1
  22. package/dist/core/extensions/builtin/mcp/service.js.map +1 -1
  23. package/dist/core/extensions/builtin/mcp/status.js +1 -0
  24. package/dist/core/extensions/builtin/mcp/status.js.map +1 -1
  25. package/dist/core/extensions/builtin/websearch/index.d.ts.map +1 -1
  26. package/dist/core/extensions/builtin/websearch/index.js +20 -3
  27. package/dist/core/extensions/builtin/websearch/index.js.map +1 -1
  28. package/dist/core/extensions/index.d.ts +1 -0
  29. package/dist/core/extensions/index.d.ts.map +1 -1
  30. package/dist/core/extensions/index.js.map +1 -1
  31. package/dist/core/extensions/loader.d.ts.map +1 -1
  32. package/dist/core/extensions/loader.js +20 -4
  33. package/dist/core/extensions/loader.js.map +1 -1
  34. package/dist/core/extensions/runner.d.ts +3 -1
  35. package/dist/core/extensions/runner.d.ts.map +1 -1
  36. package/dist/core/extensions/runner.js +20 -0
  37. package/dist/core/extensions/runner.js.map +1 -1
  38. package/dist/core/extensions/types.d.ts +13 -0
  39. package/dist/core/extensions/types.d.ts.map +1 -1
  40. package/dist/core/extensions/types.js.map +1 -1
  41. package/dist/core/provider-composer.d.ts.map +1 -1
  42. package/dist/core/provider-composer.js +8 -1
  43. package/dist/core/provider-composer.js.map +1 -1
  44. package/dist/index.d.ts +1 -1
  45. package/dist/index.d.ts.map +1 -1
  46. package/dist/index.js.map +1 -1
  47. package/docs/extensions.md +46 -0
  48. package/docs/mcp.md +16 -0
  49. package/node_modules/@code-yeongyu/senpi-codemode/CHANGELOG.md +25 -0
  50. package/node_modules/@code-yeongyu/senpi-codemode/package.json +3 -3
  51. package/node_modules/@code-yeongyu/senpi-codemode/src/prompt/eval-prompt.ts +8 -7
  52. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.d.ts.map +1 -1
  53. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js +19 -4
  54. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js.map +1 -1
  55. package/node_modules/@earendil-works/pi-agent-core/dist/proxy.d.ts +3 -1
  56. package/node_modules/@earendil-works/pi-agent-core/dist/proxy.d.ts.map +1 -1
  57. package/node_modules/@earendil-works/pi-agent-core/dist/proxy.js +4 -2
  58. package/node_modules/@earendil-works/pi-agent-core/dist/proxy.js.map +1 -1
  59. package/node_modules/@earendil-works/pi-agent-core/package.json +2 -2
  60. package/node_modules/@earendil-works/pi-ai/dist/compat.d.ts +1 -0
  61. package/node_modules/@earendil-works/pi-ai/dist/compat.d.ts.map +1 -1
  62. package/node_modules/@earendil-works/pi-ai/dist/compat.js +1 -0
  63. package/node_modules/@earendil-works/pi-ai/dist/compat.js.map +1 -1
  64. package/node_modules/@earendil-works/pi-ai/dist/models.generated.d.ts +31 -0
  65. package/node_modules/@earendil-works/pi-ai/dist/models.generated.d.ts.map +1 -1
  66. package/node_modules/@earendil-works/pi-ai/dist/providers/opencode-go.models.js +9 -9
  67. package/node_modules/@earendil-works/pi-ai/dist/providers/opencode-go.models.js.map +1 -1
  68. package/node_modules/@earendil-works/pi-ai/dist/providers/openrouter.models.js +5 -5
  69. package/node_modules/@earendil-works/pi-ai/dist/providers/openrouter.models.js.map +1 -1
  70. package/node_modules/@earendil-works/pi-ai/dist/providers/together.models.d.ts +31 -0
  71. package/node_modules/@earendil-works/pi-ai/dist/providers/together.models.d.ts.map +1 -1
  72. package/node_modules/@earendil-works/pi-ai/dist/providers/together.models.js +19 -0
  73. package/node_modules/@earendil-works/pi-ai/dist/providers/together.models.js.map +1 -1
  74. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/context-transformer.d.ts.map +1 -1
  75. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/context-transformer.js +3 -0
  76. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/context-transformer.js.map +1 -1
  77. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/index.d.ts +1 -1
  78. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/index.d.ts.map +1 -1
  79. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/index.js +2 -1
  80. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/index.js.map +1 -1
  81. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/anthropic-xml/invoke-tag-scanner.d.ts +11 -0
  82. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/anthropic-xml/invoke-tag-scanner.d.ts.map +1 -1
  83. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/anthropic-xml/invoke-tag-scanner.js +40 -1
  84. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/anthropic-xml/invoke-tag-scanner.js.map +1 -1
  85. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/anthropic-xml/stream.d.ts.map +1 -1
  86. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/anthropic-xml/stream.js +92 -7
  87. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/anthropic-xml/stream.js.map +1 -1
  88. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/gemma4.d.ts +8 -1
  89. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/gemma4.d.ts.map +1 -1
  90. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/gemma4.js +129 -27
  91. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/gemma4.js.map +1 -1
  92. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/json-mix.d.ts.map +1 -1
  93. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/json-mix.js +140 -6
  94. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/json-mix.js.map +1 -1
  95. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/morph-xml.d.ts.map +1 -1
  96. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/morph-xml.js +28 -6
  97. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/morph-xml.js.map +1 -1
  98. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/yaml-xml.d.ts.map +1 -1
  99. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/yaml-xml.js +51 -18
  100. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/yaml-xml.js.map +1 -1
  101. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/stream-wrapper.d.ts.map +1 -1
  102. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/stream-wrapper.js +70 -9
  103. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/stream-wrapper.js.map +1 -1
  104. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/types.d.ts +5 -2
  105. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/types.d.ts.map +1 -1
  106. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/types.js.map +1 -1
  107. package/node_modules/@earendil-works/pi-ai/dist/types.d.ts +8 -2
  108. package/node_modules/@earendil-works/pi-ai/dist/types.d.ts.map +1 -1
  109. package/node_modules/@earendil-works/pi-ai/dist/types.js.map +1 -1
  110. package/node_modules/@earendil-works/pi-ai/dist/utils/tool-pair-repair.d.ts.map +1 -1
  111. package/node_modules/@earendil-works/pi-ai/dist/utils/tool-pair-repair.js +19 -2
  112. package/node_modules/@earendil-works/pi-ai/dist/utils/tool-pair-repair.js.map +1 -1
  113. package/node_modules/@earendil-works/pi-ai/dist/utils/tool-schema-compat.d.ts.map +1 -1
  114. package/node_modules/@earendil-works/pi-ai/dist/utils/tool-schema-compat.js +45 -1
  115. package/node_modules/@earendil-works/pi-ai/dist/utils/tool-schema-compat.js.map +1 -1
  116. package/node_modules/@earendil-works/pi-ai/package.json +1 -1
  117. package/node_modules/@earendil-works/pi-pty/package.json +1 -1
  118. package/node_modules/@earendil-works/pi-tui/package.json +1 -1
  119. package/package.json +6 -6
@@ -576,7 +576,11 @@ export function createMorphXmlStreamParser(tools, options) {
576
576
  });
577
577
  }
578
578
  else if (currentToolState.lastArgumentsSnapshot) {
579
- const recoveredArguments = JSON.parse(currentToolState.lastArgumentsSnapshot);
579
+ options?.onError?.("Could not complete streaming XML tool call at finish.", {
580
+ protocol: "morph-xml",
581
+ retainedLength: buffer.length,
582
+ });
583
+ const snapshotArguments = JSON.parse(currentToolState.lastArgumentsSnapshot);
580
584
  if (!currentToolState.started) {
581
585
  events.push({
582
586
  type: "toolcall_start",
@@ -591,17 +595,35 @@ export function createMorphXmlStreamParser(tools, options) {
591
595
  index: currentToolState.index,
592
596
  name: currentToolState.name,
593
597
  id: currentToolState.id,
594
- arguments: recoveredArguments,
598
+ arguments: snapshotArguments,
599
+ incomplete: true,
600
+ errorMessage: "Tool call was truncated mid-arguments",
595
601
  });
596
602
  }
597
603
  else {
598
- const rawToolCall = `<${currentToolState.name}>${buffer}`;
604
+ const partialArguments = parseMorphXmlPartialArgumentsSafely(buffer, currentToolState.schema) ?? {};
599
605
  options?.onError?.("Could not complete streaming XML tool call at finish.", {
600
- toolCall: rawToolCall,
606
+ protocol: "morph-xml",
607
+ retainedLength: buffer.length,
601
608
  });
602
- if (shouldEmitRawToolCallTextOnError(options)) {
603
- events.push({ type: "text", text: rawToolCall });
609
+ if (!currentToolState.started) {
610
+ events.push({
611
+ type: "toolcall_start",
612
+ index: currentToolState.index,
613
+ name: currentToolState.name,
614
+ id: currentToolState.id,
615
+ });
616
+ currentToolState.started = true;
604
617
  }
618
+ events.push({
619
+ type: "toolcall_end",
620
+ index: currentToolState.index,
621
+ name: currentToolState.name,
622
+ id: currentToolState.id,
623
+ arguments: partialArguments,
624
+ incomplete: true,
625
+ errorMessage: "Tool call was truncated mid-arguments",
626
+ });
605
627
  }
606
628
  buffer = "";
607
629
  currentToolState = null;
@@ -1 +1 @@
1
- {"version":3,"file":"morph-xml.js","sourceRoot":"","sources":["../../../src/tool-call-middleware/protocols/morph-xml.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAElE,OAAO,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEjH,MAAM,MAAM,GAAG,KAAK,CAAC;AAErB;;;GAGG;AACH,MAAM,UAAU,+BAA+B,CAAC,KAAa;IAC5D,MAAM,SAAS,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;IAEjD,MAAM,MAAM,GAAG;kEACkD,CAAC;IAElE,MAAM,WAAW,GAAG,CAAC,6CAA6C,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEjH,MAAM,KAAK,GAAG;;;;;;;;;;;SAWN,CAAC;IAET,MAAM,QAAQ,GAAG;;;;;;yBAMO,CAAC;IAEzB,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;qBAsBD,CAAC;IAErB,OAAO,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,QAAQ,EAAE,YAAY,CAAC;SACzD,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;SAC9C,IAAI,CAAC,MAAM,CAAC,CAAC;AAChB,CAAC;AAED,SAAS,uBAAuB,CAAC,KAAa;IAC7C,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QACnB,OAAO,MAAM,CAAC;IACf,CAAC;IAED,OAAO,KAAK,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACvD,CAAC;AAED,SAAS,sBAAsB,CAAC,IAAU;IACzC,MAAM,KAAK,GAAa,CAAC,SAAS,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAE/C,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;QACtB,KAAK,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC1B,MAAM,gBAAgB,GAAG,eAAe,CAAC,IAAI,CAAC,UAAqC,CAAC,CAAC;IACrF,KAAK,CAAC,IAAI,CAAC,GAAG,uBAAuB,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,CAAC;IAC5D,KAAK,CAAC,IAAI,CAAC,WAAW,eAAe,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;IAE3D,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzB,CAAC;AAED,SAAS,eAAe,CACvB,MAA8D;IAE9D,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAChC,IAAI,CAAC;YACJ,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAA4B,CAAC;QACtD,CAAC;QAAC,MAAM,CAAC;YACR,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAC1C,CAAC;IACF,CAAC;IAED,OAAO,MAAM,CAAC;AACf,CAAC;AAED,SAAS,uBAAuB,CAAC,MAAqD,EAAE,WAAmB;IAC1G,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAE1C,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QAC7C,OAAO,CAAC,GAAG,MAAM,QAAQ,CAAC,CAAC;IAC5B,CAAC;IAED,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACrB,OAAO,CAAC,GAAG,MAAM,OAAO,CAAC,CAAC;IAC3B,CAAC;IAED,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,MAAM,uBAAuB,CAAC,CAAC;IAC3C,CAAC;IAED,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAChC,OAAO,CAAC,GAAG,MAAM,YAAY,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACjD,CAAC;IAED,MAAM,SAAS,GAAG,MAAiC,CAAC;IACpD,MAAM,UAAU,GAAG,SAAS,CAAC,IAAI,CAAC;IAClC,MAAM,eAAe,GAAa,EAAE,CAAC;IAErC,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,eAAe,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC;IACrC,CAAC;SAAM,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;QAC3C,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAClC,CAAC;IAED,MAAM,YAAY,GAAG,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC;IAElF,IAAI,YAAY,EAAE,CAAC;QAClB,MAAM,UAAU,GAAG,CAAC,SAAS,CAAC,UAAU,IAAI,EAAE,CAAsD,CAAC;QACrG,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACzF,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC;QAErD,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChC,OAAO,CAAC,GAAG,MAAM,uBAAuB,CAAC,CAAC;QAC3C,CAAC;QAED,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,KAAK,MAAM,QAAQ,IAAI,aAAa,EAAE,CAAC;YACtC,MAAM,UAAU,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;YACxC,KAAK,CAAC,IAAI,CACT,yBAAyB,CAAC;gBACzB,MAAM;gBACN,QAAQ;gBACR,UAAU;gBACV,QAAQ,EAAE,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC;aACnC,CAAC,CACF,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,iBAAiB,CAAC,CAAC;IAC5D,CAAC;IAED,OAAO,CAAC,GAAG,MAAM,YAAY,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,yBAAyB,CAAC,EAClC,MAAM,EACN,QAAQ,EACR,UAAU,EACV,QAAQ,GAMR;IACA,MAAM,SAAS,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;IAC5C,MAAM,aAAa,GAAG,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC;IACzD,MAAM,MAAM,GAAG,qBAAqB,CAAC,UAAU,CAAC,CAAC;IACjD,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAEjE,OAAO,GAAG,MAAM,KAAK,QAAQ,KAAK,SAAS,KAAK,aAAa,IAAI,SAAS,EAAE,CAAC;AAC9E,CAAC;AAED,SAAS,qBAAqB,CAAC,UAAyD;IACvF,IAAI,CAAC,UAAU,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;QACnD,OAAO,EAAE,CAAC;IACX,CAAC;IAED,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,MAAM,GAAG,UAAqC,CAAC;IAErD,IAAI,MAAM,CAAC,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/C,MAAM,CAAC,IAAI,CAAC,SAAS,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClD,CAAC;IAED,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAClC,MAAM,CAAC,IAAI,CAAC,YAAY,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,IAAI,OAAO,MAAM,CAAC,WAAW,KAAK,QAAQ,EAAE,CAAC;QAC5C,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IACjC,CAAC;IAED,OAAO,MAAM,CAAC;AACf,CAAC;AAED,SAAS,aAAa,CAAC,MAAqD;IAC3E,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QAC7C,OAAO,SAAS,CAAC;IAClB,CAAC;IAED,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACrB,OAAO,KAAK,CAAC;IACd,CAAC;IAED,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;QACtB,OAAO,OAAO,CAAC;IAChB,CAAC;IAED,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAChC,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC;IACvB,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC;IAC/B,IAAI,QAAQ,GAAG,EAAE,CAAC;IAElB,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;QACpD,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;SAAM,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;QAC3C,QAAQ,GAAG,UAAU,CAAC;IACvB,CAAC;SAAM,IAAI,MAAM,CAAC,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QACtD,MAAM,QAAQ,GAAa,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAc,EAAE,EAAE,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;QAClG,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1C,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QACxB,CAAC;IACF,CAAC;SAAM,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QACvC,QAAQ,GAAG,OAAO,MAAM,CAAC,KAAK,CAAC;IAChC,CAAC;IAED,IAAI,CAAC,QAAQ,EAAE,CAAC;QACf,QAAQ,GAAG,KAAK,CAAC;IAClB,CAAC;IAED,IAAI,QAAQ,KAAK,OAAO,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QAC1C,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;YAC3C,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAuC,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;YAChG,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,KAAgC,CAAC,CAAC;QAC1D,OAAO,SAAS,QAAQ,GAAG,CAAC;IAC7B,CAAC;IAED,IAAI,QAAQ,KAAK,QAAQ,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QAChE,OAAO,WAAW,MAAM,CAAC,MAAM,GAAG,CAAC;IACpC,CAAC;IAED,OAAO,QAAQ,CAAC;AACjB,CAAC;AAED,SAAS,WAAW,CAAC,KAAc;IAClC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;QAC7D,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;IAED,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACpB,OAAO,MAAM,CAAC;IACf,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,IAAI,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;IACjD,CAAC;IAED,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAC9B,CAAC;AAED,SAAS,eAAe,CAAC,MAAqD;IAC7E,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO,MAAM,CAAC;IACf,CAAC;IAED,OAAO,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC;AAChD,CAAC;AAED,SAAS,eAAe,CAAC,KAAc;IACtC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC;IACrD,CAAC;IAED,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACxC,MAAM,MAAM,GAAG,KAAgC,CAAC;QAChD,MAAM,OAAO,GAA4B,EAAE,CAAC;QAE5C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACnD,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;gBACvB,SAAS;YACV,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;QACvC,CAAC;QAED,OAAO,OAAO,CAAC;IAChB,CAAC;IAED,OAAO,KAAK,CAAC;AACd,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,QAAgB,EAAE,WAAmB,EAAE,OAAsB;IACvG,MAAM,YAAY,GAAG,OAAO;SAC1B,MAAM,CAAC,CAAC,CAAC,EAAoB,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC;SAClD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;SAClB,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,IAAI,WAAW,GAAY,YAAY,CAAC;IACxC,IAAI,CAAC;QACJ,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IAEV,MAAM,WAAW,GAAG,aAAa,CAAC,QAAQ,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;IAE5D,OAAO;QACN,iBAAiB;QACjB,iBAAiB,SAAS,CAAC,QAAQ,CAAC,cAAc;QAClD,GAAG,WAAW;QACd,kBAAkB;KAClB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,IAAY,EAAE,IAA6B;IACjF,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC3C,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzB,CAAC;AAqBD,SAAS,gCAAgC,CAAC,OAAuB;IAChE,OAAO,OAAO,EAAE,0BAA0B,KAAK,IAAI,CAAC;AACrD,CAAC;AAED,SAAS,uBAAuB,CAAC,MAAkB;IAClD,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACpE,OAAO,EAAE,CAAC;IACX,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC;IAC9B,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;QACnC,OAAO,CAAC,SAAS,CAAC,CAAC;IACpB,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9B,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC;IAChF,CAAC;IACD,OAAO,EAAE,CAAC;AACX,CAAC;AAED,SAAS,kCAAkC,CAAC,KAAc,EAAE,MAAkB;IAC7E,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QAC7C,OAAO,IAAI,CAAC;IACb,CAAC;IACD,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;QACtB,OAAO,KAAK,CAAC;IACd,CAAC;IACD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QAC5E,OAAO,IAAI,CAAC;IACb,CAAC;IAED,MAAM,WAAW,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAAC;IACpD,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACpB,OAAO,WAAW,CAAC,MAAM,KAAK,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACjE,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YAC9D,OAAO,KAAK,CAAC;QACd,CAAC;QACD,MAAM,UAAU,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAC9C,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,kCAAkC,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;IACpF,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC/B,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC/D,OAAO,KAAK,CAAC;QACd,CAAC;QACD,MAAM,MAAM,GAAG,KAAgC,CAAC;QAChD,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,UAAU,CAAC,EAAE,EAAE,CACzD,kCAAkC,CAAC,UAAU,EAAE,iBAAiB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAC9E,CAAC;IACH,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO,WAAW,CAAC,MAAM,KAAK,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACnE,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO,WAAW,CAAC,MAAM,KAAK,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IACtG,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;QAChC,OAAO,WAAW,CAAC,MAAM,KAAK,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IACpE,CAAC;IAED,OAAO,IAAI,CAAC;AACb,CAAC;AAED,SAAS,yBAAyB,CAAC,IAAsB,EAAE,eAAwC;IAClG,IAAI,CAAC,IAAI,EAAE,CAAC;QACX,OAAO,IAAI,CAAC;IACb,CAAC;IAED,IAAI,CAAC;QACJ,qBAAqB,CAAC,IAAI,EAAE;YAC3B,IAAI,EAAE,UAAU;YAChB,EAAE,EAAE,sBAAsB;YAC1B,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,SAAS,EAAE,eAAe;SAC1B,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACb,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,KAAK,CAAC;IACd,CAAC;AACF,CAAC;AAED,SAAS,iCAAiC,CACzC,IAAsB,EACtB,QAAgB,EAChB,MAAkB;IAElB,IAAI,eAAwC,CAAC;IAC7C,IAAI,CAAC;QACJ,eAAe,GAAG,sBAAsB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC5D,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,IAAI,CAAC;IACb,CAAC;IACD,IAAI,CAAC,kCAAkC,CAAC,eAAe,EAAE,MAAM,CAAC,EAAE,CAAC;QAClE,OAAO,IAAI,CAAC;IACb,CAAC;IACD,IAAI,CAAC,yBAAyB,CAAC,IAAI,EAAE,eAAe,CAAC,EAAE,CAAC;QACvD,OAAO,IAAI,CAAC;IACb,CAAC;IACD,OAAO,eAAe,CAAC;AACxB,CAAC;AAED,SAAS,mCAAmC,CAAC,QAAgB,EAAE,MAAkB;IAChF,IAAI,CAAC;QACJ,OAAO,6BAA6B,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACxD,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,IAAI,CAAC;IACb,CAAC;AACF,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,IAAY,EAAE,KAAa,EAAE,OAAuB;IAC9F,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7C,OAAO,EAAE,CAAC;IACX,CAAC;IAED,MAAM,aAAa,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;IACjD,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IAChE,MAAM,eAAe,GAAqB,EAAE,CAAC;IAE7C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QAC1B,IAAI,gBAAgB,GAAG,sBAAsB,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAClE,OAAO,gBAAgB,EAAE,CAAC;YACzB,MAAM,eAAe,GAAG,iCAAiC,CAAC,IAAI,EAAE,EAAE,EAAE,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAClG,IAAI,CAAC,eAAe,EAAE,CAAC;gBACtB,OAAO,EAAE,OAAO,EAAE,CAAC,kCAAkC,EAAE;oBACtD,QAAQ,EAAE,gBAAgB,CAAC,GAAG;iBAC9B,CAAC,CAAC;gBACH,gBAAgB,GAAG,sBAAsB,CACxC,IAAI,EACJ,IAAI,CAAC,IAAI,EACT,gBAAgB,CAAC,KAAK,GAAG,gBAAgB,CAAC,MAAM,CAChD,CAAC;gBACF,SAAS;YACV,CAAC;YACD,eAAe,CAAC,IAAI,CAAC;gBACpB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,SAAS,EAAE,eAAe;aAC1B,CAAC,CAAC;YACH,gBAAgB,GAAG,sBAAsB,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,gBAAgB,CAAC,KAAK,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAC9G,CAAC;QAED,MAAM,eAAe,GAAG,IAAI,MAAM,CACjC,QAAQ,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,4BAA4B,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EACzF,GAAG,CACH,CAAC;QACF,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;YACpD,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAChC,MAAM,eAAe,GAAG,iCAAiC,CACxD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EACtB,QAAQ,EACR,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAC5B,CAAC;YACF,IAAI,CAAC,eAAe,EAAE,CAAC;gBACtB,OAAO,EAAE,OAAO,EAAE,CAAC,kCAAkC,EAAE;oBACtD,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;iBAClB,CAAC,CAAC;gBACH,SAAS;YACV,CAAC;YACD,eAAe,CAAC,IAAI,CAAC;gBACpB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,SAAS,EAAE,eAAe;aAC1B,CAAC,CAAC;QACJ,CAAC;IACF,CAAC;IAED,OAAO,eAAe,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,KAAa,EAAE,OAAuB;IAChF,MAAM,aAAa,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;IACjD,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IAEhE,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,iBAAiB,GAAG,CAAC,CAAC;IAC1B,IAAI,gBAAgB,GAA2B,IAAI,CAAC;IAEpD,SAAS,qBAAqB,CAC7B,MAA2B,EAC3B,SAA0B,EAC1B,eAAwC;QAExC,IAAI,CAAC,kCAAkC,CAAC,eAAe,EAAE,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;YAC5E,OAAO;QACR,CAAC;QAED,MAAM,iBAAiB,GAAG,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;QAC1D,IAAI,iBAAiB,KAAK,SAAS,CAAC,qBAAqB,IAAI,iBAAiB,KAAK,IAAI,EAAE,CAAC;YACzF,OAAO;QACR,CAAC;QAED,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;YACxB,MAAM,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,gBAAgB;gBACtB,KAAK,EAAE,SAAS,CAAC,KAAK;gBACtB,IAAI,EAAE,SAAS,CAAC,IAAI;gBACpB,EAAE,EAAE,SAAS,CAAC,EAAE;aAChB,CAAC,CAAC;YACH,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC;QAC1B,CAAC;QAED,SAAS,CAAC,qBAAqB,GAAG,iBAAiB,CAAC;QACpD,MAAM,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,gBAAgB;YACtB,KAAK,EAAE,SAAS,CAAC,KAAK;YACtB,cAAc,EAAE,iBAAiB;SACjC,CAAC,CAAC;IACJ,CAAC;IAED,SAAS,aAAa;QACrB,MAAM,MAAM,GAAwB,EAAE,CAAC;QAEvC,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,IAAI,gBAAgB,EAAE,CAAC;gBACtB,MAAM,iBAAiB,GAAG,IAAI,MAAM,CAAC,SAAS,YAAY,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC1F,MAAM,eAAe,GAAG,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAEvD,IAAI,CAAC,eAAe,IAAI,eAAe,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;oBAC7D,MAAM,gBAAgB,GAAG,mCAAmC,CAAC,MAAM,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC;oBAC9F,IAAI,gBAAgB,EAAE,CAAC;wBACtB,qBAAqB,CAAC,MAAM,EAAE,gBAAgB,EAAE,gBAAgB,CAAC,CAAC;oBACnE,CAAC;oBACD,MAAM;gBACP,CAAC;gBAED,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,eAAe,CAAC,KAAK,CAAC,CAAC;gBACxD,MAAM,gBAAgB,GAAG,mCAAmC,CAAC,QAAQ,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC;gBAChG,IAAI,gBAAgB,EAAE,CAAC;oBACtB,qBAAqB,CAAC,MAAM,EAAE,gBAAgB,EAAE,gBAAgB,CAAC,CAAC;gBACnE,CAAC;gBAED,MAAM,eAAe,GAAG,iCAAiC,CACxD,gBAAgB,CAAC,IAAI,EACrB,QAAQ,EACR,gBAAgB,CAAC,MAAM,CACvB,CAAC;gBACF,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,CAAC,IAAI,IAAI,QAAQ,GAAG,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC;gBACtF,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,KAAK,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;gBACzE,IAAI,CAAC,eAAe,EAAE,CAAC;oBACtB,OAAO,EAAE,OAAO,EAAE,CAAC,4CAA4C,EAAE;wBAChE,QAAQ,EAAE,gBAAgB;qBAC1B,CAAC,CAAC;oBACH,IAAI,CAAC,gBAAgB,CAAC,OAAO,IAAI,gCAAgC,CAAC,OAAO,CAAC,EAAE,CAAC;wBAC5E,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC,CAAC;oBACvD,CAAC;oBACD,gBAAgB,GAAG,IAAI,CAAC;oBACxB,SAAS;gBACV,CAAC;gBAED,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC;oBAC/B,MAAM,CAAC,IAAI,CAAC;wBACX,IAAI,EAAE,gBAAgB;wBACtB,KAAK,EAAE,gBAAgB,CAAC,KAAK;wBAC7B,IAAI,EAAE,gBAAgB,CAAC,IAAI;wBAC3B,EAAE,EAAE,gBAAgB,CAAC,EAAE;qBACvB,CAAC,CAAC;oBACH,gBAAgB,CAAC,OAAO,GAAG,IAAI,CAAC;oBAChC,qBAAqB,CAAC,MAAM,EAAE,gBAAgB,EAAE,eAAe,CAAC,CAAC;gBAClE,CAAC;gBACD,MAAM,CAAC,IAAI,CAAC;oBACX,IAAI,EAAE,cAAc;oBACpB,KAAK,EAAE,gBAAgB,CAAC,KAAK;oBAC7B,IAAI,EAAE,gBAAgB,CAAC,IAAI;oBAC3B,EAAE,EAAE,gBAAgB,CAAC,EAAE;oBACvB,SAAS,EAAE,eAAe;iBAC1B,CAAC,CAAC;gBACH,gBAAgB,GAAG,IAAI,CAAC;gBACxB,SAAS;YACV,CAAC;YAED,MAAM,UAAU,GAAG,sBAAsB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YAC7D,IAAI,CAAC,UAAU,EAAE,CAAC;gBACjB,MAAM,UAAU,GAAG,oBAAoB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;gBAC3D,IAAI,UAAU,KAAK,CAAC,EAAE,CAAC;oBACtB,MAAM;gBACP,CAAC;gBAED,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,EAAE,CAAC,CAAC;gBACjE,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;gBAClC,SAAS;YACV,CAAC;YAED,IAAI,UAAU,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;gBAC1B,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACxE,CAAC;YAED,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAChE,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC;gBAC5B,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;gBAC1C,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;gBAClD,MAAM,eAAe,GAAG,iCAAiC,CAAC,IAAI,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;gBAC5E,IAAI,CAAC,eAAe,EAAE,CAAC;oBACtB,OAAO,EAAE,OAAO,EAAE,CAAC,kCAAkC,EAAE;wBACtD,QAAQ,EAAE,UAAU,CAAC,GAAG;qBACxB,CAAC,CAAC;oBACH,IAAI,gCAAgC,CAAC,OAAO,CAAC,EAAE,CAAC;wBAC/C,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC;oBACrD,CAAC;oBACD,SAAS;gBACV,CAAC;gBACD,MAAM,EAAE,GAAG,UAAU,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;gBAC1C,MAAM,KAAK,GAAG,iBAAiB,CAAC;gBAChC,iBAAiB,IAAI,CAAC,CAAC;gBACvB,MAAM,CAAC,IAAI,CAAC;oBACX,IAAI,EAAE,gBAAgB;oBACtB,KAAK;oBACL,IAAI,EAAE,UAAU,CAAC,IAAI;oBACrB,EAAE;iBACF,CAAC,CAAC;gBACH,MAAM,CAAC,IAAI,CAAC;oBACX,IAAI,EAAE,cAAc;oBACpB,KAAK;oBACL,IAAI,EAAE,UAAU,CAAC,IAAI;oBACrB,EAAE;oBACF,SAAS,EAAE,eAAe;iBAC1B,CAAC,CAAC;gBACH,SAAS;YACV,CAAC;YACD,gBAAgB,GAAG;gBAClB,EAAE,EAAE,UAAU,CAAC,MAAM,CAAC,UAAU,EAAE;gBAClC,KAAK,EAAE,iBAAiB;gBACxB,qBAAqB,EAAE,IAAI;gBAC3B,IAAI,EAAE,UAAU,CAAC,IAAI;gBACrB,MAAM,EAAE,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC;gBAC1C,OAAO,EAAE,KAAK;gBACd,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC;aAClC,CAAC;YACF,iBAAiB,IAAI,CAAC,CAAC;QACxB,CAAC;QAED,OAAO,MAAM,CAAC;IACf,CAAC;IAED,OAAO;QACN,IAAI,CAAC,SAAiB;YACrB,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC5B,OAAO,EAAE,CAAC;YACX,CAAC;YAED,MAAM,IAAI,SAAS,CAAC;YACpB,OAAO,aAAa,EAAE,CAAC;QACxB,CAAC;QAED,MAAM;YACL,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;YAE/B,IAAI,CAAC,gBAAgB,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5C,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;gBAC5C,MAAM,GAAG,EAAE,CAAC;YACb,CAAC;YAED,IAAI,gBAAgB,EAAE,CAAC;gBACtB,MAAM,eAAe,GAAG,iCAAiC,CACxD,gBAAgB,CAAC,IAAI,EACrB,MAAM,EACN,gBAAgB,CAAC,MAAM,CACvB,CAAC;gBACF,IAAI,eAAe,EAAE,CAAC;oBACrB,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC;wBAC/B,MAAM,CAAC,IAAI,CAAC;4BACX,IAAI,EAAE,gBAAgB;4BACtB,KAAK,EAAE,gBAAgB,CAAC,KAAK;4BAC7B,IAAI,EAAE,gBAAgB,CAAC,IAAI;4BAC3B,EAAE,EAAE,gBAAgB,CAAC,EAAE;yBACvB,CAAC,CAAC;wBACH,gBAAgB,CAAC,OAAO,GAAG,IAAI,CAAC;oBACjC,CAAC;oBACD,IAAI,gBAAgB,CAAC,qBAAqB,KAAK,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,EAAE,CAAC;wBAChF,qBAAqB,CAAC,MAAM,EAAE,gBAAgB,EAAE,eAAe,CAAC,CAAC;oBAClE,CAAC;oBACD,MAAM,CAAC,IAAI,CAAC;wBACX,IAAI,EAAE,cAAc;wBACpB,KAAK,EAAE,gBAAgB,CAAC,KAAK;wBAC7B,IAAI,EAAE,gBAAgB,CAAC,IAAI;wBAC3B,EAAE,EAAE,gBAAgB,CAAC,EAAE;wBACvB,SAAS,EAAE,eAAe;qBAC1B,CAAC,CAAC;gBACJ,CAAC;qBAAM,IAAI,gBAAgB,CAAC,qBAAqB,EAAE,CAAC;oBACnD,MAAM,kBAAkB,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,qBAAqB,CAA4B,CAAC;oBACzG,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC;wBAC/B,MAAM,CAAC,IAAI,CAAC;4BACX,IAAI,EAAE,gBAAgB;4BACtB,KAAK,EAAE,gBAAgB,CAAC,KAAK;4BAC7B,IAAI,EAAE,gBAAgB,CAAC,IAAI;4BAC3B,EAAE,EAAE,gBAAgB,CAAC,EAAE;yBACvB,CAAC,CAAC;wBACH,gBAAgB,CAAC,OAAO,GAAG,IAAI,CAAC;oBACjC,CAAC;oBACD,MAAM,CAAC,IAAI,CAAC;wBACX,IAAI,EAAE,cAAc;wBACpB,KAAK,EAAE,gBAAgB,CAAC,KAAK;wBAC7B,IAAI,EAAE,gBAAgB,CAAC,IAAI;wBAC3B,EAAE,EAAE,gBAAgB,CAAC,EAAE;wBACvB,SAAS,EAAE,kBAAkB;qBAC7B,CAAC,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACP,MAAM,WAAW,GAAG,IAAI,gBAAgB,CAAC,IAAI,IAAI,MAAM,EAAE,CAAC;oBAC1D,OAAO,EAAE,OAAO,EAAE,CAAC,uDAAuD,EAAE;wBAC3E,QAAQ,EAAE,WAAW;qBACrB,CAAC,CAAC;oBACH,IAAI,gCAAgC,CAAC,OAAO,CAAC,EAAE,CAAC;wBAC/C,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;oBAClD,CAAC;gBACF,CAAC;gBAED,MAAM,GAAG,EAAE,CAAC;gBACZ,gBAAgB,GAAG,IAAI,CAAC;YACzB,CAAC;YAED,OAAO,MAAM,CAAC;QACf,CAAC;KACD,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,OAAe,EAAE,KAAc,EAAE,KAAa;IACpE,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAEpC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QAC3C,OAAO,CAAC,GAAG,MAAM,IAAI,OAAO,MAAM,OAAO,GAAG,CAAC,CAAC;IAC/C,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;QAC1F,MAAM,YAAY,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAClF,OAAO,CAAC,GAAG,MAAM,IAAI,OAAO,IAAI,YAAY,KAAK,OAAO,GAAG,CAAC,CAAC;IAC9D,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,CAAC,GAAG,MAAM,IAAI,OAAO,MAAM,OAAO,GAAG,CAAC,CAAC;QAC/C,CAAC;QACD,MAAM,KAAK,GAAG,CAAC,GAAG,MAAM,IAAI,OAAO,GAAG,CAAC,CAAC;QACxC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YAC1B,KAAK,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;QACvD,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,KAAK,OAAO,GAAG,CAAC,CAAC;QACrC,OAAO,KAAK,CAAC;IACd,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,KAAgC,CAAC,CAAC;IACjE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,MAAM,IAAI,OAAO,MAAM,OAAO,GAAG,CAAC,CAAC;IAC/C,CAAC;IAED,MAAM,KAAK,GAAG,CAAC,GAAG,MAAM,IAAI,OAAO,GAAG,CAAC,CAAC;IACxC,KAAK,MAAM,CAAC,GAAG,EAAE,UAAU,CAAC,IAAI,OAAO,EAAE,CAAC;QACzC,KAAK,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;IAC1D,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,KAAK,OAAO,GAAG,CAAC,CAAC;IACrC,OAAO,KAAK,CAAC;AACd,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAa;IACzC,OAAO,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,IAAI,CAAC,UAAqC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/G,CAAC;AAED,SAAS,sBAAsB,CAAC,QAAgB,EAAE,MAAkB;IACnE,MAAM,UAAU,GAAG,YAAY,CAAC,SAAS,QAAQ,SAAS,CAAC,CAAC;IAC5D,IAAI,CAAC,UAAU,EAAE,CAAC;QACjB,OAAO,EAAE,CAAC;IACX,CAAC;IAED,OAAO,uBAAuB,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AAC7D,CAAC;AAED,SAAS,6BAA6B,CAAC,QAAgB,EAAE,MAAkB;IAC1E,MAAM,gBAAgB,GAA4B,EAAE,CAAC;IACrD,MAAM,gBAAgB,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IACjD,IAAI,QAAQ,GAAG,CAAC,CAAC;IAEjB,OAAO,QAAQ,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC;QACnC,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACrD,IAAI,YAAY,KAAK,CAAC,CAAC,EAAE,CAAC;YACzB,MAAM;QACP,CAAC;QAED,IAAI,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9D,MAAM;QACP,CAAC;QAED,MAAM,UAAU,GAAG,eAAe,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QAC3D,IAAI,CAAC,UAAU,EAAE,CAAC;YACjB,MAAM;QACP,CAAC;QAED,MAAM,cAAc,GAAG,iBAAiB,CAAC,gBAAgB,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;QAC5E,MAAM,UAAU,GAAG,KAAK,UAAU,CAAC,IAAI,GAAG,CAAC;QAC3C,MAAM,eAAe,GAAG,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;QAE1E,IAAI,eAAe,KAAK,CAAC,CAAC,EAAE,CAAC;YAC5B,MAAM,gBAAgB,GAAG,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YAC7D,IAAI,gBAAgB,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBACpC,MAAM;YACP,CAAC;YAED,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,qBAAqB,CAAC,gBAAgB,EAAE,cAAc,CAAC,CAAC;YAC5F,MAAM;QACP,CAAC;QAED,MAAM,YAAY,GAAG,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,YAAY,EAAE,eAAe,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;QACrG,IAAI,CAAC,YAAY,EAAE,CAAC;YACnB,MAAM;QACP,CAAC;QAED,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,mBAAmB,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;QACtF,QAAQ,GAAG,eAAe,GAAG,UAAU,CAAC,MAAM,CAAC;IAChD,CAAC;IAED,OAAO,gBAAgB,CAAC;AACzB,CAAC;AAED,SAAS,YAAY,CAAC,GAAW;IAChC,MAAM,UAAU,GAAG,6CAA6C,CAAC;IACjE,MAAM,KAAK,GAAc,EAAE,CAAC;IAC5B,IAAI,QAAQ,GAAmB,IAAI,CAAC;IACpC,IAAI,SAAS,GAAG,CAAC,CAAC;IAElB,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9C,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAC3B,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC;QAC/B,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC;QACtC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACzB,MAAM,aAAa,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC;QAEvC,IAAI,UAAU,KAAK,SAAS,IAAI,CAAC,SAAS,IAAI,CAAC,OAAO,EAAE,CAAC;YACxD,SAAS;QACV,CAAC;QAED,MAAM,WAAW,GAAG,GAAG,CAAC,KAAK,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QACrD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChD,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACxD,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;QAC3E,CAAC;aAAM,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,WAAW,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChE,OAAO,IAAI,CAAC;QACb,CAAC;QAED,IAAI,YAAY,EAAE,CAAC;YAClB,MAAM,aAAa,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;YAClC,IAAI,CAAC,aAAa,IAAI,aAAa,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBACtD,OAAO,IAAI,CAAC;YACb,CAAC;YAED,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtB,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;gBACtD,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,CAAC;YAC9E,CAAC;iBAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACtB,QAAQ,GAAG,aAAa,CAAC;YAC1B,CAAC;iBAAM,CAAC;gBACP,OAAO,IAAI,CAAC;YACb,CAAC;QACF,CAAC;aAAM,CAAC;YACP,MAAM,IAAI,GAAY;gBACrB,IAAI,EAAE,OAAO;gBACb,QAAQ,EAAE,EAAE;gBACZ,KAAK,EAAE,EAAE;gBACT,YAAY,EAAE,EAAE;aAChB,CAAC;YAEF,IAAI,aAAa,EAAE,CAAC;gBACnB,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACtB,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAC7C,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;gBACrE,CAAC;qBAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACtB,QAAQ,GAAG,IAAI,CAAC;gBACjB,CAAC;qBAAM,CAAC;oBACP,OAAO,IAAI,CAAC;gBACb,CAAC;YACF,CAAC;iBAAM,CAAC;gBACP,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClB,CAAC;QACF,CAAC;QAED,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC,MAAM,CAAC;IAC3C,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC;IACb,CAAC;IAED,IAAI,SAAS,GAAG,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtE,OAAO,IAAI,CAAC;IACb,CAAC;IAED,OAAO,QAAQ,CAAC;AACjB,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAa;IACtC,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK;SAC7B,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;SACjF,IAAI,CAAC,EAAE,CAAC,CAAC;IACX,OAAO,IAAI,IAAI,CAAC,IAAI,IAAI,YAAY,KAAK,IAAI,CAAC,IAAI,GAAG,CAAC;AACvD,CAAC;AAED,SAAS,uBAAuB,CAAC,QAAmB,EAAE,MAAkB;IACvE,MAAM,WAAW,GAA4B,EAAE,CAAC;IAEhD,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;QAC9B,MAAM,cAAc,GAAG,iBAAiB,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7D,MAAM,aAAa,GAAG,mBAAmB,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;QACjE,MAAM,aAAa,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAE9C,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;YACjC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC;YACxC,SAAS;QACV,CAAC;QAED,IAAI,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;YAClC,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAClC,SAAS;QACV,CAAC;QAED,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;IAC1D,CAAC;IAED,OAAO,WAAW,CAAC;AACpB,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAa,EAAE,MAAkB;IAC7D,MAAM,gBAAgB,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IACjD,MAAM,WAAW,GAAG,cAAc,CAAC,gBAAgB,CAAC,CAAC;IAErD,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChC,OAAO,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,gBAAgB,CAAC,CAAC;IACrE,CAAC;IAED,IAAI,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACpC,OAAO,IAAI,CAAC,KAAK;aACf,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;aAC9F,IAAI,CAAC,EAAE,CAAC,CAAC;IACZ,CAAC;IAED,IAAI,kBAAkB,CAAC,IAAI,EAAE,gBAAgB,CAAC,EAAE,CAAC;QAChD,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,EAAE,CAAC;YAC1D,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;QAC5E,CAAC;QACD,MAAM,UAAU,GAAG,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;QACxD,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;QACzE,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,mBAAmB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC;IACzE,CAAC;IAED,OAAO,uBAAuB,CAAC,IAAI,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;AACjE,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAa,EAAE,MAAkB;IAC5D,MAAM,KAAK,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IACrC,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC;IACb,CAAC;IAED,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;AAC9D,CAAC;AAED,SAAS,kBAAkB,CAAC,MAAkB;IAC7C,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC3C,OAAO,SAAS,CAAC;IAClB,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;IAC3B,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACjE,OAAO,KAAgC,CAAC;IACzC,CAAC;IAED,OAAO,SAAS,CAAC;AAClB,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAkB,EAAE,YAAoB;IAClE,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC3C,OAAO,SAAS,CAAC;IAClB,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;IACrC,IAAI,UAAU,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QAChF,MAAM,cAAc,GAAI,UAAsC,CAAC,YAAY,CAAC,CAAC;QAC7E,IAAI,cAAc,KAAK,SAAS,IAAI,OAAO,cAAc,KAAK,SAAS,IAAI,OAAO,cAAc,KAAK,QAAQ,EAAE,CAAC;YAC/G,OAAO,cAA4B,CAAC;QACrC,CAAC;IACF,CAAC;IAED,KAAK,MAAM,QAAQ,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC;QACpD,MAAM,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;QACtC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;YAClC,SAAS;QACV,CAAC;QAED,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE,CAAC;YACxC,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;gBAC7D,SAAS;YACV,CAAC;YAED,MAAM,oBAAoB,GAAG,iBAAiB,CAAC,WAAsC,EAAE,YAAY,CAAC,CAAC;YACrG,IAAI,oBAAoB,KAAK,SAAS,EAAE,CAAC;gBACxC,OAAO,oBAAoB,CAAC;YAC7B,CAAC;QACF,CAAC;IACF,CAAC;IAED,OAAO,SAAS,CAAC;AAClB,CAAC;AAED,SAAS,cAAc,CAAC,MAAkB;IACzC,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC3C,OAAO,EAAE,CAAC;IACX,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC;IAC/B,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;QACpC,OAAO,CAAC,UAAU,CAAC,CAAC;IACrB,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC;IACjF,CAAC;IAED,OAAO,EAAE,CAAC;AACX,CAAC;AAED,SAAS,cAAc,CAAC,QAAgB,EAAE,MAAkB;IAC3D,MAAM,YAAY,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC3C,MAAM,YAAY,GAAG,YAAY,CAAC,IAAI,EAAE,CAAC;IACzC,MAAM,KAAK,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IAErC,IAAI,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;QAC/D,OAAO,MAAM,CAAC,QAAQ,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,sBAAsB,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;QAC3E,OAAO,MAAM,CAAC,YAAY,CAAC,CAAC;IAC7B,CAAC;IAED,IAAI,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QAC/B,IAAI,YAAY,KAAK,MAAM,EAAE,CAAC;YAC7B,OAAO,IAAI,CAAC;QACb,CAAC;QAED,IAAI,YAAY,KAAK,OAAO,EAAE,CAAC;YAC9B,OAAO,KAAK,CAAC;QACd,CAAC;IACF,CAAC;IAED,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,YAAY,KAAK,MAAM,EAAE,CAAC;QACvD,OAAO,IAAI,CAAC;IACb,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtF,IAAI,CAAC;YACJ,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QACjC,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;IACX,CAAC;IAED,OAAO,YAAY,CAAC;AACrB,CAAC;AAED,SAAS,qBAAqB,CAAC,QAAgB,EAAE,MAAkB;IAClE,MAAM,KAAK,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IACrC,IAAI,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC3D,MAAM,YAAY,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;QAClD,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,sBAAsB,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;YAC1E,OAAO,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAC7F,CAAC;IACF,CAAC;IAED,OAAO,WAAW,CAAC,QAAQ,CAAC,CAAC;AAC9B,CAAC;AAED,SAAS,eAAe,CAAC,IAAY,EAAE,UAAkB;IACxD,MAAM,UAAU,GAAG,6BAA6B,CAAC;IACjD,UAAU,CAAC,SAAS,GAAG,UAAU,CAAC;IAClC,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpC,MAAM,OAAO,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;IAC3B,IAAI,CAAC,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC;IACb,CAAC;IAED,OAAO;QACN,QAAQ,EAAE,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM;QACvC,IAAI,EAAE,OAAO;KACb,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,IAAY;IAC9B,OAAO,IAAI;SACT,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;SACvB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC3B,CAAC;AAED,SAAS,WAAW,CAAC,IAAY;IAChC,OAAO,IAAI;SACT,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;SACrB,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;SACrB,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;SACvB,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;SACvB,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,YAAY,CAAC,IAAY;IACjC,OAAO,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;AACpD,CAAC","sourcesContent":["import type { TextContent, Tool } from \"../../types.ts\";\nimport { validateToolArguments } from \"../../utils/validation.ts\";\nimport type { ParsedToolCall, ParserOptions, StreamParser, StreamParserEvent } from \"../types.ts\";\nimport { findEarliestXmlToolTag, findSelfClosingToolTag, getSafeXmlTextLength } from \"./xml-tool-tag-scanner.ts\";\n\nconst INDENT = \" \";\n\n/**\n * Formats tools as an XML-style system prompt for MorphXml protocol.\n * Ported from ai-sdk-tool-call-middleware morph-xml-prompt.ts\n */\nexport function morphXmlFormatToolsSystemPrompt(tools: Tool[]): string {\n\tconst toolsText = renderToolsForXmlPrompt(tools);\n\n\tconst header = `# Tools\nYou may call one or more functions to assist with the user query.`;\n\n\tconst definitions = [\"You have access to the following functions:\", \"<tools>\", toolsText, \"</tools>\"].join(\"\\n\");\n\n\tconst rules = `<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- For array parameters, wrap each element in an <item> tag inside the parameter tag.\n- For array<object> parameters, every <item> must contain the object's fields as child tags.\n- Never repeat the array parameter tag to represent multiple entries.\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\tconst examples = `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\nthat can span\nmultiple lines</example_parameter_2>\n</example_function_name>`;\n\n\tconst arrayExample = `Array example:\n<example_array_tool>\n <items>\n <item>first</item>\n <item>second</item>\n </items>\n</example_array_tool>\n\nArray<object> example:\n<example_todo_tool>\n <todos>\n <item>\n <content>Inspect parser edge cases</content>\n <status>in_progress</status>\n <priority>high</priority>\n </item>\n <item>\n <content>Add regression tests</content>\n <status>pending</status>\n <priority>medium</priority>\n </item>\n </todos>\n</example_todo_tool>`;\n\n\treturn [header, definitions, rules, examples, arrayExample]\n\t\t.filter((section) => section.trim().length > 0)\n\t\t.join(\"\\n\\n\");\n}\n\nfunction renderToolsForXmlPrompt(tools: Tool[]): string {\n\tif (!tools.length) {\n\t\treturn \"none\";\n\t}\n\n\treturn tools.map(renderToolForXmlPrompt).join(\"\\n\\n\");\n}\n\nfunction renderToolForXmlPrompt(tool: Tool): string {\n\tconst lines: string[] = [`name: ${tool.name}`];\n\n\tif (tool.description) {\n\t\tlines.push(`description: ${tool.description}`);\n\t}\n\n\tlines.push(\"parameters:\");\n\tconst normalizedSchema = normalizeSchema(tool.parameters as Record<string, unknown>);\n\tlines.push(...renderParametersSummary(normalizedSchema, 1));\n\tlines.push(`schema: ${stringifySchema(normalizedSchema)}`);\n\n\treturn lines.join(\"\\n\");\n}\n\nfunction normalizeSchema(\n\tschema: Record<string, unknown> | boolean | string | undefined,\n): Record<string, unknown> | boolean | undefined {\n\tif (typeof schema === \"string\") {\n\t\ttry {\n\t\t\treturn JSON.parse(schema) as Record<string, unknown>;\n\t\t} catch {\n\t\t\treturn { type: \"string\", const: schema };\n\t\t}\n\t}\n\n\treturn schema;\n}\n\nfunction renderParametersSummary(schema: Record<string, unknown> | boolean | undefined, indentLevel: number): string[] {\n\tconst indent = INDENT.repeat(indentLevel);\n\n\tif (schema === undefined || schema === null) {\n\t\treturn [`${indent}(none)`];\n\t}\n\n\tif (schema === true) {\n\t\treturn [`${indent}(any)`];\n\t}\n\n\tif (schema === false) {\n\t\treturn [`${indent}(no valid parameters)`];\n\t}\n\n\tif (typeof schema !== \"object\") {\n\t\treturn [`${indent}- value (${String(schema)})`];\n\t}\n\n\tconst schemaObj = schema as Record<string, unknown>;\n\tconst schemaType = schemaObj.type;\n\tconst schemaTypeArray: string[] = [];\n\n\tif (Array.isArray(schemaType)) {\n\t\tschemaTypeArray.push(...schemaType);\n\t} else if (typeof schemaType === \"string\") {\n\t\tschemaTypeArray.push(schemaType);\n\t}\n\n\tconst isObjectLike = schemaTypeArray.includes(\"object\") || !!schemaObj.properties;\n\n\tif (isObjectLike) {\n\t\tconst properties = (schemaObj.properties ?? {}) as Record<string, Record<string, unknown> | boolean>;\n\t\tconst requiredSet = new Set(Array.isArray(schemaObj.required) ? schemaObj.required : []);\n\t\tconst propertyNames = Object.keys(properties).sort();\n\n\t\tif (propertyNames.length === 0) {\n\t\t\treturn [`${indent}(no named parameters)`];\n\t\t}\n\n\t\tconst lines: string[] = [];\n\t\tfor (const propName of propertyNames) {\n\t\t\tconst propSchema = properties[propName];\n\t\t\tlines.push(\n\t\t\t\trenderPropertySummaryLine({\n\t\t\t\t\tindent,\n\t\t\t\t\tpropName,\n\t\t\t\t\tpropSchema,\n\t\t\t\t\trequired: requiredSet.has(propName),\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\n\t\treturn lines.length ? lines : [`${indent}(no parameters)`];\n\t}\n\n\treturn [`${indent}- value (${summarizeType(schemaObj)})`];\n}\n\nfunction renderPropertySummaryLine({\n\tindent,\n\tpropName,\n\tpropSchema,\n\trequired,\n}: {\n\tindent: string;\n\tpropName: string;\n\tpropSchema: Record<string, unknown> | boolean | undefined;\n\trequired: boolean;\n}): string {\n\tconst typeLabel = summarizeType(propSchema);\n\tconst requiredLabel = required ? \"required\" : \"optional\";\n\tconst extras = collectPropertyExtras(propSchema);\n\tconst extraText = extras.length ? ` - ${extras.join(\"; \")}` : \"\";\n\n\treturn `${indent}- ${propName} (${typeLabel}, ${requiredLabel})${extraText}`;\n}\n\nfunction collectPropertyExtras(propSchema: Record<string, unknown> | boolean | undefined): string[] {\n\tif (!propSchema || typeof propSchema !== \"object\") {\n\t\treturn [];\n\t}\n\n\tconst extras: string[] = [];\n\tconst schema = propSchema as Record<string, unknown>;\n\n\tif (schema.enum && Array.isArray(schema.enum)) {\n\t\textras.push(`enum: ${formatValue(schema.enum)}`);\n\t}\n\n\tif (schema.default !== undefined) {\n\t\textras.push(`default: ${formatValue(schema.default)}`);\n\t}\n\n\tif (typeof schema.description === \"string\") {\n\t\textras.push(schema.description);\n\t}\n\n\treturn extras;\n}\n\nfunction summarizeType(schema: Record<string, unknown> | boolean | undefined): string {\n\tif (schema === undefined || schema === null) {\n\t\treturn \"unknown\";\n\t}\n\n\tif (schema === true) {\n\t\treturn \"any\";\n\t}\n\n\tif (schema === false) {\n\t\treturn \"never\";\n\t}\n\n\tif (typeof schema !== \"object\") {\n\t\treturn String(schema);\n\t}\n\n\tconst schemaType = schema.type;\n\tlet baseType = \"\";\n\n\tif (Array.isArray(schemaType) && schemaType.length) {\n\t\tbaseType = schemaType.join(\" | \");\n\t} else if (typeof schemaType === \"string\") {\n\t\tbaseType = schemaType;\n\t} else if (schema.enum && Array.isArray(schema.enum)) {\n\t\tconst inferred: string[] = Array.from(new Set(schema.enum.map((value: unknown) => typeof value)));\n\t\tif (inferred.length === 1 && inferred[0]) {\n\t\t\tbaseType = inferred[0];\n\t\t}\n\t} else if (schema.const !== undefined) {\n\t\tbaseType = typeof schema.const;\n\t}\n\n\tif (!baseType) {\n\t\tbaseType = \"any\";\n\t}\n\n\tif (baseType === \"array\" && schema.items) {\n\t\tconst itemType = Array.isArray(schema.items)\n\t\t\t? schema.items.map((item: Record<string, unknown> | boolean) => summarizeType(item)).join(\" | \")\n\t\t\t: summarizeType(schema.items as Record<string, unknown>);\n\t\treturn `array<${itemType}>`;\n\t}\n\n\tif (baseType === \"string\" && typeof schema.format === \"string\") {\n\t\treturn `string (${schema.format})`;\n\t}\n\n\treturn baseType;\n}\n\nfunction formatValue(value: unknown): string {\n\tif (typeof value === \"string\") {\n\t\treturn JSON.stringify(value);\n\t}\n\n\tif (typeof value === \"number\" || typeof value === \"boolean\") {\n\t\treturn String(value);\n\t}\n\n\tif (value === null) {\n\t\treturn \"null\";\n\t}\n\n\tif (Array.isArray(value)) {\n\t\treturn `[${value.map(formatValue).join(\", \")}]`;\n\t}\n\n\treturn JSON.stringify(value);\n}\n\nfunction stringifySchema(schema: Record<string, unknown> | boolean | undefined): string {\n\tif (schema === undefined) {\n\t\treturn \"null\";\n\t}\n\n\treturn JSON.stringify(stripSchemaKeys(schema));\n}\n\nfunction stripSchemaKeys(value: unknown): unknown {\n\tif (Array.isArray(value)) {\n\t\treturn value.map((entry) => stripSchemaKeys(entry));\n\t}\n\n\tif (value && typeof value === \"object\") {\n\t\tconst record = value as Record<string, unknown>;\n\t\tconst cleaned: Record<string, unknown> = {};\n\n\t\tfor (const [key, entry] of Object.entries(record)) {\n\t\t\tif (key === \"$schema\") {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcleaned[key] = stripSchemaKeys(entry);\n\t\t}\n\n\t\treturn cleaned;\n\t}\n\n\treturn value;\n}\n\nexport function morphXmlFormatToolResponse(toolName: string, _toolCallId: string, content: TextContent[]): string {\n\tconst combinedText = content\n\t\t.filter((c): c is TextContent => c.type === \"text\")\n\t\t.map((c) => c.text)\n\t\t.join(\"\\n\");\n\n\tlet resultValue: unknown = combinedText;\n\ttry {\n\t\tresultValue = JSON.parse(combinedText);\n\t} catch {}\n\n\tconst resultLines = formatXmlNode(\"result\", resultValue, 1);\n\n\treturn [\n\t\t\"<tool_response>\",\n\t\t` <tool_name>${escapeXml(toolName)}</tool_name>`,\n\t\t...resultLines,\n\t\t\"</tool_response>\",\n\t].join(\"\\n\");\n}\n\n/**\n * Formats a tool call as XML for MorphXml protocol.\n */\nexport function morphXmlFormatToolCall(name: string, args: Record<string, unknown>): string {\n\tconst lines = formatXmlNode(name, args, 0);\n\treturn lines.join(\"\\n\");\n}\n\ntype JsonSchema = Record<string, unknown> | boolean | undefined;\n\ntype XmlNode = {\n\tname: string;\n\tchildren: XmlNode[];\n\tparts: Array<{ type: \"text\"; value: string } | { type: \"child\"; value: XmlNode }>;\n\ttextSegments: string[];\n};\n\ntype StreamToolState = {\n\tid: string;\n\tindex: number;\n\tlastArgumentsSnapshot: string | null;\n\tname: string;\n\tschema: JsonSchema;\n\tstarted: boolean;\n\ttool: Tool | undefined;\n};\n\nfunction shouldEmitRawToolCallTextOnError(options?: ParserOptions): boolean {\n\treturn options?.emitRawToolCallTextOnError === true;\n}\n\nfunction getSchemaTypesFromValue(schema: JsonSchema): string[] {\n\tif (!schema || typeof schema !== \"object\" || Array.isArray(schema)) {\n\t\treturn [];\n\t}\n\n\tconst typeValue = schema.type;\n\tif (typeof typeValue === \"string\") {\n\t\treturn [typeValue];\n\t}\n\tif (Array.isArray(typeValue)) {\n\t\treturn typeValue.filter((entry): entry is string => typeof entry === \"string\");\n\t}\n\treturn [];\n}\n\nfunction isStructurallyCompatibleWithSchema(value: unknown, schema: JsonSchema): boolean {\n\tif (schema === undefined || schema === true) {\n\t\treturn true;\n\t}\n\tif (schema === false) {\n\t\treturn false;\n\t}\n\tif (typeof schema !== \"object\" || Array.isArray(schema) || schema === null) {\n\t\treturn true;\n\t}\n\n\tconst schemaTypes = getSchemaTypesFromValue(schema);\n\tif (value === null) {\n\t\treturn schemaTypes.length === 0 || schemaTypes.includes(\"null\");\n\t}\n\n\tif (Array.isArray(value)) {\n\t\tif (schemaTypes.length > 0 && !schemaTypes.includes(\"array\")) {\n\t\t\treturn false;\n\t\t}\n\t\tconst itemSchema = getArrayItemSchema(schema);\n\t\treturn value.every((item) => isStructurallyCompatibleWithSchema(item, itemSchema));\n\t}\n\n\tif (typeof value === \"object\") {\n\t\tif (schemaTypes.length > 0 && !schemaTypes.includes(\"object\")) {\n\t\t\treturn false;\n\t\t}\n\t\tconst record = value as Record<string, unknown>;\n\t\treturn Object.entries(record).every(([key, entryValue]) =>\n\t\t\tisStructurallyCompatibleWithSchema(entryValue, getPropertySchema(schema, key)),\n\t\t);\n\t}\n\n\tif (typeof value === \"string\") {\n\t\treturn schemaTypes.length === 0 || schemaTypes.includes(\"string\");\n\t}\n\tif (typeof value === \"number\") {\n\t\treturn schemaTypes.length === 0 || schemaTypes.includes(\"number\") || schemaTypes.includes(\"integer\");\n\t}\n\tif (typeof value === \"boolean\") {\n\t\treturn schemaTypes.length === 0 || schemaTypes.includes(\"boolean\");\n\t}\n\n\treturn true;\n}\n\nfunction validateMorphXmlArguments(tool: Tool | undefined, argumentsRecord: Record<string, unknown>): boolean {\n\tif (!tool) {\n\t\treturn true;\n\t}\n\n\ttry {\n\t\tvalidateToolArguments(tool, {\n\t\t\ttype: \"toolCall\",\n\t\t\tid: \"morph-xml-validation\",\n\t\t\tname: tool.name,\n\t\t\targuments: argumentsRecord,\n\t\t});\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nfunction parseAndValidateMorphXmlArguments(\n\ttool: Tool | undefined,\n\ttoolBody: string,\n\tschema: JsonSchema,\n): Record<string, unknown> | null {\n\tlet parsedArguments: Record<string, unknown>;\n\ttry {\n\t\tparsedArguments = parseMorphXmlArguments(toolBody, schema);\n\t} catch {\n\t\treturn null;\n\t}\n\tif (!isStructurallyCompatibleWithSchema(parsedArguments, schema)) {\n\t\treturn null;\n\t}\n\tif (!validateMorphXmlArguments(tool, parsedArguments)) {\n\t\treturn null;\n\t}\n\treturn parsedArguments;\n}\n\nfunction parseMorphXmlPartialArgumentsSafely(toolBody: string, schema: JsonSchema): Record<string, unknown> | null {\n\ttry {\n\t\treturn parseMorphXmlPartialArguments(toolBody, schema);\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nexport function parseMorphXmlGeneratedText(text: string, tools: Tool[], options?: ParserOptions): ParsedToolCall[] {\n\tif (tools.length === 0 || text.length === 0) {\n\t\treturn [];\n\t}\n\n\tconst toolSchemaMap = createToolSchemaMap(tools);\n\tconst toolMap = new Map(tools.map((tool) => [tool.name, tool]));\n\tconst parsedToolCalls: ParsedToolCall[] = [];\n\n\tfor (const tool of tools) {\n\t\tlet selfClosingMatch = findSelfClosingToolTag(text, tool.name, 0);\n\t\twhile (selfClosingMatch) {\n\t\t\tconst parsedArguments = parseAndValidateMorphXmlArguments(tool, \"\", toolSchemaMap.get(tool.name));\n\t\t\tif (!parsedArguments) {\n\t\t\t\toptions?.onError?.(\"Could not process XML tool call.\", {\n\t\t\t\t\ttoolCall: selfClosingMatch.tag,\n\t\t\t\t});\n\t\t\t\tselfClosingMatch = findSelfClosingToolTag(\n\t\t\t\t\ttext,\n\t\t\t\t\ttool.name,\n\t\t\t\t\tselfClosingMatch.index + selfClosingMatch.length,\n\t\t\t\t);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tparsedToolCalls.push({\n\t\t\t\tname: tool.name,\n\t\t\t\targuments: parsedArguments,\n\t\t\t});\n\t\t\tselfClosingMatch = findSelfClosingToolTag(text, tool.name, selfClosingMatch.index + selfClosingMatch.length);\n\t\t}\n\n\t\tconst toolCallPattern = new RegExp(\n\t\t\t`<\\\\s*${escapeRegExp(tool.name)}\\\\s*>([\\\\s\\\\S]*?)<\\\\/\\\\s*${escapeRegExp(tool.name)}\\\\s*>`,\n\t\t\t\"g\",\n\t\t);\n\t\tfor (const match of text.matchAll(toolCallPattern)) {\n\t\t\tconst toolBody = match[1] ?? \"\";\n\t\t\tconst parsedArguments = parseAndValidateMorphXmlArguments(\n\t\t\t\ttoolMap.get(tool.name),\n\t\t\t\ttoolBody,\n\t\t\t\ttoolSchemaMap.get(tool.name),\n\t\t\t);\n\t\t\tif (!parsedArguments) {\n\t\t\t\toptions?.onError?.(\"Could not process XML tool call.\", {\n\t\t\t\t\ttoolCall: match[0],\n\t\t\t\t});\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tparsedToolCalls.push({\n\t\t\t\tname: tool.name,\n\t\t\t\targuments: parsedArguments,\n\t\t\t});\n\t\t}\n\t}\n\n\treturn parsedToolCalls;\n}\n\nexport function createMorphXmlStreamParser(tools: Tool[], options?: ParserOptions): StreamParser {\n\tconst toolSchemaMap = createToolSchemaMap(tools);\n\tconst toolNames = tools.map((tool) => tool.name);\n\tconst toolMap = new Map(tools.map((tool) => [tool.name, tool]));\n\n\tlet buffer = \"\";\n\tlet nextToolCallIndex = 0;\n\tlet currentToolState: StreamToolState | null = null;\n\n\tfunction emitArgumentsSnapshot(\n\t\tevents: StreamParserEvent[],\n\t\ttoolState: StreamToolState,\n\t\targumentsRecord: Record<string, unknown>,\n\t): void {\n\t\tif (!isStructurallyCompatibleWithSchema(argumentsRecord, toolState.schema)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst argumentsSnapshot = JSON.stringify(argumentsRecord);\n\t\tif (argumentsSnapshot === toolState.lastArgumentsSnapshot || argumentsSnapshot === \"{}\") {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!toolState.started) {\n\t\t\tevents.push({\n\t\t\t\ttype: \"toolcall_start\",\n\t\t\t\tindex: toolState.index,\n\t\t\t\tname: toolState.name,\n\t\t\t\tid: toolState.id,\n\t\t\t});\n\t\t\ttoolState.started = true;\n\t\t}\n\n\t\ttoolState.lastArgumentsSnapshot = argumentsSnapshot;\n\t\tevents.push({\n\t\t\ttype: \"toolcall_delta\",\n\t\t\tindex: toolState.index,\n\t\t\targumentsDelta: argumentsSnapshot,\n\t\t});\n\t}\n\n\tfunction processBuffer(): StreamParserEvent[] {\n\t\tconst events: StreamParserEvent[] = [];\n\n\t\twhile (buffer.length > 0) {\n\t\t\tif (currentToolState) {\n\t\t\t\tconst closingTagPattern = new RegExp(`</\\\\s*${escapeRegExp(currentToolState.name)}\\\\s*>`);\n\t\t\t\tconst closingTagMatch = closingTagPattern.exec(buffer);\n\n\t\t\t\tif (!closingTagMatch || closingTagMatch.index === undefined) {\n\t\t\t\t\tconst partialArguments = parseMorphXmlPartialArgumentsSafely(buffer, currentToolState.schema);\n\t\t\t\t\tif (partialArguments) {\n\t\t\t\t\t\temitArgumentsSnapshot(events, currentToolState, partialArguments);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tconst toolBody = buffer.slice(0, closingTagMatch.index);\n\t\t\t\tconst partialArguments = parseMorphXmlPartialArgumentsSafely(toolBody, currentToolState.schema);\n\t\t\t\tif (partialArguments) {\n\t\t\t\t\temitArgumentsSnapshot(events, currentToolState, partialArguments);\n\t\t\t\t}\n\n\t\t\t\tconst parsedArguments = parseAndValidateMorphXmlArguments(\n\t\t\t\t\tcurrentToolState.tool,\n\t\t\t\t\ttoolBody,\n\t\t\t\t\tcurrentToolState.schema,\n\t\t\t\t);\n\t\t\t\tconst originalCallText = `<${currentToolState.name}>${toolBody}${closingTagMatch[0]}`;\n\t\t\t\tbuffer = buffer.slice(closingTagMatch.index + closingTagMatch[0].length);\n\t\t\t\tif (!parsedArguments) {\n\t\t\t\t\toptions?.onError?.(\"Could not process streaming XML tool call.\", {\n\t\t\t\t\t\ttoolCall: originalCallText,\n\t\t\t\t\t});\n\t\t\t\t\tif (!currentToolState.started && shouldEmitRawToolCallTextOnError(options)) {\n\t\t\t\t\t\tevents.push({ type: \"text\", text: originalCallText });\n\t\t\t\t\t}\n\t\t\t\t\tcurrentToolState = null;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (!currentToolState.started) {\n\t\t\t\t\tevents.push({\n\t\t\t\t\t\ttype: \"toolcall_start\",\n\t\t\t\t\t\tindex: currentToolState.index,\n\t\t\t\t\t\tname: currentToolState.name,\n\t\t\t\t\t\tid: currentToolState.id,\n\t\t\t\t\t});\n\t\t\t\t\tcurrentToolState.started = true;\n\t\t\t\t\temitArgumentsSnapshot(events, currentToolState, parsedArguments);\n\t\t\t\t}\n\t\t\t\tevents.push({\n\t\t\t\t\ttype: \"toolcall_end\",\n\t\t\t\t\tindex: currentToolState.index,\n\t\t\t\t\tname: currentToolState.name,\n\t\t\t\t\tid: currentToolState.id,\n\t\t\t\t\targuments: parsedArguments,\n\t\t\t\t});\n\t\t\t\tcurrentToolState = null;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst openingTag = findEarliestXmlToolTag(buffer, toolNames);\n\t\t\tif (!openingTag) {\n\t\t\t\tconst textLength = getSafeXmlTextLength(buffer, toolNames);\n\t\t\t\tif (textLength === 0) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tevents.push({ type: \"text\", text: buffer.slice(0, textLength) });\n\t\t\t\tbuffer = buffer.slice(textLength);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (openingTag.index > 0) {\n\t\t\t\tevents.push({ type: \"text\", text: buffer.slice(0, openingTag.index) });\n\t\t\t}\n\n\t\t\tbuffer = buffer.slice(openingTag.index + openingTag.tag.length);\n\t\t\tif (openingTag.selfClosing) {\n\t\t\t\tconst tool = toolMap.get(openingTag.name);\n\t\t\t\tconst schema = toolSchemaMap.get(openingTag.name);\n\t\t\t\tconst parsedArguments = parseAndValidateMorphXmlArguments(tool, \"\", schema);\n\t\t\t\tif (!parsedArguments) {\n\t\t\t\t\toptions?.onError?.(\"Could not process XML tool call.\", {\n\t\t\t\t\t\ttoolCall: openingTag.tag,\n\t\t\t\t\t});\n\t\t\t\t\tif (shouldEmitRawToolCallTextOnError(options)) {\n\t\t\t\t\t\tevents.push({ type: \"text\", text: openingTag.tag });\n\t\t\t\t\t}\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst id = globalThis.crypto.randomUUID();\n\t\t\t\tconst index = nextToolCallIndex;\n\t\t\t\tnextToolCallIndex += 1;\n\t\t\t\tevents.push({\n\t\t\t\t\ttype: \"toolcall_start\",\n\t\t\t\t\tindex,\n\t\t\t\t\tname: openingTag.name,\n\t\t\t\t\tid,\n\t\t\t\t});\n\t\t\t\tevents.push({\n\t\t\t\t\ttype: \"toolcall_end\",\n\t\t\t\t\tindex,\n\t\t\t\t\tname: openingTag.name,\n\t\t\t\t\tid,\n\t\t\t\t\targuments: parsedArguments,\n\t\t\t\t});\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcurrentToolState = {\n\t\t\t\tid: globalThis.crypto.randomUUID(),\n\t\t\t\tindex: nextToolCallIndex,\n\t\t\t\tlastArgumentsSnapshot: null,\n\t\t\t\tname: openingTag.name,\n\t\t\t\tschema: toolSchemaMap.get(openingTag.name),\n\t\t\t\tstarted: false,\n\t\t\t\ttool: toolMap.get(openingTag.name),\n\t\t\t};\n\t\t\tnextToolCallIndex += 1;\n\t\t}\n\n\t\treturn events;\n\t}\n\n\treturn {\n\t\tfeed(textDelta: string): StreamParserEvent[] {\n\t\t\tif (textDelta.length === 0) {\n\t\t\t\treturn [];\n\t\t\t}\n\n\t\t\tbuffer += textDelta;\n\t\t\treturn processBuffer();\n\t\t},\n\n\t\tfinish(): StreamParserEvent[] {\n\t\t\tconst events = processBuffer();\n\n\t\t\tif (!currentToolState && buffer.length > 0) {\n\t\t\t\tevents.push({ type: \"text\", text: buffer });\n\t\t\t\tbuffer = \"\";\n\t\t\t}\n\n\t\t\tif (currentToolState) {\n\t\t\t\tconst parsedArguments = parseAndValidateMorphXmlArguments(\n\t\t\t\t\tcurrentToolState.tool,\n\t\t\t\t\tbuffer,\n\t\t\t\t\tcurrentToolState.schema,\n\t\t\t\t);\n\t\t\t\tif (parsedArguments) {\n\t\t\t\t\tif (!currentToolState.started) {\n\t\t\t\t\t\tevents.push({\n\t\t\t\t\t\t\ttype: \"toolcall_start\",\n\t\t\t\t\t\t\tindex: currentToolState.index,\n\t\t\t\t\t\t\tname: currentToolState.name,\n\t\t\t\t\t\t\tid: currentToolState.id,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tcurrentToolState.started = true;\n\t\t\t\t\t}\n\t\t\t\t\tif (currentToolState.lastArgumentsSnapshot !== JSON.stringify(parsedArguments)) {\n\t\t\t\t\t\temitArgumentsSnapshot(events, currentToolState, parsedArguments);\n\t\t\t\t\t}\n\t\t\t\t\tevents.push({\n\t\t\t\t\t\ttype: \"toolcall_end\",\n\t\t\t\t\t\tindex: currentToolState.index,\n\t\t\t\t\t\tname: currentToolState.name,\n\t\t\t\t\t\tid: currentToolState.id,\n\t\t\t\t\t\targuments: parsedArguments,\n\t\t\t\t\t});\n\t\t\t\t} else if (currentToolState.lastArgumentsSnapshot) {\n\t\t\t\t\tconst recoveredArguments = JSON.parse(currentToolState.lastArgumentsSnapshot) as Record<string, unknown>;\n\t\t\t\t\tif (!currentToolState.started) {\n\t\t\t\t\t\tevents.push({\n\t\t\t\t\t\t\ttype: \"toolcall_start\",\n\t\t\t\t\t\t\tindex: currentToolState.index,\n\t\t\t\t\t\t\tname: currentToolState.name,\n\t\t\t\t\t\t\tid: currentToolState.id,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tcurrentToolState.started = true;\n\t\t\t\t\t}\n\t\t\t\t\tevents.push({\n\t\t\t\t\t\ttype: \"toolcall_end\",\n\t\t\t\t\t\tindex: currentToolState.index,\n\t\t\t\t\t\tname: currentToolState.name,\n\t\t\t\t\t\tid: currentToolState.id,\n\t\t\t\t\t\targuments: recoveredArguments,\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tconst rawToolCall = `<${currentToolState.name}>${buffer}`;\n\t\t\t\t\toptions?.onError?.(\"Could not complete streaming XML tool call at finish.\", {\n\t\t\t\t\t\ttoolCall: rawToolCall,\n\t\t\t\t\t});\n\t\t\t\t\tif (shouldEmitRawToolCallTextOnError(options)) {\n\t\t\t\t\t\tevents.push({ type: \"text\", text: rawToolCall });\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tbuffer = \"\";\n\t\t\t\tcurrentToolState = null;\n\t\t\t}\n\n\t\t\treturn events;\n\t\t},\n\t};\n}\n\nfunction formatXmlNode(tagName: string, value: unknown, depth: number): string[] {\n\tconst indent = INDENT.repeat(depth);\n\n\tif (value === null || value === undefined) {\n\t\treturn [`${indent}<${tagName}></${tagName}>`];\n\t}\n\n\tif (typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\") {\n\t\tconst escapedValue = typeof value === \"string\" ? escapeXml(value) : String(value);\n\t\treturn [`${indent}<${tagName}>${escapedValue}</${tagName}>`];\n\t}\n\n\tif (Array.isArray(value)) {\n\t\tif (value.length === 0) {\n\t\t\treturn [`${indent}<${tagName}></${tagName}>`];\n\t\t}\n\t\tconst lines = [`${indent}<${tagName}>`];\n\t\tfor (const item of value) {\n\t\t\tlines.push(...formatXmlNode(\"item\", item, depth + 1));\n\t\t}\n\t\tlines.push(`${indent}</${tagName}>`);\n\t\treturn lines;\n\t}\n\n\tconst entries = Object.entries(value as Record<string, unknown>);\n\tif (entries.length === 0) {\n\t\treturn [`${indent}<${tagName}></${tagName}>`];\n\t}\n\n\tconst lines = [`${indent}<${tagName}>`];\n\tfor (const [key, entryValue] of entries) {\n\t\tlines.push(...formatXmlNode(key, entryValue, depth + 1));\n\t}\n\tlines.push(`${indent}</${tagName}>`);\n\treturn lines;\n}\n\nfunction createToolSchemaMap(tools: Tool[]): Map<string, JsonSchema> {\n\treturn new Map(tools.map((tool) => [tool.name, normalizeSchema(tool.parameters as Record<string, unknown>)]));\n}\n\nfunction parseMorphXmlArguments(toolBody: string, schema: JsonSchema): Record<string, unknown> {\n\tconst parsedRoot = parseXmlRoot(`<root>${toolBody}</root>`);\n\tif (!parsedRoot) {\n\t\treturn {};\n\t}\n\n\treturn convertChildrenToObject(parsedRoot.children, schema);\n}\n\nfunction parseMorphXmlPartialArguments(toolBody: string, schema: JsonSchema): Record<string, unknown> {\n\tconst partialArguments: Record<string, unknown> = {};\n\tconst normalizedSchema = normalizeSchema(schema);\n\tlet position = 0;\n\n\twhile (position < toolBody.length) {\n\t\tconst nextTagIndex = toolBody.indexOf(\"<\", position);\n\t\tif (nextTagIndex === -1) {\n\t\t\tbreak;\n\t\t}\n\n\t\tif (toolBody.slice(position, nextTagIndex).trim().length > 0) {\n\t\t\tbreak;\n\t\t}\n\n\t\tconst openingTag = parseOpeningTag(toolBody, nextTagIndex);\n\t\tif (!openingTag) {\n\t\t\tbreak;\n\t\t}\n\n\t\tconst propertySchema = getPropertySchema(normalizedSchema, openingTag.name);\n\t\tconst closingTag = `</${openingTag.name}>`;\n\t\tconst closingTagIndex = toolBody.indexOf(closingTag, openingTag.endIndex);\n\n\t\tif (closingTagIndex === -1) {\n\t\t\tconst partialValueText = toolBody.slice(openingTag.endIndex);\n\t\t\tif (partialValueText.includes(\"<\")) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tpartialArguments[openingTag.name] = coercePartialXmlValue(partialValueText, propertySchema);\n\t\t\tbreak;\n\t\t}\n\n\t\tconst completeNode = parseXmlRoot(toolBody.slice(nextTagIndex, closingTagIndex + closingTag.length));\n\t\tif (!completeNode) {\n\t\t\tbreak;\n\t\t}\n\n\t\tpartialArguments[openingTag.name] = convertXmlNodeValue(completeNode, propertySchema);\n\t\tposition = closingTagIndex + closingTag.length;\n\t}\n\n\treturn partialArguments;\n}\n\nfunction parseXmlRoot(xml: string): XmlNode | null {\n\tconst tagPattern = /<\\s*(\\/)?\\s*([A-Za-z_][\\w.-]*)\\s*(\\/)?\\s*>/g;\n\tconst stack: XmlNode[] = [];\n\tlet rootNode: XmlNode | null = null;\n\tlet lastIndex = 0;\n\n\tfor (const match of xml.matchAll(tagPattern)) {\n\t\tconst fullMatch = match[0];\n\t\tconst matchIndex = match.index;\n\t\tconst isClosingTag = match[1] === \"/\";\n\t\tconst tagName = match[2];\n\t\tconst isSelfClosing = match[3] === \"/\";\n\n\t\tif (matchIndex === undefined || !fullMatch || !tagName) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst textContent = xml.slice(lastIndex, matchIndex);\n\t\tif (stack.length > 0 && textContent.length > 0) {\n\t\t\tstack[stack.length - 1]?.textSegments.push(textContent);\n\t\t\tstack[stack.length - 1]?.parts.push({ type: \"text\", value: textContent });\n\t\t} else if (stack.length === 0 && textContent.trim().length > 0) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif (isClosingTag) {\n\t\t\tconst completedNode = stack.pop();\n\t\t\tif (!completedNode || completedNode.name !== tagName) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif (stack.length > 0) {\n\t\t\t\tstack[stack.length - 1]?.children.push(completedNode);\n\t\t\t\tstack[stack.length - 1]?.parts.push({ type: \"child\", value: completedNode });\n\t\t\t} else if (!rootNode) {\n\t\t\t\trootNode = completedNode;\n\t\t\t} else {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t} else {\n\t\t\tconst node: XmlNode = {\n\t\t\t\tname: tagName,\n\t\t\t\tchildren: [],\n\t\t\t\tparts: [],\n\t\t\t\ttextSegments: [],\n\t\t\t};\n\n\t\t\tif (isSelfClosing) {\n\t\t\t\tif (stack.length > 0) {\n\t\t\t\t\tstack[stack.length - 1]?.children.push(node);\n\t\t\t\t\tstack[stack.length - 1]?.parts.push({ type: \"child\", value: node });\n\t\t\t\t} else if (!rootNode) {\n\t\t\t\t\trootNode = node;\n\t\t\t\t} else {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tstack.push(node);\n\t\t\t}\n\t\t}\n\n\t\tlastIndex = matchIndex + fullMatch.length;\n\t}\n\n\tif (stack.length > 0) {\n\t\treturn null;\n\t}\n\n\tif (lastIndex < xml.length && xml.slice(lastIndex).trim().length > 0) {\n\t\treturn null;\n\t}\n\n\treturn rootNode;\n}\n\nfunction serializeXmlNode(node: XmlNode): string {\n\tconst innerContent = node.parts\n\t\t.map((part) => (part.type === \"text\" ? part.value : serializeXmlNode(part.value)))\n\t\t.join(\"\");\n\treturn `<${node.name}>${innerContent}</${node.name}>`;\n}\n\nfunction convertChildrenToObject(children: XmlNode[], schema: JsonSchema): Record<string, unknown> {\n\tconst objectValue: Record<string, unknown> = {};\n\n\tfor (const child of children) {\n\t\tconst propertySchema = getPropertySchema(schema, child.name);\n\t\tconst propertyValue = convertXmlNodeValue(child, propertySchema);\n\t\tconst existingValue = objectValue[child.name];\n\n\t\tif (existingValue === undefined) {\n\t\t\tobjectValue[child.name] = propertyValue;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (Array.isArray(existingValue)) {\n\t\t\texistingValue.push(propertyValue);\n\t\t\tcontinue;\n\t\t}\n\n\t\tobjectValue[child.name] = [existingValue, propertyValue];\n\t}\n\n\treturn objectValue;\n}\n\nfunction convertXmlNodeValue(node: XmlNode, schema: JsonSchema): unknown {\n\tconst normalizedSchema = normalizeSchema(schema);\n\tconst schemaTypes = getSchemaTypes(normalizedSchema);\n\n\tif (node.children.length === 0) {\n\t\treturn coerceXmlValue(node.textSegments.join(\"\"), normalizedSchema);\n\t}\n\n\tif (schemaTypes.includes(\"string\")) {\n\t\treturn node.parts\n\t\t\t.map((part) => (part.type === \"text\" ? unescapeXml(part.value) : serializeXmlNode(part.value)))\n\t\t\t.join(\"\");\n\t}\n\n\tif (shouldTreatAsArray(node, normalizedSchema)) {\n\t\tif (node.children.some((child) => child.name !== \"item\")) {\n\t\t\tthrow new Error(\"Array-valued XML nodes must wrap entries in <item> tags\");\n\t\t}\n\t\tconst itemSchema = getArrayItemSchema(normalizedSchema);\n\t\tconst itemNodes = node.children.filter((child) => child.name === \"item\");\n\t\treturn itemNodes.map((child) => convertXmlNodeValue(child, itemSchema));\n\t}\n\n\treturn convertChildrenToObject(node.children, normalizedSchema);\n}\n\nfunction shouldTreatAsArray(node: XmlNode, schema: JsonSchema): boolean {\n\tconst types = getSchemaTypes(schema);\n\tif (types.includes(\"array\")) {\n\t\treturn true;\n\t}\n\n\treturn node.children.every((child) => child.name === \"item\");\n}\n\nfunction getArrayItemSchema(schema: JsonSchema): JsonSchema {\n\tif (!schema || typeof schema !== \"object\") {\n\t\treturn undefined;\n\t}\n\n\tconst items = schema.items;\n\tif (items && !Array.isArray(items) && typeof items === \"object\") {\n\t\treturn items as Record<string, unknown>;\n\t}\n\n\treturn undefined;\n}\n\nfunction getPropertySchema(schema: JsonSchema, propertyName: string): JsonSchema {\n\tif (!schema || typeof schema !== \"object\") {\n\t\treturn undefined;\n\t}\n\n\tconst properties = schema.properties;\n\tif (properties && typeof properties === \"object\" && !Array.isArray(properties)) {\n\t\tconst propertySchema = (properties as Record<string, unknown>)[propertyName];\n\t\tif (propertySchema === undefined || typeof propertySchema === \"boolean\" || typeof propertySchema === \"object\") {\n\t\t\treturn propertySchema as JsonSchema;\n\t\t}\n\t}\n\n\tfor (const unionKey of [\"anyOf\", \"oneOf\", \"allOf\"]) {\n\t\tconst unionSchemas = schema[unionKey];\n\t\tif (!Array.isArray(unionSchemas)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tfor (const unionSchema of unionSchemas) {\n\t\t\tif (typeof unionSchema !== \"object\" || unionSchema === null) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst nestedPropertySchema = getPropertySchema(unionSchema as Record<string, unknown>, propertyName);\n\t\t\tif (nestedPropertySchema !== undefined) {\n\t\t\t\treturn nestedPropertySchema;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn undefined;\n}\n\nfunction getSchemaTypes(schema: JsonSchema): string[] {\n\tif (!schema || typeof schema !== \"object\") {\n\t\treturn [];\n\t}\n\n\tconst schemaType = schema.type;\n\tif (typeof schemaType === \"string\") {\n\t\treturn [schemaType];\n\t}\n\n\tif (Array.isArray(schemaType)) {\n\t\treturn schemaType.filter((value): value is string => typeof value === \"string\");\n\t}\n\n\treturn [];\n}\n\nfunction coerceXmlValue(rawValue: string, schema: JsonSchema): unknown {\n\tconst decodedValue = unescapeXml(rawValue);\n\tconst trimmedValue = decodedValue.trim();\n\tconst types = getSchemaTypes(schema);\n\n\tif (types.includes(\"integer\") && /^-?\\d+$/.test(trimmedValue)) {\n\t\treturn Number.parseInt(trimmedValue, 10);\n\t}\n\n\tif (types.includes(\"number\") && /^-?(?:\\d+|\\d*\\.\\d+)$/.test(trimmedValue)) {\n\t\treturn Number(trimmedValue);\n\t}\n\n\tif (types.includes(\"boolean\")) {\n\t\tif (trimmedValue === \"true\") {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (trimmedValue === \"false\") {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tif (types.includes(\"null\") && trimmedValue === \"null\") {\n\t\treturn null;\n\t}\n\n\tif ((types.includes(\"array\") || types.includes(\"object\")) && trimmedValue.length > 0) {\n\t\ttry {\n\t\t\treturn JSON.parse(trimmedValue);\n\t\t} catch {}\n\t}\n\n\treturn decodedValue;\n}\n\nfunction coercePartialXmlValue(rawValue: string, schema: JsonSchema): unknown {\n\tconst types = getSchemaTypes(schema);\n\tif (types.includes(\"integer\") || types.includes(\"number\")) {\n\t\tconst trimmedValue = unescapeXml(rawValue).trim();\n\t\tif (trimmedValue.length > 0 && /^-?(?:\\d+|\\d*\\.\\d+)$/.test(trimmedValue)) {\n\t\t\treturn types.includes(\"integer\") ? Number.parseInt(trimmedValue, 10) : Number(trimmedValue);\n\t\t}\n\t}\n\n\treturn unescapeXml(rawValue);\n}\n\nfunction parseOpeningTag(text: string, startIndex: number): { endIndex: number; name: string } | null {\n\tconst tagPattern = /<\\s*([A-Za-z_][\\w.-]*)\\s*>/y;\n\ttagPattern.lastIndex = startIndex;\n\tconst match = tagPattern.exec(text);\n\tconst tagName = match?.[1];\n\tif (!match || !tagName) {\n\t\treturn null;\n\t}\n\n\treturn {\n\t\tendIndex: match.index + match[0].length,\n\t\tname: tagName,\n\t};\n}\n\nfunction escapeXml(text: string): string {\n\treturn text\n\t\t.replace(/&/g, \"&amp;\")\n\t\t.replace(/</g, \"&lt;\")\n\t\t.replace(/>/g, \"&gt;\")\n\t\t.replace(/\"/g, \"&quot;\")\n\t\t.replace(/'/g, \"&apos;\");\n}\n\nfunction unescapeXml(text: string): string {\n\treturn text\n\t\t.replace(/&lt;/g, \"<\")\n\t\t.replace(/&gt;/g, \">\")\n\t\t.replace(/&quot;/g, '\"')\n\t\t.replace(/&apos;/g, \"'\")\n\t\t.replace(/&amp;/g, \"&\");\n}\n\nfunction escapeRegExp(text: string): string {\n\treturn text.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n"]}
1
+ {"version":3,"file":"morph-xml.js","sourceRoot":"","sources":["../../../src/tool-call-middleware/protocols/morph-xml.ts"],"names":[],"mappings":"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","sourcesContent":["import type { TextContent, Tool } from \"../../types.ts\";\nimport { validateToolArguments } from \"../../utils/validation.ts\";\nimport type { ParsedToolCall, ParserOptions, StreamParser, StreamParserEvent } from \"../types.ts\";\nimport { findEarliestXmlToolTag, findSelfClosingToolTag, getSafeXmlTextLength } from \"./xml-tool-tag-scanner.ts\";\n\nconst INDENT = \" \";\n\n/**\n * Formats tools as an XML-style system prompt for MorphXml protocol.\n * Ported from ai-sdk-tool-call-middleware morph-xml-prompt.ts\n */\nexport function morphXmlFormatToolsSystemPrompt(tools: Tool[]): string {\n\tconst toolsText = renderToolsForXmlPrompt(tools);\n\n\tconst header = `# Tools\nYou may call one or more functions to assist with the user query.`;\n\n\tconst definitions = [\"You have access to the following functions:\", \"<tools>\", toolsText, \"</tools>\"].join(\"\\n\");\n\n\tconst rules = `<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- For array parameters, wrap each element in an <item> tag inside the parameter tag.\n- For array<object> parameters, every <item> must contain the object's fields as child tags.\n- Never repeat the array parameter tag to represent multiple entries.\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\tconst examples = `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\nthat can span\nmultiple lines</example_parameter_2>\n</example_function_name>`;\n\n\tconst arrayExample = `Array example:\n<example_array_tool>\n <items>\n <item>first</item>\n <item>second</item>\n </items>\n</example_array_tool>\n\nArray<object> example:\n<example_todo_tool>\n <todos>\n <item>\n <content>Inspect parser edge cases</content>\n <status>in_progress</status>\n <priority>high</priority>\n </item>\n <item>\n <content>Add regression tests</content>\n <status>pending</status>\n <priority>medium</priority>\n </item>\n </todos>\n</example_todo_tool>`;\n\n\treturn [header, definitions, rules, examples, arrayExample]\n\t\t.filter((section) => section.trim().length > 0)\n\t\t.join(\"\\n\\n\");\n}\n\nfunction renderToolsForXmlPrompt(tools: Tool[]): string {\n\tif (!tools.length) {\n\t\treturn \"none\";\n\t}\n\n\treturn tools.map(renderToolForXmlPrompt).join(\"\\n\\n\");\n}\n\nfunction renderToolForXmlPrompt(tool: Tool): string {\n\tconst lines: string[] = [`name: ${tool.name}`];\n\n\tif (tool.description) {\n\t\tlines.push(`description: ${tool.description}`);\n\t}\n\n\tlines.push(\"parameters:\");\n\tconst normalizedSchema = normalizeSchema(tool.parameters as Record<string, unknown>);\n\tlines.push(...renderParametersSummary(normalizedSchema, 1));\n\tlines.push(`schema: ${stringifySchema(normalizedSchema)}`);\n\n\treturn lines.join(\"\\n\");\n}\n\nfunction normalizeSchema(\n\tschema: Record<string, unknown> | boolean | string | undefined,\n): Record<string, unknown> | boolean | undefined {\n\tif (typeof schema === \"string\") {\n\t\ttry {\n\t\t\treturn JSON.parse(schema) as Record<string, unknown>;\n\t\t} catch {\n\t\t\treturn { type: \"string\", const: schema };\n\t\t}\n\t}\n\n\treturn schema;\n}\n\nfunction renderParametersSummary(schema: Record<string, unknown> | boolean | undefined, indentLevel: number): string[] {\n\tconst indent = INDENT.repeat(indentLevel);\n\n\tif (schema === undefined || schema === null) {\n\t\treturn [`${indent}(none)`];\n\t}\n\n\tif (schema === true) {\n\t\treturn [`${indent}(any)`];\n\t}\n\n\tif (schema === false) {\n\t\treturn [`${indent}(no valid parameters)`];\n\t}\n\n\tif (typeof schema !== \"object\") {\n\t\treturn [`${indent}- value (${String(schema)})`];\n\t}\n\n\tconst schemaObj = schema as Record<string, unknown>;\n\tconst schemaType = schemaObj.type;\n\tconst schemaTypeArray: string[] = [];\n\n\tif (Array.isArray(schemaType)) {\n\t\tschemaTypeArray.push(...schemaType);\n\t} else if (typeof schemaType === \"string\") {\n\t\tschemaTypeArray.push(schemaType);\n\t}\n\n\tconst isObjectLike = schemaTypeArray.includes(\"object\") || !!schemaObj.properties;\n\n\tif (isObjectLike) {\n\t\tconst properties = (schemaObj.properties ?? {}) as Record<string, Record<string, unknown> | boolean>;\n\t\tconst requiredSet = new Set(Array.isArray(schemaObj.required) ? schemaObj.required : []);\n\t\tconst propertyNames = Object.keys(properties).sort();\n\n\t\tif (propertyNames.length === 0) {\n\t\t\treturn [`${indent}(no named parameters)`];\n\t\t}\n\n\t\tconst lines: string[] = [];\n\t\tfor (const propName of propertyNames) {\n\t\t\tconst propSchema = properties[propName];\n\t\t\tlines.push(\n\t\t\t\trenderPropertySummaryLine({\n\t\t\t\t\tindent,\n\t\t\t\t\tpropName,\n\t\t\t\t\tpropSchema,\n\t\t\t\t\trequired: requiredSet.has(propName),\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\n\t\treturn lines.length ? lines : [`${indent}(no parameters)`];\n\t}\n\n\treturn [`${indent}- value (${summarizeType(schemaObj)})`];\n}\n\nfunction renderPropertySummaryLine({\n\tindent,\n\tpropName,\n\tpropSchema,\n\trequired,\n}: {\n\tindent: string;\n\tpropName: string;\n\tpropSchema: Record<string, unknown> | boolean | undefined;\n\trequired: boolean;\n}): string {\n\tconst typeLabel = summarizeType(propSchema);\n\tconst requiredLabel = required ? \"required\" : \"optional\";\n\tconst extras = collectPropertyExtras(propSchema);\n\tconst extraText = extras.length ? ` - ${extras.join(\"; \")}` : \"\";\n\n\treturn `${indent}- ${propName} (${typeLabel}, ${requiredLabel})${extraText}`;\n}\n\nfunction collectPropertyExtras(propSchema: Record<string, unknown> | boolean | undefined): string[] {\n\tif (!propSchema || typeof propSchema !== \"object\") {\n\t\treturn [];\n\t}\n\n\tconst extras: string[] = [];\n\tconst schema = propSchema as Record<string, unknown>;\n\n\tif (schema.enum && Array.isArray(schema.enum)) {\n\t\textras.push(`enum: ${formatValue(schema.enum)}`);\n\t}\n\n\tif (schema.default !== undefined) {\n\t\textras.push(`default: ${formatValue(schema.default)}`);\n\t}\n\n\tif (typeof schema.description === \"string\") {\n\t\textras.push(schema.description);\n\t}\n\n\treturn extras;\n}\n\nfunction summarizeType(schema: Record<string, unknown> | boolean | undefined): string {\n\tif (schema === undefined || schema === null) {\n\t\treturn \"unknown\";\n\t}\n\n\tif (schema === true) {\n\t\treturn \"any\";\n\t}\n\n\tif (schema === false) {\n\t\treturn \"never\";\n\t}\n\n\tif (typeof schema !== \"object\") {\n\t\treturn String(schema);\n\t}\n\n\tconst schemaType = schema.type;\n\tlet baseType = \"\";\n\n\tif (Array.isArray(schemaType) && schemaType.length) {\n\t\tbaseType = schemaType.join(\" | \");\n\t} else if (typeof schemaType === \"string\") {\n\t\tbaseType = schemaType;\n\t} else if (schema.enum && Array.isArray(schema.enum)) {\n\t\tconst inferred: string[] = Array.from(new Set(schema.enum.map((value: unknown) => typeof value)));\n\t\tif (inferred.length === 1 && inferred[0]) {\n\t\t\tbaseType = inferred[0];\n\t\t}\n\t} else if (schema.const !== undefined) {\n\t\tbaseType = typeof schema.const;\n\t}\n\n\tif (!baseType) {\n\t\tbaseType = \"any\";\n\t}\n\n\tif (baseType === \"array\" && schema.items) {\n\t\tconst itemType = Array.isArray(schema.items)\n\t\t\t? schema.items.map((item: Record<string, unknown> | boolean) => summarizeType(item)).join(\" | \")\n\t\t\t: summarizeType(schema.items as Record<string, unknown>);\n\t\treturn `array<${itemType}>`;\n\t}\n\n\tif (baseType === \"string\" && typeof schema.format === \"string\") {\n\t\treturn `string (${schema.format})`;\n\t}\n\n\treturn baseType;\n}\n\nfunction formatValue(value: unknown): string {\n\tif (typeof value === \"string\") {\n\t\treturn JSON.stringify(value);\n\t}\n\n\tif (typeof value === \"number\" || typeof value === \"boolean\") {\n\t\treturn String(value);\n\t}\n\n\tif (value === null) {\n\t\treturn \"null\";\n\t}\n\n\tif (Array.isArray(value)) {\n\t\treturn `[${value.map(formatValue).join(\", \")}]`;\n\t}\n\n\treturn JSON.stringify(value);\n}\n\nfunction stringifySchema(schema: Record<string, unknown> | boolean | undefined): string {\n\tif (schema === undefined) {\n\t\treturn \"null\";\n\t}\n\n\treturn JSON.stringify(stripSchemaKeys(schema));\n}\n\nfunction stripSchemaKeys(value: unknown): unknown {\n\tif (Array.isArray(value)) {\n\t\treturn value.map((entry) => stripSchemaKeys(entry));\n\t}\n\n\tif (value && typeof value === \"object\") {\n\t\tconst record = value as Record<string, unknown>;\n\t\tconst cleaned: Record<string, unknown> = {};\n\n\t\tfor (const [key, entry] of Object.entries(record)) {\n\t\t\tif (key === \"$schema\") {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcleaned[key] = stripSchemaKeys(entry);\n\t\t}\n\n\t\treturn cleaned;\n\t}\n\n\treturn value;\n}\n\nexport function morphXmlFormatToolResponse(toolName: string, _toolCallId: string, content: TextContent[]): string {\n\tconst combinedText = content\n\t\t.filter((c): c is TextContent => c.type === \"text\")\n\t\t.map((c) => c.text)\n\t\t.join(\"\\n\");\n\n\tlet resultValue: unknown = combinedText;\n\ttry {\n\t\tresultValue = JSON.parse(combinedText);\n\t} catch {}\n\n\tconst resultLines = formatXmlNode(\"result\", resultValue, 1);\n\n\treturn [\n\t\t\"<tool_response>\",\n\t\t` <tool_name>${escapeXml(toolName)}</tool_name>`,\n\t\t...resultLines,\n\t\t\"</tool_response>\",\n\t].join(\"\\n\");\n}\n\n/**\n * Formats a tool call as XML for MorphXml protocol.\n */\nexport function morphXmlFormatToolCall(name: string, args: Record<string, unknown>): string {\n\tconst lines = formatXmlNode(name, args, 0);\n\treturn lines.join(\"\\n\");\n}\n\ntype JsonSchema = Record<string, unknown> | boolean | undefined;\n\ntype XmlNode = {\n\tname: string;\n\tchildren: XmlNode[];\n\tparts: Array<{ type: \"text\"; value: string } | { type: \"child\"; value: XmlNode }>;\n\ttextSegments: string[];\n};\n\ntype StreamToolState = {\n\tid: string;\n\tindex: number;\n\tlastArgumentsSnapshot: string | null;\n\tname: string;\n\tschema: JsonSchema;\n\tstarted: boolean;\n\ttool: Tool | undefined;\n};\n\nfunction shouldEmitRawToolCallTextOnError(options?: ParserOptions): boolean {\n\treturn options?.emitRawToolCallTextOnError === true;\n}\n\nfunction getSchemaTypesFromValue(schema: JsonSchema): string[] {\n\tif (!schema || typeof schema !== \"object\" || Array.isArray(schema)) {\n\t\treturn [];\n\t}\n\n\tconst typeValue = schema.type;\n\tif (typeof typeValue === \"string\") {\n\t\treturn [typeValue];\n\t}\n\tif (Array.isArray(typeValue)) {\n\t\treturn typeValue.filter((entry): entry is string => typeof entry === \"string\");\n\t}\n\treturn [];\n}\n\nfunction isStructurallyCompatibleWithSchema(value: unknown, schema: JsonSchema): boolean {\n\tif (schema === undefined || schema === true) {\n\t\treturn true;\n\t}\n\tif (schema === false) {\n\t\treturn false;\n\t}\n\tif (typeof schema !== \"object\" || Array.isArray(schema) || schema === null) {\n\t\treturn true;\n\t}\n\n\tconst schemaTypes = getSchemaTypesFromValue(schema);\n\tif (value === null) {\n\t\treturn schemaTypes.length === 0 || schemaTypes.includes(\"null\");\n\t}\n\n\tif (Array.isArray(value)) {\n\t\tif (schemaTypes.length > 0 && !schemaTypes.includes(\"array\")) {\n\t\t\treturn false;\n\t\t}\n\t\tconst itemSchema = getArrayItemSchema(schema);\n\t\treturn value.every((item) => isStructurallyCompatibleWithSchema(item, itemSchema));\n\t}\n\n\tif (typeof value === \"object\") {\n\t\tif (schemaTypes.length > 0 && !schemaTypes.includes(\"object\")) {\n\t\t\treturn false;\n\t\t}\n\t\tconst record = value as Record<string, unknown>;\n\t\treturn Object.entries(record).every(([key, entryValue]) =>\n\t\t\tisStructurallyCompatibleWithSchema(entryValue, getPropertySchema(schema, key)),\n\t\t);\n\t}\n\n\tif (typeof value === \"string\") {\n\t\treturn schemaTypes.length === 0 || schemaTypes.includes(\"string\");\n\t}\n\tif (typeof value === \"number\") {\n\t\treturn schemaTypes.length === 0 || schemaTypes.includes(\"number\") || schemaTypes.includes(\"integer\");\n\t}\n\tif (typeof value === \"boolean\") {\n\t\treturn schemaTypes.length === 0 || schemaTypes.includes(\"boolean\");\n\t}\n\n\treturn true;\n}\n\nfunction validateMorphXmlArguments(tool: Tool | undefined, argumentsRecord: Record<string, unknown>): boolean {\n\tif (!tool) {\n\t\treturn true;\n\t}\n\n\ttry {\n\t\tvalidateToolArguments(tool, {\n\t\t\ttype: \"toolCall\",\n\t\t\tid: \"morph-xml-validation\",\n\t\t\tname: tool.name,\n\t\t\targuments: argumentsRecord,\n\t\t});\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nfunction parseAndValidateMorphXmlArguments(\n\ttool: Tool | undefined,\n\ttoolBody: string,\n\tschema: JsonSchema,\n): Record<string, unknown> | null {\n\tlet parsedArguments: Record<string, unknown>;\n\ttry {\n\t\tparsedArguments = parseMorphXmlArguments(toolBody, schema);\n\t} catch {\n\t\treturn null;\n\t}\n\tif (!isStructurallyCompatibleWithSchema(parsedArguments, schema)) {\n\t\treturn null;\n\t}\n\tif (!validateMorphXmlArguments(tool, parsedArguments)) {\n\t\treturn null;\n\t}\n\treturn parsedArguments;\n}\n\nfunction parseMorphXmlPartialArgumentsSafely(toolBody: string, schema: JsonSchema): Record<string, unknown> | null {\n\ttry {\n\t\treturn parseMorphXmlPartialArguments(toolBody, schema);\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nexport function parseMorphXmlGeneratedText(text: string, tools: Tool[], options?: ParserOptions): ParsedToolCall[] {\n\tif (tools.length === 0 || text.length === 0) {\n\t\treturn [];\n\t}\n\n\tconst toolSchemaMap = createToolSchemaMap(tools);\n\tconst toolMap = new Map(tools.map((tool) => [tool.name, tool]));\n\tconst parsedToolCalls: ParsedToolCall[] = [];\n\n\tfor (const tool of tools) {\n\t\tlet selfClosingMatch = findSelfClosingToolTag(text, tool.name, 0);\n\t\twhile (selfClosingMatch) {\n\t\t\tconst parsedArguments = parseAndValidateMorphXmlArguments(tool, \"\", toolSchemaMap.get(tool.name));\n\t\t\tif (!parsedArguments) {\n\t\t\t\toptions?.onError?.(\"Could not process XML tool call.\", {\n\t\t\t\t\ttoolCall: selfClosingMatch.tag,\n\t\t\t\t});\n\t\t\t\tselfClosingMatch = findSelfClosingToolTag(\n\t\t\t\t\ttext,\n\t\t\t\t\ttool.name,\n\t\t\t\t\tselfClosingMatch.index + selfClosingMatch.length,\n\t\t\t\t);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tparsedToolCalls.push({\n\t\t\t\tname: tool.name,\n\t\t\t\targuments: parsedArguments,\n\t\t\t});\n\t\t\tselfClosingMatch = findSelfClosingToolTag(text, tool.name, selfClosingMatch.index + selfClosingMatch.length);\n\t\t}\n\n\t\tconst toolCallPattern = new RegExp(\n\t\t\t`<\\\\s*${escapeRegExp(tool.name)}\\\\s*>([\\\\s\\\\S]*?)<\\\\/\\\\s*${escapeRegExp(tool.name)}\\\\s*>`,\n\t\t\t\"g\",\n\t\t);\n\t\tfor (const match of text.matchAll(toolCallPattern)) {\n\t\t\tconst toolBody = match[1] ?? \"\";\n\t\t\tconst parsedArguments = parseAndValidateMorphXmlArguments(\n\t\t\t\ttoolMap.get(tool.name),\n\t\t\t\ttoolBody,\n\t\t\t\ttoolSchemaMap.get(tool.name),\n\t\t\t);\n\t\t\tif (!parsedArguments) {\n\t\t\t\toptions?.onError?.(\"Could not process XML tool call.\", {\n\t\t\t\t\ttoolCall: match[0],\n\t\t\t\t});\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tparsedToolCalls.push({\n\t\t\t\tname: tool.name,\n\t\t\t\targuments: parsedArguments,\n\t\t\t});\n\t\t}\n\t}\n\n\treturn parsedToolCalls;\n}\n\nexport function createMorphXmlStreamParser(tools: Tool[], options?: ParserOptions): StreamParser {\n\tconst toolSchemaMap = createToolSchemaMap(tools);\n\tconst toolNames = tools.map((tool) => tool.name);\n\tconst toolMap = new Map(tools.map((tool) => [tool.name, tool]));\n\n\tlet buffer = \"\";\n\tlet nextToolCallIndex = 0;\n\tlet currentToolState: StreamToolState | null = null;\n\n\tfunction emitArgumentsSnapshot(\n\t\tevents: StreamParserEvent[],\n\t\ttoolState: StreamToolState,\n\t\targumentsRecord: Record<string, unknown>,\n\t): void {\n\t\tif (!isStructurallyCompatibleWithSchema(argumentsRecord, toolState.schema)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst argumentsSnapshot = JSON.stringify(argumentsRecord);\n\t\tif (argumentsSnapshot === toolState.lastArgumentsSnapshot || argumentsSnapshot === \"{}\") {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!toolState.started) {\n\t\t\tevents.push({\n\t\t\t\ttype: \"toolcall_start\",\n\t\t\t\tindex: toolState.index,\n\t\t\t\tname: toolState.name,\n\t\t\t\tid: toolState.id,\n\t\t\t});\n\t\t\ttoolState.started = true;\n\t\t}\n\n\t\ttoolState.lastArgumentsSnapshot = argumentsSnapshot;\n\t\tevents.push({\n\t\t\ttype: \"toolcall_delta\",\n\t\t\tindex: toolState.index,\n\t\t\targumentsDelta: argumentsSnapshot,\n\t\t});\n\t}\n\n\tfunction processBuffer(): StreamParserEvent[] {\n\t\tconst events: StreamParserEvent[] = [];\n\n\t\twhile (buffer.length > 0) {\n\t\t\tif (currentToolState) {\n\t\t\t\tconst closingTagPattern = new RegExp(`</\\\\s*${escapeRegExp(currentToolState.name)}\\\\s*>`);\n\t\t\t\tconst closingTagMatch = closingTagPattern.exec(buffer);\n\n\t\t\t\tif (!closingTagMatch || closingTagMatch.index === undefined) {\n\t\t\t\t\tconst partialArguments = parseMorphXmlPartialArgumentsSafely(buffer, currentToolState.schema);\n\t\t\t\t\tif (partialArguments) {\n\t\t\t\t\t\temitArgumentsSnapshot(events, currentToolState, partialArguments);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tconst toolBody = buffer.slice(0, closingTagMatch.index);\n\t\t\t\tconst partialArguments = parseMorphXmlPartialArgumentsSafely(toolBody, currentToolState.schema);\n\t\t\t\tif (partialArguments) {\n\t\t\t\t\temitArgumentsSnapshot(events, currentToolState, partialArguments);\n\t\t\t\t}\n\n\t\t\t\tconst parsedArguments = parseAndValidateMorphXmlArguments(\n\t\t\t\t\tcurrentToolState.tool,\n\t\t\t\t\ttoolBody,\n\t\t\t\t\tcurrentToolState.schema,\n\t\t\t\t);\n\t\t\t\tconst originalCallText = `<${currentToolState.name}>${toolBody}${closingTagMatch[0]}`;\n\t\t\t\tbuffer = buffer.slice(closingTagMatch.index + closingTagMatch[0].length);\n\t\t\t\tif (!parsedArguments) {\n\t\t\t\t\toptions?.onError?.(\"Could not process streaming XML tool call.\", {\n\t\t\t\t\t\ttoolCall: originalCallText,\n\t\t\t\t\t});\n\t\t\t\t\tif (!currentToolState.started && shouldEmitRawToolCallTextOnError(options)) {\n\t\t\t\t\t\tevents.push({ type: \"text\", text: originalCallText });\n\t\t\t\t\t}\n\t\t\t\t\tcurrentToolState = null;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (!currentToolState.started) {\n\t\t\t\t\tevents.push({\n\t\t\t\t\t\ttype: \"toolcall_start\",\n\t\t\t\t\t\tindex: currentToolState.index,\n\t\t\t\t\t\tname: currentToolState.name,\n\t\t\t\t\t\tid: currentToolState.id,\n\t\t\t\t\t});\n\t\t\t\t\tcurrentToolState.started = true;\n\t\t\t\t\temitArgumentsSnapshot(events, currentToolState, parsedArguments);\n\t\t\t\t}\n\t\t\t\tevents.push({\n\t\t\t\t\ttype: \"toolcall_end\",\n\t\t\t\t\tindex: currentToolState.index,\n\t\t\t\t\tname: currentToolState.name,\n\t\t\t\t\tid: currentToolState.id,\n\t\t\t\t\targuments: parsedArguments,\n\t\t\t\t});\n\t\t\t\tcurrentToolState = null;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst openingTag = findEarliestXmlToolTag(buffer, toolNames);\n\t\t\tif (!openingTag) {\n\t\t\t\tconst textLength = getSafeXmlTextLength(buffer, toolNames);\n\t\t\t\tif (textLength === 0) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tevents.push({ type: \"text\", text: buffer.slice(0, textLength) });\n\t\t\t\tbuffer = buffer.slice(textLength);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (openingTag.index > 0) {\n\t\t\t\tevents.push({ type: \"text\", text: buffer.slice(0, openingTag.index) });\n\t\t\t}\n\n\t\t\tbuffer = buffer.slice(openingTag.index + openingTag.tag.length);\n\t\t\tif (openingTag.selfClosing) {\n\t\t\t\tconst tool = toolMap.get(openingTag.name);\n\t\t\t\tconst schema = toolSchemaMap.get(openingTag.name);\n\t\t\t\tconst parsedArguments = parseAndValidateMorphXmlArguments(tool, \"\", schema);\n\t\t\t\tif (!parsedArguments) {\n\t\t\t\t\toptions?.onError?.(\"Could not process XML tool call.\", {\n\t\t\t\t\t\ttoolCall: openingTag.tag,\n\t\t\t\t\t});\n\t\t\t\t\tif (shouldEmitRawToolCallTextOnError(options)) {\n\t\t\t\t\t\tevents.push({ type: \"text\", text: openingTag.tag });\n\t\t\t\t\t}\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst id = globalThis.crypto.randomUUID();\n\t\t\t\tconst index = nextToolCallIndex;\n\t\t\t\tnextToolCallIndex += 1;\n\t\t\t\tevents.push({\n\t\t\t\t\ttype: \"toolcall_start\",\n\t\t\t\t\tindex,\n\t\t\t\t\tname: openingTag.name,\n\t\t\t\t\tid,\n\t\t\t\t});\n\t\t\t\tevents.push({\n\t\t\t\t\ttype: \"toolcall_end\",\n\t\t\t\t\tindex,\n\t\t\t\t\tname: openingTag.name,\n\t\t\t\t\tid,\n\t\t\t\t\targuments: parsedArguments,\n\t\t\t\t});\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcurrentToolState = {\n\t\t\t\tid: globalThis.crypto.randomUUID(),\n\t\t\t\tindex: nextToolCallIndex,\n\t\t\t\tlastArgumentsSnapshot: null,\n\t\t\t\tname: openingTag.name,\n\t\t\t\tschema: toolSchemaMap.get(openingTag.name),\n\t\t\t\tstarted: false,\n\t\t\t\ttool: toolMap.get(openingTag.name),\n\t\t\t};\n\t\t\tnextToolCallIndex += 1;\n\t\t}\n\n\t\treturn events;\n\t}\n\n\treturn {\n\t\tfeed(textDelta: string): StreamParserEvent[] {\n\t\t\tif (textDelta.length === 0) {\n\t\t\t\treturn [];\n\t\t\t}\n\n\t\t\tbuffer += textDelta;\n\t\t\treturn processBuffer();\n\t\t},\n\n\t\tfinish(): StreamParserEvent[] {\n\t\t\tconst events = processBuffer();\n\n\t\t\tif (!currentToolState && buffer.length > 0) {\n\t\t\t\tevents.push({ type: \"text\", text: buffer });\n\t\t\t\tbuffer = \"\";\n\t\t\t}\n\n\t\t\tif (currentToolState) {\n\t\t\t\tconst parsedArguments = parseAndValidateMorphXmlArguments(\n\t\t\t\t\tcurrentToolState.tool,\n\t\t\t\t\tbuffer,\n\t\t\t\t\tcurrentToolState.schema,\n\t\t\t\t);\n\t\t\t\tif (parsedArguments) {\n\t\t\t\t\tif (!currentToolState.started) {\n\t\t\t\t\t\tevents.push({\n\t\t\t\t\t\t\ttype: \"toolcall_start\",\n\t\t\t\t\t\t\tindex: currentToolState.index,\n\t\t\t\t\t\t\tname: currentToolState.name,\n\t\t\t\t\t\t\tid: currentToolState.id,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tcurrentToolState.started = true;\n\t\t\t\t\t}\n\t\t\t\t\tif (currentToolState.lastArgumentsSnapshot !== JSON.stringify(parsedArguments)) {\n\t\t\t\t\t\temitArgumentsSnapshot(events, currentToolState, parsedArguments);\n\t\t\t\t\t}\n\t\t\t\t\tevents.push({\n\t\t\t\t\t\ttype: \"toolcall_end\",\n\t\t\t\t\t\tindex: currentToolState.index,\n\t\t\t\t\t\tname: currentToolState.name,\n\t\t\t\t\t\tid: currentToolState.id,\n\t\t\t\t\t\targuments: parsedArguments,\n\t\t\t\t\t});\n\t\t\t\t} else if (currentToolState.lastArgumentsSnapshot) {\n\t\t\t\t\toptions?.onError?.(\"Could not complete streaming XML tool call at finish.\", {\n\t\t\t\t\t\tprotocol: \"morph-xml\",\n\t\t\t\t\t\tretainedLength: buffer.length,\n\t\t\t\t\t});\n\t\t\t\t\tconst snapshotArguments = JSON.parse(currentToolState.lastArgumentsSnapshot) as Record<string, unknown>;\n\t\t\t\t\tif (!currentToolState.started) {\n\t\t\t\t\t\tevents.push({\n\t\t\t\t\t\t\ttype: \"toolcall_start\",\n\t\t\t\t\t\t\tindex: currentToolState.index,\n\t\t\t\t\t\t\tname: currentToolState.name,\n\t\t\t\t\t\t\tid: currentToolState.id,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tcurrentToolState.started = true;\n\t\t\t\t\t}\n\t\t\t\t\tevents.push({\n\t\t\t\t\t\ttype: \"toolcall_end\",\n\t\t\t\t\t\tindex: currentToolState.index,\n\t\t\t\t\t\tname: currentToolState.name,\n\t\t\t\t\t\tid: currentToolState.id,\n\t\t\t\t\t\targuments: snapshotArguments,\n\t\t\t\t\t\tincomplete: true,\n\t\t\t\t\t\terrorMessage: \"Tool call was truncated mid-arguments\",\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tconst partialArguments = parseMorphXmlPartialArgumentsSafely(buffer, currentToolState.schema) ?? {};\n\t\t\t\t\toptions?.onError?.(\"Could not complete streaming XML tool call at finish.\", {\n\t\t\t\t\t\tprotocol: \"morph-xml\",\n\t\t\t\t\t\tretainedLength: buffer.length,\n\t\t\t\t\t});\n\t\t\t\t\tif (!currentToolState.started) {\n\t\t\t\t\t\tevents.push({\n\t\t\t\t\t\t\ttype: \"toolcall_start\",\n\t\t\t\t\t\t\tindex: currentToolState.index,\n\t\t\t\t\t\t\tname: currentToolState.name,\n\t\t\t\t\t\t\tid: currentToolState.id,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tcurrentToolState.started = true;\n\t\t\t\t\t}\n\t\t\t\t\tevents.push({\n\t\t\t\t\t\ttype: \"toolcall_end\",\n\t\t\t\t\t\tindex: currentToolState.index,\n\t\t\t\t\t\tname: currentToolState.name,\n\t\t\t\t\t\tid: currentToolState.id,\n\t\t\t\t\t\targuments: partialArguments,\n\t\t\t\t\t\tincomplete: true,\n\t\t\t\t\t\terrorMessage: \"Tool call was truncated mid-arguments\",\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tbuffer = \"\";\n\t\t\t\tcurrentToolState = null;\n\t\t\t}\n\n\t\t\treturn events;\n\t\t},\n\t};\n}\n\nfunction formatXmlNode(tagName: string, value: unknown, depth: number): string[] {\n\tconst indent = INDENT.repeat(depth);\n\n\tif (value === null || value === undefined) {\n\t\treturn [`${indent}<${tagName}></${tagName}>`];\n\t}\n\n\tif (typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\") {\n\t\tconst escapedValue = typeof value === \"string\" ? escapeXml(value) : String(value);\n\t\treturn [`${indent}<${tagName}>${escapedValue}</${tagName}>`];\n\t}\n\n\tif (Array.isArray(value)) {\n\t\tif (value.length === 0) {\n\t\t\treturn [`${indent}<${tagName}></${tagName}>`];\n\t\t}\n\t\tconst lines = [`${indent}<${tagName}>`];\n\t\tfor (const item of value) {\n\t\t\tlines.push(...formatXmlNode(\"item\", item, depth + 1));\n\t\t}\n\t\tlines.push(`${indent}</${tagName}>`);\n\t\treturn lines;\n\t}\n\n\tconst entries = Object.entries(value as Record<string, unknown>);\n\tif (entries.length === 0) {\n\t\treturn [`${indent}<${tagName}></${tagName}>`];\n\t}\n\n\tconst lines = [`${indent}<${tagName}>`];\n\tfor (const [key, entryValue] of entries) {\n\t\tlines.push(...formatXmlNode(key, entryValue, depth + 1));\n\t}\n\tlines.push(`${indent}</${tagName}>`);\n\treturn lines;\n}\n\nfunction createToolSchemaMap(tools: Tool[]): Map<string, JsonSchema> {\n\treturn new Map(tools.map((tool) => [tool.name, normalizeSchema(tool.parameters as Record<string, unknown>)]));\n}\n\nfunction parseMorphXmlArguments(toolBody: string, schema: JsonSchema): Record<string, unknown> {\n\tconst parsedRoot = parseXmlRoot(`<root>${toolBody}</root>`);\n\tif (!parsedRoot) {\n\t\treturn {};\n\t}\n\n\treturn convertChildrenToObject(parsedRoot.children, schema);\n}\n\nfunction parseMorphXmlPartialArguments(toolBody: string, schema: JsonSchema): Record<string, unknown> {\n\tconst partialArguments: Record<string, unknown> = {};\n\tconst normalizedSchema = normalizeSchema(schema);\n\tlet position = 0;\n\n\twhile (position < toolBody.length) {\n\t\tconst nextTagIndex = toolBody.indexOf(\"<\", position);\n\t\tif (nextTagIndex === -1) {\n\t\t\tbreak;\n\t\t}\n\n\t\tif (toolBody.slice(position, nextTagIndex).trim().length > 0) {\n\t\t\tbreak;\n\t\t}\n\n\t\tconst openingTag = parseOpeningTag(toolBody, nextTagIndex);\n\t\tif (!openingTag) {\n\t\t\tbreak;\n\t\t}\n\n\t\tconst propertySchema = getPropertySchema(normalizedSchema, openingTag.name);\n\t\tconst closingTag = `</${openingTag.name}>`;\n\t\tconst closingTagIndex = toolBody.indexOf(closingTag, openingTag.endIndex);\n\n\t\tif (closingTagIndex === -1) {\n\t\t\tconst partialValueText = toolBody.slice(openingTag.endIndex);\n\t\t\tif (partialValueText.includes(\"<\")) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tpartialArguments[openingTag.name] = coercePartialXmlValue(partialValueText, propertySchema);\n\t\t\tbreak;\n\t\t}\n\n\t\tconst completeNode = parseXmlRoot(toolBody.slice(nextTagIndex, closingTagIndex + closingTag.length));\n\t\tif (!completeNode) {\n\t\t\tbreak;\n\t\t}\n\n\t\tpartialArguments[openingTag.name] = convertXmlNodeValue(completeNode, propertySchema);\n\t\tposition = closingTagIndex + closingTag.length;\n\t}\n\n\treturn partialArguments;\n}\n\nfunction parseXmlRoot(xml: string): XmlNode | null {\n\tconst tagPattern = /<\\s*(\\/)?\\s*([A-Za-z_][\\w.-]*)\\s*(\\/)?\\s*>/g;\n\tconst stack: XmlNode[] = [];\n\tlet rootNode: XmlNode | null = null;\n\tlet lastIndex = 0;\n\n\tfor (const match of xml.matchAll(tagPattern)) {\n\t\tconst fullMatch = match[0];\n\t\tconst matchIndex = match.index;\n\t\tconst isClosingTag = match[1] === \"/\";\n\t\tconst tagName = match[2];\n\t\tconst isSelfClosing = match[3] === \"/\";\n\n\t\tif (matchIndex === undefined || !fullMatch || !tagName) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst textContent = xml.slice(lastIndex, matchIndex);\n\t\tif (stack.length > 0 && textContent.length > 0) {\n\t\t\tstack[stack.length - 1]?.textSegments.push(textContent);\n\t\t\tstack[stack.length - 1]?.parts.push({ type: \"text\", value: textContent });\n\t\t} else if (stack.length === 0 && textContent.trim().length > 0) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif (isClosingTag) {\n\t\t\tconst completedNode = stack.pop();\n\t\t\tif (!completedNode || completedNode.name !== tagName) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif (stack.length > 0) {\n\t\t\t\tstack[stack.length - 1]?.children.push(completedNode);\n\t\t\t\tstack[stack.length - 1]?.parts.push({ type: \"child\", value: completedNode });\n\t\t\t} else if (!rootNode) {\n\t\t\t\trootNode = completedNode;\n\t\t\t} else {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t} else {\n\t\t\tconst node: XmlNode = {\n\t\t\t\tname: tagName,\n\t\t\t\tchildren: [],\n\t\t\t\tparts: [],\n\t\t\t\ttextSegments: [],\n\t\t\t};\n\n\t\t\tif (isSelfClosing) {\n\t\t\t\tif (stack.length > 0) {\n\t\t\t\t\tstack[stack.length - 1]?.children.push(node);\n\t\t\t\t\tstack[stack.length - 1]?.parts.push({ type: \"child\", value: node });\n\t\t\t\t} else if (!rootNode) {\n\t\t\t\t\trootNode = node;\n\t\t\t\t} else {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tstack.push(node);\n\t\t\t}\n\t\t}\n\n\t\tlastIndex = matchIndex + fullMatch.length;\n\t}\n\n\tif (stack.length > 0) {\n\t\treturn null;\n\t}\n\n\tif (lastIndex < xml.length && xml.slice(lastIndex).trim().length > 0) {\n\t\treturn null;\n\t}\n\n\treturn rootNode;\n}\n\nfunction serializeXmlNode(node: XmlNode): string {\n\tconst innerContent = node.parts\n\t\t.map((part) => (part.type === \"text\" ? part.value : serializeXmlNode(part.value)))\n\t\t.join(\"\");\n\treturn `<${node.name}>${innerContent}</${node.name}>`;\n}\n\nfunction convertChildrenToObject(children: XmlNode[], schema: JsonSchema): Record<string, unknown> {\n\tconst objectValue: Record<string, unknown> = {};\n\n\tfor (const child of children) {\n\t\tconst propertySchema = getPropertySchema(schema, child.name);\n\t\tconst propertyValue = convertXmlNodeValue(child, propertySchema);\n\t\tconst existingValue = objectValue[child.name];\n\n\t\tif (existingValue === undefined) {\n\t\t\tobjectValue[child.name] = propertyValue;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (Array.isArray(existingValue)) {\n\t\t\texistingValue.push(propertyValue);\n\t\t\tcontinue;\n\t\t}\n\n\t\tobjectValue[child.name] = [existingValue, propertyValue];\n\t}\n\n\treturn objectValue;\n}\n\nfunction convertXmlNodeValue(node: XmlNode, schema: JsonSchema): unknown {\n\tconst normalizedSchema = normalizeSchema(schema);\n\tconst schemaTypes = getSchemaTypes(normalizedSchema);\n\n\tif (node.children.length === 0) {\n\t\treturn coerceXmlValue(node.textSegments.join(\"\"), normalizedSchema);\n\t}\n\n\tif (schemaTypes.includes(\"string\")) {\n\t\treturn node.parts\n\t\t\t.map((part) => (part.type === \"text\" ? unescapeXml(part.value) : serializeXmlNode(part.value)))\n\t\t\t.join(\"\");\n\t}\n\n\tif (shouldTreatAsArray(node, normalizedSchema)) {\n\t\tif (node.children.some((child) => child.name !== \"item\")) {\n\t\t\tthrow new Error(\"Array-valued XML nodes must wrap entries in <item> tags\");\n\t\t}\n\t\tconst itemSchema = getArrayItemSchema(normalizedSchema);\n\t\tconst itemNodes = node.children.filter((child) => child.name === \"item\");\n\t\treturn itemNodes.map((child) => convertXmlNodeValue(child, itemSchema));\n\t}\n\n\treturn convertChildrenToObject(node.children, normalizedSchema);\n}\n\nfunction shouldTreatAsArray(node: XmlNode, schema: JsonSchema): boolean {\n\tconst types = getSchemaTypes(schema);\n\tif (types.includes(\"array\")) {\n\t\treturn true;\n\t}\n\n\treturn node.children.every((child) => child.name === \"item\");\n}\n\nfunction getArrayItemSchema(schema: JsonSchema): JsonSchema {\n\tif (!schema || typeof schema !== \"object\") {\n\t\treturn undefined;\n\t}\n\n\tconst items = schema.items;\n\tif (items && !Array.isArray(items) && typeof items === \"object\") {\n\t\treturn items as Record<string, unknown>;\n\t}\n\n\treturn undefined;\n}\n\nfunction getPropertySchema(schema: JsonSchema, propertyName: string): JsonSchema {\n\tif (!schema || typeof schema !== \"object\") {\n\t\treturn undefined;\n\t}\n\n\tconst properties = schema.properties;\n\tif (properties && typeof properties === \"object\" && !Array.isArray(properties)) {\n\t\tconst propertySchema = (properties as Record<string, unknown>)[propertyName];\n\t\tif (propertySchema === undefined || typeof propertySchema === \"boolean\" || typeof propertySchema === \"object\") {\n\t\t\treturn propertySchema as JsonSchema;\n\t\t}\n\t}\n\n\tfor (const unionKey of [\"anyOf\", \"oneOf\", \"allOf\"]) {\n\t\tconst unionSchemas = schema[unionKey];\n\t\tif (!Array.isArray(unionSchemas)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tfor (const unionSchema of unionSchemas) {\n\t\t\tif (typeof unionSchema !== \"object\" || unionSchema === null) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst nestedPropertySchema = getPropertySchema(unionSchema as Record<string, unknown>, propertyName);\n\t\t\tif (nestedPropertySchema !== undefined) {\n\t\t\t\treturn nestedPropertySchema;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn undefined;\n}\n\nfunction getSchemaTypes(schema: JsonSchema): string[] {\n\tif (!schema || typeof schema !== \"object\") {\n\t\treturn [];\n\t}\n\n\tconst schemaType = schema.type;\n\tif (typeof schemaType === \"string\") {\n\t\treturn [schemaType];\n\t}\n\n\tif (Array.isArray(schemaType)) {\n\t\treturn schemaType.filter((value): value is string => typeof value === \"string\");\n\t}\n\n\treturn [];\n}\n\nfunction coerceXmlValue(rawValue: string, schema: JsonSchema): unknown {\n\tconst decodedValue = unescapeXml(rawValue);\n\tconst trimmedValue = decodedValue.trim();\n\tconst types = getSchemaTypes(schema);\n\n\tif (types.includes(\"integer\") && /^-?\\d+$/.test(trimmedValue)) {\n\t\treturn Number.parseInt(trimmedValue, 10);\n\t}\n\n\tif (types.includes(\"number\") && /^-?(?:\\d+|\\d*\\.\\d+)$/.test(trimmedValue)) {\n\t\treturn Number(trimmedValue);\n\t}\n\n\tif (types.includes(\"boolean\")) {\n\t\tif (trimmedValue === \"true\") {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (trimmedValue === \"false\") {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tif (types.includes(\"null\") && trimmedValue === \"null\") {\n\t\treturn null;\n\t}\n\n\tif ((types.includes(\"array\") || types.includes(\"object\")) && trimmedValue.length > 0) {\n\t\ttry {\n\t\t\treturn JSON.parse(trimmedValue);\n\t\t} catch {}\n\t}\n\n\treturn decodedValue;\n}\n\nfunction coercePartialXmlValue(rawValue: string, schema: JsonSchema): unknown {\n\tconst types = getSchemaTypes(schema);\n\tif (types.includes(\"integer\") || types.includes(\"number\")) {\n\t\tconst trimmedValue = unescapeXml(rawValue).trim();\n\t\tif (trimmedValue.length > 0 && /^-?(?:\\d+|\\d*\\.\\d+)$/.test(trimmedValue)) {\n\t\t\treturn types.includes(\"integer\") ? Number.parseInt(trimmedValue, 10) : Number(trimmedValue);\n\t\t}\n\t}\n\n\treturn unescapeXml(rawValue);\n}\n\nfunction parseOpeningTag(text: string, startIndex: number): { endIndex: number; name: string } | null {\n\tconst tagPattern = /<\\s*([A-Za-z_][\\w.-]*)\\s*>/y;\n\ttagPattern.lastIndex = startIndex;\n\tconst match = tagPattern.exec(text);\n\tconst tagName = match?.[1];\n\tif (!match || !tagName) {\n\t\treturn null;\n\t}\n\n\treturn {\n\t\tendIndex: match.index + match[0].length,\n\t\tname: tagName,\n\t};\n}\n\nfunction escapeXml(text: string): string {\n\treturn text\n\t\t.replace(/&/g, \"&amp;\")\n\t\t.replace(/</g, \"&lt;\")\n\t\t.replace(/>/g, \"&gt;\")\n\t\t.replace(/\"/g, \"&quot;\")\n\t\t.replace(/'/g, \"&apos;\");\n}\n\nfunction unescapeXml(text: string): string {\n\treturn text\n\t\t.replace(/&lt;/g, \"<\")\n\t\t.replace(/&gt;/g, \">\")\n\t\t.replace(/&quot;/g, '\"')\n\t\t.replace(/&apos;/g, \"'\")\n\t\t.replace(/&amp;/g, \"&\");\n}\n\nfunction escapeRegExp(text: string): string {\n\treturn text.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"yaml-xml.d.ts","sourceRoot":"","sources":["../../../src/tool-call-middleware/protocols/yaml-xml.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,YAAY,EAAqB,MAAM,aAAa,CAAC;AAuDlG,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,CA8BpE;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAGzF;AAED,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,MAAM,CAa/G;AAED,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,cAAc,EAAE,CAqDhH;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,YAAY,CA8K9F"}
1
+ {"version":3,"file":"yaml-xml.d.ts","sourceRoot":"","sources":["../../../src/tool-call-middleware/protocols/yaml-xml.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAExD,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,YAAY,EAAqB,MAAM,aAAa,CAAC;AAuDlG,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,CA8BpE;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAGzF;AAED,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,MAAM,CAa/G;AAED,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,cAAc,EAAE,CAqDhH;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,YAAY,CA+M9F"}
@@ -1,4 +1,5 @@
1
1
  import YAML from "yaml";
2
+ import { validateToolArguments } from "../../utils/validation.js";
2
3
  import { findEarliestXmlToolTag, getSafeXmlTextLength } from "./xml-tool-tag-scanner.js";
3
4
  function escapeRegExp(text) {
4
5
  return text.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
@@ -185,6 +186,17 @@ export function createYamlXmlStreamParser(tools, options) {
185
186
  options?.onError?.("Could not process YAML XML tool call, keeping original text.", {
186
187
  toolCall: originalCallText,
187
188
  });
189
+ if (currentToolState.lastArgumentsSnapshot !== null) {
190
+ events.push({
191
+ type: "toolcall_end",
192
+ index: currentToolState.index,
193
+ name: currentToolState.name,
194
+ id: currentToolState.id,
195
+ arguments: {},
196
+ incomplete: true,
197
+ errorMessage: "Tool call arguments could not be parsed",
198
+ });
199
+ }
188
200
  if (shouldEmitRawToolCallTextOnError(options)) {
189
201
  events.push({ type: "text", text: originalCallText });
190
202
  }
@@ -256,34 +268,55 @@ export function createYamlXmlStreamParser(tools, options) {
256
268
  events.push({ type: "text", text: buffer });
257
269
  buffer = "";
258
270
  }
259
- if (currentToolState && buffer.length > 0) {
271
+ if (currentToolState) {
272
+ const state = currentToolState;
260
273
  const parsedArguments = parseYamlMapping(buffer);
261
- if (parsedArguments !== null) {
262
- emitSnapshot(events, buffer);
263
- if (currentToolState.lastArgumentsSnapshot === null) {
264
- events.push({
265
- type: "toolcall_start",
266
- index: currentToolState.index,
267
- name: currentToolState.name,
268
- id: currentToolState.id,
274
+ const tool = tools.find((candidate) => candidate.name === state.name);
275
+ let validatedArguments = null;
276
+ if (parsedArguments !== null && tool) {
277
+ try {
278
+ validatedArguments = validateToolArguments(tool, {
279
+ type: "toolCall",
280
+ id: state.id,
281
+ name: state.name,
282
+ arguments: parsedArguments,
269
283
  });
270
284
  }
285
+ catch {
286
+ // Validation failure makes the truncated call incomplete rather than executable.
287
+ validatedArguments = null;
288
+ }
289
+ }
290
+ if (validatedArguments !== null) {
291
+ emitSnapshot(events, buffer);
292
+ if (state.lastArgumentsSnapshot === null) {
293
+ events.push({ type: "toolcall_start", index: state.index, name: state.name, id: state.id });
294
+ }
271
295
  events.push({
272
296
  type: "toolcall_end",
273
- index: currentToolState.index,
274
- name: currentToolState.name,
275
- id: currentToolState.id,
276
- arguments: parsedArguments,
297
+ index: state.index,
298
+ name: state.name,
299
+ id: state.id,
300
+ arguments: validatedArguments,
277
301
  });
278
302
  }
279
303
  else {
280
- const rawToolCall = `<${currentToolState.name}>${buffer}`;
304
+ if (state.lastArgumentsSnapshot === null) {
305
+ events.push({ type: "toolcall_start", index: state.index, name: state.name, id: state.id });
306
+ }
307
+ events.push({
308
+ type: "toolcall_end",
309
+ index: state.index,
310
+ name: state.name,
311
+ id: state.id,
312
+ arguments: parsedArguments ?? {},
313
+ incomplete: true,
314
+ errorMessage: "Tool call was truncated mid-arguments",
315
+ });
281
316
  options?.onError?.("Could not complete streaming YAML XML tool call at finish.", {
282
- toolCall: rawToolCall,
317
+ protocol: "yaml-xml",
318
+ retainedLength: buffer.length,
283
319
  });
284
- if (shouldEmitRawToolCallTextOnError(options)) {
285
- events.push({ type: "text", text: rawToolCall });
286
- }
287
320
  }
288
321
  buffer = "";
289
322
  currentToolState = null;
@@ -1 +1 @@
1
- {"version":3,"file":"yaml-xml.js","sourceRoot":"","sources":["../../../src/tool-call-middleware/protocols/yaml-xml.ts"],"names":[],"mappings":"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","sourcesContent":["import YAML from \"yaml\";\nimport type { TextContent, Tool } from \"../../types.ts\";\nimport type { ParsedToolCall, ParserOptions, StreamParser, StreamParserEvent } from \"../types.ts\";\nimport { findEarliestXmlToolTag, getSafeXmlTextLength } from \"./xml-tool-tag-scanner.ts\";\n\nfunction escapeRegExp(text: string): string {\n\treturn text.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n\nfunction normalizeYamlContent(yamlContent: string): string {\n\tconst trimmedLeadingNewline = yamlContent.startsWith(\"\\n\") ? yamlContent.slice(1) : yamlContent;\n\tconst lines = trimmedLeadingNewline.split(\"\\n\");\n\tconst nonEmptyLines = lines.filter((line) => line.trim().length > 0);\n\tif (nonEmptyLines.length === 0) {\n\t\treturn \"\";\n\t}\n\n\tconst minIndent = Math.min(\n\t\t...nonEmptyLines.map((line) => {\n\t\t\tconst match = line.match(/^(\\s*)/);\n\t\t\treturn match?.[1].length ?? 0;\n\t\t}),\n\t);\n\treturn minIndent > 0 ? lines.map((line) => line.slice(minIndent)).join(\"\\n\") : trimmedLeadingNewline;\n}\n\nfunction parseYamlMapping(yamlContent: string): Record<string, unknown> | null {\n\tconst normalized = normalizeYamlContent(yamlContent);\n\tif (normalized.trim().length === 0) {\n\t\treturn {};\n\t}\n\n\ttry {\n\t\tconst parsed = YAML.parse(normalized) as unknown;\n\t\tif (parsed === null) {\n\t\t\treturn {};\n\t\t}\n\t\tif (typeof parsed !== \"object\" || Array.isArray(parsed)) {\n\t\t\treturn null;\n\t\t}\n\t\treturn parsed as Record<string, unknown>;\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nfunction findClosingTagEnd(text: string, contentStart: number, toolName: string): number {\n\tconst closingPattern = new RegExp(`</\\\\s*${escapeRegExp(toolName)}\\\\s*>`, \"g\");\n\tclosingPattern.lastIndex = contentStart;\n\tconst match = closingPattern.exec(text);\n\treturn match?.index === undefined ? -1 : match.index + match[0].length;\n}\n\nfunction shouldEmitRawToolCallTextOnError(options?: ParserOptions): boolean {\n\treturn options?.emitRawToolCallTextOnError === true;\n}\n\nexport function yamlXmlFormatToolsSystemPrompt(tools: Tool[]): string {\n\tif (tools.length === 0) {\n\t\treturn \"\";\n\t}\n\n\tconst toolsRendered = JSON.stringify(\n\t\ttools.map((tool) => ({\n\t\t\tname: tool.name,\n\t\t\tdescription: tool.description,\n\t\t\tparameters: tool.parameters,\n\t\t})),\n\t);\n\n\treturn `# 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>${toolsRendered}</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>\ncity: Seoul\nunit: celsius\n</get_weather>`;\n}\n\nexport function yamlXmlFormatToolCall(name: string, args: Record<string, unknown>): string {\n\tconst yamlBody = YAML.stringify(args).trimEnd();\n\treturn `<${name}>\\n${yamlBody.length > 0 ? yamlBody : \"null\"}\\n</${name}>`;\n}\n\nexport function yamlXmlFormatToolResponse(toolName: string, _toolCallId: string, content: TextContent[]): string {\n\tconst textContent = content\n\t\t.filter((entry): entry is TextContent => entry.type === \"text\")\n\t\t.map((entry) => entry.text)\n\t\t.join(\"\\n\");\n\n\treturn [\n\t\t`<tool_response>`,\n\t\t`tool_name: ${toolName}`,\n\t\t`result: |-`,\n\t\t...textContent.split(\"\\n\").map((line) => ` ${line}`),\n\t\t`</tool_response>`,\n\t].join(\"\\n\");\n}\n\nexport function parseYamlXmlGeneratedText(text: string, tools: Tool[], options?: ParserOptions): ParsedToolCall[] {\n\tif (tools.length === 0 || text.length === 0) {\n\t\treturn [];\n\t}\n\n\tconst parsedToolCalls: ParsedToolCall[] = [];\n\tconst toolNames = tools.map((tool) => tool.name);\n\tlet cursor = 0;\n\n\twhile (cursor < text.length) {\n\t\tconst openingTag = findEarliestXmlToolTag(text.slice(cursor), toolNames);\n\t\tif (!openingTag) {\n\t\t\tbreak;\n\t\t}\n\n\t\tconst absoluteIndex = cursor + openingTag.index;\n\t\tif (openingTag.selfClosing) {\n\t\t\tparsedToolCalls.push({ name: openingTag.name, arguments: {} });\n\t\t\tcursor = absoluteIndex + openingTag.tag.length;\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst contentStart = absoluteIndex + openingTag.tag.length;\n\t\tconst closingTagEnd = findClosingTagEnd(text, contentStart, openingTag.name);\n\t\tif (closingTagEnd === -1) {\n\t\t\tbreak;\n\t\t}\n\n\t\tconst closingTagText = text.slice(contentStart, closingTagEnd);\n\t\tconst closingTagMatch = new RegExp(`</\\\\s*${escapeRegExp(openingTag.name)}\\\\s*>`).exec(closingTagText);\n\t\tconst closingTagIndex = closingTagMatch?.index;\n\t\tif (closingTagIndex === undefined) {\n\t\t\tcursor = closingTagEnd;\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst yamlContent = closingTagText.slice(0, closingTagIndex);\n\t\tconst parsedArguments = parseYamlMapping(yamlContent);\n\t\tif (parsedArguments !== null) {\n\t\t\tparsedToolCalls.push({\n\t\t\t\tname: openingTag.name,\n\t\t\t\targuments: parsedArguments,\n\t\t\t});\n\t\t} else {\n\t\t\toptions?.onError?.(\"Could not process YAML XML tool call, keeping original text.\", {\n\t\t\t\ttoolCall: text.slice(absoluteIndex, closingTagEnd),\n\t\t\t});\n\t\t}\n\n\t\tcursor = closingTagEnd;\n\t}\n\n\treturn parsedToolCalls;\n}\n\nexport function createYamlXmlStreamParser(tools: Tool[], options?: ParserOptions): StreamParser {\n\tconst toolNames = tools.map((tool) => tool.name);\n\tlet buffer = \"\";\n\tlet currentToolState: {\n\t\tid: string;\n\t\tindex: number;\n\t\tname: string;\n\t\tlastArgumentsSnapshot: string | null;\n\t} | null = null;\n\tlet nextToolCallIndex = 0;\n\n\tfunction emitSnapshot(events: StreamParserEvent[], yamlContent: string): void {\n\t\tif (!currentToolState) {\n\t\t\treturn;\n\t\t}\n\t\tconst parsedArguments = parseYamlMapping(yamlContent);\n\t\tif (parsedArguments === null) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst snapshot = JSON.stringify(parsedArguments);\n\t\tif (snapshot === \"{}\" || snapshot === currentToolState.lastArgumentsSnapshot) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (currentToolState.lastArgumentsSnapshot === null) {\n\t\t\tevents.push({\n\t\t\t\ttype: \"toolcall_start\",\n\t\t\t\tindex: currentToolState.index,\n\t\t\t\tname: currentToolState.name,\n\t\t\t\tid: currentToolState.id,\n\t\t\t});\n\t\t}\n\n\t\tcurrentToolState.lastArgumentsSnapshot = snapshot;\n\t\tevents.push({\n\t\t\ttype: \"toolcall_delta\",\n\t\t\tindex: currentToolState.index,\n\t\t\targumentsDelta: snapshot,\n\t\t});\n\t}\n\n\tfunction processBuffer(): StreamParserEvent[] {\n\t\tconst events: StreamParserEvent[] = [];\n\n\t\twhile (buffer.length > 0) {\n\t\t\tif (currentToolState) {\n\t\t\t\tconst closingTagRegex = new RegExp(`</\\\\s*${escapeRegExp(currentToolState.name)}\\\\s*>`);\n\t\t\t\tconst closingTagMatch = closingTagRegex.exec(buffer);\n\t\t\t\tif (!closingTagMatch || closingTagMatch.index === undefined) {\n\t\t\t\t\temitSnapshot(events, buffer);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tconst yamlContent = buffer.slice(0, closingTagMatch.index);\n\t\t\t\tconst originalCallText = `<${currentToolState.name}>${yamlContent}${closingTagMatch[0]}`;\n\t\t\t\tconst parsedArguments = parseYamlMapping(yamlContent);\n\t\t\t\tbuffer = buffer.slice(closingTagMatch.index + closingTagMatch[0].length);\n\t\t\t\tif (parsedArguments === null) {\n\t\t\t\t\toptions?.onError?.(\"Could not process YAML XML tool call, keeping original text.\", {\n\t\t\t\t\t\ttoolCall: originalCallText,\n\t\t\t\t\t});\n\t\t\t\t\tif (shouldEmitRawToolCallTextOnError(options)) {\n\t\t\t\t\t\tevents.push({ type: \"text\", text: originalCallText });\n\t\t\t\t\t}\n\t\t\t\t\tcurrentToolState = null;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\temitSnapshot(events, yamlContent);\n\t\t\t\tif (currentToolState.lastArgumentsSnapshot === null) {\n\t\t\t\t\tevents.push({\n\t\t\t\t\t\ttype: \"toolcall_start\",\n\t\t\t\t\t\tindex: currentToolState.index,\n\t\t\t\t\t\tname: currentToolState.name,\n\t\t\t\t\t\tid: currentToolState.id,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tevents.push({\n\t\t\t\t\ttype: \"toolcall_end\",\n\t\t\t\t\tindex: currentToolState.index,\n\t\t\t\t\tname: currentToolState.name,\n\t\t\t\t\tid: currentToolState.id,\n\t\t\t\t\targuments: parsedArguments,\n\t\t\t\t});\n\t\t\t\tcurrentToolState = null;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst openingTag = findEarliestXmlToolTag(buffer, toolNames);\n\t\t\tif (!openingTag) {\n\t\t\t\tconst textLength = getSafeXmlTextLength(buffer, toolNames);\n\t\t\t\tif (textLength === 0) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tevents.push({ type: \"text\", text: buffer.slice(0, textLength) });\n\t\t\t\tbuffer = buffer.slice(textLength);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (openingTag.index > 0) {\n\t\t\t\tevents.push({ type: \"text\", text: buffer.slice(0, openingTag.index) });\n\t\t\t}\n\n\t\t\tbuffer = buffer.slice(openingTag.index + openingTag.tag.length);\n\t\t\tif (openingTag.selfClosing) {\n\t\t\t\tconst id = `yaml-xml-tool-${nextToolCallIndex}`;\n\t\t\t\tconst index = nextToolCallIndex;\n\t\t\t\tnextToolCallIndex += 1;\n\t\t\t\tevents.push({ type: \"toolcall_start\", index, name: openingTag.name, id });\n\t\t\t\tevents.push({ type: \"toolcall_end\", index, name: openingTag.name, id, arguments: {} });\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tcurrentToolState = {\n\t\t\t\tid: `yaml-xml-tool-${nextToolCallIndex}`,\n\t\t\t\tindex: nextToolCallIndex,\n\t\t\t\tname: openingTag.name,\n\t\t\t\tlastArgumentsSnapshot: null,\n\t\t\t};\n\t\t\tnextToolCallIndex += 1;\n\t\t}\n\n\t\treturn events;\n\t}\n\n\treturn {\n\t\tfeed(textDelta: string): StreamParserEvent[] {\n\t\t\tif (textDelta.length === 0) {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t\tbuffer += textDelta;\n\t\t\treturn processBuffer();\n\t\t},\n\t\tfinish(): StreamParserEvent[] {\n\t\t\tconst events = processBuffer();\n\t\t\tif (!currentToolState && buffer.length > 0) {\n\t\t\t\tevents.push({ type: \"text\", text: buffer });\n\t\t\t\tbuffer = \"\";\n\t\t\t}\n\t\t\tif (currentToolState && buffer.length > 0) {\n\t\t\t\tconst parsedArguments = parseYamlMapping(buffer);\n\t\t\t\tif (parsedArguments !== null) {\n\t\t\t\t\temitSnapshot(events, buffer);\n\t\t\t\t\tif (currentToolState.lastArgumentsSnapshot === null) {\n\t\t\t\t\t\tevents.push({\n\t\t\t\t\t\t\ttype: \"toolcall_start\",\n\t\t\t\t\t\t\tindex: currentToolState.index,\n\t\t\t\t\t\t\tname: currentToolState.name,\n\t\t\t\t\t\t\tid: currentToolState.id,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tevents.push({\n\t\t\t\t\t\ttype: \"toolcall_end\",\n\t\t\t\t\t\tindex: currentToolState.index,\n\t\t\t\t\t\tname: currentToolState.name,\n\t\t\t\t\t\tid: currentToolState.id,\n\t\t\t\t\t\targuments: parsedArguments,\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tconst rawToolCall = `<${currentToolState.name}>${buffer}`;\n\t\t\t\t\toptions?.onError?.(\"Could not complete streaming YAML XML tool call at finish.\", {\n\t\t\t\t\t\ttoolCall: rawToolCall,\n\t\t\t\t\t});\n\t\t\t\t\tif (shouldEmitRawToolCallTextOnError(options)) {\n\t\t\t\t\t\tevents.push({ type: \"text\", text: rawToolCall });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbuffer = \"\";\n\t\t\t\tcurrentToolState = null;\n\t\t\t}\n\t\t\treturn events;\n\t\t},\n\t};\n}\n"]}
1
+ {"version":3,"file":"yaml-xml.js","sourceRoot":"","sources":["../../../src/tool-call-middleware/protocols/yaml-xml.ts"],"names":[],"mappings":"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","sourcesContent":["import YAML from \"yaml\";\nimport type { TextContent, Tool } from \"../../types.ts\";\nimport { validateToolArguments } from \"../../utils/validation.ts\";\nimport type { ParsedToolCall, ParserOptions, StreamParser, StreamParserEvent } from \"../types.ts\";\nimport { findEarliestXmlToolTag, getSafeXmlTextLength } from \"./xml-tool-tag-scanner.ts\";\n\nfunction escapeRegExp(text: string): string {\n\treturn text.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n\nfunction normalizeYamlContent(yamlContent: string): string {\n\tconst trimmedLeadingNewline = yamlContent.startsWith(\"\\n\") ? yamlContent.slice(1) : yamlContent;\n\tconst lines = trimmedLeadingNewline.split(\"\\n\");\n\tconst nonEmptyLines = lines.filter((line) => line.trim().length > 0);\n\tif (nonEmptyLines.length === 0) {\n\t\treturn \"\";\n\t}\n\n\tconst minIndent = Math.min(\n\t\t...nonEmptyLines.map((line) => {\n\t\t\tconst match = line.match(/^(\\s*)/);\n\t\t\treturn match?.[1].length ?? 0;\n\t\t}),\n\t);\n\treturn minIndent > 0 ? lines.map((line) => line.slice(minIndent)).join(\"\\n\") : trimmedLeadingNewline;\n}\n\nfunction parseYamlMapping(yamlContent: string): Record<string, unknown> | null {\n\tconst normalized = normalizeYamlContent(yamlContent);\n\tif (normalized.trim().length === 0) {\n\t\treturn {};\n\t}\n\n\ttry {\n\t\tconst parsed = YAML.parse(normalized) as unknown;\n\t\tif (parsed === null) {\n\t\t\treturn {};\n\t\t}\n\t\tif (typeof parsed !== \"object\" || Array.isArray(parsed)) {\n\t\t\treturn null;\n\t\t}\n\t\treturn parsed as Record<string, unknown>;\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nfunction findClosingTagEnd(text: string, contentStart: number, toolName: string): number {\n\tconst closingPattern = new RegExp(`</\\\\s*${escapeRegExp(toolName)}\\\\s*>`, \"g\");\n\tclosingPattern.lastIndex = contentStart;\n\tconst match = closingPattern.exec(text);\n\treturn match?.index === undefined ? -1 : match.index + match[0].length;\n}\n\nfunction shouldEmitRawToolCallTextOnError(options?: ParserOptions): boolean {\n\treturn options?.emitRawToolCallTextOnError === true;\n}\n\nexport function yamlXmlFormatToolsSystemPrompt(tools: Tool[]): string {\n\tif (tools.length === 0) {\n\t\treturn \"\";\n\t}\n\n\tconst toolsRendered = JSON.stringify(\n\t\ttools.map((tool) => ({\n\t\t\tname: tool.name,\n\t\t\tdescription: tool.description,\n\t\t\tparameters: tool.parameters,\n\t\t})),\n\t);\n\n\treturn `# 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>${toolsRendered}</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>\ncity: Seoul\nunit: celsius\n</get_weather>`;\n}\n\nexport function yamlXmlFormatToolCall(name: string, args: Record<string, unknown>): string {\n\tconst yamlBody = YAML.stringify(args).trimEnd();\n\treturn `<${name}>\\n${yamlBody.length > 0 ? yamlBody : \"null\"}\\n</${name}>`;\n}\n\nexport function yamlXmlFormatToolResponse(toolName: string, _toolCallId: string, content: TextContent[]): string {\n\tconst textContent = content\n\t\t.filter((entry): entry is TextContent => entry.type === \"text\")\n\t\t.map((entry) => entry.text)\n\t\t.join(\"\\n\");\n\n\treturn [\n\t\t`<tool_response>`,\n\t\t`tool_name: ${toolName}`,\n\t\t`result: |-`,\n\t\t...textContent.split(\"\\n\").map((line) => ` ${line}`),\n\t\t`</tool_response>`,\n\t].join(\"\\n\");\n}\n\nexport function parseYamlXmlGeneratedText(text: string, tools: Tool[], options?: ParserOptions): ParsedToolCall[] {\n\tif (tools.length === 0 || text.length === 0) {\n\t\treturn [];\n\t}\n\n\tconst parsedToolCalls: ParsedToolCall[] = [];\n\tconst toolNames = tools.map((tool) => tool.name);\n\tlet cursor = 0;\n\n\twhile (cursor < text.length) {\n\t\tconst openingTag = findEarliestXmlToolTag(text.slice(cursor), toolNames);\n\t\tif (!openingTag) {\n\t\t\tbreak;\n\t\t}\n\n\t\tconst absoluteIndex = cursor + openingTag.index;\n\t\tif (openingTag.selfClosing) {\n\t\t\tparsedToolCalls.push({ name: openingTag.name, arguments: {} });\n\t\t\tcursor = absoluteIndex + openingTag.tag.length;\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst contentStart = absoluteIndex + openingTag.tag.length;\n\t\tconst closingTagEnd = findClosingTagEnd(text, contentStart, openingTag.name);\n\t\tif (closingTagEnd === -1) {\n\t\t\tbreak;\n\t\t}\n\n\t\tconst closingTagText = text.slice(contentStart, closingTagEnd);\n\t\tconst closingTagMatch = new RegExp(`</\\\\s*${escapeRegExp(openingTag.name)}\\\\s*>`).exec(closingTagText);\n\t\tconst closingTagIndex = closingTagMatch?.index;\n\t\tif (closingTagIndex === undefined) {\n\t\t\tcursor = closingTagEnd;\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst yamlContent = closingTagText.slice(0, closingTagIndex);\n\t\tconst parsedArguments = parseYamlMapping(yamlContent);\n\t\tif (parsedArguments !== null) {\n\t\t\tparsedToolCalls.push({\n\t\t\t\tname: openingTag.name,\n\t\t\t\targuments: parsedArguments,\n\t\t\t});\n\t\t} else {\n\t\t\toptions?.onError?.(\"Could not process YAML XML tool call, keeping original text.\", {\n\t\t\t\ttoolCall: text.slice(absoluteIndex, closingTagEnd),\n\t\t\t});\n\t\t}\n\n\t\tcursor = closingTagEnd;\n\t}\n\n\treturn parsedToolCalls;\n}\n\nexport function createYamlXmlStreamParser(tools: Tool[], options?: ParserOptions): StreamParser {\n\tconst toolNames = tools.map((tool) => tool.name);\n\tlet buffer = \"\";\n\tlet currentToolState: {\n\t\tid: string;\n\t\tindex: number;\n\t\tname: string;\n\t\tlastArgumentsSnapshot: string | null;\n\t} | null = null;\n\tlet nextToolCallIndex = 0;\n\n\tfunction emitSnapshot(events: StreamParserEvent[], yamlContent: string): void {\n\t\tif (!currentToolState) {\n\t\t\treturn;\n\t\t}\n\t\tconst parsedArguments = parseYamlMapping(yamlContent);\n\t\tif (parsedArguments === null) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst snapshot = JSON.stringify(parsedArguments);\n\t\tif (snapshot === \"{}\" || snapshot === currentToolState.lastArgumentsSnapshot) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (currentToolState.lastArgumentsSnapshot === null) {\n\t\t\tevents.push({\n\t\t\t\ttype: \"toolcall_start\",\n\t\t\t\tindex: currentToolState.index,\n\t\t\t\tname: currentToolState.name,\n\t\t\t\tid: currentToolState.id,\n\t\t\t});\n\t\t}\n\n\t\tcurrentToolState.lastArgumentsSnapshot = snapshot;\n\t\tevents.push({\n\t\t\ttype: \"toolcall_delta\",\n\t\t\tindex: currentToolState.index,\n\t\t\targumentsDelta: snapshot,\n\t\t});\n\t}\n\n\tfunction processBuffer(): StreamParserEvent[] {\n\t\tconst events: StreamParserEvent[] = [];\n\n\t\twhile (buffer.length > 0) {\n\t\t\tif (currentToolState) {\n\t\t\t\tconst closingTagRegex = new RegExp(`</\\\\s*${escapeRegExp(currentToolState.name)}\\\\s*>`);\n\t\t\t\tconst closingTagMatch = closingTagRegex.exec(buffer);\n\t\t\t\tif (!closingTagMatch || closingTagMatch.index === undefined) {\n\t\t\t\t\temitSnapshot(events, buffer);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tconst yamlContent = buffer.slice(0, closingTagMatch.index);\n\t\t\t\tconst originalCallText = `<${currentToolState.name}>${yamlContent}${closingTagMatch[0]}`;\n\t\t\t\tconst parsedArguments = parseYamlMapping(yamlContent);\n\t\t\t\tbuffer = buffer.slice(closingTagMatch.index + closingTagMatch[0].length);\n\t\t\t\tif (parsedArguments === null) {\n\t\t\t\t\toptions?.onError?.(\"Could not process YAML XML tool call, keeping original text.\", {\n\t\t\t\t\t\ttoolCall: originalCallText,\n\t\t\t\t\t});\n\t\t\t\t\tif (currentToolState.lastArgumentsSnapshot !== null) {\n\t\t\t\t\t\tevents.push({\n\t\t\t\t\t\t\ttype: \"toolcall_end\",\n\t\t\t\t\t\t\tindex: currentToolState.index,\n\t\t\t\t\t\t\tname: currentToolState.name,\n\t\t\t\t\t\t\tid: currentToolState.id,\n\t\t\t\t\t\t\targuments: {},\n\t\t\t\t\t\t\tincomplete: true,\n\t\t\t\t\t\t\terrorMessage: \"Tool call arguments could not be parsed\",\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tif (shouldEmitRawToolCallTextOnError(options)) {\n\t\t\t\t\t\tevents.push({ type: \"text\", text: originalCallText });\n\t\t\t\t\t}\n\t\t\t\t\tcurrentToolState = null;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\temitSnapshot(events, yamlContent);\n\t\t\t\tif (currentToolState.lastArgumentsSnapshot === null) {\n\t\t\t\t\tevents.push({\n\t\t\t\t\t\ttype: \"toolcall_start\",\n\t\t\t\t\t\tindex: currentToolState.index,\n\t\t\t\t\t\tname: currentToolState.name,\n\t\t\t\t\t\tid: currentToolState.id,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tevents.push({\n\t\t\t\t\ttype: \"toolcall_end\",\n\t\t\t\t\tindex: currentToolState.index,\n\t\t\t\t\tname: currentToolState.name,\n\t\t\t\t\tid: currentToolState.id,\n\t\t\t\t\targuments: parsedArguments,\n\t\t\t\t});\n\t\t\t\tcurrentToolState = null;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst openingTag = findEarliestXmlToolTag(buffer, toolNames);\n\t\t\tif (!openingTag) {\n\t\t\t\tconst textLength = getSafeXmlTextLength(buffer, toolNames);\n\t\t\t\tif (textLength === 0) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tevents.push({ type: \"text\", text: buffer.slice(0, textLength) });\n\t\t\t\tbuffer = buffer.slice(textLength);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (openingTag.index > 0) {\n\t\t\t\tevents.push({ type: \"text\", text: buffer.slice(0, openingTag.index) });\n\t\t\t}\n\n\t\t\tbuffer = buffer.slice(openingTag.index + openingTag.tag.length);\n\t\t\tif (openingTag.selfClosing) {\n\t\t\t\tconst id = `yaml-xml-tool-${nextToolCallIndex}`;\n\t\t\t\tconst index = nextToolCallIndex;\n\t\t\t\tnextToolCallIndex += 1;\n\t\t\t\tevents.push({ type: \"toolcall_start\", index, name: openingTag.name, id });\n\t\t\t\tevents.push({ type: \"toolcall_end\", index, name: openingTag.name, id, arguments: {} });\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tcurrentToolState = {\n\t\t\t\tid: `yaml-xml-tool-${nextToolCallIndex}`,\n\t\t\t\tindex: nextToolCallIndex,\n\t\t\t\tname: openingTag.name,\n\t\t\t\tlastArgumentsSnapshot: null,\n\t\t\t};\n\t\t\tnextToolCallIndex += 1;\n\t\t}\n\n\t\treturn events;\n\t}\n\n\treturn {\n\t\tfeed(textDelta: string): StreamParserEvent[] {\n\t\t\tif (textDelta.length === 0) {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t\tbuffer += textDelta;\n\t\t\treturn processBuffer();\n\t\t},\n\t\tfinish(): StreamParserEvent[] {\n\t\t\tconst events = processBuffer();\n\t\t\tif (!currentToolState && buffer.length > 0) {\n\t\t\t\tevents.push({ type: \"text\", text: buffer });\n\t\t\t\tbuffer = \"\";\n\t\t\t}\n\t\t\tif (currentToolState) {\n\t\t\t\tconst state = currentToolState;\n\t\t\t\tconst parsedArguments = parseYamlMapping(buffer);\n\t\t\t\tconst tool = tools.find((candidate) => candidate.name === state.name);\n\t\t\t\tlet validatedArguments: Record<string, unknown> | null = null;\n\n\t\t\t\tif (parsedArguments !== null && tool) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tvalidatedArguments = validateToolArguments(tool, {\n\t\t\t\t\t\t\ttype: \"toolCall\",\n\t\t\t\t\t\t\tid: state.id,\n\t\t\t\t\t\t\tname: state.name,\n\t\t\t\t\t\t\targuments: parsedArguments,\n\t\t\t\t\t\t});\n\t\t\t\t\t} catch {\n\t\t\t\t\t\t// Validation failure makes the truncated call incomplete rather than executable.\n\t\t\t\t\t\tvalidatedArguments = null;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (validatedArguments !== null) {\n\t\t\t\t\temitSnapshot(events, buffer);\n\t\t\t\t\tif (state.lastArgumentsSnapshot === null) {\n\t\t\t\t\t\tevents.push({ type: \"toolcall_start\", index: state.index, name: state.name, id: state.id });\n\t\t\t\t\t}\n\t\t\t\t\tevents.push({\n\t\t\t\t\t\ttype: \"toolcall_end\",\n\t\t\t\t\t\tindex: state.index,\n\t\t\t\t\t\tname: state.name,\n\t\t\t\t\t\tid: state.id,\n\t\t\t\t\t\targuments: validatedArguments,\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tif (state.lastArgumentsSnapshot === null) {\n\t\t\t\t\t\tevents.push({ type: \"toolcall_start\", index: state.index, name: state.name, id: state.id });\n\t\t\t\t\t}\n\t\t\t\t\tevents.push({\n\t\t\t\t\t\ttype: \"toolcall_end\",\n\t\t\t\t\t\tindex: state.index,\n\t\t\t\t\t\tname: state.name,\n\t\t\t\t\t\tid: state.id,\n\t\t\t\t\t\targuments: parsedArguments ?? {},\n\t\t\t\t\t\tincomplete: true,\n\t\t\t\t\t\terrorMessage: \"Tool call was truncated mid-arguments\",\n\t\t\t\t\t});\n\t\t\t\t\toptions?.onError?.(\"Could not complete streaming YAML XML tool call at finish.\", {\n\t\t\t\t\t\tprotocol: \"yaml-xml\",\n\t\t\t\t\t\tretainedLength: buffer.length,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tbuffer = \"\";\n\t\t\t\tcurrentToolState = null;\n\t\t\t}\n\t\t\treturn events;\n\t\t},\n\t};\n}\n"]}