@trigger.dev/sdk 0.0.0-prerelease-20260302145933 → 0.0.0-prerelease-20260305142821

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 (38) hide show
  1. package/dist/commonjs/v3/ai.d.ts +347 -2
  2. package/dist/commonjs/v3/ai.js +563 -1
  3. package/dist/commonjs/v3/ai.js.map +1 -1
  4. package/dist/commonjs/v3/chat-constants.d.ts +10 -0
  5. package/dist/commonjs/v3/chat-constants.js +14 -0
  6. package/dist/commonjs/v3/chat-constants.js.map +1 -0
  7. package/dist/commonjs/v3/chat-react.d.ts +45 -0
  8. package/dist/commonjs/v3/chat-react.js +71 -0
  9. package/dist/commonjs/v3/chat-react.js.map +1 -0
  10. package/dist/commonjs/v3/chat.d.ts +241 -0
  11. package/dist/commonjs/v3/chat.js +343 -0
  12. package/dist/commonjs/v3/chat.js.map +1 -0
  13. package/dist/commonjs/v3/chat.test.d.ts +1 -0
  14. package/dist/commonjs/v3/chat.test.js +1557 -0
  15. package/dist/commonjs/v3/chat.test.js.map +1 -0
  16. package/dist/commonjs/v3/runs.d.ts +3 -3
  17. package/dist/commonjs/v3/streams.js +27 -17
  18. package/dist/commonjs/v3/streams.js.map +1 -1
  19. package/dist/commonjs/version.js +1 -1
  20. package/dist/esm/v3/ai.d.ts +347 -2
  21. package/dist/esm/v3/ai.js +564 -2
  22. package/dist/esm/v3/ai.js.map +1 -1
  23. package/dist/esm/v3/chat-constants.d.ts +10 -0
  24. package/dist/esm/v3/chat-constants.js +11 -0
  25. package/dist/esm/v3/chat-constants.js.map +1 -0
  26. package/dist/esm/v3/chat-react.d.ts +45 -0
  27. package/dist/esm/v3/chat-react.js +68 -0
  28. package/dist/esm/v3/chat-react.js.map +1 -0
  29. package/dist/esm/v3/chat.d.ts +241 -0
  30. package/dist/esm/v3/chat.js +338 -0
  31. package/dist/esm/v3/chat.js.map +1 -0
  32. package/dist/esm/v3/chat.test.d.ts +1 -0
  33. package/dist/esm/v3/chat.test.js +1555 -0
  34. package/dist/esm/v3/chat.test.js.map +1 -0
  35. package/dist/esm/v3/streams.js +27 -17
  36. package/dist/esm/v3/streams.js.map +1 -1
  37. package/dist/esm/version.js +1 -1
  38. package/package.json +40 -5
@@ -0,0 +1,343 @@
1
+ "use strict";
2
+ /**
3
+ * @module @trigger.dev/sdk/chat
4
+ *
5
+ * Browser-safe module for AI SDK chat transport integration.
6
+ * Use this on the frontend with the AI SDK's `useChat` hook.
7
+ *
8
+ * For backend helpers (`chatTask`, `pipeChat`), use `@trigger.dev/sdk/ai` instead.
9
+ *
10
+ * @example
11
+ * ```tsx
12
+ * import { useChat } from "@ai-sdk/react";
13
+ * import { TriggerChatTransport } from "@trigger.dev/sdk/chat";
14
+ *
15
+ * function Chat({ accessToken }: { accessToken: string }) {
16
+ * const { messages, sendMessage, status } = useChat({
17
+ * transport: new TriggerChatTransport({
18
+ * task: "my-chat-task",
19
+ * accessToken,
20
+ * }),
21
+ * });
22
+ * }
23
+ * ```
24
+ */
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.TriggerChatTransport = void 0;
27
+ exports.createChatTransport = createChatTransport;
28
+ const v3_1 = require("@trigger.dev/core/v3");
29
+ const chat_constants_js_1 = require("./chat-constants.js");
30
+ const DEFAULT_STREAM_KEY = "chat";
31
+ const DEFAULT_BASE_URL = "https://api.trigger.dev";
32
+ const DEFAULT_STREAM_TIMEOUT_SECONDS = 120;
33
+ /**
34
+ * A custom AI SDK `ChatTransport` that runs chat completions as durable Trigger.dev tasks.
35
+ *
36
+ * When `sendMessages` is called, the transport:
37
+ * 1. Triggers a Trigger.dev task (or sends to an existing run via input streams)
38
+ * 2. Subscribes to the task's realtime stream to receive `UIMessageChunk` data
39
+ * 3. Returns a `ReadableStream<UIMessageChunk>` that the AI SDK processes natively
40
+ *
41
+ * Calling `stop()` from `useChat` sends a stop signal via input streams, which
42
+ * aborts the current `streamText` call in the task without ending the run.
43
+ *
44
+ * @example
45
+ * ```tsx
46
+ * import { useChat } from "@ai-sdk/react";
47
+ * import { TriggerChatTransport } from "@trigger.dev/sdk/chat";
48
+ *
49
+ * function Chat({ accessToken }: { accessToken: string }) {
50
+ * const { messages, sendMessage, stop, status } = useChat({
51
+ * transport: new TriggerChatTransport({
52
+ * task: "my-chat-task",
53
+ * accessToken,
54
+ * }),
55
+ * });
56
+ *
57
+ * // stop() sends a stop signal — the task aborts streamText but keeps the run alive
58
+ * }
59
+ * ```
60
+ */
61
+ class TriggerChatTransport {
62
+ taskId;
63
+ resolveAccessToken;
64
+ baseURL;
65
+ streamKey;
66
+ extraHeaders;
67
+ streamTimeoutSeconds;
68
+ defaultMetadata;
69
+ _onSessionChange;
70
+ sessions = new Map();
71
+ constructor(options) {
72
+ this.taskId = options.task;
73
+ this.resolveAccessToken =
74
+ typeof options.accessToken === "function"
75
+ ? options.accessToken
76
+ : () => options.accessToken;
77
+ this.baseURL = options.baseURL ?? DEFAULT_BASE_URL;
78
+ this.streamKey = options.streamKey ?? DEFAULT_STREAM_KEY;
79
+ this.extraHeaders = options.headers ?? {};
80
+ this.streamTimeoutSeconds = options.streamTimeoutSeconds ?? DEFAULT_STREAM_TIMEOUT_SECONDS;
81
+ this.defaultMetadata = options.metadata;
82
+ this._onSessionChange = options.onSessionChange;
83
+ // Restore sessions from external storage
84
+ if (options.sessions) {
85
+ for (const [chatId, session] of Object.entries(options.sessions)) {
86
+ this.sessions.set(chatId, {
87
+ runId: session.runId,
88
+ publicAccessToken: session.publicAccessToken,
89
+ lastEventId: session.lastEventId,
90
+ });
91
+ }
92
+ }
93
+ }
94
+ sendMessages = async (options) => {
95
+ const { trigger, chatId, messageId, messages, abortSignal, body, metadata } = options;
96
+ const mergedMetadata = this.defaultMetadata || metadata
97
+ ? { ...(this.defaultMetadata ?? {}), ...(metadata ?? {}) }
98
+ : undefined;
99
+ const payload = {
100
+ ...(body ?? {}),
101
+ messages,
102
+ chatId,
103
+ trigger,
104
+ messageId,
105
+ metadata: mergedMetadata,
106
+ };
107
+ const session = this.sessions.get(chatId);
108
+ // If we have an existing run, send the message via input stream
109
+ // to resume the conversation in the same run.
110
+ if (session?.runId) {
111
+ try {
112
+ // Keep wire payloads minimal — the backend accumulates the full history.
113
+ // For submit-message: only send the new user message (always the last one).
114
+ // For regenerate-message: send full history so the backend can reset its accumulator.
115
+ const minimalPayload = {
116
+ ...payload,
117
+ messages: trigger === "submit-message" ? messages.slice(-1) : messages,
118
+ };
119
+ const apiClient = new v3_1.ApiClient(this.baseURL, session.publicAccessToken);
120
+ await apiClient.sendInputStream(session.runId, chat_constants_js_1.CHAT_MESSAGES_STREAM_ID, minimalPayload);
121
+ return this.subscribeToStream(session.runId, session.publicAccessToken, abortSignal, chatId);
122
+ }
123
+ catch {
124
+ // If sending fails (run died, etc.), fall through to trigger a new run.
125
+ this.sessions.delete(chatId);
126
+ this.notifySessionChange(chatId, null);
127
+ }
128
+ }
129
+ // First message or run has ended — trigger a new run
130
+ const currentToken = await this.resolveAccessToken();
131
+ const apiClient = new v3_1.ApiClient(this.baseURL, currentToken);
132
+ const triggerResponse = await apiClient.triggerTask(this.taskId, {
133
+ payload,
134
+ options: {
135
+ payloadType: "application/json",
136
+ },
137
+ });
138
+ const runId = triggerResponse.id;
139
+ const publicAccessToken = "publicAccessToken" in triggerResponse
140
+ ? triggerResponse.publicAccessToken
141
+ : undefined;
142
+ const newSession = {
143
+ runId,
144
+ publicAccessToken: publicAccessToken ?? currentToken,
145
+ };
146
+ this.sessions.set(chatId, newSession);
147
+ this.notifySessionChange(chatId, newSession);
148
+ return this.subscribeToStream(runId, publicAccessToken ?? currentToken, abortSignal, chatId);
149
+ };
150
+ reconnectToStream = async (options) => {
151
+ const session = this.sessions.get(options.chatId);
152
+ if (!session) {
153
+ return null;
154
+ }
155
+ return this.subscribeToStream(session.runId, session.publicAccessToken, undefined, options.chatId);
156
+ };
157
+ /**
158
+ * Get the current session state for a chat, suitable for external persistence.
159
+ *
160
+ * Returns `undefined` if no active session exists for this chatId.
161
+ * Persist the returned value to localStorage so it can be restored
162
+ * after a page refresh via `restoreSession()`.
163
+ *
164
+ * @example
165
+ * ```ts
166
+ * const session = transport.getSession(chatId);
167
+ * if (session) {
168
+ * localStorage.setItem(`session:${chatId}`, JSON.stringify(session));
169
+ * }
170
+ * ```
171
+ */
172
+ getSession = (chatId) => {
173
+ const session = this.sessions.get(chatId);
174
+ if (!session)
175
+ return undefined;
176
+ return {
177
+ runId: session.runId,
178
+ publicAccessToken: session.publicAccessToken,
179
+ lastEventId: session.lastEventId,
180
+ };
181
+ };
182
+ /**
183
+ * Update the `onSessionChange` callback.
184
+ * Useful for React hooks that need to update the callback without recreating the transport.
185
+ */
186
+ setOnSessionChange(callback) {
187
+ this._onSessionChange = callback;
188
+ }
189
+ notifySessionChange(chatId, session) {
190
+ if (!this._onSessionChange)
191
+ return;
192
+ if (session) {
193
+ this._onSessionChange(chatId, {
194
+ runId: session.runId,
195
+ publicAccessToken: session.publicAccessToken,
196
+ lastEventId: session.lastEventId,
197
+ });
198
+ }
199
+ else {
200
+ this._onSessionChange(chatId, null);
201
+ }
202
+ }
203
+ subscribeToStream(runId, accessToken, abortSignal, chatId) {
204
+ const headers = {
205
+ Authorization: `Bearer ${accessToken}`,
206
+ ...this.extraHeaders,
207
+ };
208
+ // When resuming a run, skip past previously-seen events
209
+ // so we only receive the new turn's response.
210
+ const session = chatId ? this.sessions.get(chatId) : undefined;
211
+ // Create an internal AbortController so we can terminate the underlying
212
+ // fetch connection when we're done reading (e.g. after intercepting the
213
+ // control chunk). Without this, the SSE connection stays open and leaks.
214
+ const internalAbort = new AbortController();
215
+ const combinedSignal = abortSignal
216
+ ? AbortSignal.any([abortSignal, internalAbort.signal])
217
+ : internalAbort.signal;
218
+ // When the caller aborts (user calls stop()), send a stop signal to the
219
+ // running task via input streams, then close the SSE connection.
220
+ if (abortSignal) {
221
+ abortSignal.addEventListener("abort", () => {
222
+ if (session) {
223
+ session.skipToTurnComplete = true;
224
+ const api = new v3_1.ApiClient(this.baseURL, session.publicAccessToken);
225
+ api
226
+ .sendInputStream(session.runId, chat_constants_js_1.CHAT_STOP_STREAM_ID, { stop: true })
227
+ .catch(() => { }); // Best-effort
228
+ }
229
+ internalAbort.abort();
230
+ }, { once: true });
231
+ }
232
+ const subscription = new v3_1.SSEStreamSubscription(`${this.baseURL}/realtime/v1/streams/${runId}/${this.streamKey}`, {
233
+ headers,
234
+ signal: combinedSignal,
235
+ timeoutInSeconds: this.streamTimeoutSeconds,
236
+ lastEventId: session?.lastEventId,
237
+ });
238
+ return new ReadableStream({
239
+ start: async (controller) => {
240
+ try {
241
+ const sseStream = await subscription.subscribe();
242
+ const reader = sseStream.getReader();
243
+ let chunkCount = 0;
244
+ try {
245
+ while (true) {
246
+ const { done, value } = await reader.read();
247
+ if (done) {
248
+ // Only delete session if the stream ended naturally (not aborted by stop).
249
+ // When the user clicks stop, the abort closes the SSE reader which
250
+ // returns done=true, but the run is still alive and waiting for
251
+ // the next message via input streams.
252
+ if (chatId && !combinedSignal.aborted) {
253
+ this.sessions.delete(chatId);
254
+ this.notifySessionChange(chatId, null);
255
+ }
256
+ controller.close();
257
+ return;
258
+ }
259
+ if (combinedSignal.aborted) {
260
+ internalAbort.abort();
261
+ await reader.cancel();
262
+ controller.close();
263
+ return;
264
+ }
265
+ // Track the last event ID so we can resume from here
266
+ if (value.id && session) {
267
+ session.lastEventId = value.id;
268
+ }
269
+ // Guard against heartbeat or malformed SSE events
270
+ if (value.chunk != null && typeof value.chunk === "object") {
271
+ const chunk = value.chunk;
272
+ // After a stop, skip leftover chunks from the stopped turn
273
+ // until we see the __trigger_turn_complete marker.
274
+ if (session?.skipToTurnComplete) {
275
+ if (chunk.type === "__trigger_turn_complete") {
276
+ session.skipToTurnComplete = false;
277
+ chunkCount = 0;
278
+ }
279
+ continue;
280
+ }
281
+ if (chunk.type === "__trigger_turn_complete" && chatId) {
282
+ // Notify with updated lastEventId before closing
283
+ if (session) {
284
+ this.notifySessionChange(chatId, session);
285
+ }
286
+ internalAbort.abort();
287
+ try {
288
+ controller.close();
289
+ }
290
+ catch {
291
+ // Controller may already be closed
292
+ }
293
+ return;
294
+ }
295
+ chunkCount++;
296
+ controller.enqueue(chunk);
297
+ }
298
+ }
299
+ }
300
+ catch (readError) {
301
+ reader.releaseLock();
302
+ throw readError;
303
+ }
304
+ }
305
+ catch (error) {
306
+ if (error instanceof Error && error.name === "AbortError") {
307
+ try {
308
+ controller.close();
309
+ }
310
+ catch {
311
+ // Controller may already be closed
312
+ }
313
+ return;
314
+ }
315
+ controller.error(error);
316
+ }
317
+ },
318
+ });
319
+ }
320
+ }
321
+ exports.TriggerChatTransport = TriggerChatTransport;
322
+ /**
323
+ * Creates a new `TriggerChatTransport` instance.
324
+ *
325
+ * @example
326
+ * ```tsx
327
+ * import { useChat } from "@ai-sdk/react";
328
+ * import { createChatTransport } from "@trigger.dev/sdk/chat";
329
+ *
330
+ * const transport = createChatTransport({
331
+ * task: "my-chat-task",
332
+ * accessToken: publicAccessToken,
333
+ * });
334
+ *
335
+ * function Chat() {
336
+ * const { messages, sendMessage } = useChat({ transport });
337
+ * }
338
+ * ```
339
+ */
340
+ function createChatTransport(options) {
341
+ return new TriggerChatTransport(options);
342
+ }
343
+ //# sourceMappingURL=chat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat.js","sourceRoot":"","sources":["../../../src/v3/chat.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};