@superblocksteam/vite-plugin-file-sync 2.0.59-next.1 → 2.0.59-next.10

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 (285) hide show
  1. package/dist/ai-service/agent/prompts/build-base-system-prompt.d.ts.map +1 -1
  2. package/dist/ai-service/agent/prompts/build-base-system-prompt.js +25 -9
  3. package/dist/ai-service/agent/prompts/build-base-system-prompt.js.map +1 -1
  4. package/dist/ai-service/agent/subagents/apis/examples.d.ts.map +1 -1
  5. package/dist/ai-service/agent/subagents/apis/examples.js +137 -10
  6. package/dist/ai-service/agent/subagents/apis/examples.js.map +1 -1
  7. package/dist/ai-service/agent/subagents/apis/static-analysis.d.ts.map +1 -1
  8. package/dist/ai-service/agent/subagents/apis/static-analysis.js +14 -7
  9. package/dist/ai-service/agent/subagents/apis/static-analysis.js.map +1 -1
  10. package/dist/ai-service/agent/tool-message-utils.d.ts.map +1 -1
  11. package/dist/ai-service/agent/tool-message-utils.js +6 -2
  12. package/dist/ai-service/agent/tool-message-utils.js.map +1 -1
  13. package/dist/ai-service/agent/tools/apis/analysis.d.ts +9 -0
  14. package/dist/ai-service/agent/tools/apis/analysis.d.ts.map +1 -0
  15. package/dist/ai-service/agent/tools/apis/analysis.js +358 -0
  16. package/dist/ai-service/agent/tools/apis/analysis.js.map +1 -0
  17. package/dist/ai-service/agent/{subagents → tools}/apis/api-executor.d.ts +35 -10
  18. package/dist/ai-service/agent/tools/apis/api-executor.d.ts.map +1 -0
  19. package/dist/ai-service/agent/{subagents → tools}/apis/api-executor.js +179 -94
  20. package/dist/ai-service/agent/tools/apis/api-executor.js.map +1 -0
  21. package/dist/ai-service/agent/tools/apis/api-source.d.ts +19 -0
  22. package/dist/ai-service/agent/tools/apis/api-source.d.ts.map +1 -0
  23. package/dist/ai-service/agent/tools/apis/api-source.js +73 -0
  24. package/dist/ai-service/agent/tools/apis/api-source.js.map +1 -0
  25. package/dist/ai-service/agent/tools/apis/api-validation-orchestrator.d.ts +51 -0
  26. package/dist/ai-service/agent/tools/apis/api-validation-orchestrator.d.ts.map +1 -0
  27. package/dist/ai-service/agent/tools/apis/api-validation-orchestrator.js +510 -0
  28. package/dist/ai-service/agent/tools/apis/api-validation-orchestrator.js.map +1 -0
  29. package/dist/ai-service/agent/tools/apis/build-api-artifact.d.ts +32 -0
  30. package/dist/ai-service/agent/tools/apis/build-api-artifact.d.ts.map +1 -0
  31. package/dist/ai-service/agent/tools/apis/build-api-artifact.js +313 -0
  32. package/dist/ai-service/agent/tools/apis/build-api-artifact.js.map +1 -0
  33. package/dist/ai-service/agent/tools/apis/build-api.d.ts +1 -10
  34. package/dist/ai-service/agent/tools/apis/build-api.d.ts.map +1 -1
  35. package/dist/ai-service/agent/tools/apis/build-api.js +26 -238
  36. package/dist/ai-service/agent/tools/apis/build-api.js.map +1 -1
  37. package/dist/ai-service/agent/tools/apis/get-api-docs.d.ts +11 -0
  38. package/dist/ai-service/agent/tools/apis/get-api-docs.d.ts.map +1 -0
  39. package/dist/ai-service/agent/tools/apis/get-api-docs.js +1841 -0
  40. package/dist/ai-service/agent/tools/apis/get-api-docs.js.map +1 -0
  41. package/dist/ai-service/agent/tools/apis/integration-types.d.ts +37 -0
  42. package/dist/ai-service/agent/tools/apis/integration-types.d.ts.map +1 -0
  43. package/dist/ai-service/agent/tools/apis/integration-types.js +689 -0
  44. package/dist/ai-service/agent/tools/apis/integration-types.js.map +1 -0
  45. package/dist/ai-service/agent/tools/apis/test-api.d.ts +25 -0
  46. package/dist/ai-service/agent/tools/apis/test-api.d.ts.map +1 -0
  47. package/dist/ai-service/agent/tools/apis/test-api.js +194 -0
  48. package/dist/ai-service/agent/tools/apis/test-api.js.map +1 -0
  49. package/dist/ai-service/agent/tools/apis/write-api.d.ts +11 -0
  50. package/dist/ai-service/agent/tools/apis/write-api.d.ts.map +1 -0
  51. package/dist/ai-service/agent/tools/apis/write-api.js +41 -0
  52. package/dist/ai-service/agent/tools/apis/write-api.js.map +1 -0
  53. package/dist/ai-service/agent/tools/build-read-files.js +2 -2
  54. package/dist/ai-service/agent/tools/build-read-files.js.map +1 -1
  55. package/dist/ai-service/agent/tools.d.ts +2 -5
  56. package/dist/ai-service/agent/tools.d.ts.map +1 -1
  57. package/dist/ai-service/agent/tools.js +51 -22
  58. package/dist/ai-service/agent/tools.js.map +1 -1
  59. package/dist/ai-service/agent/tools2/access-control.d.ts +1 -0
  60. package/dist/ai-service/agent/tools2/access-control.d.ts.map +1 -1
  61. package/dist/ai-service/agent/tools2/access-control.js +15 -13
  62. package/dist/ai-service/agent/tools2/access-control.js.map +1 -1
  63. package/dist/ai-service/agent/tools2/registry.d.ts +2 -1
  64. package/dist/ai-service/agent/tools2/registry.d.ts.map +1 -1
  65. package/dist/ai-service/agent/tools2/registry.js +4 -3
  66. package/dist/ai-service/agent/tools2/registry.js.map +1 -1
  67. package/dist/ai-service/agent/tools2/tools/exit-plan-mode.d.ts.map +1 -1
  68. package/dist/ai-service/agent/tools2/tools/exit-plan-mode.js +73 -127
  69. package/dist/ai-service/agent/tools2/tools/exit-plan-mode.js.map +1 -1
  70. package/dist/ai-service/agent/tools2/tools/grep-metadata.d.ts.map +1 -1
  71. package/dist/ai-service/agent/tools2/tools/grep-metadata.js +25 -4
  72. package/dist/ai-service/agent/tools2/tools/grep-metadata.js.map +1 -1
  73. package/dist/ai-service/agent/tools2/types.d.ts +1 -1
  74. package/dist/ai-service/agent/tools2/types.d.ts.map +1 -1
  75. package/dist/ai-service/agent/tools2/types.js.map +1 -1
  76. package/dist/ai-service/agent/tools2/utils.d.ts.map +1 -1
  77. package/dist/ai-service/agent/tools2/utils.js +4 -1
  78. package/dist/ai-service/agent/tools2/utils.js.map +1 -1
  79. package/dist/ai-service/agent/utils.d.ts +1 -3
  80. package/dist/ai-service/agent/utils.d.ts.map +1 -1
  81. package/dist/ai-service/agent/utils.js +55 -13
  82. package/dist/ai-service/agent/utils.js.map +1 -1
  83. package/dist/ai-service/app-interface/shell.d.ts +5 -0
  84. package/dist/ai-service/app-interface/shell.d.ts.map +1 -1
  85. package/dist/ai-service/app-interface/shell.js +17 -2
  86. package/dist/ai-service/app-interface/shell.js.map +1 -1
  87. package/dist/ai-service/chat/chat-session-store.d.ts +7 -0
  88. package/dist/ai-service/chat/chat-session-store.d.ts.map +1 -1
  89. package/dist/ai-service/chat/chat-session-store.js +26 -0
  90. package/dist/ai-service/chat/chat-session-store.js.map +1 -1
  91. package/dist/ai-service/const.d.ts +3 -1
  92. package/dist/ai-service/const.d.ts.map +1 -1
  93. package/dist/ai-service/const.js +3 -0
  94. package/dist/ai-service/const.js.map +1 -1
  95. package/dist/ai-service/index.d.ts +5 -1
  96. package/dist/ai-service/index.d.ts.map +1 -1
  97. package/dist/ai-service/index.js +55 -7
  98. package/dist/ai-service/index.js.map +1 -1
  99. package/dist/ai-service/integrations/metadata-storage/index.d.ts +10 -0
  100. package/dist/ai-service/integrations/metadata-storage/index.d.ts.map +1 -1
  101. package/dist/ai-service/integrations/metadata-storage/local.d.ts +4 -2
  102. package/dist/ai-service/integrations/metadata-storage/local.d.ts.map +1 -1
  103. package/dist/ai-service/integrations/metadata-storage/local.js +35 -9
  104. package/dist/ai-service/integrations/metadata-storage/local.js.map +1 -1
  105. package/dist/ai-service/integrations/store.d.ts +27 -2
  106. package/dist/ai-service/integrations/store.d.ts.map +1 -1
  107. package/dist/ai-service/integrations/store.js +129 -62
  108. package/dist/ai-service/integrations/store.js.map +1 -1
  109. package/dist/ai-service/llm/client.d.ts +123 -0
  110. package/dist/ai-service/llm/client.d.ts.map +1 -0
  111. package/dist/ai-service/llm/client.js +168 -0
  112. package/dist/ai-service/llm/client.js.map +1 -0
  113. package/dist/ai-service/llm/context/context-handle.d.ts +4 -4
  114. package/dist/ai-service/llm/context/context-handle.d.ts.map +1 -1
  115. package/dist/ai-service/llm/context/context-handle.js +7 -3
  116. package/dist/ai-service/llm/context/context-handle.js.map +1 -1
  117. package/dist/ai-service/llm/context/context.d.ts +28 -0
  118. package/dist/ai-service/llm/context/context.d.ts.map +1 -1
  119. package/dist/ai-service/llm/context/context.js +119 -0
  120. package/dist/ai-service/llm/context/context.js.map +1 -1
  121. package/dist/ai-service/llm/context/manager.d.ts +22 -2
  122. package/dist/ai-service/llm/context/manager.d.ts.map +1 -1
  123. package/dist/ai-service/llm/context/manager.js +86 -13
  124. package/dist/ai-service/llm/context/manager.js.map +1 -1
  125. package/dist/ai-service/llm/context/storage/index.d.ts +1 -0
  126. package/dist/ai-service/llm/context/storage/index.d.ts.map +1 -1
  127. package/dist/ai-service/llm/context/storage/local.d.ts +1 -0
  128. package/dist/ai-service/llm/context/storage/local.d.ts.map +1 -1
  129. package/dist/ai-service/llm/context/storage/local.js +13 -1
  130. package/dist/ai-service/llm/context/storage/local.js.map +1 -1
  131. package/dist/ai-service/llm/context/utils/message-utils.d.ts.map +1 -1
  132. package/dist/ai-service/llm/context/utils/message-utils.js +6 -2
  133. package/dist/ai-service/llm/context/utils/message-utils.js.map +1 -1
  134. package/dist/ai-service/llm/error.d.ts +14 -4
  135. package/dist/ai-service/llm/error.d.ts.map +1 -1
  136. package/dist/ai-service/llm/error.js +49 -4
  137. package/dist/ai-service/llm/error.js.map +1 -1
  138. package/dist/ai-service/llm/interaction/adapters/vercel.d.ts +67 -0
  139. package/dist/ai-service/llm/interaction/adapters/vercel.d.ts.map +1 -0
  140. package/dist/ai-service/llm/interaction/adapters/vercel.js +111 -0
  141. package/dist/ai-service/llm/interaction/adapters/vercel.js.map +1 -0
  142. package/dist/ai-service/llm/interaction/compose.d.ts +71 -0
  143. package/dist/ai-service/llm/interaction/compose.d.ts.map +1 -0
  144. package/dist/ai-service/llm/interaction/compose.js +88 -0
  145. package/dist/ai-service/llm/interaction/compose.js.map +1 -0
  146. package/dist/ai-service/llm/interaction/index.d.ts +68 -0
  147. package/dist/ai-service/llm/interaction/index.d.ts.map +1 -0
  148. package/dist/ai-service/llm/interaction/index.js +70 -0
  149. package/dist/ai-service/llm/interaction/index.js.map +1 -0
  150. package/dist/ai-service/llm/interaction/middleware.d.ts +52 -0
  151. package/dist/ai-service/llm/interaction/middleware.d.ts.map +1 -0
  152. package/dist/ai-service/llm/interaction/middleware.js +17 -0
  153. package/dist/ai-service/llm/interaction/middleware.js.map +1 -0
  154. package/dist/ai-service/llm/interaction/middlewares/llmobs.d.ts +45 -0
  155. package/dist/ai-service/llm/interaction/middlewares/llmobs.d.ts.map +1 -0
  156. package/dist/ai-service/llm/interaction/middlewares/llmobs.js +85 -0
  157. package/dist/ai-service/llm/interaction/middlewares/llmobs.js.map +1 -0
  158. package/dist/ai-service/llm/interaction/middlewares/logging.d.ts +88 -0
  159. package/dist/ai-service/llm/interaction/middlewares/logging.d.ts.map +1 -0
  160. package/dist/ai-service/llm/interaction/middlewares/logging.js +238 -0
  161. package/dist/ai-service/llm/interaction/middlewares/logging.js.map +1 -0
  162. package/dist/ai-service/llm/interaction/middlewares/profiler.d.ts +47 -0
  163. package/dist/ai-service/llm/interaction/middlewares/profiler.d.ts.map +1 -0
  164. package/dist/ai-service/llm/interaction/middlewares/profiler.js +183 -0
  165. package/dist/ai-service/llm/interaction/middlewares/profiler.js.map +1 -0
  166. package/dist/ai-service/llm/interaction/middlewares/stream-retry.d.ts +121 -0
  167. package/dist/ai-service/llm/interaction/middlewares/stream-retry.d.ts.map +1 -0
  168. package/dist/ai-service/llm/interaction/middlewares/stream-retry.js +291 -0
  169. package/dist/ai-service/llm/interaction/middlewares/stream-retry.js.map +1 -0
  170. package/dist/ai-service/llm/interaction/provider.d.ts +173 -0
  171. package/dist/ai-service/llm/interaction/provider.d.ts.map +1 -0
  172. package/dist/ai-service/llm/interaction/provider.js +15 -0
  173. package/dist/ai-service/llm/interaction/provider.js.map +1 -0
  174. package/dist/ai-service/llm/interaction/result-utils.d.ts +43 -0
  175. package/dist/ai-service/llm/interaction/result-utils.d.ts.map +1 -0
  176. package/dist/ai-service/llm/interaction/result-utils.js +49 -0
  177. package/dist/ai-service/llm/interaction/result-utils.js.map +1 -0
  178. package/dist/ai-service/llm/interaction/stream-lifecycle.d.ts +48 -0
  179. package/dist/ai-service/llm/interaction/stream-lifecycle.d.ts.map +1 -0
  180. package/dist/ai-service/llm/interaction/stream-lifecycle.js +129 -0
  181. package/dist/ai-service/llm/interaction/stream-lifecycle.js.map +1 -0
  182. package/dist/ai-service/llm/provider.d.ts +1 -2
  183. package/dist/ai-service/llm/provider.d.ts.map +1 -1
  184. package/dist/ai-service/llm/provider.js +3 -6
  185. package/dist/ai-service/llm/provider.js.map +1 -1
  186. package/dist/ai-service/llmobs/helpers.d.ts +7 -8
  187. package/dist/ai-service/llmobs/helpers.d.ts.map +1 -1
  188. package/dist/ai-service/llmobs/helpers.js +8 -48
  189. package/dist/ai-service/llmobs/helpers.js.map +1 -1
  190. package/dist/ai-service/llmobs/middleware/stream-text.d.ts +19 -21
  191. package/dist/ai-service/llmobs/middleware/stream-text.d.ts.map +1 -1
  192. package/dist/ai-service/llmobs/middleware/stream-text.js +98 -106
  193. package/dist/ai-service/llmobs/middleware/stream-text.js.map +1 -1
  194. package/dist/ai-service/llmobs/types.d.ts +14 -1
  195. package/dist/ai-service/llmobs/types.d.ts.map +1 -1
  196. package/dist/ai-service/state-machine/clark-fsm.d.ts +75 -5
  197. package/dist/ai-service/state-machine/clark-fsm.d.ts.map +1 -1
  198. package/dist/ai-service/state-machine/clark-fsm.js +100 -0
  199. package/dist/ai-service/state-machine/clark-fsm.js.map +1 -1
  200. package/dist/ai-service/state-machine/handlers/agent-planning.d.ts.map +1 -1
  201. package/dist/ai-service/state-machine/handlers/agent-planning.js +4 -0
  202. package/dist/ai-service/state-machine/handlers/agent-planning.js.map +1 -1
  203. package/dist/ai-service/state-machine/handlers/llm-generating.d.ts.map +1 -1
  204. package/dist/ai-service/state-machine/handlers/llm-generating.js +91 -456
  205. package/dist/ai-service/state-machine/handlers/llm-generating.js.map +1 -1
  206. package/dist/ai-service/state-machine/handlers/runtime-reviewing.js +1 -1
  207. package/dist/ai-service/state-machine/handlers/runtime-reviewing.js.map +1 -1
  208. package/dist/ai-service/state-machine/helpers/peer.d.ts.map +1 -1
  209. package/dist/ai-service/state-machine/helpers/peer.js +15 -0
  210. package/dist/ai-service/state-machine/helpers/peer.js.map +1 -1
  211. package/dist/ai-service/state-machine/mocks.d.ts.map +1 -1
  212. package/dist/ai-service/state-machine/mocks.js +1 -0
  213. package/dist/ai-service/state-machine/mocks.js.map +1 -1
  214. package/dist/ai-service/template-renderer.js +1 -1
  215. package/dist/ai-service/template-renderer.js.map +1 -1
  216. package/dist/ai-service/types.d.ts +30 -0
  217. package/dist/ai-service/types.d.ts.map +1 -1
  218. package/dist/binding-extraction/extract-identifiers.d.ts +14 -0
  219. package/dist/binding-extraction/extract-identifiers.d.ts.map +1 -1
  220. package/dist/binding-extraction/extract-identifiers.js +46 -1
  221. package/dist/binding-extraction/extract-identifiers.js.map +1 -1
  222. package/dist/binding-extraction/js-identifiers.d.ts +14 -0
  223. package/dist/binding-extraction/js-identifiers.d.ts.map +1 -1
  224. package/dist/binding-extraction/js-identifiers.js +168 -0
  225. package/dist/binding-extraction/js-identifiers.js.map +1 -1
  226. package/dist/binding-extraction/python-identifiers.d.ts +5 -0
  227. package/dist/binding-extraction/python-identifiers.d.ts.map +1 -1
  228. package/dist/binding-extraction/python-identifiers.js +76 -7
  229. package/dist/binding-extraction/python-identifiers.js.map +1 -1
  230. package/dist/file-sync-vite-plugin.d.ts.map +1 -1
  231. package/dist/file-sync-vite-plugin.js +73 -3
  232. package/dist/file-sync-vite-plugin.js.map +1 -1
  233. package/dist/file-system-manager.d.ts.map +1 -1
  234. package/dist/file-system-manager.js +6 -4
  235. package/dist/file-system-manager.js.map +1 -1
  236. package/dist/index.d.ts +1 -1
  237. package/dist/index.d.ts.map +1 -1
  238. package/dist/index.js +1 -1
  239. package/dist/index.js.map +1 -1
  240. package/dist/lock-service/activity-tracker.d.ts +14 -2
  241. package/dist/lock-service/activity-tracker.d.ts.map +1 -1
  242. package/dist/lock-service/activity-tracker.js +43 -6
  243. package/dist/lock-service/activity-tracker.js.map +1 -1
  244. package/dist/lock-service/index.d.ts +13 -2
  245. package/dist/lock-service/index.d.ts.map +1 -1
  246. package/dist/lock-service/index.js +130 -44
  247. package/dist/lock-service/index.js.map +1 -1
  248. package/dist/parsing/jsx.d.ts.map +1 -1
  249. package/dist/parsing/jsx.js +78 -66
  250. package/dist/parsing/jsx.js.map +1 -1
  251. package/dist/socket-manager.js +1 -1
  252. package/dist/socket-manager.js.map +1 -1
  253. package/dist/sync-service/list-dir.d.ts.map +1 -1
  254. package/dist/sync-service/list-dir.js +41 -18
  255. package/dist/sync-service/list-dir.js.map +1 -1
  256. package/dist/vite-plugin-yaml-types.d.ts.map +1 -1
  257. package/dist/vite-plugin-yaml-types.js +2 -4
  258. package/dist/vite-plugin-yaml-types.js.map +1 -1
  259. package/package.json +7 -7
  260. package/dist/ai-service/agent/subagents/apis/api-executor.d.ts.map +0 -1
  261. package/dist/ai-service/agent/subagents/apis/api-executor.js.map +0 -1
  262. package/dist/ai-service/agent/subagents/apis/context.d.ts +0 -12
  263. package/dist/ai-service/agent/subagents/apis/context.d.ts.map +0 -1
  264. package/dist/ai-service/agent/subagents/apis/context.js +0 -18
  265. package/dist/ai-service/agent/subagents/apis/context.js.map +0 -1
  266. package/dist/ai-service/agent/subagents/apis/generate-api-source.d.ts +0 -40
  267. package/dist/ai-service/agent/subagents/apis/generate-api-source.d.ts.map +0 -1
  268. package/dist/ai-service/agent/subagents/apis/generate-api-source.js +0 -516
  269. package/dist/ai-service/agent/subagents/apis/generate-api-source.js.map +0 -1
  270. package/dist/ai-service/agent/subagents/apis/state.d.ts +0 -49
  271. package/dist/ai-service/agent/subagents/apis/state.d.ts.map +0 -1
  272. package/dist/ai-service/agent/subagents/apis/state.js +0 -25
  273. package/dist/ai-service/agent/subagents/apis/state.js.map +0 -1
  274. package/dist/ai-service/agent/subagents/apis/system-prompt.d.ts +0 -3
  275. package/dist/ai-service/agent/subagents/apis/system-prompt.d.ts.map +0 -1
  276. package/dist/ai-service/agent/subagents/apis/system-prompt.js +0 -1704
  277. package/dist/ai-service/agent/subagents/apis/system-prompt.js.map +0 -1
  278. package/dist/ai-service/agent/tools/apis/finalize-api.d.ts +0 -11
  279. package/dist/ai-service/agent/tools/apis/finalize-api.d.ts.map +0 -1
  280. package/dist/ai-service/agent/tools/apis/finalize-api.js +0 -133
  281. package/dist/ai-service/agent/tools/apis/finalize-api.js.map +0 -1
  282. package/dist/ai-service/llm/middleware/retry.d.ts +0 -112
  283. package/dist/ai-service/llm/middleware/retry.d.ts.map +0 -1
  284. package/dist/ai-service/llm/middleware/retry.js +0 -239
  285. package/dist/ai-service/llm/middleware/retry.js.map +0 -1
@@ -0,0 +1,173 @@
1
+ /**
2
+ * High-level provider interface for LLM streaming interactions.
3
+ *
4
+ * This interface defines a complete, SDK-agnostic contract for multi-step
5
+ * LLM streaming, including all lifecycle hooks. Concrete implementations
6
+ * (adapters) bridge this interface to specific SDKs (Vercel AI, Anthropic, etc.).
7
+ *
8
+ * Key features:
9
+ * - Complete lifecycle: prepareStep → onChunk → onStepFinish → onFinish → onFinally
10
+ * - onFinally: Guaranteed to run after stream consumption (our addition!)
11
+ * - SDK-agnostic: Could be implemented with any LLM SDK
12
+ * - Testable: Easy to mock for testing
13
+ */
14
+ import type { Tool } from "../../agent/tools2/types.js";
15
+ import type { StopCondition } from "../../util/stop-condition.js";
16
+ import type { ProviderOptions } from "@ai-sdk/provider-utils";
17
+ import type { LanguageModel, TextStreamPart, LanguageModelUsage, ModelMessage, UserModelMessage } from "ai";
18
+ /**
19
+ * Provider interface for LLM streaming interactions.
20
+ *
21
+ * Implementations of this interface wrap specific SDKs and provide
22
+ * a consistent, high-level API with complete lifecycle management.
23
+ */
24
+ export interface StreamTextProvider {
25
+ /**
26
+ * Streams text from an LLM with multi-step tool calling support.
27
+ *
28
+ * @param options - Configuration and lifecycle hooks
29
+ * @returns Promise resolving to stream result with text/full streams
30
+ */
31
+ streamText<TOOLS extends Record<string, Tool> = Record<string, Tool>>(options: StreamTextOptions<TOOLS>): Promise<StreamTextResult<TOOLS>>;
32
+ }
33
+ /**
34
+ * Options for a streamText call.
35
+ *
36
+ * Includes model configuration, messages, tools, and comprehensive
37
+ * lifecycle hooks including onFinally (runs after stream consumption).
38
+ */
39
+ export interface StreamTextOptions<TOOLS extends Record<string, Tool>> {
40
+ /** The language model to use */
41
+ model: LanguageModel;
42
+ /**
43
+ * Conversation messages.
44
+ * Note: When using context middleware, this will be populated automatically
45
+ * from context history. You typically provide user instead.
46
+ */
47
+ messages?: ModelMessage[];
48
+ /**
49
+ * User message for this interaction.
50
+ * When using context middleware, this is added to the conversation history
51
+ * and messages are populated automatically from context.
52
+ */
53
+ user?: UserModelMessage;
54
+ /** Available tools the model can call */
55
+ tools?: TOOLS;
56
+ /**
57
+ * System prompt.
58
+ * When using context middleware, this is set on the context.
59
+ */
60
+ system?: string;
61
+ /** Maximum number of automatic tool call steps */
62
+ maxSteps?: number;
63
+ /** Abort signal for cancellation */
64
+ abortSignal?: AbortSignal;
65
+ /** Custom headers for the request */
66
+ headers?: Record<string, string | undefined>;
67
+ /** Provider-specific options */
68
+ providerOptions?: ProviderOptions;
69
+ /**
70
+ * Vercel AI SDK specific: Condition to stop generation early.
71
+ * Pass through to the underlying SDK.
72
+ */
73
+ stopWhen?: StopCondition<any> | StopCondition<any>[];
74
+ /**
75
+ * Vercel AI SDK specific: Transformation stream for the output.
76
+ * Pass through to the underlying SDK.
77
+ */
78
+ experimental_transform?: any;
79
+ /**
80
+ * Called before each LLM step.
81
+ * Can transform the step parameters before execution.
82
+ */
83
+ prepareStep?: (step: StepParameters) => Promise<StepParameters> | StepParameters;
84
+ /**
85
+ * Called for each chunk in the stream during generation.
86
+ */
87
+ onChunk?: (event: {
88
+ chunk: StreamChunk;
89
+ }) => Promise<void> | void;
90
+ /**
91
+ * Called after each step completes (after tool execution).
92
+ */
93
+ onStepFinish?: (step: StepResult) => Promise<void> | void;
94
+ /**
95
+ * Called when the entire multi-step interaction finishes.
96
+ * This fires after generation completes, before stream consumption.
97
+ */
98
+ onFinish?: (result: FinalResult) => Promise<void> | void;
99
+ /**
100
+ * Called after stream consumption completes.
101
+ *
102
+ * This is the key lifecycle hook for cleanup operations:
103
+ * - Releasing locks (context handles)
104
+ * - Finishing tracing spans
105
+ * - Closing database connections
106
+ * - Saving final artifacts
107
+ *
108
+ * Guarantees:
109
+ * - Runs exactly once, even if multiple stream accessors are used
110
+ * - Runs after the stream is fully consumed OR abandoned
111
+ * - Runs in error cases as well (usage may be partial)
112
+ * - Idempotent and safe to call multiple times
113
+ *
114
+ */
115
+ onFinally?: () => Promise<void> | void;
116
+ /**
117
+ * Called if an error occurs during generation or consumption.
118
+ */
119
+ onError?: (error: Error) => Promise<void> | void;
120
+ /**
121
+ * Called if the operation is aborted via the abortSignal.
122
+ */
123
+ onAbort?: () => Promise<void> | void;
124
+ }
125
+ /**
126
+ * Parameters for a single LLM step.
127
+ */
128
+ export interface StepParameters {
129
+ messages: ModelMessage[];
130
+ stepNumber: number;
131
+ }
132
+ /**
133
+ * A chunk from the streaming response.
134
+ * This is a direct re-export of Vercel AI SDK's TextStreamPart.
135
+ */
136
+ export type StreamChunk = TextStreamPart<Record<string, Tool>>;
137
+ import type { StepResult as VercelStepResult } from "ai";
138
+ /**
139
+ * Result of a single LLM step.
140
+ * Re-exported from Vercel AI SDK to avoid type incompatibilities.
141
+ */
142
+ export type StepResult = VercelStepResult<any>;
143
+ /**
144
+ * Final result of the entire multi-step interaction.
145
+ * This is the result passed to onFinish callback.
146
+ * Re-exported from Vercel AI SDK's internal type.
147
+ */
148
+ export type FinalResult = StepResult & {
149
+ readonly steps: StepResult[];
150
+ readonly totalUsage: LanguageModelUsage;
151
+ };
152
+ import type { AsyncIterableStream } from "ai";
153
+ /**
154
+ * Result of a streamText call.
155
+ *
156
+ * This type defines only the properties we actually use from the Vercel AI SDK's
157
+ * StreamTextResult. Adapters must use `createStreamResult()` to build this type
158
+ * from raw SDK results, ensuring all properties are plain enumerable values.
159
+ *
160
+ * The brand prevents returning raw SDK results (compile error) and ensures
161
+ * spread operators work correctly in middlewares.
162
+ */
163
+ export type StreamTextResult<TOOLS extends Record<string, Tool> = Record<string, Tool>> = {
164
+ /** Brand to ensure properties are materialized (enumerable) */
165
+ readonly __materialized: unique symbol;
166
+ /** Stream of text deltas */
167
+ textStream: AsyncIterableStream<string>;
168
+ /** Stream of all events (text, tool calls, etc.) */
169
+ fullStream: AsyncIterableStream<TextStreamPart<TOOLS>>;
170
+ /** Promise that resolves with the final result */
171
+ response: Promise<FinalResult>;
172
+ };
173
+ //# sourceMappingURL=provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../../src/ai-service/llm/interaction/provider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * High-level provider interface for LLM streaming interactions.
3
+ *
4
+ * This interface defines a complete, SDK-agnostic contract for multi-step
5
+ * LLM streaming, including all lifecycle hooks. Concrete implementations
6
+ * (adapters) bridge this interface to specific SDKs (Vercel AI, Anthropic, etc.).
7
+ *
8
+ * Key features:
9
+ * - Complete lifecycle: prepareStep → onChunk → onStepFinish → onFinish → onFinally
10
+ * - onFinally: Guaranteed to run after stream consumption (our addition!)
11
+ * - SDK-agnostic: Could be implemented with any LLM SDK
12
+ * - Testable: Easy to mock for testing
13
+ */
14
+ export {};
15
+ //# sourceMappingURL=provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../../../src/ai-service/llm/interaction/provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Utilities for creating StreamTextResult objects.
3
+ *
4
+ * The Vercel AI SDK's StreamTextResult has non-enumerable getters that are lost
5
+ * when using spread operators. This utility extracts only the properties we need
6
+ * into plain enumerable values, allowing spread operators to work correctly.
7
+ */
8
+ import type { StreamTextResult } from "./provider.js";
9
+ import type { Tool } from "../../agent/tools2/types.js";
10
+ import type { StreamTextResult as VercelStreamTextResult } from "ai";
11
+ /**
12
+ * Creates our StreamTextResult from a Vercel SDK result.
13
+ *
14
+ * Extracts only the properties we actually use (textStream, fullStream, response)
15
+ * and creates a plain object with enumerable properties. This allows:
16
+ * 1. Spread operators to work correctly in middlewares
17
+ * 2. Type safety via the brand (can't return raw SDK results)
18
+ * 3. Simpler API - we only expose what we need
19
+ *
20
+ * **When to use:**
21
+ * - In adapters: Always call this on raw SDK results before returning
22
+ * - In middlewares: Never needed - just use spread operators
23
+ *
24
+ * @param raw - Raw StreamTextResult from Vercel AI SDK
25
+ * @returns Our branded StreamTextResult with enumerable properties
26
+ *
27
+ * @example
28
+ * ```typescript
29
+ * // In Vercel adapter:
30
+ * async streamText(options) {
31
+ * const result = await streamText(...); // Vercel SDK
32
+ * return createStreamResult(result); // Extract + brand
33
+ * }
34
+ *
35
+ * // In middleware (no helper needed!):
36
+ * return {
37
+ * ...result, // Spread works because properties are enumerable
38
+ * textStream: wrappedStream
39
+ * };
40
+ * ```
41
+ */
42
+ export declare function createStreamResult<TOOLS extends Record<string, Tool>>(raw: VercelStreamTextResult<TOOLS, any>): StreamTextResult<TOOLS>;
43
+ //# sourceMappingURL=result-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"result-utils.d.ts","sourceRoot":"","sources":["../../../../src/ai-service/llm/interaction/result-utils.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,6BAA6B,CAAC;AACxD,OAAO,KAAK,EAAE,gBAAgB,IAAI,sBAAsB,EAAE,MAAM,IAAI,CAAC;AAErE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,EACnE,GAAG,EAAE,sBAAsB,CAAC,KAAK,EAAE,GAAG,CAAC,GACtC,gBAAgB,CAAC,KAAK,CAAC,CASzB"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Utilities for creating StreamTextResult objects.
3
+ *
4
+ * The Vercel AI SDK's StreamTextResult has non-enumerable getters that are lost
5
+ * when using spread operators. This utility extracts only the properties we need
6
+ * into plain enumerable values, allowing spread operators to work correctly.
7
+ */
8
+ /**
9
+ * Creates our StreamTextResult from a Vercel SDK result.
10
+ *
11
+ * Extracts only the properties we actually use (textStream, fullStream, response)
12
+ * and creates a plain object with enumerable properties. This allows:
13
+ * 1. Spread operators to work correctly in middlewares
14
+ * 2. Type safety via the brand (can't return raw SDK results)
15
+ * 3. Simpler API - we only expose what we need
16
+ *
17
+ * **When to use:**
18
+ * - In adapters: Always call this on raw SDK results before returning
19
+ * - In middlewares: Never needed - just use spread operators
20
+ *
21
+ * @param raw - Raw StreamTextResult from Vercel AI SDK
22
+ * @returns Our branded StreamTextResult with enumerable properties
23
+ *
24
+ * @example
25
+ * ```typescript
26
+ * // In Vercel adapter:
27
+ * async streamText(options) {
28
+ * const result = await streamText(...); // Vercel SDK
29
+ * return createStreamResult(result); // Extract + brand
30
+ * }
31
+ *
32
+ * // In middleware (no helper needed!):
33
+ * return {
34
+ * ...result, // Spread works because properties are enumerable
35
+ * textStream: wrappedStream
36
+ * };
37
+ * ```
38
+ */
39
+ export function createStreamResult(raw) {
40
+ // Extract only the properties we use
41
+ // Access them directly to get the getter values
42
+ // Cast via unknown to satisfy the brand requirement
43
+ return {
44
+ textStream: raw.textStream,
45
+ fullStream: raw.fullStream,
46
+ response: raw.response,
47
+ };
48
+ }
49
+ //# sourceMappingURL=result-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"result-utils.js","sourceRoot":"","sources":["../../../../src/ai-service/llm/interaction/result-utils.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,UAAU,kBAAkB,CAChC,GAAuC;IAEvC,qCAAqC;IACrC,gDAAgD;IAChD,oDAAoD;IACpD,OAAO;QACL,UAAU,EAAE,GAAG,CAAC,UAAU;QAC1B,UAAU,EAAE,GAAG,CAAC,UAAU;QAC1B,QAAQ,EAAE,GAAG,CAAC,QAAQ;KACe,CAAC;AAC1C,CAAC"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Stream lifecycle management utilities.
3
+ *
4
+ * Provides utilities for wrapping streams with lifecycle hooks, particularly
5
+ * `onFinally` which runs after stream consumption completes.
6
+ *
7
+ * Key challenge: The `streamText()` function returns immediately, but the
8
+ * streams are consumed asynchronously later. We need to track when consumption
9
+ * actually completes to run cleanup logic.
10
+ *
11
+ * Solution: Wrap streams with `TransformStream` that tracks consumption via
12
+ * the `flush()` method, which runs when the input stream closes.
13
+ */
14
+ import type { StreamTextResult } from "./provider.js";
15
+ import type { Tool } from "../../agent/tools2/types.js";
16
+ /**
17
+ * Wraps a StreamTextResult to add onFinally lifecycle hook.
18
+ *
19
+ * The onFinally callback runs after stream consumption completes, handling:
20
+ * - Normal completion (stream exhausted)
21
+ * - Errors during consumption
22
+ * - Stream cancellation/abandonment
23
+ *
24
+ * Guarantees:
25
+ * - Runs exactly once, even if multiple stream accessors are used
26
+ * - Idempotent (safe to call multiple times)
27
+ * - Works with all consumption patterns (iteration, promises, piping)
28
+ *
29
+ * @param result - The stream result to wrap
30
+ * @param onFinally - Callback to run after consumption
31
+ * @returns Wrapped result with lifecycle tracking
32
+ *
33
+ * @example
34
+ * ```typescript
35
+ * const result = await streamText({ model, messages });
36
+ * const wrapped = withStreamLifecycle(result, async () => {
37
+ * console.log('Stream consumed!');
38
+ * await cleanup();
39
+ * });
40
+ *
41
+ * for await (const text of wrapped.textStream) {
42
+ * console.log(text);
43
+ * }
44
+ * // onFinally runs here ^
45
+ * ```
46
+ */
47
+ export declare function withStreamLifecycle<TOOLS extends Record<string, Tool> = Record<string, Tool>>(result: StreamTextResult<TOOLS>, onFinally: () => Promise<void> | void): StreamTextResult<TOOLS>;
48
+ //# sourceMappingURL=stream-lifecycle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream-lifecycle.d.ts","sourceRoot":"","sources":["../../../../src/ai-service/llm/interaction/stream-lifecycle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,6BAA6B,CAAC;AAGxD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,EAEzD,MAAM,EAAE,gBAAgB,CAAC,KAAK,CAAC,EAC/B,SAAS,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GACpC,gBAAgB,CAAC,KAAK,CAAC,CAiCzB"}
@@ -0,0 +1,129 @@
1
+ /**
2
+ * Stream lifecycle management utilities.
3
+ *
4
+ * Provides utilities for wrapping streams with lifecycle hooks, particularly
5
+ * `onFinally` which runs after stream consumption completes.
6
+ *
7
+ * Key challenge: The `streamText()` function returns immediately, but the
8
+ * streams are consumed asynchronously later. We need to track when consumption
9
+ * actually completes to run cleanup logic.
10
+ *
11
+ * Solution: Wrap streams with `TransformStream` that tracks consumption via
12
+ * the `flush()` method, which runs when the input stream closes.
13
+ */
14
+ /**
15
+ * Wraps a StreamTextResult to add onFinally lifecycle hook.
16
+ *
17
+ * The onFinally callback runs after stream consumption completes, handling:
18
+ * - Normal completion (stream exhausted)
19
+ * - Errors during consumption
20
+ * - Stream cancellation/abandonment
21
+ *
22
+ * Guarantees:
23
+ * - Runs exactly once, even if multiple stream accessors are used
24
+ * - Idempotent (safe to call multiple times)
25
+ * - Works with all consumption patterns (iteration, promises, piping)
26
+ *
27
+ * @param result - The stream result to wrap
28
+ * @param onFinally - Callback to run after consumption
29
+ * @returns Wrapped result with lifecycle tracking
30
+ *
31
+ * @example
32
+ * ```typescript
33
+ * const result = await streamText({ model, messages });
34
+ * const wrapped = withStreamLifecycle(result, async () => {
35
+ * console.log('Stream consumed!');
36
+ * await cleanup();
37
+ * });
38
+ *
39
+ * for await (const text of wrapped.textStream) {
40
+ * console.log(text);
41
+ * }
42
+ * // onFinally runs here ^
43
+ * ```
44
+ */
45
+ export function withStreamLifecycle(result, onFinally) {
46
+ // Track whether finalization has run
47
+ let finalized = false;
48
+ /**
49
+ * Ensures onFinally runs exactly once.
50
+ * Safe to call multiple times (idempotent).
51
+ */
52
+ const ensureFinally = async () => {
53
+ if (finalized)
54
+ return;
55
+ finalized = true;
56
+ try {
57
+ await onFinally();
58
+ }
59
+ catch (error) {
60
+ // Log but don't throw - we're in cleanup, don't break the stream
61
+ console.error("[streamLifecycle] Error in onFinally:", error);
62
+ }
63
+ };
64
+ // Wrap textStream to track consumption
65
+ const wrappedTextStream = wrapAsyncIterable(result.textStream, ensureFinally);
66
+ // Wrap fullStream to track consumption
67
+ const wrappedFullStream = wrapAsyncIterable(result.fullStream, ensureFinally);
68
+ // Return result with wrapped streams
69
+ // Spread works because adapter materialized getters into enumerable properties
70
+ return {
71
+ ...result,
72
+ textStream: wrappedTextStream,
73
+ fullStream: wrappedFullStream,
74
+ };
75
+ }
76
+ /**
77
+ * Wraps an async iterable with a finalization callback.
78
+ *
79
+ * Uses TransformStream to intercept the stream lifecycle:
80
+ * - `transform()`: Passes chunks through unchanged
81
+ * - `flush()`: Called when input stream closes (after all chunks processed)
82
+ * - `cancel()`: Called if stream is cancelled/abandoned
83
+ *
84
+ * The finalization callback runs in both flush() and cancel() to ensure
85
+ * cleanup happens whether the stream completes normally or is abandoned.
86
+ *
87
+ * @param source - The async iterable to wrap
88
+ * @param onFinalize - Callback to run after consumption
89
+ * @returns Wrapped async iterable
90
+ */
91
+ function wrapAsyncIterable(source, onFinalize) {
92
+ // Convert async iterable to ReadableStream if needed
93
+ let sourceStream;
94
+ if (source instanceof ReadableStream) {
95
+ sourceStream = source;
96
+ }
97
+ else {
98
+ // Manually convert async iterable to ReadableStream
99
+ sourceStream = new ReadableStream({
100
+ async start(controller) {
101
+ try {
102
+ for await (const chunk of source) {
103
+ controller.enqueue(chunk);
104
+ }
105
+ controller.close();
106
+ }
107
+ catch (error) {
108
+ controller.error(error);
109
+ }
110
+ },
111
+ });
112
+ }
113
+ // Create transform stream that tracks lifecycle
114
+ const lifecycleTransform = new TransformStream({
115
+ // Pass through all chunks unchanged
116
+ transform(chunk, controller) {
117
+ controller.enqueue(chunk);
118
+ },
119
+ // Called when input stream closes (after all chunks processed)
120
+ async flush() {
121
+ await onFinalize();
122
+ },
123
+ });
124
+ // Pipe source through lifecycle tracker
125
+ const wrappedStream = sourceStream.pipeThrough(lifecycleTransform);
126
+ // Return as AsyncIterableStream (has both stream and iterable interfaces)
127
+ return wrappedStream;
128
+ }
129
+ //# sourceMappingURL=stream-lifecycle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream-lifecycle.js","sourceRoot":"","sources":["../../../../src/ai-service/llm/interaction/stream-lifecycle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAMH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,UAAU,mBAAmB,CAGjC,MAA+B,EAC/B,SAAqC;IAErC,qCAAqC;IACrC,IAAI,SAAS,GAAG,KAAK,CAAC;IAEtB;;;OAGG;IACH,MAAM,aAAa,GAAG,KAAK,IAAI,EAAE;QAC/B,IAAI,SAAS;YAAE,OAAO;QACtB,SAAS,GAAG,IAAI,CAAC;QAEjB,IAAI,CAAC;YACH,MAAM,SAAS,EAAE,CAAC;QACpB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,iEAAiE;YACjE,OAAO,CAAC,KAAK,CAAC,uCAAuC,EAAE,KAAK,CAAC,CAAC;QAChE,CAAC;IACH,CAAC,CAAC;IAEF,uCAAuC;IACvC,MAAM,iBAAiB,GAAG,iBAAiB,CAAC,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;IAE9E,uCAAuC;IACvC,MAAM,iBAAiB,GAAG,iBAAiB,CAAC,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;IAE9E,qCAAqC;IACrC,+EAA+E;IAC/E,OAAO;QACL,GAAG,MAAM;QACT,UAAU,EAAE,iBAAiB;QAC7B,UAAU,EAAE,iBAAiB;KAC9B,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,SAAS,iBAAiB,CACxB,MAAwB,EACxB,UAA+B;IAE/B,qDAAqD;IACrD,IAAI,YAA+B,CAAC;IACpC,IAAI,MAAM,YAAY,cAAc,EAAE,CAAC;QACrC,YAAY,GAAG,MAAM,CAAC;IACxB,CAAC;SAAM,CAAC;QACN,oDAAoD;QACpD,YAAY,GAAG,IAAI,cAAc,CAAI;YACnC,KAAK,CAAC,KAAK,CAAC,UAAU;gBACpB,IAAI,CAAC;oBACH,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;wBACjC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;oBAC5B,CAAC;oBACD,UAAU,CAAC,KAAK,EAAE,CAAC;gBACrB,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBAC1B,CAAC;YACH,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IAED,gDAAgD;IAChD,MAAM,kBAAkB,GAAG,IAAI,eAAe,CAAO;QACnD,oCAAoC;QACpC,SAAS,CAAC,KAAK,EAAE,UAAU;YACzB,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;QAED,+DAA+D;QAC/D,KAAK,CAAC,KAAK;YACT,MAAM,UAAU,EAAE,CAAC;QACrB,CAAC;KACF,CAAC,CAAC;IAEH,wCAAwC;IACxC,MAAM,aAAa,GAAG,YAAY,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC;IAEnE,0EAA0E;IAC1E,OAAO,aAAuC,CAAC;AACjD,CAAC"}
@@ -1,5 +1,4 @@
1
- import { type RetryOptions } from "./middleware/retry.js";
2
1
  import type { LLMProvider, LLMProviderSettings } from "./types.js";
3
2
  import type { LLMProviderConfig } from "@superblocksteam/library-shared/types";
4
- export declare const createLLMProvider: (settings: LLMProviderSettings, getJwt?: () => string | undefined, llmConfig?: LLMProviderConfig, retryOptions?: RetryOptions) => LLMProvider;
3
+ export declare const createLLMProvider: (settings: LLMProviderSettings, getJwt?: () => string | undefined, llmConfig?: LLMProviderConfig) => LLMProvider;
5
4
  //# sourceMappingURL=provider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../src/ai-service/llm/provider.ts"],"names":[],"mappings":"AAIA,OAAO,EAAmB,KAAK,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAE3E,OAAO,KAAK,EACV,WAAW,EACX,mBAAmB,EAGpB,MAAM,YAAY,CAAC;AAEpB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAE/E,eAAO,MAAM,iBAAiB,GAC5B,UAAU,mBAAmB,EAC7B,SAAS,MAAM,MAAM,GAAG,SAAS,EACjC,YAAY,iBAAiB,EAC7B,eAAe,YAAY,KAC1B,WA6DF,CAAC"}
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../src/ai-service/llm/provider.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,WAAW,EACX,mBAAmB,EAGpB,MAAM,YAAY,CAAC;AAEpB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAE/E,eAAO,MAAM,iBAAiB,GAC5B,UAAU,mBAAmB,EAC7B,SAAS,MAAM,MAAM,GAAG,SAAS,EACjC,YAAY,iBAAiB,KAC5B,WAuDF,CAAC"}
@@ -2,18 +2,15 @@ import { customProvider, wrapLanguageModel } from "ai";
2
2
  import { getLogger } from "../../util/logger.js";
3
3
  import { anthropicImpl } from "./impl/anthropic.js";
4
4
  import { clarkImpl } from "./impl/clark.js";
5
- import { retryMiddleware } from "./middleware/retry.js";
6
5
  import { jwtMiddleware, modelFromClassification } from "./utils.js";
7
- export const createLLMProvider = (settings, getJwt, llmConfig, retryOptions) => {
6
+ export const createLLMProvider = (settings, getJwt, llmConfig) => {
8
7
  const providerType = llmConfig?.provider || "bedrock";
9
8
  const wrapDefaults = (model) => wrapLanguageModel({
10
9
  model,
11
10
  middleware: [
12
11
  jwtMiddleware(getJwt),
13
- retryMiddleware(providerType, {
14
- maxTotalRetryTimeMs: 2 * 60 * 1000, // 2 minutes
15
- ...retryOptions,
16
- }, getLogger()),
12
+ // Note: Retry is now handled at the StreamText level via createStreamRetryMiddleware
13
+ // to ensure fresh Vercel SDK state and correct message sequences on retry
17
14
  ],
18
15
  });
19
16
  getLogger().info(`Creating LLM provider: type=${providerType}, config=${JSON.stringify(llmConfig || {})}`);
@@ -1 +1 @@
1
- {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../../src/ai-service/llm/provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,IAAI,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAqB,MAAM,uBAAuB,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAUpE,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,QAA6B,EAC7B,MAAiC,EACjC,SAA6B,EAC7B,YAA2B,EACd,EAAE;IACf,MAAM,YAAY,GAAG,SAAS,EAAE,QAAQ,IAAI,SAAS,CAAC;IAEtD,MAAM,YAAY,GAAG,CAAC,KAAsB,EAAE,EAAE,CAC9C,iBAAiB,CAAC;QAChB,KAAK;QACL,UAAU,EAAE;YACV,aAAa,CAAC,MAAM,CAAC;YACrB,eAAe,CACb,YAAY,EACZ;gBACE,mBAAmB,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,YAAY;gBAChD,GAAG,YAAY;aAChB,EACD,SAAS,EAAE,CACZ;SACF;KACF,CAAC,CAAC;IACL,SAAS,EAAE,CAAC,IAAI,CACd,+BAA+B,YAAY,YAAY,IAAI,CAAC,SAAS,CAAC,SAAS,IAAI,EAAE,CAAC,EAAE,CACzF,CAAC;IACF,IAAI,QAAQ,CAAC;IACb,QAAQ,YAAY,EAAE,CAAC;QACrB,KAAK,SAAS;YACZ,QAAQ,GAAG,SAAS,CAAC;YACrB,MAAM;QACR,KAAK,QAAQ;YACX,QAAQ,GAAG,SAAS,CAAC;YACrB,MAAM;QACR,KAAK,WAAW,CAAC;QACjB;YACE,QAAQ,GAAG,aAAa,CAAC;YACzB,MAAM;IACV,CAAC;IAED,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAEhC,MAAM,cAAc,GAAkB;QACpC,cAAc,EAAE,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC;QACjD,aAAa,EAAE,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC;QAC/C,OAAO,EAAE,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC;QACnC,oBAAoB,EAAE,YAAY,CAAC,IAAI,CAAC,oBAAoB,CAAC;QAC7D,iBAAiB,EAAE,YAAY,CAAC,IAAI,CAAC,iBAAiB,CAAC;QACvD,kBAAkB,EAAE,YAAY,CAAC,IAAI,CAAC,kBAAkB,CAAC;QACzD,iBAAiB,EAAE,YAAY,CAAC,IAAI,CAAC,iBAAiB,CAAC;KACxD,CAAC;IAEF,MAAM,WAAW,GAAG,cAAc,CAAC;QACjC,cAAc;KACf,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,CAAC,OAAgB,EAAE,EAAE;QACxC,OAAO,WAAW,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAC5C,CAAC,CAAC;IAEF,OAAO;QACL,IAAI,EAAE,YAAY;QAClB,YAAY;QACZ,sBAAsB,EAAE,CAAC,cAAc,EAAE,EAAE,CACzC,uBAAuB,CAAC,YAAY,EAAE,cAAc,CAAC;KACxD,CAAC;AACJ,CAAC,CAAC"}
1
+ {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../../src/ai-service/llm/provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,IAAI,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAUpE,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,QAA6B,EAC7B,MAAiC,EACjC,SAA6B,EAChB,EAAE;IACf,MAAM,YAAY,GAAG,SAAS,EAAE,QAAQ,IAAI,SAAS,CAAC;IAEtD,MAAM,YAAY,GAAG,CAAC,KAAsB,EAAE,EAAE,CAC9C,iBAAiB,CAAC;QAChB,KAAK;QACL,UAAU,EAAE;YACV,aAAa,CAAC,MAAM,CAAC;YACrB,qFAAqF;YACrF,0EAA0E;SAC3E;KACF,CAAC,CAAC;IACL,SAAS,EAAE,CAAC,IAAI,CACd,+BAA+B,YAAY,YAAY,IAAI,CAAC,SAAS,CAAC,SAAS,IAAI,EAAE,CAAC,EAAE,CACzF,CAAC;IACF,IAAI,QAAQ,CAAC;IACb,QAAQ,YAAY,EAAE,CAAC;QACrB,KAAK,SAAS;YACZ,QAAQ,GAAG,SAAS,CAAC;YACrB,MAAM;QACR,KAAK,QAAQ;YACX,QAAQ,GAAG,SAAS,CAAC;YACrB,MAAM;QACR,KAAK,WAAW,CAAC;QACjB;YACE,QAAQ,GAAG,aAAa,CAAC;YACzB,MAAM;IACV,CAAC;IAED,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAEhC,MAAM,cAAc,GAAkB;QACpC,cAAc,EAAE,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC;QACjD,aAAa,EAAE,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC;QAC/C,OAAO,EAAE,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC;QACnC,oBAAoB,EAAE,YAAY,CAAC,IAAI,CAAC,oBAAoB,CAAC;QAC7D,iBAAiB,EAAE,YAAY,CAAC,IAAI,CAAC,iBAAiB,CAAC;QACvD,kBAAkB,EAAE,YAAY,CAAC,IAAI,CAAC,kBAAkB,CAAC;QACzD,iBAAiB,EAAE,YAAY,CAAC,IAAI,CAAC,iBAAiB,CAAC;KACxD,CAAC;IAEF,MAAM,WAAW,GAAG,cAAc,CAAC;QACjC,cAAc;KACf,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,CAAC,OAAgB,EAAE,EAAE;QACxC,OAAO,WAAW,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAC5C,CAAC,CAAC;IAEF,OAAO;QACL,IAAI,EAAE,YAAY;QAClB,YAAY;QACZ,sBAAsB,EAAE,CAAC,cAAc,EAAE,EAAE,CACzC,uBAAuB,CAAC,YAAY,EAAE,cAAc,CAAC;KACxD,CAAC;AACJ,CAAC,CAAC"}
@@ -1,7 +1,8 @@
1
- import { streamText, type ToolSet } from "ai";
2
1
  import { type Logger } from "../../util/logger.js";
2
+ import { type StreamTextOptions } from "../llm/interaction/index.js";
3
3
  import { LLMObsTracer } from "./tracer.js";
4
4
  import type { LLMObsSpan } from "./types.js";
5
+ import type { Tool } from "../agent/tools2/types.js";
5
6
  export declare function traceWorkflow<T>(name: string, operation: (span: any) => Promise<T>, tags?: Record<string, string | boolean>, llmobs?: LLMObsTracer): Promise<T>;
6
7
  export declare function traceTask<T>(name: string, operation: (span: any) => Promise<T>, tags?: Record<string, string | boolean>, llmobs?: LLMObsTracer): Promise<T>;
7
8
  export declare function traceLLM<T>(name: string, modelName: string, modelProvider: string, operation: (span: LLMObsSpan) => Promise<T>, tags?: Record<string, string | boolean>, llmobs?: LLMObsTracer): Promise<T>;
@@ -16,13 +17,11 @@ export declare function getCommonTraceTags(jwt: string | undefined, applicationI
16
17
  * and chaos monkey error injection is handled at the fetch level. This function only applies
17
18
  * LLMObs tracing.
18
19
  *
19
- * @param clark - Clark state machine instance
20
- * @param services - Clark state handler parameters
21
20
  * @param params - Parameters to pass to streamText
21
+ * @param tracer - Optional LLMObs tracer
22
+ * @param logger - Optional logger
23
+ *
24
+ * @deprecated use the LLMClient with LLMObs middleware instead (Clark.streamText in most cases)
22
25
  */
23
- export declare function tracedStreamText<T extends ToolSet>(params: Parameters<typeof streamText<T>>[0], tracer?: LLMObsTracer, logger?: Logger): import("ai").StreamTextResult<T, never>;
24
- export declare const traceToolSet: <T extends ToolSet>(toolset: T, llmobs?: LLMObsTracer, hooks?: {
25
- beforeExecute?: (name: string) => void;
26
- afterExecute?: (name: string, span: LLMObsSpan) => void;
27
- }) => T;
26
+ export declare function tracedStreamText<T extends Record<string, Tool>>(params: StreamTextOptions<T>, tracer?: LLMObsTracer, logger?: Logger): Promise<import("../llm/interaction/provider.js").StreamTextResult<T>>;
28
27
  //# sourceMappingURL=helpers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/ai-service/llmobs/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,KAAK,OAAO,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,KAAK,MAAM,EAAa,MAAM,sBAAsB,CAAC;AAI9D,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAG7C,wBAAgB,aAAa,CAAC,CAAC,EAC7B,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,CAAC,CAAC,EACpC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,EACvC,MAAM,GAAE,YAAoC,GAC3C,OAAO,CAAC,CAAC,CAAC,CAaZ;AAGD,wBAAgB,SAAS,CAAC,CAAC,EACzB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,CAAC,CAAC,EACpC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,EACvC,MAAM,GAAE,YAAoC,GAC3C,OAAO,CAAC,CAAC,CAAC,CAaZ;AAGD,wBAAgB,QAAQ,CAAC,CAAC,EACxB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,OAAO,CAAC,CAAC,CAAC,EAC3C,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,EACvC,MAAM,GAAE,YAAoC,GAC3C,OAAO,CAAC,CAAC,CAAC,CAeZ;AAGD,wBAAgB,eAAe,CAC7B,GAAG,EAAE,MAAM,GAAG,SAAS,GACtB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAUxB;AAGD,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,MAAM,EACtB,cAAc,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAM,GACpD,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAclC;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,OAAO,EAChD,MAAM,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAC3C,MAAM,GAAE,YAAoC,EAC5C,MAAM,GAAE,MAAoB,2CAa7B;AAED,eAAO,MAAM,YAAY,GAAI,CAAC,SAAS,OAAO,EAC5C,SAAS,CAAC,EACV,SAAQ,YAAoC,EAC5C,QAAQ;IACN,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,KAAK,IAAI,CAAC;CACzD,KACA,CAyCF,CAAC"}
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/ai-service/llmobs/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAa,MAAM,sBAAsB,CAAC;AAE9D,OAAO,EAGL,KAAK,iBAAiB,EACvB,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAGrD,wBAAgB,aAAa,CAAC,CAAC,EAC7B,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,CAAC,CAAC,EACpC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,EACvC,MAAM,GAAE,YAAoC,GAC3C,OAAO,CAAC,CAAC,CAAC,CAaZ;AAGD,wBAAgB,SAAS,CAAC,CAAC,EACzB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,CAAC,CAAC,EACpC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,EACvC,MAAM,GAAE,YAAoC,GAC3C,OAAO,CAAC,CAAC,CAAC,CAaZ;AAGD,wBAAgB,QAAQ,CAAC,CAAC,EACxB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,OAAO,CAAC,CAAC,CAAC,EAC3C,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,EACvC,MAAM,GAAE,YAAoC,GAC3C,OAAO,CAAC,CAAC,CAAC,CAeZ;AAGD,wBAAgB,eAAe,CAC7B,GAAG,EAAE,MAAM,GAAG,SAAS,GACtB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAUxB;AAGD,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,MAAM,EACtB,cAAc,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAM,GACpD,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAclC;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,EAC7D,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAC5B,MAAM,GAAE,YAAoC,EAC5C,MAAM,GAAE,MAAoB,yEAQ7B"}
@@ -1,8 +1,7 @@
1
- import { streamText } from "ai";
2
1
  import { getLogger } from "../../util/logger.js";
2
+ import { applyMiddleware } from "../llm/interaction/compose.js";
3
+ import { createLLMObsMiddleware, VercelStreamTextAdapter, } from "../llm/interaction/index.js";
3
4
  import { parseJwt } from "../util/parse-jwt.js";
4
- import { safeJsonStringify } from "../util/safe-stringify.js";
5
- import { LLMObsStreamTextMiddleware } from "./middleware/stream-text.js";
6
5
  import { LLMObsTracer } from "./tracer.js";
7
6
  // Helper function for workflow tracing with common patterns
8
7
  export function traceWorkflow(name, operation, tags, llmobs = LLMObsTracer.instance) {
@@ -77,54 +76,15 @@ export function getCommonTraceTags(jwt, applicationId, organizationId, additiona
77
76
  * and chaos monkey error injection is handled at the fetch level. This function only applies
78
77
  * LLMObs tracing.
79
78
  *
80
- * @param clark - Clark state machine instance
81
- * @param services - Clark state handler parameters
82
79
  * @param params - Parameters to pass to streamText
80
+ * @param tracer - Optional LLMObs tracer
81
+ * @param logger - Optional logger
82
+ *
83
+ * @deprecated use the LLMClient with LLMObs middleware instead (Clark.streamText in most cases)
83
84
  */
84
85
  export function tracedStreamText(params, tracer = LLMObsTracer.instance, logger = getLogger()) {
85
- // Disable built-in retries - we handle retries at the LanguageModelV2 middleware level
86
- params = {
87
- ...params,
88
- maxRetries: 0,
89
- };
90
86
  // Apply LLMObs tracing middleware
91
- const llmobsMiddleware = new LLMObsStreamTextMiddleware(tracer, logger);
92
- const tracedStreamText = llmobsMiddleware.wrap(streamText);
93
- return tracedStreamText(params);
87
+ const traced = applyMiddleware(new VercelStreamTextAdapter(), createLLMObsMiddleware({ tracer, logger }));
88
+ return traced.streamText(params);
94
89
  }
95
- export const traceToolSet = (toolset, llmobs = LLMObsTracer.instance, hooks) => {
96
- const tracedToolset = {};
97
- for (const [name, tool] of Object.entries(toolset)) {
98
- tracedToolset[name] = {
99
- ...tool,
100
- execute: async (input, options) => {
101
- hooks?.beforeExecute?.(name);
102
- return await llmobs.trace({
103
- kind: "tool",
104
- name: `tool.${name}`,
105
- }, async (span) => {
106
- if (!tool.execute) {
107
- throw new Error(`Tool ${name} has no execute method`);
108
- }
109
- const result = await tool.execute(input, options);
110
- hooks?.afterExecute?.(name, span);
111
- const metadata = {
112
- toolCallid: options?.toolCallId,
113
- ...Object.fromEntries(Object.entries(tool).map(([key, value]) => [
114
- key,
115
- safeJsonStringify(value),
116
- ])),
117
- };
118
- llmobs.annotate(span, {
119
- inputData: safeJsonStringify(input),
120
- outputData: safeJsonStringify(result),
121
- metadata,
122
- });
123
- return result;
124
- });
125
- },
126
- };
127
- }
128
- return tracedToolset;
129
- };
130
90
  //# sourceMappingURL=helpers.js.map