@code-yeongyu/senpi 2026.6.4 → 2026.6.6-3

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 (1050) hide show
  1. package/CHANGELOG.md +39 -1
  2. package/README.md +19 -4
  3. package/dist/bun/cli.d.ts.map +1 -1
  4. package/dist/bun/cli.js.map +1 -1
  5. package/dist/bun/register-bedrock.d.ts.map +1 -1
  6. package/dist/bun/restore-sandbox-env.d.ts.map +1 -1
  7. package/dist/bun/restore-sandbox-env.js.map +1 -1
  8. package/dist/cli/args.d.ts +1 -0
  9. package/dist/cli/args.d.ts.map +1 -1
  10. package/dist/cli/args.js +12 -2
  11. package/dist/cli/args.js.map +1 -1
  12. package/dist/cli/config-selector.d.ts.map +1 -1
  13. package/dist/cli/config-selector.js.map +1 -1
  14. package/dist/cli/file-processor.d.ts.map +1 -1
  15. package/dist/cli/file-processor.js.map +1 -1
  16. package/dist/cli/initial-message.d.ts +1 -1
  17. package/dist/cli/initial-message.d.ts.map +1 -1
  18. package/dist/cli/initial-message.js.map +1 -1
  19. package/dist/cli/list-models.d.ts.map +1 -1
  20. package/dist/cli/list-models.js.map +1 -1
  21. package/dist/cli/session-picker.d.ts.map +1 -1
  22. package/dist/cli/session-picker.js.map +1 -1
  23. package/dist/cli-main.d.ts.map +1 -1
  24. package/dist/cli-main.js.map +1 -1
  25. package/dist/cli.d.ts.map +1 -1
  26. package/dist/cli.js.map +1 -1
  27. package/dist/config.d.ts.map +1 -1
  28. package/dist/config.js.map +1 -1
  29. package/dist/core/agent-session-runtime.d.ts.map +1 -1
  30. package/dist/core/agent-session-runtime.js +0 -8
  31. package/dist/core/agent-session-runtime.js.map +1 -1
  32. package/dist/core/agent-session-services.d.ts.map +1 -1
  33. package/dist/core/agent-session-services.js.map +1 -1
  34. package/dist/core/agent-session.d.ts +32 -0
  35. package/dist/core/agent-session.d.ts.map +1 -1
  36. package/dist/core/agent-session.js +51 -79
  37. package/dist/core/agent-session.js.map +1 -1
  38. package/dist/core/auth-guidance.d.ts.map +1 -1
  39. package/dist/core/auth-guidance.js.map +1 -1
  40. package/dist/core/auth-storage.d.ts +4 -0
  41. package/dist/core/auth-storage.d.ts.map +1 -1
  42. package/dist/core/auth-storage.js +4 -8
  43. package/dist/core/auth-storage.js.map +1 -1
  44. package/dist/core/bash-executor.d.ts.map +1 -1
  45. package/dist/core/bash-executor.js.map +1 -1
  46. package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
  47. package/dist/core/compaction/branch-summarization.js.map +1 -1
  48. package/dist/core/compaction/compaction.d.ts.map +1 -1
  49. package/dist/core/compaction/compaction.js.map +1 -1
  50. package/dist/core/compaction/index.d.ts.map +1 -1
  51. package/dist/core/compaction/utils.d.ts.map +1 -1
  52. package/dist/core/compaction/utils.js.map +1 -1
  53. package/dist/core/defaults.d.ts.map +1 -1
  54. package/dist/core/diagnostics.d.ts.map +1 -1
  55. package/dist/core/dynamic-prompt/build.d.ts.map +1 -1
  56. package/dist/core/dynamic-prompt/build.js.map +1 -1
  57. package/dist/core/dynamic-prompt/exploration.d.ts.map +1 -1
  58. package/dist/core/dynamic-prompt/exploration.js.map +1 -1
  59. package/dist/core/dynamic-prompt/identity.d.ts.map +1 -1
  60. package/dist/core/dynamic-prompt/identity.js.map +1 -1
  61. package/dist/core/dynamic-prompt/index.d.ts.map +1 -1
  62. package/dist/core/dynamic-prompt/intent-gate.d.ts.map +1 -1
  63. package/dist/core/dynamic-prompt/intent-gate.js.map +1 -1
  64. package/dist/core/dynamic-prompt/parallel-tools.d.ts.map +1 -1
  65. package/dist/core/dynamic-prompt/parallel-tools.js.map +1 -1
  66. package/dist/core/dynamic-prompt/policies.d.ts.map +1 -1
  67. package/dist/core/dynamic-prompt/policies.js.map +1 -1
  68. package/dist/core/dynamic-prompt/style.d.ts.map +1 -1
  69. package/dist/core/dynamic-prompt/style.js.map +1 -1
  70. package/dist/core/dynamic-prompt/tool-categorization.d.ts.map +1 -1
  71. package/dist/core/dynamic-prompt/tool-categorization.js.map +1 -1
  72. package/dist/core/dynamic-prompt/tool-section.d.ts.map +1 -1
  73. package/dist/core/dynamic-prompt/tool-section.js.map +1 -1
  74. package/dist/core/dynamic-prompt/types.d.ts.map +1 -1
  75. package/dist/core/dynamic-prompt/verification.d.ts.map +1 -1
  76. package/dist/core/dynamic-prompt/verification.js.map +1 -1
  77. package/dist/core/event-bus.d.ts.map +1 -1
  78. package/dist/core/event-bus.js.map +1 -1
  79. package/dist/core/exec.d.ts.map +1 -1
  80. package/dist/core/exec.js.map +1 -1
  81. package/dist/core/export-html/ansi-to-html.d.ts.map +1 -1
  82. package/dist/core/export-html/ansi-to-html.js.map +1 -1
  83. package/dist/core/export-html/index.d.ts.map +1 -1
  84. package/dist/core/export-html/index.js.map +1 -1
  85. package/dist/core/export-html/tool-renderer.d.ts.map +1 -1
  86. package/dist/core/export-html/tool-renderer.js.map +1 -1
  87. package/dist/core/extensions/builtin/anthropic-bash/index.d.ts.map +1 -1
  88. package/dist/core/extensions/builtin/anthropic-bash/index.js.map +1 -1
  89. package/dist/core/extensions/builtin/anthropic-web-search/index.d.ts.map +1 -1
  90. package/dist/core/extensions/builtin/anthropic-web-search/index.js.map +1 -1
  91. package/dist/core/extensions/builtin/bash-timeout/index.d.ts.map +1 -1
  92. package/dist/core/extensions/builtin/bash-timeout/index.js.map +1 -1
  93. package/dist/core/extensions/builtin/bash-timeout/timeout.d.ts.map +1 -1
  94. package/dist/core/extensions/builtin/bash-timeout/timeout.js.map +1 -1
  95. package/dist/core/extensions/builtin/compaction/checkpoint-state.d.ts.map +1 -1
  96. package/dist/core/extensions/builtin/compaction/checkpoint-state.js.map +1 -1
  97. package/dist/core/extensions/builtin/compaction/circuit-breaker.d.ts.map +1 -1
  98. package/dist/core/extensions/builtin/compaction/circuit-breaker.js.map +1 -1
  99. package/dist/core/extensions/builtin/compaction/context-reduction.d.ts.map +1 -1
  100. package/dist/core/extensions/builtin/compaction/context-reduction.js +1 -1
  101. package/dist/core/extensions/builtin/compaction/context-reduction.js.map +1 -1
  102. package/dist/core/extensions/builtin/compaction/degradation-monitor.d.ts.map +1 -1
  103. package/dist/core/extensions/builtin/compaction/degradation-monitor.js.map +1 -1
  104. package/dist/core/extensions/builtin/compaction/index.d.ts.map +1 -1
  105. package/dist/core/extensions/builtin/compaction/index.js.map +1 -1
  106. package/dist/core/extensions/builtin/compaction/openai-remote.d.ts.map +1 -1
  107. package/dist/core/extensions/builtin/compaction/openai-remote.js.map +1 -1
  108. package/dist/core/extensions/builtin/compaction/overflow-detection.d.ts.map +1 -1
  109. package/dist/core/extensions/builtin/compaction/overflow-detection.js.map +1 -1
  110. package/dist/core/extensions/builtin/compaction/per-turn-cap.d.ts.map +1 -1
  111. package/dist/core/extensions/builtin/compaction/per-turn-cap.js.map +1 -1
  112. package/dist/core/extensions/builtin/compaction/policy.d.ts.map +1 -1
  113. package/dist/core/extensions/builtin/compaction/policy.js.map +1 -1
  114. package/dist/core/extensions/builtin/compaction/prompts.d.ts.map +1 -1
  115. package/dist/core/extensions/builtin/compaction/prompts.js.map +1 -1
  116. package/dist/core/extensions/builtin/compaction/repair-tool-pairs.d.ts.map +1 -1
  117. package/dist/core/extensions/builtin/compaction/repair-tool-pairs.js.map +1 -1
  118. package/dist/core/extensions/builtin/compaction/restoration-tracker.d.ts.map +1 -1
  119. package/dist/core/extensions/builtin/compaction/restoration-tracker.js.map +1 -1
  120. package/dist/core/extensions/builtin/compaction/speculative.d.ts.map +1 -1
  121. package/dist/core/extensions/builtin/compaction/speculative.js.map +1 -1
  122. package/dist/core/extensions/builtin/compaction/state.d.ts.map +1 -1
  123. package/dist/core/extensions/builtin/compaction/state.js.map +1 -1
  124. package/dist/core/extensions/builtin/compaction/todo-bridge.d.ts.map +1 -1
  125. package/dist/core/extensions/builtin/compaction/todo-bridge.js.map +1 -1
  126. package/dist/core/extensions/builtin/compaction/tool-truncation.d.ts.map +1 -1
  127. package/dist/core/extensions/builtin/compaction/tool-truncation.js.map +1 -1
  128. package/dist/core/extensions/builtin/diff.d.ts.map +1 -1
  129. package/dist/core/extensions/builtin/diff.js.map +1 -1
  130. package/dist/core/extensions/builtin/files.d.ts.map +1 -1
  131. package/dist/core/extensions/builtin/files.js.map +1 -1
  132. package/dist/core/extensions/builtin/gpt-apply-patch/apply.d.ts.map +1 -1
  133. package/dist/core/extensions/builtin/gpt-apply-patch/apply.js.map +1 -1
  134. package/dist/core/extensions/builtin/gpt-apply-patch/constants.d.ts.map +1 -1
  135. package/dist/core/extensions/builtin/gpt-apply-patch/constants.js.map +1 -1
  136. package/dist/core/extensions/builtin/gpt-apply-patch/errors.d.ts.map +1 -1
  137. package/dist/core/extensions/builtin/gpt-apply-patch/errors.js +0 -2
  138. package/dist/core/extensions/builtin/gpt-apply-patch/errors.js.map +1 -1
  139. package/dist/core/extensions/builtin/gpt-apply-patch/extension.d.ts.map +1 -1
  140. package/dist/core/extensions/builtin/gpt-apply-patch/extension.js.map +1 -1
  141. package/dist/core/extensions/builtin/gpt-apply-patch/index.d.ts.map +1 -1
  142. package/dist/core/extensions/builtin/gpt-apply-patch/params.d.ts.map +1 -1
  143. package/dist/core/extensions/builtin/gpt-apply-patch/params.js.map +1 -1
  144. package/dist/core/extensions/builtin/gpt-apply-patch/parser.d.ts.map +1 -1
  145. package/dist/core/extensions/builtin/gpt-apply-patch/parser.js.map +1 -1
  146. package/dist/core/extensions/builtin/gpt-apply-patch/patch-diff.d.ts.map +1 -1
  147. package/dist/core/extensions/builtin/gpt-apply-patch/patch-diff.js.map +1 -1
  148. package/dist/core/extensions/builtin/gpt-apply-patch/patch-replace.d.ts.map +1 -1
  149. package/dist/core/extensions/builtin/gpt-apply-patch/patch-replace.js.map +1 -1
  150. package/dist/core/extensions/builtin/gpt-apply-patch/preview-format.d.ts.map +1 -1
  151. package/dist/core/extensions/builtin/gpt-apply-patch/preview-format.js.map +1 -1
  152. package/dist/core/extensions/builtin/gpt-apply-patch/preview.d.ts.map +1 -1
  153. package/dist/core/extensions/builtin/gpt-apply-patch/preview.js.map +1 -1
  154. package/dist/core/extensions/builtin/gpt-apply-patch/seek-sequence.d.ts.map +1 -1
  155. package/dist/core/extensions/builtin/gpt-apply-patch/seek-sequence.js.map +1 -1
  156. package/dist/core/extensions/builtin/gpt-apply-patch/streaming-parser.d.ts.map +1 -1
  157. package/dist/core/extensions/builtin/gpt-apply-patch/streaming-parser.js +7 -5
  158. package/dist/core/extensions/builtin/gpt-apply-patch/streaming-parser.js.map +1 -1
  159. package/dist/core/extensions/builtin/gpt-apply-patch/streaming-render.d.ts.map +1 -1
  160. package/dist/core/extensions/builtin/gpt-apply-patch/streaming-render.js.map +1 -1
  161. package/dist/core/extensions/builtin/gpt-apply-patch/text.d.ts.map +1 -1
  162. package/dist/core/extensions/builtin/gpt-apply-patch/text.js.map +1 -1
  163. package/dist/core/extensions/builtin/gpt-apply-patch/tool.d.ts.map +1 -1
  164. package/dist/core/extensions/builtin/gpt-apply-patch/tool.js.map +1 -1
  165. package/dist/core/extensions/builtin/gpt-apply-patch/types.d.ts.map +1 -1
  166. package/dist/core/extensions/builtin/gpt-apply-patch/workspace.d.ts.map +1 -1
  167. package/dist/core/extensions/builtin/gpt-apply-patch/workspace.js.map +1 -1
  168. package/dist/core/extensions/builtin/history-search/filter.d.ts.map +1 -1
  169. package/dist/core/extensions/builtin/history-search/filter.js.map +1 -1
  170. package/dist/core/extensions/builtin/history-search/index.d.ts.map +1 -1
  171. package/dist/core/extensions/builtin/history-search/index.js.map +1 -1
  172. package/dist/core/extensions/builtin/history-search/indexer.d.ts.map +1 -1
  173. package/dist/core/extensions/builtin/history-search/indexer.js.map +1 -1
  174. package/dist/core/extensions/builtin/history-search/overlay.d.ts.map +1 -1
  175. package/dist/core/extensions/builtin/history-search/overlay.js +3 -6
  176. package/dist/core/extensions/builtin/history-search/overlay.js.map +1 -1
  177. package/dist/core/extensions/builtin/history-search/types.d.ts.map +1 -1
  178. package/dist/core/extensions/builtin/index.d.ts.map +1 -1
  179. package/dist/core/extensions/builtin/kimi-web-search/index.d.ts.map +1 -1
  180. package/dist/core/extensions/builtin/kimi-web-search/index.js.map +1 -1
  181. package/dist/core/extensions/builtin/openai-web-search/index.d.ts.map +1 -1
  182. package/dist/core/extensions/builtin/openai-web-search/index.js.map +1 -1
  183. package/dist/core/extensions/builtin/permission-system/arity.d.ts.map +1 -1
  184. package/dist/core/extensions/builtin/permission-system/arity.js.map +1 -1
  185. package/dist/core/extensions/builtin/permission-system/cli.d.ts.map +1 -1
  186. package/dist/core/extensions/builtin/permission-system/cli.js.map +1 -1
  187. package/dist/core/extensions/builtin/permission-system/config.d.ts.map +1 -1
  188. package/dist/core/extensions/builtin/permission-system/config.js.map +1 -1
  189. package/dist/core/extensions/builtin/permission-system/evaluate.d.ts.map +1 -1
  190. package/dist/core/extensions/builtin/permission-system/evaluate.js.map +1 -1
  191. package/dist/core/extensions/builtin/permission-system/events.d.ts.map +1 -1
  192. package/dist/core/extensions/builtin/permission-system/events.js.map +1 -1
  193. package/dist/core/extensions/builtin/permission-system/external-dir.d.ts.map +1 -1
  194. package/dist/core/extensions/builtin/permission-system/external-dir.js.map +1 -1
  195. package/dist/core/extensions/builtin/permission-system/index.d.ts.map +1 -1
  196. package/dist/core/extensions/builtin/permission-system/index.js.map +1 -1
  197. package/dist/core/extensions/builtin/permission-system/non-interactive.d.ts.map +1 -1
  198. package/dist/core/extensions/builtin/permission-system/non-interactive.js.map +1 -1
  199. package/dist/core/extensions/builtin/permission-system/parsers.d.ts.map +1 -1
  200. package/dist/core/extensions/builtin/permission-system/parsers.js +3 -1
  201. package/dist/core/extensions/builtin/permission-system/parsers.js.map +1 -1
  202. package/dist/core/extensions/builtin/permission-system/prompt.d.ts.map +1 -1
  203. package/dist/core/extensions/builtin/permission-system/prompt.js.map +1 -1
  204. package/dist/core/extensions/builtin/permission-system/service.d.ts.map +1 -1
  205. package/dist/core/extensions/builtin/permission-system/service.js +2 -5
  206. package/dist/core/extensions/builtin/permission-system/service.js.map +1 -1
  207. package/dist/core/extensions/builtin/permission-system/settings.d.ts.map +1 -1
  208. package/dist/core/extensions/builtin/permission-system/settings.js.map +1 -1
  209. package/dist/core/extensions/builtin/permission-system/storage.d.ts.map +1 -1
  210. package/dist/core/extensions/builtin/permission-system/storage.js.map +1 -1
  211. package/dist/core/extensions/builtin/permission-system/types.d.ts.map +1 -1
  212. package/dist/core/extensions/builtin/permission-system/types.js +3 -5
  213. package/dist/core/extensions/builtin/permission-system/types.js.map +1 -1
  214. package/dist/core/extensions/builtin/permission-system/wildcard.d.ts.map +1 -1
  215. package/dist/core/extensions/builtin/permission-system/wildcard.js.map +1 -1
  216. package/dist/core/extensions/builtin/prompt-preset/claude-opus-4-5.d.ts.map +1 -1
  217. package/dist/core/extensions/builtin/prompt-preset/claude-opus-4-5.js.map +1 -1
  218. package/dist/core/extensions/builtin/prompt-preset/claude-opus-4-6.d.ts.map +1 -1
  219. package/dist/core/extensions/builtin/prompt-preset/claude-opus-4-6.js.map +1 -1
  220. package/dist/core/extensions/builtin/prompt-preset/claude-opus-4-7.d.ts.map +1 -1
  221. package/dist/core/extensions/builtin/prompt-preset/claude-opus-4-7.js.map +1 -1
  222. package/dist/core/extensions/builtin/prompt-preset/file-operations.d.ts.map +1 -1
  223. package/dist/core/extensions/builtin/prompt-preset/file-operations.js.map +1 -1
  224. package/dist/core/extensions/builtin/prompt-preset/gpt-5.2.d.ts.map +1 -1
  225. package/dist/core/extensions/builtin/prompt-preset/gpt-5.2.js.map +1 -1
  226. package/dist/core/extensions/builtin/prompt-preset/gpt-5.3-codex.d.ts.map +1 -1
  227. package/dist/core/extensions/builtin/prompt-preset/gpt-5.3-codex.js.map +1 -1
  228. package/dist/core/extensions/builtin/prompt-preset/gpt-5.4.d.ts.map +1 -1
  229. package/dist/core/extensions/builtin/prompt-preset/gpt-5.4.js.map +1 -1
  230. package/dist/core/extensions/builtin/prompt-preset/gpt-5.5.d.ts.map +1 -1
  231. package/dist/core/extensions/builtin/prompt-preset/gpt-5.5.js.map +1 -1
  232. package/dist/core/extensions/builtin/prompt-preset/gpt-5.d.ts.map +1 -1
  233. package/dist/core/extensions/builtin/prompt-preset/gpt-5.js.map +1 -1
  234. package/dist/core/extensions/builtin/prompt-preset/index.d.ts.map +1 -1
  235. package/dist/core/extensions/builtin/prompt-preset/index.js.map +1 -1
  236. package/dist/core/extensions/builtin/prompt-preset/kimi-k2-6.d.ts.map +1 -1
  237. package/dist/core/extensions/builtin/prompt-preset/kimi-k2-6.js.map +1 -1
  238. package/dist/core/extensions/builtin/prompt-preset/presets.d.ts.map +1 -1
  239. package/dist/core/extensions/builtin/prompt-preset/presets.js.map +1 -1
  240. package/dist/core/extensions/builtin/prompt-preset/settings.d.ts.map +1 -1
  241. package/dist/core/extensions/builtin/prompt-preset/settings.js.map +1 -1
  242. package/dist/core/extensions/builtin/prompt-url-widget.d.ts.map +1 -1
  243. package/dist/core/extensions/builtin/prompt-url-widget.js.map +1 -1
  244. package/dist/core/extensions/builtin/redraws.d.ts.map +1 -1
  245. package/dist/core/extensions/builtin/redraws.js.map +1 -1
  246. package/dist/core/extensions/builtin/service-tier.d.ts.map +1 -1
  247. package/dist/core/extensions/builtin/service-tier.js.map +1 -1
  248. package/dist/core/extensions/builtin/session-observer/index.d.ts.map +1 -1
  249. package/dist/core/extensions/builtin/session-observer/index.js.map +1 -1
  250. package/dist/core/extensions/builtin/session-observer/loader.d.ts.map +1 -1
  251. package/dist/core/extensions/builtin/session-observer/loader.js.map +1 -1
  252. package/dist/core/extensions/builtin/session-observer/overlay-format.d.ts.map +1 -1
  253. package/dist/core/extensions/builtin/session-observer/overlay-format.js.map +1 -1
  254. package/dist/core/extensions/builtin/session-observer/overlay.d.ts.map +1 -1
  255. package/dist/core/extensions/builtin/session-observer/overlay.js +13 -18
  256. package/dist/core/extensions/builtin/session-observer/overlay.js.map +1 -1
  257. package/dist/core/extensions/builtin/session-observer/scanner.d.ts.map +1 -1
  258. package/dist/core/extensions/builtin/session-observer/scanner.js.map +1 -1
  259. package/dist/core/extensions/builtin/session-observer/text.d.ts.map +1 -1
  260. package/dist/core/extensions/builtin/session-observer/text.js.map +1 -1
  261. package/dist/core/extensions/builtin/session-observer/transcript-entries.d.ts.map +1 -1
  262. package/dist/core/extensions/builtin/session-observer/transcript-entries.js.map +1 -1
  263. package/dist/core/extensions/builtin/session-observer/transcript-format.d.ts.map +1 -1
  264. package/dist/core/extensions/builtin/session-observer/transcript-format.js.map +1 -1
  265. package/dist/core/extensions/builtin/session-observer/transcript.d.ts.map +1 -1
  266. package/dist/core/extensions/builtin/session-observer/transcript.js.map +1 -1
  267. package/dist/core/extensions/builtin/session-observer/types.d.ts.map +1 -1
  268. package/dist/core/extensions/builtin/system-messages.d.ts.map +1 -1
  269. package/dist/core/extensions/builtin/system-messages.js.map +1 -1
  270. package/dist/core/extensions/builtin/todotools/continuation/config.d.ts +1 -1
  271. package/dist/core/extensions/builtin/todotools/continuation/config.d.ts.map +1 -1
  272. package/dist/core/extensions/builtin/todotools/continuation/config.js.map +1 -1
  273. package/dist/core/extensions/builtin/todotools/continuation/index.d.ts.map +1 -1
  274. package/dist/core/extensions/builtin/todotools/continuation/prompt.d.ts.map +1 -1
  275. package/dist/core/extensions/builtin/todotools/continuation/prompt.js.map +1 -1
  276. package/dist/core/extensions/builtin/todotools/continuation/runtime.d.ts.map +1 -1
  277. package/dist/core/extensions/builtin/todotools/continuation/runtime.js.map +1 -1
  278. package/dist/core/extensions/builtin/todotools/index.d.ts.map +1 -1
  279. package/dist/core/extensions/builtin/todotools/index.js.map +1 -1
  280. package/dist/core/extensions/builtin/todotools/prompt.d.ts.map +1 -1
  281. package/dist/core/extensions/builtin/todotools/settings.d.ts.map +1 -1
  282. package/dist/core/extensions/builtin/todotools/settings.js.map +1 -1
  283. package/dist/core/extensions/builtin/todotools/state.d.ts.map +1 -1
  284. package/dist/core/extensions/builtin/todotools/state.js.map +1 -1
  285. package/dist/core/extensions/builtin/todotools/system-messages.d.ts.map +1 -1
  286. package/dist/core/extensions/builtin/todotools/system-messages.js.map +1 -1
  287. package/dist/core/extensions/builtin/todotools/tools/todoread.d.ts.map +1 -1
  288. package/dist/core/extensions/builtin/todotools/tools/todoread.js.map +1 -1
  289. package/dist/core/extensions/builtin/todotools/tools/todowrite.d.ts.map +1 -1
  290. package/dist/core/extensions/builtin/todotools/tools/todowrite.js.map +1 -1
  291. package/dist/core/extensions/builtin/tool-pair-guard/index.d.ts.map +1 -1
  292. package/dist/core/extensions/builtin/tool-pair-guard/index.js.map +1 -1
  293. package/dist/core/extensions/builtin/tool-pair-guard/sanitize-anthropic-payload.d.ts.map +1 -1
  294. package/dist/core/extensions/builtin/tool-pair-guard/sanitize-anthropic-payload.js.map +1 -1
  295. package/dist/core/extensions/builtin/tool-pair-guard/sanitize-openai-chat-completions-payload.d.ts.map +1 -1
  296. package/dist/core/extensions/builtin/tool-pair-guard/sanitize-openai-chat-completions-payload.js.map +1 -1
  297. package/dist/core/extensions/builtin/tool-pair-guard/sanitize-openai-responses-payload.d.ts.map +1 -1
  298. package/dist/core/extensions/builtin/tool-pair-guard/sanitize-openai-responses-payload.js.map +1 -1
  299. package/dist/core/extensions/builtin/tps.d.ts.map +1 -1
  300. package/dist/core/extensions/builtin/tps.js.map +1 -1
  301. package/dist/core/extensions/index.d.ts.map +1 -1
  302. package/dist/core/extensions/loader.d.ts.map +1 -1
  303. package/dist/core/extensions/loader.js.map +1 -1
  304. package/dist/core/extensions/runner.d.ts.map +1 -1
  305. package/dist/core/extensions/runner.js +35 -43
  306. package/dist/core/extensions/runner.js.map +1 -1
  307. package/dist/core/extensions/types.d.ts +1 -1
  308. package/dist/core/extensions/types.d.ts.map +1 -1
  309. package/dist/core/extensions/types.js.map +1 -1
  310. package/dist/core/extensions/wrapper.d.ts.map +1 -1
  311. package/dist/core/extensions/wrapper.js.map +1 -1
  312. package/dist/core/footer-data-provider.d.ts.map +1 -1
  313. package/dist/core/footer-data-provider.js +17 -18
  314. package/dist/core/footer-data-provider.js.map +1 -1
  315. package/dist/core/http-dispatcher.d.ts.map +1 -1
  316. package/dist/core/http-dispatcher.js.map +1 -1
  317. package/dist/core/index.d.ts.map +1 -1
  318. package/dist/core/keybindings.d.ts +1 -1
  319. package/dist/core/keybindings.d.ts.map +1 -1
  320. package/dist/core/keybindings.js +0 -1
  321. package/dist/core/keybindings.js.map +1 -1
  322. package/dist/core/messages.d.ts.map +1 -1
  323. package/dist/core/messages.js.map +1 -1
  324. package/dist/core/model-registry.d.ts.map +1 -1
  325. package/dist/core/model-registry.js +8 -10
  326. package/dist/core/model-registry.js.map +1 -1
  327. package/dist/core/model-resolver.d.ts.map +1 -1
  328. package/dist/core/model-resolver.js.map +1 -1
  329. package/dist/core/output-guard.d.ts.map +1 -1
  330. package/dist/core/output-guard.js.map +1 -1
  331. package/dist/core/package-manager.d.ts +1 -0
  332. package/dist/core/package-manager.d.ts.map +1 -1
  333. package/dist/core/package-manager.js +25 -13
  334. package/dist/core/package-manager.js.map +1 -1
  335. package/dist/core/prompt-templates.d.ts.map +1 -1
  336. package/dist/core/prompt-templates.js.map +1 -1
  337. package/dist/core/provider-attribution.d.ts.map +1 -1
  338. package/dist/core/provider-attribution.js.map +1 -1
  339. package/dist/core/provider-display-names.d.ts.map +1 -1
  340. package/dist/core/resolve-config-value.d.ts.map +1 -1
  341. package/dist/core/resolve-config-value.js.map +1 -1
  342. package/dist/core/resource-loader.d.ts +1 -0
  343. package/dist/core/resource-loader.d.ts.map +1 -1
  344. package/dist/core/resource-loader.js +26 -53
  345. package/dist/core/resource-loader.js.map +1 -1
  346. package/dist/core/sdk.d.ts.map +1 -1
  347. package/dist/core/sdk.js.map +1 -1
  348. package/dist/core/session-cwd.d.ts.map +1 -1
  349. package/dist/core/session-cwd.js +0 -1
  350. package/dist/core/session-cwd.js.map +1 -1
  351. package/dist/core/session-manager.d.ts.map +1 -1
  352. package/dist/core/session-manager.js +7 -11
  353. package/dist/core/session-manager.js.map +1 -1
  354. package/dist/core/session-work-barrier.d.ts.map +1 -1
  355. package/dist/core/session-work-barrier.js +5 -3
  356. package/dist/core/session-work-barrier.js.map +1 -1
  357. package/dist/core/settings-manager.d.ts +10 -2
  358. package/dist/core/settings-manager.d.ts.map +1 -1
  359. package/dist/core/settings-manager.js +77 -46
  360. package/dist/core/settings-manager.js.map +1 -1
  361. package/dist/core/skills.d.ts.map +1 -1
  362. package/dist/core/skills.js.map +1 -1
  363. package/dist/core/slash-commands.d.ts.map +1 -1
  364. package/dist/core/slash-commands.js +1 -0
  365. package/dist/core/slash-commands.js.map +1 -1
  366. package/dist/core/source-info.d.ts.map +1 -1
  367. package/dist/core/source-info.js.map +1 -1
  368. package/dist/core/system-prompt.d.ts.map +1 -1
  369. package/dist/core/system-prompt.js.map +1 -1
  370. package/dist/core/telemetry.d.ts.map +1 -1
  371. package/dist/core/telemetry.js.map +1 -1
  372. package/dist/core/thinking-levels.d.ts.map +1 -1
  373. package/dist/core/thinking-levels.js.map +1 -1
  374. package/dist/core/timings.d.ts.map +1 -1
  375. package/dist/core/timings.js.map +1 -1
  376. package/dist/core/tools/bash.d.ts.map +1 -1
  377. package/dist/core/tools/bash.js +9 -6
  378. package/dist/core/tools/bash.js.map +1 -1
  379. package/dist/core/tools/diff-render.d.ts.map +1 -1
  380. package/dist/core/tools/diff-render.js.map +1 -1
  381. package/dist/core/tools/edit-diff.d.ts.map +1 -1
  382. package/dist/core/tools/edit-diff.js.map +1 -1
  383. package/dist/core/tools/edit.d.ts.map +1 -1
  384. package/dist/core/tools/edit.js.map +1 -1
  385. package/dist/core/tools/file-mutation-queue.d.ts.map +1 -1
  386. package/dist/core/tools/file-mutation-queue.js.map +1 -1
  387. package/dist/core/tools/find.d.ts.map +1 -1
  388. package/dist/core/tools/find.js +1 -1
  389. package/dist/core/tools/find.js.map +1 -1
  390. package/dist/core/tools/grep.d.ts.map +1 -1
  391. package/dist/core/tools/grep.js +1 -1
  392. package/dist/core/tools/grep.js.map +1 -1
  393. package/dist/core/tools/index.d.ts.map +1 -1
  394. package/dist/core/tools/index.js.map +1 -1
  395. package/dist/core/tools/ls.d.ts.map +1 -1
  396. package/dist/core/tools/ls.js +1 -1
  397. package/dist/core/tools/ls.js.map +1 -1
  398. package/dist/core/tools/output-accumulator.d.ts.map +1 -1
  399. package/dist/core/tools/output-accumulator.js +12 -18
  400. package/dist/core/tools/output-accumulator.js.map +1 -1
  401. package/dist/core/tools/path-utils.d.ts.map +1 -1
  402. package/dist/core/tools/path-utils.js.map +1 -1
  403. package/dist/core/tools/read.d.ts.map +1 -1
  404. package/dist/core/tools/read.js +1 -1
  405. package/dist/core/tools/read.js.map +1 -1
  406. package/dist/core/tools/render-utils.d.ts.map +1 -1
  407. package/dist/core/tools/render-utils.js.map +1 -1
  408. package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
  409. package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
  410. package/dist/core/tools/truncate.d.ts.map +1 -1
  411. package/dist/core/tools/truncate.js.map +1 -1
  412. package/dist/core/tools/write.d.ts.map +1 -1
  413. package/dist/core/tools/write.js +1 -2
  414. package/dist/core/tools/write.js.map +1 -1
  415. package/dist/core/trust-manager.d.ts +9 -0
  416. package/dist/core/trust-manager.d.ts.map +1 -0
  417. package/dist/core/trust-manager.js +133 -0
  418. package/dist/core/trust-manager.js.map +1 -0
  419. package/dist/index.d.ts +2 -1
  420. package/dist/index.d.ts.map +1 -1
  421. package/dist/index.js +1 -0
  422. package/dist/index.js.map +1 -1
  423. package/dist/main.d.ts.map +1 -1
  424. package/dist/main.js +54 -2
  425. package/dist/main.js.map +1 -1
  426. package/dist/migrations.d.ts.map +1 -1
  427. package/dist/migrations.js.map +1 -1
  428. package/dist/modes/index.d.ts.map +1 -1
  429. package/dist/modes/interactive/components/armin.d.ts.map +1 -1
  430. package/dist/modes/interactive/components/armin.js +6 -10
  431. package/dist/modes/interactive/components/armin.js.map +1 -1
  432. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  433. package/dist/modes/interactive/components/assistant-message.js +2 -11
  434. package/dist/modes/interactive/components/assistant-message.js.map +1 -1
  435. package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
  436. package/dist/modes/interactive/components/bash-execution.js +6 -11
  437. package/dist/modes/interactive/components/bash-execution.js.map +1 -1
  438. package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -1
  439. package/dist/modes/interactive/components/bordered-loader.js +0 -3
  440. package/dist/modes/interactive/components/bordered-loader.js.map +1 -1
  441. package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -1
  442. package/dist/modes/interactive/components/branch-summary-message.js +1 -3
  443. package/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
  444. package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -1
  445. package/dist/modes/interactive/components/compaction-summary-message.js +1 -3
  446. package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -1
  447. package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
  448. package/dist/modes/interactive/components/config-selector.js +5 -15
  449. package/dist/modes/interactive/components/config-selector.js.map +1 -1
  450. package/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -1
  451. package/dist/modes/interactive/components/countdown-timer.js +0 -5
  452. package/dist/modes/interactive/components/countdown-timer.js.map +1 -1
  453. package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
  454. package/dist/modes/interactive/components/custom-editor.js +1 -8
  455. package/dist/modes/interactive/components/custom-editor.js.map +1 -1
  456. package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
  457. package/dist/modes/interactive/components/custom-message.js +1 -6
  458. package/dist/modes/interactive/components/custom-message.js.map +1 -1
  459. package/dist/modes/interactive/components/daxnuts.d.ts.map +1 -1
  460. package/dist/modes/interactive/components/daxnuts.js +6 -8
  461. package/dist/modes/interactive/components/daxnuts.js.map +1 -1
  462. package/dist/modes/interactive/components/diff.d.ts.map +1 -1
  463. package/dist/modes/interactive/components/diff.js +2 -2
  464. package/dist/modes/interactive/components/diff.js.map +1 -1
  465. package/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -1
  466. package/dist/modes/interactive/components/dynamic-border.js +0 -1
  467. package/dist/modes/interactive/components/dynamic-border.js.map +1 -1
  468. package/dist/modes/interactive/components/earendil-announcement.d.ts.map +1 -1
  469. package/dist/modes/interactive/components/earendil-announcement.js.map +1 -1
  470. package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
  471. package/dist/modes/interactive/components/extension-editor.js +1 -6
  472. package/dist/modes/interactive/components/extension-editor.js.map +1 -1
  473. package/dist/modes/interactive/components/extension-input.d.ts.map +1 -1
  474. package/dist/modes/interactive/components/extension-input.js +2 -8
  475. package/dist/modes/interactive/components/extension-input.js.map +1 -1
  476. package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -1
  477. package/dist/modes/interactive/components/extension-selector.js +1 -9
  478. package/dist/modes/interactive/components/extension-selector.js.map +1 -1
  479. package/dist/modes/interactive/components/favorite-models-selector.d.ts.map +1 -1
  480. package/dist/modes/interactive/components/favorite-models-selector.js +9 -15
  481. package/dist/modes/interactive/components/favorite-models-selector.js.map +1 -1
  482. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  483. package/dist/modes/interactive/components/footer.js +10 -3
  484. package/dist/modes/interactive/components/footer.js.map +1 -1
  485. package/dist/modes/interactive/components/index.d.ts +1 -0
  486. package/dist/modes/interactive/components/index.d.ts.map +1 -1
  487. package/dist/modes/interactive/components/index.js +1 -0
  488. package/dist/modes/interactive/components/index.js.map +1 -1
  489. package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -1
  490. package/dist/modes/interactive/components/keybinding-hints.js.map +1 -1
  491. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
  492. package/dist/modes/interactive/components/login-dialog.js +3 -9
  493. package/dist/modes/interactive/components/login-dialog.js.map +1 -1
  494. package/dist/modes/interactive/components/model-favorites.d.ts.map +1 -1
  495. package/dist/modes/interactive/components/model-favorites.js.map +1 -1
  496. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  497. package/dist/modes/interactive/components/model-selector.js +9 -22
  498. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  499. package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
  500. package/dist/modes/interactive/components/oauth-selector.js +3 -12
  501. package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
  502. package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -1
  503. package/dist/modes/interactive/components/session-selector-search.js.map +1 -1
  504. package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
  505. package/dist/modes/interactive/components/session-selector.js +33 -58
  506. package/dist/modes/interactive/components/session-selector.js.map +1 -1
  507. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  508. package/dist/modes/interactive/components/settings-selector.js +0 -4
  509. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  510. package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -1
  511. package/dist/modes/interactive/components/show-images-selector.js +0 -1
  512. package/dist/modes/interactive/components/show-images-selector.js.map +1 -1
  513. package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -1
  514. package/dist/modes/interactive/components/skill-invocation-message.js +1 -3
  515. package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
  516. package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -1
  517. package/dist/modes/interactive/components/theme-selector.js +0 -2
  518. package/dist/modes/interactive/components/theme-selector.js.map +1 -1
  519. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
  520. package/dist/modes/interactive/components/thinking-selector.js +0 -1
  521. package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
  522. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  523. package/dist/modes/interactive/components/tool-execution.js +9 -28
  524. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  525. package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -1
  526. package/dist/modes/interactive/components/tree-selector.js +18 -32
  527. package/dist/modes/interactive/components/tree-selector.js.map +1 -1
  528. package/dist/modes/interactive/components/trust-selector.d.ts +20 -0
  529. package/dist/modes/interactive/components/trust-selector.d.ts.map +1 -0
  530. package/dist/modes/interactive/components/trust-selector.js +81 -0
  531. package/dist/modes/interactive/components/trust-selector.js.map +1 -0
  532. package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -1
  533. package/dist/modes/interactive/components/user-message-selector.js +3 -6
  534. package/dist/modes/interactive/components/user-message-selector.js.map +1 -1
  535. package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
  536. package/dist/modes/interactive/components/user-message.js +0 -1
  537. package/dist/modes/interactive/components/user-message.js.map +1 -1
  538. package/dist/modes/interactive/components/visual-truncate.d.ts.map +1 -1
  539. package/dist/modes/interactive/components/visual-truncate.js.map +1 -1
  540. package/dist/modes/interactive/interactive-mode.d.ts +24 -0
  541. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  542. package/dist/modes/interactive/interactive-mode.js +112 -101
  543. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  544. package/dist/modes/interactive/session-info-format.d.ts.map +1 -1
  545. package/dist/modes/interactive/session-info-format.js.map +1 -1
  546. package/dist/modes/interactive/startup-tools.d.ts.map +1 -1
  547. package/dist/modes/interactive/startup-tools.js.map +1 -1
  548. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  549. package/dist/modes/interactive/theme/theme.js +0 -6
  550. package/dist/modes/interactive/theme/theme.js.map +1 -1
  551. package/dist/modes/interactive/working-status.d.ts.map +1 -1
  552. package/dist/modes/interactive/working-status.js.map +1 -1
  553. package/dist/modes/print-mode.d.ts.map +1 -1
  554. package/dist/modes/print-mode.js.map +1 -1
  555. package/dist/modes/provider-native-rendering.d.ts.map +1 -1
  556. package/dist/modes/provider-native-rendering.js.map +1 -1
  557. package/dist/modes/rpc/jsonl.d.ts.map +1 -1
  558. package/dist/modes/rpc/jsonl.js.map +1 -1
  559. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  560. package/dist/modes/rpc/rpc-client.js +7 -8
  561. package/dist/modes/rpc/rpc-client.js.map +1 -1
  562. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  563. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  564. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  565. package/dist/package-manager-cli.d.ts.map +1 -1
  566. package/dist/package-manager-cli.js +56 -9
  567. package/dist/package-manager-cli.js.map +1 -1
  568. package/dist/self-update-bootstrap.d.ts.map +1 -1
  569. package/dist/self-update-bootstrap.js.map +1 -1
  570. package/dist/utils/ansi.d.ts.map +1 -1
  571. package/dist/utils/ansi.js.map +1 -1
  572. package/dist/utils/changelog.d.ts.map +1 -1
  573. package/dist/utils/changelog.js.map +1 -1
  574. package/dist/utils/child-process.d.ts.map +1 -1
  575. package/dist/utils/child-process.js.map +1 -1
  576. package/dist/utils/clipboard-image.d.ts.map +1 -1
  577. package/dist/utils/clipboard-image.js.map +1 -1
  578. package/dist/utils/clipboard-native.d.ts.map +1 -1
  579. package/dist/utils/clipboard-native.js.map +1 -1
  580. package/dist/utils/clipboard.d.ts.map +1 -1
  581. package/dist/utils/clipboard.js.map +1 -1
  582. package/dist/utils/deprecation.d.ts.map +1 -1
  583. package/dist/utils/deprecation.js.map +1 -1
  584. package/dist/utils/exif-orientation.d.ts.map +1 -1
  585. package/dist/utils/exif-orientation.js.map +1 -1
  586. package/dist/utils/frontmatter.d.ts.map +1 -1
  587. package/dist/utils/frontmatter.js.map +1 -1
  588. package/dist/utils/fs-watch.d.ts.map +1 -1
  589. package/dist/utils/fs-watch.js.map +1 -1
  590. package/dist/utils/git.d.ts.map +1 -1
  591. package/dist/utils/git.js.map +1 -1
  592. package/dist/utils/html.d.ts.map +1 -1
  593. package/dist/utils/html.js.map +1 -1
  594. package/dist/utils/image-convert.d.ts.map +1 -1
  595. package/dist/utils/image-convert.js.map +1 -1
  596. package/dist/utils/image-resize-core.d.ts.map +1 -1
  597. package/dist/utils/image-resize-core.js.map +1 -1
  598. package/dist/utils/image-resize-worker.d.ts.map +1 -1
  599. package/dist/utils/image-resize-worker.js.map +1 -1
  600. package/dist/utils/image-resize.d.ts.map +1 -1
  601. package/dist/utils/image-resize.js.map +1 -1
  602. package/dist/utils/json.d.ts.map +1 -1
  603. package/dist/utils/json.js.map +1 -1
  604. package/dist/utils/mime.d.ts.map +1 -1
  605. package/dist/utils/mime.js.map +1 -1
  606. package/dist/utils/open-browser.d.ts.map +1 -1
  607. package/dist/utils/open-browser.js.map +1 -1
  608. package/dist/utils/paths.d.ts.map +1 -1
  609. package/dist/utils/paths.js.map +1 -1
  610. package/dist/utils/photon.d.ts.map +1 -1
  611. package/dist/utils/photon.js.map +1 -1
  612. package/dist/utils/pi-user-agent.d.ts.map +1 -1
  613. package/dist/utils/pi-user-agent.js.map +1 -1
  614. package/dist/utils/shell.d.ts.map +1 -1
  615. package/dist/utils/shell.js.map +1 -1
  616. package/dist/utils/sleep.d.ts.map +1 -1
  617. package/dist/utils/sleep.js.map +1 -1
  618. package/dist/utils/syntax-highlight.d.ts.map +1 -1
  619. package/dist/utils/syntax-highlight.js.map +1 -1
  620. package/dist/utils/tools-manager.d.ts.map +1 -1
  621. package/dist/utils/tools-manager.js.map +1 -1
  622. package/dist/utils/version-check.d.ts.map +1 -1
  623. package/dist/utils/version-check.js.map +1 -1
  624. package/dist/utils/windows-self-update.d.ts.map +1 -1
  625. package/dist/utils/windows-self-update.js.map +1 -1
  626. package/docs/extensions.md +1 -1
  627. package/docs/packages.md +3 -1
  628. package/docs/prompt-templates.md +1 -1
  629. package/docs/settings.md +10 -0
  630. package/docs/skills.md +3 -3
  631. package/docs/themes.md +1 -1
  632. package/docs/usage.md +15 -3
  633. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  634. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  635. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  636. package/examples/extensions/gondolin/package-lock.json +2 -2
  637. package/examples/extensions/gondolin/package.json +1 -1
  638. package/examples/extensions/minimal-mode.ts +6 -6
  639. package/examples/extensions/sandbox/package-lock.json +2 -2
  640. package/examples/extensions/sandbox/package.json +1 -1
  641. package/examples/extensions/with-deps/package-lock.json +2 -2
  642. package/examples/extensions/with-deps/package.json +1 -1
  643. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.d.ts.map +1 -1
  644. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js.map +1 -1
  645. package/node_modules/@earendil-works/pi-agent-core/dist/agent.d.ts +7 -0
  646. package/node_modules/@earendil-works/pi-agent-core/dist/agent.d.ts.map +1 -1
  647. package/node_modules/@earendil-works/pi-agent-core/dist/agent.js +2 -27
  648. package/node_modules/@earendil-works/pi-agent-core/dist/agent.js.map +1 -1
  649. package/node_modules/@earendil-works/pi-agent-core/dist/harness/agent-harness.d.ts.map +1 -1
  650. package/node_modules/@earendil-works/pi-agent-core/dist/harness/agent-harness.js +7 -20
  651. package/node_modules/@earendil-works/pi-agent-core/dist/harness/agent-harness.js.map +1 -1
  652. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/branch-summarization.d.ts.map +1 -1
  653. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/branch-summarization.js.map +1 -1
  654. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/compaction.d.ts.map +1 -1
  655. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/compaction.js.map +1 -1
  656. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/utils.d.ts.map +1 -1
  657. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/utils.js.map +1 -1
  658. package/node_modules/@earendil-works/pi-agent-core/dist/harness/env/nodejs.d.ts.map +1 -1
  659. package/node_modules/@earendil-works/pi-agent-core/dist/harness/env/nodejs.js +0 -3
  660. package/node_modules/@earendil-works/pi-agent-core/dist/harness/env/nodejs.js.map +1 -1
  661. package/node_modules/@earendil-works/pi-agent-core/dist/harness/messages.d.ts.map +1 -1
  662. package/node_modules/@earendil-works/pi-agent-core/dist/harness/messages.js.map +1 -1
  663. package/node_modules/@earendil-works/pi-agent-core/dist/harness/prompt-templates.d.ts.map +1 -1
  664. package/node_modules/@earendil-works/pi-agent-core/dist/harness/prompt-templates.js.map +1 -1
  665. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl-repo.d.ts.map +1 -1
  666. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl-repo.js +0 -3
  667. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl-repo.js.map +1 -1
  668. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl-storage.d.ts.map +1 -1
  669. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl-storage.js +0 -7
  670. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl-storage.js.map +1 -1
  671. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/memory-repo.d.ts.map +1 -1
  672. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/memory-repo.js +3 -1
  673. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/memory-repo.js.map +1 -1
  674. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/memory-storage.d.ts.map +1 -1
  675. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/memory-storage.js +0 -5
  676. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/memory-storage.js.map +1 -1
  677. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo-utils.d.ts.map +1 -1
  678. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo-utils.js.map +1 -1
  679. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/session.d.ts.map +1 -1
  680. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/session.js +0 -1
  681. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/session.js.map +1 -1
  682. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/uuid.d.ts.map +1 -1
  683. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/uuid.js.map +1 -1
  684. package/node_modules/@earendil-works/pi-agent-core/dist/harness/skills.d.ts.map +1 -1
  685. package/node_modules/@earendil-works/pi-agent-core/dist/harness/skills.js.map +1 -1
  686. package/node_modules/@earendil-works/pi-agent-core/dist/harness/system-prompt.d.ts.map +1 -1
  687. package/node_modules/@earendil-works/pi-agent-core/dist/harness/system-prompt.js.map +1 -1
  688. package/node_modules/@earendil-works/pi-agent-core/dist/harness/types.d.ts.map +1 -1
  689. package/node_modules/@earendil-works/pi-agent-core/dist/harness/types.js +0 -16
  690. package/node_modules/@earendil-works/pi-agent-core/dist/harness/types.js.map +1 -1
  691. package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/shell-output.d.ts.map +1 -1
  692. package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/shell-output.js.map +1 -1
  693. package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/truncate.d.ts.map +1 -1
  694. package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/truncate.js.map +1 -1
  695. package/node_modules/@earendil-works/pi-agent-core/dist/index.d.ts.map +1 -1
  696. package/node_modules/@earendil-works/pi-agent-core/dist/node.d.ts.map +1 -1
  697. package/node_modules/@earendil-works/pi-agent-core/dist/proxy.d.ts.map +1 -1
  698. package/node_modules/@earendil-works/pi-agent-core/dist/proxy.js.map +1 -1
  699. package/node_modules/@earendil-works/pi-agent-core/dist/types.d.ts.map +1 -1
  700. package/node_modules/@earendil-works/pi-agent-core/package.json +6 -6
  701. package/node_modules/@earendil-works/pi-ai/dist/api-registry.d.ts.map +1 -1
  702. package/node_modules/@earendil-works/pi-ai/dist/api-registry.js.map +1 -1
  703. package/node_modules/@earendil-works/pi-ai/dist/bedrock-provider.d.ts.map +1 -1
  704. package/node_modules/@earendil-works/pi-ai/dist/cli.d.ts.map +1 -1
  705. package/node_modules/@earendil-works/pi-ai/dist/cli.js.map +1 -1
  706. package/node_modules/@earendil-works/pi-ai/dist/env-api-keys.d.ts.map +1 -1
  707. package/node_modules/@earendil-works/pi-ai/dist/env-api-keys.js.map +1 -1
  708. package/node_modules/@earendil-works/pi-ai/dist/image-models.d.ts.map +1 -1
  709. package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.d.ts +30 -0
  710. package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.d.ts.map +1 -1
  711. package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.js +30 -0
  712. package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.js.map +1 -1
  713. package/node_modules/@earendil-works/pi-ai/dist/image-models.js.map +1 -1
  714. package/node_modules/@earendil-works/pi-ai/dist/images-api-registry.d.ts.map +1 -1
  715. package/node_modules/@earendil-works/pi-ai/dist/images-api-registry.js.map +1 -1
  716. package/node_modules/@earendil-works/pi-ai/dist/images.d.ts.map +1 -1
  717. package/node_modules/@earendil-works/pi-ai/dist/images.js.map +1 -1
  718. package/node_modules/@earendil-works/pi-ai/dist/index.d.ts.map +1 -1
  719. package/node_modules/@earendil-works/pi-ai/dist/models.d.ts.map +1 -1
  720. package/node_modules/@earendil-works/pi-ai/dist/models.generated.d.ts +174 -29
  721. package/node_modules/@earendil-works/pi-ai/dist/models.generated.d.ts.map +1 -1
  722. package/node_modules/@earendil-works/pi-ai/dist/models.generated.js +178 -54
  723. package/node_modules/@earendil-works/pi-ai/dist/models.generated.js.map +1 -1
  724. package/node_modules/@earendil-works/pi-ai/dist/models.js.map +1 -1
  725. package/node_modules/@earendil-works/pi-ai/dist/oauth.d.ts.map +1 -1
  726. package/node_modules/@earendil-works/pi-ai/dist/providers/amazon-bedrock.d.ts.map +1 -1
  727. package/node_modules/@earendil-works/pi-ai/dist/providers/amazon-bedrock.js.map +1 -1
  728. package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.d.ts.map +1 -1
  729. package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.js.map +1 -1
  730. package/node_modules/@earendil-works/pi-ai/dist/providers/azure-openai-responses.d.ts.map +1 -1
  731. package/node_modules/@earendil-works/pi-ai/dist/providers/azure-openai-responses.js.map +1 -1
  732. package/node_modules/@earendil-works/pi-ai/dist/providers/cloudflare.d.ts.map +1 -1
  733. package/node_modules/@earendil-works/pi-ai/dist/providers/cloudflare.js.map +1 -1
  734. package/node_modules/@earendil-works/pi-ai/dist/providers/faux.d.ts.map +1 -1
  735. package/node_modules/@earendil-works/pi-ai/dist/providers/faux.js.map +1 -1
  736. package/node_modules/@earendil-works/pi-ai/dist/providers/github-copilot-headers.d.ts.map +1 -1
  737. package/node_modules/@earendil-works/pi-ai/dist/providers/github-copilot-headers.js.map +1 -1
  738. package/node_modules/@earendil-works/pi-ai/dist/providers/google-shared.d.ts.map +1 -1
  739. package/node_modules/@earendil-works/pi-ai/dist/providers/google-shared.js.map +1 -1
  740. package/node_modules/@earendil-works/pi-ai/dist/providers/google-vertex.d.ts.map +1 -1
  741. package/node_modules/@earendil-works/pi-ai/dist/providers/google-vertex.js.map +1 -1
  742. package/node_modules/@earendil-works/pi-ai/dist/providers/google.d.ts.map +1 -1
  743. package/node_modules/@earendil-works/pi-ai/dist/providers/google.js.map +1 -1
  744. package/node_modules/@earendil-works/pi-ai/dist/providers/images/openrouter.d.ts.map +1 -1
  745. package/node_modules/@earendil-works/pi-ai/dist/providers/images/openrouter.js.map +1 -1
  746. package/node_modules/@earendil-works/pi-ai/dist/providers/images/register-builtins.d.ts.map +1 -1
  747. package/node_modules/@earendil-works/pi-ai/dist/providers/images/register-builtins.js.map +1 -1
  748. package/node_modules/@earendil-works/pi-ai/dist/providers/mistral.d.ts.map +1 -1
  749. package/node_modules/@earendil-works/pi-ai/dist/providers/mistral.js +3 -3
  750. package/node_modules/@earendil-works/pi-ai/dist/providers/mistral.js.map +1 -1
  751. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex-responses.d.ts.map +1 -1
  752. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex-responses.js +0 -7
  753. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex-responses.js.map +1 -1
  754. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-completions.d.ts.map +1 -1
  755. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-completions.js +1 -1
  756. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-completions.js.map +1 -1
  757. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-prompt-cache.d.ts.map +1 -1
  758. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-prompt-cache.js.map +1 -1
  759. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-responses-shared.d.ts.map +1 -1
  760. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-responses-shared.js.map +1 -1
  761. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-responses.d.ts.map +1 -1
  762. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-responses.js.map +1 -1
  763. package/node_modules/@earendil-works/pi-ai/dist/providers/register-builtins.d.ts.map +1 -1
  764. package/node_modules/@earendil-works/pi-ai/dist/providers/register-builtins.js.map +1 -1
  765. package/node_modules/@earendil-works/pi-ai/dist/providers/simple-options.d.ts.map +1 -1
  766. package/node_modules/@earendil-works/pi-ai/dist/providers/simple-options.js.map +1 -1
  767. package/node_modules/@earendil-works/pi-ai/dist/providers/transform-messages.d.ts.map +1 -1
  768. package/node_modules/@earendil-works/pi-ai/dist/providers/transform-messages.js.map +1 -1
  769. package/node_modules/@earendil-works/pi-ai/dist/session-resources.d.ts.map +1 -1
  770. package/node_modules/@earendil-works/pi-ai/dist/session-resources.js.map +1 -1
  771. package/node_modules/@earendil-works/pi-ai/dist/stream.d.ts.map +1 -1
  772. package/node_modules/@earendil-works/pi-ai/dist/stream.js.map +1 -1
  773. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/context-transformer.d.ts.map +1 -1
  774. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/context-transformer.js.map +1 -1
  775. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/index.d.ts.map +1 -1
  776. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/index.js.map +1 -1
  777. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/gemma4.d.ts.map +1 -1
  778. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/gemma4.js +10 -8
  779. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/gemma4.js.map +1 -1
  780. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/hermes.d.ts.map +1 -1
  781. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/hermes.js.map +1 -1
  782. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/json-mix.d.ts.map +1 -1
  783. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/json-mix.js.map +1 -1
  784. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/morph-xml.d.ts.map +1 -1
  785. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/morph-xml.js.map +1 -1
  786. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/xml-tool-tag-scanner.d.ts.map +1 -1
  787. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/xml-tool-tag-scanner.js.map +1 -1
  788. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/yaml-xml.d.ts.map +1 -1
  789. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/yaml-xml.js.map +1 -1
  790. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/stream-wrapper.d.ts.map +1 -1
  791. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/stream-wrapper.js.map +1 -1
  792. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/types.d.ts.map +1 -1
  793. package/node_modules/@earendil-works/pi-ai/dist/types.d.ts +1 -1
  794. package/node_modules/@earendil-works/pi-ai/dist/types.d.ts.map +1 -1
  795. package/node_modules/@earendil-works/pi-ai/dist/types.js.map +1 -1
  796. package/node_modules/@earendil-works/pi-ai/dist/utils/abort-signals.d.ts.map +1 -1
  797. package/node_modules/@earendil-works/pi-ai/dist/utils/abort-signals.js.map +1 -1
  798. package/node_modules/@earendil-works/pi-ai/dist/utils/diagnostics.d.ts.map +1 -1
  799. package/node_modules/@earendil-works/pi-ai/dist/utils/diagnostics.js.map +1 -1
  800. package/node_modules/@earendil-works/pi-ai/dist/utils/event-stream.d.ts.map +1 -1
  801. package/node_modules/@earendil-works/pi-ai/dist/utils/event-stream.js +3 -7
  802. package/node_modules/@earendil-works/pi-ai/dist/utils/event-stream.js.map +1 -1
  803. package/node_modules/@earendil-works/pi-ai/dist/utils/hash.d.ts.map +1 -1
  804. package/node_modules/@earendil-works/pi-ai/dist/utils/hash.js.map +1 -1
  805. package/node_modules/@earendil-works/pi-ai/dist/utils/headers.d.ts.map +1 -1
  806. package/node_modules/@earendil-works/pi-ai/dist/utils/headers.js.map +1 -1
  807. package/node_modules/@earendil-works/pi-ai/dist/utils/json-parse.d.ts.map +1 -1
  808. package/node_modules/@earendil-works/pi-ai/dist/utils/json-parse.js.map +1 -1
  809. package/node_modules/@earendil-works/pi-ai/dist/utils/node-http-proxy.d.ts.map +1 -1
  810. package/node_modules/@earendil-works/pi-ai/dist/utils/node-http-proxy.js.map +1 -1
  811. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/anthropic.d.ts.map +1 -1
  812. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/anthropic.js.map +1 -1
  813. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/device-code.d.ts.map +1 -1
  814. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/device-code.js.map +1 -1
  815. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/github-copilot.d.ts.map +1 -1
  816. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/github-copilot.js.map +1 -1
  817. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/index.d.ts.map +1 -1
  818. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/index.js.map +1 -1
  819. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/oauth-page.d.ts.map +1 -1
  820. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/oauth-page.js.map +1 -1
  821. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/openai-codex.d.ts.map +1 -1
  822. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/openai-codex.js.map +1 -1
  823. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/pkce.d.ts.map +1 -1
  824. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/pkce.js.map +1 -1
  825. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/types.d.ts.map +1 -1
  826. package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.d.ts.map +1 -1
  827. package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.js.map +1 -1
  828. package/node_modules/@earendil-works/pi-ai/dist/utils/sanitize-unicode.d.ts.map +1 -1
  829. package/node_modules/@earendil-works/pi-ai/dist/utils/sanitize-unicode.js.map +1 -1
  830. package/node_modules/@earendil-works/pi-ai/dist/utils/tool-pair-repair.d.ts.map +1 -1
  831. package/node_modules/@earendil-works/pi-ai/dist/utils/tool-pair-repair.js.map +1 -1
  832. package/node_modules/@earendil-works/pi-ai/dist/utils/typebox-helpers.d.ts.map +1 -1
  833. package/node_modules/@earendil-works/pi-ai/dist/utils/typebox-helpers.js.map +1 -1
  834. package/node_modules/@earendil-works/pi-ai/dist/utils/validation.d.ts.map +1 -1
  835. package/node_modules/@earendil-works/pi-ai/dist/utils/validation.js.map +1 -1
  836. package/node_modules/@earendil-works/pi-ai/package.json +5 -5
  837. package/node_modules/@earendil-works/pi-tui/dist/autocomplete.d.ts +1 -1
  838. package/node_modules/@earendil-works/pi-tui/dist/autocomplete.d.ts.map +1 -1
  839. package/node_modules/@earendil-works/pi-tui/dist/autocomplete.js +0 -3
  840. package/node_modules/@earendil-works/pi-tui/dist/autocomplete.js.map +1 -1
  841. package/node_modules/@earendil-works/pi-tui/dist/components/box.d.ts.map +1 -1
  842. package/node_modules/@earendil-works/pi-tui/dist/components/box.js +1 -6
  843. package/node_modules/@earendil-works/pi-tui/dist/components/box.js.map +1 -1
  844. package/node_modules/@earendil-works/pi-tui/dist/components/cancellable-loader.d.ts.map +1 -1
  845. package/node_modules/@earendil-works/pi-tui/dist/components/cancellable-loader.js +4 -3
  846. package/node_modules/@earendil-works/pi-tui/dist/components/cancellable-loader.js.map +1 -1
  847. package/node_modules/@earendil-works/pi-tui/dist/components/editor.d.ts.map +1 -1
  848. package/node_modules/@earendil-works/pi-tui/dist/components/editor.js +43 -54
  849. package/node_modules/@earendil-works/pi-tui/dist/components/editor.js.map +1 -1
  850. package/node_modules/@earendil-works/pi-tui/dist/components/image.d.ts.map +1 -1
  851. package/node_modules/@earendil-works/pi-tui/dist/components/image.js +0 -8
  852. package/node_modules/@earendil-works/pi-tui/dist/components/image.js.map +1 -1
  853. package/node_modules/@earendil-works/pi-tui/dist/components/input.d.ts.map +1 -1
  854. package/node_modules/@earendil-works/pi-tui/dist/components/input.js +14 -14
  855. package/node_modules/@earendil-works/pi-tui/dist/components/input.js.map +1 -1
  856. package/node_modules/@earendil-works/pi-tui/dist/components/loader.d.ts.map +1 -1
  857. package/node_modules/@earendil-works/pi-tui/dist/components/loader.js +11 -13
  858. package/node_modules/@earendil-works/pi-tui/dist/components/loader.js.map +1 -1
  859. package/node_modules/@earendil-works/pi-tui/dist/components/markdown.d.ts.map +1 -1
  860. package/node_modules/@earendil-works/pi-tui/dist/components/markdown.js +0 -11
  861. package/node_modules/@earendil-works/pi-tui/dist/components/markdown.js.map +1 -1
  862. package/node_modules/@earendil-works/pi-tui/dist/components/select-list.d.ts.map +1 -1
  863. package/node_modules/@earendil-works/pi-tui/dist/components/select-list.js +4 -9
  864. package/node_modules/@earendil-works/pi-tui/dist/components/select-list.js.map +1 -1
  865. package/node_modules/@earendil-works/pi-tui/dist/components/settings-list.d.ts.map +1 -1
  866. package/node_modules/@earendil-works/pi-tui/dist/components/settings-list.js +4 -12
  867. package/node_modules/@earendil-works/pi-tui/dist/components/settings-list.js.map +1 -1
  868. package/node_modules/@earendil-works/pi-tui/dist/components/spacer.d.ts.map +1 -1
  869. package/node_modules/@earendil-works/pi-tui/dist/components/spacer.js +0 -1
  870. package/node_modules/@earendil-works/pi-tui/dist/components/spacer.js.map +1 -1
  871. package/node_modules/@earendil-works/pi-tui/dist/components/text.d.ts.map +1 -1
  872. package/node_modules/@earendil-works/pi-tui/dist/components/text.js +0 -8
  873. package/node_modules/@earendil-works/pi-tui/dist/components/text.js.map +1 -1
  874. package/node_modules/@earendil-works/pi-tui/dist/components/truncated-text.d.ts.map +1 -1
  875. package/node_modules/@earendil-works/pi-tui/dist/components/truncated-text.js +0 -3
  876. package/node_modules/@earendil-works/pi-tui/dist/components/truncated-text.js.map +1 -1
  877. package/node_modules/@earendil-works/pi-tui/dist/editor-component.d.ts.map +1 -1
  878. package/node_modules/@earendil-works/pi-tui/dist/fuzzy.d.ts.map +1 -1
  879. package/node_modules/@earendil-works/pi-tui/dist/fuzzy.js.map +1 -1
  880. package/node_modules/@earendil-works/pi-tui/dist/index.d.ts.map +1 -1
  881. package/node_modules/@earendil-works/pi-tui/dist/keybindings.d.ts.map +1 -1
  882. package/node_modules/@earendil-works/pi-tui/dist/keybindings.js +2 -4
  883. package/node_modules/@earendil-works/pi-tui/dist/keybindings.js.map +1 -1
  884. package/node_modules/@earendil-works/pi-tui/dist/keys.d.ts.map +1 -1
  885. package/node_modules/@earendil-works/pi-tui/dist/keys.js.map +1 -1
  886. package/node_modules/@earendil-works/pi-tui/dist/kill-ring.d.ts.map +1 -1
  887. package/node_modules/@earendil-works/pi-tui/dist/kill-ring.js +3 -1
  888. package/node_modules/@earendil-works/pi-tui/dist/kill-ring.js.map +1 -1
  889. package/node_modules/@earendil-works/pi-tui/dist/native-modifiers.d.ts.map +1 -1
  890. package/node_modules/@earendil-works/pi-tui/dist/native-modifiers.js.map +1 -1
  891. package/node_modules/@earendil-works/pi-tui/dist/slash-command-autocomplete.d.ts.map +1 -1
  892. package/node_modules/@earendil-works/pi-tui/dist/slash-command-autocomplete.js.map +1 -1
  893. package/node_modules/@earendil-works/pi-tui/dist/stdin-buffer.d.ts.map +1 -1
  894. package/node_modules/@earendil-works/pi-tui/dist/stdin-buffer.js +4 -6
  895. package/node_modules/@earendil-works/pi-tui/dist/stdin-buffer.js.map +1 -1
  896. package/node_modules/@earendil-works/pi-tui/dist/terminal-image.d.ts.map +1 -1
  897. package/node_modules/@earendil-works/pi-tui/dist/terminal-image.js.map +1 -1
  898. package/node_modules/@earendil-works/pi-tui/dist/terminal.d.ts.map +1 -1
  899. package/node_modules/@earendil-works/pi-tui/dist/terminal.js +24 -29
  900. package/node_modules/@earendil-works/pi-tui/dist/terminal.js.map +1 -1
  901. package/node_modules/@earendil-works/pi-tui/dist/tui.d.ts.map +1 -1
  902. package/node_modules/@earendil-works/pi-tui/dist/tui.js +25 -27
  903. package/node_modules/@earendil-works/pi-tui/dist/tui.js.map +1 -1
  904. package/node_modules/@earendil-works/pi-tui/dist/undo-stack.d.ts.map +1 -1
  905. package/node_modules/@earendil-works/pi-tui/dist/undo-stack.js +3 -1
  906. package/node_modules/@earendil-works/pi-tui/dist/undo-stack.js.map +1 -1
  907. package/node_modules/@earendil-works/pi-tui/dist/utils.d.ts.map +1 -1
  908. package/node_modules/@earendil-works/pi-tui/dist/utils.js +14 -12
  909. package/node_modules/@earendil-works/pi-tui/dist/utils.js.map +1 -1
  910. package/node_modules/@earendil-works/pi-tui/dist/word-navigation.d.ts.map +1 -1
  911. package/node_modules/@earendil-works/pi-tui/dist/word-navigation.js.map +1 -1
  912. package/node_modules/@earendil-works/pi-tui/package.json +1 -1
  913. package/node_modules/@types/node/README.md +3 -3
  914. package/node_modules/@types/node/assert/strict.d.ts +3 -55
  915. package/node_modules/@types/node/assert.d.ts +49 -177
  916. package/node_modules/@types/node/async_hooks.d.ts +151 -43
  917. package/node_modules/@types/node/buffer.buffer.d.ts +2 -8
  918. package/node_modules/@types/node/buffer.d.ts +43 -212
  919. package/node_modules/@types/node/child_process.d.ts +23 -133
  920. package/node_modules/@types/node/cluster.d.ts +238 -384
  921. package/node_modules/@types/node/compatibility/iterators.d.ts +1 -0
  922. package/node_modules/@types/node/console.d.ts +45 -404
  923. package/node_modules/@types/node/constants.d.ts +3 -10
  924. package/node_modules/@types/node/crypto.d.ts +640 -1127
  925. package/node_modules/@types/node/dgram.d.ts +14 -77
  926. package/node_modules/@types/node/diagnostics_channel.d.ts +3 -29
  927. package/node_modules/@types/node/dns/promises.d.ts +4 -10
  928. package/node_modules/@types/node/dns.d.ts +130 -177
  929. package/node_modules/@types/node/domain.d.ts +12 -32
  930. package/node_modules/@types/node/events.d.ts +872 -840
  931. package/node_modules/@types/node/fs/promises.d.ts +193 -20
  932. package/node_modules/@types/node/fs.d.ts +754 -435
  933. package/node_modules/@types/node/globals.d.ts +8 -30
  934. package/node_modules/@types/node/globals.typedarray.d.ts +63 -0
  935. package/node_modules/@types/node/http.d.ts +363 -305
  936. package/node_modules/@types/node/http2.d.ts +545 -781
  937. package/node_modules/@types/node/https.d.ts +64 -243
  938. package/node_modules/@types/node/index.d.ts +26 -6
  939. package/node_modules/@types/node/inspector/promises.d.ts +35 -0
  940. package/node_modules/@types/node/inspector.d.ts +68 -57
  941. package/node_modules/@types/node/inspector.generated.d.ts +764 -410
  942. package/node_modules/@types/node/module.d.ts +53 -189
  943. package/node_modules/@types/node/net.d.ts +101 -207
  944. package/node_modules/@types/node/os.d.ts +11 -19
  945. package/node_modules/@types/node/package.json +13 -3
  946. package/node_modules/@types/node/path/posix.d.ts +8 -0
  947. package/node_modules/@types/node/path/win32.d.ts +8 -0
  948. package/node_modules/@types/node/path.d.ts +119 -141
  949. package/node_modules/@types/node/perf_hooks.d.ts +317 -673
  950. package/node_modules/@types/node/process.d.ts +277 -157
  951. package/node_modules/@types/node/punycode.d.ts +3 -31
  952. package/node_modules/@types/node/querystring.d.ts +3 -16
  953. package/node_modules/@types/node/quic.d.ts +897 -0
  954. package/node_modules/@types/node/readline/promises.d.ts +3 -6
  955. package/node_modules/@types/node/readline.d.ts +65 -152
  956. package/node_modules/@types/node/repl.d.ts +101 -109
  957. package/node_modules/@types/node/sea.d.ts +9 -115
  958. package/node_modules/@types/node/sqlite.d.ts +415 -68
  959. package/node_modules/@types/node/stream/consumers.d.ts +91 -15
  960. package/node_modules/@types/node/stream/iter.d.ts +301 -0
  961. package/node_modules/@types/node/stream/promises.d.ts +136 -15
  962. package/node_modules/@types/node/stream/web.d.ts +179 -501
  963. package/node_modules/@types/node/stream.d.ts +577 -490
  964. package/node_modules/@types/node/string_decoder.d.ts +3 -43
  965. package/node_modules/@types/node/test/reporters.d.ts +59 -0
  966. package/node_modules/@types/node/test.d.ts +402 -286
  967. package/node_modules/@types/node/timers/promises.d.ts +3 -18
  968. package/node_modules/@types/node/timers.d.ts +3 -141
  969. package/node_modules/@types/node/tls.d.ts +115 -241
  970. package/node_modules/@types/node/trace_events.d.ts +3 -97
  971. package/node_modules/@types/node/ts5.6/buffer.buffer.d.ts +2 -8
  972. package/node_modules/@types/node/ts5.6/compatibility/float16array.d.ts +71 -0
  973. package/node_modules/@types/node/ts5.6/globals.typedarray.d.ts +2 -0
  974. package/node_modules/@types/node/ts5.6/index.d.ts +28 -6
  975. package/node_modules/@types/node/ts5.7/compatibility/float16array.d.ts +72 -0
  976. package/node_modules/@types/node/ts5.7/index.d.ts +119 -0
  977. package/node_modules/@types/node/tty.d.ts +57 -40
  978. package/node_modules/@types/node/url.d.ts +156 -584
  979. package/node_modules/@types/node/util/types.d.ts +558 -0
  980. package/node_modules/@types/node/util.d.ts +167 -1096
  981. package/node_modules/@types/node/v8.d.ts +75 -15
  982. package/node_modules/@types/node/vm.d.ts +334 -198
  983. package/node_modules/@types/node/wasi.d.ts +24 -74
  984. package/node_modules/@types/node/web-globals/abortcontroller.d.ts +27 -2
  985. package/node_modules/@types/node/web-globals/blob.d.ts +23 -0
  986. package/node_modules/@types/node/web-globals/console.d.ts +9 -0
  987. package/node_modules/@types/node/web-globals/crypto.d.ts +39 -0
  988. package/node_modules/@types/node/web-globals/encoding.d.ts +11 -0
  989. package/node_modules/@types/node/web-globals/events.d.ts +9 -0
  990. package/node_modules/@types/node/web-globals/fetch.d.ts +14 -0
  991. package/node_modules/@types/node/web-globals/importmeta.d.ts +13 -0
  992. package/node_modules/@types/node/web-globals/messaging.d.ts +23 -0
  993. package/node_modules/@types/node/web-globals/navigator.d.ts +3 -0
  994. package/node_modules/@types/node/web-globals/performance.d.ts +45 -0
  995. package/node_modules/@types/node/web-globals/streams.d.ts +115 -0
  996. package/node_modules/@types/node/web-globals/timers.d.ts +44 -0
  997. package/node_modules/@types/node/web-globals/url.d.ts +24 -0
  998. package/node_modules/@types/node/worker_threads.d.ts +280 -393
  999. package/node_modules/@types/node/zlib/iter.d.ts +131 -0
  1000. package/node_modules/@types/node/zlib.d.ts +7 -165
  1001. package/node_modules/undici-types/agent.d.ts +13 -12
  1002. package/node_modules/undici-types/api.d.ts +26 -26
  1003. package/node_modules/undici-types/balanced-pool.d.ts +13 -12
  1004. package/node_modules/undici-types/cache-interceptor.d.ts +179 -0
  1005. package/node_modules/undici-types/client-stats.d.ts +15 -0
  1006. package/node_modules/undici-types/client.d.ts +34 -19
  1007. package/node_modules/undici-types/connector.d.ts +4 -2
  1008. package/node_modules/undici-types/cookies.d.ts +2 -0
  1009. package/node_modules/undici-types/diagnostics-channel.d.ts +18 -10
  1010. package/node_modules/undici-types/dispatcher.d.ts +127 -104
  1011. package/node_modules/undici-types/env-http-proxy-agent.d.ts +4 -3
  1012. package/node_modules/undici-types/errors.d.ts +82 -54
  1013. package/node_modules/undici-types/eventsource.d.ts +9 -4
  1014. package/node_modules/undici-types/fetch.d.ts +22 -20
  1015. package/node_modules/undici-types/formdata.d.ts +7 -7
  1016. package/node_modules/undici-types/global-dispatcher.d.ts +4 -4
  1017. package/node_modules/undici-types/global-origin.d.ts +5 -5
  1018. package/node_modules/undici-types/h2c-client.d.ts +73 -0
  1019. package/node_modules/undici-types/handlers.d.ts +8 -8
  1020. package/node_modules/undici-types/header.d.ts +157 -1
  1021. package/node_modules/undici-types/index.d.ts +67 -47
  1022. package/node_modules/undici-types/interceptors.d.ts +71 -8
  1023. package/node_modules/undici-types/mock-agent.d.ts +36 -18
  1024. package/node_modules/undici-types/mock-call-history.d.ts +111 -0
  1025. package/node_modules/undici-types/mock-client.d.ts +6 -4
  1026. package/node_modules/undici-types/mock-errors.d.ts +3 -3
  1027. package/node_modules/undici-types/mock-interceptor.d.ts +21 -20
  1028. package/node_modules/undici-types/mock-pool.d.ts +6 -4
  1029. package/node_modules/undici-types/package.json +1 -1
  1030. package/node_modules/undici-types/patch.d.ts +0 -4
  1031. package/node_modules/undici-types/pool-stats.d.ts +8 -8
  1032. package/node_modules/undici-types/pool.d.ts +15 -13
  1033. package/node_modules/undici-types/proxy-agent.d.ts +5 -4
  1034. package/node_modules/undici-types/readable.d.ts +19 -16
  1035. package/node_modules/undici-types/retry-agent.d.ts +1 -1
  1036. package/node_modules/undici-types/retry-handler.d.ts +19 -10
  1037. package/node_modules/undici-types/round-robin-pool.d.ts +41 -0
  1038. package/node_modules/undici-types/snapshot-agent.d.ts +109 -0
  1039. package/node_modules/undici-types/socks5-proxy-agent.d.ts +25 -0
  1040. package/node_modules/undici-types/util.d.ts +3 -3
  1041. package/node_modules/undici-types/utility.d.ts +7 -0
  1042. package/node_modules/undici-types/webidl.d.ts +148 -29
  1043. package/node_modules/undici-types/websocket.d.ts +48 -10
  1044. package/npm-shrinkwrap.json +21 -21
  1045. package/package.json +13 -8
  1046. package/node_modules/@types/node/compatibility/disposable.d.ts +0 -14
  1047. package/node_modules/@types/node/compatibility/index.d.ts +0 -9
  1048. package/node_modules/@types/node/compatibility/indexable.d.ts +0 -20
  1049. package/node_modules/undici-types/file.d.ts +0 -39
  1050. package/node_modules/undici-types/filereader.d.ts +0 -54
@@ -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":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAGxB,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEzF,SAAS,YAAY,CAAC,IAAY;IACjC,OAAO,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;AACpD,CAAC;AAED,SAAS,oBAAoB,CAAC,WAAmB;IAChD,MAAM,qBAAqB,GAAG,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;IAChG,MAAM,KAAK,GAAG,qBAAqB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAChD,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACrE,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChC,OAAO,EAAE,CAAC;IACX,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CACzB,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACnC,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC;IAC/B,CAAC,CAAC,CACF,CAAC;IACF,OAAO,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,qBAAqB,CAAC;AACtG,CAAC;AAED,SAAS,gBAAgB,CAAC,WAAmB;IAC5C,MAAM,UAAU,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;IACrD,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpC,OAAO,EAAE,CAAC;IACX,CAAC;IAED,IAAI,CAAC;QACJ,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAY,CAAC;QACjD,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YACrB,OAAO,EAAE,CAAC;QACX,CAAC;QACD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACzD,OAAO,IAAI,CAAC;QACb,CAAC;QACD,OAAO,MAAiC,CAAC;IAC1C,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,IAAI,CAAC;IACb,CAAC;AACF,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAY,EAAE,YAAoB,EAAE,QAAgB;IAC9E,MAAM,cAAc,GAAG,IAAI,MAAM,CAAC,SAAS,YAAY,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAC/E,cAAc,CAAC,SAAS,GAAG,YAAY,CAAC;IACxC,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxC,OAAO,KAAK,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AACxE,CAAC;AAED,SAAS,gCAAgC,CAAC,OAAuB;IAChE,OAAO,OAAO,EAAE,0BAA0B,KAAK,IAAI,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,8BAA8B,CAAC,KAAa;IAC3D,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,EAAE,CAAC;IACX,CAAC;IAED,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CACnC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACpB,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,UAAU,EAAE,IAAI,CAAC,UAAU;KAC3B,CAAC,CAAC,CACH,CAAC;IAEF,OAAO;;;;;SAKC,aAAa;;;;;;;;;;;eAWP,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,IAAY,EAAE,IAA6B;IAChF,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;IAChD,OAAO,IAAI,IAAI,MAAM,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,OAAO,IAAI,GAAG,CAAC;AAC5E,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,QAAgB,EAAE,WAAmB,EAAE,OAAsB;IACtG,MAAM,WAAW,GAAG,OAAO;SACzB,MAAM,CAAC,CAAC,KAAK,EAAwB,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC;SAC9D,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;SAC1B,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,OAAO;QACN,iBAAiB;QACjB,cAAc,QAAQ,EAAE;QACxB,YAAY;QACZ,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC;QACrD,kBAAkB;KAClB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACd,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,IAAY,EAAE,KAAa,EAAE,OAAuB;IAC7F,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7C,OAAO,EAAE,CAAC;IACX,CAAC;IAED,MAAM,eAAe,GAAqB,EAAE,CAAC;IAC7C,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjD,IAAI,MAAM,GAAG,CAAC,CAAC;IAEf,OAAO,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAC7B,MAAM,UAAU,GAAG,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC,CAAC;QACzE,IAAI,CAAC,UAAU,EAAE,CAAC;YACjB,MAAM;QACP,CAAC;QAED,MAAM,aAAa,GAAG,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC;QAChD,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC;YAC5B,eAAe,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;YAC/D,MAAM,GAAG,aAAa,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC;YAC/C,SAAS;QACV,CAAC;QAED,MAAM,YAAY,GAAG,aAAa,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC;QAC3D,MAAM,aAAa,GAAG,iBAAiB,CAAC,IAAI,EAAE,YAAY,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;QAC7E,IAAI,aAAa,KAAK,CAAC,CAAC,EAAE,CAAC;YAC1B,MAAM;QACP,CAAC;QAED,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;QAC/D,MAAM,eAAe,GAAG,IAAI,MAAM,CAAC,SAAS,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACvG,MAAM,eAAe,GAAG,eAAe,EAAE,KAAK,CAAC;QAC/C,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;YACnC,MAAM,GAAG,aAAa,CAAC;YACvB,SAAS;QACV,CAAC;QAED,MAAM,WAAW,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC;QAC7D,MAAM,eAAe,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;QACtD,IAAI,eAAe,KAAK,IAAI,EAAE,CAAC;YAC9B,eAAe,CAAC,IAAI,CAAC;gBACpB,IAAI,EAAE,UAAU,CAAC,IAAI;gBACrB,SAAS,EAAE,eAAe;aAC1B,CAAC,CAAC;QACJ,CAAC;aAAM,CAAC;YACP,OAAO,EAAE,OAAO,EAAE,CAAC,8DAA8D,EAAE;gBAClF,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,aAAa,CAAC;aAClD,CAAC,CAAC;QACJ,CAAC;QAED,MAAM,GAAG,aAAa,CAAC;IACxB,CAAC;IAED,OAAO,eAAe,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,KAAa,EAAE,OAAuB;IAC/E,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjD,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,gBAAgB,GAKT,IAAI,CAAC;IAChB,IAAI,iBAAiB,GAAG,CAAC,CAAC;IAE1B,SAAS,YAAY,CAAC,MAA2B,EAAE,WAAmB;QACrE,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACvB,OAAO;QACR,CAAC;QACD,MAAM,eAAe,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;QACtD,IAAI,eAAe,KAAK,IAAI,EAAE,CAAC;YAC9B,OAAO;QACR,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;QACjD,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,gBAAgB,CAAC,qBAAqB,EAAE,CAAC;YAC9E,OAAO;QACR,CAAC;QAED,IAAI,gBAAgB,CAAC,qBAAqB,KAAK,IAAI,EAAE,CAAC;YACrD,MAAM,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,gBAAgB;gBACtB,KAAK,EAAE,gBAAgB,CAAC,KAAK;gBAC7B,IAAI,EAAE,gBAAgB,CAAC,IAAI;gBAC3B,EAAE,EAAE,gBAAgB,CAAC,EAAE;aACvB,CAAC,CAAC;QACJ,CAAC;QAED,gBAAgB,CAAC,qBAAqB,GAAG,QAAQ,CAAC;QAClD,MAAM,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,gBAAgB;YACtB,KAAK,EAAE,gBAAgB,CAAC,KAAK;YAC7B,cAAc,EAAE,QAAQ;SACxB,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,eAAe,GAAG,IAAI,MAAM,CAAC,SAAS,YAAY,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACxF,MAAM,eAAe,GAAG,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACrD,IAAI,CAAC,eAAe,IAAI,eAAe,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;oBAC7D,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;oBAC7B,MAAM;gBACP,CAAC;gBAED,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,eAAe,CAAC,KAAK,CAAC,CAAC;gBAC3D,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,CAAC,IAAI,IAAI,WAAW,GAAG,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzF,MAAM,eAAe,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;gBACtD,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,KAAK,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;gBACzE,IAAI,eAAe,KAAK,IAAI,EAAE,CAAC;oBAC9B,OAAO,EAAE,OAAO,EAAE,CAAC,8DAA8D,EAAE;wBAClF,QAAQ,EAAE,gBAAgB;qBAC1B,CAAC,CAAC;oBACH,IAAI,gCAAgC,CAAC,OAAO,CAAC,EAAE,CAAC;wBAC/C,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,YAAY,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;gBAClC,IAAI,gBAAgB,CAAC,qBAAqB,KAAK,IAAI,EAAE,CAAC;oBACrD,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;gBACJ,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;gBACD,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,EAAE,GAAG,iBAAiB,iBAAiB,EAAE,CAAC;gBAChD,MAAM,KAAK,GAAG,iBAAiB,CAAC;gBAChC,iBAAiB,IAAI,CAAC,CAAC;gBACvB,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;gBAC1E,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;gBACvF,SAAS;YACV,CAAC;YAED,gBAAgB,GAAG;gBAClB,EAAE,EAAE,iBAAiB,iBAAiB,EAAE;gBACxC,KAAK,EAAE,iBAAiB;gBACxB,IAAI,EAAE,UAAU,CAAC,IAAI;gBACrB,qBAAqB,EAAE,IAAI;aAC3B,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;YACD,MAAM,IAAI,SAAS,CAAC;YACpB,OAAO,aAAa,EAAE,CAAC;QACxB,CAAC;QACD,MAAM;YACL,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;YAC/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;YACD,IAAI,gBAAgB,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC3C,MAAM,eAAe,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;gBACjD,IAAI,eAAe,KAAK,IAAI,EAAE,CAAC;oBAC9B,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;oBAC7B,IAAI,gBAAgB,CAAC,qBAAqB,KAAK,IAAI,EAAE,CAAC;wBACrD,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;oBACJ,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,CAAC;oBACP,MAAM,WAAW,GAAG,IAAI,gBAAgB,CAAC,IAAI,IAAI,MAAM,EAAE,CAAC;oBAC1D,OAAO,EAAE,OAAO,EAAE,CAAC,4DAA4D,EAAE;wBAChF,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;gBACD,MAAM,GAAG,EAAE,CAAC;gBACZ,gBAAgB,GAAG,IAAI,CAAC;YACzB,CAAC;YACD,OAAO,MAAM,CAAC;QACf,CAAC;KACD,CAAC;AACH,CAAC","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 +1 @@
1
- {"version":3,"file":"stream-wrapper.d.ts","sourceRoot":"","sources":["../../src/tool-call-middleware/stream-wrapper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEX,2BAA2B,EAE3B,IAAI,EAGJ,MAAM,aAAa,CAAC;AAGrB,OAAO,KAAK,EAAqB,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAwPtE,wBAAgB,gCAAgC,CAC/C,WAAW,EAAE,2BAA2B,EACxC,QAAQ,EAAE,gBAAgB,EAC1B,KAAK,EAAE,IAAI,EAAE,GACX,2BAA2B,CAqL7B","sourcesContent":["import type {\n\tAssistantMessage,\n\tAssistantMessageEventStream,\n\tThinkingContent,\n\tTool,\n\tToolCall,\n\tUsage,\n} from \"../types.ts\";\nimport { AssistantMessageEventStream as AssistantMessageEventStreamImpl } from \"../utils/event-stream.ts\";\nimport { parseStreamingJson } from \"../utils/json-parse.ts\";\nimport type { StreamParserEvent, ToolCallProtocol } from \"./types.ts\";\n\ntype PartialToolCall = ToolCall & {\n\tpartialJson: string;\n};\n\nfunction isPartialToolCall(block: AssistantMessage[\"content\"][number] | undefined): block is PartialToolCall {\n\treturn block?.type === \"toolCall\" && typeof (block as PartialToolCall).partialJson === \"string\";\n}\n\nfunction cloneUsage(usage: Usage): Usage {\n\treturn {\n\t\tinput: usage.input,\n\t\toutput: usage.output,\n\t\tcacheRead: usage.cacheRead,\n\t\tcacheWrite: usage.cacheWrite,\n\t\ttotalTokens: usage.totalTokens,\n\t\tcost: {\n\t\t\tinput: usage.cost.input,\n\t\t\toutput: usage.cost.output,\n\t\t\tcacheRead: usage.cost.cacheRead,\n\t\t\tcacheWrite: usage.cost.cacheWrite,\n\t\t\ttotal: usage.cost.total,\n\t\t},\n\t};\n}\n\nfunction createOuterMessage(message: AssistantMessage): AssistantMessage {\n\treturn {\n\t\trole: \"assistant\",\n\t\tapi: message.api,\n\t\tprovider: message.provider,\n\t\tmodel: message.model,\n\t\tresponseId: message.responseId,\n\t\tcontent: [],\n\t\tusage: cloneUsage(message.usage),\n\t\tstopReason: message.stopReason,\n\t\terrorMessage: message.errorMessage,\n\t\ttimestamp: message.timestamp,\n\t};\n}\n\nfunction syncOuterMetadata(target: AssistantMessage, source: AssistantMessage): void {\n\ttarget.api = source.api;\n\ttarget.provider = source.provider;\n\ttarget.model = source.model;\n\ttarget.responseId = source.responseId;\n\ttarget.usage = cloneUsage(source.usage);\n\ttarget.stopReason = source.stopReason;\n\ttarget.errorMessage = source.errorMessage;\n\ttarget.timestamp = source.timestamp;\n}\n\nfunction pushParserEvent(\n\tparserEvent: StreamParserEvent,\n\touterStream: AssistantMessageEventStream,\n\touterMessage: AssistantMessage,\n\ttextBlockIndexByInnerIndex: Map<number, number | null>,\n\ttoolCallIndexByParserIndex: Map<number, number>,\n\tcurrentInnerTextIndex: number | null,\n): void {\n\tswitch (parserEvent.type) {\n\t\tcase \"text\": {\n\t\t\tif (currentInnerTextIndex == null) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet textBlockIndex = textBlockIndexByInnerIndex.get(currentInnerTextIndex) ?? null;\n\t\t\tif (textBlockIndex == null) {\n\t\t\t\ttextBlockIndex = outerMessage.content.length;\n\t\t\t\touterMessage.content.push({ type: \"text\", text: parserEvent.text });\n\t\t\t\ttextBlockIndexByInnerIndex.set(currentInnerTextIndex, textBlockIndex);\n\t\t\t} else {\n\t\t\t\tconst block = outerMessage.content[textBlockIndex];\n\t\t\t\tif (block?.type !== \"text\") {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tblock.text += parserEvent.text;\n\t\t\t}\n\n\t\t\touterStream.push({\n\t\t\t\ttype: \"text_delta\",\n\t\t\t\tcontentIndex: textBlockIndex,\n\t\t\t\tdelta: parserEvent.text,\n\t\t\t\tpartial: outerMessage,\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tcase \"toolcall_start\": {\n\t\t\tconst contentIndex = outerMessage.content.length;\n\t\t\tconst toolCall: PartialToolCall = {\n\t\t\t\ttype: \"toolCall\",\n\t\t\t\tid: parserEvent.id,\n\t\t\t\tname: parserEvent.name,\n\t\t\t\targuments: {},\n\t\t\t\tpartialJson: \"\",\n\t\t\t};\n\t\t\touterMessage.content.push(toolCall);\n\t\t\ttoolCallIndexByParserIndex.set(parserEvent.index, contentIndex);\n\t\t\tif (currentInnerTextIndex != null) {\n\t\t\t\ttextBlockIndexByInnerIndex.set(currentInnerTextIndex, null);\n\t\t\t}\n\t\t\touterStream.push({\n\t\t\t\ttype: \"toolcall_start\",\n\t\t\t\tcontentIndex,\n\t\t\t\tpartial: outerMessage,\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tcase \"toolcall_delta\": {\n\t\t\tconst contentIndex = toolCallIndexByParserIndex.get(parserEvent.index);\n\t\t\tif (contentIndex == null) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst block = outerMessage.content[contentIndex];\n\t\t\tif (!isPartialToolCall(block)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tblock.partialJson += parserEvent.argumentsDelta;\n\t\t\tblock.arguments = parseStreamingJson<Record<string, unknown>>(block.partialJson);\n\t\t\touterStream.push({\n\t\t\t\ttype: \"toolcall_delta\",\n\t\t\t\tcontentIndex,\n\t\t\t\tdelta: parserEvent.argumentsDelta,\n\t\t\t\tpartial: outerMessage,\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tcase \"toolcall_end\": {\n\t\t\tconst contentIndex = toolCallIndexByParserIndex.get(parserEvent.index);\n\t\t\tif (contentIndex == null) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst block = outerMessage.content[contentIndex];\n\t\t\tif (block?.type !== \"toolCall\") {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst finalToolCall: ToolCall = {\n\t\t\t\ttype: \"toolCall\",\n\t\t\t\tid: parserEvent.id,\n\t\t\t\tname: parserEvent.name,\n\t\t\t\targuments: parserEvent.arguments,\n\t\t\t};\n\t\t\touterMessage.content[contentIndex] = finalToolCall;\n\t\t\touterStream.push({\n\t\t\t\ttype: \"toolcall_end\",\n\t\t\t\tcontentIndex,\n\t\t\t\ttoolCall: finalToolCall,\n\t\t\t\tpartial: outerMessage,\n\t\t\t});\n\t\t}\n\t}\n}\n\nfunction processParserEvents(\n\tparserEvents: StreamParserEvent[],\n\touterStream: AssistantMessageEventStream,\n\touterMessage: AssistantMessage,\n\ttextBlockIndexByInnerIndex: Map<number, number | null>,\n\ttoolCallIndexByParserIndex: Map<number, number>,\n\tcurrentInnerTextIndex: number | null,\n): boolean {\n\tlet emittedToolCall = false;\n\tfor (const parserEvent of parserEvents) {\n\t\tif (\n\t\t\tparserEvent.type === \"toolcall_start\" ||\n\t\t\tparserEvent.type === \"toolcall_delta\" ||\n\t\t\tparserEvent.type === \"toolcall_end\"\n\t\t) {\n\t\t\temittedToolCall = true;\n\t\t}\n\n\t\tpushParserEvent(\n\t\t\tparserEvent,\n\t\t\touterStream,\n\t\t\touterMessage,\n\t\t\ttextBlockIndexByInnerIndex,\n\t\t\ttoolCallIndexByParserIndex,\n\t\t\tcurrentInnerTextIndex,\n\t\t);\n\t}\n\treturn emittedToolCall;\n}\n\nfunction finalizeMessage(\n\touterMessage: AssistantMessage,\n\tdoneMessage: AssistantMessage,\n\tsawToolCall: boolean,\n): AssistantMessage {\n\tconst finalMessage: AssistantMessage = {\n\t\t...createOuterMessage(doneMessage),\n\t\tcontent: outerMessage.content,\n\t};\n\n\tif (sawToolCall && finalMessage.stopReason === \"stop\") {\n\t\tfinalMessage.stopReason = \"toolUse\";\n\t}\n\n\treturn finalMessage;\n}\n\nfunction hasCompletedToolCallContent(message: AssistantMessage): boolean {\n\treturn message.content.some((block) => block.type === \"toolCall\");\n}\n\nfunction finalizePendingTextBlock(\n\touterStream: AssistantMessageEventStream,\n\touterMessage: AssistantMessage,\n\tparser: ReturnType<ToolCallProtocol[\"createStreamParser\"]>,\n\ttextBlockIndexByInnerIndex: Map<number, number | null>,\n\ttoolCallIndexByParserIndex: Map<number, number>,\n\tcurrentInnerTextIndex: number | null,\n\tsawToolCall: boolean,\n): { currentInnerTextIndex: null; sawToolCall: boolean } {\n\tconst nextSawToolCall =\n\t\tprocessParserEvents(\n\t\t\tparser.finish(),\n\t\t\touterStream,\n\t\t\touterMessage,\n\t\t\ttextBlockIndexByInnerIndex,\n\t\t\ttoolCallIndexByParserIndex,\n\t\t\tcurrentInnerTextIndex,\n\t\t) || sawToolCall;\n\n\tconst outerContentIndex =\n\t\tcurrentInnerTextIndex == null ? null : (textBlockIndexByInnerIndex.get(currentInnerTextIndex) ?? null);\n\tif (outerContentIndex != null) {\n\t\tconst outerBlock = outerMessage.content[outerContentIndex];\n\t\tif (outerBlock?.type === \"text\") {\n\t\t\touterStream.push({\n\t\t\t\ttype: \"text_end\",\n\t\t\t\tcontentIndex: outerContentIndex,\n\t\t\t\tcontent: outerBlock.text,\n\t\t\t\tpartial: outerMessage,\n\t\t\t});\n\t\t}\n\t}\n\n\treturn {\n\t\tcurrentInnerTextIndex: null,\n\t\tsawToolCall: nextSawToolCall,\n\t};\n}\n\nexport function wrapStreamWithToolCallMiddleware(\n\tinnerStream: AssistantMessageEventStream,\n\tprotocol: ToolCallProtocol,\n\ttools: Tool[],\n): AssistantMessageEventStream {\n\tconst outerStream = new AssistantMessageEventStreamImpl();\n\tconst parser = protocol.createStreamParser(tools);\n\n\tvoid (async (): Promise<void> => {\n\t\tlet outerMessage: AssistantMessage | null = null;\n\t\tlet currentInnerTextIndex: number | null = null;\n\t\tlet sawToolCall = false;\n\t\tconst textBlockIndexByInnerIndex = new Map<number, number | null>();\n\t\tconst thinkingBlockIndexByInnerIndex = new Map<number, number>();\n\t\tconst toolCallIndexByParserIndex = new Map<number, number>();\n\n\t\ttry {\n\t\t\tfor await (const event of innerStream) {\n\t\t\t\tswitch (event.type) {\n\t\t\t\t\tcase \"start\": {\n\t\t\t\t\t\touterMessage = createOuterMessage(event.partial);\n\t\t\t\t\t\touterStream.push({ type: \"start\", partial: outerMessage });\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"text_start\": {\n\t\t\t\t\t\tif (outerMessage) {\n\t\t\t\t\t\t\tsyncOuterMetadata(outerMessage, event.partial);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcurrentInnerTextIndex = event.contentIndex;\n\t\t\t\t\t\ttextBlockIndexByInnerIndex.set(event.contentIndex, null);\n\t\t\t\t\t\tif (outerMessage) {\n\t\t\t\t\t\t\touterStream.push({ ...event, partial: outerMessage });\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"text_delta\": {\n\t\t\t\t\t\tif (!outerMessage) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsyncOuterMetadata(outerMessage, event.partial);\n\t\t\t\t\t\tsawToolCall =\n\t\t\t\t\t\t\tprocessParserEvents(\n\t\t\t\t\t\t\t\tparser.feed(event.delta),\n\t\t\t\t\t\t\t\touterStream,\n\t\t\t\t\t\t\t\touterMessage,\n\t\t\t\t\t\t\t\ttextBlockIndexByInnerIndex,\n\t\t\t\t\t\t\t\ttoolCallIndexByParserIndex,\n\t\t\t\t\t\t\t\tcurrentInnerTextIndex,\n\t\t\t\t\t\t\t) || sawToolCall;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"text_end\": {\n\t\t\t\t\t\tif (!outerMessage) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsyncOuterMetadata(outerMessage, event.partial);\n\t\t\t\t\t\t({ currentInnerTextIndex, sawToolCall } = finalizePendingTextBlock(\n\t\t\t\t\t\t\touterStream,\n\t\t\t\t\t\t\touterMessage,\n\t\t\t\t\t\t\tparser,\n\t\t\t\t\t\t\ttextBlockIndexByInnerIndex,\n\t\t\t\t\t\t\ttoolCallIndexByParserIndex,\n\t\t\t\t\t\t\tcurrentInnerTextIndex,\n\t\t\t\t\t\t\tsawToolCall,\n\t\t\t\t\t\t));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"thinking_start\": {\n\t\t\t\t\t\tif (!outerMessage) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsyncOuterMetadata(outerMessage, event.partial);\n\t\t\t\t\t\tconst contentIndex = outerMessage.content.length;\n\t\t\t\t\t\tconst thinkingBlock: ThinkingContent = { type: \"thinking\", thinking: \"\" };\n\t\t\t\t\t\touterMessage.content.push(thinkingBlock);\n\t\t\t\t\t\tthinkingBlockIndexByInnerIndex.set(event.contentIndex, contentIndex);\n\t\t\t\t\t\touterStream.push({ type: \"thinking_start\", contentIndex, partial: outerMessage });\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"thinking_delta\": {\n\t\t\t\t\t\tif (!outerMessage) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsyncOuterMetadata(outerMessage, event.partial);\n\t\t\t\t\t\tconst contentIndex = thinkingBlockIndexByInnerIndex.get(event.contentIndex);\n\t\t\t\t\t\tif (contentIndex == null) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst block = outerMessage.content[contentIndex];\n\t\t\t\t\t\tif (block?.type !== \"thinking\") {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tblock.thinking += event.delta;\n\t\t\t\t\t\touterStream.push({\n\t\t\t\t\t\t\ttype: \"thinking_delta\",\n\t\t\t\t\t\t\tcontentIndex,\n\t\t\t\t\t\t\tdelta: event.delta,\n\t\t\t\t\t\t\tpartial: outerMessage,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"thinking_end\": {\n\t\t\t\t\t\tif (!outerMessage) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsyncOuterMetadata(outerMessage, event.partial);\n\t\t\t\t\t\tconst contentIndex = thinkingBlockIndexByInnerIndex.get(event.contentIndex);\n\t\t\t\t\t\tif (contentIndex == null) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst block = outerMessage.content[contentIndex];\n\t\t\t\t\t\tif (block?.type !== \"thinking\") {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tblock.thinking = event.content;\n\t\t\t\t\t\touterStream.push({\n\t\t\t\t\t\t\ttype: \"thinking_end\",\n\t\t\t\t\t\t\tcontentIndex,\n\t\t\t\t\t\t\tcontent: event.content,\n\t\t\t\t\t\t\tpartial: outerMessage,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"done\": {\n\t\t\t\t\t\tif (!outerMessage) {\n\t\t\t\t\t\t\touterMessage = createOuterMessage(event.message);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst finalMessage = finalizeMessage(outerMessage, event.message, sawToolCall);\n\t\t\t\t\t\tconst finalReason = sawToolCall && event.reason === \"stop\" ? \"toolUse\" : event.reason;\n\t\t\t\t\t\touterStream.push({ type: \"done\", reason: finalReason, message: finalMessage });\n\t\t\t\t\t\touterStream.end();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"error\": {\n\t\t\t\t\t\tif (!outerMessage) {\n\t\t\t\t\t\t\touterStream.push(event);\n\t\t\t\t\t\t\touterStream.end(event.error);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tsyncOuterMetadata(outerMessage, event.error);\n\t\t\t\t\t\tif (currentInnerTextIndex != null) {\n\t\t\t\t\t\t\t({ currentInnerTextIndex, sawToolCall } = finalizePendingTextBlock(\n\t\t\t\t\t\t\t\touterStream,\n\t\t\t\t\t\t\t\touterMessage,\n\t\t\t\t\t\t\t\tparser,\n\t\t\t\t\t\t\t\ttextBlockIndexByInnerIndex,\n\t\t\t\t\t\t\t\ttoolCallIndexByParserIndex,\n\t\t\t\t\t\t\t\tcurrentInnerTextIndex,\n\t\t\t\t\t\t\t\tsawToolCall,\n\t\t\t\t\t\t\t));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst finalErrorMessage = finalizeMessage(outerMessage, event.error, sawToolCall);\n\t\t\t\t\t\tif (sawToolCall && hasCompletedToolCallContent(finalErrorMessage)) {\n\t\t\t\t\t\t\tconst recoveredMessage: AssistantMessage = {\n\t\t\t\t\t\t\t\t...finalErrorMessage,\n\t\t\t\t\t\t\t\tstopReason: \"toolUse\",\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\touterStream.push({ type: \"done\", reason: \"toolUse\", message: recoveredMessage });\n\t\t\t\t\t\t\touterStream.end(recoveredMessage);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\touterStream.push({ type: \"error\", reason: event.reason, error: finalErrorMessage });\n\t\t\t\t\t\touterStream.end(finalErrorMessage);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst finalInnerMessage = await innerStream.result();\n\t\t\tif (!outerMessage) {\n\t\t\t\touterMessage = createOuterMessage(finalInnerMessage);\n\t\t\t}\n\t\t\touterStream.end(finalizeMessage(outerMessage, finalInnerMessage, sawToolCall));\n\t\t} catch (error) {\n\t\t\tconst fallbackMessage = outerMessage ?? createOuterMessage(await innerStream.result());\n\t\t\tfallbackMessage.stopReason = \"error\";\n\t\t\tfallbackMessage.errorMessage = error instanceof Error ? error.message : JSON.stringify(error);\n\t\t\touterStream.push({ type: \"error\", reason: \"error\", error: fallbackMessage });\n\t\t\touterStream.end();\n\t\t}\n\t})();\n\n\treturn outerStream;\n}\n"]}
1
+ {"version":3,"file":"stream-wrapper.d.ts","sourceRoot":"","sources":["../../src/tool-call-middleware/stream-wrapper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEX,2BAA2B,EAE3B,IAAI,EAGJ,MAAM,aAAa,CAAC;AAGrB,OAAO,KAAK,EAAqB,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAwPtE,wBAAgB,gCAAgC,CAC/C,WAAW,EAAE,2BAA2B,EACxC,QAAQ,EAAE,gBAAgB,EAC1B,KAAK,EAAE,IAAI,EAAE,GACX,2BAA2B,CAqL7B"}
@@ -1 +1 @@
1
- {"version":3,"file":"stream-wrapper.js","sourceRoot":"","sources":["../../src/tool-call-middleware/stream-wrapper.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n\tAssistantMessage,\n\tAssistantMessageEventStream,\n\tThinkingContent,\n\tTool,\n\tToolCall,\n\tUsage,\n} from \"../types.ts\";\nimport { AssistantMessageEventStream as AssistantMessageEventStreamImpl } from \"../utils/event-stream.ts\";\nimport { parseStreamingJson } from \"../utils/json-parse.ts\";\nimport type { StreamParserEvent, ToolCallProtocol } from \"./types.ts\";\n\ntype PartialToolCall = ToolCall & {\n\tpartialJson: string;\n};\n\nfunction isPartialToolCall(block: AssistantMessage[\"content\"][number] | undefined): block is PartialToolCall {\n\treturn block?.type === \"toolCall\" && typeof (block as PartialToolCall).partialJson === \"string\";\n}\n\nfunction cloneUsage(usage: Usage): Usage {\n\treturn {\n\t\tinput: usage.input,\n\t\toutput: usage.output,\n\t\tcacheRead: usage.cacheRead,\n\t\tcacheWrite: usage.cacheWrite,\n\t\ttotalTokens: usage.totalTokens,\n\t\tcost: {\n\t\t\tinput: usage.cost.input,\n\t\t\toutput: usage.cost.output,\n\t\t\tcacheRead: usage.cost.cacheRead,\n\t\t\tcacheWrite: usage.cost.cacheWrite,\n\t\t\ttotal: usage.cost.total,\n\t\t},\n\t};\n}\n\nfunction createOuterMessage(message: AssistantMessage): AssistantMessage {\n\treturn {\n\t\trole: \"assistant\",\n\t\tapi: message.api,\n\t\tprovider: message.provider,\n\t\tmodel: message.model,\n\t\tresponseId: message.responseId,\n\t\tcontent: [],\n\t\tusage: cloneUsage(message.usage),\n\t\tstopReason: message.stopReason,\n\t\terrorMessage: message.errorMessage,\n\t\ttimestamp: message.timestamp,\n\t};\n}\n\nfunction syncOuterMetadata(target: AssistantMessage, source: AssistantMessage): void {\n\ttarget.api = source.api;\n\ttarget.provider = source.provider;\n\ttarget.model = source.model;\n\ttarget.responseId = source.responseId;\n\ttarget.usage = cloneUsage(source.usage);\n\ttarget.stopReason = source.stopReason;\n\ttarget.errorMessage = source.errorMessage;\n\ttarget.timestamp = source.timestamp;\n}\n\nfunction pushParserEvent(\n\tparserEvent: StreamParserEvent,\n\touterStream: AssistantMessageEventStream,\n\touterMessage: AssistantMessage,\n\ttextBlockIndexByInnerIndex: Map<number, number | null>,\n\ttoolCallIndexByParserIndex: Map<number, number>,\n\tcurrentInnerTextIndex: number | null,\n): void {\n\tswitch (parserEvent.type) {\n\t\tcase \"text\": {\n\t\t\tif (currentInnerTextIndex == null) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet textBlockIndex = textBlockIndexByInnerIndex.get(currentInnerTextIndex) ?? null;\n\t\t\tif (textBlockIndex == null) {\n\t\t\t\ttextBlockIndex = outerMessage.content.length;\n\t\t\t\touterMessage.content.push({ type: \"text\", text: parserEvent.text });\n\t\t\t\ttextBlockIndexByInnerIndex.set(currentInnerTextIndex, textBlockIndex);\n\t\t\t} else {\n\t\t\t\tconst block = outerMessage.content[textBlockIndex];\n\t\t\t\tif (block?.type !== \"text\") {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tblock.text += parserEvent.text;\n\t\t\t}\n\n\t\t\touterStream.push({\n\t\t\t\ttype: \"text_delta\",\n\t\t\t\tcontentIndex: textBlockIndex,\n\t\t\t\tdelta: parserEvent.text,\n\t\t\t\tpartial: outerMessage,\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tcase \"toolcall_start\": {\n\t\t\tconst contentIndex = outerMessage.content.length;\n\t\t\tconst toolCall: PartialToolCall = {\n\t\t\t\ttype: \"toolCall\",\n\t\t\t\tid: parserEvent.id,\n\t\t\t\tname: parserEvent.name,\n\t\t\t\targuments: {},\n\t\t\t\tpartialJson: \"\",\n\t\t\t};\n\t\t\touterMessage.content.push(toolCall);\n\t\t\ttoolCallIndexByParserIndex.set(parserEvent.index, contentIndex);\n\t\t\tif (currentInnerTextIndex != null) {\n\t\t\t\ttextBlockIndexByInnerIndex.set(currentInnerTextIndex, null);\n\t\t\t}\n\t\t\touterStream.push({\n\t\t\t\ttype: \"toolcall_start\",\n\t\t\t\tcontentIndex,\n\t\t\t\tpartial: outerMessage,\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tcase \"toolcall_delta\": {\n\t\t\tconst contentIndex = toolCallIndexByParserIndex.get(parserEvent.index);\n\t\t\tif (contentIndex == null) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst block = outerMessage.content[contentIndex];\n\t\t\tif (!isPartialToolCall(block)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tblock.partialJson += parserEvent.argumentsDelta;\n\t\t\tblock.arguments = parseStreamingJson<Record<string, unknown>>(block.partialJson);\n\t\t\touterStream.push({\n\t\t\t\ttype: \"toolcall_delta\",\n\t\t\t\tcontentIndex,\n\t\t\t\tdelta: parserEvent.argumentsDelta,\n\t\t\t\tpartial: outerMessage,\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tcase \"toolcall_end\": {\n\t\t\tconst contentIndex = toolCallIndexByParserIndex.get(parserEvent.index);\n\t\t\tif (contentIndex == null) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst block = outerMessage.content[contentIndex];\n\t\t\tif (block?.type !== \"toolCall\") {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst finalToolCall: ToolCall = {\n\t\t\t\ttype: \"toolCall\",\n\t\t\t\tid: parserEvent.id,\n\t\t\t\tname: parserEvent.name,\n\t\t\t\targuments: parserEvent.arguments,\n\t\t\t};\n\t\t\touterMessage.content[contentIndex] = finalToolCall;\n\t\t\touterStream.push({\n\t\t\t\ttype: \"toolcall_end\",\n\t\t\t\tcontentIndex,\n\t\t\t\ttoolCall: finalToolCall,\n\t\t\t\tpartial: outerMessage,\n\t\t\t});\n\t\t}\n\t}\n}\n\nfunction processParserEvents(\n\tparserEvents: StreamParserEvent[],\n\touterStream: AssistantMessageEventStream,\n\touterMessage: AssistantMessage,\n\ttextBlockIndexByInnerIndex: Map<number, number | null>,\n\ttoolCallIndexByParserIndex: Map<number, number>,\n\tcurrentInnerTextIndex: number | null,\n): boolean {\n\tlet emittedToolCall = false;\n\tfor (const parserEvent of parserEvents) {\n\t\tif (\n\t\t\tparserEvent.type === \"toolcall_start\" ||\n\t\t\tparserEvent.type === \"toolcall_delta\" ||\n\t\t\tparserEvent.type === \"toolcall_end\"\n\t\t) {\n\t\t\temittedToolCall = true;\n\t\t}\n\n\t\tpushParserEvent(\n\t\t\tparserEvent,\n\t\t\touterStream,\n\t\t\touterMessage,\n\t\t\ttextBlockIndexByInnerIndex,\n\t\t\ttoolCallIndexByParserIndex,\n\t\t\tcurrentInnerTextIndex,\n\t\t);\n\t}\n\treturn emittedToolCall;\n}\n\nfunction finalizeMessage(\n\touterMessage: AssistantMessage,\n\tdoneMessage: AssistantMessage,\n\tsawToolCall: boolean,\n): AssistantMessage {\n\tconst finalMessage: AssistantMessage = {\n\t\t...createOuterMessage(doneMessage),\n\t\tcontent: outerMessage.content,\n\t};\n\n\tif (sawToolCall && finalMessage.stopReason === \"stop\") {\n\t\tfinalMessage.stopReason = \"toolUse\";\n\t}\n\n\treturn finalMessage;\n}\n\nfunction hasCompletedToolCallContent(message: AssistantMessage): boolean {\n\treturn message.content.some((block) => block.type === \"toolCall\");\n}\n\nfunction finalizePendingTextBlock(\n\touterStream: AssistantMessageEventStream,\n\touterMessage: AssistantMessage,\n\tparser: ReturnType<ToolCallProtocol[\"createStreamParser\"]>,\n\ttextBlockIndexByInnerIndex: Map<number, number | null>,\n\ttoolCallIndexByParserIndex: Map<number, number>,\n\tcurrentInnerTextIndex: number | null,\n\tsawToolCall: boolean,\n): { currentInnerTextIndex: null; sawToolCall: boolean } {\n\tconst nextSawToolCall =\n\t\tprocessParserEvents(\n\t\t\tparser.finish(),\n\t\t\touterStream,\n\t\t\touterMessage,\n\t\t\ttextBlockIndexByInnerIndex,\n\t\t\ttoolCallIndexByParserIndex,\n\t\t\tcurrentInnerTextIndex,\n\t\t) || sawToolCall;\n\n\tconst outerContentIndex =\n\t\tcurrentInnerTextIndex == null ? null : (textBlockIndexByInnerIndex.get(currentInnerTextIndex) ?? null);\n\tif (outerContentIndex != null) {\n\t\tconst outerBlock = outerMessage.content[outerContentIndex];\n\t\tif (outerBlock?.type === \"text\") {\n\t\t\touterStream.push({\n\t\t\t\ttype: \"text_end\",\n\t\t\t\tcontentIndex: outerContentIndex,\n\t\t\t\tcontent: outerBlock.text,\n\t\t\t\tpartial: outerMessage,\n\t\t\t});\n\t\t}\n\t}\n\n\treturn {\n\t\tcurrentInnerTextIndex: null,\n\t\tsawToolCall: nextSawToolCall,\n\t};\n}\n\nexport function wrapStreamWithToolCallMiddleware(\n\tinnerStream: AssistantMessageEventStream,\n\tprotocol: ToolCallProtocol,\n\ttools: Tool[],\n): AssistantMessageEventStream {\n\tconst outerStream = new AssistantMessageEventStreamImpl();\n\tconst parser = protocol.createStreamParser(tools);\n\n\tvoid (async (): Promise<void> => {\n\t\tlet outerMessage: AssistantMessage | null = null;\n\t\tlet currentInnerTextIndex: number | null = null;\n\t\tlet sawToolCall = false;\n\t\tconst textBlockIndexByInnerIndex = new Map<number, number | null>();\n\t\tconst thinkingBlockIndexByInnerIndex = new Map<number, number>();\n\t\tconst toolCallIndexByParserIndex = new Map<number, number>();\n\n\t\ttry {\n\t\t\tfor await (const event of innerStream) {\n\t\t\t\tswitch (event.type) {\n\t\t\t\t\tcase \"start\": {\n\t\t\t\t\t\touterMessage = createOuterMessage(event.partial);\n\t\t\t\t\t\touterStream.push({ type: \"start\", partial: outerMessage });\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"text_start\": {\n\t\t\t\t\t\tif (outerMessage) {\n\t\t\t\t\t\t\tsyncOuterMetadata(outerMessage, event.partial);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcurrentInnerTextIndex = event.contentIndex;\n\t\t\t\t\t\ttextBlockIndexByInnerIndex.set(event.contentIndex, null);\n\t\t\t\t\t\tif (outerMessage) {\n\t\t\t\t\t\t\touterStream.push({ ...event, partial: outerMessage });\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"text_delta\": {\n\t\t\t\t\t\tif (!outerMessage) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsyncOuterMetadata(outerMessage, event.partial);\n\t\t\t\t\t\tsawToolCall =\n\t\t\t\t\t\t\tprocessParserEvents(\n\t\t\t\t\t\t\t\tparser.feed(event.delta),\n\t\t\t\t\t\t\t\touterStream,\n\t\t\t\t\t\t\t\touterMessage,\n\t\t\t\t\t\t\t\ttextBlockIndexByInnerIndex,\n\t\t\t\t\t\t\t\ttoolCallIndexByParserIndex,\n\t\t\t\t\t\t\t\tcurrentInnerTextIndex,\n\t\t\t\t\t\t\t) || sawToolCall;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"text_end\": {\n\t\t\t\t\t\tif (!outerMessage) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsyncOuterMetadata(outerMessage, event.partial);\n\t\t\t\t\t\t({ currentInnerTextIndex, sawToolCall } = finalizePendingTextBlock(\n\t\t\t\t\t\t\touterStream,\n\t\t\t\t\t\t\touterMessage,\n\t\t\t\t\t\t\tparser,\n\t\t\t\t\t\t\ttextBlockIndexByInnerIndex,\n\t\t\t\t\t\t\ttoolCallIndexByParserIndex,\n\t\t\t\t\t\t\tcurrentInnerTextIndex,\n\t\t\t\t\t\t\tsawToolCall,\n\t\t\t\t\t\t));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"thinking_start\": {\n\t\t\t\t\t\tif (!outerMessage) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsyncOuterMetadata(outerMessage, event.partial);\n\t\t\t\t\t\tconst contentIndex = outerMessage.content.length;\n\t\t\t\t\t\tconst thinkingBlock: ThinkingContent = { type: \"thinking\", thinking: \"\" };\n\t\t\t\t\t\touterMessage.content.push(thinkingBlock);\n\t\t\t\t\t\tthinkingBlockIndexByInnerIndex.set(event.contentIndex, contentIndex);\n\t\t\t\t\t\touterStream.push({ type: \"thinking_start\", contentIndex, partial: outerMessage });\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"thinking_delta\": {\n\t\t\t\t\t\tif (!outerMessage) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsyncOuterMetadata(outerMessage, event.partial);\n\t\t\t\t\t\tconst contentIndex = thinkingBlockIndexByInnerIndex.get(event.contentIndex);\n\t\t\t\t\t\tif (contentIndex == null) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst block = outerMessage.content[contentIndex];\n\t\t\t\t\t\tif (block?.type !== \"thinking\") {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tblock.thinking += event.delta;\n\t\t\t\t\t\touterStream.push({\n\t\t\t\t\t\t\ttype: \"thinking_delta\",\n\t\t\t\t\t\t\tcontentIndex,\n\t\t\t\t\t\t\tdelta: event.delta,\n\t\t\t\t\t\t\tpartial: outerMessage,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"thinking_end\": {\n\t\t\t\t\t\tif (!outerMessage) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsyncOuterMetadata(outerMessage, event.partial);\n\t\t\t\t\t\tconst contentIndex = thinkingBlockIndexByInnerIndex.get(event.contentIndex);\n\t\t\t\t\t\tif (contentIndex == null) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst block = outerMessage.content[contentIndex];\n\t\t\t\t\t\tif (block?.type !== \"thinking\") {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tblock.thinking = event.content;\n\t\t\t\t\t\touterStream.push({\n\t\t\t\t\t\t\ttype: \"thinking_end\",\n\t\t\t\t\t\t\tcontentIndex,\n\t\t\t\t\t\t\tcontent: event.content,\n\t\t\t\t\t\t\tpartial: outerMessage,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"done\": {\n\t\t\t\t\t\tif (!outerMessage) {\n\t\t\t\t\t\t\touterMessage = createOuterMessage(event.message);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst finalMessage = finalizeMessage(outerMessage, event.message, sawToolCall);\n\t\t\t\t\t\tconst finalReason = sawToolCall && event.reason === \"stop\" ? \"toolUse\" : event.reason;\n\t\t\t\t\t\touterStream.push({ type: \"done\", reason: finalReason, message: finalMessage });\n\t\t\t\t\t\touterStream.end();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"error\": {\n\t\t\t\t\t\tif (!outerMessage) {\n\t\t\t\t\t\t\touterStream.push(event);\n\t\t\t\t\t\t\touterStream.end(event.error);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tsyncOuterMetadata(outerMessage, event.error);\n\t\t\t\t\t\tif (currentInnerTextIndex != null) {\n\t\t\t\t\t\t\t({ currentInnerTextIndex, sawToolCall } = finalizePendingTextBlock(\n\t\t\t\t\t\t\t\touterStream,\n\t\t\t\t\t\t\t\touterMessage,\n\t\t\t\t\t\t\t\tparser,\n\t\t\t\t\t\t\t\ttextBlockIndexByInnerIndex,\n\t\t\t\t\t\t\t\ttoolCallIndexByParserIndex,\n\t\t\t\t\t\t\t\tcurrentInnerTextIndex,\n\t\t\t\t\t\t\t\tsawToolCall,\n\t\t\t\t\t\t\t));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst finalErrorMessage = finalizeMessage(outerMessage, event.error, sawToolCall);\n\t\t\t\t\t\tif (sawToolCall && hasCompletedToolCallContent(finalErrorMessage)) {\n\t\t\t\t\t\t\tconst recoveredMessage: AssistantMessage = {\n\t\t\t\t\t\t\t\t...finalErrorMessage,\n\t\t\t\t\t\t\t\tstopReason: \"toolUse\",\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\touterStream.push({ type: \"done\", reason: \"toolUse\", message: recoveredMessage });\n\t\t\t\t\t\t\touterStream.end(recoveredMessage);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\touterStream.push({ type: \"error\", reason: event.reason, error: finalErrorMessage });\n\t\t\t\t\t\touterStream.end(finalErrorMessage);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst finalInnerMessage = await innerStream.result();\n\t\t\tif (!outerMessage) {\n\t\t\t\touterMessage = createOuterMessage(finalInnerMessage);\n\t\t\t}\n\t\t\touterStream.end(finalizeMessage(outerMessage, finalInnerMessage, sawToolCall));\n\t\t} catch (error) {\n\t\t\tconst fallbackMessage = outerMessage ?? createOuterMessage(await innerStream.result());\n\t\t\tfallbackMessage.stopReason = \"error\";\n\t\t\tfallbackMessage.errorMessage = error instanceof Error ? error.message : JSON.stringify(error);\n\t\t\touterStream.push({ type: \"error\", reason: \"error\", error: fallbackMessage });\n\t\t\touterStream.end();\n\t\t}\n\t})();\n\n\treturn outerStream;\n}\n"]}
1
+ {"version":3,"file":"stream-wrapper.js","sourceRoot":"","sources":["../../src/tool-call-middleware/stream-wrapper.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,2BAA2B,IAAI,+BAA+B,EAAE,MAAM,0BAA0B,CAAC;AAC1G,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAO5D,SAAS,iBAAiB,CAAC,KAAsD;IAChF,OAAO,KAAK,EAAE,IAAI,KAAK,UAAU,IAAI,OAAQ,KAAyB,CAAC,WAAW,KAAK,QAAQ,CAAC;AACjG,CAAC;AAED,SAAS,UAAU,CAAC,KAAY;IAC/B,OAAO;QACN,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,IAAI,EAAE;YACL,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK;YACvB,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM;YACzB,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,SAAS;YAC/B,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,UAAU;YACjC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK;SACvB;KACD,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CAAC,OAAyB;IACpD,OAAO;QACN,IAAI,EAAE,WAAW;QACjB,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,OAAO,EAAE,EAAE;QACX,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC;QAChC,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,SAAS,EAAE,OAAO,CAAC,SAAS;KAC5B,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAwB,EAAE,MAAwB;IAC5E,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;IACxB,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IAClC,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;IAC5B,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;IACtC,MAAM,CAAC,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACxC,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;IACtC,MAAM,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;IAC1C,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;AACrC,CAAC;AAED,SAAS,eAAe,CACvB,WAA8B,EAC9B,WAAwC,EACxC,YAA8B,EAC9B,0BAAsD,EACtD,0BAA+C,EAC/C,qBAAoC;IAEpC,QAAQ,WAAW,CAAC,IAAI,EAAE,CAAC;QAC1B,KAAK,MAAM,EAAE,CAAC;YACb,IAAI,qBAAqB,IAAI,IAAI,EAAE,CAAC;gBACnC,OAAO;YACR,CAAC;YAED,IAAI,cAAc,GAAG,0BAA0B,CAAC,GAAG,CAAC,qBAAqB,CAAC,IAAI,IAAI,CAAC;YACnF,IAAI,cAAc,IAAI,IAAI,EAAE,CAAC;gBAC5B,cAAc,GAAG,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC;gBAC7C,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;gBACpE,0BAA0B,CAAC,GAAG,CAAC,qBAAqB,EAAE,cAAc,CAAC,CAAC;YACvE,CAAC;iBAAM,CAAC;gBACP,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;gBACnD,IAAI,KAAK,EAAE,IAAI,KAAK,MAAM,EAAE,CAAC;oBAC5B,OAAO;gBACR,CAAC;gBACD,KAAK,CAAC,IAAI,IAAI,WAAW,CAAC,IAAI,CAAC;YAChC,CAAC;YAED,WAAW,CAAC,IAAI,CAAC;gBAChB,IAAI,EAAE,YAAY;gBAClB,YAAY,EAAE,cAAc;gBAC5B,KAAK,EAAE,WAAW,CAAC,IAAI;gBACvB,OAAO,EAAE,YAAY;aACrB,CAAC,CAAC;YACH,OAAO;QACR,CAAC;QACD,KAAK,gBAAgB,EAAE,CAAC;YACvB,MAAM,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC;YACjD,MAAM,QAAQ,GAAoB;gBACjC,IAAI,EAAE,UAAU;gBAChB,EAAE,EAAE,WAAW,CAAC,EAAE;gBAClB,IAAI,EAAE,WAAW,CAAC,IAAI;gBACtB,SAAS,EAAE,EAAE;gBACb,WAAW,EAAE,EAAE;aACf,CAAC;YACF,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACpC,0BAA0B,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;YAChE,IAAI,qBAAqB,IAAI,IAAI,EAAE,CAAC;gBACnC,0BAA0B,CAAC,GAAG,CAAC,qBAAqB,EAAE,IAAI,CAAC,CAAC;YAC7D,CAAC;YACD,WAAW,CAAC,IAAI,CAAC;gBAChB,IAAI,EAAE,gBAAgB;gBACtB,YAAY;gBACZ,OAAO,EAAE,YAAY;aACrB,CAAC,CAAC;YACH,OAAO;QACR,CAAC;QACD,KAAK,gBAAgB,EAAE,CAAC;YACvB,MAAM,YAAY,GAAG,0BAA0B,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YACvE,IAAI,YAAY,IAAI,IAAI,EAAE,CAAC;gBAC1B,OAAO;YACR,CAAC;YAED,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;YACjD,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC/B,OAAO;YACR,CAAC;YAED,KAAK,CAAC,WAAW,IAAI,WAAW,CAAC,cAAc,CAAC;YAChD,KAAK,CAAC,SAAS,GAAG,kBAAkB,CAA0B,KAAK,CAAC,WAAW,CAAC,CAAC;YACjF,WAAW,CAAC,IAAI,CAAC;gBAChB,IAAI,EAAE,gBAAgB;gBACtB,YAAY;gBACZ,KAAK,EAAE,WAAW,CAAC,cAAc;gBACjC,OAAO,EAAE,YAAY;aACrB,CAAC,CAAC;YACH,OAAO;QACR,CAAC;QACD,KAAK,cAAc,EAAE,CAAC;YACrB,MAAM,YAAY,GAAG,0BAA0B,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YACvE,IAAI,YAAY,IAAI,IAAI,EAAE,CAAC;gBAC1B,OAAO;YACR,CAAC;YAED,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;YACjD,IAAI,KAAK,EAAE,IAAI,KAAK,UAAU,EAAE,CAAC;gBAChC,OAAO;YACR,CAAC;YAED,MAAM,aAAa,GAAa;gBAC/B,IAAI,EAAE,UAAU;gBAChB,EAAE,EAAE,WAAW,CAAC,EAAE;gBAClB,IAAI,EAAE,WAAW,CAAC,IAAI;gBACtB,SAAS,EAAE,WAAW,CAAC,SAAS;aAChC,CAAC;YACF,YAAY,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,aAAa,CAAC;YACnD,WAAW,CAAC,IAAI,CAAC;gBAChB,IAAI,EAAE,cAAc;gBACpB,YAAY;gBACZ,QAAQ,EAAE,aAAa;gBACvB,OAAO,EAAE,YAAY;aACrB,CAAC,CAAC;QACJ,CAAC;IACF,CAAC;AACF,CAAC;AAED,SAAS,mBAAmB,CAC3B,YAAiC,EACjC,WAAwC,EACxC,YAA8B,EAC9B,0BAAsD,EACtD,0BAA+C,EAC/C,qBAAoC;IAEpC,IAAI,eAAe,GAAG,KAAK,CAAC;IAC5B,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE,CAAC;QACxC,IACC,WAAW,CAAC,IAAI,KAAK,gBAAgB;YACrC,WAAW,CAAC,IAAI,KAAK,gBAAgB;YACrC,WAAW,CAAC,IAAI,KAAK,cAAc,EAClC,CAAC;YACF,eAAe,GAAG,IAAI,CAAC;QACxB,CAAC;QAED,eAAe,CACd,WAAW,EACX,WAAW,EACX,YAAY,EACZ,0BAA0B,EAC1B,0BAA0B,EAC1B,qBAAqB,CACrB,CAAC;IACH,CAAC;IACD,OAAO,eAAe,CAAC;AACxB,CAAC;AAED,SAAS,eAAe,CACvB,YAA8B,EAC9B,WAA6B,EAC7B,WAAoB;IAEpB,MAAM,YAAY,GAAqB;QACtC,GAAG,kBAAkB,CAAC,WAAW,CAAC;QAClC,OAAO,EAAE,YAAY,CAAC,OAAO;KAC7B,CAAC;IAEF,IAAI,WAAW,IAAI,YAAY,CAAC,UAAU,KAAK,MAAM,EAAE,CAAC;QACvD,YAAY,CAAC,UAAU,GAAG,SAAS,CAAC;IACrC,CAAC;IAED,OAAO,YAAY,CAAC;AACrB,CAAC;AAED,SAAS,2BAA2B,CAAC,OAAyB;IAC7D,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;AACnE,CAAC;AAED,SAAS,wBAAwB,CAChC,WAAwC,EACxC,YAA8B,EAC9B,MAA0D,EAC1D,0BAAsD,EACtD,0BAA+C,EAC/C,qBAAoC,EACpC,WAAoB;IAEpB,MAAM,eAAe,GACpB,mBAAmB,CAClB,MAAM,CAAC,MAAM,EAAE,EACf,WAAW,EACX,YAAY,EACZ,0BAA0B,EAC1B,0BAA0B,EAC1B,qBAAqB,CACrB,IAAI,WAAW,CAAC;IAElB,MAAM,iBAAiB,GACtB,qBAAqB,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,0BAA0B,CAAC,GAAG,CAAC,qBAAqB,CAAC,IAAI,IAAI,CAAC,CAAC;IACxG,IAAI,iBAAiB,IAAI,IAAI,EAAE,CAAC;QAC/B,MAAM,UAAU,GAAG,YAAY,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;QAC3D,IAAI,UAAU,EAAE,IAAI,KAAK,MAAM,EAAE,CAAC;YACjC,WAAW,CAAC,IAAI,CAAC;gBAChB,IAAI,EAAE,UAAU;gBAChB,YAAY,EAAE,iBAAiB;gBAC/B,OAAO,EAAE,UAAU,CAAC,IAAI;gBACxB,OAAO,EAAE,YAAY;aACrB,CAAC,CAAC;QACJ,CAAC;IACF,CAAC;IAED,OAAO;QACN,qBAAqB,EAAE,IAAI;QAC3B,WAAW,EAAE,eAAe;KAC5B,CAAC;AACH,CAAC;AAED,MAAM,UAAU,gCAAgC,CAC/C,WAAwC,EACxC,QAA0B,EAC1B,KAAa;IAEb,MAAM,WAAW,GAAG,IAAI,+BAA+B,EAAE,CAAC;IAC1D,MAAM,MAAM,GAAG,QAAQ,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAElD,KAAK,CAAC,KAAK,IAAmB,EAAE;QAC/B,IAAI,YAAY,GAA4B,IAAI,CAAC;QACjD,IAAI,qBAAqB,GAAkB,IAAI,CAAC;QAChD,IAAI,WAAW,GAAG,KAAK,CAAC;QACxB,MAAM,0BAA0B,GAAG,IAAI,GAAG,EAAyB,CAAC;QACpE,MAAM,8BAA8B,GAAG,IAAI,GAAG,EAAkB,CAAC;QACjE,MAAM,0BAA0B,GAAG,IAAI,GAAG,EAAkB,CAAC;QAE7D,IAAI,CAAC;YACJ,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,WAAW,EAAE,CAAC;gBACvC,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;oBACpB,KAAK,OAAO,EAAE,CAAC;wBACd,YAAY,GAAG,kBAAkB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;wBACjD,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,CAAC;wBAC3D,MAAM;oBACP,CAAC;oBACD,KAAK,YAAY,EAAE,CAAC;wBACnB,IAAI,YAAY,EAAE,CAAC;4BAClB,iBAAiB,CAAC,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;wBAChD,CAAC;wBACD,qBAAqB,GAAG,KAAK,CAAC,YAAY,CAAC;wBAC3C,0BAA0B,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;wBACzD,IAAI,YAAY,EAAE,CAAC;4BAClB,WAAW,CAAC,IAAI,CAAC,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,CAAC;wBACvD,CAAC;wBACD,MAAM;oBACP,CAAC;oBACD,KAAK,YAAY,EAAE,CAAC;wBACnB,IAAI,CAAC,YAAY,EAAE,CAAC;4BACnB,MAAM;wBACP,CAAC;wBACD,iBAAiB,CAAC,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;wBAC/C,WAAW;4BACV,mBAAmB,CAClB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EACxB,WAAW,EACX,YAAY,EACZ,0BAA0B,EAC1B,0BAA0B,EAC1B,qBAAqB,CACrB,IAAI,WAAW,CAAC;wBAClB,MAAM;oBACP,CAAC;oBACD,KAAK,UAAU,EAAE,CAAC;wBACjB,IAAI,CAAC,YAAY,EAAE,CAAC;4BACnB,MAAM;wBACP,CAAC;wBACD,iBAAiB,CAAC,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;wBAC/C,CAAC,EAAE,qBAAqB,EAAE,WAAW,EAAE,GAAG,wBAAwB,CACjE,WAAW,EACX,YAAY,EACZ,MAAM,EACN,0BAA0B,EAC1B,0BAA0B,EAC1B,qBAAqB,EACrB,WAAW,CACX,CAAC,CAAC;wBACH,MAAM;oBACP,CAAC;oBACD,KAAK,gBAAgB,EAAE,CAAC;wBACvB,IAAI,CAAC,YAAY,EAAE,CAAC;4BACnB,MAAM;wBACP,CAAC;wBACD,iBAAiB,CAAC,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;wBAC/C,MAAM,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC;wBACjD,MAAM,aAAa,GAAoB,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;wBAC1E,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;wBACzC,8BAA8B,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;wBACrE,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,CAAC;wBAClF,MAAM;oBACP,CAAC;oBACD,KAAK,gBAAgB,EAAE,CAAC;wBACvB,IAAI,CAAC,YAAY,EAAE,CAAC;4BACnB,MAAM;wBACP,CAAC;wBACD,iBAAiB,CAAC,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;wBAC/C,MAAM,YAAY,GAAG,8BAA8B,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;wBAC5E,IAAI,YAAY,IAAI,IAAI,EAAE,CAAC;4BAC1B,MAAM;wBACP,CAAC;wBACD,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;wBACjD,IAAI,KAAK,EAAE,IAAI,KAAK,UAAU,EAAE,CAAC;4BAChC,MAAM;wBACP,CAAC;wBACD,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,KAAK,CAAC;wBAC9B,WAAW,CAAC,IAAI,CAAC;4BAChB,IAAI,EAAE,gBAAgB;4BACtB,YAAY;4BACZ,KAAK,EAAE,KAAK,CAAC,KAAK;4BAClB,OAAO,EAAE,YAAY;yBACrB,CAAC,CAAC;wBACH,MAAM;oBACP,CAAC;oBACD,KAAK,cAAc,EAAE,CAAC;wBACrB,IAAI,CAAC,YAAY,EAAE,CAAC;4BACnB,MAAM;wBACP,CAAC;wBACD,iBAAiB,CAAC,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;wBAC/C,MAAM,YAAY,GAAG,8BAA8B,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;wBAC5E,IAAI,YAAY,IAAI,IAAI,EAAE,CAAC;4BAC1B,MAAM;wBACP,CAAC;wBACD,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;wBACjD,IAAI,KAAK,EAAE,IAAI,KAAK,UAAU,EAAE,CAAC;4BAChC,MAAM;wBACP,CAAC;wBACD,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC;wBAC/B,WAAW,CAAC,IAAI,CAAC;4BAChB,IAAI,EAAE,cAAc;4BACpB,YAAY;4BACZ,OAAO,EAAE,KAAK,CAAC,OAAO;4BACtB,OAAO,EAAE,YAAY;yBACrB,CAAC,CAAC;wBACH,MAAM;oBACP,CAAC;oBACD,KAAK,MAAM,EAAE,CAAC;wBACb,IAAI,CAAC,YAAY,EAAE,CAAC;4BACnB,YAAY,GAAG,kBAAkB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;wBAClD,CAAC;wBACD,MAAM,YAAY,GAAG,eAAe,CAAC,YAAY,EAAE,KAAK,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;wBAC/E,MAAM,WAAW,GAAG,WAAW,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;wBACtF,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,CAAC;wBAC/E,WAAW,CAAC,GAAG,EAAE,CAAC;wBAClB,OAAO;oBACR,CAAC;oBACD,KAAK,OAAO,EAAE,CAAC;wBACd,IAAI,CAAC,YAAY,EAAE,CAAC;4BACnB,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;4BACxB,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;4BAC7B,OAAO;wBACR,CAAC;wBAED,iBAAiB,CAAC,YAAY,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;wBAC7C,IAAI,qBAAqB,IAAI,IAAI,EAAE,CAAC;4BACnC,CAAC,EAAE,qBAAqB,EAAE,WAAW,EAAE,GAAG,wBAAwB,CACjE,WAAW,EACX,YAAY,EACZ,MAAM,EACN,0BAA0B,EAC1B,0BAA0B,EAC1B,qBAAqB,EACrB,WAAW,CACX,CAAC,CAAC;wBACJ,CAAC;wBAED,MAAM,iBAAiB,GAAG,eAAe,CAAC,YAAY,EAAE,KAAK,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;wBAClF,IAAI,WAAW,IAAI,2BAA2B,CAAC,iBAAiB,CAAC,EAAE,CAAC;4BACnE,MAAM,gBAAgB,GAAqB;gCAC1C,GAAG,iBAAiB;gCACpB,UAAU,EAAE,SAAS;6BACrB,CAAC;4BACF,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC,CAAC;4BACjF,WAAW,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;4BAClC,OAAO;wBACR,CAAC;wBACD,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,iBAAiB,EAAE,CAAC,CAAC;wBACpF,WAAW,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;wBACnC,OAAO;oBACR,CAAC;gBACF,CAAC;YACF,CAAC;YAED,MAAM,iBAAiB,GAAG,MAAM,WAAW,CAAC,MAAM,EAAE,CAAC;YACrD,IAAI,CAAC,YAAY,EAAE,CAAC;gBACnB,YAAY,GAAG,kBAAkB,CAAC,iBAAiB,CAAC,CAAC;YACtD,CAAC;YACD,WAAW,CAAC,GAAG,CAAC,eAAe,CAAC,YAAY,EAAE,iBAAiB,EAAE,WAAW,CAAC,CAAC,CAAC;QAChF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,eAAe,GAAG,YAAY,IAAI,kBAAkB,CAAC,MAAM,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;YACvF,eAAe,CAAC,UAAU,GAAG,OAAO,CAAC;YACrC,eAAe,CAAC,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YAC9F,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC,CAAC;YAC7E,WAAW,CAAC,GAAG,EAAE,CAAC;QACnB,CAAC;IACF,CAAC,CAAC,EAAE,CAAC;IAEL,OAAO,WAAW,CAAC;AACpB,CAAC","sourcesContent":["import type {\n\tAssistantMessage,\n\tAssistantMessageEventStream,\n\tThinkingContent,\n\tTool,\n\tToolCall,\n\tUsage,\n} from \"../types.ts\";\nimport { AssistantMessageEventStream as AssistantMessageEventStreamImpl } from \"../utils/event-stream.ts\";\nimport { parseStreamingJson } from \"../utils/json-parse.ts\";\nimport type { StreamParserEvent, ToolCallProtocol } from \"./types.ts\";\n\ntype PartialToolCall = ToolCall & {\n\tpartialJson: string;\n};\n\nfunction isPartialToolCall(block: AssistantMessage[\"content\"][number] | undefined): block is PartialToolCall {\n\treturn block?.type === \"toolCall\" && typeof (block as PartialToolCall).partialJson === \"string\";\n}\n\nfunction cloneUsage(usage: Usage): Usage {\n\treturn {\n\t\tinput: usage.input,\n\t\toutput: usage.output,\n\t\tcacheRead: usage.cacheRead,\n\t\tcacheWrite: usage.cacheWrite,\n\t\ttotalTokens: usage.totalTokens,\n\t\tcost: {\n\t\t\tinput: usage.cost.input,\n\t\t\toutput: usage.cost.output,\n\t\t\tcacheRead: usage.cost.cacheRead,\n\t\t\tcacheWrite: usage.cost.cacheWrite,\n\t\t\ttotal: usage.cost.total,\n\t\t},\n\t};\n}\n\nfunction createOuterMessage(message: AssistantMessage): AssistantMessage {\n\treturn {\n\t\trole: \"assistant\",\n\t\tapi: message.api,\n\t\tprovider: message.provider,\n\t\tmodel: message.model,\n\t\tresponseId: message.responseId,\n\t\tcontent: [],\n\t\tusage: cloneUsage(message.usage),\n\t\tstopReason: message.stopReason,\n\t\terrorMessage: message.errorMessage,\n\t\ttimestamp: message.timestamp,\n\t};\n}\n\nfunction syncOuterMetadata(target: AssistantMessage, source: AssistantMessage): void {\n\ttarget.api = source.api;\n\ttarget.provider = source.provider;\n\ttarget.model = source.model;\n\ttarget.responseId = source.responseId;\n\ttarget.usage = cloneUsage(source.usage);\n\ttarget.stopReason = source.stopReason;\n\ttarget.errorMessage = source.errorMessage;\n\ttarget.timestamp = source.timestamp;\n}\n\nfunction pushParserEvent(\n\tparserEvent: StreamParserEvent,\n\touterStream: AssistantMessageEventStream,\n\touterMessage: AssistantMessage,\n\ttextBlockIndexByInnerIndex: Map<number, number | null>,\n\ttoolCallIndexByParserIndex: Map<number, number>,\n\tcurrentInnerTextIndex: number | null,\n): void {\n\tswitch (parserEvent.type) {\n\t\tcase \"text\": {\n\t\t\tif (currentInnerTextIndex == null) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet textBlockIndex = textBlockIndexByInnerIndex.get(currentInnerTextIndex) ?? null;\n\t\t\tif (textBlockIndex == null) {\n\t\t\t\ttextBlockIndex = outerMessage.content.length;\n\t\t\t\touterMessage.content.push({ type: \"text\", text: parserEvent.text });\n\t\t\t\ttextBlockIndexByInnerIndex.set(currentInnerTextIndex, textBlockIndex);\n\t\t\t} else {\n\t\t\t\tconst block = outerMessage.content[textBlockIndex];\n\t\t\t\tif (block?.type !== \"text\") {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tblock.text += parserEvent.text;\n\t\t\t}\n\n\t\t\touterStream.push({\n\t\t\t\ttype: \"text_delta\",\n\t\t\t\tcontentIndex: textBlockIndex,\n\t\t\t\tdelta: parserEvent.text,\n\t\t\t\tpartial: outerMessage,\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tcase \"toolcall_start\": {\n\t\t\tconst contentIndex = outerMessage.content.length;\n\t\t\tconst toolCall: PartialToolCall = {\n\t\t\t\ttype: \"toolCall\",\n\t\t\t\tid: parserEvent.id,\n\t\t\t\tname: parserEvent.name,\n\t\t\t\targuments: {},\n\t\t\t\tpartialJson: \"\",\n\t\t\t};\n\t\t\touterMessage.content.push(toolCall);\n\t\t\ttoolCallIndexByParserIndex.set(parserEvent.index, contentIndex);\n\t\t\tif (currentInnerTextIndex != null) {\n\t\t\t\ttextBlockIndexByInnerIndex.set(currentInnerTextIndex, null);\n\t\t\t}\n\t\t\touterStream.push({\n\t\t\t\ttype: \"toolcall_start\",\n\t\t\t\tcontentIndex,\n\t\t\t\tpartial: outerMessage,\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tcase \"toolcall_delta\": {\n\t\t\tconst contentIndex = toolCallIndexByParserIndex.get(parserEvent.index);\n\t\t\tif (contentIndex == null) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst block = outerMessage.content[contentIndex];\n\t\t\tif (!isPartialToolCall(block)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tblock.partialJson += parserEvent.argumentsDelta;\n\t\t\tblock.arguments = parseStreamingJson<Record<string, unknown>>(block.partialJson);\n\t\t\touterStream.push({\n\t\t\t\ttype: \"toolcall_delta\",\n\t\t\t\tcontentIndex,\n\t\t\t\tdelta: parserEvent.argumentsDelta,\n\t\t\t\tpartial: outerMessage,\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tcase \"toolcall_end\": {\n\t\t\tconst contentIndex = toolCallIndexByParserIndex.get(parserEvent.index);\n\t\t\tif (contentIndex == null) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst block = outerMessage.content[contentIndex];\n\t\t\tif (block?.type !== \"toolCall\") {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst finalToolCall: ToolCall = {\n\t\t\t\ttype: \"toolCall\",\n\t\t\t\tid: parserEvent.id,\n\t\t\t\tname: parserEvent.name,\n\t\t\t\targuments: parserEvent.arguments,\n\t\t\t};\n\t\t\touterMessage.content[contentIndex] = finalToolCall;\n\t\t\touterStream.push({\n\t\t\t\ttype: \"toolcall_end\",\n\t\t\t\tcontentIndex,\n\t\t\t\ttoolCall: finalToolCall,\n\t\t\t\tpartial: outerMessage,\n\t\t\t});\n\t\t}\n\t}\n}\n\nfunction processParserEvents(\n\tparserEvents: StreamParserEvent[],\n\touterStream: AssistantMessageEventStream,\n\touterMessage: AssistantMessage,\n\ttextBlockIndexByInnerIndex: Map<number, number | null>,\n\ttoolCallIndexByParserIndex: Map<number, number>,\n\tcurrentInnerTextIndex: number | null,\n): boolean {\n\tlet emittedToolCall = false;\n\tfor (const parserEvent of parserEvents) {\n\t\tif (\n\t\t\tparserEvent.type === \"toolcall_start\" ||\n\t\t\tparserEvent.type === \"toolcall_delta\" ||\n\t\t\tparserEvent.type === \"toolcall_end\"\n\t\t) {\n\t\t\temittedToolCall = true;\n\t\t}\n\n\t\tpushParserEvent(\n\t\t\tparserEvent,\n\t\t\touterStream,\n\t\t\touterMessage,\n\t\t\ttextBlockIndexByInnerIndex,\n\t\t\ttoolCallIndexByParserIndex,\n\t\t\tcurrentInnerTextIndex,\n\t\t);\n\t}\n\treturn emittedToolCall;\n}\n\nfunction finalizeMessage(\n\touterMessage: AssistantMessage,\n\tdoneMessage: AssistantMessage,\n\tsawToolCall: boolean,\n): AssistantMessage {\n\tconst finalMessage: AssistantMessage = {\n\t\t...createOuterMessage(doneMessage),\n\t\tcontent: outerMessage.content,\n\t};\n\n\tif (sawToolCall && finalMessage.stopReason === \"stop\") {\n\t\tfinalMessage.stopReason = \"toolUse\";\n\t}\n\n\treturn finalMessage;\n}\n\nfunction hasCompletedToolCallContent(message: AssistantMessage): boolean {\n\treturn message.content.some((block) => block.type === \"toolCall\");\n}\n\nfunction finalizePendingTextBlock(\n\touterStream: AssistantMessageEventStream,\n\touterMessage: AssistantMessage,\n\tparser: ReturnType<ToolCallProtocol[\"createStreamParser\"]>,\n\ttextBlockIndexByInnerIndex: Map<number, number | null>,\n\ttoolCallIndexByParserIndex: Map<number, number>,\n\tcurrentInnerTextIndex: number | null,\n\tsawToolCall: boolean,\n): { currentInnerTextIndex: null; sawToolCall: boolean } {\n\tconst nextSawToolCall =\n\t\tprocessParserEvents(\n\t\t\tparser.finish(),\n\t\t\touterStream,\n\t\t\touterMessage,\n\t\t\ttextBlockIndexByInnerIndex,\n\t\t\ttoolCallIndexByParserIndex,\n\t\t\tcurrentInnerTextIndex,\n\t\t) || sawToolCall;\n\n\tconst outerContentIndex =\n\t\tcurrentInnerTextIndex == null ? null : (textBlockIndexByInnerIndex.get(currentInnerTextIndex) ?? null);\n\tif (outerContentIndex != null) {\n\t\tconst outerBlock = outerMessage.content[outerContentIndex];\n\t\tif (outerBlock?.type === \"text\") {\n\t\t\touterStream.push({\n\t\t\t\ttype: \"text_end\",\n\t\t\t\tcontentIndex: outerContentIndex,\n\t\t\t\tcontent: outerBlock.text,\n\t\t\t\tpartial: outerMessage,\n\t\t\t});\n\t\t}\n\t}\n\n\treturn {\n\t\tcurrentInnerTextIndex: null,\n\t\tsawToolCall: nextSawToolCall,\n\t};\n}\n\nexport function wrapStreamWithToolCallMiddleware(\n\tinnerStream: AssistantMessageEventStream,\n\tprotocol: ToolCallProtocol,\n\ttools: Tool[],\n): AssistantMessageEventStream {\n\tconst outerStream = new AssistantMessageEventStreamImpl();\n\tconst parser = protocol.createStreamParser(tools);\n\n\tvoid (async (): Promise<void> => {\n\t\tlet outerMessage: AssistantMessage | null = null;\n\t\tlet currentInnerTextIndex: number | null = null;\n\t\tlet sawToolCall = false;\n\t\tconst textBlockIndexByInnerIndex = new Map<number, number | null>();\n\t\tconst thinkingBlockIndexByInnerIndex = new Map<number, number>();\n\t\tconst toolCallIndexByParserIndex = new Map<number, number>();\n\n\t\ttry {\n\t\t\tfor await (const event of innerStream) {\n\t\t\t\tswitch (event.type) {\n\t\t\t\t\tcase \"start\": {\n\t\t\t\t\t\touterMessage = createOuterMessage(event.partial);\n\t\t\t\t\t\touterStream.push({ type: \"start\", partial: outerMessage });\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"text_start\": {\n\t\t\t\t\t\tif (outerMessage) {\n\t\t\t\t\t\t\tsyncOuterMetadata(outerMessage, event.partial);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcurrentInnerTextIndex = event.contentIndex;\n\t\t\t\t\t\ttextBlockIndexByInnerIndex.set(event.contentIndex, null);\n\t\t\t\t\t\tif (outerMessage) {\n\t\t\t\t\t\t\touterStream.push({ ...event, partial: outerMessage });\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"text_delta\": {\n\t\t\t\t\t\tif (!outerMessage) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsyncOuterMetadata(outerMessage, event.partial);\n\t\t\t\t\t\tsawToolCall =\n\t\t\t\t\t\t\tprocessParserEvents(\n\t\t\t\t\t\t\t\tparser.feed(event.delta),\n\t\t\t\t\t\t\t\touterStream,\n\t\t\t\t\t\t\t\touterMessage,\n\t\t\t\t\t\t\t\ttextBlockIndexByInnerIndex,\n\t\t\t\t\t\t\t\ttoolCallIndexByParserIndex,\n\t\t\t\t\t\t\t\tcurrentInnerTextIndex,\n\t\t\t\t\t\t\t) || sawToolCall;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"text_end\": {\n\t\t\t\t\t\tif (!outerMessage) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsyncOuterMetadata(outerMessage, event.partial);\n\t\t\t\t\t\t({ currentInnerTextIndex, sawToolCall } = finalizePendingTextBlock(\n\t\t\t\t\t\t\touterStream,\n\t\t\t\t\t\t\touterMessage,\n\t\t\t\t\t\t\tparser,\n\t\t\t\t\t\t\ttextBlockIndexByInnerIndex,\n\t\t\t\t\t\t\ttoolCallIndexByParserIndex,\n\t\t\t\t\t\t\tcurrentInnerTextIndex,\n\t\t\t\t\t\t\tsawToolCall,\n\t\t\t\t\t\t));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"thinking_start\": {\n\t\t\t\t\t\tif (!outerMessage) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsyncOuterMetadata(outerMessage, event.partial);\n\t\t\t\t\t\tconst contentIndex = outerMessage.content.length;\n\t\t\t\t\t\tconst thinkingBlock: ThinkingContent = { type: \"thinking\", thinking: \"\" };\n\t\t\t\t\t\touterMessage.content.push(thinkingBlock);\n\t\t\t\t\t\tthinkingBlockIndexByInnerIndex.set(event.contentIndex, contentIndex);\n\t\t\t\t\t\touterStream.push({ type: \"thinking_start\", contentIndex, partial: outerMessage });\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"thinking_delta\": {\n\t\t\t\t\t\tif (!outerMessage) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsyncOuterMetadata(outerMessage, event.partial);\n\t\t\t\t\t\tconst contentIndex = thinkingBlockIndexByInnerIndex.get(event.contentIndex);\n\t\t\t\t\t\tif (contentIndex == null) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst block = outerMessage.content[contentIndex];\n\t\t\t\t\t\tif (block?.type !== \"thinking\") {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tblock.thinking += event.delta;\n\t\t\t\t\t\touterStream.push({\n\t\t\t\t\t\t\ttype: \"thinking_delta\",\n\t\t\t\t\t\t\tcontentIndex,\n\t\t\t\t\t\t\tdelta: event.delta,\n\t\t\t\t\t\t\tpartial: outerMessage,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"thinking_end\": {\n\t\t\t\t\t\tif (!outerMessage) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsyncOuterMetadata(outerMessage, event.partial);\n\t\t\t\t\t\tconst contentIndex = thinkingBlockIndexByInnerIndex.get(event.contentIndex);\n\t\t\t\t\t\tif (contentIndex == null) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst block = outerMessage.content[contentIndex];\n\t\t\t\t\t\tif (block?.type !== \"thinking\") {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tblock.thinking = event.content;\n\t\t\t\t\t\touterStream.push({\n\t\t\t\t\t\t\ttype: \"thinking_end\",\n\t\t\t\t\t\t\tcontentIndex,\n\t\t\t\t\t\t\tcontent: event.content,\n\t\t\t\t\t\t\tpartial: outerMessage,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"done\": {\n\t\t\t\t\t\tif (!outerMessage) {\n\t\t\t\t\t\t\touterMessage = createOuterMessage(event.message);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst finalMessage = finalizeMessage(outerMessage, event.message, sawToolCall);\n\t\t\t\t\t\tconst finalReason = sawToolCall && event.reason === \"stop\" ? \"toolUse\" : event.reason;\n\t\t\t\t\t\touterStream.push({ type: \"done\", reason: finalReason, message: finalMessage });\n\t\t\t\t\t\touterStream.end();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"error\": {\n\t\t\t\t\t\tif (!outerMessage) {\n\t\t\t\t\t\t\touterStream.push(event);\n\t\t\t\t\t\t\touterStream.end(event.error);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tsyncOuterMetadata(outerMessage, event.error);\n\t\t\t\t\t\tif (currentInnerTextIndex != null) {\n\t\t\t\t\t\t\t({ currentInnerTextIndex, sawToolCall } = finalizePendingTextBlock(\n\t\t\t\t\t\t\t\touterStream,\n\t\t\t\t\t\t\t\touterMessage,\n\t\t\t\t\t\t\t\tparser,\n\t\t\t\t\t\t\t\ttextBlockIndexByInnerIndex,\n\t\t\t\t\t\t\t\ttoolCallIndexByParserIndex,\n\t\t\t\t\t\t\t\tcurrentInnerTextIndex,\n\t\t\t\t\t\t\t\tsawToolCall,\n\t\t\t\t\t\t\t));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst finalErrorMessage = finalizeMessage(outerMessage, event.error, sawToolCall);\n\t\t\t\t\t\tif (sawToolCall && hasCompletedToolCallContent(finalErrorMessage)) {\n\t\t\t\t\t\t\tconst recoveredMessage: AssistantMessage = {\n\t\t\t\t\t\t\t\t...finalErrorMessage,\n\t\t\t\t\t\t\t\tstopReason: \"toolUse\",\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\touterStream.push({ type: \"done\", reason: \"toolUse\", message: recoveredMessage });\n\t\t\t\t\t\t\touterStream.end(recoveredMessage);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\touterStream.push({ type: \"error\", reason: event.reason, error: finalErrorMessage });\n\t\t\t\t\t\touterStream.end(finalErrorMessage);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst finalInnerMessage = await innerStream.result();\n\t\t\tif (!outerMessage) {\n\t\t\t\touterMessage = createOuterMessage(finalInnerMessage);\n\t\t\t}\n\t\t\touterStream.end(finalizeMessage(outerMessage, finalInnerMessage, sawToolCall));\n\t\t} catch (error) {\n\t\t\tconst fallbackMessage = outerMessage ?? createOuterMessage(await innerStream.result());\n\t\t\tfallbackMessage.stopReason = \"error\";\n\t\t\tfallbackMessage.errorMessage = error instanceof Error ? error.message : JSON.stringify(error);\n\t\t\touterStream.push({ type: \"error\", reason: \"error\", error: fallbackMessage });\n\t\t\touterStream.end();\n\t\t}\n\t})();\n\n\treturn outerStream;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/tool-call-middleware/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAEnE;;;;;GAKG;AACH,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,KAAK,GAAG,UAAU,GAAG,kBAAkB,CAAC;AAEhF;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,WAAW,GAAG,YAAY,CAAC;AAE3D,MAAM,WAAW,aAAa;IAC7B,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;CACxE;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAC1B;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GACnE;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,GACjE;IACA,IAAI,EAAE,cAAc,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC,CAAC;AAEL;;GAEG;AACH,MAAM,WAAW,YAAY;IAC5B;;;;OAIG;IACH,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,iBAAiB,EAAE,CAAC;IAE7C;;;OAGG;IACH,MAAM,IAAI,iBAAiB,EAAE,CAAC;CAC9B;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAChC;;;;OAIG;IACH,uBAAuB,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC;IAE/C;;;;;;OAMG;IACH,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,EAAE,GAAG,MAAM,CAAC;IAE/F;;;;;OAKG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC;IAEpE;;;;;OAKG;IACH,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,cAAc,EAAE,CAAC;IAE3F;;;;OAIG;IACH,kBAAkB,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,YAAY,CAAC;CACzE","sourcesContent":["import type { ImageContent, TextContent, Tool } from \"../types.ts\";\n\n/**\n * Supported tool call formats for models that don't natively support tool calling.\n * - \"hermes\": Hermes 2/3 format with special delimiters\n * - \"xml\": XML-based tool call format\n * - \"gemma4-delimiter\": Gemma 4 specific delimiter format\n */\nexport type ToolCallFormat = \"hermes\" | \"xml\" | \"yaml-xml\" | \"gemma4-delimiter\";\n\n/**\n * Content type for tool results (text or image)\n */\nexport type ToolResultContent = TextContent | ImageContent;\n\nexport interface ParserOptions {\n\temitRawToolCallTextOnError?: boolean;\n\tonError?: (message: string, metadata?: Record<string, unknown>) => void;\n}\n\n/**\n * A parsed tool call extracted from generated text\n */\nexport interface ParsedToolCall {\n\tname: string;\n\targuments: Record<string, unknown>;\n}\n\n/**\n * Events emitted by the stream parser during text processing.\n * Maps 1:1 to AssistantMessageEventStream events for seamless integration.\n */\nexport type StreamParserEvent =\n\t| { type: \"text\"; text: string }\n\t| { type: \"toolcall_start\"; index: number; name: string; id: string }\n\t| { type: \"toolcall_delta\"; index: number; argumentsDelta: string }\n\t| {\n\t\t\ttype: \"toolcall_end\";\n\t\t\tindex: number;\n\t\t\tname: string;\n\t\t\tid: string;\n\t\t\targuments: Record<string, unknown>;\n\t };\n\n/**\n * Stream parser for incremental tool call parsing during streaming.\n */\nexport interface StreamParser {\n\t/**\n\t * Feed a text delta into the parser and receive any events generated.\n\t * @param textDelta - The next chunk of text to parse\n\t * @returns Array of parser events (text or tool call events)\n\t */\n\tfeed(textDelta: string): StreamParserEvent[];\n\n\t/**\n\t * Signal that the stream has ended and receive any final events.\n\t * @returns Array of final parser events\n\t */\n\tfinish(): StreamParserEvent[];\n}\n\n/**\n * Protocol interface for formatting and parsing tool calls in different formats.\n * Implementations handle the specifics of each tool call format (Hermes, XML, etc.)\n */\nexport interface ToolCallProtocol {\n\t/**\n\t * Format tools into a system prompt that instructs the model how to use tools.\n\t * @param tools - Array of available tools\n\t * @returns Formatted system prompt string\n\t */\n\tformatToolsSystemPrompt(tools: Tool[]): string;\n\n\t/**\n\t * Format a tool response for inclusion in the conversation context.\n\t * @param toolName - Name of the tool that was called\n\t * @param toolCallId - Unique identifier for this tool call\n\t * @param content - Array of content blocks (text or images) representing the result\n\t * @returns Formatted tool response string\n\t */\n\tformatToolResponse(toolName: string, toolCallId: string, content: ToolResultContent[]): string;\n\n\t/**\n\t * Format a tool call for sending to the model.\n\t * @param name - Name of the tool to call\n\t * @param args - Arguments for the tool call\n\t * @returns Formatted tool call string\n\t */\n\tformatToolCall(name: string, args: Record<string, unknown>): string;\n\n\t/**\n\t * Parse generated text to extract tool calls.\n\t * @param text - The generated text to parse\n\t * @param tools - Available tools for validation\n\t * @returns Array of parsed tool calls\n\t */\n\tparseGeneratedText(text: string, tools: Tool[], options?: ParserOptions): ParsedToolCall[];\n\n\t/**\n\t * Create a stream parser for incremental parsing during streaming.\n\t * @param tools - Available tools for the parser to recognize\n\t * @returns A new StreamParser instance\n\t */\n\tcreateStreamParser(tools: Tool[], options?: ParserOptions): StreamParser;\n}\n"]}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/tool-call-middleware/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAEnE;;;;;GAKG;AACH,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,KAAK,GAAG,UAAU,GAAG,kBAAkB,CAAC;AAEhF;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,WAAW,GAAG,YAAY,CAAC;AAE3D,MAAM,WAAW,aAAa;IAC7B,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;CACxE;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAC1B;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GACnE;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,GACjE;IACA,IAAI,EAAE,cAAc,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC,CAAC;AAEL;;GAEG;AACH,MAAM,WAAW,YAAY;IAC5B;;;;OAIG;IACH,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,iBAAiB,EAAE,CAAC;IAE7C;;;OAGG;IACH,MAAM,IAAI,iBAAiB,EAAE,CAAC;CAC9B;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAChC;;;;OAIG;IACH,uBAAuB,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC;IAE/C;;;;;;OAMG;IACH,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,EAAE,GAAG,MAAM,CAAC;IAE/F;;;;;OAKG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC;IAEpE;;;;;OAKG;IACH,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,cAAc,EAAE,CAAC;IAE3F;;;;OAIG;IACH,kBAAkB,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,YAAY,CAAC;CACzE"}
@@ -371,7 +371,7 @@ export interface OpenAICompletionsCompat {
371
371
  thinkingFormat?: "openai" | "openrouter" | "deepseek" | "together" | "zai" | "qwen" | "qwen-chat-template" | "string-thinking" | "ant-ling";
372
372
  /** Whether the provider accepts explicit disabled-thinking markers when thinking is off. Default: true. */
373
373
  supportsDisabledThinking?: boolean;
374
- /** OpenRouter-specific routing preferences. Only used when baseUrl points to OpenRouter. */
374
+ /** OpenRouter-compatible routing preferences sent as the `provider` request field. */
375
375
  openRouterRouting?: OpenRouterRouting;
376
376
  /** Vercel AI Gateway routing preferences. Only used when baseUrl points to Vercel AI Gateway. */
377
377
  vercelGatewayRouting?: VercelGatewayRouting;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AssistantMessageDiagnostic } from \"./utils/diagnostics.ts\";\nimport type { AssistantMessageEventStream } from \"./utils/event-stream.ts\";\n\nexport type { AssistantMessageEventStream } from \"./utils/event-stream.ts\";\n\nexport type KnownApi =\n\t| \"openai-completions\"\n\t| \"mistral-conversations\"\n\t| \"openai-responses\"\n\t| \"azure-openai-responses\"\n\t| \"openai-codex-responses\"\n\t| \"anthropic-messages\"\n\t| \"bedrock-converse-stream\"\n\t| \"google-generative-ai\"\n\t| \"google-vertex\";\n\nexport type Api = KnownApi | (string & {});\n\nexport type KnownImagesApi = \"openrouter-images\";\n\nexport type ImagesApi = KnownImagesApi | (string & {});\n\nexport type KnownProvider =\n\t| \"amazon-bedrock\"\n\t| \"ant-ling\"\n\t| \"anthropic\"\n\t| \"google\"\n\t| \"google-vertex\"\n\t| \"openai\"\n\t| \"azure-openai-responses\"\n\t| \"openai-codex\"\n\t| \"nvidia\"\n\t| \"deepseek\"\n\t| \"github-copilot\"\n\t| \"xai\"\n\t| \"groq\"\n\t| \"cerebras\"\n\t| \"openrouter\"\n\t| \"vercel-ai-gateway\"\n\t| \"zai\"\n\t| \"zai-coding-cn\"\n\t| \"mistral\"\n\t| \"minimax\"\n\t| \"minimax-cn\"\n\t| \"moonshotai\"\n\t| \"moonshotai-cn\"\n\t| \"huggingface\"\n\t| \"fireworks\"\n\t| \"together\"\n\t| \"opencode\"\n\t| \"opencode-go\"\n\t| \"kimi-coding\"\n\t| \"cloudflare-workers-ai\"\n\t| \"cloudflare-ai-gateway\"\n\t| \"xiaomi\"\n\t| \"xiaomi-token-plan-cn\"\n\t| \"xiaomi-token-plan-ams\"\n\t| \"xiaomi-token-plan-sgp\";\nexport type Provider = KnownProvider | string;\n\nexport type KnownImagesProvider = \"openrouter\";\n\nexport type ImagesProvider = KnownImagesProvider | string;\n\nexport type ThinkingLevel = \"minimal\" | \"low\" | \"medium\" | \"high\" | \"xhigh\" | \"max\";\nexport type ModelThinkingLevel = \"off\" | ThinkingLevel;\nexport type ThinkingLevelMap = Partial<Record<ModelThinkingLevel, string | null>>;\n\n/** Token budgets for each thinking level (token-based providers only) */\nexport interface ThinkingBudgets {\n\tminimal?: number;\n\tlow?: number;\n\tmedium?: number;\n\thigh?: number;\n}\n\n// Base options all providers share\nexport type CacheRetention = \"none\" | \"short\" | \"long\";\n\nexport type Transport = \"sse\" | \"websocket\" | \"websocket-cached\" | \"auto\";\n\nexport interface ProviderResponse {\n\tstatus: number;\n\theaders: Record<string, string>;\n}\n\nexport interface StreamOptions {\n\ttemperature?: number;\n\tmaxTokens?: number;\n\tsignal?: AbortSignal;\n\tapiKey?: string;\n\t/**\n\t * Preferred transport for providers that support multiple transports.\n\t * Providers that do not support this option ignore it.\n\t */\n\ttransport?: Transport;\n\t/**\n\t * Prompt cache retention preference. Providers map this to their supported values.\n\t * Default: \"short\".\n\t */\n\tcacheRetention?: CacheRetention;\n\t/**\n\t * Optional session identifier for providers that support session-based caching.\n\t * Providers can use this to enable prompt caching, request routing, or other\n\t * session-aware features. Ignored by providers that don't support it.\n\t */\n\tsessionId?: string;\n\t/**\n\t * Optional callback for inspecting or replacing provider payloads before sending.\n\t * Return undefined to keep the payload unchanged.\n\t */\n\tonPayload?: (payload: unknown, model: Model<Api>) => unknown | undefined | Promise<unknown | undefined>;\n\t/**\n\t * Optional callback invoked after an HTTP response is received and before\n\t * its body stream is consumed.\n\t */\n\tonResponse?: (response: ProviderResponse, model: Model<Api>) => void | Promise<void>;\n\t/**\n\t * Optional custom HTTP headers to include in API requests.\n\t * Merged with provider defaults; caller values override default headers.\n\t * On AWS Bedrock these are injected via a Smithy `build`-step middleware so\n\t * they are covered by SigV4 signing; reserved headers (`x-amz-*`,\n\t * `authorization`, `host`) are silently ignored to preserve SigV4 / bearer auth.\n\t */\n\theaders?: Record<string, string>;\n\t/**\n\t * Optional custom fields to merge into the outgoing provider request body.\n\t * Applied before `onPayload` so `onPayload` can observe/override them.\n\t * Provider-managed fields (e.g. `model`, `messages`, `stream`) are preserved\n\t * and cannot be overridden to avoid breaking core request semantics.\n\t */\n\textraBody?: Record<string, unknown>;\n\t/**\n\t * HTTP request timeout in milliseconds for providers/SDKs that support it.\n\t * For example, OpenAI and Anthropic SDK clients default to 10 minutes.\n\t */\n\ttimeoutMs?: number;\n\t/**\n\t * WebSocket connect timeout in milliseconds for providers that support\n\t * WebSocket transports. This covers the connection/open handshake only;\n\t * stream idleness after connection uses timeoutMs.\n\t */\n\twebsocketConnectTimeoutMs?: number;\n\t/**\n\t * Maximum retry attempts for providers/SDKs that support client-side retries.\n\t * For example, OpenAI and Anthropic SDK clients default to 2.\n\t */\n\tmaxRetries?: number;\n\t/**\n\t * Maximum delay in milliseconds to wait for a retry when the server requests a long wait.\n\t * If the server's requested delay exceeds this value, the request fails immediately\n\t * with an error containing the requested delay, allowing higher-level retry logic\n\t * to handle it with user visibility.\n\t * Default: 60000 (60 seconds). Set to 0 to disable the cap.\n\t */\n\tmaxRetryDelayMs?: number;\n\t/**\n\t * Optional metadata to include in API requests.\n\t * Providers extract the fields they understand and ignore the rest.\n\t * For example, Anthropic uses `user_id` for abuse tracking and rate limiting.\n\t */\n\tmetadata?: Record<string, unknown>;\n}\n\nexport type ProviderStreamOptions = StreamOptions & Record<string, unknown>;\n\nexport interface ImagesOptions {\n\tsignal?: AbortSignal;\n\tapiKey?: string;\n\t/**\n\t * Optional callback for inspecting or replacing provider payloads before sending.\n\t * Return undefined to keep the payload unchanged.\n\t */\n\tonPayload?: (payload: unknown, model: ImagesModel<ImagesApi>) => unknown | undefined | Promise<unknown | undefined>;\n\t/**\n\t * Optional callback invoked after an HTTP response is received.\n\t */\n\tonResponse?: (response: ProviderResponse, model: ImagesModel<ImagesApi>) => void | Promise<void>;\n\t/**\n\t * Optional custom HTTP headers to include in API requests.\n\t * Merged with provider defaults; can override default headers.\n\t */\n\theaders?: Record<string, string>;\n\t/**\n\t * HTTP request timeout in milliseconds for providers/SDKs that support it.\n\t */\n\ttimeoutMs?: number;\n\t/**\n\t * Maximum retry attempts for providers/SDKs that support client-side retries.\n\t */\n\tmaxRetries?: number;\n\t/**\n\t * Maximum delay in milliseconds to wait for a retry when the server requests a long wait.\n\t * If the server's requested delay exceeds this value, the request fails immediately\n\t * with an error containing the requested delay, allowing higher-level retry logic\n\t * to handle it with user visibility.\n\t * Default: 60000 (60 seconds). Set to 0 to disable the cap.\n\t */\n\tmaxRetryDelayMs?: number;\n\t/**\n\t * Optional metadata to include in API requests.\n\t * Providers extract the fields they understand and ignore the rest.\n\t */\n\tmetadata?: Record<string, unknown>;\n}\n\nexport type ProviderImagesOptions = ImagesOptions & Record<string, unknown>;\n\n// Unified options with reasoning passed to streamSimple() and completeSimple()\nexport interface SimpleStreamOptions extends StreamOptions {\n\treasoning?: ThinkingLevel;\n\t/** Custom token budgets for thinking levels (token-based providers only) */\n\tthinkingBudgets?: ThinkingBudgets;\n}\n\n// Generic StreamFunction with typed options.\n//\n// Contract:\n// - Must return an AssistantMessageEventStream.\n// - Once invoked, request/model/runtime failures should be encoded in the\n// returned stream, not thrown.\n// - Error termination must produce an AssistantMessage with stopReason\n// \"error\" or \"aborted\" and errorMessage, emitted via the stream protocol.\nexport type StreamFunction<TApi extends Api = Api, TOptions extends StreamOptions = StreamOptions> = (\n\tmodel: Model<TApi>,\n\tcontext: Context,\n\toptions?: TOptions,\n) => AssistantMessageEventStream;\n\nexport type ImagesFunction<TApi extends ImagesApi = ImagesApi, TOptions extends ImagesOptions = ImagesOptions> = (\n\tmodel: ImagesModel<TApi>,\n\tcontext: ImagesContext,\n\toptions?: TOptions,\n) => Promise<AssistantImages>;\n\nexport interface TextSignatureV1 {\n\tv: 1;\n\tid: string;\n\tphase?: \"commentary\" | \"final_answer\";\n}\n\nexport interface TextContent {\n\ttype: \"text\";\n\ttext: string;\n\ttextSignature?: string; // e.g., for OpenAI responses, message metadata (legacy id string or TextSignatureV1 JSON)\n}\n\nexport interface ThinkingContent {\n\ttype: \"thinking\";\n\tthinking: string;\n\tthinkingSignature?: string; // e.g., for OpenAI responses, the reasoning item ID\n\t/** When true, the thinking content was redacted by safety filters. The opaque\n\t * encrypted payload is stored in `thinkingSignature` so it can be passed back\n\t * to the API for multi-turn continuity. */\n\tredacted?: boolean;\n}\n\nexport interface ImageContent {\n\ttype: \"image\";\n\tdata: string; // base64 encoded image data\n\tmimeType: string; // e.g., \"image/jpeg\", \"image/png\"\n}\n\nexport interface ToolCall {\n\ttype: \"toolCall\";\n\tid: string;\n\tname: string;\n\targuments: Record<string, any>;\n\tthoughtSignature?: string; // Google-specific: opaque signature for reusing thought context\n}\n\n/**\n * Provider-emitted content block whose semantics are owned by the originating\n * provider. Surfaces server-side tool invocations (web_search), server-side\n * tool results (web_search_tool_result), code execution traces, grounding\n * metadata fragments, and any other vendor-specific block the core does not\n * normalize.\n *\n * `subtype` mirrors the provider's wire `type` discriminator (e.g.\n * \"server_tool_use\", \"web_search_tool_result\", \"executableCode\"). `raw` is\n * the verbatim wire payload — extensions interpret it per provider+subtype.\n *\n * The owning provider id lives on the parent `AssistantMessage.provider`, not\n * here, to avoid drift on replay.\n *\n * On replay across providers, `convertMessages` implementations MUST drop\n * these blocks (they are not portable). This mirrors the existing\n * `redacted_thinking` skip pattern.\n */\nexport interface ProviderNativeContent {\n\ttype: \"providerNative\";\n\tsubtype: string;\n\traw: unknown;\n}\n\nexport interface Usage {\n\tinput: number;\n\toutput: number;\n\tcacheRead: number;\n\tcacheWrite: number;\n\ttotalTokens: number;\n\tcost: {\n\t\tinput: number;\n\t\toutput: number;\n\t\tcacheRead: number;\n\t\tcacheWrite: number;\n\t\ttotal: number;\n\t};\n}\n\nexport type StopReason = \"stop\" | \"length\" | \"toolUse\" | \"error\" | \"aborted\";\n\nexport interface UserMessage {\n\trole: \"user\";\n\tcontent: string | (TextContent | ImageContent)[];\n\ttimestamp: number; // Unix timestamp in milliseconds\n}\n\nexport interface AssistantMessage {\n\trole: \"assistant\";\n\tcontent: (TextContent | ThinkingContent | ToolCall | ProviderNativeContent)[];\n\tapi: Api;\n\tprovider: Provider;\n\tmodel: string;\n\tresponseModel?: string; // Concrete `chunk.model` when different from the requested `model` (e.g. OpenRouter `auto` -> `anthropic/...`)\n\tresponseId?: string; // Provider-specific response/message identifier when the upstream API exposes one\n\tdiagnostics?: AssistantMessageDiagnostic[]; // Redacted provider/runtime diagnostics for failures and recoveries.\n\tusage: Usage;\n\tstopReason: StopReason;\n\terrorMessage?: string;\n\ttimestamp: number; // Unix timestamp in milliseconds\n}\n\nexport interface ToolResultMessage<TDetails = any> {\n\trole: \"toolResult\";\n\ttoolCallId: string;\n\ttoolName: string;\n\tcontent: (TextContent | ImageContent)[]; // Supports text and images\n\tdetails?: TDetails;\n\tisError: boolean;\n\ttimestamp: number; // Unix timestamp in milliseconds\n}\n\nexport type Message = UserMessage | AssistantMessage | ToolResultMessage;\n\nexport type ImagesInputContent = TextContent | ImageContent;\nexport type ImagesOutputContent = TextContent | ImageContent;\n\nexport interface ImagesContext {\n\tinput: ImagesInputContent[];\n}\n\nexport type ImagesStopReason = \"stop\" | \"error\" | \"aborted\";\n\nexport interface AssistantImages {\n\tapi: ImagesApi;\n\tprovider: ImagesProvider;\n\tmodel: string;\n\toutput: ImagesOutputContent[];\n\tresponseId?: string;\n\tusage?: Usage;\n\tstopReason: ImagesStopReason;\n\terrorMessage?: string;\n\ttimestamp: number; // Unix timestamp in milliseconds\n}\n\nimport type { TSchema } from \"typebox\";\n\nexport interface FreeformToolFormat {\n\ttype: \"grammar\";\n\tsyntax: \"lark\";\n\tdefinition: string;\n}\n\nexport interface Tool<TParameters extends TSchema = TSchema> {\n\tname: string;\n\tdescription: string;\n\tparameters: TParameters;\n\tfreeform?: FreeformToolFormat;\n}\n\nexport interface Context {\n\tsystemPrompt?: string;\n\tmessages: Message[];\n\ttools?: Tool[];\n}\n\n/**\n * Event protocol for AssistantMessageEventStream.\n *\n * Streams should emit `start` before partial updates, then terminate with either:\n * - `done` carrying the final successful AssistantMessage, or\n * - `error` carrying the final AssistantMessage with stopReason \"error\" or \"aborted\"\n * and errorMessage.\n */\nexport type AssistantMessageEvent =\n\t| { type: \"start\"; partial: AssistantMessage }\n\t| { type: \"text_start\"; contentIndex: number; partial: AssistantMessage }\n\t| { type: \"text_delta\"; contentIndex: number; delta: string; partial: AssistantMessage }\n\t| { type: \"text_end\"; contentIndex: number; content: string; partial: AssistantMessage }\n\t| { type: \"thinking_start\"; contentIndex: number; partial: AssistantMessage }\n\t| { type: \"thinking_delta\"; contentIndex: number; delta: string; partial: AssistantMessage }\n\t| { type: \"thinking_end\"; contentIndex: number; content: string; partial: AssistantMessage }\n\t| { type: \"toolcall_start\"; contentIndex: number; partial: AssistantMessage }\n\t| { type: \"toolcall_delta\"; contentIndex: number; delta: string; partial: AssistantMessage }\n\t| { type: \"toolcall_end\"; contentIndex: number; toolCall: ToolCall; partial: AssistantMessage }\n\t| { type: \"done\"; reason: Extract<StopReason, \"stop\" | \"length\" | \"toolUse\">; message: AssistantMessage }\n\t| { type: \"error\"; reason: Extract<StopReason, \"aborted\" | \"error\">; error: AssistantMessage };\n\n/**\n * Compatibility settings for OpenAI-compatible completions APIs.\n * Use this to override URL-based auto-detection for custom providers.\n */\nexport interface OpenAICompletionsCompat {\n\t/** Whether the provider supports the `store` field. Default: auto-detected from URL. */\n\tsupportsStore?: boolean;\n\t/** Whether the provider supports the `developer` role (vs `system`). Default: auto-detected from URL. */\n\tsupportsDeveloperRole?: boolean;\n\t/** Whether the provider supports `reasoning_effort`. Default: auto-detected from URL. */\n\tsupportsReasoningEffort?: boolean;\n\t/** Whether the provider supports `stream_options: { include_usage: true }` for token usage in streaming responses. Default: true. */\n\tsupportsUsageInStreaming?: boolean;\n\t/** Which field to use for max tokens. Default: auto-detected from URL. */\n\tmaxTokensField?: \"max_completion_tokens\" | \"max_tokens\";\n\t/** Whether tool results require the `name` field. Default: auto-detected from URL. */\n\trequiresToolResultName?: boolean;\n\t/** Whether a user message after tool results requires an assistant message in between. Default: auto-detected from URL. */\n\trequiresAssistantAfterToolResult?: boolean;\n\t/** Whether thinking blocks must be converted to text blocks with <thinking> delimiters. Default: auto-detected from URL. */\n\trequiresThinkingAsText?: boolean;\n\t/** Whether all replayed assistant messages must include an empty reasoning_content field when reasoning is enabled. Default: auto-detected from URL. */\n\trequiresReasoningContentOnAssistantMessages?: boolean;\n\t/** Format for reasoning/thinking parameter. \"openai\" uses reasoning_effort, \"openrouter\" uses reasoning: { effort }, \"deepseek\" uses thinking: { type } plus reasoning_effort when supported, \"together\" uses reasoning: { enabled } plus reasoning_effort when supported, \"zai\" uses top-level enable_thinking: boolean, \"qwen\" uses top-level enable_thinking: boolean, \"qwen-chat-template\" uses chat_template_kwargs.enable_thinking, \"string-thinking\" uses top-level thinking: string, and \"ant-ling\" uses reasoning: { effort } only when the mapped effort is non-null. Default: \"openai\". */\n\tthinkingFormat?:\n\t\t| \"openai\"\n\t\t| \"openrouter\"\n\t\t| \"deepseek\"\n\t\t| \"together\"\n\t\t| \"zai\"\n\t\t| \"qwen\"\n\t\t| \"qwen-chat-template\"\n\t\t| \"string-thinking\"\n\t\t| \"ant-ling\";\n\t/** Whether the provider accepts explicit disabled-thinking markers when thinking is off. Default: true. */\n\tsupportsDisabledThinking?: boolean;\n\t/** OpenRouter-specific routing preferences. Only used when baseUrl points to OpenRouter. */\n\topenRouterRouting?: OpenRouterRouting;\n\t/** Vercel AI Gateway routing preferences. Only used when baseUrl points to Vercel AI Gateway. */\n\tvercelGatewayRouting?: VercelGatewayRouting;\n\t/** Whether z.ai supports top-level `tool_stream: true` for streaming tool call deltas. Default: false. */\n\tzaiToolStream?: boolean;\n\t/** Whether the provider supports the `strict` field in tool definitions. Default: true. */\n\tsupportsStrictMode?: boolean;\n\t/**\n\t * Tool call format for models that don't natively support tool calling.\n\t * When set, the middleware will intercept tool calls and format them as text.\n\t * Supported values: \"hermes\", \"xml\", \"yaml-xml\", \"gemma4-delimiter\"\n\t */\n\ttoolCallFormat?: string;\n\t/** Cache control convention for prompt caching. \"anthropic\" applies Anthropic-style `cache_control` markers to the system prompt, last tool definition, and last user/assistant text content. */\n\tcacheControlFormat?: \"anthropic\";\n\t/** Whether to send known session-affinity headers (`session_id`, `x-client-request-id`, `x-session-affinity`) from `options.sessionId` when caching is enabled. Default: false. */\n\tsendSessionAffinityHeaders?: boolean;\n\t/** Whether the provider supports long prompt cache retention (`prompt_cache_retention: \"24h\"` or Anthropic-style `cache_control.ttl: \"1h\"`, depending on format). Default: true. */\n\tsupportsLongCacheRetention?: boolean;\n}\n\n/** Compatibility settings for OpenAI Responses APIs. */\nexport interface OpenAIResponsesCompat {\n\t/** Whether to send the OpenAI `session_id` cache-affinity header from `options.sessionId` when caching is enabled. Default: true. */\n\tsendSessionIdHeader?: boolean;\n\t/** Whether the provider supports `prompt_cache_retention: \"24h\"`. Default: true. */\n\tsupportsLongCacheRetention?: boolean;\n\t/** Whether the provider supports the OpenAI Responses WebSocket transport. Default: true for api.openai.com only. */\n\tsupportsWebSocket?: boolean;\n\t/** Whether the provider supports the OpenAI Responses native `web_search_preview` tool. Default: true for api.openai.com only. */\n\tsupportsWebSearchPreview?: boolean;\n}\n\n/** Compatibility settings for Anthropic Messages-compatible APIs. */\nexport interface AnthropicMessagesCompat {\n\t/**\n\t * Whether the provider accepts per-tool `eager_input_streaming`.\n\t * When false, the Anthropic provider omits `tools[].eager_input_streaming`\n\t * and sends the legacy `fine-grained-tool-streaming-2025-05-14` beta header\n\t * for tool-enabled requests.\n\t * Default: true.\n\t */\n\tsupportsEagerToolInputStreaming?: boolean;\n\t/** Whether the provider supports Anthropic long cache retention (`cache_control.ttl: \"1h\"`). Default: true. */\n\tsupportsLongCacheRetention?: boolean;\n\t/**\n\t * Whether to send the `x-session-affinity` header from `options.sessionId`\n\t * when caching is enabled. Required for providers like Fireworks that use\n\t * session affinity for prompt cache routing (requests to the same replica\n\t * maximize cache hits).\n\t * Default: false.\n\t */\n\tsendSessionAffinityHeaders?: boolean;\n\t/**\n\t * Whether the provider supports Anthropic-style `cache_control` markers on\n\t * tool definitions. When false, `cache_control` is omitted from tool params.\n\t * Some Anthropic-compatible providers (e.g., Fireworks) do not support this\n\t * field on tools and may reject or ignore it.\n\t * Default: true.\n\t */\n\tsupportsCacheControlOnTools?: boolean;\n\t/**\n\t * Whether the provider accepts `thinking: { type: \"disabled\" }` when\n\t * extended thinking is off. Some Anthropic-compatible providers support\n\t * thinking but reject Anthropic's explicit disabled marker.\n\t * Default: true.\n\t */\n\tsupportsDisabledThinking?: boolean;\n\t/**\n\t * Whether the model accepts the Anthropic `temperature` request field.\n\t * Claude Opus 4.7+ rejects non-default temperature values.\n\t * Default: true.\n\t */\n\tsupportsTemperature?: boolean;\n\t/**\n\t * Whether to force adaptive thinking (`thinking.type: \"adaptive\"` plus\n\t * `output_config.effort`) regardless of the model id. Built-in models that\n\t * require adaptive thinking set this in generated metadata. Custom\n\t * Anthropic-compatible providers can set this to `true` for any model whose\n\t * upstream requires the adaptive format. Set to `false` to opt out on\n\t * overridden built-in models and disable model id/name inference.\n\t * Default: infer from adaptive Claude model ids/names when possible.\n\t */\n\tforceAdaptiveThinking?: boolean;\n\t/** Whether to replay empty thinking signatures as `signature: \"\"` instead of converting thinking to text. Default: false. */\n\tallowEmptySignature?: boolean;\n}\n\n/**\n * OpenRouter provider routing preferences.\n * Controls which upstream providers OpenRouter routes requests to.\n * Sent as the `provider` field in the OpenRouter API request body.\n * @see https://openrouter.ai/docs/guides/routing/provider-selection\n */\nexport interface OpenRouterRouting {\n\t/** Whether to allow backup providers to serve requests. Default: true. */\n\tallow_fallbacks?: boolean;\n\t/** Whether to filter providers to only those that support all parameters in the request. Default: false. */\n\trequire_parameters?: boolean;\n\t/** Data collection setting. \"allow\" (default): allow providers that may store/train on data. \"deny\": only use providers that don't collect user data. */\n\tdata_collection?: \"deny\" | \"allow\";\n\t/** Whether to restrict routing to only ZDR (Zero Data Retention) endpoints. */\n\tzdr?: boolean;\n\t/** Whether to restrict routing to only models that allow text distillation. */\n\tenforce_distillable_text?: boolean;\n\t/** An ordered list of provider names/slugs to try in sequence, falling back to the next if unavailable. */\n\torder?: string[];\n\t/** List of provider names/slugs to exclusively allow for this request. */\n\tonly?: string[];\n\t/** List of provider names/slugs to skip for this request. */\n\tignore?: string[];\n\t/** A list of quantization levels to filter providers by (e.g., [\"fp16\", \"bf16\", \"fp8\", \"fp6\", \"int8\", \"int4\", \"fp4\", \"fp32\"]). */\n\tquantizations?: string[];\n\t/** Sorting strategy. Can be a string (e.g., \"price\", \"throughput\", \"latency\") or an object with `by` and `partition`. */\n\tsort?:\n\t\t| string\n\t\t| {\n\t\t\t\t/** The sorting metric: \"price\", \"throughput\", \"latency\". */\n\t\t\t\tby?: string;\n\t\t\t\t/** Partitioning strategy: \"model\" (default) or \"none\". */\n\t\t\t\tpartition?: string | null;\n\t\t };\n\t/** Maximum price per million tokens (USD). */\n\tmax_price?: {\n\t\t/** Price per million prompt tokens. */\n\t\tprompt?: number | string;\n\t\t/** Price per million completion tokens. */\n\t\tcompletion?: number | string;\n\t\t/** Price per image. */\n\t\timage?: number | string;\n\t\t/** Price per audio unit. */\n\t\taudio?: number | string;\n\t\t/** Price per request. */\n\t\trequest?: number | string;\n\t};\n\t/** Preferred minimum throughput (tokens/second). Can be a number (applies to p50) or an object with percentile-specific cutoffs. */\n\tpreferred_min_throughput?:\n\t\t| number\n\t\t| {\n\t\t\t\t/** Minimum tokens/second at the 50th percentile. */\n\t\t\t\tp50?: number;\n\t\t\t\t/** Minimum tokens/second at the 75th percentile. */\n\t\t\t\tp75?: number;\n\t\t\t\t/** Minimum tokens/second at the 90th percentile. */\n\t\t\t\tp90?: number;\n\t\t\t\t/** Minimum tokens/second at the 99th percentile. */\n\t\t\t\tp99?: number;\n\t\t };\n\t/** Preferred maximum latency (seconds). Can be a number (applies to p50) or an object with percentile-specific cutoffs. */\n\tpreferred_max_latency?:\n\t\t| number\n\t\t| {\n\t\t\t\t/** Maximum latency in seconds at the 50th percentile. */\n\t\t\t\tp50?: number;\n\t\t\t\t/** Maximum latency in seconds at the 75th percentile. */\n\t\t\t\tp75?: number;\n\t\t\t\t/** Maximum latency in seconds at the 90th percentile. */\n\t\t\t\tp90?: number;\n\t\t\t\t/** Maximum latency in seconds at the 99th percentile. */\n\t\t\t\tp99?: number;\n\t\t };\n}\n\n/**\n * Vercel AI Gateway routing preferences.\n * Controls which upstream providers the gateway routes requests to.\n * @see https://vercel.com/docs/ai-gateway/models-and-providers/provider-options\n */\nexport interface VercelGatewayRouting {\n\t/** List of provider slugs to exclusively use for this request (e.g., [\"bedrock\", \"anthropic\"]). */\n\tonly?: string[];\n\t/** List of provider slugs to try in order (e.g., [\"anthropic\", \"openai\"]). */\n\torder?: string[];\n}\n\n// Model interface for the unified model system\nexport interface Model<TApi extends Api> {\n\tid: string;\n\tname: string;\n\tapi: TApi;\n\tprovider: Provider;\n\tbaseUrl: string;\n\treasoning: boolean;\n\t/**\n\t * Maps pi thinking levels to provider/model-specific values.\n\t * Missing keys use provider defaults. null marks a level as unsupported.\n\t */\n\tthinkingLevelMap?: ThinkingLevelMap;\n\tinput: (\"text\" | \"image\")[];\n\tcost: {\n\t\tinput: number; // $/million tokens\n\t\toutput: number; // $/million tokens\n\t\tcacheRead: number; // $/million tokens\n\t\tcacheWrite: number; // $/million tokens\n\t};\n\tcontextWindow: number;\n\tmaxTokens: number;\n\theaders?: Record<string, string>;\n\t/** Compatibility overrides for OpenAI-compatible APIs. If not set, auto-detected from baseUrl. */\n\tcompat?: TApi extends \"openai-completions\"\n\t\t? OpenAICompletionsCompat\n\t\t: TApi extends \"openai-responses\"\n\t\t\t? OpenAIResponsesCompat\n\t\t\t: TApi extends \"anthropic-messages\"\n\t\t\t\t? AnthropicMessagesCompat\n\t\t\t\t: never;\n}\n\nexport interface ImagesModel<TApi extends ImagesApi>\n\textends Omit<Model<Api>, \"api\" | \"provider\" | \"reasoning\" | \"contextWindow\" | \"maxTokens\" | \"compat\"> {\n\tapi: TApi;\n\tprovider: ImagesProvider;\n\toutput: (\"text\" | \"image\")[];\n}\n"]}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { AssistantMessageDiagnostic } from \"./utils/diagnostics.ts\";\nimport type { AssistantMessageEventStream } from \"./utils/event-stream.ts\";\n\nexport type { AssistantMessageEventStream } from \"./utils/event-stream.ts\";\n\nexport type KnownApi =\n\t| \"openai-completions\"\n\t| \"mistral-conversations\"\n\t| \"openai-responses\"\n\t| \"azure-openai-responses\"\n\t| \"openai-codex-responses\"\n\t| \"anthropic-messages\"\n\t| \"bedrock-converse-stream\"\n\t| \"google-generative-ai\"\n\t| \"google-vertex\";\n\nexport type Api = KnownApi | (string & {});\n\nexport type KnownImagesApi = \"openrouter-images\";\n\nexport type ImagesApi = KnownImagesApi | (string & {});\n\nexport type KnownProvider =\n\t| \"amazon-bedrock\"\n\t| \"ant-ling\"\n\t| \"anthropic\"\n\t| \"google\"\n\t| \"google-vertex\"\n\t| \"openai\"\n\t| \"azure-openai-responses\"\n\t| \"openai-codex\"\n\t| \"nvidia\"\n\t| \"deepseek\"\n\t| \"github-copilot\"\n\t| \"xai\"\n\t| \"groq\"\n\t| \"cerebras\"\n\t| \"openrouter\"\n\t| \"vercel-ai-gateway\"\n\t| \"zai\"\n\t| \"zai-coding-cn\"\n\t| \"mistral\"\n\t| \"minimax\"\n\t| \"minimax-cn\"\n\t| \"moonshotai\"\n\t| \"moonshotai-cn\"\n\t| \"huggingface\"\n\t| \"fireworks\"\n\t| \"together\"\n\t| \"opencode\"\n\t| \"opencode-go\"\n\t| \"kimi-coding\"\n\t| \"cloudflare-workers-ai\"\n\t| \"cloudflare-ai-gateway\"\n\t| \"xiaomi\"\n\t| \"xiaomi-token-plan-cn\"\n\t| \"xiaomi-token-plan-ams\"\n\t| \"xiaomi-token-plan-sgp\";\nexport type Provider = KnownProvider | string;\n\nexport type KnownImagesProvider = \"openrouter\";\n\nexport type ImagesProvider = KnownImagesProvider | string;\n\nexport type ThinkingLevel = \"minimal\" | \"low\" | \"medium\" | \"high\" | \"xhigh\" | \"max\";\nexport type ModelThinkingLevel = \"off\" | ThinkingLevel;\nexport type ThinkingLevelMap = Partial<Record<ModelThinkingLevel, string | null>>;\n\n/** Token budgets for each thinking level (token-based providers only) */\nexport interface ThinkingBudgets {\n\tminimal?: number;\n\tlow?: number;\n\tmedium?: number;\n\thigh?: number;\n}\n\n// Base options all providers share\nexport type CacheRetention = \"none\" | \"short\" | \"long\";\n\nexport type Transport = \"sse\" | \"websocket\" | \"websocket-cached\" | \"auto\";\n\nexport interface ProviderResponse {\n\tstatus: number;\n\theaders: Record<string, string>;\n}\n\nexport interface StreamOptions {\n\ttemperature?: number;\n\tmaxTokens?: number;\n\tsignal?: AbortSignal;\n\tapiKey?: string;\n\t/**\n\t * Preferred transport for providers that support multiple transports.\n\t * Providers that do not support this option ignore it.\n\t */\n\ttransport?: Transport;\n\t/**\n\t * Prompt cache retention preference. Providers map this to their supported values.\n\t * Default: \"short\".\n\t */\n\tcacheRetention?: CacheRetention;\n\t/**\n\t * Optional session identifier for providers that support session-based caching.\n\t * Providers can use this to enable prompt caching, request routing, or other\n\t * session-aware features. Ignored by providers that don't support it.\n\t */\n\tsessionId?: string;\n\t/**\n\t * Optional callback for inspecting or replacing provider payloads before sending.\n\t * Return undefined to keep the payload unchanged.\n\t */\n\tonPayload?: (payload: unknown, model: Model<Api>) => unknown | undefined | Promise<unknown | undefined>;\n\t/**\n\t * Optional callback invoked after an HTTP response is received and before\n\t * its body stream is consumed.\n\t */\n\tonResponse?: (response: ProviderResponse, model: Model<Api>) => void | Promise<void>;\n\t/**\n\t * Optional custom HTTP headers to include in API requests.\n\t * Merged with provider defaults; caller values override default headers.\n\t * On AWS Bedrock these are injected via a Smithy `build`-step middleware so\n\t * they are covered by SigV4 signing; reserved headers (`x-amz-*`,\n\t * `authorization`, `host`) are silently ignored to preserve SigV4 / bearer auth.\n\t */\n\theaders?: Record<string, string>;\n\t/**\n\t * Optional custom fields to merge into the outgoing provider request body.\n\t * Applied before `onPayload` so `onPayload` can observe/override them.\n\t * Provider-managed fields (e.g. `model`, `messages`, `stream`) are preserved\n\t * and cannot be overridden to avoid breaking core request semantics.\n\t */\n\textraBody?: Record<string, unknown>;\n\t/**\n\t * HTTP request timeout in milliseconds for providers/SDKs that support it.\n\t * For example, OpenAI and Anthropic SDK clients default to 10 minutes.\n\t */\n\ttimeoutMs?: number;\n\t/**\n\t * WebSocket connect timeout in milliseconds for providers that support\n\t * WebSocket transports. This covers the connection/open handshake only;\n\t * stream idleness after connection uses timeoutMs.\n\t */\n\twebsocketConnectTimeoutMs?: number;\n\t/**\n\t * Maximum retry attempts for providers/SDKs that support client-side retries.\n\t * For example, OpenAI and Anthropic SDK clients default to 2.\n\t */\n\tmaxRetries?: number;\n\t/**\n\t * Maximum delay in milliseconds to wait for a retry when the server requests a long wait.\n\t * If the server's requested delay exceeds this value, the request fails immediately\n\t * with an error containing the requested delay, allowing higher-level retry logic\n\t * to handle it with user visibility.\n\t * Default: 60000 (60 seconds). Set to 0 to disable the cap.\n\t */\n\tmaxRetryDelayMs?: number;\n\t/**\n\t * Optional metadata to include in API requests.\n\t * Providers extract the fields they understand and ignore the rest.\n\t * For example, Anthropic uses `user_id` for abuse tracking and rate limiting.\n\t */\n\tmetadata?: Record<string, unknown>;\n}\n\nexport type ProviderStreamOptions = StreamOptions & Record<string, unknown>;\n\nexport interface ImagesOptions {\n\tsignal?: AbortSignal;\n\tapiKey?: string;\n\t/**\n\t * Optional callback for inspecting or replacing provider payloads before sending.\n\t * Return undefined to keep the payload unchanged.\n\t */\n\tonPayload?: (payload: unknown, model: ImagesModel<ImagesApi>) => unknown | undefined | Promise<unknown | undefined>;\n\t/**\n\t * Optional callback invoked after an HTTP response is received.\n\t */\n\tonResponse?: (response: ProviderResponse, model: ImagesModel<ImagesApi>) => void | Promise<void>;\n\t/**\n\t * Optional custom HTTP headers to include in API requests.\n\t * Merged with provider defaults; can override default headers.\n\t */\n\theaders?: Record<string, string>;\n\t/**\n\t * HTTP request timeout in milliseconds for providers/SDKs that support it.\n\t */\n\ttimeoutMs?: number;\n\t/**\n\t * Maximum retry attempts for providers/SDKs that support client-side retries.\n\t */\n\tmaxRetries?: number;\n\t/**\n\t * Maximum delay in milliseconds to wait for a retry when the server requests a long wait.\n\t * If the server's requested delay exceeds this value, the request fails immediately\n\t * with an error containing the requested delay, allowing higher-level retry logic\n\t * to handle it with user visibility.\n\t * Default: 60000 (60 seconds). Set to 0 to disable the cap.\n\t */\n\tmaxRetryDelayMs?: number;\n\t/**\n\t * Optional metadata to include in API requests.\n\t * Providers extract the fields they understand and ignore the rest.\n\t */\n\tmetadata?: Record<string, unknown>;\n}\n\nexport type ProviderImagesOptions = ImagesOptions & Record<string, unknown>;\n\n// Unified options with reasoning passed to streamSimple() and completeSimple()\nexport interface SimpleStreamOptions extends StreamOptions {\n\treasoning?: ThinkingLevel;\n\t/** Custom token budgets for thinking levels (token-based providers only) */\n\tthinkingBudgets?: ThinkingBudgets;\n}\n\n// Generic StreamFunction with typed options.\n//\n// Contract:\n// - Must return an AssistantMessageEventStream.\n// - Once invoked, request/model/runtime failures should be encoded in the\n// returned stream, not thrown.\n// - Error termination must produce an AssistantMessage with stopReason\n// \"error\" or \"aborted\" and errorMessage, emitted via the stream protocol.\nexport type StreamFunction<TApi extends Api = Api, TOptions extends StreamOptions = StreamOptions> = (\n\tmodel: Model<TApi>,\n\tcontext: Context,\n\toptions?: TOptions,\n) => AssistantMessageEventStream;\n\nexport type ImagesFunction<TApi extends ImagesApi = ImagesApi, TOptions extends ImagesOptions = ImagesOptions> = (\n\tmodel: ImagesModel<TApi>,\n\tcontext: ImagesContext,\n\toptions?: TOptions,\n) => Promise<AssistantImages>;\n\nexport interface TextSignatureV1 {\n\tv: 1;\n\tid: string;\n\tphase?: \"commentary\" | \"final_answer\";\n}\n\nexport interface TextContent {\n\ttype: \"text\";\n\ttext: string;\n\ttextSignature?: string; // e.g., for OpenAI responses, message metadata (legacy id string or TextSignatureV1 JSON)\n}\n\nexport interface ThinkingContent {\n\ttype: \"thinking\";\n\tthinking: string;\n\tthinkingSignature?: string; // e.g., for OpenAI responses, the reasoning item ID\n\t/** When true, the thinking content was redacted by safety filters. The opaque\n\t * encrypted payload is stored in `thinkingSignature` so it can be passed back\n\t * to the API for multi-turn continuity. */\n\tredacted?: boolean;\n}\n\nexport interface ImageContent {\n\ttype: \"image\";\n\tdata: string; // base64 encoded image data\n\tmimeType: string; // e.g., \"image/jpeg\", \"image/png\"\n}\n\nexport interface ToolCall {\n\ttype: \"toolCall\";\n\tid: string;\n\tname: string;\n\targuments: Record<string, any>;\n\tthoughtSignature?: string; // Google-specific: opaque signature for reusing thought context\n}\n\n/**\n * Provider-emitted content block whose semantics are owned by the originating\n * provider. Surfaces server-side tool invocations (web_search), server-side\n * tool results (web_search_tool_result), code execution traces, grounding\n * metadata fragments, and any other vendor-specific block the core does not\n * normalize.\n *\n * `subtype` mirrors the provider's wire `type` discriminator (e.g.\n * \"server_tool_use\", \"web_search_tool_result\", \"executableCode\"). `raw` is\n * the verbatim wire payload — extensions interpret it per provider+subtype.\n *\n * The owning provider id lives on the parent `AssistantMessage.provider`, not\n * here, to avoid drift on replay.\n *\n * On replay across providers, `convertMessages` implementations MUST drop\n * these blocks (they are not portable). This mirrors the existing\n * `redacted_thinking` skip pattern.\n */\nexport interface ProviderNativeContent {\n\ttype: \"providerNative\";\n\tsubtype: string;\n\traw: unknown;\n}\n\nexport interface Usage {\n\tinput: number;\n\toutput: number;\n\tcacheRead: number;\n\tcacheWrite: number;\n\ttotalTokens: number;\n\tcost: {\n\t\tinput: number;\n\t\toutput: number;\n\t\tcacheRead: number;\n\t\tcacheWrite: number;\n\t\ttotal: number;\n\t};\n}\n\nexport type StopReason = \"stop\" | \"length\" | \"toolUse\" | \"error\" | \"aborted\";\n\nexport interface UserMessage {\n\trole: \"user\";\n\tcontent: string | (TextContent | ImageContent)[];\n\ttimestamp: number; // Unix timestamp in milliseconds\n}\n\nexport interface AssistantMessage {\n\trole: \"assistant\";\n\tcontent: (TextContent | ThinkingContent | ToolCall | ProviderNativeContent)[];\n\tapi: Api;\n\tprovider: Provider;\n\tmodel: string;\n\tresponseModel?: string; // Concrete `chunk.model` when different from the requested `model` (e.g. OpenRouter `auto` -> `anthropic/...`)\n\tresponseId?: string; // Provider-specific response/message identifier when the upstream API exposes one\n\tdiagnostics?: AssistantMessageDiagnostic[]; // Redacted provider/runtime diagnostics for failures and recoveries.\n\tusage: Usage;\n\tstopReason: StopReason;\n\terrorMessage?: string;\n\ttimestamp: number; // Unix timestamp in milliseconds\n}\n\nexport interface ToolResultMessage<TDetails = any> {\n\trole: \"toolResult\";\n\ttoolCallId: string;\n\ttoolName: string;\n\tcontent: (TextContent | ImageContent)[]; // Supports text and images\n\tdetails?: TDetails;\n\tisError: boolean;\n\ttimestamp: number; // Unix timestamp in milliseconds\n}\n\nexport type Message = UserMessage | AssistantMessage | ToolResultMessage;\n\nexport type ImagesInputContent = TextContent | ImageContent;\nexport type ImagesOutputContent = TextContent | ImageContent;\n\nexport interface ImagesContext {\n\tinput: ImagesInputContent[];\n}\n\nexport type ImagesStopReason = \"stop\" | \"error\" | \"aborted\";\n\nexport interface AssistantImages {\n\tapi: ImagesApi;\n\tprovider: ImagesProvider;\n\tmodel: string;\n\toutput: ImagesOutputContent[];\n\tresponseId?: string;\n\tusage?: Usage;\n\tstopReason: ImagesStopReason;\n\terrorMessage?: string;\n\ttimestamp: number; // Unix timestamp in milliseconds\n}\n\nimport type { TSchema } from \"typebox\";\n\nexport interface FreeformToolFormat {\n\ttype: \"grammar\";\n\tsyntax: \"lark\";\n\tdefinition: string;\n}\n\nexport interface Tool<TParameters extends TSchema = TSchema> {\n\tname: string;\n\tdescription: string;\n\tparameters: TParameters;\n\tfreeform?: FreeformToolFormat;\n}\n\nexport interface Context {\n\tsystemPrompt?: string;\n\tmessages: Message[];\n\ttools?: Tool[];\n}\n\n/**\n * Event protocol for AssistantMessageEventStream.\n *\n * Streams should emit `start` before partial updates, then terminate with either:\n * - `done` carrying the final successful AssistantMessage, or\n * - `error` carrying the final AssistantMessage with stopReason \"error\" or \"aborted\"\n * and errorMessage.\n */\nexport type AssistantMessageEvent =\n\t| { type: \"start\"; partial: AssistantMessage }\n\t| { type: \"text_start\"; contentIndex: number; partial: AssistantMessage }\n\t| { type: \"text_delta\"; contentIndex: number; delta: string; partial: AssistantMessage }\n\t| { type: \"text_end\"; contentIndex: number; content: string; partial: AssistantMessage }\n\t| { type: \"thinking_start\"; contentIndex: number; partial: AssistantMessage }\n\t| { type: \"thinking_delta\"; contentIndex: number; delta: string; partial: AssistantMessage }\n\t| { type: \"thinking_end\"; contentIndex: number; content: string; partial: AssistantMessage }\n\t| { type: \"toolcall_start\"; contentIndex: number; partial: AssistantMessage }\n\t| { type: \"toolcall_delta\"; contentIndex: number; delta: string; partial: AssistantMessage }\n\t| { type: \"toolcall_end\"; contentIndex: number; toolCall: ToolCall; partial: AssistantMessage }\n\t| { type: \"done\"; reason: Extract<StopReason, \"stop\" | \"length\" | \"toolUse\">; message: AssistantMessage }\n\t| { type: \"error\"; reason: Extract<StopReason, \"aborted\" | \"error\">; error: AssistantMessage };\n\n/**\n * Compatibility settings for OpenAI-compatible completions APIs.\n * Use this to override URL-based auto-detection for custom providers.\n */\nexport interface OpenAICompletionsCompat {\n\t/** Whether the provider supports the `store` field. Default: auto-detected from URL. */\n\tsupportsStore?: boolean;\n\t/** Whether the provider supports the `developer` role (vs `system`). Default: auto-detected from URL. */\n\tsupportsDeveloperRole?: boolean;\n\t/** Whether the provider supports `reasoning_effort`. Default: auto-detected from URL. */\n\tsupportsReasoningEffort?: boolean;\n\t/** Whether the provider supports `stream_options: { include_usage: true }` for token usage in streaming responses. Default: true. */\n\tsupportsUsageInStreaming?: boolean;\n\t/** Which field to use for max tokens. Default: auto-detected from URL. */\n\tmaxTokensField?: \"max_completion_tokens\" | \"max_tokens\";\n\t/** Whether tool results require the `name` field. Default: auto-detected from URL. */\n\trequiresToolResultName?: boolean;\n\t/** Whether a user message after tool results requires an assistant message in between. Default: auto-detected from URL. */\n\trequiresAssistantAfterToolResult?: boolean;\n\t/** Whether thinking blocks must be converted to text blocks with <thinking> delimiters. Default: auto-detected from URL. */\n\trequiresThinkingAsText?: boolean;\n\t/** Whether all replayed assistant messages must include an empty reasoning_content field when reasoning is enabled. Default: auto-detected from URL. */\n\trequiresReasoningContentOnAssistantMessages?: boolean;\n\t/** Format for reasoning/thinking parameter. \"openai\" uses reasoning_effort, \"openrouter\" uses reasoning: { effort }, \"deepseek\" uses thinking: { type } plus reasoning_effort when supported, \"together\" uses reasoning: { enabled } plus reasoning_effort when supported, \"zai\" uses top-level enable_thinking: boolean, \"qwen\" uses top-level enable_thinking: boolean, \"qwen-chat-template\" uses chat_template_kwargs.enable_thinking, \"string-thinking\" uses top-level thinking: string, and \"ant-ling\" uses reasoning: { effort } only when the mapped effort is non-null. Default: \"openai\". */\n\tthinkingFormat?:\n\t\t| \"openai\"\n\t\t| \"openrouter\"\n\t\t| \"deepseek\"\n\t\t| \"together\"\n\t\t| \"zai\"\n\t\t| \"qwen\"\n\t\t| \"qwen-chat-template\"\n\t\t| \"string-thinking\"\n\t\t| \"ant-ling\";\n\t/** Whether the provider accepts explicit disabled-thinking markers when thinking is off. Default: true. */\n\tsupportsDisabledThinking?: boolean;\n\t/** OpenRouter-specific routing preferences. Only used when baseUrl points to OpenRouter. */\n\topenRouterRouting?: OpenRouterRouting;\n\t/** Vercel AI Gateway routing preferences. Only used when baseUrl points to Vercel AI Gateway. */\n\tvercelGatewayRouting?: VercelGatewayRouting;\n\t/** Whether z.ai supports top-level `tool_stream: true` for streaming tool call deltas. Default: false. */\n\tzaiToolStream?: boolean;\n\t/** Whether the provider supports the `strict` field in tool definitions. Default: true. */\n\tsupportsStrictMode?: boolean;\n\t/**\n\t * Tool call format for models that don't natively support tool calling.\n\t * When set, the middleware will intercept tool calls and format them as text.\n\t * Supported values: \"hermes\", \"xml\", \"yaml-xml\", \"gemma4-delimiter\"\n\t */\n\ttoolCallFormat?: string;\n\t/** Cache control convention for prompt caching. \"anthropic\" applies Anthropic-style `cache_control` markers to the system prompt, last tool definition, and last user/assistant text content. */\n\tcacheControlFormat?: \"anthropic\";\n\t/** Whether to send known session-affinity headers (`session_id`, `x-client-request-id`, `x-session-affinity`) from `options.sessionId` when caching is enabled. Default: false. */\n\tsendSessionAffinityHeaders?: boolean;\n\t/** Whether the provider supports long prompt cache retention (`prompt_cache_retention: \"24h\"` or Anthropic-style `cache_control.ttl: \"1h\"`, depending on format). Default: true. */\n\tsupportsLongCacheRetention?: boolean;\n}\n\n/** Compatibility settings for OpenAI Responses APIs. */\nexport interface OpenAIResponsesCompat {\n\t/** Whether to send the OpenAI `session_id` cache-affinity header from `options.sessionId` when caching is enabled. Default: true. */\n\tsendSessionIdHeader?: boolean;\n\t/** Whether the provider supports `prompt_cache_retention: \"24h\"`. Default: true. */\n\tsupportsLongCacheRetention?: boolean;\n\t/** Whether the provider supports the OpenAI Responses WebSocket transport. Default: true for api.openai.com only. */\n\tsupportsWebSocket?: boolean;\n\t/** Whether the provider supports the OpenAI Responses native `web_search_preview` tool. Default: true for api.openai.com only. */\n\tsupportsWebSearchPreview?: boolean;\n}\n\n/** Compatibility settings for Anthropic Messages-compatible APIs. */\nexport interface AnthropicMessagesCompat {\n\t/**\n\t * Whether the provider accepts per-tool `eager_input_streaming`.\n\t * When false, the Anthropic provider omits `tools[].eager_input_streaming`\n\t * and sends the legacy `fine-grained-tool-streaming-2025-05-14` beta header\n\t * for tool-enabled requests.\n\t * Default: true.\n\t */\n\tsupportsEagerToolInputStreaming?: boolean;\n\t/** Whether the provider supports Anthropic long cache retention (`cache_control.ttl: \"1h\"`). Default: true. */\n\tsupportsLongCacheRetention?: boolean;\n\t/**\n\t * Whether to send the `x-session-affinity` header from `options.sessionId`\n\t * when caching is enabled. Required for providers like Fireworks that use\n\t * session affinity for prompt cache routing (requests to the same replica\n\t * maximize cache hits).\n\t * Default: false.\n\t */\n\tsendSessionAffinityHeaders?: boolean;\n\t/**\n\t * Whether the provider supports Anthropic-style `cache_control` markers on\n\t * tool definitions. When false, `cache_control` is omitted from tool params.\n\t * Some Anthropic-compatible providers (e.g., Fireworks) do not support this\n\t * field on tools and may reject or ignore it.\n\t * Default: true.\n\t */\n\tsupportsCacheControlOnTools?: boolean;\n\t/**\n\t * Whether the provider accepts `thinking: { type: \"disabled\" }` when\n\t * extended thinking is off. Some Anthropic-compatible providers support\n\t * thinking but reject Anthropic's explicit disabled marker.\n\t * Default: true.\n\t */\n\tsupportsDisabledThinking?: boolean;\n\t/**\n\t * Whether the model accepts the Anthropic `temperature` request field.\n\t * Claude Opus 4.7+ rejects non-default temperature values.\n\t * Default: true.\n\t */\n\tsupportsTemperature?: boolean;\n\t/**\n\t * Whether to force adaptive thinking (`thinking.type: \"adaptive\"` plus\n\t * `output_config.effort`) regardless of the model id. Built-in models that\n\t * require adaptive thinking set this in generated metadata. Custom\n\t * Anthropic-compatible providers can set this to `true` for any model whose\n\t * upstream requires the adaptive format. Set to `false` to opt out on\n\t * overridden built-in models and disable model id/name inference.\n\t * Default: infer from adaptive Claude model ids/names when possible.\n\t */\n\tforceAdaptiveThinking?: boolean;\n\t/** Whether to replay empty thinking signatures as `signature: \"\"` instead of converting thinking to text. Default: false. */\n\tallowEmptySignature?: boolean;\n}\n\n/**\n * OpenRouter provider routing preferences.\n * Controls which upstream providers OpenRouter routes requests to.\n * Sent as the `provider` field in the OpenRouter API request body.\n * @see https://openrouter.ai/docs/guides/routing/provider-selection\n */\nexport interface OpenRouterRouting {\n\t/** Whether to allow backup providers to serve requests. Default: true. */\n\tallow_fallbacks?: boolean;\n\t/** Whether to filter providers to only those that support all parameters in the request. Default: false. */\n\trequire_parameters?: boolean;\n\t/** Data collection setting. \"allow\" (default): allow providers that may store/train on data. \"deny\": only use providers that don't collect user data. */\n\tdata_collection?: \"deny\" | \"allow\";\n\t/** Whether to restrict routing to only ZDR (Zero Data Retention) endpoints. */\n\tzdr?: boolean;\n\t/** Whether to restrict routing to only models that allow text distillation. */\n\tenforce_distillable_text?: boolean;\n\t/** An ordered list of provider names/slugs to try in sequence, falling back to the next if unavailable. */\n\torder?: string[];\n\t/** List of provider names/slugs to exclusively allow for this request. */\n\tonly?: string[];\n\t/** List of provider names/slugs to skip for this request. */\n\tignore?: string[];\n\t/** A list of quantization levels to filter providers by (e.g., [\"fp16\", \"bf16\", \"fp8\", \"fp6\", \"int8\", \"int4\", \"fp4\", \"fp32\"]). */\n\tquantizations?: string[];\n\t/** Sorting strategy. Can be a string (e.g., \"price\", \"throughput\", \"latency\") or an object with `by` and `partition`. */\n\tsort?:\n\t\t| string\n\t\t| {\n\t\t\t\t/** The sorting metric: \"price\", \"throughput\", \"latency\". */\n\t\t\t\tby?: string;\n\t\t\t\t/** Partitioning strategy: \"model\" (default) or \"none\". */\n\t\t\t\tpartition?: string | null;\n\t\t };\n\t/** Maximum price per million tokens (USD). */\n\tmax_price?: {\n\t\t/** Price per million prompt tokens. */\n\t\tprompt?: number | string;\n\t\t/** Price per million completion tokens. */\n\t\tcompletion?: number | string;\n\t\t/** Price per image. */\n\t\timage?: number | string;\n\t\t/** Price per audio unit. */\n\t\taudio?: number | string;\n\t\t/** Price per request. */\n\t\trequest?: number | string;\n\t};\n\t/** Preferred minimum throughput (tokens/second). Can be a number (applies to p50) or an object with percentile-specific cutoffs. */\n\tpreferred_min_throughput?:\n\t\t| number\n\t\t| {\n\t\t\t\t/** Minimum tokens/second at the 50th percentile. */\n\t\t\t\tp50?: number;\n\t\t\t\t/** Minimum tokens/second at the 75th percentile. */\n\t\t\t\tp75?: number;\n\t\t\t\t/** Minimum tokens/second at the 90th percentile. */\n\t\t\t\tp90?: number;\n\t\t\t\t/** Minimum tokens/second at the 99th percentile. */\n\t\t\t\tp99?: number;\n\t\t };\n\t/** Preferred maximum latency (seconds). Can be a number (applies to p50) or an object with percentile-specific cutoffs. */\n\tpreferred_max_latency?:\n\t\t| number\n\t\t| {\n\t\t\t\t/** Maximum latency in seconds at the 50th percentile. */\n\t\t\t\tp50?: number;\n\t\t\t\t/** Maximum latency in seconds at the 75th percentile. */\n\t\t\t\tp75?: number;\n\t\t\t\t/** Maximum latency in seconds at the 90th percentile. */\n\t\t\t\tp90?: number;\n\t\t\t\t/** Maximum latency in seconds at the 99th percentile. */\n\t\t\t\tp99?: number;\n\t\t };\n}\n\n/**\n * Vercel AI Gateway routing preferences.\n * Controls which upstream providers the gateway routes requests to.\n * @see https://vercel.com/docs/ai-gateway/models-and-providers/provider-options\n */\nexport interface VercelGatewayRouting {\n\t/** List of provider slugs to exclusively use for this request (e.g., [\"bedrock\", \"anthropic\"]). */\n\tonly?: string[];\n\t/** List of provider slugs to try in order (e.g., [\"anthropic\", \"openai\"]). */\n\torder?: string[];\n}\n\n// Model interface for the unified model system\nexport interface Model<TApi extends Api> {\n\tid: string;\n\tname: string;\n\tapi: TApi;\n\tprovider: Provider;\n\tbaseUrl: string;\n\treasoning: boolean;\n\t/**\n\t * Maps pi thinking levels to provider/model-specific values.\n\t * Missing keys use provider defaults. null marks a level as unsupported.\n\t */\n\tthinkingLevelMap?: ThinkingLevelMap;\n\tinput: (\"text\" | \"image\")[];\n\tcost: {\n\t\tinput: number; // $/million tokens\n\t\toutput: number; // $/million tokens\n\t\tcacheRead: number; // $/million tokens\n\t\tcacheWrite: number; // $/million tokens\n\t};\n\tcontextWindow: number;\n\tmaxTokens: number;\n\theaders?: Record<string, string>;\n\t/** Compatibility overrides for OpenAI-compatible APIs. If not set, auto-detected from baseUrl. */\n\tcompat?: TApi extends \"openai-completions\"\n\t\t? OpenAICompletionsCompat\n\t\t: TApi extends \"openai-responses\"\n\t\t\t? OpenAIResponsesCompat\n\t\t\t: TApi extends \"anthropic-messages\"\n\t\t\t\t? AnthropicMessagesCompat\n\t\t\t\t: never;\n}\n\nexport interface ImagesModel<TApi extends ImagesApi>\n\textends Omit<Model<Api>, \"api\" | \"provider\" | \"reasoning\" | \"contextWindow\" | \"maxTokens\" | \"compat\"> {\n\tapi: TApi;\n\tprovider: ImagesProvider;\n\toutput: (\"text\" | \"image\")[];\n}\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { AssistantMessageDiagnostic } from \"./utils/diagnostics.ts\";\nimport type { AssistantMessageEventStream } from \"./utils/event-stream.ts\";\n\nexport type { AssistantMessageEventStream } from \"./utils/event-stream.ts\";\n\nexport type KnownApi =\n\t| \"openai-completions\"\n\t| \"mistral-conversations\"\n\t| \"openai-responses\"\n\t| \"azure-openai-responses\"\n\t| \"openai-codex-responses\"\n\t| \"anthropic-messages\"\n\t| \"bedrock-converse-stream\"\n\t| \"google-generative-ai\"\n\t| \"google-vertex\";\n\nexport type Api = KnownApi | (string & {});\n\nexport type KnownImagesApi = \"openrouter-images\";\n\nexport type ImagesApi = KnownImagesApi | (string & {});\n\nexport type KnownProvider =\n\t| \"amazon-bedrock\"\n\t| \"ant-ling\"\n\t| \"anthropic\"\n\t| \"google\"\n\t| \"google-vertex\"\n\t| \"openai\"\n\t| \"azure-openai-responses\"\n\t| \"openai-codex\"\n\t| \"nvidia\"\n\t| \"deepseek\"\n\t| \"github-copilot\"\n\t| \"xai\"\n\t| \"groq\"\n\t| \"cerebras\"\n\t| \"openrouter\"\n\t| \"vercel-ai-gateway\"\n\t| \"zai\"\n\t| \"zai-coding-cn\"\n\t| \"mistral\"\n\t| \"minimax\"\n\t| \"minimax-cn\"\n\t| \"moonshotai\"\n\t| \"moonshotai-cn\"\n\t| \"huggingface\"\n\t| \"fireworks\"\n\t| \"together\"\n\t| \"opencode\"\n\t| \"opencode-go\"\n\t| \"kimi-coding\"\n\t| \"cloudflare-workers-ai\"\n\t| \"cloudflare-ai-gateway\"\n\t| \"xiaomi\"\n\t| \"xiaomi-token-plan-cn\"\n\t| \"xiaomi-token-plan-ams\"\n\t| \"xiaomi-token-plan-sgp\";\nexport type Provider = KnownProvider | string;\n\nexport type KnownImagesProvider = \"openrouter\";\n\nexport type ImagesProvider = KnownImagesProvider | string;\n\nexport type ThinkingLevel = \"minimal\" | \"low\" | \"medium\" | \"high\" | \"xhigh\" | \"max\";\nexport type ModelThinkingLevel = \"off\" | ThinkingLevel;\nexport type ThinkingLevelMap = Partial<Record<ModelThinkingLevel, string | null>>;\n\n/** Token budgets for each thinking level (token-based providers only) */\nexport interface ThinkingBudgets {\n\tminimal?: number;\n\tlow?: number;\n\tmedium?: number;\n\thigh?: number;\n}\n\n// Base options all providers share\nexport type CacheRetention = \"none\" | \"short\" | \"long\";\n\nexport type Transport = \"sse\" | \"websocket\" | \"websocket-cached\" | \"auto\";\n\nexport interface ProviderResponse {\n\tstatus: number;\n\theaders: Record<string, string>;\n}\n\nexport interface StreamOptions {\n\ttemperature?: number;\n\tmaxTokens?: number;\n\tsignal?: AbortSignal;\n\tapiKey?: string;\n\t/**\n\t * Preferred transport for providers that support multiple transports.\n\t * Providers that do not support this option ignore it.\n\t */\n\ttransport?: Transport;\n\t/**\n\t * Prompt cache retention preference. Providers map this to their supported values.\n\t * Default: \"short\".\n\t */\n\tcacheRetention?: CacheRetention;\n\t/**\n\t * Optional session identifier for providers that support session-based caching.\n\t * Providers can use this to enable prompt caching, request routing, or other\n\t * session-aware features. Ignored by providers that don't support it.\n\t */\n\tsessionId?: string;\n\t/**\n\t * Optional callback for inspecting or replacing provider payloads before sending.\n\t * Return undefined to keep the payload unchanged.\n\t */\n\tonPayload?: (payload: unknown, model: Model<Api>) => unknown | undefined | Promise<unknown | undefined>;\n\t/**\n\t * Optional callback invoked after an HTTP response is received and before\n\t * its body stream is consumed.\n\t */\n\tonResponse?: (response: ProviderResponse, model: Model<Api>) => void | Promise<void>;\n\t/**\n\t * Optional custom HTTP headers to include in API requests.\n\t * Merged with provider defaults; caller values override default headers.\n\t * On AWS Bedrock these are injected via a Smithy `build`-step middleware so\n\t * they are covered by SigV4 signing; reserved headers (`x-amz-*`,\n\t * `authorization`, `host`) are silently ignored to preserve SigV4 / bearer auth.\n\t */\n\theaders?: Record<string, string>;\n\t/**\n\t * Optional custom fields to merge into the outgoing provider request body.\n\t * Applied before `onPayload` so `onPayload` can observe/override them.\n\t * Provider-managed fields (e.g. `model`, `messages`, `stream`) are preserved\n\t * and cannot be overridden to avoid breaking core request semantics.\n\t */\n\textraBody?: Record<string, unknown>;\n\t/**\n\t * HTTP request timeout in milliseconds for providers/SDKs that support it.\n\t * For example, OpenAI and Anthropic SDK clients default to 10 minutes.\n\t */\n\ttimeoutMs?: number;\n\t/**\n\t * WebSocket connect timeout in milliseconds for providers that support\n\t * WebSocket transports. This covers the connection/open handshake only;\n\t * stream idleness after connection uses timeoutMs.\n\t */\n\twebsocketConnectTimeoutMs?: number;\n\t/**\n\t * Maximum retry attempts for providers/SDKs that support client-side retries.\n\t * For example, OpenAI and Anthropic SDK clients default to 2.\n\t */\n\tmaxRetries?: number;\n\t/**\n\t * Maximum delay in milliseconds to wait for a retry when the server requests a long wait.\n\t * If the server's requested delay exceeds this value, the request fails immediately\n\t * with an error containing the requested delay, allowing higher-level retry logic\n\t * to handle it with user visibility.\n\t * Default: 60000 (60 seconds). Set to 0 to disable the cap.\n\t */\n\tmaxRetryDelayMs?: number;\n\t/**\n\t * Optional metadata to include in API requests.\n\t * Providers extract the fields they understand and ignore the rest.\n\t * For example, Anthropic uses `user_id` for abuse tracking and rate limiting.\n\t */\n\tmetadata?: Record<string, unknown>;\n}\n\nexport type ProviderStreamOptions = StreamOptions & Record<string, unknown>;\n\nexport interface ImagesOptions {\n\tsignal?: AbortSignal;\n\tapiKey?: string;\n\t/**\n\t * Optional callback for inspecting or replacing provider payloads before sending.\n\t * Return undefined to keep the payload unchanged.\n\t */\n\tonPayload?: (payload: unknown, model: ImagesModel<ImagesApi>) => unknown | undefined | Promise<unknown | undefined>;\n\t/**\n\t * Optional callback invoked after an HTTP response is received.\n\t */\n\tonResponse?: (response: ProviderResponse, model: ImagesModel<ImagesApi>) => void | Promise<void>;\n\t/**\n\t * Optional custom HTTP headers to include in API requests.\n\t * Merged with provider defaults; can override default headers.\n\t */\n\theaders?: Record<string, string>;\n\t/**\n\t * HTTP request timeout in milliseconds for providers/SDKs that support it.\n\t */\n\ttimeoutMs?: number;\n\t/**\n\t * Maximum retry attempts for providers/SDKs that support client-side retries.\n\t */\n\tmaxRetries?: number;\n\t/**\n\t * Maximum delay in milliseconds to wait for a retry when the server requests a long wait.\n\t * If the server's requested delay exceeds this value, the request fails immediately\n\t * with an error containing the requested delay, allowing higher-level retry logic\n\t * to handle it with user visibility.\n\t * Default: 60000 (60 seconds). Set to 0 to disable the cap.\n\t */\n\tmaxRetryDelayMs?: number;\n\t/**\n\t * Optional metadata to include in API requests.\n\t * Providers extract the fields they understand and ignore the rest.\n\t */\n\tmetadata?: Record<string, unknown>;\n}\n\nexport type ProviderImagesOptions = ImagesOptions & Record<string, unknown>;\n\n// Unified options with reasoning passed to streamSimple() and completeSimple()\nexport interface SimpleStreamOptions extends StreamOptions {\n\treasoning?: ThinkingLevel;\n\t/** Custom token budgets for thinking levels (token-based providers only) */\n\tthinkingBudgets?: ThinkingBudgets;\n}\n\n// Generic StreamFunction with typed options.\n//\n// Contract:\n// - Must return an AssistantMessageEventStream.\n// - Once invoked, request/model/runtime failures should be encoded in the\n// returned stream, not thrown.\n// - Error termination must produce an AssistantMessage with stopReason\n// \"error\" or \"aborted\" and errorMessage, emitted via the stream protocol.\nexport type StreamFunction<TApi extends Api = Api, TOptions extends StreamOptions = StreamOptions> = (\n\tmodel: Model<TApi>,\n\tcontext: Context,\n\toptions?: TOptions,\n) => AssistantMessageEventStream;\n\nexport type ImagesFunction<TApi extends ImagesApi = ImagesApi, TOptions extends ImagesOptions = ImagesOptions> = (\n\tmodel: ImagesModel<TApi>,\n\tcontext: ImagesContext,\n\toptions?: TOptions,\n) => Promise<AssistantImages>;\n\nexport interface TextSignatureV1 {\n\tv: 1;\n\tid: string;\n\tphase?: \"commentary\" | \"final_answer\";\n}\n\nexport interface TextContent {\n\ttype: \"text\";\n\ttext: string;\n\ttextSignature?: string; // e.g., for OpenAI responses, message metadata (legacy id string or TextSignatureV1 JSON)\n}\n\nexport interface ThinkingContent {\n\ttype: \"thinking\";\n\tthinking: string;\n\tthinkingSignature?: string; // e.g., for OpenAI responses, the reasoning item ID\n\t/** When true, the thinking content was redacted by safety filters. The opaque\n\t * encrypted payload is stored in `thinkingSignature` so it can be passed back\n\t * to the API for multi-turn continuity. */\n\tredacted?: boolean;\n}\n\nexport interface ImageContent {\n\ttype: \"image\";\n\tdata: string; // base64 encoded image data\n\tmimeType: string; // e.g., \"image/jpeg\", \"image/png\"\n}\n\nexport interface ToolCall {\n\ttype: \"toolCall\";\n\tid: string;\n\tname: string;\n\targuments: Record<string, any>;\n\tthoughtSignature?: string; // Google-specific: opaque signature for reusing thought context\n}\n\n/**\n * Provider-emitted content block whose semantics are owned by the originating\n * provider. Surfaces server-side tool invocations (web_search), server-side\n * tool results (web_search_tool_result), code execution traces, grounding\n * metadata fragments, and any other vendor-specific block the core does not\n * normalize.\n *\n * `subtype` mirrors the provider's wire `type` discriminator (e.g.\n * \"server_tool_use\", \"web_search_tool_result\", \"executableCode\"). `raw` is\n * the verbatim wire payload — extensions interpret it per provider+subtype.\n *\n * The owning provider id lives on the parent `AssistantMessage.provider`, not\n * here, to avoid drift on replay.\n *\n * On replay across providers, `convertMessages` implementations MUST drop\n * these blocks (they are not portable). This mirrors the existing\n * `redacted_thinking` skip pattern.\n */\nexport interface ProviderNativeContent {\n\ttype: \"providerNative\";\n\tsubtype: string;\n\traw: unknown;\n}\n\nexport interface Usage {\n\tinput: number;\n\toutput: number;\n\tcacheRead: number;\n\tcacheWrite: number;\n\ttotalTokens: number;\n\tcost: {\n\t\tinput: number;\n\t\toutput: number;\n\t\tcacheRead: number;\n\t\tcacheWrite: number;\n\t\ttotal: number;\n\t};\n}\n\nexport type StopReason = \"stop\" | \"length\" | \"toolUse\" | \"error\" | \"aborted\";\n\nexport interface UserMessage {\n\trole: \"user\";\n\tcontent: string | (TextContent | ImageContent)[];\n\ttimestamp: number; // Unix timestamp in milliseconds\n}\n\nexport interface AssistantMessage {\n\trole: \"assistant\";\n\tcontent: (TextContent | ThinkingContent | ToolCall | ProviderNativeContent)[];\n\tapi: Api;\n\tprovider: Provider;\n\tmodel: string;\n\tresponseModel?: string; // Concrete `chunk.model` when different from the requested `model` (e.g. OpenRouter `auto` -> `anthropic/...`)\n\tresponseId?: string; // Provider-specific response/message identifier when the upstream API exposes one\n\tdiagnostics?: AssistantMessageDiagnostic[]; // Redacted provider/runtime diagnostics for failures and recoveries.\n\tusage: Usage;\n\tstopReason: StopReason;\n\terrorMessage?: string;\n\ttimestamp: number; // Unix timestamp in milliseconds\n}\n\nexport interface ToolResultMessage<TDetails = any> {\n\trole: \"toolResult\";\n\ttoolCallId: string;\n\ttoolName: string;\n\tcontent: (TextContent | ImageContent)[]; // Supports text and images\n\tdetails?: TDetails;\n\tisError: boolean;\n\ttimestamp: number; // Unix timestamp in milliseconds\n}\n\nexport type Message = UserMessage | AssistantMessage | ToolResultMessage;\n\nexport type ImagesInputContent = TextContent | ImageContent;\nexport type ImagesOutputContent = TextContent | ImageContent;\n\nexport interface ImagesContext {\n\tinput: ImagesInputContent[];\n}\n\nexport type ImagesStopReason = \"stop\" | \"error\" | \"aborted\";\n\nexport interface AssistantImages {\n\tapi: ImagesApi;\n\tprovider: ImagesProvider;\n\tmodel: string;\n\toutput: ImagesOutputContent[];\n\tresponseId?: string;\n\tusage?: Usage;\n\tstopReason: ImagesStopReason;\n\terrorMessage?: string;\n\ttimestamp: number; // Unix timestamp in milliseconds\n}\n\nimport type { TSchema } from \"typebox\";\n\nexport interface FreeformToolFormat {\n\ttype: \"grammar\";\n\tsyntax: \"lark\";\n\tdefinition: string;\n}\n\nexport interface Tool<TParameters extends TSchema = TSchema> {\n\tname: string;\n\tdescription: string;\n\tparameters: TParameters;\n\tfreeform?: FreeformToolFormat;\n}\n\nexport interface Context {\n\tsystemPrompt?: string;\n\tmessages: Message[];\n\ttools?: Tool[];\n}\n\n/**\n * Event protocol for AssistantMessageEventStream.\n *\n * Streams should emit `start` before partial updates, then terminate with either:\n * - `done` carrying the final successful AssistantMessage, or\n * - `error` carrying the final AssistantMessage with stopReason \"error\" or \"aborted\"\n * and errorMessage.\n */\nexport type AssistantMessageEvent =\n\t| { type: \"start\"; partial: AssistantMessage }\n\t| { type: \"text_start\"; contentIndex: number; partial: AssistantMessage }\n\t| { type: \"text_delta\"; contentIndex: number; delta: string; partial: AssistantMessage }\n\t| { type: \"text_end\"; contentIndex: number; content: string; partial: AssistantMessage }\n\t| { type: \"thinking_start\"; contentIndex: number; partial: AssistantMessage }\n\t| { type: \"thinking_delta\"; contentIndex: number; delta: string; partial: AssistantMessage }\n\t| { type: \"thinking_end\"; contentIndex: number; content: string; partial: AssistantMessage }\n\t| { type: \"toolcall_start\"; contentIndex: number; partial: AssistantMessage }\n\t| { type: \"toolcall_delta\"; contentIndex: number; delta: string; partial: AssistantMessage }\n\t| { type: \"toolcall_end\"; contentIndex: number; toolCall: ToolCall; partial: AssistantMessage }\n\t| { type: \"done\"; reason: Extract<StopReason, \"stop\" | \"length\" | \"toolUse\">; message: AssistantMessage }\n\t| { type: \"error\"; reason: Extract<StopReason, \"aborted\" | \"error\">; error: AssistantMessage };\n\n/**\n * Compatibility settings for OpenAI-compatible completions APIs.\n * Use this to override URL-based auto-detection for custom providers.\n */\nexport interface OpenAICompletionsCompat {\n\t/** Whether the provider supports the `store` field. Default: auto-detected from URL. */\n\tsupportsStore?: boolean;\n\t/** Whether the provider supports the `developer` role (vs `system`). Default: auto-detected from URL. */\n\tsupportsDeveloperRole?: boolean;\n\t/** Whether the provider supports `reasoning_effort`. Default: auto-detected from URL. */\n\tsupportsReasoningEffort?: boolean;\n\t/** Whether the provider supports `stream_options: { include_usage: true }` for token usage in streaming responses. Default: true. */\n\tsupportsUsageInStreaming?: boolean;\n\t/** Which field to use for max tokens. Default: auto-detected from URL. */\n\tmaxTokensField?: \"max_completion_tokens\" | \"max_tokens\";\n\t/** Whether tool results require the `name` field. Default: auto-detected from URL. */\n\trequiresToolResultName?: boolean;\n\t/** Whether a user message after tool results requires an assistant message in between. Default: auto-detected from URL. */\n\trequiresAssistantAfterToolResult?: boolean;\n\t/** Whether thinking blocks must be converted to text blocks with <thinking> delimiters. Default: auto-detected from URL. */\n\trequiresThinkingAsText?: boolean;\n\t/** Whether all replayed assistant messages must include an empty reasoning_content field when reasoning is enabled. Default: auto-detected from URL. */\n\trequiresReasoningContentOnAssistantMessages?: boolean;\n\t/** Format for reasoning/thinking parameter. \"openai\" uses reasoning_effort, \"openrouter\" uses reasoning: { effort }, \"deepseek\" uses thinking: { type } plus reasoning_effort when supported, \"together\" uses reasoning: { enabled } plus reasoning_effort when supported, \"zai\" uses top-level enable_thinking: boolean, \"qwen\" uses top-level enable_thinking: boolean, \"qwen-chat-template\" uses chat_template_kwargs.enable_thinking, \"string-thinking\" uses top-level thinking: string, and \"ant-ling\" uses reasoning: { effort } only when the mapped effort is non-null. Default: \"openai\". */\n\tthinkingFormat?:\n\t\t| \"openai\"\n\t\t| \"openrouter\"\n\t\t| \"deepseek\"\n\t\t| \"together\"\n\t\t| \"zai\"\n\t\t| \"qwen\"\n\t\t| \"qwen-chat-template\"\n\t\t| \"string-thinking\"\n\t\t| \"ant-ling\";\n\t/** Whether the provider accepts explicit disabled-thinking markers when thinking is off. Default: true. */\n\tsupportsDisabledThinking?: boolean;\n\t/** OpenRouter-compatible routing preferences sent as the `provider` request field. */\n\topenRouterRouting?: OpenRouterRouting;\n\t/** Vercel AI Gateway routing preferences. Only used when baseUrl points to Vercel AI Gateway. */\n\tvercelGatewayRouting?: VercelGatewayRouting;\n\t/** Whether z.ai supports top-level `tool_stream: true` for streaming tool call deltas. Default: false. */\n\tzaiToolStream?: boolean;\n\t/** Whether the provider supports the `strict` field in tool definitions. Default: true. */\n\tsupportsStrictMode?: boolean;\n\t/**\n\t * Tool call format for models that don't natively support tool calling.\n\t * When set, the middleware will intercept tool calls and format them as text.\n\t * Supported values: \"hermes\", \"xml\", \"yaml-xml\", \"gemma4-delimiter\"\n\t */\n\ttoolCallFormat?: string;\n\t/** Cache control convention for prompt caching. \"anthropic\" applies Anthropic-style `cache_control` markers to the system prompt, last tool definition, and last user/assistant text content. */\n\tcacheControlFormat?: \"anthropic\";\n\t/** Whether to send known session-affinity headers (`session_id`, `x-client-request-id`, `x-session-affinity`) from `options.sessionId` when caching is enabled. Default: false. */\n\tsendSessionAffinityHeaders?: boolean;\n\t/** Whether the provider supports long prompt cache retention (`prompt_cache_retention: \"24h\"` or Anthropic-style `cache_control.ttl: \"1h\"`, depending on format). Default: true. */\n\tsupportsLongCacheRetention?: boolean;\n}\n\n/** Compatibility settings for OpenAI Responses APIs. */\nexport interface OpenAIResponsesCompat {\n\t/** Whether to send the OpenAI `session_id` cache-affinity header from `options.sessionId` when caching is enabled. Default: true. */\n\tsendSessionIdHeader?: boolean;\n\t/** Whether the provider supports `prompt_cache_retention: \"24h\"`. Default: true. */\n\tsupportsLongCacheRetention?: boolean;\n\t/** Whether the provider supports the OpenAI Responses WebSocket transport. Default: true for api.openai.com only. */\n\tsupportsWebSocket?: boolean;\n\t/** Whether the provider supports the OpenAI Responses native `web_search_preview` tool. Default: true for api.openai.com only. */\n\tsupportsWebSearchPreview?: boolean;\n}\n\n/** Compatibility settings for Anthropic Messages-compatible APIs. */\nexport interface AnthropicMessagesCompat {\n\t/**\n\t * Whether the provider accepts per-tool `eager_input_streaming`.\n\t * When false, the Anthropic provider omits `tools[].eager_input_streaming`\n\t * and sends the legacy `fine-grained-tool-streaming-2025-05-14` beta header\n\t * for tool-enabled requests.\n\t * Default: true.\n\t */\n\tsupportsEagerToolInputStreaming?: boolean;\n\t/** Whether the provider supports Anthropic long cache retention (`cache_control.ttl: \"1h\"`). Default: true. */\n\tsupportsLongCacheRetention?: boolean;\n\t/**\n\t * Whether to send the `x-session-affinity` header from `options.sessionId`\n\t * when caching is enabled. Required for providers like Fireworks that use\n\t * session affinity for prompt cache routing (requests to the same replica\n\t * maximize cache hits).\n\t * Default: false.\n\t */\n\tsendSessionAffinityHeaders?: boolean;\n\t/**\n\t * Whether the provider supports Anthropic-style `cache_control` markers on\n\t * tool definitions. When false, `cache_control` is omitted from tool params.\n\t * Some Anthropic-compatible providers (e.g., Fireworks) do not support this\n\t * field on tools and may reject or ignore it.\n\t * Default: true.\n\t */\n\tsupportsCacheControlOnTools?: boolean;\n\t/**\n\t * Whether the provider accepts `thinking: { type: \"disabled\" }` when\n\t * extended thinking is off. Some Anthropic-compatible providers support\n\t * thinking but reject Anthropic's explicit disabled marker.\n\t * Default: true.\n\t */\n\tsupportsDisabledThinking?: boolean;\n\t/**\n\t * Whether the model accepts the Anthropic `temperature` request field.\n\t * Claude Opus 4.7+ rejects non-default temperature values.\n\t * Default: true.\n\t */\n\tsupportsTemperature?: boolean;\n\t/**\n\t * Whether to force adaptive thinking (`thinking.type: \"adaptive\"` plus\n\t * `output_config.effort`) regardless of the model id. Built-in models that\n\t * require adaptive thinking set this in generated metadata. Custom\n\t * Anthropic-compatible providers can set this to `true` for any model whose\n\t * upstream requires the adaptive format. Set to `false` to opt out on\n\t * overridden built-in models and disable model id/name inference.\n\t * Default: infer from adaptive Claude model ids/names when possible.\n\t */\n\tforceAdaptiveThinking?: boolean;\n\t/** Whether to replay empty thinking signatures as `signature: \"\"` instead of converting thinking to text. Default: false. */\n\tallowEmptySignature?: boolean;\n}\n\n/**\n * OpenRouter provider routing preferences.\n * Controls which upstream providers OpenRouter routes requests to.\n * Sent as the `provider` field in the OpenRouter API request body.\n * @see https://openrouter.ai/docs/guides/routing/provider-selection\n */\nexport interface OpenRouterRouting {\n\t/** Whether to allow backup providers to serve requests. Default: true. */\n\tallow_fallbacks?: boolean;\n\t/** Whether to filter providers to only those that support all parameters in the request. Default: false. */\n\trequire_parameters?: boolean;\n\t/** Data collection setting. \"allow\" (default): allow providers that may store/train on data. \"deny\": only use providers that don't collect user data. */\n\tdata_collection?: \"deny\" | \"allow\";\n\t/** Whether to restrict routing to only ZDR (Zero Data Retention) endpoints. */\n\tzdr?: boolean;\n\t/** Whether to restrict routing to only models that allow text distillation. */\n\tenforce_distillable_text?: boolean;\n\t/** An ordered list of provider names/slugs to try in sequence, falling back to the next if unavailable. */\n\torder?: string[];\n\t/** List of provider names/slugs to exclusively allow for this request. */\n\tonly?: string[];\n\t/** List of provider names/slugs to skip for this request. */\n\tignore?: string[];\n\t/** A list of quantization levels to filter providers by (e.g., [\"fp16\", \"bf16\", \"fp8\", \"fp6\", \"int8\", \"int4\", \"fp4\", \"fp32\"]). */\n\tquantizations?: string[];\n\t/** Sorting strategy. Can be a string (e.g., \"price\", \"throughput\", \"latency\") or an object with `by` and `partition`. */\n\tsort?:\n\t\t| string\n\t\t| {\n\t\t\t\t/** The sorting metric: \"price\", \"throughput\", \"latency\". */\n\t\t\t\tby?: string;\n\t\t\t\t/** Partitioning strategy: \"model\" (default) or \"none\". */\n\t\t\t\tpartition?: string | null;\n\t\t };\n\t/** Maximum price per million tokens (USD). */\n\tmax_price?: {\n\t\t/** Price per million prompt tokens. */\n\t\tprompt?: number | string;\n\t\t/** Price per million completion tokens. */\n\t\tcompletion?: number | string;\n\t\t/** Price per image. */\n\t\timage?: number | string;\n\t\t/** Price per audio unit. */\n\t\taudio?: number | string;\n\t\t/** Price per request. */\n\t\trequest?: number | string;\n\t};\n\t/** Preferred minimum throughput (tokens/second). Can be a number (applies to p50) or an object with percentile-specific cutoffs. */\n\tpreferred_min_throughput?:\n\t\t| number\n\t\t| {\n\t\t\t\t/** Minimum tokens/second at the 50th percentile. */\n\t\t\t\tp50?: number;\n\t\t\t\t/** Minimum tokens/second at the 75th percentile. */\n\t\t\t\tp75?: number;\n\t\t\t\t/** Minimum tokens/second at the 90th percentile. */\n\t\t\t\tp90?: number;\n\t\t\t\t/** Minimum tokens/second at the 99th percentile. */\n\t\t\t\tp99?: number;\n\t\t };\n\t/** Preferred maximum latency (seconds). Can be a number (applies to p50) or an object with percentile-specific cutoffs. */\n\tpreferred_max_latency?:\n\t\t| number\n\t\t| {\n\t\t\t\t/** Maximum latency in seconds at the 50th percentile. */\n\t\t\t\tp50?: number;\n\t\t\t\t/** Maximum latency in seconds at the 75th percentile. */\n\t\t\t\tp75?: number;\n\t\t\t\t/** Maximum latency in seconds at the 90th percentile. */\n\t\t\t\tp90?: number;\n\t\t\t\t/** Maximum latency in seconds at the 99th percentile. */\n\t\t\t\tp99?: number;\n\t\t };\n}\n\n/**\n * Vercel AI Gateway routing preferences.\n * Controls which upstream providers the gateway routes requests to.\n * @see https://vercel.com/docs/ai-gateway/models-and-providers/provider-options\n */\nexport interface VercelGatewayRouting {\n\t/** List of provider slugs to exclusively use for this request (e.g., [\"bedrock\", \"anthropic\"]). */\n\tonly?: string[];\n\t/** List of provider slugs to try in order (e.g., [\"anthropic\", \"openai\"]). */\n\torder?: string[];\n}\n\n// Model interface for the unified model system\nexport interface Model<TApi extends Api> {\n\tid: string;\n\tname: string;\n\tapi: TApi;\n\tprovider: Provider;\n\tbaseUrl: string;\n\treasoning: boolean;\n\t/**\n\t * Maps pi thinking levels to provider/model-specific values.\n\t * Missing keys use provider defaults. null marks a level as unsupported.\n\t */\n\tthinkingLevelMap?: ThinkingLevelMap;\n\tinput: (\"text\" | \"image\")[];\n\tcost: {\n\t\tinput: number; // $/million tokens\n\t\toutput: number; // $/million tokens\n\t\tcacheRead: number; // $/million tokens\n\t\tcacheWrite: number; // $/million tokens\n\t};\n\tcontextWindow: number;\n\tmaxTokens: number;\n\theaders?: Record<string, string>;\n\t/** Compatibility overrides for OpenAI-compatible APIs. If not set, auto-detected from baseUrl. */\n\tcompat?: TApi extends \"openai-completions\"\n\t\t? OpenAICompletionsCompat\n\t\t: TApi extends \"openai-responses\"\n\t\t\t? OpenAIResponsesCompat\n\t\t\t: TApi extends \"anthropic-messages\"\n\t\t\t\t? AnthropicMessagesCompat\n\t\t\t\t: never;\n}\n\nexport interface ImagesModel<TApi extends ImagesApi>\n\textends Omit<Model<Api>, \"api\" | \"provider\" | \"reasoning\" | \"contextWindow\" | \"maxTokens\" | \"compat\"> {\n\tapi: TApi;\n\tprovider: ImagesProvider;\n\toutput: (\"text\" | \"image\")[];\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"abort-signals.d.ts","sourceRoot":"","sources":["../../src/utils/abort-signals.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,mBAAmB;IACnC,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,OAAO,EAAE,MAAM,IAAI,CAAC;CACpB;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,SAAS,CAAC,WAAW,GAAG,SAAS,CAAC,EAAE,GAAG,mBAAmB,CAmCtG","sourcesContent":["export interface CombinedAbortSignal {\n\tsignal?: AbortSignal;\n\tcleanup: () => void;\n}\n\nexport function combineAbortSignals(signals: readonly (AbortSignal | undefined)[]): CombinedAbortSignal {\n\tconst activeSignals = signals.filter((signal): signal is AbortSignal => signal !== undefined);\n\tif (activeSignals.length === 0) {\n\t\treturn { cleanup: () => {} };\n\t}\n\tif (activeSignals.length === 1) {\n\t\treturn { signal: activeSignals[0], cleanup: () => {} };\n\t}\n\n\tconst controller = new AbortController();\n\tconst listeners: Array<{ signal: AbortSignal; listener: () => void }> = [];\n\tconst abort = (signal: AbortSignal) => {\n\t\tif (!controller.signal.aborted) {\n\t\t\tcontroller.abort(signal.reason);\n\t\t}\n\t};\n\n\tfor (const signal of activeSignals) {\n\t\tif (signal.aborted) {\n\t\t\tabort(signal);\n\t\t\tbreak;\n\t\t}\n\t\tconst listener = () => abort(signal);\n\t\tsignal.addEventListener(\"abort\", listener, { once: true });\n\t\tlisteners.push({ signal, listener });\n\t}\n\n\treturn {\n\t\tsignal: controller.signal,\n\t\tcleanup: () => {\n\t\t\tfor (const { signal, listener } of listeners) {\n\t\t\t\tsignal.removeEventListener(\"abort\", listener);\n\t\t\t}\n\t\t},\n\t};\n}\n"]}
1
+ {"version":3,"file":"abort-signals.d.ts","sourceRoot":"","sources":["../../src/utils/abort-signals.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,mBAAmB;IACnC,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,OAAO,EAAE,MAAM,IAAI,CAAC;CACpB;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,SAAS,CAAC,WAAW,GAAG,SAAS,CAAC,EAAE,GAAG,mBAAmB,CAmCtG"}