@tanstack/ai 0.42.0 → 0.43.0

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 (272) hide show
  1. package/README.md +15 -1
  2. package/dist/esm/activities/chat/adapter.js +23 -16
  3. package/dist/esm/activities/chat/adapter.js.map +1 -1
  4. package/dist/esm/activities/chat/agent-loop-strategies.d.ts +5 -36
  5. package/dist/esm/activities/chat/agent-loop-strategies.js +75 -21
  6. package/dist/esm/activities/chat/agent-loop-strategies.js.map +1 -1
  7. package/dist/esm/activities/chat/cancel.d.ts +40 -0
  8. package/dist/esm/activities/chat/cancel.js +54 -0
  9. package/dist/esm/activities/chat/cancel.js.map +1 -0
  10. package/dist/esm/activities/chat/index.d.ts +28 -21
  11. package/dist/esm/activities/chat/index.js +2100 -1813
  12. package/dist/esm/activities/chat/index.js.map +1 -1
  13. package/dist/esm/activities/chat/mcp/manager.d.ts +2 -2
  14. package/dist/esm/activities/chat/mcp/manager.js +90 -77
  15. package/dist/esm/activities/chat/mcp/manager.js.map +1 -1
  16. package/dist/esm/activities/chat/mcp/types.d.ts +2 -2
  17. package/dist/esm/activities/chat/messages.js +397 -346
  18. package/dist/esm/activities/chat/messages.js.map +1 -1
  19. package/dist/esm/activities/chat/middleware/builder.js +17 -15
  20. package/dist/esm/activities/chat/middleware/builder.js.map +1 -1
  21. package/dist/esm/activities/chat/middleware/capabilities.js +78 -43
  22. package/dist/esm/activities/chat/middleware/capabilities.js.map +1 -1
  23. package/dist/esm/activities/chat/middleware/compose.d.ts +94 -1
  24. package/dist/esm/activities/chat/middleware/compose.js +623 -531
  25. package/dist/esm/activities/chat/middleware/compose.js.map +1 -1
  26. package/dist/esm/activities/chat/middleware/define.js +12 -5
  27. package/dist/esm/activities/chat/middleware/define.js.map +1 -1
  28. package/dist/esm/activities/chat/middleware/index.d.ts +5 -1
  29. package/dist/esm/activities/chat/middleware/locks.d.ts +50 -0
  30. package/dist/esm/activities/chat/middleware/locks.js +71 -0
  31. package/dist/esm/activities/chat/middleware/locks.js.map +1 -0
  32. package/dist/esm/activities/chat/middleware/pending-turn.d.ts +15 -0
  33. package/dist/esm/activities/chat/middleware/pending-turn.js +35 -0
  34. package/dist/esm/activities/chat/middleware/pending-turn.js.map +1 -0
  35. package/dist/esm/activities/chat/middleware/run-disconnect.d.ts +23 -0
  36. package/dist/esm/activities/chat/middleware/run-disconnect.js +42 -0
  37. package/dist/esm/activities/chat/middleware/run-disconnect.js.map +1 -0
  38. package/dist/esm/activities/chat/middleware/run-store.d.ts +283 -0
  39. package/dist/esm/activities/chat/middleware/run-store.js +176 -0
  40. package/dist/esm/activities/chat/middleware/run-store.js.map +1 -0
  41. package/dist/esm/activities/chat/middleware/sandbox-runtime.js +14 -8
  42. package/dist/esm/activities/chat/middleware/sandbox-runtime.js.map +1 -1
  43. package/dist/esm/activities/chat/middleware/tool-cache-middleware.js +79 -70
  44. package/dist/esm/activities/chat/middleware/tool-cache-middleware.js.map +1 -1
  45. package/dist/esm/activities/chat/middleware/types.d.ts +59 -2
  46. package/dist/esm/activities/chat/middleware/validate.js +23 -28
  47. package/dist/esm/activities/chat/middleware/validate.js.map +1 -1
  48. package/dist/esm/activities/chat/stream/json-parser.js +39 -25
  49. package/dist/esm/activities/chat/stream/json-parser.js.map +1 -1
  50. package/dist/esm/activities/chat/stream/message-updaters.js +275 -234
  51. package/dist/esm/activities/chat/stream/message-updaters.js.map +1 -1
  52. package/dist/esm/activities/chat/stream/processor.d.ts +24 -4
  53. package/dist/esm/activities/chat/stream/processor.js +1341 -1542
  54. package/dist/esm/activities/chat/stream/processor.js.map +1 -1
  55. package/dist/esm/activities/chat/stream/strategies.js +69 -53
  56. package/dist/esm/activities/chat/stream/strategies.js.map +1 -1
  57. package/dist/esm/activities/chat/tools/approval-schema.d.ts +19 -0
  58. package/dist/esm/activities/chat/tools/approval-schema.js +117 -0
  59. package/dist/esm/activities/chat/tools/approval-schema.js.map +1 -0
  60. package/dist/esm/activities/chat/tools/lazy-tool-manager.js +164 -191
  61. package/dist/esm/activities/chat/tools/lazy-tool-manager.js.map +1 -1
  62. package/dist/esm/activities/chat/tools/lazy-tools.js +24 -12
  63. package/dist/esm/activities/chat/tools/lazy-tools.js.map +1 -1
  64. package/dist/esm/activities/chat/tools/schema-converter.js +293 -146
  65. package/dist/esm/activities/chat/tools/schema-converter.js.map +1 -1
  66. package/dist/esm/activities/chat/tools/tool-calls.d.ts +18 -2
  67. package/dist/esm/activities/chat/tools/tool-calls.js +522 -531
  68. package/dist/esm/activities/chat/tools/tool-calls.js.map +1 -1
  69. package/dist/esm/activities/chat/tools/tool-definition.d.ts +75 -16
  70. package/dist/esm/activities/chat/tools/tool-definition.js +95 -23
  71. package/dist/esm/activities/chat/tools/tool-definition.js.map +1 -1
  72. package/dist/esm/activities/error-payload.js +85 -47
  73. package/dist/esm/activities/error-payload.js.map +1 -1
  74. package/dist/esm/activities/generateAudio/adapter.js +22 -15
  75. package/dist/esm/activities/generateAudio/adapter.js.map +1 -1
  76. package/dist/esm/activities/generateAudio/index.d.ts +4 -0
  77. package/dist/esm/activities/generateAudio/index.js +141 -105
  78. package/dist/esm/activities/generateAudio/index.js.map +1 -1
  79. package/dist/esm/activities/generateImage/adapter.js +22 -15
  80. package/dist/esm/activities/generateImage/adapter.js.map +1 -1
  81. package/dist/esm/activities/generateImage/index.d.ts +4 -0
  82. package/dist/esm/activities/generateImage/index.js +155 -111
  83. package/dist/esm/activities/generateImage/index.js.map +1 -1
  84. package/dist/esm/activities/generateSpeech/adapter.js +22 -15
  85. package/dist/esm/activities/generateSpeech/adapter.js.map +1 -1
  86. package/dist/esm/activities/generateSpeech/index.d.ts +4 -0
  87. package/dist/esm/activities/generateSpeech/index.js +159 -110
  88. package/dist/esm/activities/generateSpeech/index.js.map +1 -1
  89. package/dist/esm/activities/generateTranscription/adapter.js +22 -15
  90. package/dist/esm/activities/generateTranscription/adapter.js.map +1 -1
  91. package/dist/esm/activities/generateTranscription/index.d.ts +4 -0
  92. package/dist/esm/activities/generateTranscription/index.js +159 -100
  93. package/dist/esm/activities/generateTranscription/index.js.map +1 -1
  94. package/dist/esm/activities/generateVideo/adapter.js +36 -29
  95. package/dist/esm/activities/generateVideo/adapter.js.map +1 -1
  96. package/dist/esm/activities/generateVideo/index.d.ts +143 -19
  97. package/dist/esm/activities/generateVideo/index.js +456 -279
  98. package/dist/esm/activities/generateVideo/index.js.map +1 -1
  99. package/dist/esm/activities/generateVideo/snap.js +60 -48
  100. package/dist/esm/activities/generateVideo/snap.js.map +1 -1
  101. package/dist/esm/activities/index.js +8 -34
  102. package/dist/esm/activities/middleware/index.d.ts +1 -1
  103. package/dist/esm/activities/middleware/run.d.ts +10 -0
  104. package/dist/esm/activities/middleware/run.js +53 -29
  105. package/dist/esm/activities/middleware/run.js.map +1 -1
  106. package/dist/esm/activities/middleware/types.d.ts +44 -6
  107. package/dist/esm/activities/stream-generation-result.d.ts +4 -1
  108. package/dist/esm/activities/stream-generation-result.js +79 -44
  109. package/dist/esm/activities/stream-generation-result.js.map +1 -1
  110. package/dist/esm/activities/summarize/adapter.js +22 -15
  111. package/dist/esm/activities/summarize/adapter.js.map +1 -1
  112. package/dist/esm/activities/summarize/chat-stream-summarize.js +252 -202
  113. package/dist/esm/activities/summarize/chat-stream-summarize.js.map +1 -1
  114. package/dist/esm/activities/summarize/index.d.ts +27 -0
  115. package/dist/esm/activities/summarize/index.js +268 -102
  116. package/dist/esm/activities/summarize/index.js.map +1 -1
  117. package/dist/esm/adapter-internals.d.ts +2 -1
  118. package/dist/esm/adapter-internals.js +4 -11
  119. package/dist/esm/client.d.ts +25 -3
  120. package/dist/esm/client.js +131 -64
  121. package/dist/esm/client.js.map +1 -1
  122. package/dist/esm/custom-events.d.ts +76 -0
  123. package/dist/esm/custom-events.js +37 -0
  124. package/dist/esm/custom-events.js.map +1 -0
  125. package/dist/esm/delivery-detach.d.ts +50 -0
  126. package/dist/esm/delivery-detach.js +71 -0
  127. package/dist/esm/delivery-detach.js.map +1 -0
  128. package/dist/esm/delivery-disconnect.d.ts +62 -0
  129. package/dist/esm/delivery-disconnect.js +81 -0
  130. package/dist/esm/delivery-disconnect.js.map +1 -0
  131. package/dist/esm/extend-adapter.js +19 -17
  132. package/dist/esm/extend-adapter.js.map +1 -1
  133. package/dist/esm/index.d.ts +24 -6
  134. package/dist/esm/index.js +30 -98
  135. package/dist/esm/interrupt-resume.d.ts +71 -0
  136. package/dist/esm/interrupt-resume.js +438 -0
  137. package/dist/esm/interrupt-resume.js.map +1 -0
  138. package/dist/esm/interrupt-serialization.d.ts +12 -0
  139. package/dist/esm/interrupt-serialization.js +178 -0
  140. package/dist/esm/interrupt-serialization.js.map +1 -0
  141. package/dist/esm/interrupts.d.ts +84 -0
  142. package/dist/esm/interrupts.js +31 -0
  143. package/dist/esm/interrupts.js.map +1 -0
  144. package/dist/esm/locks.d.ts +10 -0
  145. package/dist/esm/locks.js +2 -0
  146. package/dist/esm/logger/console-logger.js +101 -78
  147. package/dist/esm/logger/console-logger.js.map +1 -1
  148. package/dist/esm/logger/internal-logger.js +104 -89
  149. package/dist/esm/logger/internal-logger.js.map +1 -1
  150. package/dist/esm/logger/resolve.js +54 -49
  151. package/dist/esm/logger/resolve.js.map +1 -1
  152. package/dist/esm/logger/types.d.ts +1 -1
  153. package/dist/esm/middlewares/content-guard.js +142 -148
  154. package/dist/esm/middlewares/content-guard.js.map +1 -1
  155. package/dist/esm/middlewares/index.js +2 -6
  156. package/dist/esm/middlewares/otel.js +598 -732
  157. package/dist/esm/middlewares/otel.js.map +1 -1
  158. package/dist/esm/middlewares/usage-attributes.js +47 -40
  159. package/dist/esm/middlewares/usage-attributes.js.map +1 -1
  160. package/dist/esm/realtime/event-emitter.js +24 -25
  161. package/dist/esm/realtime/event-emitter.js.map +1 -1
  162. package/dist/esm/realtime/index.d.ts +5 -9
  163. package/dist/esm/realtime/index.js +29 -6
  164. package/dist/esm/realtime/index.js.map +1 -1
  165. package/dist/esm/scope.d.ts +47 -0
  166. package/dist/esm/stream-durability.d.ts +171 -0
  167. package/dist/esm/stream-durability.js +295 -0
  168. package/dist/esm/stream-durability.js.map +1 -0
  169. package/dist/esm/stream-to-response.d.ts +178 -13
  170. package/dist/esm/stream-to-response.js +663 -115
  171. package/dist/esm/stream-to-response.js.map +1 -1
  172. package/dist/esm/strip-to-spec-middleware.js +30 -16
  173. package/dist/esm/strip-to-spec-middleware.js.map +1 -1
  174. package/dist/esm/system-prompts.js +27 -21
  175. package/dist/esm/system-prompts.js.map +1 -1
  176. package/dist/esm/tool-registry.js +72 -45
  177. package/dist/esm/tool-registry.js.map +1 -1
  178. package/dist/esm/tools/provider-tool.js +14 -5
  179. package/dist/esm/tools/provider-tool.js.map +1 -1
  180. package/dist/esm/types.d.ts +321 -42
  181. package/dist/esm/types.js +2 -0
  182. package/dist/esm/utilities/ag-ui-wire.js +79 -93
  183. package/dist/esm/utilities/ag-ui-wire.js.map +1 -1
  184. package/dist/esm/utilities/chat-params.d.ts +26 -4
  185. package/dist/esm/utilities/chat-params.js +218 -92
  186. package/dist/esm/utilities/chat-params.js.map +1 -1
  187. package/dist/esm/utilities/errors.js +28 -18
  188. package/dist/esm/utilities/errors.js.map +1 -1
  189. package/dist/esm/utilities/media-prompt.js +46 -41
  190. package/dist/esm/utilities/media-prompt.js.map +1 -1
  191. package/dist/esm/utilities/numbers.js +13 -10
  192. package/dist/esm/utilities/numbers.js.map +1 -1
  193. package/dist/esm/utilities/provider-executed.js +20 -11
  194. package/dist/esm/utilities/provider-executed.js.map +1 -1
  195. package/dist/esm/utilities/sampling-keys.js +31 -19
  196. package/dist/esm/utilities/sampling-keys.js.map +1 -1
  197. package/dist/esm/utilities/tool-result.js +42 -30
  198. package/dist/esm/utilities/tool-result.js.map +1 -1
  199. package/dist/esm/utilities/usage.js +27 -9
  200. package/dist/esm/utilities/usage.js.map +1 -1
  201. package/dist/esm/utils.js +26 -18
  202. package/dist/esm/utils.js.map +1 -1
  203. package/package.json +10 -6
  204. package/skills/ai-core/SKILL.md +69 -18
  205. package/skills/ai-core/adapter-configuration/SKILL.md +44 -21
  206. package/skills/ai-core/adapter-configuration/references/anthropic-adapter.md +1 -3
  207. package/skills/ai-core/adapter-configuration/references/byteplus-adapter.md +148 -0
  208. package/skills/ai-core/adapter-configuration/references/gemini-adapter.md +2 -6
  209. package/skills/ai-core/adapter-configuration/references/groq-adapter.md +2 -6
  210. package/skills/ai-core/adapter-configuration/references/openai-adapter.md +1 -3
  211. package/skills/ai-core/ag-ui-protocol/SKILL.md +1 -1
  212. package/skills/ai-core/chat-experience/SKILL.md +98 -11
  213. package/skills/ai-core/client-persistence/SKILL.md +277 -0
  214. package/skills/ai-core/custom-backend-integration/SKILL.md +1 -1
  215. package/skills/ai-core/debug-logging/SKILL.md +1 -1
  216. package/skills/ai-core/locks/SKILL.md +143 -0
  217. package/skills/ai-core/media-generation/SKILL.md +144 -12
  218. package/skills/ai-core/middleware/SKILL.md +258 -33
  219. package/skills/ai-core/structured-outputs/SKILL.md +1 -1
  220. package/skills/ai-core/tool-calling/SKILL.md +54 -61
  221. package/src/activities/chat/agent-loop-strategies.ts +5 -39
  222. package/src/activities/chat/cancel.ts +81 -0
  223. package/src/activities/chat/index.ts +1091 -200
  224. package/src/activities/chat/mcp/manager.ts +4 -4
  225. package/src/activities/chat/mcp/types.ts +2 -2
  226. package/src/activities/chat/messages.ts +5 -3
  227. package/src/activities/chat/middleware/builder.ts +1 -1
  228. package/src/activities/chat/middleware/compose.ts +186 -9
  229. package/src/activities/chat/middleware/index.ts +26 -0
  230. package/src/activities/chat/middleware/locks.ts +102 -0
  231. package/src/activities/chat/middleware/pending-turn.ts +47 -0
  232. package/src/activities/chat/middleware/run-disconnect.ts +62 -0
  233. package/src/activities/chat/middleware/run-store.ts +412 -0
  234. package/src/activities/chat/middleware/types.ts +62 -1
  235. package/src/activities/chat/stream/processor.ts +189 -5
  236. package/src/activities/chat/tools/approval-schema.ts +205 -0
  237. package/src/activities/chat/tools/tool-calls.ts +106 -13
  238. package/src/activities/chat/tools/tool-definition.ts +210 -39
  239. package/src/activities/generateAudio/index.ts +20 -3
  240. package/src/activities/generateImage/index.ts +20 -3
  241. package/src/activities/generateSpeech/index.ts +25 -3
  242. package/src/activities/generateTranscription/index.ts +26 -3
  243. package/src/activities/generateVideo/index.ts +345 -82
  244. package/src/activities/middleware/index.ts +2 -0
  245. package/src/activities/middleware/run.ts +31 -0
  246. package/src/activities/middleware/types.ts +49 -5
  247. package/src/activities/stream-generation-result.ts +30 -2
  248. package/src/activities/summarize/chat-stream-summarize.ts +5 -0
  249. package/src/activities/summarize/index.ts +200 -10
  250. package/src/adapter-internals.ts +10 -1
  251. package/src/client.ts +244 -0
  252. package/src/custom-events.ts +107 -0
  253. package/src/delivery-detach.ts +72 -0
  254. package/src/delivery-disconnect.ts +84 -0
  255. package/src/index.ts +138 -1
  256. package/src/interrupt-resume.ts +824 -0
  257. package/src/interrupt-serialization.ts +183 -0
  258. package/src/interrupts.ts +146 -0
  259. package/src/locks.ts +17 -0
  260. package/src/logger/types.ts +1 -1
  261. package/src/middlewares/otel.ts +1 -0
  262. package/src/realtime/index.ts +5 -9
  263. package/src/scope.ts +47 -0
  264. package/src/stream-durability.ts +598 -0
  265. package/src/stream-to-response.ts +1051 -95
  266. package/src/strip-to-spec-middleware.ts +3 -3
  267. package/src/types.ts +405 -45
  268. package/src/utilities/chat-params.ts +245 -55
  269. package/dist/esm/activities/index.js.map +0 -1
  270. package/dist/esm/adapter-internals.js.map +0 -1
  271. package/dist/esm/index.js.map +0 -1
  272. package/dist/esm/middlewares/index.js.map +0 -1
@@ -1,49 +1,84 @@
1
- import { EventType } from "@ag-ui/core";
2
1
  import { toRunErrorPayload } from "./error-payload.js";
2
+ import { EventType } from "@ag-ui/core";
3
+ //#region src/activities/stream-generation-result.ts
4
+ /**
5
+ * Internal helper for wrapping one-shot generation results as StreamChunk
6
+ * async iterables. NOT exported from the package — used only by activity
7
+ * implementations to support `stream: true`.
8
+ */
3
9
  function createId(prefix) {
4
- return `${prefix}-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`;
10
+ return `${prefix}-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`;
11
+ }
12
+ /**
13
+ * Persisted artifact refs a middleware may have attached to the result. Read
14
+ * defensively: the result shape is activity-specific and `artifacts` is only
15
+ * present when generation persistence is wired with an artifact + blob store.
16
+ */
17
+ function artifactsFromResult(result) {
18
+ if (typeof result !== "object" || result === null) return void 0;
19
+ const artifacts = result.artifacts;
20
+ return Array.isArray(artifacts) && artifacts.length > 0 ? artifacts : void 0;
5
21
  }
22
+ /**
23
+ * Wrap a one-shot generation result as a StreamChunk async iterable.
24
+ *
25
+ * This allows non-streaming activities (image, speech, transcription, summarize)
26
+ * to be sent over the same streaming transport as chat.
27
+ *
28
+ * @param generator - An async function that performs the generation and returns the result
29
+ * @param options - Optional configuration (runId, threadId)
30
+ * @returns An AsyncIterable of StreamChunks with RUN_STARTED, CUSTOM(generation:result), and RUN_FINISHED events on success, or RUN_STARTED and RUN_ERROR on failure
31
+ */
6
32
  async function* streamGenerationResult(generator, options) {
7
- const runId = createId("run");
8
- const threadId = createId("thread");
9
- yield {
10
- type: EventType.RUN_STARTED,
11
- runId,
12
- threadId,
13
- timestamp: Date.now()
14
- };
15
- try {
16
- const result = await generator();
17
- yield {
18
- type: EventType.CUSTOM,
19
- name: "generation:result",
20
- value: result,
21
- timestamp: Date.now()
22
- };
23
- yield {
24
- type: EventType.RUN_FINISHED,
25
- runId,
26
- threadId,
27
- finishReason: "stop",
28
- timestamp: Date.now()
29
- };
30
- } catch (error) {
31
- const payload = toRunErrorPayload(error, "Generation failed");
32
- const codeFields = payload.code !== void 0 ? { code: payload.code } : void 0;
33
- yield {
34
- type: EventType.RUN_ERROR,
35
- message: payload.message,
36
- ...codeFields,
37
- // Deprecated nested form for backward compatibility
38
- error: {
39
- message: payload.message,
40
- ...codeFields
41
- },
42
- timestamp: Date.now()
43
- };
44
- }
33
+ const runId = options?.runId ?? createId("run");
34
+ const threadId = options?.threadId ?? createId("thread");
35
+ yield {
36
+ type: EventType.RUN_STARTED,
37
+ runId,
38
+ threadId,
39
+ timestamp: Date.now()
40
+ };
41
+ try {
42
+ const result = await generator({
43
+ runId,
44
+ threadId
45
+ });
46
+ const artifacts = artifactsFromResult(result);
47
+ if (artifacts) yield {
48
+ type: EventType.CUSTOM,
49
+ name: "generation:artifacts",
50
+ value: artifacts,
51
+ timestamp: Date.now()
52
+ };
53
+ yield {
54
+ type: EventType.CUSTOM,
55
+ name: "generation:result",
56
+ value: result,
57
+ timestamp: Date.now()
58
+ };
59
+ yield {
60
+ type: EventType.RUN_FINISHED,
61
+ runId,
62
+ threadId,
63
+ finishReason: "stop",
64
+ timestamp: Date.now()
65
+ };
66
+ } catch (error) {
67
+ const payload = toRunErrorPayload(error, "Generation failed");
68
+ const codeFields = payload.code !== void 0 ? { code: payload.code } : void 0;
69
+ yield {
70
+ type: EventType.RUN_ERROR,
71
+ message: payload.message,
72
+ ...codeFields,
73
+ error: {
74
+ message: payload.message,
75
+ ...codeFields
76
+ },
77
+ timestamp: Date.now()
78
+ };
79
+ }
45
80
  }
46
- export {
47
- streamGenerationResult
48
- };
49
- //# sourceMappingURL=stream-generation-result.js.map
81
+ //#endregion
82
+ export { streamGenerationResult };
83
+
84
+ //# sourceMappingURL=stream-generation-result.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"stream-generation-result.js","sources":["../../../src/activities/stream-generation-result.ts"],"sourcesContent":["/**\n * Internal helper for wrapping one-shot generation results as StreamChunk\n * async iterables. NOT exported from the package — used only by activity\n * implementations to support `stream: true`.\n */\n\nimport { EventType } from '@ag-ui/core'\nimport { toRunErrorPayload } from './error-payload'\nimport type { StreamChunk } from '../types'\n\nfunction createId(prefix: string): string {\n return `${prefix}-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`\n}\n\n/**\n * Wrap a one-shot generation result as a StreamChunk async iterable.\n *\n * This allows non-streaming activities (image, speech, transcription, summarize)\n * to be sent over the same streaming transport as chat.\n *\n * @param generator - An async function that performs the generation and returns the result\n * @param options - Optional configuration (runId, threadId)\n * @returns An AsyncIterable of StreamChunks with RUN_STARTED, CUSTOM(generation:result), and RUN_FINISHED events on success, or RUN_STARTED and RUN_ERROR on failure\n */\nexport async function* streamGenerationResult<TResult>(\n generator: () => Promise<TResult>,\n options?: { runId?: string; threadId?: string },\n): AsyncIterable<StreamChunk> {\n const runId = options?.runId ?? createId('run')\n const threadId = options?.threadId ?? createId('thread')\n\n yield {\n type: EventType.RUN_STARTED,\n runId,\n threadId,\n timestamp: Date.now(),\n }\n\n try {\n const result = await generator()\n\n yield {\n type: EventType.CUSTOM,\n name: 'generation:result',\n value: result as unknown,\n timestamp: Date.now(),\n }\n\n yield {\n type: EventType.RUN_FINISHED,\n runId,\n threadId,\n finishReason: 'stop',\n timestamp: Date.now(),\n }\n } catch (error: unknown) {\n const payload = toRunErrorPayload(error, 'Generation failed')\n // `code` is omitted entirely when undefined so the event matches the\n // AG-UI `code?: string` shape under `exactOptionalPropertyTypes`. The\n // deprecated nested `error` form preserves the same conditional\n // structure for backward compatibility.\n const codeFields =\n payload.code !== undefined ? { code: payload.code } : undefined\n yield {\n type: EventType.RUN_ERROR,\n message: payload.message,\n ...codeFields,\n // Deprecated nested form for backward compatibility\n error: {\n message: payload.message,\n ...codeFields,\n },\n timestamp: Date.now(),\n }\n }\n}\n"],"names":[],"mappings":";;AAUA,SAAS,SAAS,QAAwB;AACxC,SAAO,GAAG,MAAM,IAAI,KAAK,IAAA,CAAK,IAAI,KAAK,OAAA,EAAS,SAAS,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC;AAC1E;AAYA,gBAAuB,uBACrB,WACA,SAC4B;AAC5B,QAAM,QAA0B,SAAS,KAAK;AAC9C,QAAM,WAAgC,SAAS,QAAQ;AAEvD,QAAM;AAAA,IACJ,MAAM,UAAU;AAAA,IAChB;AAAA,IACA;AAAA,IACA,WAAW,KAAK,IAAA;AAAA,EAAI;AAGtB,MAAI;AACF,UAAM,SAAS,MAAM,UAAA;AAErB,UAAM;AAAA,MACJ,MAAM,UAAU;AAAA,MAChB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,WAAW,KAAK,IAAA;AAAA,IAAI;AAGtB,UAAM;AAAA,MACJ,MAAM,UAAU;AAAA,MAChB;AAAA,MACA;AAAA,MACA,cAAc;AAAA,MACd,WAAW,KAAK,IAAA;AAAA,IAAI;AAAA,EAExB,SAAS,OAAgB;AACvB,UAAM,UAAU,kBAAkB,OAAO,mBAAmB;AAK5D,UAAM,aACJ,QAAQ,SAAS,SAAY,EAAE,MAAM,QAAQ,SAAS;AACxD,UAAM;AAAA,MACJ,MAAM,UAAU;AAAA,MAChB,SAAS,QAAQ;AAAA,MACjB,GAAG;AAAA;AAAA,MAEH,OAAO;AAAA,QACL,SAAS,QAAQ;AAAA,QACjB,GAAG;AAAA,MAAA;AAAA,MAEL,WAAW,KAAK,IAAA;AAAA,IAAI;AAAA,EAExB;AACF;"}
1
+ {"version":3,"file":"stream-generation-result.js","names":[],"sources":["../../../src/activities/stream-generation-result.ts"],"sourcesContent":["/**\n * Internal helper for wrapping one-shot generation results as StreamChunk\n * async iterables. NOT exported from the package — used only by activity\n * implementations to support `stream: true`.\n */\n\nimport { EventType } from '@ag-ui/core'\nimport { toRunErrorPayload } from './error-payload'\nimport type { StreamChunk } from '../types'\n\nfunction createId(prefix: string): string {\n return `${prefix}-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`\n}\n\n/**\n * Persisted artifact refs a middleware may have attached to the result. Read\n * defensively: the result shape is activity-specific and `artifacts` is only\n * present when generation persistence is wired with an artifact + blob store.\n */\nfunction artifactsFromResult(result: unknown): Array<unknown> | undefined {\n if (typeof result !== 'object' || result === null) return undefined\n const artifacts = (result as { artifacts?: unknown }).artifacts\n return Array.isArray(artifacts) && artifacts.length > 0\n ? artifacts\n : undefined\n}\n\n/**\n * Wrap a one-shot generation result as a StreamChunk async iterable.\n *\n * This allows non-streaming activities (image, speech, transcription, summarize)\n * to be sent over the same streaming transport as chat.\n *\n * @param generator - An async function that performs the generation and returns the result\n * @param options - Optional configuration (runId, threadId)\n * @returns An AsyncIterable of StreamChunks with RUN_STARTED, CUSTOM(generation:result), and RUN_FINISHED events on success, or RUN_STARTED and RUN_ERROR on failure\n */\nexport async function* streamGenerationResult<TResult>(\n generator: (resolved: {\n runId: string\n threadId: string\n }) => Promise<TResult>,\n options?: { runId?: string; threadId?: string },\n): AsyncIterable<StreamChunk> {\n const runId = options?.runId ?? createId('run')\n const threadId = options?.threadId ?? createId('thread')\n\n yield {\n type: EventType.RUN_STARTED,\n runId,\n threadId,\n timestamp: Date.now(),\n }\n\n try {\n const result = await generator({ runId, threadId })\n\n // Emit persisted artifact refs (if a middleware attached any) before the\n // result, so the client records them as the run streams.\n const artifacts = artifactsFromResult(result)\n if (artifacts) {\n yield {\n type: EventType.CUSTOM,\n name: 'generation:artifacts',\n value: artifacts,\n timestamp: Date.now(),\n }\n }\n\n yield {\n type: EventType.CUSTOM,\n name: 'generation:result',\n value: result as unknown,\n timestamp: Date.now(),\n }\n\n yield {\n type: EventType.RUN_FINISHED,\n runId,\n threadId,\n finishReason: 'stop',\n timestamp: Date.now(),\n }\n } catch (error: unknown) {\n const payload = toRunErrorPayload(error, 'Generation failed')\n // `code` is omitted entirely when undefined so the event matches the\n // AG-UI `code?: string` shape under `exactOptionalPropertyTypes`. The\n // deprecated nested `error` form preserves the same conditional\n // structure for backward compatibility.\n const codeFields =\n payload.code !== undefined ? { code: payload.code } : undefined\n yield {\n type: EventType.RUN_ERROR,\n message: payload.message,\n ...codeFields,\n // Deprecated nested form for backward compatibility\n error: {\n message: payload.message,\n ...codeFields,\n },\n timestamp: Date.now(),\n }\n }\n}\n"],"mappings":";;;;;;;;AAUA,SAAS,SAAS,QAAwB;CACxC,OAAO,GAAG,OAAO,GAAG,KAAK,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC;AACzE;;;;;;AAOA,SAAS,oBAAoB,QAA6C;CACxE,IAAI,OAAO,WAAW,YAAY,WAAW,MAAM,OAAO,KAAA;CAC1D,MAAM,YAAa,OAAmC;CACtD,OAAO,MAAM,QAAQ,SAAS,KAAK,UAAU,SAAS,IAClD,YACA,KAAA;AACN;;;;;;;;;;;AAYA,gBAAuB,uBACrB,WAIA,SAC4B;CAC5B,MAAM,QAAQ,SAAS,SAAS,SAAS,KAAK;CAC9C,MAAM,WAAW,SAAS,YAAY,SAAS,QAAQ;CAEvD,MAAM;EACJ,MAAM,UAAU;EAChB;EACA;EACA,WAAW,KAAK,IAAI;CACtB;CAEA,IAAI;EACF,MAAM,SAAS,MAAM,UAAU;GAAE;GAAO;EAAS,CAAC;EAIlD,MAAM,YAAY,oBAAoB,MAAM;EAC5C,IAAI,WACF,MAAM;GACJ,MAAM,UAAU;GAChB,MAAM;GACN,OAAO;GACP,WAAW,KAAK,IAAI;EACtB;EAGF,MAAM;GACJ,MAAM,UAAU;GAChB,MAAM;GACN,OAAO;GACP,WAAW,KAAK,IAAI;EACtB;EAEA,MAAM;GACJ,MAAM,UAAU;GAChB;GACA;GACA,cAAc;GACd,WAAW,KAAK,IAAI;EACtB;CACF,SAAS,OAAgB;EACvB,MAAM,UAAU,kBAAkB,OAAO,mBAAmB;EAK5D,MAAM,aACJ,QAAQ,SAAS,KAAA,IAAY,EAAE,MAAM,QAAQ,KAAK,IAAI,KAAA;EACxD,MAAM;GACJ,MAAM,UAAU;GAChB,SAAS,QAAQ;GACjB,GAAG;GAEH,OAAO;IACL,SAAS,QAAQ;IACjB,GAAG;GACL;GACA,WAAW,KAAK,IAAI;EACtB;CACF;AACF"}
@@ -1,16 +1,23 @@
1
- class BaseSummarizeAdapter {
2
- kind = "summarize";
3
- model;
4
- config;
5
- constructor(config = {}, model) {
6
- this.config = config;
7
- this.model = model;
8
- }
9
- generateId() {
10
- return `${this.name}-${Date.now()}-${Math.random().toString(36).substring(7)}`;
11
- }
12
- }
13
- export {
14
- BaseSummarizeAdapter
1
+ //#region src/activities/summarize/adapter.ts
2
+ /**
3
+ * Abstract base class for summarize adapters.
4
+ * Extend this class to implement a summarize adapter for a specific provider.
5
+ *
6
+ * Generic parameters match SummarizeAdapter - all pre-resolved by the provider function.
7
+ */
8
+ var BaseSummarizeAdapter = class {
9
+ kind = "summarize";
10
+ model;
11
+ config;
12
+ constructor(config = {}, model) {
13
+ this.config = config;
14
+ this.model = model;
15
+ }
16
+ generateId() {
17
+ return `${this.name}-${Date.now()}-${Math.random().toString(36).substring(7)}`;
18
+ }
15
19
  };
16
- //# sourceMappingURL=adapter.js.map
20
+ //#endregion
21
+ export { BaseSummarizeAdapter };
22
+
23
+ //# sourceMappingURL=adapter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"adapter.js","sources":["../../../../src/activities/summarize/adapter.ts"],"sourcesContent":["import type {\n StreamChunk,\n SummarizationOptions,\n SummarizationResult,\n} from '../../types'\n\n/**\n * Configuration for summarize adapter instances\n */\nexport interface SummarizeAdapterConfig {\n apiKey?: string\n baseUrl?: string\n timeout?: number\n maxRetries?: number\n headers?: Record<string, string>\n}\n\n/**\n * Summarize adapter interface with pre-resolved generics.\n *\n * An adapter is created by a provider function: `provider('model')` → `adapter`\n * All type resolution happens at the provider call site, not in this interface.\n *\n * Generic parameters:\n * - TModel: The specific model name (e.g., 'gpt-4o')\n * - TProviderOptions: Provider-specific options (already resolved)\n */\nexport interface SummarizeAdapter<\n TModel extends string = string,\n TProviderOptions extends object = Record<string, unknown>,\n> {\n /** Discriminator for adapter kind - used by generate() to determine API shape */\n readonly kind: 'summarize'\n /** Adapter name identifier */\n readonly name: string\n /** The model this adapter is configured for */\n readonly model: TModel\n\n /**\n * @internal Type-only properties for inference. Not assigned at runtime.\n */\n '~types': {\n providerOptions: TProviderOptions\n }\n\n /**\n * Summarize the given text\n */\n summarize: (\n options: SummarizationOptions<TProviderOptions>,\n ) => Promise<SummarizationResult>\n\n /**\n * Stream summarization of the given text.\n * Optional - if not implemented, the activity layer will fall back to\n * non-streaming summarize and yield the result as a single chunk.\n */\n summarizeStream?: (\n options: SummarizationOptions<TProviderOptions>,\n ) => AsyncIterable<StreamChunk>\n}\n\n/**\n * A SummarizeAdapter with any/unknown type parameters.\n * Useful as a constraint in generic functions and interfaces.\n */\nexport type AnySummarizeAdapter = SummarizeAdapter<any, any>\n\n/**\n * Abstract base class for summarize adapters.\n * Extend this class to implement a summarize adapter for a specific provider.\n *\n * Generic parameters match SummarizeAdapter - all pre-resolved by the provider function.\n */\nexport abstract class BaseSummarizeAdapter<\n TModel extends string = string,\n TProviderOptions extends object = Record<string, unknown>,\n> implements SummarizeAdapter<TModel, TProviderOptions> {\n readonly kind = 'summarize' as const\n abstract readonly name: string\n readonly model: TModel\n\n // Type-only property - never assigned at runtime\n declare '~types': {\n providerOptions: TProviderOptions\n }\n\n protected config: SummarizeAdapterConfig\n\n constructor(config: SummarizeAdapterConfig = {}, model: TModel) {\n this.config = config\n this.model = model\n }\n\n abstract summarize(\n options: SummarizationOptions<TProviderOptions>,\n ): Promise<SummarizationResult>\n\n /**\n * Stream summarization of the given text.\n * Override this method in concrete implementations to enable streaming.\n * If not overridden, the activity layer will fall back to non-streaming.\n */\n summarizeStream?(\n options: SummarizationOptions<TProviderOptions>,\n ): AsyncIterable<StreamChunk>\n\n protected generateId(): string {\n return `${this.name}-${Date.now()}-${Math.random().toString(36).substring(7)}`\n }\n}\n"],"names":[],"mappings":"AA0EO,MAAe,qBAGkC;AAAA,EAC7C,OAAO;AAAA,EAEP;AAAA,EAOC;AAAA,EAEV,YAAY,SAAiC,CAAA,GAAI,OAAe;AAC9D,SAAK,SAAS;AACd,SAAK,QAAQ;AAAA,EACf;AAAA,EAeU,aAAqB;AAC7B,WAAO,GAAG,KAAK,IAAI,IAAI,KAAK,KAAK,IAAI,KAAK,OAAA,EAAS,SAAS,EAAE,EAAE,UAAU,CAAC,CAAC;AAAA,EAC9E;AACF;"}
1
+ {"version":3,"file":"adapter.js","names":[],"sources":["../../../../src/activities/summarize/adapter.ts"],"sourcesContent":["import type {\n StreamChunk,\n SummarizationOptions,\n SummarizationResult,\n} from '../../types'\n\n/**\n * Configuration for summarize adapter instances\n */\nexport interface SummarizeAdapterConfig {\n apiKey?: string\n baseUrl?: string\n timeout?: number\n maxRetries?: number\n headers?: Record<string, string>\n}\n\n/**\n * Summarize adapter interface with pre-resolved generics.\n *\n * An adapter is created by a provider function: `provider('model')` → `adapter`\n * All type resolution happens at the provider call site, not in this interface.\n *\n * Generic parameters:\n * - TModel: The specific model name (e.g., 'gpt-4o')\n * - TProviderOptions: Provider-specific options (already resolved)\n */\nexport interface SummarizeAdapter<\n TModel extends string = string,\n TProviderOptions extends object = Record<string, unknown>,\n> {\n /** Discriminator for adapter kind - used by generate() to determine API shape */\n readonly kind: 'summarize'\n /** Adapter name identifier */\n readonly name: string\n /** The model this adapter is configured for */\n readonly model: TModel\n\n /**\n * @internal Type-only properties for inference. Not assigned at runtime.\n */\n '~types': {\n providerOptions: TProviderOptions\n }\n\n /**\n * Summarize the given text\n */\n summarize: (\n options: SummarizationOptions<TProviderOptions>,\n ) => Promise<SummarizationResult>\n\n /**\n * Stream summarization of the given text.\n * Optional - if not implemented, the activity layer will fall back to\n * non-streaming summarize and yield the result as a single chunk.\n */\n summarizeStream?: (\n options: SummarizationOptions<TProviderOptions>,\n ) => AsyncIterable<StreamChunk>\n}\n\n/**\n * A SummarizeAdapter with any/unknown type parameters.\n * Useful as a constraint in generic functions and interfaces.\n */\nexport type AnySummarizeAdapter = SummarizeAdapter<any, any>\n\n/**\n * Abstract base class for summarize adapters.\n * Extend this class to implement a summarize adapter for a specific provider.\n *\n * Generic parameters match SummarizeAdapter - all pre-resolved by the provider function.\n */\nexport abstract class BaseSummarizeAdapter<\n TModel extends string = string,\n TProviderOptions extends object = Record<string, unknown>,\n> implements SummarizeAdapter<TModel, TProviderOptions> {\n readonly kind = 'summarize' as const\n abstract readonly name: string\n readonly model: TModel\n\n // Type-only property - never assigned at runtime\n declare '~types': {\n providerOptions: TProviderOptions\n }\n\n protected config: SummarizeAdapterConfig\n\n constructor(config: SummarizeAdapterConfig = {}, model: TModel) {\n this.config = config\n this.model = model\n }\n\n abstract summarize(\n options: SummarizationOptions<TProviderOptions>,\n ): Promise<SummarizationResult>\n\n /**\n * Stream summarization of the given text.\n * Override this method in concrete implementations to enable streaming.\n * If not overridden, the activity layer will fall back to non-streaming.\n */\n summarizeStream?(\n options: SummarizationOptions<TProviderOptions>,\n ): AsyncIterable<StreamChunk>\n\n protected generateId(): string {\n return `${this.name}-${Date.now()}-${Math.random().toString(36).substring(7)}`\n }\n}\n"],"mappings":";;;;;;;AA0EA,IAAsB,uBAAtB,MAGwD;CACtD,OAAgB;CAEhB;CAOA;CAEA,YAAY,SAAiC,CAAC,GAAG,OAAe;EAC9D,KAAK,SAAS;EACd,KAAK,QAAQ;CACf;CAeA,aAA+B;EAC7B,OAAO,GAAG,KAAK,KAAK,GAAG,KAAK,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,UAAU,CAAC;CAC7E;AACF"}